muonroi-cli 1.8.3 → 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 +21 -21
- package/README.md +133 -122
- 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 +30 -15
- 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 +254 -84
- 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/oauth-callback.js +2 -2
- 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 +77 -76
- 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 +8 -8
- 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 +159 -159
- 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 +26 -0
- package/dist/src/orchestrator/tool-engine.js +669 -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/layer2_5-ponytail.js +8 -8
- 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/done-gate.js +3 -3
- 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 +327 -116
- 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/progress-snapshot.js +4 -4
- 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 +82 -172
- 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/reporter/index.js +1 -1
- 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/bb-ecosystem-apply.js +47 -47
- package/dist/src/scaffold/bb-quality-gate.js +5 -5
- package/dist/src/scaffold/continuation-prompt.d.ts +11 -0
- package/dist/src/scaffold/continuation-prompt.js +86 -60
- package/dist/src/scaffold/init-new.js +453 -453
- 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 +22 -22
- 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/interaction-log.js +5 -5
- package/dist/src/storage/migrations.js +196 -126
- package/dist/src/storage/session-experience-store.js +4 -4
- package/dist/src/storage/sessions.d.ts +28 -10
- package/dist/src/storage/sessions.js +112 -55
- package/dist/src/storage/transcript-view.js +1 -1
- package/dist/src/storage/transcript.d.ts +51 -0
- package/dist/src/storage/transcript.js +383 -112
- package/dist/src/storage/usage.js +14 -14
- package/dist/src/storage/workspaces.js +12 -12
- 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-inspect.js +4 -4
- 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/clipboard-image.js +23 -23
- package/dist/src/utils/install-manager.js +14 -11
- 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/side-question.js +2 -2
- package/dist/src/utils/skills.js +3 -3
- 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
|
@@ -33,11 +33,37 @@ export interface LeaderResolution {
|
|
|
33
33
|
/** Set when no configured leader existed and one was picked by tier. */
|
|
34
34
|
defaulted?: boolean;
|
|
35
35
|
}
|
|
36
|
+
/** Plan-council leader — always premium-tier within session provider (telemetry: plan-council). */
|
|
37
|
+
export declare function resolvePlanCouncilLeader(sessionModelId: string): Promise<LeaderResolution>;
|
|
36
38
|
export declare function resolveLeaderModelDetailed(sessionModelId: string): Promise<LeaderResolution>;
|
|
37
39
|
/** Back-compat sync wrapper. Returns the modelId only; no reachability check. */
|
|
38
40
|
export declare function resolveLeaderModel(sessionModelId: string): string;
|
|
39
41
|
export declare function hasMultiProviderConfig(roleModels: Partial<Record<ModelRole, string>>): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Count debate roles available for auto-council gating.
|
|
44
|
+
* Uses explicit roleModels when ≥2 configured; otherwise catalog council slots.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getEffectiveCouncilRoleCount(): number;
|
|
40
47
|
export declare function resolveParticipants(sessionModelId: string, preferMultiProvider: boolean): Promise<Array<{
|
|
41
48
|
role: ModelRole;
|
|
42
49
|
model: string;
|
|
43
50
|
}>>;
|
|
51
|
+
/** A model the leader may pick for a task-aware debate panel (U3). */
|
|
52
|
+
export interface CouncilCandidate {
|
|
53
|
+
model: string;
|
|
54
|
+
tier?: string;
|
|
55
|
+
provider?: string;
|
|
56
|
+
roles?: string[];
|
|
57
|
+
description: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Build the pool of models the leader may choose from when assembling a
|
|
61
|
+
* task-aware panel (U3). Seeded with the default roster (guaranteed reachable),
|
|
62
|
+
* then expanded with other reachable, routable models on the same providers.
|
|
63
|
+
* Capped so the selection prompt stays bounded. Never throws — a provider probe
|
|
64
|
+
* failure simply yields a smaller pool, and the caller falls back to the roster.
|
|
65
|
+
*/
|
|
66
|
+
export declare function buildCouncilCandidatePool(defaultRoster: Array<{
|
|
67
|
+
role: ModelRole;
|
|
68
|
+
model: string;
|
|
69
|
+
}>): Promise<CouncilCandidate[]>;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolveGsdPremiumModel } from "../gsd/model-tier.js";
|
|
2
|
+
import { getCatalogCouncilRouting, getModelInfo, getModelsForProvider } from "../models/registry.js";
|
|
2
3
|
import { getConfiguredProviders } from "../providers/keychain.js";
|
|
3
4
|
import { detectProviderForModel } from "../providers/runtime.js";
|
|
5
|
+
import { getRoutedModelByTier } from "../router/peak-hour.js";
|
|
4
6
|
import { getRoleModel, getRoleModels, isProviderDisabled } from "../utils/settings.js";
|
|
5
7
|
const TIER_RANK = { fast: 1, balanced: 2, premium: 3 };
|
|
6
8
|
function tierOf(modelId) {
|
|
@@ -51,7 +53,7 @@ export function pickCouncilTaskModel(task, leaderModelId, costAware) {
|
|
|
51
53
|
catch {
|
|
52
54
|
return leaderModelId;
|
|
53
55
|
}
|
|
54
|
-
const candidate =
|
|
56
|
+
const candidate = getRoutedModelByTier(targetTier, leaderProvider);
|
|
55
57
|
// Only accept a candidate that's on the same provider as the leader.
|
|
56
58
|
// getModelByTier may fall back to "any provider" — reject that to avoid
|
|
57
59
|
// billing surprises and silent key-misses.
|
|
@@ -94,6 +96,29 @@ async function isProviderReachable(provider) {
|
|
|
94
96
|
const configured = await getConfiguredProviders();
|
|
95
97
|
return configured.includes(provider);
|
|
96
98
|
}
|
|
99
|
+
/** Plan-council leader — always premium-tier within session provider (telemetry: plan-council). */
|
|
100
|
+
export async function resolvePlanCouncilLeader(sessionModelId) {
|
|
101
|
+
const sessionProviderId = detectProviderForModel(sessionModelId);
|
|
102
|
+
const sessionDisabled = isProviderDisabled(sessionProviderId);
|
|
103
|
+
const sessionReachable = !sessionDisabled && (await isProviderReachable(sessionProviderId));
|
|
104
|
+
if (!sessionReachable) {
|
|
105
|
+
return { modelId: getRoleModel("leader") ?? sessionModelId };
|
|
106
|
+
}
|
|
107
|
+
const catalogLeader = getModelsForProvider(sessionProviderId).find((m) => m.roles?.includes("leader"));
|
|
108
|
+
if (catalogLeader) {
|
|
109
|
+
return { modelId: catalogLeader.id };
|
|
110
|
+
}
|
|
111
|
+
const premiumId = resolveGsdPremiumModel(sessionModelId);
|
|
112
|
+
const sessionTier = tierOf(sessionModelId);
|
|
113
|
+
const premiumTier = tierOf(premiumId);
|
|
114
|
+
if (premiumId !== sessionModelId && premiumTier && sessionTier && TIER_RANK[premiumTier] > TIER_RANK[sessionTier]) {
|
|
115
|
+
return { modelId: premiumId, promotedFrom: { modelId: sessionModelId, tier: sessionTier } };
|
|
116
|
+
}
|
|
117
|
+
if (premiumId !== sessionModelId) {
|
|
118
|
+
return { modelId: premiumId, defaulted: true };
|
|
119
|
+
}
|
|
120
|
+
return { modelId: sessionModelId, defaulted: true };
|
|
121
|
+
}
|
|
97
122
|
export async function resolveLeaderModelDetailed(sessionModelId) {
|
|
98
123
|
const sessionProviderId = detectProviderForModel(sessionModelId);
|
|
99
124
|
const configured = getRoleModel("leader");
|
|
@@ -104,6 +129,13 @@ export async function resolveLeaderModelDetailed(sessionModelId) {
|
|
|
104
129
|
if (!sessionReachable) {
|
|
105
130
|
return { modelId: configured ?? sessionModelId };
|
|
106
131
|
}
|
|
132
|
+
// 1. If not manually configured, and session provider has a catalog model with "leader" role, use it!
|
|
133
|
+
if (!configured) {
|
|
134
|
+
const catalogLeader = getModelsForProvider(sessionProviderId).find((m) => m.roles?.includes("leader"));
|
|
135
|
+
if (catalogLeader) {
|
|
136
|
+
return { modelId: catalogLeader.id };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
107
139
|
// Build candidate set ON THE SESSION PROVIDER ONLY.
|
|
108
140
|
const candidates = new Map();
|
|
109
141
|
for (const m of getModelsForProvider(sessionProviderId)) {
|
|
@@ -146,11 +178,14 @@ export async function resolveLeaderModelDetailed(sessionModelId) {
|
|
|
146
178
|
promotedFrom: { modelId: configured, tier: configuredTier },
|
|
147
179
|
};
|
|
148
180
|
}
|
|
149
|
-
//
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
//
|
|
153
|
-
//
|
|
181
|
+
// Fallback: no configured leader AND the provider tags no model with the
|
|
182
|
+
// "leader" role. Promoting the leader to the provider's highest tier IS the
|
|
183
|
+
// intended design, but only when there's an EXPLICIT signal for it — a catalog
|
|
184
|
+
// model tagged role:"leader" (handled at the top of this function) or a
|
|
185
|
+
// configured roleModels.leader (promoted up to the best tier above). With
|
|
186
|
+
// neither signal we do NOT guess a top-tier model here: an arbitrary *-pro the
|
|
187
|
+
// key isn't entitled to would 401 on every leader call. So we keep the session
|
|
188
|
+
// model itself.
|
|
154
189
|
return { modelId: sessionModelId, defaulted: true };
|
|
155
190
|
}
|
|
156
191
|
/** Back-compat sync wrapper. Returns the modelId only; no reachability check. */
|
|
@@ -158,6 +193,10 @@ export function resolveLeaderModel(sessionModelId) {
|
|
|
158
193
|
const configured = getRoleModel("leader");
|
|
159
194
|
if (configured)
|
|
160
195
|
return configured;
|
|
196
|
+
const sessionProviderId = detectProviderForModel(sessionModelId);
|
|
197
|
+
const catalogLeader = getModelsForProvider(sessionProviderId).find((m) => m.roles?.includes("leader"));
|
|
198
|
+
if (catalogLeader)
|
|
199
|
+
return catalogLeader.id;
|
|
161
200
|
// See resolveLeaderModelDetailed for why we no longer silently upgrade to
|
|
162
201
|
// the premium tier on the session provider (user may not have access).
|
|
163
202
|
return sessionModelId;
|
|
@@ -170,6 +209,56 @@ export function hasMultiProviderConfig(roleModels) {
|
|
|
170
209
|
}
|
|
171
210
|
return providers.size >= 2;
|
|
172
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Count debate roles available for auto-council gating.
|
|
214
|
+
* Uses explicit roleModels when ≥2 configured; otherwise catalog council slots.
|
|
215
|
+
*/
|
|
216
|
+
export function getEffectiveCouncilRoleCount() {
|
|
217
|
+
const explicit = Object.values(getRoleModels()).filter(Boolean).length;
|
|
218
|
+
if (explicit >= 2)
|
|
219
|
+
return explicit;
|
|
220
|
+
const catalog = getCatalogCouncilRouting();
|
|
221
|
+
if (catalog?.participants?.length && catalog.participants.length >= 2) {
|
|
222
|
+
return catalog.participants.length;
|
|
223
|
+
}
|
|
224
|
+
return explicit;
|
|
225
|
+
}
|
|
226
|
+
async function resolveCatalogCouncilParticipants() {
|
|
227
|
+
const config = getCatalogCouncilRouting();
|
|
228
|
+
if (!config?.participants?.length)
|
|
229
|
+
return [];
|
|
230
|
+
const candidates = [];
|
|
231
|
+
const usedModels = new Set();
|
|
232
|
+
for (const slot of config.participants) {
|
|
233
|
+
const role = slot.role;
|
|
234
|
+
const provider = slot.provider;
|
|
235
|
+
if (isProviderDisabled(provider))
|
|
236
|
+
continue;
|
|
237
|
+
if (!(await isProviderReachable(provider)))
|
|
238
|
+
continue;
|
|
239
|
+
let modelId;
|
|
240
|
+
if (slot.model_id) {
|
|
241
|
+
const info = getModelInfo(slot.model_id);
|
|
242
|
+
if (info?.provider === provider)
|
|
243
|
+
modelId = slot.model_id;
|
|
244
|
+
}
|
|
245
|
+
if (!modelId && slot.tier) {
|
|
246
|
+
const m = getRoutedModelByTier(slot.tier, provider);
|
|
247
|
+
if (m?.provider === provider)
|
|
248
|
+
modelId = m.id;
|
|
249
|
+
}
|
|
250
|
+
if (!modelId) {
|
|
251
|
+
const models = getModelsForProvider(provider);
|
|
252
|
+
const routable = models.find((m) => m.tierRouting !== false);
|
|
253
|
+
modelId = routable?.id ?? models[0]?.id;
|
|
254
|
+
}
|
|
255
|
+
if (!modelId || usedModels.has(modelId))
|
|
256
|
+
continue;
|
|
257
|
+
candidates.push({ role, model: modelId });
|
|
258
|
+
usedModels.add(modelId);
|
|
259
|
+
}
|
|
260
|
+
return candidates.length >= 2 ? candidates : [];
|
|
261
|
+
}
|
|
173
262
|
export async function resolveParticipants(sessionModelId, preferMultiProvider) {
|
|
174
263
|
const ALL_ROLES = ["implement", "verify", "research"];
|
|
175
264
|
const candidates = [];
|
|
@@ -190,6 +279,12 @@ export async function resolveParticipants(sessionModelId, preferMultiProvider) {
|
|
|
190
279
|
if (candidates.length >= 2)
|
|
191
280
|
return candidates;
|
|
192
281
|
}
|
|
282
|
+
// Catalog-defined multi-provider lineup (default for deepseek+zai+opencode-go+xai stack).
|
|
283
|
+
if (preferMultiProvider) {
|
|
284
|
+
const catalogCandidates = await resolveCatalogCouncilParticipants();
|
|
285
|
+
if (catalogCandidates.length >= 2)
|
|
286
|
+
return catalogCandidates;
|
|
287
|
+
}
|
|
193
288
|
const mainProviderId = detectProviderForModel(sessionModelId);
|
|
194
289
|
// Skip same-provider resolution if the provider is disabled
|
|
195
290
|
if (!isProviderDisabled(mainProviderId)) {
|
|
@@ -204,6 +299,49 @@ export async function resolveParticipants(sessionModelId, preferMultiProvider) {
|
|
|
204
299
|
}
|
|
205
300
|
return [];
|
|
206
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* Build the pool of models the leader may choose from when assembling a
|
|
304
|
+
* task-aware panel (U3). Seeded with the default roster (guaranteed reachable),
|
|
305
|
+
* then expanded with other reachable, routable models on the same providers.
|
|
306
|
+
* Capped so the selection prompt stays bounded. Never throws — a provider probe
|
|
307
|
+
* failure simply yields a smaller pool, and the caller falls back to the roster.
|
|
308
|
+
*/
|
|
309
|
+
export async function buildCouncilCandidatePool(defaultRoster) {
|
|
310
|
+
const byId = new Map();
|
|
311
|
+
const add = (modelId) => {
|
|
312
|
+
if (!modelId || byId.has(modelId))
|
|
313
|
+
return;
|
|
314
|
+
const info = getModelInfo(modelId);
|
|
315
|
+
byId.set(modelId, {
|
|
316
|
+
model: modelId,
|
|
317
|
+
tier: info?.tier,
|
|
318
|
+
provider: info?.provider ?? detectProviderForModel(modelId),
|
|
319
|
+
roles: info?.roles,
|
|
320
|
+
description: info?.description ?? "",
|
|
321
|
+
});
|
|
322
|
+
};
|
|
323
|
+
for (const r of defaultRoster)
|
|
324
|
+
add(r.model);
|
|
325
|
+
const providers = new Set();
|
|
326
|
+
for (const r of defaultRoster)
|
|
327
|
+
providers.add(detectProviderForModel(r.model));
|
|
328
|
+
for (const provider of providers) {
|
|
329
|
+
if (byId.size >= 8)
|
|
330
|
+
break;
|
|
331
|
+
if (isProviderDisabled(provider))
|
|
332
|
+
continue;
|
|
333
|
+
if (!(await isProviderReachable(provider)))
|
|
334
|
+
continue;
|
|
335
|
+
for (const m of getModelsForProvider(provider)) {
|
|
336
|
+
if (m.tierRouting === false)
|
|
337
|
+
continue;
|
|
338
|
+
add(m.id);
|
|
339
|
+
if (byId.size >= 8)
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return [...byId.values()];
|
|
344
|
+
}
|
|
207
345
|
async function resolveSameProviderCandidates(providerId, sessionModelId, roles) {
|
|
208
346
|
if (isProviderDisabled(providerId))
|
|
209
347
|
return [];
|
|
@@ -222,8 +360,11 @@ async function resolveSameProviderCandidates(providerId, sessionModelId, roles)
|
|
|
222
360
|
const usedModels = new Set();
|
|
223
361
|
const candidates = [];
|
|
224
362
|
for (const role of roles) {
|
|
225
|
-
|
|
226
|
-
|
|
363
|
+
let picked = providerModels.find((m) => m.roles?.includes(role) && !usedModels.has(m.id));
|
|
364
|
+
if (!picked) {
|
|
365
|
+
const prefs = tierPreference[role] ?? ["balanced", "fast", "premium"];
|
|
366
|
+
picked = providerModels.find((m) => prefs.some((t) => m.tier === t) && !usedModels.has(m.id));
|
|
367
|
+
}
|
|
227
368
|
if (!picked)
|
|
228
369
|
picked = providerModels.find((m) => !usedModels.has(m.id));
|
|
229
370
|
if (!picked)
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import type { BashTool } from "../tools/bash.js";
|
|
2
2
|
import type { AgentMode, CouncilStatusPhase, StreamChunk } from "../types/index.js";
|
|
3
3
|
import type { CouncilLLM, CouncilStats } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Record a council LLM call into the `usage_events` table with source="council".
|
|
6
|
+
*
|
|
7
|
+
* This is the SINGLE source of truth for council usage accounting: it fires from
|
|
8
|
+
* inside every council generate/debate/research call so ALL council entry points
|
|
9
|
+
* (the /council slash path, auto-council, and every /ideal phase — clarifier,
|
|
10
|
+
* research, generate, sprint) land in usage_events. Before this existed, only
|
|
11
|
+
* the loop-driver's `runDebate` call site externally wrapped usage recording, so
|
|
12
|
+
* `runCouncilV2` (/council + auto-council) and the non-debate /ideal phases never
|
|
13
|
+
* recorded — their token cost was invisible to session totals, the StatusBar,
|
|
14
|
+
* `usage forensics`, and the cost caps (root cause of session f24c28b6dcb3:
|
|
15
|
+
* council ran but produced 0 source="council" usage_events).
|
|
16
|
+
*
|
|
17
|
+
* Best-effort: a null sessionId (no chat session FK) or a DB failure must never
|
|
18
|
+
* break the council run, but per the No-Silent-Catch rule we log the failure.
|
|
19
|
+
*/
|
|
20
|
+
export declare function recordCouncilUsage(sessionId: string | undefined, modelId: string, usage: {
|
|
21
|
+
inputTokens: number;
|
|
22
|
+
outputTokens: number;
|
|
23
|
+
cachedInputTokens: number;
|
|
24
|
+
}): void;
|
|
4
25
|
declare global {
|
|
5
26
|
var __muonroiMockLlm: any;
|
|
6
27
|
}
|
|
@@ -24,6 +45,17 @@ interface TracedGenerateArgs {
|
|
|
24
45
|
* Returns the generated text via the AsyncGenerator return value.
|
|
25
46
|
*/
|
|
26
47
|
export declare function tracedGenerate(llm: CouncilLLM, args: TracedGenerateArgs): AsyncGenerator<StreamChunk, string, unknown>;
|
|
48
|
+
/**
|
|
49
|
+
* Run {@link tracedGenerate} across a list of models, returning the first
|
|
50
|
+
* non-empty completion. A model that throws (e.g. a flaky proxy returning
|
|
51
|
+
* "Upstream request failed") or yields only whitespace advances to the next
|
|
52
|
+
* candidate; fallback attempts are labelled so the timeline shows the retry.
|
|
53
|
+
* Returns null when every candidate fails — the caller decides the degraded
|
|
54
|
+
* fallback (e.g. a single-criterion spec). Dedupes the model list in order.
|
|
55
|
+
*/
|
|
56
|
+
export declare function tracedGenerateWithFallback(llm: CouncilLLM, args: Omit<TracedGenerateArgs, "modelId"> & {
|
|
57
|
+
models: string[];
|
|
58
|
+
}): AsyncGenerator<StreamChunk, string | null, unknown>;
|
|
27
59
|
interface TracedAsyncArgs {
|
|
28
60
|
phase: CouncilStatusPhase;
|
|
29
61
|
label: string;
|