fix(runtime): snapshot tool definitions#90411
Conversation
|
Codex review: found issues before merge. Reviewed June 5, 2026, 9:46 AM ET / 13:46 UTC. Summary Reproducibility: no. high-confidence current-main repro was executed. Source inspection and the PR's focused tests show the hostile-accessor paths, but this read-only review did not run tests. Review metrics: 1 noteworthy metric.
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 findings
Review detailsBest possible solution: Land this after deep-snapshotting provider-like nested metadata, either documenting/approving or internalizing the new SDK projection export, and recording maintainer-approved toolChoice upgrade semantics with broad changed-surface proof. Do we have a high-confidence way to reproduce the issue? No high-confidence current-main repro was executed. Source inspection and the PR's focused tests show the hostile-accessor paths, but this read-only review did not run tests. Is this the best way to solve the issue? No. The hardening direction is plausible, but this exact branch is not the best merge shape until nested provider metadata is snapshotted and the public SDK/toolChoice compatibility decisions are resolved. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against 520992a1defd. Label changesLabel justifications:
Evidence reviewedWhat 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
|
6fb953a to
bd33c67
Compare
0eb94b6 to
ce32835
Compare
2df5e8e to
288a864
Compare
288a864 to
61a4962
Compare
61a4962 to
b0dde24
Compare
08ab04c to
0adce9a
Compare
|
Behavior addressed: trusted tool policy registrations now snapshot plugin-owned |
|
Behavior addressed: plugin tool metadata registrations now snapshot plugin-owned |
Proof update: node invoke policy snapshotsBehavior addressed: Plugin Real environment tested: Local linked OpenClaw worktree on branch Exact steps or command run after this patch:
Evidence after fix: Added Observed result after fix: Focused Vitest passed 1 shard / 1 file / 1 test. Oxfmt check, whitespace diff checks, targeted oxlint, and local autoreview all passed. Autoreview reported What was not tested: Broad |
Proof update: node host command snapshotsBehavior addressed: Plugin Real environment tested: Local linked OpenClaw worktree on branch Exact steps or command run after this patch:
Evidence after fix: Added Observed result after fix: Focused Vitest passed 1 shard / 1 file / 1 test. Oxfmt check, whitespace diff checks, targeted oxlint, and local autoreview all passed. Autoreview reported What was not tested: Broad |
Proof update: service registration snapshotsBehavior addressed: Plugin Real environment tested: Local linked OpenClaw worktree on branch Exact steps or command run after this patch:
Evidence after fix: Added Observed result after fix: Focused Vitest passed 1 shard / 1 file / 2 tests. Oxfmt check, whitespace diff checks, targeted oxlint, and final local autoreview all passed. Autoreview first caught receiver preservation and duplicate idempotence issues; both were fixed. Final autoreview reported What was not tested: Broad |
Proof update: gateway discovery service snapshotsBehavior addressed: Plugin Real environment tested: Local linked OpenClaw worktree on branch Exact steps or command run after this patch:
Evidence after fix: Added Observed result after fix: Focused Vitest passed 1 shard / 1 file / 2 tests. Oxfmt check, whitespace diff checks, targeted oxlint, and local autoreview all passed. Autoreview reported What was not tested: Broad |
Proof update: command registration snapshotsBehavior addressed: Plugin Real environment tested: Local linked OpenClaw worktree on branch Exact steps or command run after this patch:
Evidence after fix: Added Observed result after fix: Focused Vitest passed 1 shard / 1 file / 1 test. Oxfmt check, whitespace diff checks, targeted oxlint, and local autoreview all passed. Autoreview reported What was not tested: Broad |
Proof update: text transform snapshotsBehavior addressed: Plugin Real environment tested: Local linked OpenClaw worktree on branch Exact steps or command run after this patch:
Evidence after fix: Added Observed result after fix: Focused Vitest passed 1 shard / 1 file / 1 test. Oxfmt check, whitespace diff checks, targeted oxlint, and local autoreview all passed. Autoreview reported What was not tested: Broad |
|
Behavior addressed: CLI backend registrations now snapshot plugin-owned backend fields before runtime resolution, live-test lookup, text transform merging, or execution callbacks can re-read volatile getters. Real environment tested: local linked worktree on Exact steps or command run after this patch:
Evidence after fix: focused CLI backend contract test passed 1 shard / 1 file / 1 test; oxfmt passed; diff whitespace checks passed; targeted oxlint passed; autoreview reported no accepted/actionable findings and Observed result after fix: volatile CLI backend What was not tested: broad Testbox/Crabbox proof was not retried because this machine still has under 1 GiB free disk, below the sparse-sync wrapper safety floor. |
|
Behavior addressed: model catalog provider registrations now snapshot plugin-owned provider fields before stored catalog entries or same-plugin overlap merging can re-read volatile getters. Real environment tested: local linked worktree on Exact steps or command run after this patch:
Evidence after fix: focused model catalog contract test passed 1 shard / 1 file / 1 test; oxfmt passed; diff whitespace checks passed; targeted oxlint passed; autoreview reported no accepted/actionable findings and Observed result after fix: volatile model catalog What was not tested: broad Testbox/Crabbox proof was not retried because this machine still has under 1 GiB free disk, below the sparse-sync wrapper safety floor. |
|
Behavior addressed: shared provider-like registrations now snapshot plugin-owned provider fields before runtime capability paths or synthesized media/voice model catalogs can re-read volatile accessors. Real environment tested: local linked worktree on Exact steps or command run after this patch:
Evidence after fix: focused provider-like contract test passed 1 shard / 1 file / 3 tests; oxfmt passed; diff whitespace checks passed; targeted oxlint passed; final autoreview reported no accepted/actionable findings and Observed result after fix: provider-like registrations read ids once, snapshot explicit public provider fields per family, preserve class/prototype methods, preserve proxy-backed providers that do not enumerate fields, and feed synthesized media/voice catalogs from the stored snapshot. Runtime callbacks keep the original provider receiver. What was not tested: broad Testbox/Crabbox proof was not retried because this machine still has under 1 GiB free disk, below the sparse-sync wrapper safety floor. |
|
Behavior addressed: Embedding and memory embedding provider registrations now snapshot plugin-owned adapter ids and public runtime fields before storing registry/global entries, so later startup or turn-path lookups cannot re-read lazy or throwing adapter accessors. Memory embedding registration preserves the inactive dual-kind memory-slot skip before inspecting adapter fields. Real environment tested: Local linked OpenClaw worktree Exact steps or command run after this patch: node scripts/run-vitest.mjs run src/plugins/contracts/embedding-provider.contract.test.ts src/plugins/contracts/memory-embedding-provider.contract.test.ts --reporter=dot
OPENCLAW_OXLINT_SKIP_PREPARE=1 node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/plugins/registry.ts src/plugins/contracts/embedding-provider.contract.test.ts src/plugins/contracts/memory-embedding-provider.contract.test.ts
./node_modules/.bin/oxfmt --check src/plugins/registry.ts src/plugins/contracts/embedding-provider.contract.test.ts src/plugins/contracts/memory-embedding-provider.contract.test.ts
git diff --check
git diff --cached --check
.agents/skills/autoreview/scripts/autoreview --mode localEvidence after fix: Focused Vitest passed 2 files / 11 tests, including volatile embedding adapters, volatile memory embedding adapters, and inactive dual-kind memory adapters that must warn without reading Observed result after fix: Stored embedding adapters retain normalized ids, captured defaults, setup hooks, create callbacks, and memory auto-selection callbacks without repeated getter reads; callable fields still run with the original adapter receiver. What was not tested: Broad Crabbox/Testbox proof was not retried because local free disk remains below the sparse-sync wrapper's 1.00 GiB safety floor. |
|
Behavior addressed: Agent harness registration now snapshots plugin-owned harness ids and runtime fields before storing local/global registry entries. Direct Real environment tested: Local linked OpenClaw worktree Exact steps or command run after this patch: node scripts/run-vitest.mjs run src/plugins/contracts/agent-harness-registration.contract.test.ts src/agents/harness/registry.test.ts --reporter=dot
OPENCLAW_OXLINT_SKIP_PREPARE=1 node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/harness/registry.ts src/agents/harness/registry.test.ts src/plugins/registry.ts src/plugins/contracts/agent-harness-registration.contract.test.ts
./node_modules/.bin/oxfmt --check src/agents/harness/registry.ts src/agents/harness/registry.test.ts src/plugins/registry.ts src/plugins/contracts/agent-harness-registration.contract.test.ts
git diff --check
git diff --cached --check
.agents/skills/autoreview/scripts/autoreview --mode localEvidence after fix: Focused Vitest passed 2 shards, 2 files, 11 tests, including direct global harness registry coverage and plugin SDK harness registration coverage for volatile getters, owner attribution, runtime lookup, reset/dispose, Observed result after fix: Stored harness registrations expose stable What was not tested: Broad Crabbox/Testbox proof was not retried because local free disk remains below the sparse-sync wrapper's 1.00 GiB safety floor. |
|
Closing this draft in favor of the smaller reviewed replacement PRs:
Those carry the critical runtime-safety pieces from this stack with focused proof and autoreview. The remaining fuzz-hardening commits can be re-cut later only if they still justify their surface area. |
Summary
agent_endcompletion.ls/writefile tool error normalization so hostile filesystem/backend failures cannot crash tool error reporting or write prechecks.beforeToolCallmetadata failure formatting so hostile tool-call descriptors fail closed without crashing the session boundary.tool_callfailures staying fail-closed.ToolDefinitionand baseAgentToolsnapshot warning formatting so hostile schema failures cannot crash malformed-tool quarantine.Errorvalues with throwing JSON/string conversion cannot crash typed error cause creation.Erroraccessor failures cannot crash quarantine while reporting a skipped tool.Agentfailure-message construction so hostile model identity getters cannot crash terminal error state after a run failure.agentLoop()orCoreAgentHarnessterminal error reporting.api/provider/idgetters cannot crash the terminal assistant error message.provider/idgetters cannot throw before the stream error path is installed.provider/id/baseUrlgetters cannot throw before the stream error path is installed.api/provider/idgetters cannot throw before Responses, Azure Responses, or Completions stream error paths are installed.provider/idgetters cannot throw before the stream error path is installed.provider/id/baseUrlgetters cannot throw before the stream error path is installed.api/provider/idgetters cannot throw before the stream error path is installed.api/provider/idgetters cannot throw before the stream error path is installed.api/provider/idgetters cannot throw before the stream error path is installed.compataccessors fall back to detected defaults for non-routing fields, while unreadable OpenRouter/Vercel routing metadata fails closed before payload dispatch.provider/api/baseUrl/id/compataccessors cannot crash strict default resolution or Responses tool conversion.costor nested cost-field accessors cannot crash usage accounting.id/provideraccessors cannot crash session/model-selection equality checks.reasoning/thinkingLevelMapaccessors and hostile thinking-map entries cannot crash provider reasoning setup before content.id/provider/api/input/reasoningaccessors cannot crash conversion or leak thinking when target identity is unreadable.id/provider/api/inputaccessors cannot crash message conversion, output initialization, or request model naming.idaccessors cannot crash Gemini/Gemma thinking-level or budget selection.api/idaccessors cannot crash payload-hook sanitization.id/provider/compator compatsupportedReasoningEfforts/supportsReasoningEffort/reasoningEffortMapaccessors cannot crash reasoning payload setup.api,compat, orrequiresOpenAiAnthropicToolPayloadaccessors cannot crash tool-payload conversion setup.api/id/provider/baseUrl/contextWindow/compataccessors cannot crash extra-param, provider-policy, OpenAI, OpenRouter, or MiniMax wrapper setup before provider send.cacheRetention/cacheControlTtlaccessors and inherited cache config cannot crash stream-wrapper setup or masquerade as explicit config.maxTokens/max_completion_tokens/max_tokensaccessors are skipped and conflicting aliases fail closed if cleanup cannot be guaranteed.extra_body, andchat_template_kwargsfields are skipped without crashing turn setup.response_formatpayload copying so dynamic accessor fields fail closed and serializable schema fields keep the correct API shape.reasoning_contentbackfill while failing closed on unremovable reasoning fields.enable_thinking/chat_template_kwargsaccessors are replaced safely and unremovable unsupported reasoning fields fail closed.thinking: nullwhen possible and unpatchable payloads fail closed./btwpayload tools cleanup so unreadable configurable tool fields are removed and unremovable fields fail closed instead of breaking the side-question turn.strictremoved.toolChoice: "any"fails closed when quarantine leaves no callable declarations.Agentstate tools andprepareNextTurnreplacement contexts before provider exposure, sharing the same quarantine helper with the harness path.agentLoop/agentLoopContinuecontexts andprepareNextTurnreplacement contexts before provider exposure, covering low-level runtime callers belowAgent/CoreAgentHarness.CoreAgentHarnesstool registries before constructor/setter exposure so malformed SDK/runtime harness tools are skipped without killing healthy active tools.ToolDefinition/AgentToolwrappers before session startup so malformed registered definitions are quarantined per tool.toolChoicesemantics cannot be honored after quarantine.namegetter cannot abort later healthy registrations from the same plugin.createSession/resumeSession.tools/callavailability checks.defineToolPlugin()returned tool definitions so malformed SDK entries are skipped before static metadata and runtime registration while empty descriptions remain valid.tools/listcatalog snapshots so malformed MCP tool names or schemas cannot abort healthy sibling materialization.exec/waitsetup.Verification
8e1faccc4fa: active tool schema-normalization quarantine passed focused proof:./node_modules/.bin/oxfmt --check src/agents/agent-tools.ts src/agents/agent-tools.create-openclaw-coding-tools.test.ts src/agents/tool-schema-projection.ts src/agents/tool-schema-projection.test.ts src/agents/tools-effective-inventory.ts src/agents/tools-effective-inventory-build.ts src/agents/tools-effective-inventory.test.ts src/commands/doctor/shared/active-tool-schema-warnings.ts src/commands/doctor/shared/active-tool-schema-warnings.test.tsOPENCLAW_OXLINT_SKIP_PREPARE=1 node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-tools.ts src/agents/agent-tools.create-openclaw-coding-tools.test.ts src/agents/tool-schema-projection.ts src/agents/tool-schema-projection.test.ts src/agents/tools-effective-inventory.ts src/agents/tools-effective-inventory-build.ts src/agents/tools-effective-inventory.test.ts src/commands/doctor/shared/active-tool-schema-warnings.ts src/commands/doctor/shared/active-tool-schema-warnings.test.tsCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-tools.create-openclaw-coding-tools.test.ts src/agents/tool-schema-projection.test.ts src/agents/tools-effective-inventory.test.ts src/commands/doctor/shared/active-tool-schema-warnings.test.ts --reporter=dotpassed 3 shards, 4 files, 105 tests..agents/skills/autoreview/scripts/autoreview --mode localpassed withoverall: patch is correct (0.82).latest Plugin SDK provider tool-schema hook slice passed
src/plugin-sdk/provider-tools.test.tswith 15 tests; latest focused oxfmt, oxlint, SDK API baseline check,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugin-sdk/provider-tools.test.ts --reporter=dotbroad
OPENCLAW_TESTBOX=1 ... pnpm check:changedproof was not retried after this push because local free disk is 259 MiB, below the Crabbox sparse-sync wrapper's 1.00 GiB safety floor.latest agent-end side-effect error slice passed
src/agents/harness/agent-end-side-effects.test.tswith 3 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/harness/agent-end-side-effects.test.ts --reporter=dotbroad
OPENCLAW_TESTBOX=1 ... pnpm check:changedproof was not retried after this push because local free disk is 343 MiB, below the Crabbox sparse-sync wrapper's 1.00 GiB safety floor.latest harness hook error slice passed
src/agents/harness/lifecycle-hook-helpers.test.ts,src/agents/harness/prompt-compaction-hook-helpers.test.ts, andsrc/agents/harness/hook-helpers.test.tswith 19 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/harness/lifecycle-hook-helpers.test.ts src/agents/harness/prompt-compaction-hook-helpers.test.ts src/agents/harness/hook-helpers.test.ts --reporter=dotbroad
OPENCLAW_TESTBOX=1 ... pnpm check:changedproof was not retried after this push because local free disk is 415 MiB, below the Crabbox sparse-sync wrapper's 1.00 GiB safety floor.latest built-in file tool error slice passed
src/agents/sessions/tools/ls.test.ts,src/agents/sessions/tools/write.test.ts, andsrc/plugin-sdk/tool-plugin.test.tswith 18 tests after rebasing onto currentorigin/main; latest focused oxfmt, SDK API baseline check, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/tools/ls.test.ts src/agents/sessions/tools/write.test.ts src/plugin-sdk/tool-plugin.test.ts --reporter=dotbroad
OPENCLAW_TESTBOX=1 ... pnpm check:changedproof was not retried after this push because local free disk is 483 MiB, below the Crabbox sparse-sync wrapper's 1.00 GiB safety floor.latest built-in session tool error slice passed
src/agents/sessions/tools/edit.test.tsandsrc/agents/sessions/tools/find.test.tswith 9 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/tools/edit.test.ts src/agents/sessions/tools/find.test.ts --reporter=dotbroad
OPENCLAW_TESTBOX=1 ... pnpm check:changedproof was not retried after this push because local free disk is 610 MiB, below the Crabbox sparse-sync wrapper's 1.00 GiB safety floor.latest session storage error-recorder slice passed
src/agents/sessions/auth-storage.test.tsandsrc/agents/sessions/settings-manager.test.tswith 5 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/auth-storage.test.ts src/agents/sessions/settings-manager.test.ts --reporter=dotbroad
OPENCLAW_TESTBOX=1 ... pnpm check:changedproof was not retried after this push because local free disk is 638 MiB, below the Crabbox sparse-sync wrapper's 1.00 GiB safety floor.latest shared infra error formatter slice passed
src/infra/errors.test.tswith 28 tests; latest focused oxfmt, oxlint,git diff --check, and final autoreview passed after staging safe field copies before assignment.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/infra/errors.test.ts --reporter=dotbroad
OPENCLAW_TESTBOX=1 ... pnpm check:changedproof was not retried after this push because local free disk is 706 MiB, below the Crabbox sparse-sync wrapper's 1.00 GiB safety floor.latest bundle-MCP normalized error-cause slice passed
src/agents/agent-bundle-mcp-runtime.test.tswith 33 tests; latest focused oxfmt, oxlint,git diff --check, and final autoreview passed after covering the actual fallback branch.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-bundle-mcp-runtime.test.ts --reporter=dotbroad
OPENCLAW_TESTBOX=1 ... pnpm check:changedproof was not retried after this push because local free disk is 795 MiB, below the Crabbox sparse-sync wrapper's 1.00 GiB safety floor.latest MCP stdio transport error slice passed
src/agents/mcp-stdio-transport.test.tswith 9 tests; latest focused oxfmt, oxlint,git diff --check, and final autoreview passed after dropping hostileError.cause.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/mcp-stdio-transport.test.ts --reporter=dotbroad
OPENCLAW_TESTBOX=1 ... pnpm check:changedproof was not retried after this push because local free disk is 857 MiB, below the Crabbox sparse-sync wrapper's 1.00 GiB safety floor.latest bundle-MCP connection-error slice passed
src/agents/agent-bundle-mcp-runtime.test.tswith 33 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-bundle-mcp-runtime.test.ts --reporter=dotbroad
OPENCLAW_TESTBOX=1 ... pnpm check:changedproof was not retried after this push because local free disk is 941 MiB, below the Crabbox sparse-sync wrapper's 1.00 GiB safety floor.latest bundle-MCP error-classification slice passed
src/agents/agent-bundle-mcp-runtime.test.tswith 32 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-bundle-mcp-runtime.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-bundle-mcp-error-classification --shell -- "pnpm check:changed"selectedprovider=azurebut did not reach lease allocation because the local sparse-sync safety check found only 985.3 MiB free and requires at least 1.00 GiB.latest transport stream error-formatting slice passed
src/agents/transport-stream-shared.test.tswith 11 tests; latest focused oxfmt, oxlint,git diff --check, and final autoreview passed after addressing the proxyinstanceoffinding.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/transport-stream-shared.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-transport-error-formatting --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest pushed head
843076730a1merges currentorigin/mainand resolves the Plugin SDK API baseline/tool-plugin conflict; PR is mergeable again.post-merge focused proof passed:
./node_modules/.bin/oxfmt --check src/plugin-sdk/tool-plugin.ts src/plugin-sdk/provider-stream-shared.ts src/plugin-sdk/provider-stream-shared.test.ts;node --max-old-space-size=8192 --import tsx scripts/generate-plugin-sdk-api-baseline.ts --check;git diff --check && git diff --cached --check;node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/plugin-sdk/tool-plugin.ts src/plugin-sdk/provider-stream-shared.ts src/plugin-sdk/provider-stream-shared.test.ts;src/plugin-sdk/provider-stream-shared.test.tspassed 58 tests;src/plugin-sdk/tool-plugin.test.tspassed 8 tests.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-after-main-merge --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest provider stream error-formatting slice passed
src/plugin-sdk/provider-stream-shared.test.tswith 58 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugin-sdk/provider-stream-shared.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-provider-stream-error-formatting --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest inline extension factory error-formatting slice passed
src/agents/sessions/resource-loader.test.tswith 2 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/resource-loader.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-inline-extension-load-errors --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest session tool-call metadata slice passed
src/agents/sessions/sdk.test.tswith 10 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/sdk.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-session-tool-call-metadata --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest extension loader error-formatting slice passed
src/agents/sessions/extensions/loader.test.tswith 3 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/extensions/loader.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-extension-load-error-formatting --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest session extension error-formatting slice passed
src/agents/sessions/sdk.test.tswith 9 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/sdk.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-session-extension-error-formatting --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest extension runner error-formatting slice passed
src/agents/sessions/extensions/runner.test.tswith 1 test; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/extensions/runner.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-extension-runner-error-formatting --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest session tool snapshot error-formatting slice passed
src/agents/sessions/tools/tool-definition-wrapper.test.tswith 4 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/tools/tool-definition-wrapper.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-session-tool-snapshot-errors --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest before_tool_call error-formatting slice passed
src/agents/agent-tools.before-tool-call.e2e.test.tswith 50 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-tools.before-tool-call.e2e.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-before-tool-call-error-formatting --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest Code Mode host error-formatting slice passed
src/agents/code-mode.test.tswith 56 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/code-mode.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-code-mode-error-formatting --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest Agent Core harness error-normalization slice passed
packages/agent-core/src/harness/types.test.tswith 1 test; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run packages/agent-core/src/harness/types.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-harness-error-normalization --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest Agent Core tool-snapshot warning slice passed
packages/agent-core/src/tool-snapshot.test.tswith 1 test; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run packages/agent-core/src/tool-snapshot.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-tool-snapshot-error-formatting --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest Agent Core tool-error stringification slice passed
packages/agent-core/src/agent-loop.test.tswith 9 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run packages/agent-core/src/agent-loop.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-agent-core-tool-error-stringification --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest package
Agentfailure-message identity slice passedpackages/agent-core/src/agent.test.tswith 4 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run packages/agent-core/src/agent.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-agent-state-failure-identity --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest Agent Core failure-message identity slice passed
packages/agent-core/src/agent-loop.test.tsandpackages/agent-core/src/harness/agent-harness.test.tswith 10 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run packages/agent-core/src/agent-loop.test.ts packages/agent-core/src/harness/agent-harness.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-agent-core-failure-identity --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest built-in lazy provider load-error slice passed
src/llm/providers/register-builtins.test.tswith 2 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/register-builtins.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-lazy-provider-load-errors --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest OpenAI Codex Responses output identity slice passed
src/llm/providers/openai-chatgpt-responses.test.tswith 13 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/openai-chatgpt-responses.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-codex-responses-output-identity --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest Anthropic transport setup identity slice passed
src/agents/anthropic-transport-stream.test.tswith 54 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/anthropic-transport-stream.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-anthropic-transport-setup-identity --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest OpenAI transport output identity slice passed
src/agents/openai-transport-stream.test.tswith 250 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/openai-transport-stream.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-transport-output-identity --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest Google transport output identity slice passed
extensions/google/transport-stream.test.tswith 66 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/google/transport-stream.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-google-output-identity --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest Bedrock setup metadata slice passed
extensions/amazon-bedrock/stream.runtime.test.tswith 11 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/amazon-bedrock/stream.runtime.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-bedrock-setup-metadata --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest Anthropic output identity slice passed
src/llm/providers/anthropic.test.tswith 10 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/anthropic.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-anthropic-output-identity --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest Mistral output identity slice passed
src/llm/providers/mistral.test.tswith 5 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/mistral.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-mistral-output-identity --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest OpenAI Completions output identity slice passed
src/llm/providers/openai-completions.test.tswith 28 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/openai-completions.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-completions-output-identity --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest OpenAI Completions compat metadata slice passed
src/llm/providers/openai-completions.test.tswith 27 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed after fixing an autoreview-caught OpenRouter routing fail-open risk.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/openai-completions.test.ts --reporter=dotOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-completions-compat --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.latest OpenAI strict-tool metadata slice passed
src/agents/openai-strict-tool-setting.test.tsandsrc/llm/providers/openai-responses-shared.test.tswith 18 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/openai-strict-tool-setting.test.ts src/llm/providers/openai-responses-shared.test.ts --reporter=dotlatest shared model cost slice passed
src/llm/model-utils.test.tswith 8 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.latest shared model identity slice passed
src/llm/model-utils.test.tswith 5 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/model-utils.test.ts --reporter=dotlatest shared thinking metadata slice passed
src/llm/model-utils.test.tsandsrc/llm/providers/openai-responses-shared.test.tswith 18 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/model-utils.test.ts src/llm/providers/openai-responses-shared.test.ts --reporter=dotlatest OpenAI Responses conversion metadata slice passed
src/llm/providers/openai-responses-shared.test.tsandsrc/llm/providers/google-shared.convert.test.tswith 30 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed after fixing an autoreview-caught private-thinking downgrade leak.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/openai-responses-shared.test.ts src/llm/providers/google-shared.convert.test.ts --reporter=dotlatest Google conversion metadata slice passed
src/llm/providers/google-shared.convert.test.tswith 18 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/google-shared.convert.test.ts --reporter=dotlatest Google shared thinking model-id slice passed
src/llm/providers/google-shared.test.tswith 3 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/google-shared.test.ts --reporter=dotlatest Plugin SDK Google thinking metadata slice passed
src/plugin-sdk/provider-stream.test.tswith 8 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugin-sdk/provider-stream.test.ts --reporter=dotlatest OpenAI reasoning metadata slice passed
src/agents/openai-reasoning-effort.test.tswith 12 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/openai-reasoning-effort.test.ts --reporter=dotlatest Anthropic payload-compat metadata slice passed
src/llm/providers/stream-wrappers/anthropic-family-tool-payload-compat.test.tswith 5 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/stream-wrappers/anthropic-family-tool-payload-compat.test.ts --reporter=dotlatest model metadata slice passed 114 focused tests across
extra-params.cache-retention-default.test.ts,provider-attribution.test.ts,openai-responses-payload-policy.test.ts,minimax.test.ts,openai.test.ts, andproxy.test.ts; latest focused oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/embedded-agent-runner/extra-params.cache-retention-default.test.ts src/agents/provider-attribution.test.ts src/agents/openai-responses-payload-policy.test.ts src/llm/providers/stream-wrappers/minimax.test.ts src/llm/providers/stream-wrappers/openai.test.ts src/llm/providers/stream-wrappers/proxy.test.ts --reporter=dotlatest
src/agents/embedded-agent-runner/prompt-cache-retention.test.tspassed 11 tests; latest focused prompt-cache param oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/embedded-agent-runner/prompt-cache-retention.test.ts --reporter=dotlatest
src/agents/model-max-tokens-params.test.tspassed 3 tests; latest focused max-token alias oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/model-max-tokens-params.test.ts --reporter=dotlatest
src/agents/embedded-agent-runner/extra-params.sampling.test.tspassed 16 tests; latest focused extra-param payload oxfmt, oxlint,git diff --check, and autoreview passed after fixing an autoreview-caught explicit-empty prepared params regression.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/embedded-agent-runner/extra-params.sampling.test.ts --reporter=dotlatest
src/agents/openai-transport-stream.test.tspassed 249 tests; latest focused OpenAI response-format payload oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/openai-transport-stream.test.ts --reporter=dotlatest
extensions/vllm/stream.test.tspassed 20 tests; latest focused vLLM thinking payload oxfmt, oxlint,git diff --check, and autoreview passed after fixing autoreview-caught serialization-boundary and mixed-format regressions.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/vllm/stream.test.ts --reporter=dotlatest
extensions/fireworks/stream.test.tspassed 8 tests; latest focused Fireworks Kimi payload oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/fireworks/stream.test.ts --reporter=dotlatest
extensions/venice/index.test.tspassed 4 tests; latest focused Venice replay payload oxfmt, oxlint,git diff --check, and autoreview passed after correcting an autoreview-caught null backfill regression.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/venice/index.test.ts --reporter=dotlatest
extensions/openrouter/index.test.tspassed 33 tests; latest focused OpenRouter payload accessor oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/openrouter/index.test.ts --reporter=dotlatest
extensions/qwen/stream.test.tspassed 11 tests; latest focused Qwen thinking payload oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/qwen/stream.test.ts --reporter=dotlatest
src/llm/providers/stream-wrappers/moonshot.test.tsplussrc/agents/embedded-agent-runner-extraparams.test.tspassed 134 tests; latest focused SiliconFlow thinking payload oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/stream-wrappers/moonshot.test.ts src/agents/embedded-agent-runner-extraparams.test.ts --reporter=dotlatest
src/agents/btw.test.tspassed 35 tests; latest focused BTW payload tools oxfmt, oxlint,git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/btw.test.ts --reporter=dotlatest
src/llm/providers/stream-wrappers/minimax.test.tspassed 9 tests; latest focused MiniMax thinking payload oxfmt, oxlint,git diff --check, and autoreview passed after correcting an autoreview-caught fail-open setter path.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/stream-wrappers/minimax.test.ts --reporter=dotlatest
src/llm/providers/stream-wrappers/moonshot-thinking.test.tspassed 2 tests; latest focused Moonshot wrapper oxfmt, oxlint,git diff --check, and autoreview passed for payload field quarantine.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/stream-wrappers/moonshot-thinking.test.ts --reporter=dotlatest
src/llm/providers/stream-wrappers/anthropic-family-tool-payload-compat.test.tspassed 2 tests; latest focused wrapper oxfmt, oxlint,git diff --check, and autoreview passed for Anthropic-family payload tool quarantine.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/stream-wrappers/anthropic-family-tool-payload-compat.test.ts --reporter=dotlatest
extensions/xai/stream.test.tspassed 14 tests; latest focused XAI stream wrapper oxfmt, oxlint,git diff --check, and autoreview passed for payload tool-row quarantine.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/xai/stream.test.ts --reporter=dotlatest
extensions/amazon-bedrock/stream.runtime.test.tspassed 10 tests; latest focused Bedrock oxfmt, oxlint,git diff --check, and autoreview passed for forced toolChoice name quarantine.latest
src/llm/providers/google-shared.convert.test.tspassed 16 tests; latest focused Google shared converter oxfmt, oxlint,git diff --check, and autoreview passed after fixing shared-schema cycle,__proto__, and filtered forced-tool config findings.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/google-shared.convert.test.ts --reporter=dotlatest provider forced-toolChoice slice passed 103 focused tests across OpenAI completions, Mistral, Anthropic, and Google transport; latest focused provider oxfmt, oxlint,
git diff --check, and autoreview passed.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/openai-completions.test.ts src/llm/providers/mistral.test.ts src/llm/providers/anthropic.test.ts extensions/google/transport-stream.test.ts --reporter=dotlatest
src/agents/sessions/sdk.test.tspassed 8 tests; latest focused session oxfmt, oxlint,git diff --check, and autoreview passed for active-tool status quarantine.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/sdk.test.ts --reporter=dotlatest
src/llm/providers/stream-wrappers/openai.test.tspassed 24 tests; latest focused stream-wrapper oxfmt, oxlint,git diff --check, and autoreview passed for OpenAI payload tool quarantine.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/stream-wrappers/openai.test.ts --reporter=dotlatest
extensions/openai/openai-provider.test.tspassed 26 tests; latest focused OpenAI extension oxfmt, oxlint,git diff --check, and autoreview passed for native web-search payload quarantine.latest
src/agents/openai-transport-stream.test.tspassed 246 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed for Responses payload tool-name quarantine. OpenAI stream-wrapper Code Mode payload filtering and Responses web_search reasoning checks now ignore unreadable payload tool identity rows while preserving healthy exec/wait/search tools. AgentSession active-tool status readback now skips unreadable live state tool names while preserving healthy active tool names. Provider forced toolChoice handling now catches unreadable forced names and fails closed with sanitized provider-owned errors instead of surfacing raw getter failures or sending a bad forced choice.latest
src/agents/openai-tool-schema.test.tspassed 6 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed for OpenAI strict-schema diagnostic quarantine.latest
src/agents/code-mode.test.tspassed 55 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed for Code Mode catalog name quarantine.CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugins/commands.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run packages/agent-core/src/agent.test.ts packages/agent-core/src/harness/agent-harness.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run packages/agent-core/src/agent-loop.test.ts packages/agent-core/src/agent.test.ts packages/agent-core/src/harness/agent-harness.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/embedded-agent-runner/tool-name-allowlist.test.ts src/agents/embedded-agent-runner/system-prompt.test.ts src/agents/embedded-agent-runner/tool-schema-runtime.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/embedded-agent-runner/run/attempt-tool-construction-plan.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/tool-policy.test.ts src/agents/agent-tools.policy.test.ts src/agents/tool-policy-pipeline.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/runtime-plan/tools.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/embedded-agent-runner/tool-schema-runtime.test.ts src/agents/runtime-plan/tools.diagnostics.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-tool-definition-adapter.test.ts src/agents/agent-tool-definition-adapter.logging.test.ts src/agents/agent-tool-definition-adapter.after-tool-call.test.ts src/agents/agent-tool-definition-adapter.after-tool-call.fires-once.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/sessions/tools/tool-definition-wrapper.test.ts src/agents/sessions/extensions/loader.test.ts src/agents/sessions/sdk.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/talk/agent-consult-tool.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/openai/realtime-voice-provider.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/copilot/src/tool-bridge.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/mistral.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/anthropic.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/openai-completions.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugin-sdk/provider-stream-tool-names.test.ts extensions/ollama/src/stream-tool-snapshot.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/amazon-bedrock/stream.runtime.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/anthropic-transport-stream.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/embedded-agent-runner/google-prompt-cache.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/openai-transport-stream.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/google/transport-stream.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/google/realtime-voice-provider.test.ts --reporter=dot./node_modules/.bin/oxfmt --check --threads=1 src/plugins/command-registration.ts src/plugins/commands.test.ts./node_modules/.bin/oxfmt --check --threads=1 packages/agent-core/src/tool-snapshot.ts packages/agent-core/src/agent.ts packages/agent-core/src/agent.test.ts packages/agent-core/src/harness/agent-harness.ts packages/agent-core/src/harness/agent-harness.test.ts./node_modules/.bin/oxfmt --check --threads=1 packages/agent-core/src/agent-loop.ts packages/agent-core/src/agent-loop.test.ts packages/agent-core/src/tool-snapshot.ts packages/agent-core/src/agent.ts packages/agent-core/src/agent.test.ts packages/agent-core/src/harness/agent-harness.ts packages/agent-core/src/harness/agent-harness.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/embedded-agent-runner/tool-name-allowlist.ts src/agents/embedded-agent-runner/tool-name-allowlist.test.ts src/agents/embedded-agent-runner/system-prompt.ts src/agents/embedded-agent-runner/system-prompt.test.ts src/agents/embedded-agent-runner/tool-schema-runtime.ts src/agents/embedded-agent-runner/tool-schema-runtime.test.ts src/agents/embedded-agent-runner/run/attempt.ts src/agents/embedded-agent-runner/compact.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/runtime-plan/tools.ts src/agents/runtime-plan/tools.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/embedded-agent-runner/tool-schema-runtime.ts src/agents/embedded-agent-runner/tool-schema-runtime.test.ts src/agents/runtime-plan/tools.ts src/agents/runtime-plan/tools.diagnostics.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/embedded-agent-runner/run/attempt-tool-construction-plan.ts src/agents/embedded-agent-runner/run/attempt-tool-construction-plan.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/tool-policy.ts src/agents/tool-policy.test.ts src/agents/tool-policy-pipeline.ts src/agents/tool-policy-pipeline.test.ts src/agents/agent-tools.policy.ts src/agents/agent-tools.policy.test.ts src/agents/tool-policy-audit.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/agent-tool-definition-adapter.ts src/agents/agent-tool-definition-adapter.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/sessions/tools/tool-definition-wrapper.ts src/agents/sessions/tools/tool-definition-wrapper.test.ts src/agents/sessions/extensions/loader.ts src/agents/sessions/extensions/loader.test.ts src/agents/sessions/sdk.ts src/agents/sessions/sdk.test.ts src/agents/sessions/agent-session.ts./node_modules/.bin/oxfmt --check --threads=1 src/talk/agent-consult-tool.ts src/talk/agent-consult-tool.test.ts./node_modules/.bin/oxfmt --check --threads=1 extensions/openai/realtime-voice-provider.ts extensions/openai/realtime-voice-provider.test.ts./node_modules/.bin/oxfmt --check --threads=1 extensions/copilot/src/tool-bridge.ts extensions/copilot/src/tool-bridge.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/llm/providers/mistral.ts src/llm/providers/mistral.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/llm/providers/anthropic.ts src/llm/providers/anthropic.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/llm/providers/openai-completions.ts src/llm/providers/openai-completions.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/plugin-sdk/provider-stream-shared.ts src/plugin-sdk/provider-stream-tool-names.test.ts extensions/ollama/src/stream.ts extensions/ollama/src/stream-tool-snapshot.test.ts./node_modules/.bin/oxfmt --check --threads=1 extensions/amazon-bedrock/stream.runtime.ts extensions/amazon-bedrock/stream.runtime.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/anthropic-transport-stream.ts src/agents/anthropic-transport-stream.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/embedded-agent-runner/google-prompt-cache.ts src/agents/embedded-agent-runner/google-prompt-cache.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/openai-transport-stream.ts src/agents/openai-transport-stream.test.ts./node_modules/.bin/oxfmt --check --threads=1 extensions/google/transport-stream.ts extensions/google/transport-stream.test.ts./node_modules/.bin/oxfmt --check --threads=1 extensions/google/realtime-voice-provider.ts extensions/google/realtime-voice-provider.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/plugins/command-registration.ts src/plugins/commands.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json packages/agent-core/src/tool-snapshot.ts packages/agent-core/src/agent.ts packages/agent-core/src/agent.test.ts packages/agent-core/src/harness/agent-harness.ts packages/agent-core/src/harness/agent-harness.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json packages/agent-core/src/agent-loop.ts packages/agent-core/src/agent-loop.test.ts packages/agent-core/src/tool-snapshot.ts packages/agent-core/src/agent.ts packages/agent-core/src/agent.test.ts packages/agent-core/src/harness/agent-harness.ts packages/agent-core/src/harness/agent-harness.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/embedded-agent-runner/tool-name-allowlist.ts src/agents/embedded-agent-runner/tool-name-allowlist.test.ts src/agents/embedded-agent-runner/system-prompt.ts src/agents/embedded-agent-runner/system-prompt.test.ts src/agents/embedded-agent-runner/tool-schema-runtime.ts src/agents/embedded-agent-runner/tool-schema-runtime.test.ts src/agents/embedded-agent-runner/run/attempt.ts src/agents/embedded-agent-runner/compact.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/embedded-agent-runner/tool-schema-runtime.ts src/agents/embedded-agent-runner/tool-schema-runtime.test.ts src/agents/runtime-plan/tools.ts src/agents/runtime-plan/tools.diagnostics.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/runtime-plan/tools.ts src/agents/runtime-plan/tools.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-tool-definition-adapter.ts src/agents/agent-tool-definition-adapter.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/sessions/tools/tool-definition-wrapper.ts src/agents/sessions/tools/tool-definition-wrapper.test.ts src/agents/sessions/extensions/loader.ts src/agents/sessions/extensions/loader.test.ts src/agents/sessions/sdk.ts src/agents/sessions/sdk.test.ts src/agents/sessions/agent-session.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/talk/agent-consult-tool.ts src/talk/agent-consult-tool.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/openai/realtime-voice-provider.ts extensions/openai/realtime-voice-provider.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/copilot/src/tool-bridge.ts extensions/copilot/src/tool-bridge.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/llm/providers/mistral.ts src/llm/providers/mistral.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/llm/providers/anthropic.ts src/llm/providers/anthropic.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/llm/providers/openai-completions.ts src/llm/providers/openai-completions.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/plugin-sdk/provider-stream-shared.ts src/plugin-sdk/provider-stream-tool-names.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/ollama/src/stream.ts extensions/ollama/src/stream-tool-snapshot.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/amazon-bedrock/stream.runtime.ts extensions/amazon-bedrock/stream.runtime.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/anthropic-transport-stream.ts src/agents/anthropic-transport-stream.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/embedded-agent-runner/google-prompt-cache.ts src/agents/embedded-agent-runner/google-prompt-cache.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/openai-transport-stream.ts src/agents/openai-transport-stream.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/google/transport-stream.ts extensions/google/transport-stream.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/google/realtime-voice-provider.ts extensions/google/realtime-voice-provider.test.tsgit diff --check./node_modules/.bin/oxfmt --threads=1 src/plugins/tools.ts src/plugins/tools.optional.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugins/tools.optional.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/plugins/tools.ts src/plugins/tools.optional.test.ts.agents/skills/autoreview/scripts/autoreview --mode localnode scripts/crabbox-wrapper.mjs run --label check-changed-plugin-tool-schema-snapshot --shell -- "pnpm check:changed"(blocked before lease allocation: Crabbox coordinator HTTP 401 unauthorized)blacksmith testbox list --all(blocked: not authenticated)./node_modules/.bin/oxfmt --threads=1 src/plugins/registry.ts src/plugins/loader.test.tsand matching--checknode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/plugins/registry.ts src/plugins/loader.test.tsCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugins/loader.test.ts --reporter=dot -t "isolates unreadable implicit plugin tool registration names"CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugins/loader.test.ts --reporter=dot -t "supports legacy plugins subscribing to diagnostic events from the root sdk"./node_modules/.bin/oxfmt --threads=1 src/plugin-sdk/provider-tools.ts src/plugin-sdk/provider-tools.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugin-sdk/provider-tools.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/plugin-sdk/provider-tools.ts src/plugin-sdk/provider-tools.test.ts./node_modules/.bin/oxfmt --threads=1 src/mcp/plugin-tools-handlers.ts src/mcp/plugin-tools-handlers.test.ts src/plugins/tools.ts src/plugins/tool-metadata.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/mcp/plugin-tools-handlers.test.ts src/mcp/plugin-tools-serve.test.ts src/plugins/tools.optional.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/mcp/plugin-tools-handlers.ts src/mcp/plugin-tools-handlers.test.ts src/mcp/plugin-tools-serve.test.ts src/plugins/tools.ts src/plugins/tool-metadata.ts./node_modules/.bin/oxfmt --threads=1 src/agents/tool-schema-projection.ts src/agents/tool-schema-projection.test.ts src/plugin-sdk/agent-harness-runtime.ts extensions/codex/src/app-server/dynamic-tools.ts extensions/codex/src/app-server/dynamic-tools.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/tool-schema-projection.test.ts extensions/codex/src/app-server/dynamic-tools.test.ts --reporter=dotCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugin-sdk/agent-harness-runtime.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/tool-schema-projection.ts src/agents/tool-schema-projection.test.ts src/plugin-sdk/agent-harness-runtime.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/codex/src/app-server/dynamic-tools.ts extensions/codex/src/app-server/dynamic-tools.test.tsnode --max-old-space-size=8192 --import tsx scripts/generate-plugin-sdk-api-baseline.ts --check./node_modules/.bin/oxfmt --threads=1 src/agents/tool-schema-projection.ts src/agents/tool-schema-projection.test.ts extensions/codex/src/app-server/dynamic-tools.ts extensions/codex/src/app-server/dynamic-tools.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/tool-schema-projection.test.ts extensions/codex/src/app-server/dynamic-tools.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/tool-schema-projection.ts src/agents/tool-schema-projection.test.tsnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/codex/src/app-server/dynamic-tools.ts extensions/codex/src/app-server/dynamic-tools.test.tsnode --max-old-space-size=8192 --import tsx scripts/generate-plugin-sdk-api-baseline.ts --check./node_modules/.bin/oxfmt --threads=1 src/llm/providers/openai-responses-tools.ts src/llm/providers/openai-responses-shared.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/llm/providers/openai-responses-shared.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/llm/providers/openai-responses-tools.ts src/llm/providers/openai-responses-shared.test.ts./node_modules/.bin/oxfmt --threads=1 src/commands/doctor/shared/active-tool-schema-warnings.ts src/commands/doctor/shared/active-tool-schema-warnings.test.ts src/agents/tools-effective-inventory-build.ts src/agents/tools-effective-inventory.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/commands/doctor/shared/active-tool-schema-warnings.test.ts src/agents/tools-effective-inventory.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/commands/doctor/shared/active-tool-schema-warnings.ts src/commands/doctor/shared/active-tool-schema-warnings.test.ts src/agents/tools-effective-inventory-build.ts src/agents/tools-effective-inventory.test.ts.agents/skills/autoreview/scripts/autoreview --mode localnode scripts/crabbox-wrapper.mjs run --label check-changed-doctor-inventory-quarantine --shell -- "pnpm check:changed"(blocked before lease allocation: Crabbox coordinator HTTP 401 unauthorized)blacksmith testbox list --all(blocked: not authenticated)node scripts/crabbox-wrapper.mjs run --label check-changed-codex-dynamic-metadata --shell -- "pnpm check:changed"(blocked before sync/lease allocation: sparse-sync full-checkout preflight had <1 GiB free)agent-worktree-maintain --force, then the same Crabbox command again (still blocked before sync/lease allocation: 995.1 MiB free against the 1.00 GiB sparse-sync minimum)./node_modules/.bin/oxfmt --threads=1 src/agents/agent-tool-definition-adapter.ts src/agents/agent-tool-definition-adapter.test.ts src/agents/embedded-agent-runner/tool-name-allowlist.ts src/agents/embedded-agent-runner/tool-name-allowlist.test.ts src/agents/embedded-agent-runner/run/attempt.tool-search-run-plan.ts src/agents/embedded-agent-runner/run/attempt.tool-search-run-plan.test.ts src/agents/embedded-agent-runner/run/attempt.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-tool-definition-adapter.test.ts src/agents/embedded-agent-runner/tool-name-allowlist.test.ts src/agents/embedded-agent-runner/run/attempt.tool-search-run-plan.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-tool-definition-adapter.ts src/agents/agent-tool-definition-adapter.test.ts src/agents/embedded-agent-runner/tool-name-allowlist.ts src/agents/embedded-agent-runner/tool-name-allowlist.test.ts src/agents/embedded-agent-runner/run/attempt.tool-search-run-plan.ts src/agents/embedded-agent-runner/run/attempt.tool-search-run-plan.test.ts src/agents/embedded-agent-runner/run/attempt.ts.agents/skills/autoreview/scripts/autoreview --mode local(initial review found invalid client tools could still be counted as callable before conversion skipped them; fixed and reran clean)./node_modules/.bin/oxfmt --threads=1 src/agents/system-prompt-report.ts src/agents/system-prompt-report.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/system-prompt-report.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/system-prompt-report.ts src/agents/system-prompt-report.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(system prompt report slice clean)./node_modules/.bin/oxfmt --threads=1 extensions/codex/src/app-server/attempt-context.ts extensions/codex/src/app-server/attempt-context.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/codex/src/app-server/attempt-context.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/codex/src/app-server/attempt-context.ts extensions/codex/src/app-server/attempt-context.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(Codex prompt report slice clean)./node_modules/.bin/oxfmt --threads=1 extensions/codex/src/app-server/thread-lifecycle.ts extensions/codex/src/app-server/thread-lifecycle.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/codex/src/app-server/thread-lifecycle.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/codex/src/app-server/thread-lifecycle.ts extensions/codex/src/app-server/thread-lifecycle.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(Codex thread lifecycle slice clean)./node_modules/.bin/oxfmt --threads=1 extensions/codex/src/app-server/dynamic-tool-profile.ts extensions/codex/src/app-server/dynamic-tool-build.ts extensions/codex/src/app-server/dynamic-tool-build.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/codex/src/app-server/dynamic-tool-build.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/codex/src/app-server/dynamic-tool-profile.ts extensions/codex/src/app-server/dynamic-tool-build.ts extensions/codex/src/app-server/dynamic-tool-build.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(Codex dynamic filter slice clean)./node_modules/.bin/oxfmt --threads=1 extensions/codex/src/app-server/attempt-context.ts extensions/codex/src/app-server/attempt-context.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/codex/src/app-server/attempt-context.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/codex/src/app-server/attempt-context.ts extensions/codex/src/app-server/attempt-context.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(Codex memory-tool detection slice clean)./node_modules/.bin/oxfmt --threads=1 extensions/codex/src/app-server/dynamic-tool-profile.ts extensions/codex/src/app-server/vision-tools.ts extensions/codex/src/app-server/run-attempt.vision-tools.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/codex/src/app-server/run-attempt.vision-tools.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/codex/src/app-server/dynamic-tool-profile.ts extensions/codex/src/app-server/vision-tools.ts extensions/codex/src/app-server/run-attempt.vision-tools.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(initial review found a test type issue; fixed and reran clean)./node_modules/.bin/oxfmt --threads=1 extensions/codex/src/app-server/attempt-diagnostics.ts extensions/codex/src/app-server/attempt-diagnostics.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/codex/src/app-server/attempt-diagnostics.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/codex/src/app-server/attempt-diagnostics.ts extensions/codex/src/app-server/attempt-diagnostics.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(Codex model-call diagnostics slice clean)./node_modules/.bin/oxfmt --threads=1 extensions/codex/src/app-server/run-attempt.ts extensions/codex/src/app-server/run-attempt.context-engine.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/codex/src/app-server/run-attempt.context-engine.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/codex/src/app-server/run-attempt.ts extensions/codex/src/app-server/run-attempt.context-engine.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(Codex context-engine available-tools slice clean)./node_modules/.bin/oxfmt --threads=1 extensions/codex/src/app-server/trajectory.ts extensions/codex/src/app-server/trajectory.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/codex/src/app-server/trajectory.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/codex/src/app-server/trajectory.ts extensions/codex/src/app-server/trajectory.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(Codex trajectory tool-definition slice clean)./node_modules/.bin/oxfmt --threads=1 extensions/copilot/src/attempt.ts extensions/copilot/src/attempt.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run extensions/copilot/src/attempt.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/copilot/src/attempt.ts extensions/copilot/src/attempt.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(Copilot SDK session tool catalog slice clean)./node_modules/.bin/oxfmt --threads=1 src/agents/embedded-agent-runner/prompt-cache-observability.ts src/agents/embedded-agent-runner/prompt-cache-observability.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/embedded-agent-runner/prompt-cache-observability.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/embedded-agent-runner/prompt-cache-observability.ts src/agents/embedded-agent-runner/prompt-cache-observability.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(prompt-cache diagnostic tool-name slice clean)./node_modules/.bin/oxfmt --threads=1 src/agents/cli-runner.helpers.test.ts src/agents/cli-runner/helpers.ts src/agents/cli-runner/prepare.ts src/agents/cli-runner/prepare.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/cli-runner.helpers.test.ts src/agents/cli-runner/prepare.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/cli-runner.helpers.test.ts src/agents/cli-runner/helpers.ts src/agents/cli-runner/prepare.ts src/agents/cli-runner/prepare.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(CLI prompt tool-name slice clean)./node_modules/.bin/oxfmt --threads=1 src/agents/agent-tools.message-provider-policy.ts src/agents/agent-tools.message-provider-policy.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-tools.message-provider-policy.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-tools.message-provider-policy.ts src/agents/agent-tools.message-provider-policy.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(message-provider policy tool-name slice clean)./node_modules/.bin/oxfmt --threads=1 src/gateway/tool-resolution.ts src/gateway/tool-resolution.exclude.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/gateway/tool-resolution.exclude.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/gateway/tool-resolution.ts src/gateway/tool-resolution.exclude.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(gateway scoped tool-name slice clean after fixing test fixture casts)./node_modules/.bin/oxfmt --threads=1 src/gateway/server-methods/tools-catalog.ts src/gateway/server-methods/tools-catalog.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/gateway/server-methods/tools-catalog.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/gateway/server-methods/tools-catalog.ts src/gateway/server-methods/tools-catalog.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(gateway tool catalog metadata slice clean)./node_modules/.bin/oxfmt --threads=1 src/gateway/mcp-http.handlers.ts src/gateway/mcp-http.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/gateway/mcp-http.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/gateway/mcp-http.handlers.ts src/gateway/mcp-http.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(MCP loopback schema-name slice clean)./node_modules/.bin/oxfmt --threads=1 src/agents/tool-search.ts src/agents/tool-search.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/tool-search.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/tool-search.ts src/agents/tool-search.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(Tool Search catalog tool-name slice clean)./node_modules/.bin/oxfmt --threads=1 src/trajectory/runtime.ts src/trajectory/runtime.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/trajectory/runtime.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/trajectory/runtime.ts src/trajectory/runtime.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(trajectory tool-definition capture slice clean)./node_modules/.bin/oxfmt --threads=1 src/plugins/tool-descriptor-cache.ts src/plugins/tool-descriptor-cache.test.ts src/plugins/tools.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugins/tool-descriptor-cache.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/plugins/tool-descriptor-cache.ts src/plugins/tool-descriptor-cache.test.ts src/plugins/tools.ts.agents/skills/autoreview/scripts/autoreview --mode local(descriptor-cache metadata slice clean after review fix)./node_modules/.bin/oxfmt --threads=1 src/agents/tools-effective-inventory-build.ts src/agents/tools-effective-inventory.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/tools-effective-inventory.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/tools-effective-inventory-build.ts src/agents/tools-effective-inventory.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(effective-inventory metadata slice clean)./node_modules/.bin/oxfmt --threads=1 src/agents/tools-effective-mcp-inventory.ts src/agents/tools-effective-inventory.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/tools-effective-inventory.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/tools-effective-mcp-inventory.ts src/agents/tools-effective-inventory.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(MCP effective-inventory metadata slice clean)./node_modules/.bin/oxfmt --threads=1 src/plugin-sdk/tool-plugin.ts src/plugin-sdk/tool-plugin.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugin-sdk/tool-plugin.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/plugin-sdk/tool-plugin.ts src/plugin-sdk/tool-plugin.test.tsincluding plugin-sdk boundary DTS preparation.agents/skills/autoreview/scripts/autoreview --mode local(Plugin SDK tool-plugin slice clean after empty-description compatibility fix)./node_modules/.bin/oxfmt --threads=1 src/plugins/bundled-capability-runtime.ts src/plugins/bundled-capability-runtime.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/plugins/bundled-capability-runtime.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/plugins/bundled-capability-runtime.ts src/plugins/bundled-capability-runtime.test.tsincluding plugin-sdk boundary DTS preparation.agents/skills/autoreview/scripts/autoreview --mode local(bundled capability runtime captured-tool slice clean)./node_modules/.bin/oxfmt --threads=1 src/agents/agent-bundle-mcp-runtime.ts src/agents/agent-bundle-mcp-runtime.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-bundle-mcp-runtime.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-bundle-mcp-runtime.ts src/agents/agent-bundle-mcp-runtime.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(bundle-MCP listed-tool catalog slice clean)./node_modules/.bin/oxfmt --threads=1 src/agents/agent-bundle-mcp-materialize.ts src/agents/agent-bundle-mcp-tools.materialize.test.tsand matching--checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-bundle-mcp-tools.materialize.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-bundle-mcp-materialize.ts src/agents/agent-bundle-mcp-tools.materialize.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(bundle-MCP materialization slice clean after raw serverName review fix)./node_modules/.bin/oxfmt --threads=1 src/agents/code-mode-namespaces.ts src/agents/code-mode.test.tsand matching--checkgit diff --checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/code-mode.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/code-mode-namespaces.ts src/agents/code-mode.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(code-mode MCP namespace catalog slice clean)node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-code-mode --shell -- "pnpm check:changed"(blocked before lease allocation: Crabbox coordinator HTTP 401 unauthorized)./node_modules/.bin/oxfmt --threads=1 src/agents/agent-tools.before-tool-call.ts src/agents/agent-tools.before-tool-call.integration.e2e.test.tsand matching--checkgit diff --checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-tools.before-tool-call.integration.e2e.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-tools.before-tool-call.ts src/agents/agent-tools.before-tool-call.integration.e2e.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(before-tool-call wrapper slice clean after fail-closed fixes)node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-before-hook --shell -- "pnpm check:changed"(blocked before lease allocation: Crabbox coordinator HTTP 401 unauthorized)./node_modules/.bin/oxfmt --threads=1 src/agents/agent-tool-definition-adapter.ts src/agents/agent-tool-definition-adapter.test.tsand matching--checkgit diff --checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-tool-definition-adapter.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-tool-definition-adapter.ts src/agents/agent-tool-definition-adapter.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(agent tool definition execute slice clean)node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-adapter-execute --shell -- "pnpm check:changed"(blocked before lease allocation: Crabbox coordinator HTTP 401 unauthorized)./node_modules/.bin/oxfmt --threads=1 src/agents/agent-tools.abort.ts src/agents/agent-tools.abort.test.tsand matching--checkgit diff --checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-tools.abort.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-tools.abort.ts src/agents/agent-tools.abort.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(abort wrapper metadata slice clean)node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-abort-wrapper --shell -- "pnpm check:changed"(blocked before lease allocation: Crabbox coordinator HTTP 401 unauthorized)./node_modules/.bin/oxfmt --threads=1 src/agents/agent-tools.deferred-followup.ts src/agents/agent-tools.deferred-followup-guidance.test.tsand matching--checkgit diff --checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-tools.deferred-followup-guidance.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-tools.deferred-followup.ts src/agents/agent-tools.deferred-followup-guidance.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(deferred follow-up tool-name slice clean)node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-deferred-followup --shell -- "pnpm check:changed"(blocked before lease allocation: Crabbox coordinator HTTP 401 unauthorized)./node_modules/.bin/oxfmt --threads=1 src/agents/agent-tools.ts src/agents/local-model-lean.ts src/agents/agent-tools.model-provider-collision.test.tsand matching--checkgit diff --checkCI=1 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=30000 OPENCLAW_VITEST_NO_OUTPUT_HEARTBEAT_MS=10000 node scripts/run-vitest.mjs run src/agents/agent-tools.model-provider-collision.test.ts --reporter=dotnode scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/agents/agent-tools.ts src/agents/local-model-lean.ts src/agents/agent-tools.model-provider-collision.test.ts.agents/skills/autoreview/scripts/autoreview --mode local(restrictive filter name slice clean after fail-closed fixes)node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-filter-names --shell -- "pnpm check:changed"(blocked before lease allocation: Crabbox coordinator HTTP 401 unauthorized)OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-wrapper-payload --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-session-active-tools --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-forced-tool-choice --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-reasoning-metadata --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-google-thinking-metadata --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-google-thinking-model-ids --shell -- "pnpm check:changed"selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-google-conversion-metadata --shell -- "pnpm check:changed"first failed sparse-sync preflight with only 890.5 MiB free, then after clearing disposable npm cache selectedprovider=azureand failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-responses-conversion-metadata --shell -- "pnpm check:changed"selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, and failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-thinking-metadata --shell -- "pnpm check:changed"selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, and failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-model-identity --shell -- "pnpm check:changed"selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, and failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-model-cost --shell -- "pnpm check:changed"selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, and failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-strict-tool-metadata --shell -- "pnpm check:changed"selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, and failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.Real behavior proof
Behavior addressed: plugin command registration now handles unreadable command metadata as a failed registration and keeps later healthy commands registerable; stored optional metadata is copied before plugin-owned objects can mutate. Package-level
Agent, directagentLoop/agentLoopContinue, andCoreAgentHarnesstool registries now snapshot state, constructor, setter, prompt-run, continue-run, context-snapshot, andprepareNextTurnreplacement tools before turn-context exposure, so unreadable package SDK/runtime tool names or parameter schemas are skipped while healthy active tools remain available and schema payloads are cloned. Embedded-agent runtime name collection now guards session allowlists, bundle MCP/LSP reserved-name sets, bootstrap file-access detection, context-engine available-tool metadata, embedded prompt tool guidance, provider schema diagnostic formatting, prompt-cache observability snapshots, CLI system-prompt tool lists, and bundle-MCP reusable-session prompt-tool hashes, so unreadable toolnamegetters, non-string tool names, or client toolfunctiongetters cannot crash pre-provider setup, CLI preparation, or warning logs. Runtime-plan/provider normalization metadata copying now guards cloned normalized tool names and keeps same-index plugin provenance when a normalized target name becomes unreadable, so provider cleanup cannot crash before later quarantine. Provider and RuntimePlan tool-schema diagnostic hooks now warn and return when schema inspection throws, so best-effort diagnostics cannot abort the assistant turn before content. Embedded-attempt explicit allowlist filtering now captures readable names before policy matching and skips unreadable names, so bad bundle/plugin tools cannot crash allowlist filtering before runtime projection; throwing plugin metadata lookups are treated as missing metadata while exact healthy tool-name matches still work. Shared tool-policy paths now guard runtime tool name reads for inherited allowlist replacement, plugin-group expansion, core/plugin classification, configured filtering, message-provider filtering, gateway scoped filtering, and audit logging; tools whose policy-critical plugin metadata cannot be read are dropped fail-closed before plugin-id/group policy expansion, unreadable message-provider policy names are skipped before provider-specific allow/deny matching, and unreadable gateway scoped names are skipped before HTTP/loopback deny or exclusion matching, and unreadable gateway catalog plugin descriptors are skipped before Control UI/client catalog projection, and unreadable MCP loopback advertised schema names are skipped beforetools/callavailability checks. Core embedded-agent/session tool definitions now snapshot runtime tool metadata before registration, so unreadable runtime tool names or parameters are quarantined per tool while healthy session definitions remain available. Session extensionapi.registerTool, SDK custom tools,AgentSessionbase-tool overrides, andToolDefinition/AgentToolwrappers now snapshot registered definitions before session startup, preserve TypeBox metadata, keep top-levelundefinedschemas for no-argument/client tools, and skip malformed registered definitions without dropping healthy tools. Copilot bridge now snapshots bridged OpenClaw tools before SDK registration, allowlist filtering, duplicate detection, and direct conversion, so unreadable names or nested schemas are quarantined per tool while healthy bridged tools remain available. Custom realtime voice tools are snapshotted before provider exposure in shared Talk merging and in OpenAI and Google native/browser realtime sessions, so unreadable custom tool metadata or nested schema getters do not abort the realtime tool list, Live connect config, client-secret request body, or browser token constraints. Mistral, Anthropic provider, native Anthropic transport, OpenAI-compatible completions, OpenAI transport-owned Responses/Chat Completions, native Ollama, Amazon Bedrock, Google prompt-cache, and Google transport request tools are snapshotted before SDK/provider payload construction, so revoked descriptors, proxy schemas, and nested schema getters are skipped for normal requests while healthy tools remain available; explicit required providertoolChoicesettings fail closed when they point at quarantined or unavailable tools. The shared plain-text tool-call compatibility wrapper now ignores unreadable tool names while preserving healthy repair names. Manifest-backed plugin tool resolution now snapshots readable tool name/schema/execute metadata once, stabilizes live tool wrappers without violating non-configurable property invariants, preserves class-backed metadata/callback scoping, drops descriptor-trap tools fail-closed, and cached descriptor execution reuses cached schemas instead of rereading volatile runtime schemas. Plugin SDKapi.registerTool(objectTool)now treats an unreadable implicit object-tool name as a per-registration diagnostic, so later healthy tool registrations from the same plugin still load; explicit registration names are used without rereading the object tool name. provider-family schema helpers now quarantine unreadable provider plugin tool names/parameters during Gemini, OpenAI, and DeepSeek compatibility passes while preserving normalized tool enumerable fields. MCP plugin tool bridge construction now skips unreadable plugin-owned tool metadata per tool, avoids execute.bind reads, and preserves plugin ownership metadata on the wrapped snapshot. Codex dynamic tool bridge construction now quarantines unreadable runtime tool schemas before reading raw tool metadata, snapshots projected names/descriptions/schemas before bridge wrapping, and keeps healthy dynamic tools available. Shared OpenAI Responses tool conversion now skips unreadable or hostile tool schemas per tool while keeping healthy strict-compatible tools strict. Doctor and effective tool inventory quarantine warnings now keep plugin attribution for pre-normalization diagnostics even when the bad tool name is unreadable. Client-hosted tool descriptors are now filtered through the same runtime-compatible snapshot path before conflict checks, tool-search allowlist planning, bundle reserved-name reservation, and session conversion, so malformed hosted tool names/schemas cannot crash startup or satisfy an explicit allowlist before being quarantined. OpenClaw and Codex system prompt report generation now snapshot readable tool metadata defensively and skip unreadable tool descriptors, so prompt/session/attempt metadata accounting cannot abort a turn after prompt construction. Codex thread lifecycle startup now guards dynamic-tool names, deferred flags, and fingerprintable schema fields, so malformed dynamic specs cannot abort thread reuse checks or developer instruction rendering. Codex dynamic tool filtering now treats unreadable tool names as non-matching before bridge projection, so Codex-owned exclusions, memory-flush filters, sandbox/node shell alias selection, and explicit dynamic allowlists skip bad tools while healthy siblings survive. Codex workspace memory routing now uses the same guarded dynamic-tool name reader so a bad dynamic spec cannot abort bootstrap routing when healthy memory tools are present. Codex vision-input filtering now uses the guarded dynamic-tool name reader, so image-tool removal skips unreadable names without crashing when model vision and inbound images are active. Codex model-call diagnostic tool-definition capture now skips unreadable tool names and treats descriptions/schemas as best-effort, so private telemetry cannot abort a turn before the model call starts. Codex context-engine available-tool assembly now reads names through the guarded dynamic-tool reader, so unreadable specs are skipped before context policy sees them. Codex trajectory context capture now reads tool metadata defensively, so optional sidecar recording cannot abort attempt setup when tool getters throw. Copilot session config now builds SDKtoolsandavailableToolsfrom the same guarded catalog so malformed bridge output cannot crash session creation or leak into the allowlist. Tool Search catalog compaction now snapshots tool names/metadata before visible-control decisions, direct fallback filtering, catalog ids, and client-tool appends, so unreadable catalog tool names are skipped while healthy server/client tools remain usable. Trajectory runtime tool-definition capture now treats toolname,description, andparametersas best-effort sidecar metadata, so unreadable capture-only fields do not abort runtime event recording. Plugin descriptor-cache capture now reads required tool descriptor metadata defensively and skips uncapturable cache entries, while optional label/display summary metadata is best-effort, so hostile plugin cache capture cannot crash or make malformed tools visible only after cache warmup. Effective inventory and doctor-style tool reporting now snapshot readable names and display metadata before row construction, skip unreadable names, and treat label/description/displaySummary/plugin/channel attribution as best-effort so hostile inventory metadata cannot hide healthy tools or crash warnings. Bundle-MCP effective inventory now uses the same guarded display metadata snapshot pattern, so unreadable MCP tool names are skipped and hostile label/description/displaySummary getters cannot abort gateway/Control UI inventory rendering. Plugin SDKdefineToolPlugin()now snapshots returned tool definitions before metadata generation and registration, skipping malformed returned entries with unreadable names or missing handlers while preserving valid empty descriptions and healthy sibling tools. Bundled capability runtime registry assembly now reads captured tool names defensively, reports unreadable, blank, or non-string names per tool, and keeps healthy captured tools registered. Bundle-MCP catalog loading now snapshots readabletools/listnames and input schemas before filtering or materialization, skips malformed entries with catalog diagnostics, and treats title/description as best-effort display metadata. Bundle-MCP materialization now snapshots already-loaded catalog rows before sorting and agent-tool creation, skips malformed identity/schema rows, preserves raw server ids for runtime calls, and treats display metadata as best-effort. Code-mode MCP namespace projection now snapshots catalog rows before prompt, API-file, and runtime descriptor construction, skips malformed MCP rows, and keeps healthy siblings callable. Before-tool-call wrapping now fails closed when required tool name, execute, or enumerable wrapper metadata cannot be read, while unreadable optional prepare/finalize hooks remain best-effort. Agent tool definition adaptation now requires a readable callableexecuteduring definition snapshotting and invokes the snapshotted handler with the original receiver, so unreadable or non-callable executors are quarantined before hooks or model-facing session definitions can observe them. Abort-signal wrapping now reads executors defensively and avoids enumerating arbitrary tool metadata while preserving run-abort behavior for healthy tools. Deferred follow-up description rewriting now reads names defensively and replacesexec/processdescriptions without enumerating arbitrary tool fields. Restrictive name filters now fail closed on unreadable descriptors while suppressing managedweb_search, applying local-model lean denies, or narrowing memory-flush runs to read/write. OpenAI Responses conversion and assistant output setup now read model identity, input, and reasoning metadata defensively, preserve readable accessor-backed metadata, and drop private thinking when target model identity is unreadable instead of downgrading it into prompt text. Shared thinking-level utilities and OpenAI Responses common params now read model reasoning metadata defensively, so hostilereasoning,thinkingLevelMap, or thinking-map entry accessors cannot crash provider reasoning setup before content. Shared model identity comparison now readsidandproviderdefensively, so hostile identity accessors cannot crash session/model-selection equality checks before model setup continues. Shared model cost calculation now readscostand nested token-price fields defensively, so hostile cost metadata cannot crash usage accounting during provider closeout. OpenAI strict-tool default resolution and Responses tool conversion now read model strict-mode metadata defensively, so hostileprovider,api,baseUrl,id, orcompataccessors cannot crash tool-schema setup before provider send.Real environment tested: local linked OpenClaw gwt worktree on macOS; generated Vitest cache cleanup restored local disk enough for focused proof; broad Crabbox/Testbox gates remain blocked by coordinator/Testbox auth.
Exact steps or command run after this patch: ran focused plugin command, agent-core direct loop/Agent/harness, embedded-agent tool-name allowlist/system-prompt/tool-schema-runtime, runtime-plan tool metadata, core session tool-definition adapter, session wrapper/extension-loader/SDK, Copilot bridge, realtime voice consult, OpenAI realtime provider, Google realtime provider, Mistral provider, Anthropic provider, OpenAI-compatible completions provider, SDK provider-stream wrapper, Ollama stream snapshot, Amazon Bedrock stream, native Anthropic transport, Google prompt-cache, OpenAI transport, and Google transport Vitest files; scoped oxfmt checks; scoped oxlint checks;
git diff --check; local Codex autoreview; latest provider/runtime-plan diagnostic hook focused tests; embedded-attempt allowlist focused tests; shared tool-policy focused tests; and retried remotepnpm check:changedthrough Crabbox; latest Codex model-call diagnostics focused test; latest Codex context-engine available-tools focused test; latest Codex trajectory tool-definition focused test; latest Copilot SDK session tool catalog focused test; latest prompt-cache observability tool-name focused test; latest CLI prompt/hash tool-name focused tests; latest message-provider policy tool-name focused test; latest gateway scoped tool-name focused test; latest gateway catalog metadata focused test; latest MCP loopback schema-name focused test. latest Tool Search catalog tool-name focused test. latest trajectory runtime tool-definition focused test. latest plugin descriptor-cache metadata focused test. latest effective-inventory display-metadata focused test. latest MCP effective-inventory display-metadata focused test. latest Plugin SDK tool-plugin returned-definition focused test. latest bundled capability runtime captured-tool focused test. latest bundle-MCP listed-tool catalog focused test. latest bundle-MCP materialization focused test. latest code-mode MCP namespace catalog focused test and Crabbox changed-gate retry. latest before-tool-call wrapper focused test, autoreview reruns, and Crabbox changed-gate retry. latest agent tool definition execute focused test, formatter/lint proof, autoreview, and Crabbox changed-gate retry. latest abort-wrapper metadata focused test, formatter/lint proof, autoreview, and Crabbox changed-gate retry. latest deferred follow-up tool-name focused test, formatter/lint proof, autoreview, and Crabbox changed-gate retry. latest restrictive filter tool-name focused test, formatter/lint proof, autoreview after fail-closed fixes, and Crabbox changed-gate retry. latest OpenAI reasoning metadata focused test, formatter/lint proof, autoreview, and Crabbox changed-gate retry. latest Plugin SDK Google thinking metadata focused test, formatter/lint proof, autoreview, and Crabbox changed-gate retry. latest Google shared thinking model-id focused test, formatter/lint proof, autoreview, and Crabbox changed-gate retry. latest Google conversion metadata focused test, formatter/lint proof, autoreview, npm-cache cleanup for sparse sync, and Crabbox changed-gate retry. latest OpenAI Responses conversion metadata focused tests, formatter/lint proof, autoreview after privacy fix, and Crabbox changed-gate retry. latest shared thinking metadata focused tests, formatter/lint proof, autoreview, and Crabbox changed-gate retry. latest shared model identity focused test, formatter/lint proof, autoreview, and Crabbox changed-gate retry. latest shared model cost focused test, formatter/lint proof, autoreview, and Crabbox changed-gate retry. latest OpenAI strict-tool metadata focused tests, formatter/lint proof, autoreview, and Crabbox changed-gate retry.Evidence after fix:
src/plugins/commands.test.tspassed 51 tests;packages/agent-core/src/agent-loop.test.ts,packages/agent-core/src/agent.test.ts, andpackages/agent-core/src/harness/agent-harness.test.tspassed 11 tests;src/agents/embedded-agent-runner/tool-name-allowlist.test.ts,src/agents/embedded-agent-runner/system-prompt.test.ts, andsrc/agents/embedded-agent-runner/tool-schema-runtime.test.tspassed 24 tests across 2 shards;src/agents/runtime-plan/tools.test.tspassed 11 tests; latestsrc/agents/embedded-agent-runner/tool-schema-runtime.test.tsandsrc/agents/runtime-plan/tools.diagnostics.test.tspassed 7 tests; latestsrc/agents/embedded-agent-runner/run/attempt-tool-construction-plan.test.tspassed 23 tests; latestsrc/agents/tool-policy.test.ts,src/agents/agent-tools.policy.test.ts, andsrc/agents/tool-policy-pipeline.test.tspassed 90 tests across 2 shards; thesrc/agents/agent-tool-definition-adapter*.test.tscluster passed 37 tests across 2 shards;src/agents/sessions/tools/tool-definition-wrapper.test.ts,src/agents/sessions/extensions/loader.test.ts, andsrc/agents/sessions/sdk.test.tspassed 13 tests across 2 shards;extensions/copilot/src/tool-bridge.test.tspassed 66 tests;src/talk/agent-consult-tool.test.tspassed 9 tests;extensions/openai/realtime-voice-provider.test.tspassed 51 tests;extensions/google/realtime-voice-provider.test.tspassed 28 tests;src/llm/providers/mistral.test.tspassed 3 tests;src/llm/providers/anthropic.test.tspassed 8 tests;src/llm/providers/openai-completions.test.tspassed 24 tests;src/plugin-sdk/provider-stream-tool-names.test.tsandextensions/ollama/src/stream-tool-snapshot.test.tspassed 2 tests across 2 shards;extensions/amazon-bedrock/stream.runtime.test.tspassed 9 tests;src/agents/anthropic-transport-stream.test.tspassed 53 tests;src/agents/embedded-agent-runner/google-prompt-cache.test.tspassed 7 tests;src/agents/openai-transport-stream.test.tspassed 246 tests;extensions/google/transport-stream.test.tspassed 64 tests;src/commands/doctor/shared/active-tool-schema-warnings.test.tsandsrc/agents/tools-effective-inventory.test.tspassed 29 tests across 2 shards; latestsrc/agents/tool-schema-projection.test.tsandextensions/codex/src/app-server/dynamic-tools.test.tspassed 51 tests across 2 shards; oxfmt and oxlint exited clean; autoreview reported no accepted/actionable findings after review-driven fixes. latestsrc/agents/agent-tool-definition-adapter.test.ts,src/agents/embedded-agent-runner/tool-name-allowlist.test.ts, andsrc/agents/embedded-agent-runner/run/attempt.tool-search-run-plan.test.tspassed 44 tests in 1 shard; latest client-tool focused oxfmt, oxlint,git diff --check, and final autoreview passed after fixing the client-tool planning mismatch. latestsrc/agents/system-prompt-report.test.tspassed 13 tests; latest focused oxfmt, oxlint,git diff --check, and autoreview passed for prompt-report metadata quarantine. latestextensions/codex/src/app-server/attempt-context.test.tspassed 5 tests; latest focused extension oxfmt, oxlint,git diff --check, and autoreview passed for Codex prompt-report metadata quarantine. latestextensions/codex/src/app-server/thread-lifecycle.test.tspassed 54 tests; latest focused extension oxfmt, oxlint,git diff --check, and autoreview passed for Codex thread lifecycle dynamic-tool metadata quarantine. latestextensions/codex/src/app-server/dynamic-tool-build.test.tspassed 32 tests; latest focused extension oxfmt, oxlint,git diff --check, and autoreview passed for Codex dynamic filter name quarantine. latestextensions/codex/src/app-server/attempt-context.test.tspassed 6 tests; latest focused extension oxfmt, oxlint,git diff --check, and autoreview passed for Codex workspace memory tool-name quarantine. latestextensions/codex/src/app-server/run-attempt.vision-tools.test.tspassed 3 tests; latest focused extension oxfmt, oxlint,git diff --check, and final autoreview passed after fixing the test type issue. latestextensions/codex/src/app-server/attempt-diagnostics.test.tspassed 2 tests; latest focused extension oxfmt, oxlint,git diff --check, and autoreview passed for Codex model-call diagnostic metadata quarantine. latestextensions/codex/src/app-server/run-attempt.context-engine.test.tspassed 25 tests; latest focused extension oxfmt, oxlint,git diff --check, and autoreview passed for Codex context-engine available-tool quarantine. latestextensions/codex/src/app-server/trajectory.test.tspassed 8 tests; latest focused extension oxfmt, oxlint,git diff --check, and autoreview passed for Codex trajectory tool-definition quarantine. latestextensions/copilot/src/attempt.test.tspassed 90 tests; latest focused extension oxfmt, oxlint,git diff --check, and autoreview passed for Copilot SDK session tool catalog quarantine. latestsrc/agents/embedded-agent-runner/prompt-cache-observability.test.tspassed 8 tests; latest focused core oxfmt, oxlint,git diff --check, and autoreview passed for prompt-cache diagnostic tool-name quarantine. latestsrc/agents/cli-runner.helpers.test.tsandsrc/agents/cli-runner/prepare.test.tspassed 59 tests across 2 files; latest focused core oxfmt, oxlint,git diff --check, and autoreview passed for CLI prompt/hash tool-name quarantine. latestsrc/agents/agent-tools.message-provider-policy.test.tspassed 8 tests; latest focused core oxfmt, oxlint,git diff --check, and autoreview passed for message-provider policy tool-name quarantine. latestsrc/gateway/tool-resolution.exclude.test.tspassed 12 tests across 4 gateway shards after generated Vitest cache cleanup; latest focused gateway oxfmt, oxlint,git diff --check, and autoreview passed for gateway scoped tool-name quarantine. latestsrc/gateway/server-methods/tools-catalog.test.tspassed 14 tests across 2 gateway shards; latest focused gateway oxfmt, oxlint,git diff --check, and autoreview passed for gateway tool catalog metadata quarantine. latestsrc/gateway/mcp-http.test.tspassed 108 tests across 4 gateway shards; latest focused gateway oxfmt, oxlint,git diff --check, and autoreview passed for MCP loopback advertised schema-name quarantine. latestsrc/agents/tool-search.test.tspassed 26 tests; latest focused core oxfmt, oxlint,git diff --check, and autoreview passed for Tool Search catalog tool-name quarantine. latestsrc/trajectory/runtime.test.tspassed 13 tests; latest focused trajectory oxfmt, oxlint,git diff --check, and autoreview passed for sidecar tool metadata quarantine. latestsrc/plugins/tool-descriptor-cache.test.tspassed 7 tests; latest focused plugin oxfmt, oxlint,git diff --check, and autoreview passed after fixing the review-found required-description cache consistency bug. latestsrc/agents/tools-effective-inventory.test.tspassed 22 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed for effective-inventory metadata quarantine. latestsrc/agents/tools-effective-inventory.test.tspassed 23 tests; latest focused MCP inventory oxfmt, oxlint,git diff --check, and autoreview passed for bundled MCP inventory metadata quarantine. latestsrc/plugin-sdk/tool-plugin.test.tspassed 8 tests; latest focused SDK oxfmt, oxlint with plugin-sdk boundary DTS preparation,git diff --check, and autoreview passed after fixing the empty-description compatibility bug. latestsrc/plugins/bundled-capability-runtime.test.tspassed 2 tests; latest focused plugin oxfmt, oxlint with plugin-sdk boundary DTS preparation,git diff --check, and autoreview passed for bundled capability runtime captured-tool quarantine. latestsrc/agents/agent-bundle-mcp-runtime.test.tspassed 31 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed for bundle-MCP listed-tool catalog quarantine. latestsrc/agents/agent-bundle-mcp-tools.materialize.test.tspassed 12 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed after fixing the raw-serverName compatibility bug. latestsrc/agents/code-mode.test.tspassed 54 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed for code-mode MCP namespace catalog quarantine. latestsrc/agents/agent-tools.before-tool-call.integration.e2e.test.tspassed 23 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed after two fail-closed review fixes. latestsrc/agents/agent-tool-definition-adapter.test.tspassed 24 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed for agent tool definition execute quarantine. latestsrc/agents/agent-tools.abort.test.tspassed 2 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed for abort-wrapper metadata quarantine. latestsrc/agents/agent-tools.deferred-followup-guidance.test.tspassed 4 tests; latest focused agent oxfmt, oxlint,git diff --check, and autoreview passed for deferred follow-up metadata quarantine. latestsrc/agents/agent-tools.model-provider-collision.test.tspassed 15 tests; latest focused agent oxfmt, oxlint,git diff --check, and final autoreview passed after fixing two fail-open review findings.src/llm/providers/openai-responses-shared.test.tsandsrc/llm/providers/google-shared.convert.test.tspassed 30 tests; focused oxfmt, oxlint,git diff --check, and autoreview passed for the Responses conversion metadata slice.src/llm/model-utils.test.tsandsrc/llm/providers/openai-responses-shared.test.tspassed 18 tests; focused oxfmt, oxlint,git diff --check, and autoreview passed for the shared thinking metadata slice.src/llm/model-utils.test.tspassed 5 tests; focused oxfmt, oxlint,git diff --check, and autoreview passed for the shared model identity slice.src/llm/model-utils.test.tspassed 8 tests; focused oxfmt, oxlint,git diff --check, and autoreview passed for the shared model cost slice.src/agents/openai-strict-tool-setting.test.tsandsrc/llm/providers/openai-responses-shared.test.tspassed 18 tests; focused oxfmt, oxlint,git diff --check, and autoreview passed for the OpenAI strict-tool metadata slice.Observed result after fix: unreadable command
nativeNamesreturns a stable registration error and a following healthy command registers; unreadable package-levelAgent, directagentLoop/agentLoopContinue, andCoreAgentHarnesstool names and parameter schemas are skipped during initial state, direct state assignment, prompt/continue run setup, constructor/setter ingestion, andprepareNextTurncontext replacement while healthy active tools remain in the prompt turn context, TypeBox metadata is preserved, schema mutation after registration does not affect exposed tool payloads, and empty descriptions remain valid. Unreadable embedded-agent tool/client names are skipped during allowlist, reserved-name, system-prompt, context-engine, diagnostic-log, and prompt-cache diagnostic collection while healthy names remain visible. Provider-normalized tools with unreadable cloned names no longer crash metadata preservation and keep same-index bundle/plugin metadata for later attribution. ProviderinspectToolSchemasfailures and RuntimePlanlogDiagnosticsfailures now emit warning logs with guarded tool counts instead of throwing through assistant turn setup. Explicit embedded-attempt runtime allowlists now skip unreadable tool names, preserve healthy exact-name matches when plugin metadata lookup throws, and keep plugin-group expansion fail-closed for tools whose metadata cannot be read. Shared tool policy now skips unreadable names during inherited allowlist replacement, message-provider filtering, gateway scoped HTTP/loopback filtering, and audit logging, filters configured policies using guarded normalized names, preserves duplicate healthy tools after message-provider allow/deny rules, keeps healthy gateway tools such assessions_spawnafter excludingread, skips malformed plugin tool descriptors while preserving healthymatrix_roomandvoice_callcatalog rows, skips unreadable MCP advertised schema names while still executing a healthy advertisedmessagetool, and drops tools with unreadable plugin metadata before plugin/group deny expansion so deny policies do not fail open. Unreadable core session tool definition names or parameter schemas are skipped while healthy session definitions remain registered and exposed schema payloads are cloned; bad custom, extension-registered, and base override tool schemas are skipped while healthy session tools remain active; TypeBox metadata is preserved and no-argumentundefinedschemas are kept. Unreadable Copilot bridged tool schemas or names are skipped while healthy SDK tools remain registered and Copilot SDK parameter payloads are cloned/stringifiable; unreadable realtime custom tool names or nested schema getters are skipped while built-in/healthy tools remain provider-visible; OpenAI native websocketsession.update, browser client-secret bodies, Google Live connect configs, and Google browser token constraints preserve healthy tool schemas without throwing on bad siblings; Mistral, Anthropic provider, native Anthropic transport, OpenAI-compatible completions, OpenAI transport-owned Responses/Chat Completions, native Ollama, Amazon Bedrock, Google prompt-cache, and Google transport skip unreadable/proxy-backed request tools while preserving healthy tool payloads; required provider tool-choice settings fail closed instead of downgrading to unconstrained generation when the required tool is quarantined. Doctor and effective inventory now report the owning plugin for unreadable-name pre-normalization quarantines instead of falling back to a source-lesstool[0]warning. Codex dynamic tool specs, lookup, middleware, telemetry, and after-tool hooks use the projected tool name after schema projection, so revoked name/description/parameter descriptors cannot crash bridge wrapping or spec construction. Malformed client-hosted tools with unreadable function descriptors, non-string names, or unreadable parameters are skipped while healthy client tools still register; invalid client tools no longer count as callable for tool-search empty-allowlist checks before session conversion drops them. Codex model-call diagnostic tool-definition capture skips tools whose names cannot be read while still recording healthy sibling tools and parameter fallbacks. Codex context-engine available-tool construction skips unreadable tool names while preserving healthy names such asmessagefor context assembly. Codex trajectory context capture skips unreadable tool names, omits unreadable descriptions or schemas, and keeps healthy sibling tool definitions in the recorded sidecar. Copilot session config skips SDK tools whose name or parameters cannot be read, keeps healthy tool objects, and forwards the same filtered names toavailableTools. Prompt-cache observability skips unreadable and non-string tool names while keeping healthy trimmed names for cache-break diagnostics. CLI prompt building and bundle-MCP session reuse hashing skip unreadable and non-string tool names while keeping healthy trimmed names such asmemory_searchin the system prompt report and hash. Tool Search catalog compaction skips unreadable tool names before control filtering, hidden catalog registration, direct fallback exposure, and client-tool catalog appends while preserving healthy tools such asfake_safe_lookup,fake_direct_lookup, andclient_safe_lookup. Trajectory tool-definition capture skips unreadable names, omits unreadable descriptions/parameters, and still records healthy sorted tools such asguarded_toolandz-tool. Descriptor-cache capture ignores throwing optionallabel/displaySummarymetadata, skips unreadablenameanddescriptionrequired fields, and only appends successfully captured descriptors. Effective inventory skips an unreadable-name tool, preserves a readable sibling with hostile label/description/displaySummary getters asguarded_lookup, and still emits fallback label/description fields instead of throwing. Bundle-MCP effective inventory skips an unreadable-name MCP tool, preserves a readablemcp_lookupsibling with hostile display getters, and still emits fallback MCP inventory metadata instead of throwing.defineToolPlugin()skips an unreadable-name returned tool and a missing-handler returned tool before metadata/register while still registeringhealthy_tool, and preservesempty_description_toolwithdescription: "". Bundled capability runtime capture skips unreadable, blank, and non-string captured tool names with diagnostics while still registering the healthyhealthy_toolsibling and returning it from the registry factory. Bundle-MCP listed-tool cataloging skips unreadable, blank, and non-string tool names plus unreadableinputSchemaentries with diagnostics while preserving the healthy trimmedsafe_lookupsibling and ignoring hostile title/description getters. Bundle-MCP materialization skips hostile already-loaded catalog rows, keeps healthybundleProbe__safe_lookup, preserves rawserverNamefor execute factories, and uses fallback descriptions when display metadata is unreadable. Code-mode MCP namespace projection skips hostile catalog rows with throwing id/schema getters while prompt docs, API declaration files, runtime descriptors, and namespace invocation preserve only the healthy GitHub MCP sibling. Before-tool-call wrapping blocks unreadable tool names, unreadable execute accessors, and exploding ownKeys before policy hooks can be bypassed, while tools with readable identity still execute when optional prepare/finalize getters throw. Agent tool definition conversion skips unreadableexecutegetters and non-callableexecutevalues while preserving a healthy sibling definition, and healthy executors still run with their original tool receiver. Abort-signal wrapping skips unreadable or non-callable executors for later quarantine, does not enumerate hostile tool metadata while wrapping a readable executor, and still passes a combined abort signal into the healthy executor. Deferred follow-up rewriting skips unreadable tool names while keeping healthy cron guidance, and replaces anexecdescription without enumerating hostile metadata. Managedweb_searchsuppression, local-model lean filtering, and memory-flush filtering now skip unreadable names without crashing; the restrictive policies keep healthyread/execor read/write siblings as appropriate. Code Mode catalog filtering now drops unreadable-name descriptors before compaction while still exposingexec/waitand cataloging healthy shell/plugin tools. OpenAI strict-schema diagnostics now fall back totool[index]for unreadable names and treat unreadable parameters as strict-incompatible so strict mode downgrades instead of aborting setup. OpenAI Responses payload debug summaries and Code Mode payload enforcement now ignore throwing payload tool-name getters while preserving healthyexec/waitrows. OpenAI native web-search payload patching now drops unreadable payload tool identity rows, removes managedweb_search, preserves healthy tools, and still injects nativeweb_search. Google shared provider conversion now skips unreadable names/descriptions and revoked or throwing schemas, preserves shared sub-schemas and own__proto__data properties, keeps legacy meta stripping, and fails closed for forcedanywhen no valid declarations survive. Bedrock forced toolChoice handling now fails closed when the forced name accessor throws instead of treating the request as unconstrained while healthy tools remain available. XAI payload tool compatibility now drops unreadable tool rows during strict-flag cleanup while preserving healthy function declarations and continuing reasoning/payload normalization. Anthropic-family payload compatibility now skips unreadable tool rows and removes unreadable payloadtools/tool_choicefields while preserving healthy converted OpenAI function tool definitions. Moonshot thinking payload normalization now tolerates unreadablethinking,tool_choice,model, andthinking.keepfields, removes unreadable object-shaped tool choices, and still applies configured thinking overrides. MiniMax thinking payload fuzzing now proves configurable hostile accessors are patched to disabled thinking, while unpatchable non-configurable accessors fail closed before the user payload hook. BTW payload fuzzing now proves empty tools arrays are stripped, unreadable configurable tools fields are removed, and unremovable tools fields fail closed before send. SiliconFlow payload fuzzing now provesthinking="off"rewrites tonull, unreadable configurable thinking fields are replaced, and unpatchable thinking fields fail closed before send. Qwen payload fuzzing now proves hostile configurableenable_thinkingandchat_template_kwargsfields are replaced safely, while unremovable OpenAI reasoning fields fail closed before send. OpenRouter payload fuzzing now proves hostile configurable provider routing fields are replaced safely, unpatchable provider routing fails closed, and Anthropic prefill stripping tolerates unreadable trailing assistanttool_calls. Venice payload fuzzing now proves hostile configurable replay fields are cleaned, nullreasoning_contentis still backfilled to an empty string, and unremovable reasoning fields fail closed before send. Fireworks payload fuzzing now proves hostile configurablethinkingfields are replaced safely and unremovable reasoning fields fail closed before send. vLLM payload fuzzing now proves hostile configurablechat_template_kwargs/enable_thinkingfields are replaced safely, non-enumerable kwargs stay non-serialized, mixed Qwen chat-template/top-level thinking fields are removed, and unremovable reasoning fields fail closed before send. OpenAI response-format fuzzing now proves Chat Completions rejects dynamicresponse_format.json_schemafields before request serialization, Responses copies only serializablejson_schemadata fields while preserving a literal__proto__key, and dynamic Responses schema fields fail closed with stable OpenAI-owned errors. Embedded-agent extra-param fuzzing now proves dynamic configured, request override, and provider-runtimeresponse_format/responseFormataccessors are skipped while healthy sibling params survive, and explicit empty prepared params remain a valid no-params result instead of recomputing defaults. Max-token alias fuzzing now proves dynamic alias accessors are skipped in favor of healthy fallback aliases, canonicalization does not invoke hostile getters, and unremovable conflicting aliases fail closed before provider payload construction. Prompt-cache param fuzzing now proves dynamiccacheRetentionandcacheControlTtlaccessors are ignored without crashing, healthy explicit and legacy cache settings still resolve, and inherited cache params are not treated as explicit config. Model metadata fuzzing now proves hostile setup-time and call-time model/compat accessors are ignored across extra-param cache fingerprinting, prompt-cache retention, provider attribution, OpenAI Responses policy, OpenAI-compatible wrapper predicates, OpenRouter/proxy cache headers, MiniMax thinking/fast-mode, and MiMo/DeepSeek compatibility checks while healthy model metadata still drives the existing wrappers. Anthropic-family payload compatibility metadata fuzzing now proves hostile modelapi, modelcompat, and compat flag accessors are ignored before payload conversion while healthy data-property compat flags still enable the OpenAI-shaped Anthropic tool payload conversion. OpenAI reasoning metadata fuzzing now proves hostile modelid/compat, hostile compat effort metadata, and hostile compat reasoning-map accessors are ignored while healthy data-property and built-in effort maps still drive fallback selection. Plugin SDK Google thinking metadata fuzzing now proves hostile modelapiandidaccessors are ignored before thinking payload sanitization while healthy own data-property metadata still activates the Google sanitizer. Google shared thinking model-id fuzzing now proves hostile modelidaccessors are ignored during Gemini 3/Gemma 4 detection, simple-stream budget selection, and disabled-thinking config selection while unreadable ids fall back to generic thinking behavior. Google conversion metadata fuzzing now proves hostile modelid,provider,api, andinputaccessors are ignored during shared transform/image downgrade, Google message conversion, assistant output initialization, and request model naming, with unreadable input falling back to non-vision placeholder behavior. OpenAI Responses conversion metadata fuzzing now proves hostile modelid,provider,api,input, andreasoningaccessors are ignored during Responses conversion/output setup; unreadable identity drops private thinking while preserving function calls and tool outputs, and readable accessors remain supported. Shared thinking metadata fuzzing now proves unreadable modelreasoning/thinkingLevelMapvalues are treated as non-reasoning, readable accessors remain supported, unreadable thinking-map entries are skipped, and Responses reasoning params fall back safely without dropping healthy tools. Shared model identity fuzzing now proves unreadable modelidorprovidergetters are treated as unequal instead of throwing, while readable accessor-backed identity still compares equal by provider/id. Shared model cost fuzzing now proves hostile top-levelcostand nested cost-field getters degrade to zero cost instead of throwing, while readable accessor-backed cost fields still compute normal totals. OpenAI strict-tool metadata fuzzing now proves unreadable model metadata is ignored during strict default resolution and Responses tool conversion while readable accessor-backed native OpenAI metadata still enables strict tools.OpenAI Completions compat metadata fuzzing now proves hostile top-level
compatand nestedsupportsStrictModeaccessors fall back to detected defaults while preserving healthy tool payloads, and unreadable explicit OpenRouter routing metadata fails closed beforeonPayloadwithout leaking raw getter errors.OpenAI Completions output identity fuzzing now proves hostile
api/provider/idgetters cannot bypass the stream error path; the stream result remains reachable with stable fallback identity and no payload dispatch.Mistral output identity fuzzing now proves hostile
api/provider/idgetters cannot bypass the stream error path; the stream result remains reachable with stable fallback identity and no Mistral payload dispatch.Anthropic output identity fuzzing now proves hostile
api/provider/idgetters cannot bypass the stream error path; the stream result remains reachable with stable fallback identity and no payload dispatch.Bedrock setup metadata fuzzing now proves hostile
provider/id/baseUrlgetters cannot bypass the stream error path; the stream result remains reachable with stable fallback identity and no payload dispatch.Google transport output identity fuzzing now proves hostile
provider/idgetters cannot bypass the stream error path; the stream result remains reachable with stable fallback identity and no provider payload dispatch.OpenAI transport output identity fuzzing now proves hostile
api/provider/idgetters cannot bypass Responses, Azure Responses, or Completions stream error paths; the stream result remains reachable with stable fallback identity and no payload hook dispatch.Anthropic transport setup identity fuzzing now proves hostile
provider/id/baseUrlgetters cannot bypass the stream error path; the stream result remains reachable with stable fallback identity and no provider fetch dispatch.OpenAI Codex Responses output identity fuzzing now proves hostile
provider/idgetters cannot bypass the native Codex Responses stream error path; the stream result remains reachable with stable fallback identity and no fetch/payload hook dispatch.What was not tested: Latest retry at
ede75b300deusedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-codex-responses-output-identity --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at70fac733e57usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-anthropic-transport-setup-identity --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atf42f4f6b0a9usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-transport-output-identity --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atd4962f9b889usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-google-output-identity --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry ata79983e6a3eusedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-bedrock-setup-metadata --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atc9e46f503cdusedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-anthropic-output-identity --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at566f36dc459usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-mistral-output-identity --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at48a7bac63a3usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-completions-output-identity --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at5043fbf6c07usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-completions-compat --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. broadpnpm check:changedhas not completed remotely in this environment. Earlier attempts were blocked by low local sparse-sync disk or coordinator auth. After removing the generated 8.9 GiB Vitest cache,node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-gateway --shell -- "pnpm check:changed"selectedprovider=azure, began sparse clean checkout sync, overlaid local HEAD, then failed before lease allocation because the Crabbox coordinator returned HTTP 401 unauthorized for both run history creation and lease creation.blacksmith testbox list --allalso failed earlier withnot authenticated, so no Testbox fallback was available from this shell. Full localsrc/plugins/loader.test.tswas attempted twice for the latest registry slice and repeated an order-dependent failure insupports legacy plugins subscribing to diagnostic events from the root sdk; that same test passed in isolation, and the focused new registry regression passed. Fullpnpm check:changedwas not run locally because this linked Codex worktree routes broad pnpm gates through Crabbox/Testbox. Latest retry atcf1761a7e89b7d71eba2548cd1bd34f8e2f04a22usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-tool-search --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry ate89cf29ab822b59a7ee7fbd085f1aa33b9177a25usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-descriptor-cache --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at91e6a678a86usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-code-mode --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atea136a7d991usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-before-hook --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at14aa382841ausednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-adapter-execute --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atb4aa83eb613usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-abort-wrapper --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at0f8579576c3usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-deferred-followup --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at0b943634a0dusednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-filter-names --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at3c725b29935usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-code-mode-catalog --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atc401e40c432usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-strict-diagnostics --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at3e9d12e1df6usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-responses-payload --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at98e31f3a2a0usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-native-search-payload --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atac875ddc519usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-google-shared-tools --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry ate45e9a542b9usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-bedrock-forced-choice --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at70e5a4e3b56usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-xai-payload-tools --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atad693c9ea2ausednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-anthropic-payload-tools --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at3a81ad5e042usednode scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-moonshot-payload-fields --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at35196b3a445usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-minimax-thinking-payload --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at53c7aa2b59eusedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-btw-payload-tools --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at28d9526e684usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-siliconflow-thinking-payload --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry ateb3797f714busedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-qwen-thinking-payload --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at522a3e1ce36usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openrouter-payload-accessors --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at60bc23a86f6usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-venice-replay-payload --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at9248bf99cabusedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-fireworks-kimi-payload --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry ata12b77a8722usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-vllm-thinking-payload --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at7991b64dc26usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-response-format --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atf245150cccausedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-extra-params --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at41f6b5f9888usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-max-token-aliases --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at19d7f230d1eusedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-prompt-cache-params --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atcf5d2443b42usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-model-cache-metadata --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at6c609b91b6fusedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-anthropic-compat-metadata --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at5dba8e154bfusedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-reasoning-metadata --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at03fa0bc9a18usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-google-thinking-metadata --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atc5b98a671f5usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-google-thinking-model-ids --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at51e1f475f00usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-google-conversion-metadata --shell -- "pnpm check:changed"; the first attempt failed sparse-sync preflight with only 890.5 MiB free, then after clearing disposable npm cache Crabbox selectedprovider=azure, prepared sparse sync, overlaid local HEAD, and failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at114b378aba1usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-responses-conversion-metadata --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at996ff9101a6usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-thinking-metadata --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry at4ee3cbbf380usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-model-identity --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atde7fcb9a2d0usedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-model-cost --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation. Latest retry atda41426cf1cusedOPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --label check-changed-tool-schema-fuzz-openai-strict-tool-metadata --shell -- "pnpm check:changed"; Crabbox selectedprovider=azure, synced from a temporary full checkout, overlaid local HEAD from base5cf63f295b, then failed before lease allocation with coordinator HTTP 401 unauthorized for run history and lease creation.