Skip to content

feat(opencode): V2 tools.post-execute alongside V1 trigger - #75

Merged
filipeforattini merged 1 commit into
mainfrom
feat/tools-post-execute-shim
Aug 21, 2026
Merged

feat(opencode): V2 tools.post-execute alongside V1 trigger#75
filipeforattini merged 1 commit into
mainfrom
feat/tools-post-execute-shim

Conversation

@filipeforattini

@filipeforattini filipeforattini commented Aug 21, 2026

Copy link
Copy Markdown

Adds SessionEvent.Tool.PostExecute (live event, type session.next.tool.post_execute) carrying { tool, sessionID, callID, args, output, failed } and fires it next to the existing V1 plugin.trigger('tool.execute.after', ...).

Why this matters

The V1 tool.execute.after hook is fire-and-forget — plugins can't get a return value or aggregate observations. The V2 tools.post-execute event uses the existing pub/sub machinery so plugins subscribe via events.subscribe/events.subscribeAll to attach telemetry, audit logs, or downstream side effects without registering a V1 plugin. The V1 hook continues to fire so existing plugins keep working.

Out of scope

  • commands.pre-execute for command.execute.before (veto/transform)
  • agent.pre-system for experimental.chat.system.transform
  • permission.request for permission.ask

Each is a focused V1→V2 shim using the same waterfall/parallel pattern from #70 #72 #73 #74.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Adds `SessionEvent.Tool.PostExecute` (live event, type `session.next.tool.post_execute`) carrying `{ tool, sessionID, callID, args, output, failed }` and fires it next to the existing V1 `plugin.trigger('tool.execute.after', ...)`.

Post-execute is observation-only — no veto, no transform (the call already happened). Plugins subscribe via `events.subscribe` or `events.subscribeAll` to attach telemetry, audit, or downstream side effects without needing a V1 plugin. The V1 hook continues to fire so existing plugins keep working.
@filipeforattini
filipeforattini merged commit 7375fb0 into main Aug 21, 2026
5 of 7 checks passed
@filipeforattini
filipeforattini deleted the feat/tools-post-execute-shim branch August 21, 2026 11:45
filipeforattini added a commit that referenced this pull request Aug 21, 2026
…77)

Adds `SessionEvent.Agent.PreSystem` (live waterfall event, type `session.next.agent.pre_system`) carrying `{ agent, sessionID, messageID, system }` and wires `EventV2Bridge.waterfall` into the agent generate dispatch next to the existing V1 `plugin.trigger('experimental.chat.system.transform', ...)`.

The waterfall currently has a single listener that delegates to the V1 trigger so existing plugins keep working. Listeners return `{ system }` to rewrite the system prompt; throwing short-circuits the generate. Same shim pattern as #70 #72 #75 #76. `EventV2Bridge` joins the Agent layer's deps so the generate function's new service requirement propagates cleanly; `cli/cmd/agent.ts` provisions the service when running the generate effect locally.
filipeforattini added a commit that referenced this pull request Aug 21, 2026
Adds `SessionEvent.Text.Complete` (live waterfall event, type `session.next.text.complete`) carrying `{ sessionID, messageID, partID, text }` and wires `EventV2Bridge.waterfall` into the text-complete dispatch next to the existing V1 `plugin.trigger('experimental.text.complete', ...)`.

The waterfall currently has a single listener that delegates to the V1 trigger so existing plugins keep working. Listeners return `{ text }` to transform the final text; throwing short-circuits the text part. Same shim pattern as #70 #72 #75 #76 #77 #78 #79.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant