fix(plugins): stabilize plugin tool schemas#91291
Conversation
|
Codex review: needs maintainer review before merge. Reviewed June 21, 2026, 2:59 PM ET / 18:59 UTC. Summary PR surface: Source +447, Tests +420. Total +867 across 9 files. Reproducibility: yes. from source: current main directly reads plugin-owned tool fields in plugin resolution, provider helper normalization/inspection, and MCP tool listing/wrapping, so throwing accessors can still abort those paths. No runtime command was run because this review is read-only. Review metrics: 2 noteworthy metrics.
Stored data model Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Rebase the split onto current main, preserve replaySafe/request-local plugin metadata semantics, rerun focused plugin/SDK/MCP checks plus the changed gate, and land only if maintainers accept the provider-helper quarantine contract. Do we have a high-confidence way to reproduce the issue? Yes from source: current main directly reads plugin-owned tool fields in plugin resolution, provider helper normalization/inspection, and MCP tool listing/wrapping, so throwing accessors can still abort those paths. No runtime command was run because this review is read-only. Is this the best way to solve the issue? Yes after rebase and maintainer acceptance: snapshotting at the plugin, provider-helper, registration, and MCP boundaries is the narrow maintainable fix. It is not merge-ready until the stale-base conflict and exported SDK compatibility decision are resolved. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against edd1d3319cce. Label changesLabel justifications:
Evidence reviewedPR surface: Source +447, Tests +420. Total +867 across 9 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
Closing this as part of the old fuzz-hardening cleanup. The branch only proves synthetic hostile-object states such as unreadable getters, proxies, or fabricated oversized collections; it has no linked production report or supported contract requiring those states. The proposed fail-soft behavior adds compatibility branches at downstream consumers, and several PRs in this cluster overlap. If a real plugin or provider reproduces the failure, please file the observed payload and stack so one canonical registration/parsing boundary can own validation. Thanks for the investigation. |
Summary
2a872029f02f,068518b4f117,8858b44278b5, and03f859237a88.Verification
node scripts/run-vitest.mjs run src/plugins/tools.optional.test.ts src/plugins/loader.test.ts src/plugin-sdk/provider-tools.test.ts src/mcp/plugin-tools-handlers.test.ts --reporter=dot./node_modules/.bin/oxfmt --check src/mcp/plugin-tools-handlers.test.ts src/mcp/plugin-tools-handlers.ts src/plugin-sdk/provider-tools.test.ts src/plugin-sdk/provider-tools.ts src/plugins/loader.test.ts src/plugins/registry.ts src/plugins/tool-metadata.ts src/plugins/tools.optional.test.ts src/plugins/tools.tsOPENCLAW_OXLINT_SKIP_PREPARE=1 node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/mcp/plugin-tools-handlers.test.ts src/mcp/plugin-tools-handlers.ts src/plugin-sdk/provider-tools.test.ts src/plugin-sdk/provider-tools.ts src/plugins/loader.test.ts src/plugins/registry.ts src/plugins/tool-metadata.ts src/plugins/tools.optional.test.ts src/plugins/tools.tsgit diff --check.agents/skills/autoreview/scripts/autoreview --mode branch --base origin/mainBehavior addressed
Real environment tested
Exact steps or command run after this patch
Evidence after fix
Observed result after fix
What was not tested
pnpm check:changedwas not run locally because this is a linked/sparse worktree and disk is currently tight; PR CI should cover the wider gate.