muonroi-cli 1.8.4 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +17 -5
- package/dist/packages/agent-harness-core/src/driver.d.ts +27 -1
- package/dist/packages/agent-harness-core/src/driver.js +46 -0
- package/dist/packages/agent-harness-core/src/event-filter.js +11 -0
- package/dist/packages/agent-harness-core/src/event-redact.js +7 -0
- package/dist/packages/agent-harness-core/src/event-tee.d.ts +64 -0
- package/dist/packages/agent-harness-core/src/event-tee.js +104 -0
- package/dist/packages/agent-harness-core/src/mcp-server.d.ts +25 -0
- package/dist/packages/agent-harness-core/src/mcp-server.js +169 -21
- package/dist/packages/agent-harness-core/src/predicate.d.ts +1 -1
- package/dist/packages/agent-harness-core/src/protocol.d.ts +90 -4
- package/dist/packages/agent-harness-core/src/protocol.js +15 -0
- package/dist/packages/agent-harness-core/src/visual-quality.d.ts +58 -0
- package/dist/packages/agent-harness-core/src/visual-quality.js +141 -0
- package/dist/packages/agent-harness-opentui/src/agent-mode.d.ts +6 -0
- package/dist/packages/agent-harness-opentui/src/agent-mode.js +14 -1
- package/dist/packages/agent-harness-opentui/src/input-bridge.d.ts +2 -10
- package/dist/packages/agent-harness-opentui/src/input-bridge.js +103 -16
- package/dist/packages/agent-harness-opentui/src/install.d.ts +8 -0
- package/dist/packages/agent-harness-opentui/src/install.js +10 -0
- package/dist/packages/agent-harness-opentui/src/semantic.js +12 -10
- package/dist/packages/agent-harness-opentui/src/visual-capture.d.ts +56 -0
- package/dist/packages/agent-harness-opentui/src/visual-capture.js +103 -0
- package/dist/src/agent-harness/mock-model.d.ts +38 -0
- package/dist/src/agent-harness/mock-model.js +69 -3
- package/dist/src/agent-harness/test-spawn.js +31 -0
- package/dist/src/chat/chat-keychain.d.ts +7 -12
- package/dist/src/chat/chat-keychain.js +19 -86
- package/dist/src/cli/config/screen-providers.js +1 -1
- package/dist/src/cli/cost-forensics.d.ts +10 -0
- package/dist/src/cli/cost-forensics.js +18 -3
- package/dist/src/cli/keys-bundle.d.ts +1 -1
- package/dist/src/cli/keys-bundle.js +1 -1
- package/dist/src/cli/keys.d.ts +10 -47
- package/dist/src/cli/keys.js +31 -399
- package/dist/src/council/clarifier.d.ts +31 -3
- package/dist/src/council/clarifier.js +220 -32
- package/dist/src/council/context.js +49 -15
- package/dist/src/council/debate-checkpoint.d.ts +129 -0
- package/dist/src/council/debate-checkpoint.js +176 -0
- package/dist/src/council/debate-planner.js +54 -5
- package/dist/src/council/debate-summary.d.ts +25 -0
- package/dist/src/council/debate-summary.js +85 -0
- package/dist/src/council/debate.d.ts +169 -2
- package/dist/src/council/debate.js +1265 -135
- package/dist/src/council/index.d.ts +108 -1
- package/dist/src/council/index.js +670 -197
- package/dist/src/council/leader.d.ts +26 -0
- package/dist/src/council/leader.js +150 -9
- package/dist/src/council/llm.d.ts +94 -0
- package/dist/src/council/llm.js +348 -55
- package/dist/src/council/panel-select.d.ts +30 -0
- package/dist/src/council/panel-select.js +82 -0
- package/dist/src/council/planner.js +40 -0
- package/dist/src/council/preflight.d.ts +17 -0
- package/dist/src/council/preflight.js +50 -2
- package/dist/src/council/prompts.d.ts +39 -4
- package/dist/src/council/prompts.js +256 -69
- package/dist/src/council/stance-recall.d.ts +42 -0
- package/dist/src/council/stance-recall.js +57 -0
- package/dist/src/council/strip-think.d.ts +17 -0
- package/dist/src/council/strip-think.js +33 -0
- package/dist/src/council/types.d.ts +138 -0
- package/dist/src/ee/artifact-cache.d.ts +16 -0
- package/dist/src/ee/artifact-cache.js +32 -0
- package/dist/src/ee/auth.d.ts +20 -0
- package/dist/src/ee/auth.js +54 -2
- package/dist/src/ee/bridge.d.ts +10 -0
- package/dist/src/ee/bridge.js +58 -0
- package/dist/src/ee/client.js +109 -21
- package/dist/src/ee/ee-onboarding.js +6 -26
- package/dist/src/ee/export-transcripts.d.ts +1 -0
- package/dist/src/ee/export-transcripts.js +8 -10
- package/dist/src/ee/extract-session.js +29 -0
- package/dist/src/ee/extract-style.d.ts +58 -0
- package/dist/src/ee/extract-style.js +270 -0
- package/dist/src/ee/recall-ledger.d.ts +9 -0
- package/dist/src/ee/recall-ledger.js +3 -0
- package/dist/src/ee/scope.d.ts +1 -0
- package/dist/src/ee/scope.js +26 -1
- package/dist/src/ee/search.d.ts +7 -0
- package/dist/src/ee/search.js +24 -0
- package/dist/src/ee/transcript-emit.js +2 -0
- package/dist/src/ee/types.d.ts +22 -0
- package/dist/src/ee/who-am-i-brain.d.ts +35 -0
- package/dist/src/ee/who-am-i-brain.js +220 -0
- package/dist/src/ee/who-am-i.d.ts +10 -3
- package/dist/src/ee/who-am-i.js +12 -0
- package/dist/src/ee/workflow-event.d.ts +48 -0
- package/dist/src/ee/workflow-event.js +81 -0
- package/dist/src/flow/compaction/compress.d.ts +3 -3
- package/dist/src/flow/compaction/compress.js +58 -8
- package/dist/src/flow/compaction/extract.d.ts +4 -7
- package/dist/src/flow/compaction/extract.js +50 -10
- package/dist/src/flow/compaction/index.d.ts +14 -1
- package/dist/src/flow/compaction/index.js +96 -3
- package/dist/src/flow/compaction/input-guard.d.ts +24 -0
- package/dist/src/flow/compaction/input-guard.js +43 -0
- package/dist/src/flow/compaction/progress.d.ts +35 -0
- package/dist/src/flow/compaction/progress.js +35 -0
- package/dist/src/flow/fold-planning.d.ts +36 -0
- package/dist/src/flow/fold-planning.js +83 -0
- package/dist/src/flow/hierarchy.d.ts +146 -0
- package/dist/src/flow/hierarchy.js +427 -0
- package/dist/src/flow/index.d.ts +1 -0
- package/dist/src/flow/index.js +2 -0
- package/dist/src/flow/run-artifacts.d.ts +102 -0
- package/dist/src/flow/run-artifacts.js +208 -0
- package/dist/src/generated/version.d.ts +1 -1
- package/dist/src/generated/version.js +1 -1
- package/dist/src/gsd/assessment-schema.d.ts +44 -0
- package/dist/src/gsd/assessment-schema.js +134 -0
- package/dist/src/gsd/capability-registry.d.ts +45 -0
- package/dist/src/gsd/capability-registry.js +337 -0
- package/dist/src/gsd/complexity-assessor.d.ts +39 -0
- package/dist/src/gsd/complexity-assessor.js +152 -0
- package/dist/src/gsd/config-bridge.d.ts +7 -0
- package/dist/src/gsd/config-bridge.js +114 -0
- package/dist/src/gsd/config-loader.d.ts +27 -0
- package/dist/src/gsd/config-loader.js +50 -0
- package/dist/src/gsd/council-context.d.ts +44 -0
- package/dist/src/gsd/council-context.js +114 -0
- package/dist/src/gsd/ee-closure.d.ts +28 -0
- package/dist/src/gsd/ee-closure.js +49 -0
- package/dist/src/gsd/flags.d.ts +66 -0
- package/dist/src/gsd/flags.js +102 -0
- package/dist/src/gsd/gsd-dispatch.d.ts +58 -0
- package/dist/src/gsd/gsd-dispatch.js +131 -0
- package/dist/src/gsd/gsd-runtime.d.ts +22 -0
- package/dist/src/gsd/gsd-runtime.js +37 -0
- package/dist/src/gsd/host-adapter.d.ts +11 -0
- package/dist/src/gsd/host-adapter.js +29 -0
- package/dist/src/gsd/index.d.ts +24 -1
- package/dist/src/gsd/index.js +27 -0
- package/dist/src/gsd/loop-host-contract.d.ts +21 -0
- package/dist/src/gsd/loop-host-contract.js +39 -0
- package/dist/src/gsd/loop-host.d.ts +69 -0
- package/dist/src/gsd/loop-host.js +245 -0
- package/dist/src/gsd/loop-resolver.d.ts +36 -0
- package/dist/src/gsd/loop-resolver.js +79 -0
- package/dist/src/gsd/model-tier.d.ts +13 -0
- package/dist/src/gsd/model-tier.js +45 -0
- package/dist/src/gsd/mutation-gate.d.ts +16 -0
- package/dist/src/gsd/mutation-gate.js +41 -0
- package/dist/src/gsd/native-roadmap.d.ts +89 -0
- package/dist/src/gsd/native-roadmap.js +343 -0
- package/dist/src/gsd/native-state.d.ts +47 -0
- package/dist/src/gsd/native-state.js +220 -0
- package/dist/src/gsd/paths.d.ts +23 -0
- package/dist/src/gsd/paths.js +66 -0
- package/dist/src/gsd/phase-dag.d.ts +12 -0
- package/dist/src/gsd/phase-dag.js +94 -0
- package/dist/src/gsd/phase-sync.d.ts +42 -0
- package/dist/src/gsd/phase-sync.js +321 -0
- package/dist/src/gsd/pil-gate-context.d.ts +13 -0
- package/dist/src/gsd/pil-gate-context.js +64 -0
- package/dist/src/gsd/pil-gate-critic.d.ts +19 -0
- package/dist/src/gsd/pil-gate-critic.js +74 -0
- package/dist/src/gsd/plan-council-prompts.d.ts +25 -0
- package/dist/src/gsd/plan-council-prompts.js +79 -0
- package/dist/src/gsd/plan-council.d.ts +44 -0
- package/dist/src/gsd/plan-council.js +283 -0
- package/dist/src/gsd/plan-gate-vocabulary.d.ts +40 -0
- package/dist/src/gsd/plan-gate-vocabulary.js +64 -0
- package/dist/src/gsd/product-workspace.d.ts +13 -0
- package/dist/src/gsd/product-workspace.js +124 -0
- package/dist/src/gsd/ship-bridge.d.ts +25 -0
- package/dist/src/gsd/ship-bridge.js +65 -0
- package/dist/src/gsd/state-document.d.ts +40 -0
- package/dist/src/gsd/state-document.js +163 -0
- package/dist/src/gsd/verdict-schema.d.ts +39 -0
- package/dist/src/gsd/verdict-schema.js +144 -0
- package/dist/src/gsd/verify-context.d.ts +22 -0
- package/dist/src/gsd/verify-context.js +27 -0
- package/dist/src/gsd/verify-council-prompts.d.ts +19 -0
- package/dist/src/gsd/verify-council-prompts.js +85 -0
- package/dist/src/gsd/verify-council.d.ts +25 -0
- package/dist/src/gsd/verify-council.js +119 -0
- package/dist/src/gsd/verify-gate-vocabulary.d.ts +25 -0
- package/dist/src/gsd/verify-gate-vocabulary.js +46 -0
- package/dist/src/gsd/workflow-engine.d.ts +60 -0
- package/dist/src/gsd/workflow-engine.js +207 -0
- package/dist/src/gsd/workflow-tools.d.ts +13 -0
- package/dist/src/gsd/workflow-tools.js +277 -0
- package/dist/src/headless/council-answers.js +4 -0
- package/dist/src/hooks/index.js +1 -1
- package/dist/src/index.js +172 -270
- package/dist/src/lsp/builtins.js +3 -1
- package/dist/src/lsp/manager.d.ts +5 -1
- package/dist/src/lsp/manager.js +249 -3
- package/dist/src/lsp/npm-cache.d.ts +11 -1
- package/dist/src/lsp/npm-cache.js +17 -1
- package/dist/src/lsp/runtime.d.ts +6 -1
- package/dist/src/lsp/runtime.js +17 -1
- package/dist/src/lsp/types.d.ts +83 -1
- package/dist/src/lsp/types.js +10 -0
- package/dist/src/maintain/pr-builder.js +23 -13
- package/dist/src/mcp/auto-setup.js +57 -32
- package/dist/src/mcp/client-pool.js +44 -16
- package/dist/src/mcp/lsp-tools.d.ts +5 -1
- package/dist/src/mcp/lsp-tools.js +93 -2
- package/dist/src/mcp/mcp-keychain.d.ts +3 -5
- package/dist/src/mcp/mcp-keychain.js +9 -49
- package/dist/src/mcp/research-onboarding.js +8 -7
- package/dist/src/mcp/runtime.js +34 -2
- package/dist/src/mcp/setup-guide-text.d.ts +1 -1
- package/dist/src/mcp/setup-guide-text.js +22 -2
- package/dist/src/mcp/tools-server.d.ts +10 -0
- package/dist/src/mcp/tools-server.js +10 -2
- package/dist/src/models/catalog-client.d.ts +87 -0
- package/dist/src/models/catalog-client.js +105 -38
- package/dist/src/models/catalog.json +528 -265
- package/dist/src/models/registry.d.ts +22 -7
- package/dist/src/models/registry.js +73 -10
- package/dist/src/ops/doctor.js +1 -1
- package/dist/src/orchestrator/ask-user.d.ts +61 -0
- package/dist/src/orchestrator/ask-user.js +65 -0
- package/dist/src/orchestrator/auto-commit.js +1 -1
- package/dist/src/orchestrator/batch-turn-runner.js +2 -2
- package/dist/src/orchestrator/cache-prefix.d.ts +67 -0
- package/dist/src/orchestrator/cache-prefix.js +83 -0
- package/dist/src/orchestrator/compact-request.d.ts +32 -0
- package/dist/src/orchestrator/compact-request.js +41 -0
- package/dist/src/orchestrator/compaction.d.ts +12 -3
- package/dist/src/orchestrator/compaction.js +35 -15
- package/dist/src/orchestrator/council-manager.d.ts +12 -3
- package/dist/src/orchestrator/council-manager.js +74 -32
- package/dist/src/orchestrator/council-request.d.ts +49 -0
- package/dist/src/orchestrator/council-request.js +62 -0
- package/dist/src/orchestrator/cross-turn-dedup.d.ts +6 -0
- package/dist/src/orchestrator/cross-turn-dedup.js +22 -1
- package/dist/src/orchestrator/error-utils.d.ts +29 -0
- package/dist/src/orchestrator/error-utils.js +132 -24
- package/dist/src/orchestrator/grounding-check.js +39 -1
- package/dist/src/orchestrator/interactive-pause.d.ts +26 -0
- package/dist/src/orchestrator/interactive-pause.js +36 -0
- package/dist/src/orchestrator/message-processor.d.ts +4 -0
- package/dist/src/orchestrator/message-processor.js +268 -41
- package/dist/src/orchestrator/orchestrator.d.ts +64 -3
- package/dist/src/orchestrator/orchestrator.js +823 -120
- package/dist/src/orchestrator/preprocessor.js +3 -3
- package/dist/src/orchestrator/proactive-compact-detector.d.ts +26 -0
- package/dist/src/orchestrator/proactive-compact-detector.js +36 -0
- package/dist/src/orchestrator/prompts.js +17 -17
- package/dist/src/orchestrator/reactive-delegation.d.ts +39 -0
- package/dist/src/orchestrator/reactive-delegation.js +59 -0
- package/dist/src/orchestrator/retry-classifier.d.ts +2 -1
- package/dist/src/orchestrator/retry-classifier.js +46 -2
- package/dist/src/orchestrator/safety-askcard.d.ts +1 -1
- package/dist/src/orchestrator/safety-askcard.js +5 -2
- package/dist/src/orchestrator/safety-intercept.d.ts +50 -0
- package/dist/src/orchestrator/safety-intercept.js +62 -0
- package/dist/src/orchestrator/scope-reminder.js +1 -1
- package/dist/src/orchestrator/session-experience.d.ts +2 -1
- package/dist/src/orchestrator/session-experience.js +2 -1
- package/dist/src/orchestrator/should-run-gate.d.ts +5 -0
- package/dist/src/orchestrator/should-run-gate.js +18 -0
- package/dist/src/orchestrator/stall-watchdog.d.ts +31 -3
- package/dist/src/orchestrator/stall-watchdog.js +65 -10
- package/dist/src/orchestrator/stream-runner.d.ts +13 -3
- package/dist/src/orchestrator/stream-runner.js +115 -49
- package/dist/src/orchestrator/sub-agent-cap.d.ts +13 -1
- package/dist/src/orchestrator/sub-agent-cap.js +16 -1
- package/dist/src/orchestrator/sub-agent-model-tier.d.ts +13 -1
- package/dist/src/orchestrator/sub-agent-model-tier.js +16 -2
- package/dist/src/orchestrator/subagent-compactor.d.ts +53 -1
- package/dist/src/orchestrator/subagent-compactor.js +126 -15
- package/dist/src/orchestrator/tool-engine.d.ts +41 -0
- package/dist/src/orchestrator/tool-engine.js +846 -66
- package/dist/src/orchestrator/tool-limit-auto-recover.d.ts +22 -0
- package/dist/src/orchestrator/tool-limit-auto-recover.js +30 -0
- package/dist/src/orchestrator/turn-runner-deps.d.ts +19 -0
- package/dist/src/orchestrator/turn-watchdog.d.ts +44 -0
- package/dist/src/orchestrator/turn-watchdog.js +84 -0
- package/dist/src/pil/agent-operating-contract.d.ts +1 -1
- package/dist/src/pil/agent-operating-contract.js +6 -4
- package/dist/src/pil/cheap-model-playbook.d.ts +1 -1
- package/dist/src/pil/cheap-model-playbook.js +5 -1
- package/dist/src/pil/cheap-model-workbooks.d.ts +1 -1
- package/dist/src/pil/cheap-model-workbooks.js +1 -1
- package/dist/src/pil/discovery-types.d.ts +1 -0
- package/dist/src/pil/discovery.d.ts +1 -1
- package/dist/src/pil/discovery.js +18 -13
- package/dist/src/pil/layer1-intent.d.ts +18 -6
- package/dist/src/pil/layer1-intent.js +66 -757
- package/dist/src/pil/layer15-context-scan.js +15 -1
- package/dist/src/pil/layer1_5-complexity-size.d.ts +7 -0
- package/dist/src/pil/layer1_5-complexity-size.js +31 -5
- package/dist/src/pil/layer3-ee-injection.js +23 -8
- package/dist/src/pil/layer4-gsd.js +69 -16
- package/dist/src/pil/layer5-context.js +7 -3
- package/dist/src/pil/layer6-output.d.ts +23 -0
- package/dist/src/pil/layer6-output.js +5 -1
- package/dist/src/pil/llm-classify.d.ts +111 -5
- package/dist/src/pil/llm-classify.js +421 -189
- package/dist/src/pil/native-capabilities-workbook.d.ts +1 -1
- package/dist/src/pil/native-capabilities-workbook.js +8 -0
- package/dist/src/pil/pipeline.js +36 -2
- package/dist/src/pil/repo-grounding-probe.d.ts +15 -0
- package/dist/src/pil/repo-grounding-probe.js +136 -0
- package/dist/src/pil/repo-structure-hints.d.ts +7 -0
- package/dist/src/pil/repo-structure-hints.js +45 -0
- package/dist/src/pil/response-tools.js +5 -3
- package/dist/src/pil/schema.d.ts +1 -0
- package/dist/src/pil/schema.js +2 -0
- package/dist/src/pil/types.d.ts +18 -0
- package/dist/src/playbook/directives.d.ts +4 -0
- package/dist/src/playbook/directives.js +17 -5
- package/dist/src/product-loop/artifact-io.js +4 -0
- package/dist/src/product-loop/backlog-builder.d.ts +14 -1
- package/dist/src/product-loop/backlog-builder.js +30 -6
- package/dist/src/product-loop/criteria-seed.d.ts +51 -0
- package/dist/src/product-loop/criteria-seed.js +200 -0
- package/dist/src/product-loop/discovery-context-format.js +3 -1
- package/dist/src/product-loop/discovery-ecosystem.js +4 -1
- package/dist/src/product-loop/discovery-interview.d.ts +9 -0
- package/dist/src/product-loop/discovery-interview.js +60 -12
- package/dist/src/product-loop/discovery-recommender.js +2 -1
- package/dist/src/product-loop/discovery-schema.js +19 -2
- package/dist/src/product-loop/discovery-triage.d.ts +23 -0
- package/dist/src/product-loop/discovery-triage.js +109 -0
- package/dist/src/product-loop/gather.js +150 -2
- package/dist/src/product-loop/ideal-trace.d.ts +7 -0
- package/dist/src/product-loop/ideal-trace.js +64 -0
- package/dist/src/product-loop/index.d.ts +13 -1
- package/dist/src/product-loop/index.js +340 -52
- package/dist/src/product-loop/loop-driver.d.ts +7 -0
- package/dist/src/product-loop/loop-driver.js +330 -106
- package/dist/src/product-loop/phase-plan.d.ts +21 -0
- package/dist/src/product-loop/phase-plan.js +81 -6
- package/dist/src/product-loop/phase-rituals.d.ts +3 -0
- package/dist/src/product-loop/phase-rituals.js +8 -3
- package/dist/src/product-loop/phase-runner.js +39 -12
- package/dist/src/product-loop/plan-adherence-review.d.ts +26 -0
- package/dist/src/product-loop/plan-adherence-review.js +144 -0
- package/dist/src/product-loop/sprint-runner.d.ts +173 -0
- package/dist/src/product-loop/sprint-runner.js +863 -19
- package/dist/src/product-loop/types.d.ts +61 -5
- package/dist/src/providers/adapter.d.ts +1 -1
- package/dist/src/providers/adapter.js +3 -4
- package/dist/src/providers/anthropic.d.ts +9 -8
- package/dist/src/providers/anthropic.js +13 -47
- package/dist/src/providers/auth/browser-flow.d.ts +1 -1
- package/dist/src/providers/auth/browser-flow.js +1 -1
- package/dist/src/providers/auth/grok-oauth.d.ts +1 -0
- package/dist/src/providers/auth/grok-oauth.js +30 -5
- package/dist/src/providers/auth/openai-oauth.d.ts +1 -0
- package/dist/src/providers/auth/openai-oauth.js +15 -1
- package/dist/src/providers/auth/registry.js +0 -34
- package/dist/src/providers/auth/token-store.d.ts +9 -9
- package/dist/src/providers/auth/token-store.js +8 -67
- package/dist/src/providers/auth/types.d.ts +9 -1
- package/dist/src/providers/auth/types.js +1 -1
- package/dist/src/providers/capabilities.d.ts +24 -5
- package/dist/src/providers/capabilities.js +42 -24
- package/dist/src/providers/endpoints.d.ts +2 -2
- package/dist/src/providers/endpoints.js +11 -10
- package/dist/src/providers/env-store.d.ts +17 -0
- package/dist/src/providers/env-store.js +228 -0
- package/dist/src/providers/keychain.d.ts +22 -18
- package/dist/src/providers/keychain.js +127 -140
- package/dist/src/providers/mcp-vision-bridge.js +56 -146
- package/dist/src/providers/openai-compatible.js +8 -1
- package/dist/src/providers/pricing.d.ts +2 -2
- package/dist/src/providers/pricing.js +3 -13
- package/dist/src/providers/runtime.d.ts +43 -3
- package/dist/src/providers/runtime.js +88 -14
- package/dist/src/providers/strategies/base.strategy.d.ts +16 -0
- package/dist/src/providers/strategies/base.strategy.js +24 -1
- package/dist/src/providers/strategies/{siliconflow.strategy.d.ts → opencode-go.strategy.d.ts} +3 -3
- package/dist/src/providers/strategies/opencode-go.strategy.js +83 -0
- package/dist/src/providers/strategies/registry.js +4 -4
- package/dist/src/providers/strategies/thinking-mode.d.ts +109 -0
- package/dist/src/providers/strategies/thinking-mode.js +288 -1
- package/dist/src/providers/strategies/xai.strategy.js +27 -0
- package/dist/src/providers/strategies/zai.strategy.d.ts +14 -0
- package/dist/src/providers/strategies/zai.strategy.js +44 -0
- package/dist/src/providers/types.d.ts +5 -6
- package/dist/src/providers/types.js +2 -2
- package/dist/src/providers/vision-backend.d.ts +47 -0
- package/dist/src/providers/vision-backend.js +258 -0
- package/dist/src/providers/vision-proxy.d.ts +22 -9
- package/dist/src/providers/vision-proxy.js +63 -132
- package/dist/src/providers/warm.d.ts +65 -0
- package/dist/src/providers/warm.js +145 -0
- package/dist/src/providers/wire-debug.js +95 -0
- package/dist/src/router/decide.d.ts +13 -0
- package/dist/src/router/decide.js +138 -36
- package/dist/src/router/peak-hour.d.ts +38 -0
- package/dist/src/router/peak-hour.js +107 -0
- package/dist/src/router/step-router.js +3 -2
- package/dist/src/router/warm.js +4 -5
- package/dist/src/scaffold/continuation-prompt.d.ts +11 -0
- package/dist/src/scaffold/continuation-prompt.js +26 -0
- package/dist/src/scaffold/point-to-existing.d.ts +21 -0
- package/dist/src/scaffold/point-to-existing.js +25 -0
- package/dist/src/self-qa/agentic-loop.js +6 -5
- package/dist/src/{ui/state → state}/active-run.d.ts +19 -0
- package/dist/src/{ui/state → state}/active-run.js +21 -0
- package/dist/src/{ui/status-bar/store.d.ts → state/status-bar-store.d.ts} +4 -1
- package/dist/src/{ui/status-bar/store.js → state/status-bar-store.js} +12 -9
- package/dist/src/state/turn-trace.d.ts +43 -0
- package/dist/src/state/turn-trace.js +32 -0
- package/dist/src/storage/db.js +2 -1
- package/dist/src/storage/index.d.ts +1 -1
- package/dist/src/storage/index.js +1 -1
- package/dist/src/storage/interaction-log.d.ts +1 -1
- package/dist/src/storage/migrations.js +71 -1
- package/dist/src/storage/sessions.d.ts +28 -10
- package/dist/src/storage/sessions.js +78 -21
- package/dist/src/storage/transcript-view.js +1 -1
- package/dist/src/storage/transcript.d.ts +51 -0
- package/dist/src/storage/transcript.js +340 -15
- package/dist/src/tools/file.d.ts +15 -0
- package/dist/src/tools/file.js +32 -0
- package/dist/src/tools/git-safety.d.ts +19 -0
- package/dist/src/tools/git-safety.js +168 -0
- package/dist/src/tools/native-tools.d.ts +1 -1
- package/dist/src/tools/native-tools.js +81 -1
- package/dist/src/tools/registry.d.ts +20 -0
- package/dist/src/tools/registry.js +576 -23
- package/dist/src/tools/research.d.ts +29 -0
- package/dist/src/tools/research.js +233 -0
- package/dist/src/types/index.d.ts +147 -4
- package/dist/src/ui/app.js +0 -0
- package/dist/src/ui/cards/product-status-card.js +1 -1
- package/dist/src/ui/components/agent-rail-activities.d.ts +26 -0
- package/dist/src/ui/components/agent-rail-activities.js +47 -0
- package/dist/src/ui/components/bubble-body-guard.d.ts +27 -0
- package/dist/src/ui/components/bubble-body-guard.js +50 -0
- package/dist/src/ui/components/compact-progress-card.d.ts +24 -0
- package/dist/src/ui/components/compact-progress-card.js +42 -0
- package/dist/src/ui/components/context-rail.d.ts +26 -0
- package/dist/src/ui/components/context-rail.js +33 -0
- package/dist/src/ui/components/council-conclusion-card.d.ts +73 -0
- package/dist/src/ui/components/council-conclusion-card.js +420 -0
- package/dist/src/ui/components/council-debate-pill.d.ts +36 -0
- package/dist/src/ui/components/council-debate-pill.js +34 -0
- package/dist/src/ui/components/council-info-card.js +2 -2
- package/dist/src/ui/components/council-leader-bubble.d.ts +10 -3
- package/dist/src/ui/components/council-leader-bubble.js +21 -11
- package/dist/src/ui/components/council-message-bubble.d.ts +15 -2
- package/dist/src/ui/components/council-message-bubble.js +16 -15
- package/dist/src/ui/components/council-phase-timeline.d.ts +9 -1
- package/dist/src/ui/components/council-phase-timeline.js +66 -17
- package/dist/src/ui/components/council-placeholder-bubble.d.ts +16 -9
- package/dist/src/ui/components/council-placeholder-bubble.js +32 -29
- package/dist/src/ui/components/council-question-card.js +13 -12
- package/dist/src/ui/components/council-rail-rounds.d.ts +26 -0
- package/dist/src/ui/components/council-rail-rounds.js +57 -0
- package/dist/src/ui/components/council-round-group.d.ts +38 -0
- package/dist/src/ui/components/council-round-group.js +88 -0
- package/dist/src/ui/components/council-status-list.d.ts +3 -1
- package/dist/src/ui/components/council-status-list.js +36 -24
- package/dist/src/ui/components/council-synthesis-banner.d.ts +7 -2
- package/dist/src/ui/components/council-synthesis-banner.js +20 -5
- package/dist/src/ui/components/halt-recovery-card.js +9 -5
- package/dist/src/ui/components/jump-to-latest-pill.d.ts +11 -0
- package/dist/src/ui/components/jump-to-latest-pill.js +14 -0
- package/dist/src/ui/components/message-view.d.ts +15 -0
- package/dist/src/ui/components/message-view.js +50 -1
- package/dist/src/ui/components/prompt-box.js +18 -16
- package/dist/src/ui/components/session-tree-card.d.ts +14 -0
- package/dist/src/ui/components/session-tree-card.js +46 -0
- package/dist/src/ui/components/slash-inline-menu.d.ts +12 -0
- package/dist/src/ui/components/slash-inline-menu.js +26 -5
- package/dist/src/ui/components/task-list-panel.d.ts +14 -1
- package/dist/src/ui/components/task-list-panel.js +22 -2
- package/dist/src/ui/components/tool-group.d.ts +15 -3
- package/dist/src/ui/components/tool-group.js +69 -11
- package/dist/src/ui/containers/modals-layer.d.ts +4 -2
- package/dist/src/ui/containers/modals-layer.js +2 -2
- package/dist/src/ui/council-harness-event.d.ts +57 -0
- package/dist/src/ui/council-harness-event.js +46 -0
- package/dist/src/ui/heartbeat-debug.d.ts +29 -0
- package/dist/src/ui/heartbeat-debug.js +45 -0
- package/dist/src/ui/hooks/use-session-picker.d.ts +3 -3
- package/dist/src/ui/mcp-modal.js +2 -4
- package/dist/src/ui/modals/api-key-modal.js +1 -1
- package/dist/src/ui/modals/connect-modal.js +4 -3
- package/dist/src/ui/modals/model-picker-modal.d.ts +8 -18
- package/dist/src/ui/modals/model-picker-modal.js +8 -10
- package/dist/src/ui/modals/session-picker-modal.d.ts +2 -2
- package/dist/src/ui/modals/session-picker-modal.js +3 -5
- package/dist/src/ui/picker-providers.d.ts +1 -1
- package/dist/src/ui/picker-providers.js +1 -1
- package/dist/src/ui/primitives/index.d.ts +1 -0
- package/dist/src/ui/primitives/index.js +2 -0
- package/dist/src/ui/primitives/semantic-primitives.d.ts +76 -0
- package/dist/src/ui/primitives/semantic-primitives.js +81 -0
- package/dist/src/ui/slash/compact.js +5 -7
- package/dist/src/ui/slash/cost.js +1 -1
- package/dist/src/ui/slash/council.js +19 -1
- package/dist/src/ui/slash/debug.d.ts +3 -31
- package/dist/src/ui/slash/debug.js +9 -20
- package/dist/src/ui/slash/ee.js +81 -0
- package/dist/src/ui/slash/ideal.d.ts +6 -2
- package/dist/src/ui/slash/ideal.js +97 -7
- package/dist/src/ui/slash/menu-items.d.ts +7 -0
- package/dist/src/ui/slash/menu-items.js +23 -20
- package/dist/src/ui/slash/registry.d.ts +2 -0
- package/dist/src/ui/slash/registry.js +4 -0
- package/dist/src/ui/status-bar/cache-hit.d.ts +6 -0
- package/dist/src/ui/status-bar/cache-hit.js +9 -0
- package/dist/src/ui/status-bar/index.d.ts +1 -1
- package/dist/src/ui/status-bar/index.js +7 -3
- package/dist/src/ui/status-bar/usd-meter.d.ts +5 -4
- package/dist/src/ui/status-bar/usd-meter.js +6 -4
- package/dist/src/ui/theme.d.ts +1 -0
- package/dist/src/ui/theme.js +2 -0
- package/dist/src/ui/types.d.ts +7 -0
- package/dist/src/ui/use-app-logic.js +0 -0
- package/dist/src/ui/utils/agent-activities.d.ts +39 -0
- package/dist/src/ui/utils/agent-activities.js +96 -0
- package/dist/src/ui/utils/format.d.ts +14 -0
- package/dist/src/ui/utils/format.js +23 -3
- package/dist/src/ui/utils/group-tool-entries.d.ts +26 -0
- package/dist/src/ui/utils/group-tool-entries.js +111 -0
- package/dist/src/ui/utils/tool-summary.d.ts +21 -0
- package/dist/src/ui/utils/tool-summary.js +91 -0
- package/dist/src/usage/downgrade.js +2 -2
- package/dist/src/usage/product-ledger.js +2 -2
- package/dist/src/utils/event-loop-monitor.d.ts +85 -0
- package/dist/src/utils/event-loop-monitor.js +107 -0
- package/dist/src/utils/install-manager.js +2 -1
- package/dist/src/utils/llm-deadline.d.ts +14 -0
- package/dist/src/utils/llm-deadline.js +19 -0
- package/dist/src/utils/logger.js +2 -2
- package/dist/src/utils/loop-profiler.d.ts +102 -0
- package/dist/src/utils/loop-profiler.js +202 -0
- package/dist/src/utils/permission-mode.js +5 -3
- package/dist/src/utils/redactor.js +1 -1
- package/dist/src/utils/settings.d.ts +180 -5
- package/dist/src/utils/settings.js +271 -31
- package/dist/src/utils/side-question.d.ts +1 -2
- package/dist/src/utils/side-question.js +2 -2
- package/dist/src/utils/visible-retry.d.ts +11 -0
- package/dist/src/utils/visible-retry.js +10 -1
- package/dist/src/verify/entrypoint.d.ts +1 -1
- package/dist/src/verify/entrypoint.js +52 -17
- package/dist/src/verify/orchestrator.d.ts +1 -1
- package/dist/src/verify/orchestrator.js +20 -3
- package/dist/src/verify/recipes.d.ts +13 -0
- package/dist/src/verify/recipes.js +15 -0
- package/package.json +134 -132
- package/dist/src/cli/bw-vault.d.ts +0 -55
- package/dist/src/cli/bw-vault.js +0 -133
- package/dist/src/mcp/ee-tools.d.ts +0 -46
- package/dist/src/mcp/ee-tools.js +0 -193
- package/dist/src/providers/auth/gcloud.d.ts +0 -28
- package/dist/src/providers/auth/gcloud.js +0 -102
- package/dist/src/providers/auth/gemini-oauth.d.ts +0 -82
- package/dist/src/providers/auth/gemini-oauth.js +0 -472
- package/dist/src/providers/gemini.d.ts +0 -11
- package/dist/src/providers/gemini.js +0 -45
- package/dist/src/providers/siliconflow-sse-repair.d.ts +0 -58
- package/dist/src/providers/siliconflow-sse-repair.js +0 -177
- package/dist/src/providers/strategies/google.strategy.d.ts +0 -22
- package/dist/src/providers/strategies/google.strategy.js +0 -174
- package/dist/src/providers/strategies/siliconflow.strategy.js +0 -29
- package/dist/src/ui/containers/chat-feed.d.ts +0 -40
- package/dist/src/ui/containers/chat-feed.js +0 -66
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render-time guard for council message bodies.
|
|
3
|
+
*
|
|
4
|
+
* Root cause it defends against (live-diagnosed 2026-07-08, run mrbj8v6w81a3):
|
|
5
|
+
* a single round-1 debate turn whose body contained a very long whitespace-free
|
|
6
|
+
* run (an import graph / path list / blob a Flash-tier model dumped over a
|
|
7
|
+
* 1286-file repo). `CouncilMessageBubble` hands the raw body to a single
|
|
8
|
+
* OpenTUI `<text>` node with NO length or line-length bound. OpenTUI's word-wrap
|
|
9
|
+
* on such a mega-line pegs the main thread at 100% CPU — and because render and
|
|
10
|
+
* the product-loop share one JS thread, the entire `/ideal` run hard-freezes
|
|
11
|
+
* (render + input + debate logic all starve). Every muonroi-owned text function
|
|
12
|
+
* on the path (`truncateCodeBlocks`, `renderMarkdown`, `parseInline`,
|
|
13
|
+
* `tokenize`) was benchmarked fast on 80–130KB adversarial input, so the block
|
|
14
|
+
* lives in the terminal's layout of an unbounded body.
|
|
15
|
+
*
|
|
16
|
+
* This function bounds BOTH failure axes before the body reaches `<text>`:
|
|
17
|
+
* 1. total length — cap at `maxChars`, append a muted pointer to /export.
|
|
18
|
+
* 2. line length — hard-break any whitespace-free run longer than the
|
|
19
|
+
* terminal width so the wrapper always has a break opportunity (turns a
|
|
20
|
+
* pathological O(n²) single-line wrap into linear per-segment wrapping).
|
|
21
|
+
*
|
|
22
|
+
* Pure + side-effect free — safe to unit-test without a terminal.
|
|
23
|
+
*/
|
|
24
|
+
/** Default ceiling on a rendered bubble body. Well above any real prose turn
|
|
25
|
+
* (~2–4KB) but far below the 100KB+ blobs that trigger the layout hang. */
|
|
26
|
+
export const MAX_BUBBLE_BODY_CHARS = 12_000;
|
|
27
|
+
/** Lower bound on the wrap column, so a bogus `terminalCols` (0/undefined on a
|
|
28
|
+
* detached harness) never produces a degenerate 1-char break cadence. */
|
|
29
|
+
const MIN_WRAP_COLS = 20;
|
|
30
|
+
export function capBubbleBody(text, terminalCols, maxChars = MAX_BUBBLE_BODY_CHARS) {
|
|
31
|
+
// 1) Total-length cap first — bounds the work the hard-wrap below has to do.
|
|
32
|
+
let body = text;
|
|
33
|
+
let truncated = false;
|
|
34
|
+
if (body.length > maxChars) {
|
|
35
|
+
body = body.slice(0, maxChars);
|
|
36
|
+
truncated = true;
|
|
37
|
+
}
|
|
38
|
+
// 2) Hard-break whitespace-free runs longer than the wrap column. The lookahead
|
|
39
|
+
// `(?=\S)` avoids inserting a break right before an existing whitespace/EOL,
|
|
40
|
+
// so normal prose (which breaks on spaces) is left untouched. Linear: each
|
|
41
|
+
// char is visited once by the non-overlapping global match.
|
|
42
|
+
const cols = Math.max(MIN_WRAP_COLS, Number.isFinite(terminalCols) && terminalCols > 0 ? terminalCols : 80);
|
|
43
|
+
const runBreaker = new RegExp(`(\\S{${cols}})(?=\\S)`, "g");
|
|
44
|
+
body = body.replace(runBreaker, "$1\n");
|
|
45
|
+
if (truncated) {
|
|
46
|
+
body += "\n… truncated — see /export for the full turn";
|
|
47
|
+
}
|
|
48
|
+
return body;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=bubble-body-guard.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/ui/components/compact-progress-card.tsx
|
|
3
|
+
*
|
|
4
|
+
* Live progress for a /compact run. Before this, `/compact` awaited two LLM
|
|
5
|
+
* passes with zero UI — a minute of a frozen screen that reads as a hang.
|
|
6
|
+
*
|
|
7
|
+
* The percentage comes from the compaction pipeline itself
|
|
8
|
+
* (flow/compaction/progress.ts), not from a timer: it advances on real stage
|
|
9
|
+
* boundaries, and the dominant compress pass streams so it moves continuously.
|
|
10
|
+
* The elapsed clock is what proves liveness while a stage is mid-flight.
|
|
11
|
+
*/
|
|
12
|
+
import type { CompactProgress } from "../../flow/compaction/progress.js";
|
|
13
|
+
import type { Theme } from "../theme.js";
|
|
14
|
+
/** Elapsed as the status line shows it: "42s", "1m 19s". */
|
|
15
|
+
export declare function fmtCompactElapsed(ms: number): string;
|
|
16
|
+
/** Filled/unfilled bar of exactly `width` cells for a 0..100 percent. */
|
|
17
|
+
export declare function compactBar(percent: number, width?: number): string;
|
|
18
|
+
export interface CompactProgressCardProps {
|
|
19
|
+
progress: CompactProgress;
|
|
20
|
+
/** Epoch ms the run started. */
|
|
21
|
+
startedAt: number;
|
|
22
|
+
t: Theme;
|
|
23
|
+
}
|
|
24
|
+
export declare function CompactProgressCard({ progress, startedAt, t }: CompactProgressCardProps): import("react").ReactNode;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* src/ui/components/compact-progress-card.tsx
|
|
4
|
+
*
|
|
5
|
+
* Live progress for a /compact run. Before this, `/compact` awaited two LLM
|
|
6
|
+
* passes with zero UI — a minute of a frozen screen that reads as a hang.
|
|
7
|
+
*
|
|
8
|
+
* The percentage comes from the compaction pipeline itself
|
|
9
|
+
* (flow/compaction/progress.ts), not from a timer: it advances on real stage
|
|
10
|
+
* boundaries, and the dominant compress pass streams so it moves continuously.
|
|
11
|
+
* The elapsed clock is what proves liveness while a stage is mid-flight.
|
|
12
|
+
*/
|
|
13
|
+
import { useEffect, useState } from "react";
|
|
14
|
+
import { Region } from "../primitives/semantic-primitives.js";
|
|
15
|
+
const BAR_WIDTH = 34;
|
|
16
|
+
/** Elapsed as the status line shows it: "42s", "1m 19s". */
|
|
17
|
+
export function fmtCompactElapsed(ms) {
|
|
18
|
+
const totalSec = Math.max(0, Math.floor(ms / 1000));
|
|
19
|
+
if (totalSec < 60)
|
|
20
|
+
return `${totalSec}s`;
|
|
21
|
+
return `${Math.floor(totalSec / 60)}m ${totalSec % 60}s`;
|
|
22
|
+
}
|
|
23
|
+
/** Filled/unfilled bar of exactly `width` cells for a 0..100 percent. */
|
|
24
|
+
export function compactBar(percent, width = BAR_WIDTH) {
|
|
25
|
+
const clamped = Math.max(0, Math.min(100, Number.isFinite(percent) ? percent : 0));
|
|
26
|
+
const filled = Math.round((clamped / 100) * width);
|
|
27
|
+
return `${"█".repeat(filled)}${"░".repeat(Math.max(0, width - filled))}`;
|
|
28
|
+
}
|
|
29
|
+
export function CompactProgressCard({ progress, startedAt, t }) {
|
|
30
|
+
// The card owns its clock: a compaction can sit inside one LLM pass for a
|
|
31
|
+
// minute, and re-rendering the whole transcript once a second just to advance
|
|
32
|
+
// a timer is a cost the rest of the app should not pay.
|
|
33
|
+
const [now, setNow] = useState(() => Date.now());
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const id = setInterval(() => setNow(Date.now()), 1000);
|
|
36
|
+
return () => clearInterval(id);
|
|
37
|
+
}, []);
|
|
38
|
+
const elapsed = fmtCompactElapsed(now - startedAt);
|
|
39
|
+
const pct = Math.max(0, Math.min(100, Math.round(progress.percent)));
|
|
40
|
+
return (_jsx(Region, { id: "compact-progress", name: progress.label, value: `${pct}%`, state: progress.stage, props: { percent: pct, elapsedMs: now - startedAt }, children: _jsxs("box", { paddingLeft: 3, marginTop: 1, flexShrink: 0, flexDirection: "column", children: [_jsxs("text", { children: [_jsx("span", { style: { fg: t.accent }, children: "✦ " }), _jsx("span", { style: { fg: t.text }, children: progress.label }), _jsx("span", { style: { fg: t.textMuted }, children: ` (${elapsed})` })] }), _jsx("box", { paddingLeft: 2, children: _jsxs("text", { children: [_jsx("span", { style: { fg: t.accent }, children: compactBar(pct) }), _jsx("span", { style: { fg: t.textMuted }, children: ` ${pct}%` })] }) })] }) }));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=compact-progress-card.js.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
/** A single label/value row shown in the rail's metadata block. */
|
|
3
|
+
export interface ContextRailRow {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ContextRailProps {
|
|
8
|
+
/** Fixed column width of the rail (app.tsx decides based on terminal size). */
|
|
9
|
+
width: number;
|
|
10
|
+
/** Metadata rows (session id, mode, leader, panel, budget, …). */
|
|
11
|
+
rows: ContextRailRow[];
|
|
12
|
+
/**
|
|
13
|
+
* Rich content rendered below the metadata rows — info cards (Clarified Spec,
|
|
14
|
+
* Discussion Brief, Debate Plan), phase timeline, product-status. Wired by
|
|
15
|
+
* later phases; absent in the skeleton.
|
|
16
|
+
*/
|
|
17
|
+
children?: ReactNode;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Right-hand context rail (MUONROI_CONTEXT_RAIL). Moves metadata-heavy chrome
|
|
21
|
+
* (session/leader/panel/budget + info cards) out of the scrolling transcript so
|
|
22
|
+
* the live debate stays on screen. Always renders the GLOBAL view — it never
|
|
23
|
+
* re-scopes to a selected round (that hides the overview and recreates the
|
|
24
|
+
* "empty rounds" problem). app.tsx gates visibility on width ≥ 100 and Ctrl+B.
|
|
25
|
+
*/
|
|
26
|
+
export declare function ContextRail({ width, rows, children }: ContextRailProps): ReactNode;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { Semantic } from "@muonroi/agent-harness-opentui";
|
|
3
|
+
import { dark } from "../theme.js";
|
|
4
|
+
/**
|
|
5
|
+
* Right-hand context rail (MUONROI_CONTEXT_RAIL). Moves metadata-heavy chrome
|
|
6
|
+
* (session/leader/panel/budget + info cards) out of the scrolling transcript so
|
|
7
|
+
* the live debate stays on screen. Always renders the GLOBAL view — it never
|
|
8
|
+
* re-scopes to a selected round (that hides the overview and recreates the
|
|
9
|
+
* "empty rounds" problem). app.tsx gates visibility on width ≥ 100 and Ctrl+B.
|
|
10
|
+
*/
|
|
11
|
+
export function ContextRail({ width, rows, children }) {
|
|
12
|
+
return (_jsx(Semantic, { id: "context-rail", role: "region", name: "Context",
|
|
13
|
+
// labels/values exposed for harness assertions (rail rows are plain <text>,
|
|
14
|
+
// not semantic nodes, so they don't otherwise show in the snapshot tree).
|
|
15
|
+
props: {
|
|
16
|
+
rowCount: rows.length,
|
|
17
|
+
labels: rows.map((r) => r.label).join(","),
|
|
18
|
+
values: rows.map((r) => r.value).join(" | "),
|
|
19
|
+
}, children: _jsxs("box", { flexShrink: 0, width: width, flexDirection: "column", border: ["left"], borderColor: dark.councilLeaderBorder, paddingLeft: 2, paddingRight: 1, gap: 1, children: [_jsx("text", { fg: dark.textMuted, attributes: 1, children: "Context" }), rows.length > 0 && (_jsx("box", { flexDirection: "column", flexShrink: 0, children: rows.map((r, idx) => (
|
|
20
|
+
// Index key: list-style rows (e.g. per-criterion outcome lines) may
|
|
21
|
+
// share an empty or duplicate label, which would collide on a
|
|
22
|
+
// label-keyed map. An empty label renders value-only (no "· : ").
|
|
23
|
+
//
|
|
24
|
+
// Label + value MUST live in one <text> node (via an inline <span>),
|
|
25
|
+
// not two sibling <text> in a flex-row: when a long value wraps, the
|
|
26
|
+
// terminal trims the trailing separator of the preceding text node,
|
|
27
|
+
// so "Topic: rest…" rendered as "Topicrest…" and "Progress: Round…"
|
|
28
|
+
// lost its space. A single text flow keeps the "Label: " prefix.
|
|
29
|
+
_jsx("box", { flexDirection: "column", children: _jsxs("text", { children: [r.label ? _jsx("span", { style: { fg: dark.textMuted }, children: `${r.label}: ` }) : null, r.value] }) }, idx))) })), children ? (
|
|
30
|
+
// biome-ignore lint/suspicious/noExplicitAny: OpenTUI stickyStart typing
|
|
31
|
+
_jsx("scrollbox", { flexGrow: 1, stickyScroll: false, stickyStart: "top", children: children })) : null] }) }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=context-rail.js.map
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { Theme } from "../theme.js";
|
|
2
|
+
/**
|
|
3
|
+
* Structured post-debate conclusion, parsed from the leader synthesis JSON.
|
|
4
|
+
*
|
|
5
|
+
* When a debate's deliverable is an evaluation/decision, the synthesizer emits a
|
|
6
|
+
* JSON object (summary + strengths/weaknesses/recommendation/coverage_matrix …).
|
|
7
|
+
* Rendered verbatim (the old CouncilSynthesisBanner path) it reads as an unbroken
|
|
8
|
+
* wall of JSON — "freetext khó nhìn". This card lifts the known sections into a
|
|
9
|
+
* scannable layout. When the text is NOT parseable structured JSON (e.g. the
|
|
10
|
+
* synthesizer emitted a `---READABLE---` prose tail), `parseConclusion` returns
|
|
11
|
+
* null and the caller falls back to plain-text rendering.
|
|
12
|
+
*/
|
|
13
|
+
export interface DimensionScore {
|
|
14
|
+
dimension: string;
|
|
15
|
+
score: number;
|
|
16
|
+
justification: string;
|
|
17
|
+
}
|
|
18
|
+
export interface OperationalRisk {
|
|
19
|
+
risk: string;
|
|
20
|
+
severity: string;
|
|
21
|
+
trigger: string;
|
|
22
|
+
}
|
|
23
|
+
export interface NextAction {
|
|
24
|
+
action: string;
|
|
25
|
+
label: string;
|
|
26
|
+
reason?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ParsedConclusion {
|
|
29
|
+
summary?: string;
|
|
30
|
+
recommendation?: string;
|
|
31
|
+
strengths: string[];
|
|
32
|
+
weaknesses: string[];
|
|
33
|
+
risks: string[];
|
|
34
|
+
tradeoffs: string[];
|
|
35
|
+
dimensionScores: DimensionScore[];
|
|
36
|
+
operationalRisks: OperationalRisk[];
|
|
37
|
+
priorityFixes: string[];
|
|
38
|
+
nextActions: NextAction[];
|
|
39
|
+
/** Generic rows: each row is a list of its string cell values, best-effort. */
|
|
40
|
+
coverage: string[][];
|
|
41
|
+
/** Leftover top-level keys (implementation_plan etc.) as generic titled sections. */
|
|
42
|
+
sections: Array<{
|
|
43
|
+
title: string;
|
|
44
|
+
items: string[];
|
|
45
|
+
}>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Best-effort parse of possibly-truncated JSON. Providers cut synthesis output
|
|
49
|
+
* at maxTokens mid-array (live-verified 2026-07-06: `"nextActions":[…"action":"ask`),
|
|
50
|
+
* which made the whole conclusion fall back to a raw-JSON text wall.
|
|
51
|
+
*
|
|
52
|
+
* Single scan tracking string/escape state and the open-bracket stack. A "safe
|
|
53
|
+
* point" is the index AFTER a complete VALUE (string close, bracket close, or a
|
|
54
|
+
* number/true/false/null character). A closed string is only tentatively safe:
|
|
55
|
+
* if the next structural char is `:` it was a KEY, so we roll back to the
|
|
56
|
+
* previous safe point (otherwise the cut would produce a dangling `{"key"` —
|
|
57
|
+
* invalid JSON). The bracket stack is snapshotted at each safe point so the
|
|
58
|
+
* appended closers match the cut position, not the ragged end.
|
|
59
|
+
*/
|
|
60
|
+
export declare function salvageJson(body: string): Record<string, unknown> | null;
|
|
61
|
+
/**
|
|
62
|
+
* Best-effort parse of a synthesis body into a structured conclusion. Returns
|
|
63
|
+
* null when the text is not a JSON object with at least one recognizable section
|
|
64
|
+
* — the caller then renders it as plain text.
|
|
65
|
+
*/
|
|
66
|
+
export declare function parseConclusion(text: string): ParsedConclusion | null;
|
|
67
|
+
export interface CouncilConclusionCardProps {
|
|
68
|
+
conclusion: ParsedConclusion;
|
|
69
|
+
/** Round number for a per-round synthesis; undefined = final synthesis. */
|
|
70
|
+
round?: number;
|
|
71
|
+
theme: Theme;
|
|
72
|
+
}
|
|
73
|
+
export declare function CouncilConclusionCard({ conclusion, round, theme: t }: CouncilConclusionCardProps): import("react").ReactNode;
|