@khalilgharbaoui/opencode-claude-code-plugin 0.53.1 → 0.53.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@khalilgharbaoui/opencode-claude-code-plugin",
3
- "version": "0.53.1",
3
+ "version": "0.53.3",
4
4
  "description": "Claude Code CLI provider plugin for opencode",
5
5
  "homepage": "https://opencode-claude-code-plugin.dev/",
6
6
  "funding": {
@@ -140,7 +140,7 @@ Defaults below describe normal headless opencode use when the key is absent.
140
140
  | `strictMcpConfig` | boolean | `false` | Headless `--strict-mcp-config`: use only explicitly supplied MCP configs, ignoring other MCP sources, not all settings/credentials/hooks. The interactive wrapper adds it whenever it passes MCP paths, independently of this option. |
141
141
  | `hotReloadMcp` | boolean | `true` | With bridging on, compare merged MCP config/status at turn start and respawn on drift, so a server enabled, disabled or finished connecting since the spawn reaches the model. Keeps the session via `--resume` on both transports. Acts only at a safe boundary: never during compaction, and never while a proxied call is pending, a turn is in flight or a plan-mode approval is outstanding. Logs the joined and left server names at INFO. One respawn per conversation per `CLAUDE_CODE_MCP_HOT_RELOAD_COOLDOWN_MS` (default 60000) so a flapping server cannot respawn every turn. Does not reload arbitrary provider options or watch explicit `mcpConfig` contents. |
142
142
  | `mcpConnectWaitMs` | number | `3000` | How long the first turn waits for MCP servers the host reports as still connecting before planning the spawn without them. Only opencode 2 reports that state (`pending`); opencode 1's status call blocks until every server decides, so this is a no-op there and costs one status call as before. `0` disables the wait; negative or non-numeric values fall back to the default. Aborting the turn ends the wait at once, and the turn then spawns nothing. A server slower than the budget is still bridged (pending is not read as disabled) and `hotReloadMcp` brings a later one in on the next turn. |
143
- | `proxyOpencodeMcpTools` | boolean | `false` | Route opencode's MCP-backed tools through opencode's executor instead of Claude's own `--mcp-config` child, so each call is permission-prompted and rendered as an opencode tool row. Default changed `true` to `false` here, with no behaviour change: at `true` it routed nothing, because discovery read opencode's tool registry, which never contains MCP tools. Discovery now reads the model tool set opencode passes the provider, verified live on opencode 1.18.31 / Claude Code 2.1.263. **Tell the user to set `strictMcpConfig: true` alongside it**: a server also present in Claude Code's own config is reached directly and the proxy is bypassed, which looks exactly like the option doing nothing. A routed call runs with the calling agent's permissions. Servers whose tools are not found stay on the direct bridge and log a warning. Inert with `bridgeOpencodeMcp: false`, which leaves no bridged server list to match names against. Do not promise exactly-once side effects across failures, retries or opencode versions; verify routing before using write-capable tools. |
143
+ | `proxyOpencodeMcpTools` | boolean | `false` | Route opencode's MCP-backed tools through opencode's executor instead of Claude's own `--mcp-config` child, so each call is permission-prompted and rendered as an opencode tool row. Default changed `true` to `false` here, with no behaviour change: at `true` it routed nothing, because discovery read opencode's tool registry, which never contains MCP tools. Discovery now reads the model tool set opencode passes the provider, verified live on opencode 1.18.31 / Claude Code 2.1.263. **Tell the user to set `strictMcpConfig: true` alongside it**: a server also present in Claude Code's own config is reached directly and the proxy is bypassed, which looks exactly like the option doing nothing. A routed call runs with the calling agent's permissions. Per server: a tool in the agent's tool set means proxied; `connected` in opencode with none of its tools in the agent's set means left out of that spawn entirely (this is what keeps an `explore` subagent from starting its own copy of every MCP server and being handed servers opencode withheld from it); anything else keeps the direct bridge. One INFO line, `proxyOpencodeMcpTools: MCP servers outside this agent's tool set`, names the `withheld` and `bridged` lists. With the option off every enabled server is bridged into every spawn, subagents included: suggest turning it on when subagents start slowly or get MCP servers they should not have. Inert with `bridgeOpencodeMcp: false`, which leaves no bridged server list to match names against. Do not promise exactly-once side effects across failures, retries or opencode versions; verify routing before using write-capable tools. |
144
144
  | `proxyOpencodeTools` | string[] | `[]` | Forward explicitly named opencode tools (case-insensitive): V1 resolves registry ids; V2 resolves the current model tool snapshot and its actual JSON Schema, including synthesized Code Mode `execute`, without re-exposing tools absent from that snapshot. Covers plugin-declared tools such as DCP's `compress` and V2 Code Mode. Same broker as other proxies; collisions and unknown names warn. Explicit allowlist only, because calls run in opencode with the agent's permissions. `execute` grants access to the session's whole Code Mode catalog, not just MCP, and is refused by the read-only preset. |
145
145
  | `stripContextReminders` | boolean | `false` | Strip opencode-dcp `<dcp-system-reminder>` blocks from user/assistant message text, including the fresh-session rebuild. Only when no `compress` is proxied via `proxyTools` or `proxyOpencodeTools`; reachable compress makes it inert. Resolved from config, so a configured-but-unregistered name still counts as reachable. Leaves opencode's own `<system-reminder>` blocks alone. |
146
146
  | `multiStepContinuation` | boolean | `true` | Append a system-prompt hint to chain tool calls in one turn instead of stopping between subtasks. |
@@ -823,9 +823,12 @@ opencode 2 uses different envelopes and the plugin's tool descriptions follow th
823
823
  there a background dispatch answers in prose,
824
824
  `The subagent is working in the background (sessionID: ses_...)`, and the completion
825
825
  arrives as `<subagent sessionID="..." state="completed" description="...">`. The
826
- `sessionID` is the `task_id`. Both extra tools work on both majors (on opencode 2 over
826
+ `sessionID` is the `task_id`, and a cancel pushes the same envelope with
827
+ `state="cancelled"`. Both extra tools work on both majors (on opencode 2 over
827
828
  `session.context` and `session.interrupt`, the session routes a plugin is given there);
828
- verified live on 2.0.16.
829
+ verified live on 2.0.22, and before that on 2.0.16. With `subagentDispatch: "ask"` a
830
+ background dispatch is held for the same form a foreground one is and the answer reaches
831
+ the background child's own spawn, with the dispatch itself unchanged.
829
832
 
830
833
  Without it, opencode rejects a `background: true` call outright
831
834
  (`Background subagents require OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true`), losing
@@ -851,6 +854,10 @@ the opencode major, what decided it (the live `task` schema, a registry that did
851
854
  answer, or opencode 2 offering it unconditionally), and the background tasks this
852
855
  process has collected or cancelled. The gate is read while a turn plans its proxy tools,
853
856
  so a fresh process reports `Not read yet this process` until one message has been sent.
857
+ It opens with `running now: N (of M started by this process)`: the answer to "how many
858
+ subagents are working at once" when a user worries about overloading the machine or the
859
+ usage window. It counts only background dispatches Claude made through this opencode
860
+ process, uses `task_status`'s own running test, and never collects a result.
854
861
 
855
862
  ### Let Claude load the user's opencode skills
856
863
 
@@ -1109,7 +1116,8 @@ at 200 characters, because its stdout is spliced into the model's context. The p
1109
1116
  never passes `--include-hook-events`, so only `SessionStart` (and `Setup`) hooks are
1110
1117
  reported at all; `cancelled` is not a failure, since an abort produces it.
1111
1118
 
1112
- A **Background subagents** section is always printed: whether `background` was offered
1119
+ A **Background subagents** section is always printed: first `running now: N (of M
1120
+ started by this process)`, then whether `background` was offered
1113
1121
  to Claude and `task_status` / `task_cancel` registered, the opencode major, what decided
1114
1122
  it, and the background tasks this process collected or cancelled. It reads
1115
1123
  `Not read yet this process` until a turn has planned its proxy tools, which is not the