muonroi-cli 1.8.4 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +17 -5
- package/dist/packages/agent-harness-core/src/driver.d.ts +27 -1
- package/dist/packages/agent-harness-core/src/driver.js +46 -0
- package/dist/packages/agent-harness-core/src/event-filter.js +11 -0
- package/dist/packages/agent-harness-core/src/event-redact.js +7 -0
- package/dist/packages/agent-harness-core/src/event-tee.d.ts +64 -0
- package/dist/packages/agent-harness-core/src/event-tee.js +104 -0
- package/dist/packages/agent-harness-core/src/mcp-server.d.ts +25 -0
- package/dist/packages/agent-harness-core/src/mcp-server.js +169 -21
- package/dist/packages/agent-harness-core/src/predicate.d.ts +1 -1
- package/dist/packages/agent-harness-core/src/protocol.d.ts +90 -4
- package/dist/packages/agent-harness-core/src/protocol.js +15 -0
- package/dist/packages/agent-harness-core/src/visual-quality.d.ts +58 -0
- package/dist/packages/agent-harness-core/src/visual-quality.js +141 -0
- package/dist/packages/agent-harness-opentui/src/agent-mode.d.ts +6 -0
- package/dist/packages/agent-harness-opentui/src/agent-mode.js +14 -1
- package/dist/packages/agent-harness-opentui/src/input-bridge.d.ts +2 -10
- package/dist/packages/agent-harness-opentui/src/input-bridge.js +103 -16
- package/dist/packages/agent-harness-opentui/src/install.d.ts +8 -0
- package/dist/packages/agent-harness-opentui/src/install.js +10 -0
- package/dist/packages/agent-harness-opentui/src/semantic.js +12 -10
- package/dist/packages/agent-harness-opentui/src/visual-capture.d.ts +56 -0
- package/dist/packages/agent-harness-opentui/src/visual-capture.js +103 -0
- package/dist/src/agent-harness/mock-model.d.ts +38 -0
- package/dist/src/agent-harness/mock-model.js +69 -3
- package/dist/src/agent-harness/test-spawn.js +31 -0
- package/dist/src/chat/chat-keychain.d.ts +7 -12
- package/dist/src/chat/chat-keychain.js +19 -86
- package/dist/src/cli/config/screen-providers.js +1 -1
- package/dist/src/cli/cost-forensics.d.ts +10 -0
- package/dist/src/cli/cost-forensics.js +18 -3
- package/dist/src/cli/keys-bundle.d.ts +1 -1
- package/dist/src/cli/keys-bundle.js +1 -1
- package/dist/src/cli/keys.d.ts +10 -47
- package/dist/src/cli/keys.js +31 -399
- package/dist/src/council/clarifier.d.ts +31 -3
- package/dist/src/council/clarifier.js +220 -32
- package/dist/src/council/context.js +49 -15
- package/dist/src/council/debate-checkpoint.d.ts +129 -0
- package/dist/src/council/debate-checkpoint.js +176 -0
- package/dist/src/council/debate-planner.js +54 -5
- package/dist/src/council/debate-summary.d.ts +25 -0
- package/dist/src/council/debate-summary.js +85 -0
- package/dist/src/council/debate.d.ts +169 -2
- package/dist/src/council/debate.js +1265 -135
- package/dist/src/council/index.d.ts +108 -1
- package/dist/src/council/index.js +670 -197
- package/dist/src/council/leader.d.ts +26 -0
- package/dist/src/council/leader.js +150 -9
- package/dist/src/council/llm.d.ts +94 -0
- package/dist/src/council/llm.js +348 -55
- package/dist/src/council/panel-select.d.ts +30 -0
- package/dist/src/council/panel-select.js +82 -0
- package/dist/src/council/planner.js +40 -0
- package/dist/src/council/preflight.d.ts +17 -0
- package/dist/src/council/preflight.js +50 -2
- package/dist/src/council/prompts.d.ts +39 -4
- package/dist/src/council/prompts.js +256 -69
- package/dist/src/council/stance-recall.d.ts +42 -0
- package/dist/src/council/stance-recall.js +57 -0
- package/dist/src/council/strip-think.d.ts +17 -0
- package/dist/src/council/strip-think.js +33 -0
- package/dist/src/council/types.d.ts +138 -0
- package/dist/src/ee/artifact-cache.d.ts +16 -0
- package/dist/src/ee/artifact-cache.js +32 -0
- package/dist/src/ee/auth.d.ts +20 -0
- package/dist/src/ee/auth.js +54 -2
- package/dist/src/ee/bridge.d.ts +10 -0
- package/dist/src/ee/bridge.js +58 -0
- package/dist/src/ee/client.js +109 -21
- package/dist/src/ee/ee-onboarding.js +6 -26
- package/dist/src/ee/export-transcripts.d.ts +1 -0
- package/dist/src/ee/export-transcripts.js +8 -10
- package/dist/src/ee/extract-session.js +29 -0
- package/dist/src/ee/extract-style.d.ts +58 -0
- package/dist/src/ee/extract-style.js +270 -0
- package/dist/src/ee/recall-ledger.d.ts +9 -0
- package/dist/src/ee/recall-ledger.js +3 -0
- package/dist/src/ee/scope.d.ts +1 -0
- package/dist/src/ee/scope.js +26 -1
- package/dist/src/ee/search.d.ts +7 -0
- package/dist/src/ee/search.js +24 -0
- package/dist/src/ee/transcript-emit.js +2 -0
- package/dist/src/ee/types.d.ts +22 -0
- package/dist/src/ee/who-am-i-brain.d.ts +35 -0
- package/dist/src/ee/who-am-i-brain.js +220 -0
- package/dist/src/ee/who-am-i.d.ts +10 -3
- package/dist/src/ee/who-am-i.js +12 -0
- package/dist/src/ee/workflow-event.d.ts +48 -0
- package/dist/src/ee/workflow-event.js +81 -0
- package/dist/src/flow/compaction/compress.d.ts +3 -3
- package/dist/src/flow/compaction/compress.js +58 -8
- package/dist/src/flow/compaction/extract.d.ts +4 -7
- package/dist/src/flow/compaction/extract.js +50 -10
- package/dist/src/flow/compaction/index.d.ts +14 -1
- package/dist/src/flow/compaction/index.js +96 -3
- package/dist/src/flow/compaction/input-guard.d.ts +24 -0
- package/dist/src/flow/compaction/input-guard.js +43 -0
- package/dist/src/flow/compaction/progress.d.ts +35 -0
- package/dist/src/flow/compaction/progress.js +35 -0
- package/dist/src/flow/fold-planning.d.ts +36 -0
- package/dist/src/flow/fold-planning.js +83 -0
- package/dist/src/flow/hierarchy.d.ts +146 -0
- package/dist/src/flow/hierarchy.js +427 -0
- package/dist/src/flow/index.d.ts +1 -0
- package/dist/src/flow/index.js +2 -0
- package/dist/src/flow/run-artifacts.d.ts +102 -0
- package/dist/src/flow/run-artifacts.js +208 -0
- package/dist/src/generated/version.d.ts +1 -1
- package/dist/src/generated/version.js +1 -1
- package/dist/src/gsd/assessment-schema.d.ts +44 -0
- package/dist/src/gsd/assessment-schema.js +134 -0
- package/dist/src/gsd/capability-registry.d.ts +45 -0
- package/dist/src/gsd/capability-registry.js +337 -0
- package/dist/src/gsd/complexity-assessor.d.ts +39 -0
- package/dist/src/gsd/complexity-assessor.js +152 -0
- package/dist/src/gsd/config-bridge.d.ts +7 -0
- package/dist/src/gsd/config-bridge.js +114 -0
- package/dist/src/gsd/config-loader.d.ts +27 -0
- package/dist/src/gsd/config-loader.js +50 -0
- package/dist/src/gsd/council-context.d.ts +44 -0
- package/dist/src/gsd/council-context.js +114 -0
- package/dist/src/gsd/ee-closure.d.ts +28 -0
- package/dist/src/gsd/ee-closure.js +49 -0
- package/dist/src/gsd/flags.d.ts +66 -0
- package/dist/src/gsd/flags.js +102 -0
- package/dist/src/gsd/gsd-dispatch.d.ts +58 -0
- package/dist/src/gsd/gsd-dispatch.js +131 -0
- package/dist/src/gsd/gsd-runtime.d.ts +22 -0
- package/dist/src/gsd/gsd-runtime.js +37 -0
- package/dist/src/gsd/host-adapter.d.ts +11 -0
- package/dist/src/gsd/host-adapter.js +29 -0
- package/dist/src/gsd/index.d.ts +24 -1
- package/dist/src/gsd/index.js +27 -0
- package/dist/src/gsd/loop-host-contract.d.ts +21 -0
- package/dist/src/gsd/loop-host-contract.js +39 -0
- package/dist/src/gsd/loop-host.d.ts +69 -0
- package/dist/src/gsd/loop-host.js +245 -0
- package/dist/src/gsd/loop-resolver.d.ts +36 -0
- package/dist/src/gsd/loop-resolver.js +79 -0
- package/dist/src/gsd/model-tier.d.ts +13 -0
- package/dist/src/gsd/model-tier.js +45 -0
- package/dist/src/gsd/mutation-gate.d.ts +16 -0
- package/dist/src/gsd/mutation-gate.js +41 -0
- package/dist/src/gsd/native-roadmap.d.ts +89 -0
- package/dist/src/gsd/native-roadmap.js +343 -0
- package/dist/src/gsd/native-state.d.ts +47 -0
- package/dist/src/gsd/native-state.js +220 -0
- package/dist/src/gsd/paths.d.ts +23 -0
- package/dist/src/gsd/paths.js +66 -0
- package/dist/src/gsd/phase-dag.d.ts +12 -0
- package/dist/src/gsd/phase-dag.js +94 -0
- package/dist/src/gsd/phase-sync.d.ts +42 -0
- package/dist/src/gsd/phase-sync.js +321 -0
- package/dist/src/gsd/pil-gate-context.d.ts +13 -0
- package/dist/src/gsd/pil-gate-context.js +64 -0
- package/dist/src/gsd/pil-gate-critic.d.ts +19 -0
- package/dist/src/gsd/pil-gate-critic.js +74 -0
- package/dist/src/gsd/plan-council-prompts.d.ts +25 -0
- package/dist/src/gsd/plan-council-prompts.js +79 -0
- package/dist/src/gsd/plan-council.d.ts +44 -0
- package/dist/src/gsd/plan-council.js +283 -0
- package/dist/src/gsd/plan-gate-vocabulary.d.ts +40 -0
- package/dist/src/gsd/plan-gate-vocabulary.js +64 -0
- package/dist/src/gsd/product-workspace.d.ts +13 -0
- package/dist/src/gsd/product-workspace.js +124 -0
- package/dist/src/gsd/ship-bridge.d.ts +25 -0
- package/dist/src/gsd/ship-bridge.js +65 -0
- package/dist/src/gsd/state-document.d.ts +40 -0
- package/dist/src/gsd/state-document.js +163 -0
- package/dist/src/gsd/verdict-schema.d.ts +39 -0
- package/dist/src/gsd/verdict-schema.js +144 -0
- package/dist/src/gsd/verify-context.d.ts +22 -0
- package/dist/src/gsd/verify-context.js +27 -0
- package/dist/src/gsd/verify-council-prompts.d.ts +19 -0
- package/dist/src/gsd/verify-council-prompts.js +85 -0
- package/dist/src/gsd/verify-council.d.ts +25 -0
- package/dist/src/gsd/verify-council.js +119 -0
- package/dist/src/gsd/verify-gate-vocabulary.d.ts +25 -0
- package/dist/src/gsd/verify-gate-vocabulary.js +46 -0
- package/dist/src/gsd/workflow-engine.d.ts +60 -0
- package/dist/src/gsd/workflow-engine.js +207 -0
- package/dist/src/gsd/workflow-tools.d.ts +13 -0
- package/dist/src/gsd/workflow-tools.js +277 -0
- package/dist/src/headless/council-answers.js +4 -0
- package/dist/src/hooks/index.js +1 -1
- package/dist/src/index.js +172 -270
- package/dist/src/lsp/builtins.js +3 -1
- package/dist/src/lsp/manager.d.ts +5 -1
- package/dist/src/lsp/manager.js +249 -3
- package/dist/src/lsp/npm-cache.d.ts +11 -1
- package/dist/src/lsp/npm-cache.js +17 -1
- package/dist/src/lsp/runtime.d.ts +6 -1
- package/dist/src/lsp/runtime.js +17 -1
- package/dist/src/lsp/types.d.ts +83 -1
- package/dist/src/lsp/types.js +10 -0
- package/dist/src/maintain/pr-builder.js +23 -13
- package/dist/src/mcp/auto-setup.js +57 -32
- package/dist/src/mcp/client-pool.js +44 -16
- package/dist/src/mcp/lsp-tools.d.ts +5 -1
- package/dist/src/mcp/lsp-tools.js +93 -2
- package/dist/src/mcp/mcp-keychain.d.ts +3 -5
- package/dist/src/mcp/mcp-keychain.js +9 -49
- package/dist/src/mcp/research-onboarding.js +8 -7
- package/dist/src/mcp/runtime.js +34 -2
- package/dist/src/mcp/setup-guide-text.d.ts +1 -1
- package/dist/src/mcp/setup-guide-text.js +22 -2
- package/dist/src/mcp/tools-server.d.ts +10 -0
- package/dist/src/mcp/tools-server.js +10 -2
- package/dist/src/models/catalog-client.d.ts +87 -0
- package/dist/src/models/catalog-client.js +105 -38
- package/dist/src/models/catalog.json +528 -265
- package/dist/src/models/registry.d.ts +22 -7
- package/dist/src/models/registry.js +73 -10
- package/dist/src/ops/doctor.js +1 -1
- package/dist/src/orchestrator/ask-user.d.ts +61 -0
- package/dist/src/orchestrator/ask-user.js +65 -0
- package/dist/src/orchestrator/auto-commit.js +1 -1
- package/dist/src/orchestrator/batch-turn-runner.js +2 -2
- package/dist/src/orchestrator/cache-prefix.d.ts +67 -0
- package/dist/src/orchestrator/cache-prefix.js +83 -0
- package/dist/src/orchestrator/compact-request.d.ts +32 -0
- package/dist/src/orchestrator/compact-request.js +41 -0
- package/dist/src/orchestrator/compaction.d.ts +12 -3
- package/dist/src/orchestrator/compaction.js +35 -15
- package/dist/src/orchestrator/council-manager.d.ts +12 -3
- package/dist/src/orchestrator/council-manager.js +74 -32
- package/dist/src/orchestrator/council-request.d.ts +49 -0
- package/dist/src/orchestrator/council-request.js +62 -0
- package/dist/src/orchestrator/cross-turn-dedup.d.ts +6 -0
- package/dist/src/orchestrator/cross-turn-dedup.js +22 -1
- package/dist/src/orchestrator/error-utils.d.ts +29 -0
- package/dist/src/orchestrator/error-utils.js +132 -24
- package/dist/src/orchestrator/grounding-check.js +39 -1
- package/dist/src/orchestrator/interactive-pause.d.ts +26 -0
- package/dist/src/orchestrator/interactive-pause.js +36 -0
- package/dist/src/orchestrator/message-processor.d.ts +4 -0
- package/dist/src/orchestrator/message-processor.js +268 -41
- package/dist/src/orchestrator/orchestrator.d.ts +64 -3
- package/dist/src/orchestrator/orchestrator.js +823 -120
- package/dist/src/orchestrator/preprocessor.js +3 -3
- package/dist/src/orchestrator/proactive-compact-detector.d.ts +26 -0
- package/dist/src/orchestrator/proactive-compact-detector.js +36 -0
- package/dist/src/orchestrator/prompts.js +17 -17
- package/dist/src/orchestrator/reactive-delegation.d.ts +39 -0
- package/dist/src/orchestrator/reactive-delegation.js +59 -0
- package/dist/src/orchestrator/retry-classifier.d.ts +2 -1
- package/dist/src/orchestrator/retry-classifier.js +46 -2
- package/dist/src/orchestrator/safety-askcard.d.ts +1 -1
- package/dist/src/orchestrator/safety-askcard.js +5 -2
- package/dist/src/orchestrator/safety-intercept.d.ts +50 -0
- package/dist/src/orchestrator/safety-intercept.js +62 -0
- package/dist/src/orchestrator/scope-reminder.js +1 -1
- package/dist/src/orchestrator/session-experience.d.ts +2 -1
- package/dist/src/orchestrator/session-experience.js +2 -1
- package/dist/src/orchestrator/should-run-gate.d.ts +5 -0
- package/dist/src/orchestrator/should-run-gate.js +18 -0
- package/dist/src/orchestrator/stall-watchdog.d.ts +31 -3
- package/dist/src/orchestrator/stall-watchdog.js +65 -10
- package/dist/src/orchestrator/stream-runner.d.ts +13 -3
- package/dist/src/orchestrator/stream-runner.js +115 -49
- package/dist/src/orchestrator/sub-agent-cap.d.ts +13 -1
- package/dist/src/orchestrator/sub-agent-cap.js +16 -1
- package/dist/src/orchestrator/sub-agent-model-tier.d.ts +13 -1
- package/dist/src/orchestrator/sub-agent-model-tier.js +16 -2
- package/dist/src/orchestrator/subagent-compactor.d.ts +53 -1
- package/dist/src/orchestrator/subagent-compactor.js +126 -15
- package/dist/src/orchestrator/tool-engine.d.ts +41 -0
- package/dist/src/orchestrator/tool-engine.js +846 -66
- package/dist/src/orchestrator/tool-limit-auto-recover.d.ts +22 -0
- package/dist/src/orchestrator/tool-limit-auto-recover.js +30 -0
- package/dist/src/orchestrator/turn-runner-deps.d.ts +19 -0
- package/dist/src/orchestrator/turn-watchdog.d.ts +44 -0
- package/dist/src/orchestrator/turn-watchdog.js +84 -0
- package/dist/src/pil/agent-operating-contract.d.ts +1 -1
- package/dist/src/pil/agent-operating-contract.js +6 -4
- package/dist/src/pil/cheap-model-playbook.d.ts +1 -1
- package/dist/src/pil/cheap-model-playbook.js +5 -1
- package/dist/src/pil/cheap-model-workbooks.d.ts +1 -1
- package/dist/src/pil/cheap-model-workbooks.js +1 -1
- package/dist/src/pil/discovery-types.d.ts +1 -0
- package/dist/src/pil/discovery.d.ts +1 -1
- package/dist/src/pil/discovery.js +18 -13
- package/dist/src/pil/layer1-intent.d.ts +18 -6
- package/dist/src/pil/layer1-intent.js +66 -757
- package/dist/src/pil/layer15-context-scan.js +15 -1
- package/dist/src/pil/layer1_5-complexity-size.d.ts +7 -0
- package/dist/src/pil/layer1_5-complexity-size.js +31 -5
- package/dist/src/pil/layer3-ee-injection.js +23 -8
- package/dist/src/pil/layer4-gsd.js +69 -16
- package/dist/src/pil/layer5-context.js +7 -3
- package/dist/src/pil/layer6-output.d.ts +23 -0
- package/dist/src/pil/layer6-output.js +5 -1
- package/dist/src/pil/llm-classify.d.ts +111 -5
- package/dist/src/pil/llm-classify.js +421 -189
- package/dist/src/pil/native-capabilities-workbook.d.ts +1 -1
- package/dist/src/pil/native-capabilities-workbook.js +8 -0
- package/dist/src/pil/pipeline.js +36 -2
- package/dist/src/pil/repo-grounding-probe.d.ts +15 -0
- package/dist/src/pil/repo-grounding-probe.js +136 -0
- package/dist/src/pil/repo-structure-hints.d.ts +7 -0
- package/dist/src/pil/repo-structure-hints.js +45 -0
- package/dist/src/pil/response-tools.js +5 -3
- package/dist/src/pil/schema.d.ts +1 -0
- package/dist/src/pil/schema.js +2 -0
- package/dist/src/pil/types.d.ts +18 -0
- package/dist/src/playbook/directives.d.ts +4 -0
- package/dist/src/playbook/directives.js +17 -5
- package/dist/src/product-loop/artifact-io.js +4 -0
- package/dist/src/product-loop/backlog-builder.d.ts +14 -1
- package/dist/src/product-loop/backlog-builder.js +30 -6
- package/dist/src/product-loop/criteria-seed.d.ts +51 -0
- package/dist/src/product-loop/criteria-seed.js +200 -0
- package/dist/src/product-loop/discovery-context-format.js +3 -1
- package/dist/src/product-loop/discovery-ecosystem.js +4 -1
- package/dist/src/product-loop/discovery-interview.d.ts +9 -0
- package/dist/src/product-loop/discovery-interview.js +60 -12
- package/dist/src/product-loop/discovery-recommender.js +2 -1
- package/dist/src/product-loop/discovery-schema.js +19 -2
- package/dist/src/product-loop/discovery-triage.d.ts +23 -0
- package/dist/src/product-loop/discovery-triage.js +109 -0
- package/dist/src/product-loop/gather.js +150 -2
- package/dist/src/product-loop/ideal-trace.d.ts +7 -0
- package/dist/src/product-loop/ideal-trace.js +64 -0
- package/dist/src/product-loop/index.d.ts +13 -1
- package/dist/src/product-loop/index.js +340 -52
- package/dist/src/product-loop/loop-driver.d.ts +7 -0
- package/dist/src/product-loop/loop-driver.js +330 -106
- package/dist/src/product-loop/phase-plan.d.ts +21 -0
- package/dist/src/product-loop/phase-plan.js +81 -6
- package/dist/src/product-loop/phase-rituals.d.ts +3 -0
- package/dist/src/product-loop/phase-rituals.js +8 -3
- package/dist/src/product-loop/phase-runner.js +39 -12
- package/dist/src/product-loop/plan-adherence-review.d.ts +26 -0
- package/dist/src/product-loop/plan-adherence-review.js +144 -0
- package/dist/src/product-loop/sprint-runner.d.ts +173 -0
- package/dist/src/product-loop/sprint-runner.js +863 -19
- package/dist/src/product-loop/types.d.ts +61 -5
- package/dist/src/providers/adapter.d.ts +1 -1
- package/dist/src/providers/adapter.js +3 -4
- package/dist/src/providers/anthropic.d.ts +9 -8
- package/dist/src/providers/anthropic.js +13 -47
- package/dist/src/providers/auth/browser-flow.d.ts +1 -1
- package/dist/src/providers/auth/browser-flow.js +1 -1
- package/dist/src/providers/auth/grok-oauth.d.ts +1 -0
- package/dist/src/providers/auth/grok-oauth.js +30 -5
- package/dist/src/providers/auth/openai-oauth.d.ts +1 -0
- package/dist/src/providers/auth/openai-oauth.js +15 -1
- package/dist/src/providers/auth/registry.js +0 -34
- package/dist/src/providers/auth/token-store.d.ts +9 -9
- package/dist/src/providers/auth/token-store.js +8 -67
- package/dist/src/providers/auth/types.d.ts +9 -1
- package/dist/src/providers/auth/types.js +1 -1
- package/dist/src/providers/capabilities.d.ts +24 -5
- package/dist/src/providers/capabilities.js +42 -24
- package/dist/src/providers/endpoints.d.ts +2 -2
- package/dist/src/providers/endpoints.js +11 -10
- package/dist/src/providers/env-store.d.ts +17 -0
- package/dist/src/providers/env-store.js +228 -0
- package/dist/src/providers/keychain.d.ts +22 -18
- package/dist/src/providers/keychain.js +127 -140
- package/dist/src/providers/mcp-vision-bridge.js +56 -146
- package/dist/src/providers/openai-compatible.js +8 -1
- package/dist/src/providers/pricing.d.ts +2 -2
- package/dist/src/providers/pricing.js +3 -13
- package/dist/src/providers/runtime.d.ts +43 -3
- package/dist/src/providers/runtime.js +88 -14
- package/dist/src/providers/strategies/base.strategy.d.ts +16 -0
- package/dist/src/providers/strategies/base.strategy.js +24 -1
- package/dist/src/providers/strategies/{siliconflow.strategy.d.ts → opencode-go.strategy.d.ts} +3 -3
- package/dist/src/providers/strategies/opencode-go.strategy.js +83 -0
- package/dist/src/providers/strategies/registry.js +4 -4
- package/dist/src/providers/strategies/thinking-mode.d.ts +109 -0
- package/dist/src/providers/strategies/thinking-mode.js +288 -1
- package/dist/src/providers/strategies/xai.strategy.js +27 -0
- package/dist/src/providers/strategies/zai.strategy.d.ts +14 -0
- package/dist/src/providers/strategies/zai.strategy.js +44 -0
- package/dist/src/providers/types.d.ts +5 -6
- package/dist/src/providers/types.js +2 -2
- package/dist/src/providers/vision-backend.d.ts +47 -0
- package/dist/src/providers/vision-backend.js +258 -0
- package/dist/src/providers/vision-proxy.d.ts +22 -9
- package/dist/src/providers/vision-proxy.js +63 -132
- package/dist/src/providers/warm.d.ts +65 -0
- package/dist/src/providers/warm.js +145 -0
- package/dist/src/providers/wire-debug.js +95 -0
- package/dist/src/router/decide.d.ts +13 -0
- package/dist/src/router/decide.js +138 -36
- package/dist/src/router/peak-hour.d.ts +38 -0
- package/dist/src/router/peak-hour.js +107 -0
- package/dist/src/router/step-router.js +3 -2
- package/dist/src/router/warm.js +4 -5
- package/dist/src/scaffold/continuation-prompt.d.ts +11 -0
- package/dist/src/scaffold/continuation-prompt.js +26 -0
- package/dist/src/scaffold/point-to-existing.d.ts +21 -0
- package/dist/src/scaffold/point-to-existing.js +25 -0
- package/dist/src/self-qa/agentic-loop.js +6 -5
- package/dist/src/{ui/state → state}/active-run.d.ts +19 -0
- package/dist/src/{ui/state → state}/active-run.js +21 -0
- package/dist/src/{ui/status-bar/store.d.ts → state/status-bar-store.d.ts} +4 -1
- package/dist/src/{ui/status-bar/store.js → state/status-bar-store.js} +12 -9
- package/dist/src/state/turn-trace.d.ts +43 -0
- package/dist/src/state/turn-trace.js +32 -0
- package/dist/src/storage/db.js +2 -1
- package/dist/src/storage/index.d.ts +1 -1
- package/dist/src/storage/index.js +1 -1
- package/dist/src/storage/interaction-log.d.ts +1 -1
- package/dist/src/storage/migrations.js +71 -1
- package/dist/src/storage/sessions.d.ts +28 -10
- package/dist/src/storage/sessions.js +78 -21
- package/dist/src/storage/transcript-view.js +1 -1
- package/dist/src/storage/transcript.d.ts +51 -0
- package/dist/src/storage/transcript.js +340 -15
- package/dist/src/tools/file.d.ts +15 -0
- package/dist/src/tools/file.js +32 -0
- package/dist/src/tools/git-safety.d.ts +19 -0
- package/dist/src/tools/git-safety.js +168 -0
- package/dist/src/tools/native-tools.d.ts +1 -1
- package/dist/src/tools/native-tools.js +81 -1
- package/dist/src/tools/registry.d.ts +20 -0
- package/dist/src/tools/registry.js +576 -23
- package/dist/src/tools/research.d.ts +29 -0
- package/dist/src/tools/research.js +233 -0
- package/dist/src/types/index.d.ts +147 -4
- package/dist/src/ui/app.js +0 -0
- package/dist/src/ui/cards/product-status-card.js +1 -1
- package/dist/src/ui/components/agent-rail-activities.d.ts +26 -0
- package/dist/src/ui/components/agent-rail-activities.js +47 -0
- package/dist/src/ui/components/bubble-body-guard.d.ts +27 -0
- package/dist/src/ui/components/bubble-body-guard.js +50 -0
- package/dist/src/ui/components/compact-progress-card.d.ts +24 -0
- package/dist/src/ui/components/compact-progress-card.js +42 -0
- package/dist/src/ui/components/context-rail.d.ts +26 -0
- package/dist/src/ui/components/context-rail.js +33 -0
- package/dist/src/ui/components/council-conclusion-card.d.ts +73 -0
- package/dist/src/ui/components/council-conclusion-card.js +420 -0
- package/dist/src/ui/components/council-debate-pill.d.ts +36 -0
- package/dist/src/ui/components/council-debate-pill.js +34 -0
- package/dist/src/ui/components/council-info-card.js +2 -2
- package/dist/src/ui/components/council-leader-bubble.d.ts +10 -3
- package/dist/src/ui/components/council-leader-bubble.js +21 -11
- package/dist/src/ui/components/council-message-bubble.d.ts +15 -2
- package/dist/src/ui/components/council-message-bubble.js +16 -15
- package/dist/src/ui/components/council-phase-timeline.d.ts +9 -1
- package/dist/src/ui/components/council-phase-timeline.js +66 -17
- package/dist/src/ui/components/council-placeholder-bubble.d.ts +16 -9
- package/dist/src/ui/components/council-placeholder-bubble.js +32 -29
- package/dist/src/ui/components/council-question-card.js +13 -12
- package/dist/src/ui/components/council-rail-rounds.d.ts +26 -0
- package/dist/src/ui/components/council-rail-rounds.js +57 -0
- package/dist/src/ui/components/council-round-group.d.ts +38 -0
- package/dist/src/ui/components/council-round-group.js +88 -0
- package/dist/src/ui/components/council-status-list.d.ts +3 -1
- package/dist/src/ui/components/council-status-list.js +36 -24
- package/dist/src/ui/components/council-synthesis-banner.d.ts +7 -2
- package/dist/src/ui/components/council-synthesis-banner.js +20 -5
- package/dist/src/ui/components/halt-recovery-card.js +9 -5
- package/dist/src/ui/components/jump-to-latest-pill.d.ts +11 -0
- package/dist/src/ui/components/jump-to-latest-pill.js +14 -0
- package/dist/src/ui/components/message-view.d.ts +15 -0
- package/dist/src/ui/components/message-view.js +50 -1
- package/dist/src/ui/components/prompt-box.js +18 -16
- package/dist/src/ui/components/session-tree-card.d.ts +14 -0
- package/dist/src/ui/components/session-tree-card.js +46 -0
- package/dist/src/ui/components/slash-inline-menu.d.ts +12 -0
- package/dist/src/ui/components/slash-inline-menu.js +26 -5
- package/dist/src/ui/components/task-list-panel.d.ts +14 -1
- package/dist/src/ui/components/task-list-panel.js +22 -2
- package/dist/src/ui/components/tool-group.d.ts +15 -3
- package/dist/src/ui/components/tool-group.js +69 -11
- package/dist/src/ui/containers/modals-layer.d.ts +4 -2
- package/dist/src/ui/containers/modals-layer.js +2 -2
- package/dist/src/ui/council-harness-event.d.ts +57 -0
- package/dist/src/ui/council-harness-event.js +46 -0
- package/dist/src/ui/heartbeat-debug.d.ts +29 -0
- package/dist/src/ui/heartbeat-debug.js +45 -0
- package/dist/src/ui/hooks/use-session-picker.d.ts +3 -3
- package/dist/src/ui/mcp-modal.js +2 -4
- package/dist/src/ui/modals/api-key-modal.js +1 -1
- package/dist/src/ui/modals/connect-modal.js +4 -3
- package/dist/src/ui/modals/model-picker-modal.d.ts +8 -18
- package/dist/src/ui/modals/model-picker-modal.js +8 -10
- package/dist/src/ui/modals/session-picker-modal.d.ts +2 -2
- package/dist/src/ui/modals/session-picker-modal.js +3 -5
- package/dist/src/ui/picker-providers.d.ts +1 -1
- package/dist/src/ui/picker-providers.js +1 -1
- package/dist/src/ui/primitives/index.d.ts +1 -0
- package/dist/src/ui/primitives/index.js +2 -0
- package/dist/src/ui/primitives/semantic-primitives.d.ts +76 -0
- package/dist/src/ui/primitives/semantic-primitives.js +81 -0
- package/dist/src/ui/slash/compact.js +5 -7
- package/dist/src/ui/slash/cost.js +1 -1
- package/dist/src/ui/slash/council.js +19 -1
- package/dist/src/ui/slash/debug.d.ts +3 -31
- package/dist/src/ui/slash/debug.js +9 -20
- package/dist/src/ui/slash/ee.js +81 -0
- package/dist/src/ui/slash/ideal.d.ts +6 -2
- package/dist/src/ui/slash/ideal.js +97 -7
- package/dist/src/ui/slash/menu-items.d.ts +7 -0
- package/dist/src/ui/slash/menu-items.js +23 -20
- package/dist/src/ui/slash/registry.d.ts +2 -0
- package/dist/src/ui/slash/registry.js +4 -0
- package/dist/src/ui/status-bar/cache-hit.d.ts +6 -0
- package/dist/src/ui/status-bar/cache-hit.js +9 -0
- package/dist/src/ui/status-bar/index.d.ts +1 -1
- package/dist/src/ui/status-bar/index.js +7 -3
- package/dist/src/ui/status-bar/usd-meter.d.ts +5 -4
- package/dist/src/ui/status-bar/usd-meter.js +6 -4
- package/dist/src/ui/theme.d.ts +1 -0
- package/dist/src/ui/theme.js +2 -0
- package/dist/src/ui/types.d.ts +7 -0
- package/dist/src/ui/use-app-logic.js +0 -0
- package/dist/src/ui/utils/agent-activities.d.ts +39 -0
- package/dist/src/ui/utils/agent-activities.js +96 -0
- package/dist/src/ui/utils/format.d.ts +14 -0
- package/dist/src/ui/utils/format.js +23 -3
- package/dist/src/ui/utils/group-tool-entries.d.ts +26 -0
- package/dist/src/ui/utils/group-tool-entries.js +111 -0
- package/dist/src/ui/utils/tool-summary.d.ts +21 -0
- package/dist/src/ui/utils/tool-summary.js +91 -0
- package/dist/src/usage/downgrade.js +2 -2
- package/dist/src/usage/product-ledger.js +2 -2
- package/dist/src/utils/event-loop-monitor.d.ts +85 -0
- package/dist/src/utils/event-loop-monitor.js +107 -0
- package/dist/src/utils/install-manager.js +2 -1
- package/dist/src/utils/llm-deadline.d.ts +14 -0
- package/dist/src/utils/llm-deadline.js +19 -0
- package/dist/src/utils/logger.js +2 -2
- package/dist/src/utils/loop-profiler.d.ts +102 -0
- package/dist/src/utils/loop-profiler.js +202 -0
- package/dist/src/utils/permission-mode.js +5 -3
- package/dist/src/utils/redactor.js +1 -1
- package/dist/src/utils/settings.d.ts +180 -5
- package/dist/src/utils/settings.js +271 -31
- package/dist/src/utils/side-question.d.ts +1 -2
- package/dist/src/utils/side-question.js +2 -2
- package/dist/src/utils/visible-retry.d.ts +11 -0
- package/dist/src/utils/visible-retry.js +10 -1
- package/dist/src/verify/entrypoint.d.ts +1 -1
- package/dist/src/verify/entrypoint.js +52 -17
- package/dist/src/verify/orchestrator.d.ts +1 -1
- package/dist/src/verify/orchestrator.js +20 -3
- package/dist/src/verify/recipes.d.ts +13 -0
- package/dist/src/verify/recipes.js +15 -0
- package/package.json +134 -132
- package/dist/src/cli/bw-vault.d.ts +0 -55
- package/dist/src/cli/bw-vault.js +0 -133
- package/dist/src/mcp/ee-tools.d.ts +0 -46
- package/dist/src/mcp/ee-tools.js +0 -193
- package/dist/src/providers/auth/gcloud.d.ts +0 -28
- package/dist/src/providers/auth/gcloud.js +0 -102
- package/dist/src/providers/auth/gemini-oauth.d.ts +0 -82
- package/dist/src/providers/auth/gemini-oauth.js +0 -472
- package/dist/src/providers/gemini.d.ts +0 -11
- package/dist/src/providers/gemini.js +0 -45
- package/dist/src/providers/siliconflow-sse-repair.d.ts +0 -58
- package/dist/src/providers/siliconflow-sse-repair.js +0 -177
- package/dist/src/providers/strategies/google.strategy.d.ts +0 -22
- package/dist/src/providers/strategies/google.strategy.js +0 -174
- package/dist/src/providers/strategies/siliconflow.strategy.js +0 -29
- package/dist/src/ui/containers/chat-feed.d.ts +0 -40
- package/dist/src/ui/containers/chat-feed.js +0 -66
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { APICallError } from "@ai-sdk/provider";
|
|
2
2
|
const STATUS_MESSAGES = {
|
|
3
|
-
400: "The request
|
|
4
|
-
401: "
|
|
5
|
-
403: "
|
|
6
|
-
404: "The
|
|
7
|
-
408: "The request timed out.
|
|
8
|
-
422: "The request
|
|
9
|
-
429: "
|
|
10
|
-
500: "
|
|
11
|
-
502: "The
|
|
12
|
-
503: "The
|
|
13
|
-
529: "The
|
|
3
|
+
400: "The provider rejected this request as invalid — usually a parameter or model it doesn't support. Try switching models with `-m <model>`, or simplify the request and retry.",
|
|
4
|
+
401: "The provider didn't accept your API key — it may be missing, invalid, or expired. Run `keys login <provider>` to set a fresh key, then try again.",
|
|
5
|
+
403: "Your API key works, but it isn't allowed to make this request. Check your plan or key permissions on the provider's dashboard, or switch models with `-m <model>`.",
|
|
6
|
+
404: "The provider couldn't find that model or endpoint. Double-check the model name (see `models list`) and your base URL, then try again.",
|
|
7
|
+
408: "The request took too long and timed out. This is usually temporary — just try again.",
|
|
8
|
+
422: "The provider understood the request but couldn't process it. Check your message format and parameters, then retry — switching models with `-m <model>` can also help.",
|
|
9
|
+
429: "You're sending requests faster than the provider allows right now. Wait a moment and try again, or switch to another model with `-m <model>`.",
|
|
10
|
+
500: "Something went wrong on the provider's servers — not on your end. Give it a moment and try again later.",
|
|
11
|
+
502: "The provider's servers are temporarily unreachable. This usually clears up on its own — try again in a minute.",
|
|
12
|
+
503: "The provider is overloaded right now. Give it a minute and retry, or switch models with `-m <model>` in the meantime.",
|
|
13
|
+
529: "The provider is overloaded right now. Give it a minute and retry, or switch models with `-m <model>` in the meantime.",
|
|
14
14
|
};
|
|
15
15
|
export function isContextLimitError(error) {
|
|
16
16
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -48,14 +48,45 @@ function routingSuffix(error, ctx) {
|
|
|
48
48
|
if (status === undefined && /insufficient balance|out of (balance|credit)/i.test(message)) {
|
|
49
49
|
status = 402;
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
const rawMsg = (error instanceof Error ? error.message : String(error)).toLowerCase();
|
|
52
|
+
const isConsoleGo = rawMsg.includes("console go") || ctx?.providerId === "opencode-go";
|
|
53
|
+
const isRateLimitMsg = /rate limit|rate-limited|429|too many requests/i.test(rawMsg);
|
|
54
|
+
// If we have model context and it's a routing error (by status or by message content)
|
|
55
|
+
if (!ctx?.modelId)
|
|
56
|
+
return "";
|
|
57
|
+
if (!(status !== undefined && ROUTING_STATUSES.has(status)) && !isRateLimitMsg && !isConsoleGo)
|
|
52
58
|
return "";
|
|
53
59
|
const where = `routed to model "${ctx.modelId}"${ctx.providerId ? ` via provider "${ctx.providerId}"` : ""}`;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
// A generic "invalid request" rejection — NOT a rate limit. Console Go can
|
|
61
|
+
// silently re-route (e.g. deepseek-v4-flash → a kimi coding backend) and then
|
|
62
|
+
// reject a long tool-loop payload with a bare 400 invalid_request. Retrying
|
|
63
|
+
// as-is never helps (isRetryable:false), so the hint must NOT say "wait and
|
|
64
|
+
// retry" — it must point at the real levers (switch model / shorten payload).
|
|
65
|
+
const isInvalidRequest = status === 400 || status === 422;
|
|
66
|
+
let hint;
|
|
67
|
+
if (isConsoleGo && (isRateLimitMsg || status === 429)) {
|
|
68
|
+
hint =
|
|
69
|
+
"the Console Go proxy hit its own burst rate limit — this is separate from your web 'Rolling Usage' %, so the dashboard can look fine while the proxy still throttles. Wait a moment, use native DeepSeek with `-m deepseek-v4-flash`, or switch provider.";
|
|
70
|
+
}
|
|
71
|
+
else if (status === 402) {
|
|
72
|
+
hint =
|
|
73
|
+
"this provider account is out of balance or credit. Top it up on the provider's site, or switch to another model with `-m <model>`.";
|
|
74
|
+
}
|
|
75
|
+
else if (status === 401 || status === 403) {
|
|
76
|
+
hint =
|
|
77
|
+
"you're not authenticated for this provider. Run `keys login <provider>` (or set its API key), or switch to another model with `-m <model>`.";
|
|
78
|
+
}
|
|
79
|
+
else if (isInvalidRequest) {
|
|
80
|
+
hint =
|
|
81
|
+
"the provider rejected this request as invalid — often a param or backend model it doesn't support, or a tool-loop payload the routed model can't accept (some gateways re-route to a different backend than the one you picked). Switch models with `-m <model>` or shorten/simplify the request; retrying it unchanged won't help.";
|
|
82
|
+
}
|
|
83
|
+
else if (isRateLimitMsg || status === 429) {
|
|
84
|
+
hint = "the provider is rate-limiting you. Wait a moment and retry, or switch to another model with `-m <model>`.";
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
hint =
|
|
88
|
+
"the routed model or provider couldn't complete this request. Switch to another model with `-m <model>`, or try again.";
|
|
89
|
+
}
|
|
59
90
|
return ` [${where}] — ${hint}`;
|
|
60
91
|
}
|
|
61
92
|
export function humanizeApiError(error, ctx) {
|
|
@@ -63,7 +94,7 @@ export function humanizeApiError(error, ctx) {
|
|
|
63
94
|
}
|
|
64
95
|
function humanizeApiErrorBase(error) {
|
|
65
96
|
if (isMalformedFunctionNameError(error)) {
|
|
66
|
-
return "
|
|
97
|
+
return "The model produced a malformed tool call (its function name was missing), so this turn was skipped. Just send your request again — rephrasing slightly often helps.";
|
|
67
98
|
}
|
|
68
99
|
if (APICallError.isInstance(error)) {
|
|
69
100
|
const detail = extractResponseDetail(error.responseBody);
|
|
@@ -75,7 +106,8 @@ function humanizeApiErrorBase(error) {
|
|
|
75
106
|
// For 5xx prefer the canned "retry later" message + the status code; keep a
|
|
76
107
|
// body detail only when it actually adds information.
|
|
77
108
|
if (status && status >= 500) {
|
|
78
|
-
const canned = STATUS_MESSAGES[status] ??
|
|
109
|
+
const canned = STATUS_MESSAGES[status] ??
|
|
110
|
+
"The provider's servers returned an error — not something you did. Wait a bit and try again.";
|
|
79
111
|
if (!detail || isOpaqueDetail(detail))
|
|
80
112
|
return `${canned} (HTTP ${status})`;
|
|
81
113
|
return `${detail} (HTTP ${status})`;
|
|
@@ -93,9 +125,9 @@ function humanizeApiErrorBase(error) {
|
|
|
93
125
|
const toolMatch = raw.match(/Tool\s+"?(\w+)"?\s+(?:is\s+)?not\s+found/i) ?? raw.match(/tool\s+(\w+)/i);
|
|
94
126
|
const toolName = toolMatch?.[1] ?? "that tool";
|
|
95
127
|
if (toolName === "search_web") {
|
|
96
|
-
return `"search_web"
|
|
128
|
+
return `"search_web" isn't available here. For web requests, use bash with curl instead, or hand the research off to an explore agent.`;
|
|
97
129
|
}
|
|
98
|
-
return `Tool "${toolName}"
|
|
130
|
+
return `Tool "${toolName}" isn't available in this session. Check the TOOLS list in the system prompt to see which tools you can use.`;
|
|
99
131
|
}
|
|
100
132
|
return stripped;
|
|
101
133
|
}
|
|
@@ -135,9 +167,50 @@ export function summarizeApiErrorForLog(error) {
|
|
|
135
167
|
catch {
|
|
136
168
|
urlHost = undefined;
|
|
137
169
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
170
|
+
const bodyValues = error.requestBodyValues && typeof error.requestBodyValues === "object"
|
|
171
|
+
? error.requestBodyValues
|
|
172
|
+
: undefined;
|
|
173
|
+
const requestParamKeys = bodyValues ? Object.keys(bodyValues).sort() : undefined;
|
|
174
|
+
// Collect the distinct field-key signature across assistant wire messages.
|
|
175
|
+
// Only key NAMES are persisted — values may contain secrets/PII.
|
|
176
|
+
let assistantFieldKeys;
|
|
177
|
+
let assistantReasoningLens;
|
|
178
|
+
let assistantToolCallCounts;
|
|
179
|
+
let totalReasoningChars = 0;
|
|
180
|
+
let toolMessageCount = 0;
|
|
181
|
+
if (bodyValues && Array.isArray(bodyValues.messages)) {
|
|
182
|
+
const signatures = new Set();
|
|
183
|
+
const rcLens = [];
|
|
184
|
+
const tcLens = [];
|
|
185
|
+
for (const m of bodyValues.messages) {
|
|
186
|
+
const msg = m;
|
|
187
|
+
if (msg?.role === "tool") {
|
|
188
|
+
toolMessageCount++;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (msg?.role !== "assistant")
|
|
192
|
+
continue;
|
|
193
|
+
const sig = Object.keys(msg ?? {})
|
|
194
|
+
.sort()
|
|
195
|
+
.join(",");
|
|
196
|
+
signatures.add(sig);
|
|
197
|
+
const rc = msg?.reasoning_content;
|
|
198
|
+
if (typeof rc === "string") {
|
|
199
|
+
rcLens.push(rc.length);
|
|
200
|
+
totalReasoningChars += rc.length;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
rcLens.push(-1); // marker: reasoning_content missing/non-string on this turn
|
|
204
|
+
}
|
|
205
|
+
const tcs = Array.isArray(msg?.tool_calls) ? msg.tool_calls.length : 0;
|
|
206
|
+
tcLens.push(tcs);
|
|
207
|
+
}
|
|
208
|
+
if (signatures.size > 0)
|
|
209
|
+
assistantFieldKeys = [...signatures].sort();
|
|
210
|
+
if (rcLens.length > 0)
|
|
211
|
+
assistantReasoningLens = rcLens;
|
|
212
|
+
if (tcLens.length > 0)
|
|
213
|
+
assistantToolCallCounts = tcLens;
|
|
141
214
|
}
|
|
142
215
|
const body = typeof error.responseBody === "string" ? error.responseBody : undefined;
|
|
143
216
|
const responseBodyTrunc = body && body.length > RESPONSE_BODY_CAP ? `${body.slice(0, RESPONSE_BODY_CAP)}…[truncated]` : body;
|
|
@@ -146,8 +219,43 @@ export function summarizeApiErrorForLog(error) {
|
|
|
146
219
|
urlHost,
|
|
147
220
|
responseBodyTrunc,
|
|
148
221
|
requestParamKeys,
|
|
222
|
+
assistantFieldKeys,
|
|
223
|
+
assistantReasoningLens,
|
|
224
|
+
totalReasoningChars: assistantReasoningLens ? totalReasoningChars : undefined,
|
|
225
|
+
configParamValues: bodyValues ? extractConfigParamValues(bodyValues) : undefined,
|
|
226
|
+
assistantToolCallCounts,
|
|
227
|
+
toolMessageCount: bodyValues && Array.isArray(bodyValues.messages) ? toolMessageCount : undefined,
|
|
149
228
|
isRetryable: error.isRetryable,
|
|
150
229
|
};
|
|
151
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Scalar SDK-config params whose VALUES are PII-safe (generation config, not
|
|
233
|
+
* user prompt content). See `ApiErrorForensics.configParamValues`.
|
|
234
|
+
* Includes parallel_tool_calls because Z.ai GLM coding endpoint rejects
|
|
235
|
+
* high-parallelism tool call batches (observed 8-12 in one assistant turn)
|
|
236
|
+
* with generic 1210; capturing the value helps confirm if SDK overrode it.
|
|
237
|
+
*/
|
|
238
|
+
const CONFIG_PARAM_KEYS = [
|
|
239
|
+
"reasoning_effort",
|
|
240
|
+
"verbosity",
|
|
241
|
+
"tool_choice",
|
|
242
|
+
"response_format",
|
|
243
|
+
"max_tokens",
|
|
244
|
+
"temperature",
|
|
245
|
+
"top_p",
|
|
246
|
+
"frequency_penalty",
|
|
247
|
+
"presence_penalty",
|
|
248
|
+
"seed",
|
|
249
|
+
"stop",
|
|
250
|
+
"parallel_tool_calls",
|
|
251
|
+
];
|
|
252
|
+
function extractConfigParamValues(body) {
|
|
253
|
+
const out = {};
|
|
254
|
+
for (const k of CONFIG_PARAM_KEYS) {
|
|
255
|
+
if (k in body)
|
|
256
|
+
out[k] = body[k] ?? null;
|
|
257
|
+
}
|
|
258
|
+
return out;
|
|
259
|
+
}
|
|
152
260
|
export { extractResponseDetail, STATUS_MESSAGES };
|
|
153
261
|
//# sourceMappingURL=error-utils.js.map
|
|
@@ -41,6 +41,30 @@ const COUNT_RE = new RegExp(`\\b(\\d{1,3}(?:,\\d{3})+|\\d{2,})\\b(?:\\s+(?:\\w+\
|
|
|
41
41
|
const NOUN_SEP_NUM_RE = new RegExp(`\\b(?:${COUNT_NOUN})\\b[^.\\n:=]{0,40}?[:=]\\s*(\\d{1,3}(?:,\\d{3})+|\\d{2,})\\b`, "gi");
|
|
42
42
|
// filename.ext:line — basename only (the char class excludes "/").
|
|
43
43
|
const FILELINE_RE = /\b([\w.-]+\.[a-z]{1,5}):(\d+)\b/gi;
|
|
44
|
+
// read_file emits a header `[<path>: lines A-B of TOTAL]` (src/tools/file.ts:75).
|
|
45
|
+
// TOTAL is always the FULL file length (not the slice end B), so it is the
|
|
46
|
+
// ground truth for "does line N exist in this file". Path may use "/" or "\";
|
|
47
|
+
// the basename char class excludes both, so it captures just "planner.ts".
|
|
48
|
+
const READ_HEADER_RE = /([\w.-]+\.[a-z]{1,5}):\s*lines\s+\d+-\d+\s+of\s+(\d+)/gi;
|
|
49
|
+
/**
|
|
50
|
+
* Map basename → largest known full-file line count, parsed from read_file
|
|
51
|
+
* headers in the corpus. Used to catch a file:line that names a REAL (read)
|
|
52
|
+
* file but a FABRICATED line number beyond the file's length — the failure the
|
|
53
|
+
* basename-only check misses.
|
|
54
|
+
*/
|
|
55
|
+
function parseReadLineCounts(corpus) {
|
|
56
|
+
const totals = new Map();
|
|
57
|
+
for (const m of corpus.matchAll(READ_HEADER_RE)) {
|
|
58
|
+
const base = m[1].toLowerCase();
|
|
59
|
+
const total = Number.parseInt(m[2], 10);
|
|
60
|
+
if (!Number.isFinite(total))
|
|
61
|
+
continue;
|
|
62
|
+
const prev = totals.get(base);
|
|
63
|
+
if (prev === undefined || total > prev)
|
|
64
|
+
totals.set(base, total);
|
|
65
|
+
}
|
|
66
|
+
return totals;
|
|
67
|
+
}
|
|
44
68
|
// Hedge markers immediately before a number mean it is an estimate, not a fact.
|
|
45
69
|
const HEDGE_RE = /(~|≈|\babout\b|\bapprox(?:imately)?\b|\broughly\b|\baround\b|\bnearly\b|\best\.?\b)\s*$/i;
|
|
46
70
|
function stripCommas(s) {
|
|
@@ -56,6 +80,7 @@ export function findUnverifiedClaims(finalText, corpus) {
|
|
|
56
80
|
return [];
|
|
57
81
|
const corpusNorm = stripCommas(corpus).toLowerCase();
|
|
58
82
|
const corpusLower = corpus.toLowerCase();
|
|
83
|
+
const readTotals = parseReadLineCounts(corpus);
|
|
59
84
|
const out = [];
|
|
60
85
|
const seen = new Set();
|
|
61
86
|
const push = (claim) => {
|
|
@@ -103,8 +128,21 @@ export function findUnverifiedClaims(finalText, corpus) {
|
|
|
103
128
|
if (idx > 0 && finalText[idx - 1] === "/")
|
|
104
129
|
continue;
|
|
105
130
|
const basename = m[1];
|
|
131
|
+
const lineNo = Number.parseInt(m[2], 10);
|
|
132
|
+
const knownTotal = readTotals.get(basename.toLowerCase());
|
|
133
|
+
// Provably-fabricated line: the file WAS read this turn (header parsed), but
|
|
134
|
+
// the cited line exceeds its real length. Deterministic — flag even though
|
|
135
|
+
// the basename appears in the corpus (the basename check below would pass).
|
|
136
|
+
if (knownTotal !== undefined && Number.isFinite(lineNo) && lineNo > knownTotal) {
|
|
137
|
+
push({
|
|
138
|
+
kind: "fileline",
|
|
139
|
+
value: `${basename}:${m[2]}`,
|
|
140
|
+
text: `${basename}:${m[2]} (file has ${knownTotal} lines)`,
|
|
141
|
+
});
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
106
144
|
if (corpusLower.includes(basename.toLowerCase()))
|
|
107
|
-
continue; // file was read/grepped → verified
|
|
145
|
+
continue; // file was read/grepped & in-bounds → verified
|
|
108
146
|
push({ kind: "fileline", value: `${basename}:${m[2]}`, text: `${basename}:${m[2]}` });
|
|
109
147
|
}
|
|
110
148
|
return out.slice(0, MAX_CLAIMS);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/orchestrator/interactive-pause.ts
|
|
3
|
+
*
|
|
4
|
+
* Process-global "an interactive card is blocking the turn" gate.
|
|
5
|
+
*
|
|
6
|
+
* Some tools (`ask_user`) block inside their AI-SDK `execute()` waiting for a
|
|
7
|
+
* human to answer a card. During that wait NO stream chunks flow, so both the
|
|
8
|
+
* per-attempt stall watchdog (getProviderStallTimeoutMs, default 2 min) and the
|
|
9
|
+
* turn-idle watchdog (MUONROI_TURN_IDLE_MS, default 2 min) would fire and abort
|
|
10
|
+
* a turn that is not stalled at all — the human is just thinking.
|
|
11
|
+
*
|
|
12
|
+
* Rather than thread a keepalive timer through every call site, the blocking
|
|
13
|
+
* handler brackets its wait with {@link beginInteractivePause} /
|
|
14
|
+
* {@link endInteractivePause}, and both watchdogs consult
|
|
15
|
+
* {@link isInteractivePaused} before firing — re-arming instead of aborting
|
|
16
|
+
* while a card is open. Counter (not boolean) so nested/concurrent cards are
|
|
17
|
+
* safe.
|
|
18
|
+
*/
|
|
19
|
+
/** Enter an interactive pause — call before awaiting a blocking card. */
|
|
20
|
+
export declare function beginInteractivePause(): void;
|
|
21
|
+
/** Leave an interactive pause — call in a `finally` after the card resolves. */
|
|
22
|
+
export declare function endInteractivePause(): void;
|
|
23
|
+
/** True while at least one interactive card is blocking the turn. */
|
|
24
|
+
export declare function isInteractivePaused(): boolean;
|
|
25
|
+
/** Test-only: force the counter back to zero. */
|
|
26
|
+
export declare function __resetInteractivePauseForTests(): void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/orchestrator/interactive-pause.ts
|
|
3
|
+
*
|
|
4
|
+
* Process-global "an interactive card is blocking the turn" gate.
|
|
5
|
+
*
|
|
6
|
+
* Some tools (`ask_user`) block inside their AI-SDK `execute()` waiting for a
|
|
7
|
+
* human to answer a card. During that wait NO stream chunks flow, so both the
|
|
8
|
+
* per-attempt stall watchdog (getProviderStallTimeoutMs, default 2 min) and the
|
|
9
|
+
* turn-idle watchdog (MUONROI_TURN_IDLE_MS, default 2 min) would fire and abort
|
|
10
|
+
* a turn that is not stalled at all — the human is just thinking.
|
|
11
|
+
*
|
|
12
|
+
* Rather than thread a keepalive timer through every call site, the blocking
|
|
13
|
+
* handler brackets its wait with {@link beginInteractivePause} /
|
|
14
|
+
* {@link endInteractivePause}, and both watchdogs consult
|
|
15
|
+
* {@link isInteractivePaused} before firing — re-arming instead of aborting
|
|
16
|
+
* while a card is open. Counter (not boolean) so nested/concurrent cards are
|
|
17
|
+
* safe.
|
|
18
|
+
*/
|
|
19
|
+
let pauseDepth = 0;
|
|
20
|
+
/** Enter an interactive pause — call before awaiting a blocking card. */
|
|
21
|
+
export function beginInteractivePause() {
|
|
22
|
+
pauseDepth += 1;
|
|
23
|
+
}
|
|
24
|
+
/** Leave an interactive pause — call in a `finally` after the card resolves. */
|
|
25
|
+
export function endInteractivePause() {
|
|
26
|
+
pauseDepth = Math.max(0, pauseDepth - 1);
|
|
27
|
+
}
|
|
28
|
+
/** True while at least one interactive card is blocking the turn. */
|
|
29
|
+
export function isInteractivePaused() {
|
|
30
|
+
return pauseDepth > 0;
|
|
31
|
+
}
|
|
32
|
+
/** Test-only: force the counter back to zero. */
|
|
33
|
+
export function __resetInteractivePauseForTests() {
|
|
34
|
+
pauseDepth = 0;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=interactive-pause.js.map
|
|
@@ -7,6 +7,7 @@ import type { SessionInfo, StreamChunk, SubagentStatus } from "../types/index.js
|
|
|
7
7
|
import { type PermissionMode } from "../utils/permission-mode.js";
|
|
8
8
|
import type { AbortContext } from "./abort.js";
|
|
9
9
|
import type { LegacyProvider, ProcessMessageObserver } from "./agent-options.js";
|
|
10
|
+
import type { AskUserAskInfo } from "./ask-user.js";
|
|
10
11
|
import type { CouncilManager } from "./council-manager.js";
|
|
11
12
|
import type { CrossTurnDedup } from "./cross-turn-dedup.js";
|
|
12
13
|
import type { PendingCallsLog } from "./pending-calls.js";
|
|
@@ -115,10 +116,13 @@ export interface MessageProcessorDeps extends TurnRunnerDepsBase {
|
|
|
115
116
|
askToolLoopContinue?: ToolLoopCapAsk;
|
|
116
117
|
/** Safety override handler — invoked when a tool call is blocked by the safety filter. */
|
|
117
118
|
askSafetyOverride?: (info: SafetyOverrideAskInfo) => Promise<SafetyOverrideVerdict>;
|
|
119
|
+
/** ask_user handler — invoked when the model calls the `ask_user` tool; resolves the human's answer. */
|
|
120
|
+
askUser?: (info: AskUserAskInfo) => Promise<string>;
|
|
118
121
|
runCouncilV2(userMessage: string, opts: {
|
|
119
122
|
skipClarification: boolean;
|
|
120
123
|
observer?: ProcessMessageObserver;
|
|
121
124
|
userModelMessage: ModelMessage;
|
|
125
|
+
convenePath?: boolean;
|
|
122
126
|
}): AsyncGenerator<StreamChunk, void, unknown>;
|
|
123
127
|
processMessage(userMessage: string, observer?: ProcessMessageObserver, images?: Array<{
|
|
124
128
|
path: string;
|