muonroi-cli 1.8.4 → 1.8.5
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-tee.d.ts +48 -0
- package/dist/packages/agent-harness-core/src/event-tee.js +77 -0
- package/dist/packages/agent-harness-core/src/mcp-server.d.ts +11 -0
- package/dist/packages/agent-harness-core/src/mcp-server.js +87 -15
- package/dist/packages/agent-harness-core/src/protocol.d.ts +66 -2
- 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 +28 -0
- package/dist/src/agent-harness/mock-model.js +63 -1
- package/dist/src/agent-harness/test-spawn.js +31 -0
- 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 +2 -2
- package/dist/src/cli/keys.js +19 -81
- package/dist/src/council/clarifier.d.ts +28 -2
- package/dist/src/council/clarifier.js +81 -15
- 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 +51 -3
- 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 +1210 -134
- package/dist/src/council/index.d.ts +85 -1
- package/dist/src/council/index.js +634 -196
- package/dist/src/council/leader.d.ts +26 -0
- package/dist/src/council/leader.js +150 -9
- package/dist/src/council/llm.d.ts +32 -0
- package/dist/src/council/llm.js +231 -38
- package/dist/src/council/panel-select.d.ts +30 -0
- package/dist/src/council/panel-select.js +72 -0
- package/dist/src/council/planner.js +23 -0
- package/dist/src/council/preflight.d.ts +7 -0
- package/dist/src/council/preflight.js +14 -2
- package/dist/src/council/prompts.d.ts +30 -3
- package/dist/src/council/prompts.js +234 -64
- 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 +128 -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 +1 -0
- package/dist/src/ee/auth.js +15 -2
- package/dist/src/ee/bridge.d.ts +10 -0
- package/dist/src/ee/bridge.js +58 -0
- package/dist/src/ee/client.js +81 -18
- 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 +45 -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 +13 -1
- package/dist/src/flow/compaction/index.js +70 -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/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 +55 -0
- package/dist/src/gsd/flags.js +83 -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 +251 -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/hooks/index.js +1 -1
- package/dist/src/index.js +44 -11
- 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 +1 -1
- package/dist/src/mcp/ee-tools.js +1 -0
- package/dist/src/mcp/research-onboarding.js +8 -7
- package/dist/src/mcp/runtime.js +34 -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/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 +10 -0
- package/dist/src/orchestrator/compaction.js +27 -7
- package/dist/src/orchestrator/council-manager.d.ts +12 -3
- package/dist/src/orchestrator/council-manager.js +65 -24
- 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/message-processor.js +242 -33
- package/dist/src/orchestrator/orchestrator.d.ts +39 -3
- package/dist/src/orchestrator/orchestrator.js +651 -102
- package/dist/src/orchestrator/preprocessor.js +1 -1
- 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-intercept.d.ts +45 -0
- package/dist/src/orchestrator/safety-intercept.js +55 -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 +24 -3
- package/dist/src/orchestrator/stall-watchdog.js +47 -13
- package/dist/src/orchestrator/stream-runner.js +62 -29
- 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 +22 -0
- package/dist/src/orchestrator/tool-engine.js +620 -56
- 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 +37 -0
- package/dist/src/orchestrator/turn-watchdog.js +55 -0
- package/dist/src/pil/agent-operating-contract.d.ts +1 -1
- package/dist/src/pil/agent-operating-contract.js +1 -1
- 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.js +16 -11
- 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/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 +33 -2
- package/dist/src/pil/llm-classify.js +123 -131
- package/dist/src/pil/native-capabilities-workbook.d.ts +1 -1
- package/dist/src/pil/native-capabilities-workbook.js +1 -0
- package/dist/src/pil/pipeline.js +34 -2
- 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/backlog-builder.d.ts +14 -1
- package/dist/src/product-loop/backlog-builder.js +30 -6
- 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.js +32 -3
- package/dist/src/product-loop/discovery-schema.js +5 -1
- 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 +333 -52
- package/dist/src/product-loop/loop-driver.d.ts +7 -0
- package/dist/src/product-loop/loop-driver.js +310 -99
- package/dist/src/product-loop/phase-plan.d.ts +5 -0
- package/dist/src/product-loop/phase-plan.js +39 -2
- package/dist/src/product-loop/phase-runner.js +9 -1
- package/dist/src/product-loop/sprint-runner.d.ts +111 -0
- package/dist/src/product-loop/sprint-runner.js +559 -16
- package/dist/src/product-loop/types.d.ts +36 -5
- package/dist/src/providers/adapter.d.ts +1 -1
- package/dist/src/providers/adapter.js +3 -4
- 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/openai-oauth.js +1 -1
- package/dist/src/providers/auth/registry.js +0 -34
- package/dist/src/providers/auth/token-store.js +4 -1
- package/dist/src/providers/auth/types.d.ts +1 -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/keychain.d.ts +1 -1
- package/dist/src/providers/keychain.js +7 -9
- 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 +27 -2
- package/dist/src/providers/runtime.js +78 -15
- 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 +280 -1
- 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/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 +3 -3
- 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 +284 -13
- package/dist/src/tools/file.d.ts +15 -0
- package/dist/src/tools/file.js +32 -0
- package/dist/src/tools/native-tools.js +5 -0
- package/dist/src/tools/registry.d.ts +3 -0
- package/dist/src/tools/registry.js +460 -22
- package/dist/src/tools/research.d.ts +29 -0
- package/dist/src/tools/research.js +233 -0
- package/dist/src/types/index.d.ts +118 -3
- package/dist/src/ui/app.js +0 -0
- package/dist/src/ui/cards/product-status-card.js +1 -1
- 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/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 +49 -15
- 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 +12 -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/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/containers/modals-layer.d.ts +2 -1
- 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/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/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 +12 -18
- 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/format.d.ts +14 -0
- package/dist/src/ui/utils/format.js +23 -3
- package/dist/src/usage/downgrade.js +2 -2
- package/dist/src/usage/product-ledger.js +2 -2
- package/dist/src/utils/install-manager.js +2 -1
- package/dist/src/utils/logger.js +2 -2
- package/dist/src/utils/permission-mode.js +5 -3
- package/dist/src/utils/redactor.js +1 -1
- package/dist/src/utils/settings.d.ts +153 -5
- package/dist/src/utils/settings.js +233 -29
- 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 +1 -1
- package/dist/src/verify/recipes.d.ts +13 -0
- package/dist/src/verify/recipes.js +15 -0
- package/package.json +135 -132
- 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
|
@@ -128,6 +128,18 @@ export interface DriverContext {
|
|
|
128
128
|
* without it; sprint-runner enforces presence at call time.
|
|
129
129
|
*/
|
|
130
130
|
processMessageFn?: (message: string) => AsyncGenerator<import("../types/index.js").StreamChunk, void, unknown>;
|
|
131
|
+
/**
|
|
132
|
+
* Bridge into the orchestrator's ISOLATED task-runner (Agent.runTaskRequest →
|
|
133
|
+
* StreamRunner). Unlike processMessageFn — which appends to the shared
|
|
134
|
+
* top-level context and therefore inherits the (large) council-debate history —
|
|
135
|
+
* each call here runs in a FRESH, budget-capped (getSubAgentBudgetChars) child
|
|
136
|
+
* context with independent in-loop compaction, and returns a compact ToolResult
|
|
137
|
+
* summary instead of streaming into the parent. Sprint-runner uses this for the
|
|
138
|
+
* implement stage so the impl never inherits the debate context (which caused a
|
|
139
|
+
* live ctx-overflow wedge). Optional: legacy/test drivers omit it → sprint-runner
|
|
140
|
+
* falls back to processMessageFn.
|
|
141
|
+
*/
|
|
142
|
+
runIsolatedTask?: (request: import("../types/index.js").TaskRequest) => Promise<import("../types/index.js").ToolResult>;
|
|
131
143
|
/**
|
|
132
144
|
* Optional bridge for verify-recipe detection. Mirrors `Orchestrator.detectVerifyRecipe`.
|
|
133
145
|
* If absent, sprint-runner uses a deterministic fallback based on the inferVerifyProjectProfile
|
|
@@ -185,7 +197,7 @@ export type ProductTypeT = "saas" | "internal-tool" | "consumer-app" | "b2b-plat
|
|
|
185
197
|
export type PlatformT = "web" | "mobile-ios" | "mobile-android" | "desktop-win" | "desktop-mac" | "desktop-linux" | "cli";
|
|
186
198
|
export type ScaleT = "1-100" | "100-1k" | "1k-100k" | "100k-1M" | "1M+";
|
|
187
199
|
export type BackendArchT = "monolith" | "modular-monolith" | "microservices" | "serverless" | "none";
|
|
188
|
-
export type DbModeT = "greenfield" | "existing-schema" | "migrate-from";
|
|
200
|
+
export type DbModeT = "none" | "greenfield" | "existing-schema" | "migrate-from";
|
|
189
201
|
export type FeLibraryT = "shadcn" | "radix" | "headlessui" | "none";
|
|
190
202
|
export interface AudienceCtx {
|
|
191
203
|
persona: string;
|
|
@@ -353,8 +365,12 @@ export interface PhaseDigestEntry {
|
|
|
353
365
|
* The UI (Task 5.2) wires each id to a concrete handler.
|
|
354
366
|
*/
|
|
355
367
|
export interface RecoveryOption {
|
|
356
|
-
/**
|
|
357
|
-
|
|
368
|
+
/**
|
|
369
|
+
* Stable key. Used by the UI to wire actions.
|
|
370
|
+
* - CB-3 halt (no recipe): init_new | point_to_existing | continue_as_council
|
|
371
|
+
* - Sprint break (A): resume | retry | skip_verify | abort
|
|
372
|
+
*/
|
|
373
|
+
id: "init_new" | "point_to_existing" | "continue_as_council" | "resume" | "retry" | "skip_verify" | "abort";
|
|
358
374
|
/** Label shown in the recovery card. */
|
|
359
375
|
label: string;
|
|
360
376
|
/** One-line user-facing description of what choosing this does. */
|
|
@@ -367,10 +383,22 @@ export interface RecoveryOption {
|
|
|
367
383
|
*/
|
|
368
384
|
export interface HaltChunk {
|
|
369
385
|
type: "halt";
|
|
370
|
-
/**
|
|
371
|
-
|
|
386
|
+
/**
|
|
387
|
+
* CB-3 emits "no_recipe" / "zero_coverage"; product-loop emits
|
|
388
|
+
* "budget_exhausted" when --budget-tokens trips; "sprint_failed" (A) when a
|
|
389
|
+
* sprint breaks mid-run (thrown implement/verify error, cap breach, etc.).
|
|
390
|
+
*/
|
|
391
|
+
reason: "no_recipe" | "zero_coverage" | "budget_exhausted" | "sprint_failed";
|
|
372
392
|
/** Optional human-readable detail rendered alongside the recovery card. */
|
|
373
393
|
detail?: string;
|
|
394
|
+
/**
|
|
395
|
+
* A — the run this halt belongs to. Lets the recovery card auto-wire
|
|
396
|
+
* Resume/Retry/Abort to `/ideal <action> <runId>` without the user knowing
|
|
397
|
+
* (or typing) the runId. Set on "sprint_failed" halts.
|
|
398
|
+
*/
|
|
399
|
+
runId?: string;
|
|
400
|
+
/** A — the sprint number that broke, for the "Sprint N failed" card title. */
|
|
401
|
+
sprintN?: number;
|
|
374
402
|
/** Actionable choices. UI renders these as buttons / list items. */
|
|
375
403
|
recovery_options: RecoveryOption[];
|
|
376
404
|
}
|
|
@@ -393,6 +421,9 @@ export interface RunPhasesOptions {
|
|
|
393
421
|
}) => Promise<Omit<CustomerDecision, "seq" | "timestampUtc" | "phaseId" | "sprintN">>;
|
|
394
422
|
suppressPush?: boolean;
|
|
395
423
|
backoffDelays?: number[];
|
|
424
|
+
/** Project repo cwd — hosts `.planning/` when MUONROI_GSD_NATIVE=1 */
|
|
425
|
+
projectCwd?: string;
|
|
426
|
+
idea?: string;
|
|
396
427
|
}
|
|
397
428
|
export type BacklogItemStatus = "backlog" | "in_sprint" | "in_progress" | "done" | "blocked";
|
|
398
429
|
export type MvpPriority = "v1" | "v2" | "later";
|
|
@@ -45,7 +45,7 @@ export declare function createAdapter(id: ProviderId, config: ProviderConfig): A
|
|
|
45
45
|
* Dispatch is registry-driven — no `if (id === "openai")` branching. To add
|
|
46
46
|
* OAuth for a new provider (Anthropic, etc.):
|
|
47
47
|
* 1. Register the provider in `providers/auth/registry.ts`.
|
|
48
|
-
* 2. Ensure its adapter honors `config.oauthHeaders` (see openai.ts/anthropic.ts
|
|
48
|
+
* 2. Ensure its adapter honors `config.oauthHeaders` (see openai.ts/anthropic.ts).
|
|
49
49
|
*
|
|
50
50
|
* Behavior per provider:
|
|
51
51
|
* - OAuth tokens present (auto-refreshed) → adapter built with Bearer headers,
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
import { createAnthropicAdapter } from "./anthropic.js";
|
|
33
33
|
import { getOAuthProviderConfig } from "./auth/registry.js";
|
|
34
34
|
import { apiBaseFor } from "./endpoints.js";
|
|
35
|
-
import { createGeminiAdapter } from "./gemini.js";
|
|
36
35
|
import { createOllamaAdapter } from "./ollama.js";
|
|
37
36
|
import { createOpenAIAdapter } from "./openai.js";
|
|
38
37
|
import { createOpenAICompatibleAdapter } from "./openai-compatible.js";
|
|
@@ -55,11 +54,11 @@ const ADAPTER_FACTORIES = {
|
|
|
55
54
|
anthropic: (config) => createAnthropicAdapter(config),
|
|
56
55
|
// Synchronous path: API-key only (no OAuth auto-load). Use createAdapterAsync for OAuth.
|
|
57
56
|
openai: (config) => createOpenAIAdapter(config),
|
|
58
|
-
google: (config) => createGeminiAdapter(config),
|
|
59
57
|
deepseek: (config) => createOpenAICompatibleAdapter({ ...config, id: "deepseek" }),
|
|
60
|
-
siliconflow: (config) => createOpenAICompatibleAdapter({ ...config, id: "siliconflow" }),
|
|
61
58
|
xai: (config) => createOpenAICompatibleAdapter({ ...config, id: "xai", baseURL: config.baseURL ?? apiBaseFor("xai") }),
|
|
62
59
|
ollama: (config) => createOllamaAdapter(config),
|
|
60
|
+
zai: (config) => createOpenAICompatibleAdapter({ ...config, id: "zai", baseURL: config.baseURL ?? apiBaseFor("zai") }),
|
|
61
|
+
"opencode-go": (config) => createOpenAICompatibleAdapter({ ...config, id: "opencode-go" }),
|
|
63
62
|
};
|
|
64
63
|
/**
|
|
65
64
|
* Create an Adapter for the given provider.
|
|
@@ -86,7 +85,7 @@ export function createAdapter(id, config) {
|
|
|
86
85
|
* Dispatch is registry-driven — no `if (id === "openai")` branching. To add
|
|
87
86
|
* OAuth for a new provider (Anthropic, etc.):
|
|
88
87
|
* 1. Register the provider in `providers/auth/registry.ts`.
|
|
89
|
-
* 2. Ensure its adapter honors `config.oauthHeaders` (see openai.ts/anthropic.ts
|
|
88
|
+
* 2. Ensure its adapter honors `config.oauthHeaders` (see openai.ts/anthropic.ts).
|
|
90
89
|
*
|
|
91
90
|
* Behavior per provider:
|
|
92
91
|
* - OAuth tokens present (auto-refreshed) → adapter built with Bearer headers,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generic helpers for Authorization Code + PKCE browser-redirect OAuth flows.
|
|
5
5
|
* Usable for any provider that supports the standard OAuth 2.0 browser-redirect
|
|
6
|
-
* grant
|
|
6
|
+
* grant. Not for device-code flows (see device-flow.ts).
|
|
7
7
|
*
|
|
8
8
|
* Re-exports generatePKCE from device-flow.ts so callers need only one import.
|
|
9
9
|
*/
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generic helpers for Authorization Code + PKCE browser-redirect OAuth flows.
|
|
5
5
|
* Usable for any provider that supports the standard OAuth 2.0 browser-redirect
|
|
6
|
-
* grant
|
|
6
|
+
* grant. Not for device-code flows (see device-flow.ts).
|
|
7
7
|
*
|
|
8
8
|
* Re-exports generatePKCE from device-flow.ts so callers need only one import.
|
|
9
9
|
*/
|
|
@@ -321,7 +321,7 @@ function extractIdTokenClaim(idToken, key) {
|
|
|
321
321
|
}
|
|
322
322
|
function buildOpenAIAuthorizeUrl(opts) {
|
|
323
323
|
// Build the query string by hand — generic helpers like buildAuthorizeUrl()
|
|
324
|
-
// inject
|
|
324
|
+
// inject extra params (access_type=offline, prompt=consent) that
|
|
325
325
|
// OpenAI's auth backend rejects with "Authentication Error".
|
|
326
326
|
const params = new URLSearchParams({
|
|
327
327
|
response_type: "code",
|
|
@@ -50,40 +50,6 @@ export async function loadOAuthRegistry() {
|
|
|
50
50
|
catch {
|
|
51
51
|
/* openai-oauth unavailable */
|
|
52
52
|
}
|
|
53
|
-
try {
|
|
54
|
-
const { agyOAuth, loadAgyTokensWithRefresh, loadCustomOAuthTokens } = await import("./gemini-oauth.js");
|
|
55
|
-
const { loadGcloudToken } = await import("./gcloud.js");
|
|
56
|
-
r.google = {
|
|
57
|
-
provider: agyOAuth,
|
|
58
|
-
displayName: "Agy",
|
|
59
|
-
// baseURL intentionally left undefined for the google provider.
|
|
60
|
-
// When OAuth tokens are present, the custom fetch-based provider in
|
|
61
|
-
// google.strategy.ts (Approach A) uses the user-specified baseURL from
|
|
62
|
-
// settings, or falls back to generativelanguage.googleapis.com/v1beta.
|
|
63
|
-
// The old hardcoded cloudcode-pa.googleapis.com endpoint is dead.
|
|
64
|
-
//
|
|
65
|
-
// Token loading chain (Approach B + C):
|
|
66
|
-
// 1. Custom OAuth client from env vars MUONROI_GOOGLE_CLIENT_ID/SECRET
|
|
67
|
-
// or settings providers.google.oauthClientId/oauthClientSecret
|
|
68
|
-
// 2. gcloud ADC (~/.config/gcloud/application_default_credentials.json)
|
|
69
|
-
// 3. Agy OAuth tokens from ~/.gemini/oauth_creds.json (legacy)
|
|
70
|
-
loadTokensWithRefresh: async () => {
|
|
71
|
-
// Approach C: try custom OAuth client first (user-registered GCP client)
|
|
72
|
-
const custom = await loadCustomOAuthTokens().catch(() => null);
|
|
73
|
-
if (custom)
|
|
74
|
-
return custom;
|
|
75
|
-
// Approach B: try gcloud ADC (works immediately after gcloud auth login)
|
|
76
|
-
const gcloud = await loadGcloudToken().catch(() => null);
|
|
77
|
-
if (gcloud)
|
|
78
|
-
return gcloud;
|
|
79
|
-
// Legacy fallback: Agy tokens from ~/.gemini/oauth_creds.json
|
|
80
|
-
return loadAgyTokensWithRefresh();
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
/* agy-oauth unavailable */
|
|
86
|
-
}
|
|
87
53
|
try {
|
|
88
54
|
const { grokOAuth, loadGrokTokensWithRefresh } = await import("./grok-oauth.js");
|
|
89
55
|
r.xai = {
|
|
@@ -71,7 +71,10 @@ export async function saveTokens(provider, tokens) {
|
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
73
|
catch {
|
|
74
|
-
//
|
|
74
|
+
// Keychain write failed (locked keyring, Credential Manager stub, etc.)
|
|
75
|
+
// — fall through to the 0600 file fallback below. Never console.* here:
|
|
76
|
+
// the TUI captures console output and OpenTUI's openConsoleOnError would
|
|
77
|
+
// pop an un-dismissable overlay.
|
|
75
78
|
}
|
|
76
79
|
}
|
|
77
80
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* src/providers/auth/types.ts
|
|
3
3
|
*
|
|
4
4
|
* Provider OAuth interfaces and token shapes.
|
|
5
|
-
* Designed to be extensible for
|
|
5
|
+
* Designed to be extensible for additional provider OAuth in the future.
|
|
6
6
|
*/
|
|
7
7
|
import type { ProviderId } from "../types.js";
|
|
8
8
|
export interface OAuthTokens {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* src/providers/auth/types.ts
|
|
3
3
|
*
|
|
4
4
|
* Provider OAuth interfaces and token shapes.
|
|
5
|
-
* Designed to be extensible for
|
|
5
|
+
* Designed to be extensible for additional provider OAuth in the future.
|
|
6
6
|
*/
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
// Errors
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* src/providers/capabilities.ts
|
|
3
3
|
*
|
|
4
4
|
* Per-provider capability flags. Each provider quirks differently:
|
|
5
|
-
* - DeepSeek
|
|
5
|
+
* - DeepSeek models leak `<|DSML|>` control tokens into
|
|
6
6
|
* JSON tool inputs, breaking Zod validation for plain-text schemas.
|
|
7
|
-
* - OpenAI / Anthropic
|
|
7
|
+
* - OpenAI / Anthropic handle structured tool calls reliably.
|
|
8
8
|
* - Local Ollama models vary wildly per checkpoint — treat conservatively.
|
|
9
9
|
*
|
|
10
10
|
* The PIL Layer 6 output module queries these flags before offering a
|
|
@@ -81,10 +81,10 @@ export interface ProviderCapabilities {
|
|
|
81
81
|
/**
|
|
82
82
|
* Transform conversation history before sending to the provider. Default is
|
|
83
83
|
* identity (returns input by reference). Providers override when they
|
|
84
|
-
* reject specific message parts — e.g.
|
|
85
|
-
*
|
|
84
|
+
* reject specific message parts — e.g. a DeepSeek thinking-mode endpoint
|
|
85
|
+
* that returns HTTP 400 code 20015 when assistant `reasoning` parts are
|
|
86
86
|
* present, because @ai-sdk/openai-compatible does not serialize them as the
|
|
87
|
-
* `reasoning_content` field
|
|
87
|
+
* `reasoning_content` field the endpoint expects.
|
|
88
88
|
*/
|
|
89
89
|
sanitizeHistory<T>(messages: readonly T[]): readonly T[];
|
|
90
90
|
/**
|
|
@@ -133,3 +133,22 @@ export interface ProviderCapabilities {
|
|
|
133
133
|
* unknown so new providers don't accidentally inherit a quirk override.
|
|
134
134
|
*/
|
|
135
135
|
export declare function getProviderCapabilities(providerId: ProviderId | string): ProviderCapabilities;
|
|
136
|
+
/**
|
|
137
|
+
* Resolve the temperature to send for a given (provider, model), or `undefined`
|
|
138
|
+
* to omit the field entirely.
|
|
139
|
+
*
|
|
140
|
+
* Two provider quirks are handled here so no call site has to hardcode a
|
|
141
|
+
* temperature and silently break on a picky upstream:
|
|
142
|
+
* 1. Reasoning models — `acceptsParam("temperature")` returns false; they
|
|
143
|
+
* ignore (OpenAI Responses) or reject temperature. We omit it.
|
|
144
|
+
* 2. Fixed-temperature models — some upstreams (e.g. Moonshot/Kimi via
|
|
145
|
+
* opencode-go) reject any value other than a single allowed one with
|
|
146
|
+
* "invalid temperature: only 1 is allowed for this model". `catalog.json`
|
|
147
|
+
* pins `fixed_temperature` for those; we send exactly that value instead
|
|
148
|
+
* of the caller's desired temperature.
|
|
149
|
+
*
|
|
150
|
+
* Every request that sets a temperature MUST go through this helper — inlining
|
|
151
|
+
* `temperature: 0.7` is what caused the council clarification/spec calls to
|
|
152
|
+
* fail wholesale on a Kimi session (see src/council/llm.ts).
|
|
153
|
+
*/
|
|
154
|
+
export declare function resolveTemperature(providerId: ProviderId | string, model: ModelInfo | undefined, desired: number): number | undefined;
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* src/providers/capabilities.ts
|
|
3
3
|
*
|
|
4
4
|
* Per-provider capability flags. Each provider quirks differently:
|
|
5
|
-
* - DeepSeek
|
|
5
|
+
* - DeepSeek models leak `<|DSML|>` control tokens into
|
|
6
6
|
* JSON tool inputs, breaking Zod validation for plain-text schemas.
|
|
7
|
-
* - OpenAI / Anthropic
|
|
7
|
+
* - OpenAI / Anthropic handle structured tool calls reliably.
|
|
8
8
|
* - Local Ollama models vary wildly per checkpoint — treat conservatively.
|
|
9
9
|
*
|
|
10
10
|
* The PIL Layer 6 output module queries these flags before offering a
|
|
@@ -150,7 +150,7 @@ class XAIProviderCapabilities extends ReliableProviderCapabilities {
|
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
/**
|
|
153
|
-
* DeepSeek
|
|
153
|
+
* DeepSeek quirk: special tokens like `<|DSML|>` leak into
|
|
154
154
|
* tool-call JSON bodies, failing Zod validation. Plain-text schemas
|
|
155
155
|
* (`respond_general`) are hit hardest because the model can't recover
|
|
156
156
|
* from a malformed string field. Structured schemas (`respond_plan`,
|
|
@@ -162,10 +162,6 @@ class XAIProviderCapabilities extends ReliableProviderCapabilities {
|
|
|
162
162
|
* malformed bodies before the model fell back to free-form text.
|
|
163
163
|
*/
|
|
164
164
|
class DeepSeekProviderCapabilities extends ReliableProviderCapabilities {
|
|
165
|
-
/** Namespace used for openai-compatible providerOptions merge. Overridden by SiliconFlow. */
|
|
166
|
-
providerNamespace() {
|
|
167
|
-
return "deepseek";
|
|
168
|
-
}
|
|
169
165
|
supportsResponseTool(taskType) {
|
|
170
166
|
if (taskType === "general")
|
|
171
167
|
return false;
|
|
@@ -180,18 +176,6 @@ class DeepSeekProviderCapabilities extends ReliableProviderCapabilities {
|
|
|
180
176
|
return { readField: "promptCacheHitTokens", creationSupported: false };
|
|
181
177
|
}
|
|
182
178
|
}
|
|
183
|
-
/**
|
|
184
|
-
* SiliconFlow shares DeepSeek's `<|DSML|>` tool-call quirk; everything else
|
|
185
|
-
* (cache metric layout, signup URL pointer) differs only by namespace.
|
|
186
|
-
*/
|
|
187
|
-
class SiliconflowProviderCapabilities extends DeepSeekProviderCapabilities {
|
|
188
|
-
providerNamespace() {
|
|
189
|
-
return "siliconflow";
|
|
190
|
-
}
|
|
191
|
-
consoleSignupURL() {
|
|
192
|
-
return consoleUrlFor("siliconflow");
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
179
|
/**
|
|
196
180
|
* Local Ollama models are heterogeneous; some emit clean tool JSON, some
|
|
197
181
|
* don't. Treat conservatively until per-checkpoint capability detection
|
|
@@ -208,21 +192,29 @@ class OllamaProviderCapabilities extends ReliableProviderCapabilities {
|
|
|
208
192
|
}
|
|
209
193
|
}
|
|
210
194
|
/**
|
|
211
|
-
*
|
|
195
|
+
* Z.ai — defaults are reliable; only the console URL differs.
|
|
196
|
+
*/
|
|
197
|
+
class ZaiProviderCapabilities extends ReliableProviderCapabilities {
|
|
198
|
+
consoleSignupURL() {
|
|
199
|
+
return consoleUrlFor("zai");
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* OpenCode Go — defaults are reliable; only the console URL differs.
|
|
212
204
|
*/
|
|
213
|
-
class
|
|
205
|
+
class OpenCodeGoProviderCapabilities extends ReliableProviderCapabilities {
|
|
214
206
|
consoleSignupURL() {
|
|
215
|
-
return consoleUrlFor("
|
|
207
|
+
return consoleUrlFor("opencode-go");
|
|
216
208
|
}
|
|
217
209
|
}
|
|
218
210
|
const CAPABILITIES = {
|
|
219
211
|
anthropic: new AnthropicProviderCapabilities(),
|
|
220
212
|
openai: new OpenAIProviderCapabilities(),
|
|
221
|
-
google: new GoogleProviderCapabilities(),
|
|
222
213
|
xai: new XAIProviderCapabilities(),
|
|
223
214
|
deepseek: new DeepSeekProviderCapabilities(),
|
|
224
|
-
siliconflow: new SiliconflowProviderCapabilities(),
|
|
225
215
|
ollama: new OllamaProviderCapabilities(),
|
|
216
|
+
zai: new ZaiProviderCapabilities(),
|
|
217
|
+
"opencode-go": new OpenCodeGoProviderCapabilities(),
|
|
226
218
|
};
|
|
227
219
|
/**
|
|
228
220
|
* Singleton resolver — returns the capability instance for a given
|
|
@@ -232,4 +224,30 @@ const CAPABILITIES = {
|
|
|
232
224
|
export function getProviderCapabilities(providerId) {
|
|
233
225
|
return CAPABILITIES[providerId] ?? new ReliableProviderCapabilities();
|
|
234
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Resolve the temperature to send for a given (provider, model), or `undefined`
|
|
229
|
+
* to omit the field entirely.
|
|
230
|
+
*
|
|
231
|
+
* Two provider quirks are handled here so no call site has to hardcode a
|
|
232
|
+
* temperature and silently break on a picky upstream:
|
|
233
|
+
* 1. Reasoning models — `acceptsParam("temperature")` returns false; they
|
|
234
|
+
* ignore (OpenAI Responses) or reject temperature. We omit it.
|
|
235
|
+
* 2. Fixed-temperature models — some upstreams (e.g. Moonshot/Kimi via
|
|
236
|
+
* opencode-go) reject any value other than a single allowed one with
|
|
237
|
+
* "invalid temperature: only 1 is allowed for this model". `catalog.json`
|
|
238
|
+
* pins `fixed_temperature` for those; we send exactly that value instead
|
|
239
|
+
* of the caller's desired temperature.
|
|
240
|
+
*
|
|
241
|
+
* Every request that sets a temperature MUST go through this helper — inlining
|
|
242
|
+
* `temperature: 0.7` is what caused the council clarification/spec calls to
|
|
243
|
+
* fail wholesale on a Kimi session (see src/council/llm.ts).
|
|
244
|
+
*/
|
|
245
|
+
export function resolveTemperature(providerId, model, desired) {
|
|
246
|
+
const caps = getProviderCapabilities(providerId);
|
|
247
|
+
if (!caps.acceptsParam("temperature", model))
|
|
248
|
+
return undefined;
|
|
249
|
+
if (typeof model?.fixedTemperature === "number")
|
|
250
|
+
return model.fixedTemperature;
|
|
251
|
+
return desired;
|
|
252
|
+
}
|
|
235
253
|
//# sourceMappingURL=capabilities.js.map
|
|
@@ -20,6 +20,6 @@ export declare function apiBaseFor(provider: ProviderId): string;
|
|
|
20
20
|
export declare function consoleUrlFor(provider: ProviderId): string;
|
|
21
21
|
/**
|
|
22
22
|
* Default base URLs for OpenAI-compatible providers only. Used by adapters
|
|
23
|
-
* that share the OpenAI SDK shape (deepseek,
|
|
23
|
+
* that share the OpenAI SDK shape (deepseek, xai).
|
|
24
24
|
*/
|
|
25
|
-
export declare const OPENAI_COMPATIBLE_BASE_URLS: Record<"deepseek" | "
|
|
25
|
+
export declare const OPENAI_COMPATIBLE_BASE_URLS: Record<"deepseek" | "xai" | "zai" | "opencode-go", string>;
|
|
@@ -17,18 +17,10 @@ export const PROVIDER_ENDPOINTS = {
|
|
|
17
17
|
apiBase: "https://api.openai.com/v1",
|
|
18
18
|
consoleUrl: "https://platform.openai.com/api-keys",
|
|
19
19
|
},
|
|
20
|
-
google: {
|
|
21
|
-
apiBase: "https://generativelanguage.googleapis.com/v1beta",
|
|
22
|
-
consoleUrl: "https://aistudio.google.com/app/apikey",
|
|
23
|
-
},
|
|
24
20
|
deepseek: {
|
|
25
21
|
apiBase: "https://api.deepseek.com",
|
|
26
22
|
consoleUrl: "https://platform.deepseek.com/api_keys",
|
|
27
23
|
},
|
|
28
|
-
siliconflow: {
|
|
29
|
-
apiBase: "https://api.siliconflow.com/v1",
|
|
30
|
-
consoleUrl: "https://cloud.siliconflow.com/account/ak",
|
|
31
|
-
},
|
|
32
24
|
xai: {
|
|
33
25
|
apiBase: "https://api.x.ai/v1",
|
|
34
26
|
consoleUrl: "https://console.x.ai/",
|
|
@@ -37,6 +29,14 @@ export const PROVIDER_ENDPOINTS = {
|
|
|
37
29
|
apiBase: "http://localhost:11434",
|
|
38
30
|
consoleUrl: "(no key needed for Ollama)",
|
|
39
31
|
},
|
|
32
|
+
zai: {
|
|
33
|
+
apiBase: "https://api.z.ai/api/coding/paas/v4",
|
|
34
|
+
consoleUrl: "https://z.ai/coding-plan",
|
|
35
|
+
},
|
|
36
|
+
"opencode-go": {
|
|
37
|
+
apiBase: "https://opencode.ai/zen/go/v1",
|
|
38
|
+
consoleUrl: "https://opencode.ai",
|
|
39
|
+
},
|
|
40
40
|
};
|
|
41
41
|
/** Fast lookup: provider id → API base URL. */
|
|
42
42
|
export function apiBaseFor(provider) {
|
|
@@ -48,11 +48,12 @@ export function consoleUrlFor(provider) {
|
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
50
|
* Default base URLs for OpenAI-compatible providers only. Used by adapters
|
|
51
|
-
* that share the OpenAI SDK shape (deepseek,
|
|
51
|
+
* that share the OpenAI SDK shape (deepseek, xai).
|
|
52
52
|
*/
|
|
53
53
|
export const OPENAI_COMPATIBLE_BASE_URLS = {
|
|
54
54
|
deepseek: PROVIDER_ENDPOINTS.deepseek.apiBase,
|
|
55
|
-
siliconflow: PROVIDER_ENDPOINTS.siliconflow.apiBase,
|
|
56
55
|
xai: PROVIDER_ENDPOINTS.xai.apiBase,
|
|
56
|
+
zai: PROVIDER_ENDPOINTS.zai.apiBase,
|
|
57
|
+
"opencode-go": PROVIDER_ENDPOINTS["opencode-go"].apiBase,
|
|
57
58
|
};
|
|
58
59
|
//# sourceMappingURL=endpoints.js.map
|
|
@@ -60,7 +60,7 @@ export declare function getConfiguredProviders(): Promise<ProviderId[]>;
|
|
|
60
60
|
export declare function getOAuthTokens(provider: ProviderId): Promise<import("./auth/types.js").OAuthTokens | null>;
|
|
61
61
|
/**
|
|
62
62
|
* Find the first provider with an available API key.
|
|
63
|
-
* Checks in priority order: anthropic, openai,
|
|
63
|
+
* Checks in priority order: anthropic, openai, deepseek, ollama.
|
|
64
64
|
* Returns null if no provider has a key (unlikely — ollama is keyless fallback).
|
|
65
65
|
*/
|
|
66
66
|
export declare function firstAvailableProvider(): Promise<ProviderId | null>;
|
|
@@ -12,8 +12,6 @@ import { redactor } from "../utils/redactor.js";
|
|
|
12
12
|
import { ALL_PROVIDER_IDS } from "./types.js";
|
|
13
13
|
function normalizeKeychainProvider(p) {
|
|
14
14
|
const lower = p.toLowerCase();
|
|
15
|
-
if (lower === "agy")
|
|
16
|
-
return "google"; // agy alias for google provider
|
|
17
15
|
if (ALL_PROVIDER_IDS.includes(lower))
|
|
18
16
|
return lower;
|
|
19
17
|
return null;
|
|
@@ -21,29 +19,29 @@ function normalizeKeychainProvider(p) {
|
|
|
21
19
|
const SETTINGS_KEY_MAP = {
|
|
22
20
|
anthropic: "anthropic",
|
|
23
21
|
openai: "openai",
|
|
24
|
-
google: "google",
|
|
25
22
|
deepseek: "deepseek",
|
|
26
|
-
siliconflow: "siliconflow",
|
|
27
23
|
xai: "xai",
|
|
24
|
+
zai: "zai",
|
|
25
|
+
"opencode-go": "opencode-go",
|
|
28
26
|
};
|
|
29
27
|
const KEYCHAIN_SERVICE = "muonroi-cli";
|
|
30
28
|
const ACCOUNT_BY_PROVIDER = {
|
|
31
29
|
anthropic: "anthropic",
|
|
32
30
|
openai: "openai",
|
|
33
|
-
google: "google",
|
|
34
31
|
deepseek: "deepseek",
|
|
35
|
-
siliconflow: "siliconflow",
|
|
36
32
|
xai: "xai",
|
|
37
33
|
ollama: "ollama",
|
|
34
|
+
zai: "zai",
|
|
35
|
+
"opencode-go": "opencode-go",
|
|
38
36
|
};
|
|
39
37
|
const ENV_BY_PROVIDER = {
|
|
40
38
|
anthropic: "ANTHROPIC_API_KEY",
|
|
41
39
|
openai: "OPENAI_API_KEY",
|
|
42
|
-
google: "GOOGLE_API_KEY",
|
|
43
40
|
deepseek: "DEEPSEEK_API_KEY",
|
|
44
|
-
siliconflow: "SILICONFLOW_API_KEY",
|
|
45
41
|
xai: "XAI_API_KEY",
|
|
46
42
|
ollama: "OLLAMA_API_KEY",
|
|
43
|
+
zai: "ZAI_API_KEY",
|
|
44
|
+
"opencode-go": "OPENCODE_GO_API_KEY",
|
|
47
45
|
};
|
|
48
46
|
/**
|
|
49
47
|
* Thrown when no API key can be found for a provider.
|
|
@@ -258,7 +256,7 @@ export async function getOAuthTokens(provider) {
|
|
|
258
256
|
}
|
|
259
257
|
/**
|
|
260
258
|
* Find the first provider with an available API key.
|
|
261
|
-
* Checks in priority order: anthropic, openai,
|
|
259
|
+
* Checks in priority order: anthropic, openai, deepseek, ollama.
|
|
262
260
|
* Returns null if no provider has a key (unlikely — ollama is keyless fallback).
|
|
263
261
|
*/
|
|
264
262
|
export async function firstAvailableProvider() {
|