WS4: per-server mcpAllow (server:tool/server:*) with both-spelling
allows, trailing denies win, star never implies MCP, no suffix-strip
on allows. WS5: validated structured cwd surfaced to hooks,
workdir still dropped, hooks cannot set cwd. 15 new tests.
WS7 filed as anomalyco/opencode#55212; drift J kept.
Retain cwd/timeout on McpServerDef instead of silently dropping them,
warn on disabled/codemode/protocol/oauth and other keys with no
opencode equivalent. Document intentional divergences (E ${VAR} vs
{env:VAR}, G MCP perms fail-closed, J prompt-block 500) and harden
failed-tool feedback slicing. Adds D-1 warning-path unit test.
Verified: typecheck clean, 102 unit pass, e2e 32 pass 12 skip 0 fail.
Every tier runs opencode in a throwaway home directory against marketplaces pinned
in e2e/targets.lock.json.
- conformance: every entry of six marketplaces resolves and loads, and opencode
lists every component
- golden: component names match what real Claude Code lists for the same plugins
at the same commits (captured by e2e/oracle/capture.ts)
- scripted: a stub model exercises skills, commands, agents, MCP and hooks on a
fixture plugin and on unmodified official plugins
- live: the same plugins with a real model, skipped without a provider key
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Adds the c4o CLI and the opencode plugin behind it.
- spec: readers for plugin.json, the standard plugin layout and marketplace.json,
following the manifest and marketplace references
- store: marketplace add/update/remove and plugin install/enable/disable/uninstall,
with git, git-subdir and marketplace.json-URL sources and Claude Code's naming rules
- translate: skills, commands, agents and MCP servers as opencode values, plus a
report of what a plugin contributes and what cannot be carried over
- runtime: registers those with opencode v2 and runs command and http hooks for
PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, Stop, SubagentStop and SessionEnd
Co-Authored-By: Claude Opus 5.5 <[email protected]>