6da102a11b
PendingAction.apply() and reject() now receive the reason string that was passed to resolve(). This lets custom tools surface the agent's rationale in their apply/discard output or use it for logging. - PendingAction interface: apply(reason) and reject?(reason) - CustomToolPendingAction: same signatures, reject is optional - CustomToolLoader: threads reject through when building PendingAction - AstEditTool: accepts _reason (unused, reserved for future tracing) - resolve.test: covers reason forwarding on apply and reject paths, and verifies reject return value replaces the default discard message - docs/resolve-tool-runtime.md: updated interface table, built-in producer description, usage example, and developer guidance