Conversation
…loaded skills The <recommended_plugins> user-turn fragment fired on every turn for any conversation that merely mentioned a plugin's domain keywords, and it could not tell that a loaded local skill already covered the domain — a takeover session talking about handoffs was nudged to install the handoff plugin four times in one evening. A plugin id is now suggested at most once per engine lifetime, and a plugin whose name (or alias) matches a skill in the session's catalogue is never suggested. Dismissals still apply. The suppression snapshot is taken at engine construction from the same catalogue the system prompt indexes (workspace roots + configured skills dir + plugin-sourced skills); a skill installed mid-session is not suppressed until the next engine starts (known limitation, documented on the gate). Closes #6274 Signed-off-by: CodeWhale Bot <bot@codewhale.net>
Every surface pinned the original MCP revision and the stdio client required an exact match, so current servers negotiating newer revisions could not connect. The server and both clients now advertise 2025-06-18 and negotiate over the supported set [2025-06-18, 2025-03-26, 2024-11-05]: the server echoes the client's revision when supported and answers with the latest otherwise, the stdio client accepts any supported revision, the main client validates the negotiated version against the set, and streamable HTTP sends the required MCP-Protocol-Version header on every post-initialize request. Verification (parallel lane receipt, this checkout): codewhale-mcp 79/79, codewhale-tui --lib mcp 425/425, cargo fmt --all -- --check clean; the existing 2024-11-05 and 2025-06-18 fixtures pass because both are in the accepted set. First half of #6280 (the 2026-07-28 rmcp layer follows). Signed-off-by: CodeWhale Bot <bot@codewhale.net>
…t-plugin.py --bundle <package-dir> consumes a real dsh npm bundle end to end: reads package.json -> dsh.bundle.patch -> parses cordis.patch.yml with !!js tags captured (never evaluated), applies the patch list with applyEntryPatches parity (insert, group inserts, keyed overrides), lowers the three !!js idioms (process.execPath -> node, process.env.X || 'literal', template paths), snapshots stdio arg host directories into mcp/<server>, imports dsh-skill-filesystem rows as customSkillDirs skills, and routes everything unportable into CONVERSION.md as named diagnostics instead of dropping it. Verified against our own codewhale-cu-plugin/integrations/dsh reference bundle (previously could not round-trip): 1 MCP declaration prepared, mcp/computer-use/server.mjs snapshotted from the installed app, tool timeout and version carried over. All 46 converter tests pass, including 6 new bundle-mode tests (patch evaluation, !!js lowering, group inserts, skill import, non-execution guarantees). Signed-off-by: CodeWhale Bot <bot@codewhale.net>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Claude finished @Hmbown's task in 6m 17s —— View job Claude finished reviewingTodo list
SummarySolid, well-scoped PR overall. The MCP negotiation change is clean and consistent across all four surfaces (mcp crate stdio server, mcp crate stdio client, TUI stdio client, TUI's own server/HTTP client), and each surface has a matching negotiation test. No provider/model-prefix routing logic is touched by this diff. Found one likely-broken new converter test and one real trust-boundary issue in the new bundle-mode path inference. Correctness
Trace: for the nested group row
This sandbox's Bash tool blocked all Security / trust boundary
Suggest either (a) requiring these paths be confirmed via an explicit Nice choices worth calling out
Note
|
First half of #6280 — lands the parallel lane's verified work. Not closing #6280 yet: the 2026-07-28 rmcp layer follows.
MCP negotiation (
3e4102d46): every surface advertised the original 2024-11-05 revision and the stdio client required an exact match. Now: server + both clients advertise 2025-06-18 and negotiate overMCP_SUPPORTED_PROTOCOL_VERSIONS = [2025-06-18, 2025-03-26, 2024-11-05]— the server echoes the client's revision when supported (latest otherwise), stdio accepts any supported revision, the main client validates the negotiated version, and streamable HTTP sends the requiredMCP-Protocol-Versionheader on every post-initialize request. An old Codewhale client against a new server still connects (it hears the version it asked for).Converter bundle mode (
6b7e4ac53):convert-plugin.py --bundle <package-dir>consumes a real dsh npm bundle — patch-list application withapplyEntryPatchesparity,!!jscapture-never-evaluate with the three idiom lowerings, host stdio directory snapshotting, skill import, and named diagnostics inCONVERSION.mdfor everything unportable.Verification (parallel lane receipts, this checkout):
codewhale-mcp79/79codewhale-tui --lib mcp425/425cargo fmt --all -- --checkcleancodewhale-cu-plugin/integrations/dshreference bundle that previously could not round-trip./scripts/sync-changelog.sh+node web/scripts/derive-changelog.mjsrun; regenerated files includedNote: includes no changes from the unrelated config/provider/client.rs lane still dirty in the shared tree — only the nine MCP/converter files plus changelog artifacts.
No-Issue: first half of #6280 only — the 2026-07-28 rmcp layer is what closes it, so this PR deliberately does not.