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
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* config-loader.ts — Native replacement for gsd-core/bin/lib/config-loader.cjs
|
|
3
|
+
*
|
|
4
|
+
* Simplified config loading for the muonroi-cli native GSD workflow.
|
|
5
|
+
* Reads .planning/config.json from the project directory and returns
|
|
6
|
+
* a normalized config object.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { planningRoot } from "./paths.js";
|
|
11
|
+
/**
|
|
12
|
+
* Load the GSD planning config from .planning/config.json in the given cwd.
|
|
13
|
+
* Returns an empty object when no config is present.
|
|
14
|
+
*/
|
|
15
|
+
export function loadConfig(cwd) {
|
|
16
|
+
// planningRoot resolves `.planning/` when present, else the folded location
|
|
17
|
+
// (`.muonroi-flow/planning/`) — see paths.ts. `.planning/` still wins today.
|
|
18
|
+
const configPath = join(planningRoot(cwd), "config.json");
|
|
19
|
+
if (!existsSync(configPath))
|
|
20
|
+
return {};
|
|
21
|
+
try {
|
|
22
|
+
const raw = readFileSync(configPath, "utf8");
|
|
23
|
+
return JSON.parse(raw);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Resolve a dotted config key against a config object (e.g. "workflow.research"). */
|
|
30
|
+
export function resolveConfigKey(dotKey, config) {
|
|
31
|
+
const parts = dotKey.split(".");
|
|
32
|
+
let current = config;
|
|
33
|
+
for (const part of parts) {
|
|
34
|
+
if (current === null || current === undefined)
|
|
35
|
+
return { found: false, value: undefined };
|
|
36
|
+
if (typeof current !== "object" || Array.isArray(current))
|
|
37
|
+
return { found: false, value: undefined };
|
|
38
|
+
current = current[part];
|
|
39
|
+
}
|
|
40
|
+
return { found: true, value: current };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Simple activation value resolver.
|
|
44
|
+
* If the when key is `true` → active. Absent/falsy → inactive.
|
|
45
|
+
*/
|
|
46
|
+
export function resolveActivationValue(when, config) {
|
|
47
|
+
const { found, value } = resolveConfigKey(when, config);
|
|
48
|
+
return found && value === true;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type WorkflowState } from "./workflow-engine.js";
|
|
2
|
+
/**
|
|
3
|
+
* Council context bundle — the full prior GSD surface the plan-council must
|
|
4
|
+
* see to debate a plan WITHOUT relitigating settled points or losing the
|
|
5
|
+
* user's discuss/research context. This is what makes the council verdict
|
|
6
|
+
* trustworthy enough for the verify step to rely on.
|
|
7
|
+
*
|
|
8
|
+
* Reads are tolerant: missing artifacts degrade to empty strings, never throw.
|
|
9
|
+
* Each section is char-capped to keep the debate prompt bounded.
|
|
10
|
+
*/
|
|
11
|
+
export interface CouncilContextBundle {
|
|
12
|
+
state: WorkflowState;
|
|
13
|
+
workflowKind: string;
|
|
14
|
+
depth: string;
|
|
15
|
+
contextMd: string;
|
|
16
|
+
researchMd: string;
|
|
17
|
+
/** Complexity assessor's rationale (ASSESSMENT.md) — the prior step's output. */
|
|
18
|
+
assessment: string;
|
|
19
|
+
priorConcerns: string[];
|
|
20
|
+
acceptanceCriteria: string[];
|
|
21
|
+
/** Total chars across all sections (telemetry). */
|
|
22
|
+
totalChars: number;
|
|
23
|
+
/** True when a prior PLAN-REVIEW.md seeded concerns (revision cycle). */
|
|
24
|
+
hadPriorConcerns: boolean;
|
|
25
|
+
/** Revision cycle index — 0 on first review, >0 on revisits. */
|
|
26
|
+
revisionCycle: number;
|
|
27
|
+
}
|
|
28
|
+
/** Extract `## Acceptance` / `## Criteria` bullet lines from PLAN.md. */
|
|
29
|
+
export declare function extractAcceptanceCriteria(planBody: string): string[];
|
|
30
|
+
/** Pull `- <concern>` lines from the Concerns section of a prior PLAN-REVIEW.md. */
|
|
31
|
+
export declare function extractPriorConcerns(reviewMd: string): string[];
|
|
32
|
+
/**
|
|
33
|
+
* Render the bundle as a markdown block suitable to prepend to a debate topic
|
|
34
|
+
* or perspective prompt. `revisionCycle > 0` emphasises the prior-concerns
|
|
35
|
+
* directive so the council addresses them instead of re-deriving from scratch.
|
|
36
|
+
*/
|
|
37
|
+
export declare function renderCouncilContextBlock(bundle: CouncilContextBundle, opts?: {
|
|
38
|
+
forPerspective?: "research" | string;
|
|
39
|
+
}): string;
|
|
40
|
+
export interface BuildBundleOpts {
|
|
41
|
+
depth: string;
|
|
42
|
+
revisionCycle?: number;
|
|
43
|
+
}
|
|
44
|
+
export declare function buildCouncilContextBundle(cwd: string, opts: BuildBundleOpts): CouncilContextBundle;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { planningArtifact } from "./paths.js";
|
|
3
|
+
import { readState, readWorkflowKind } from "./workflow-engine.js";
|
|
4
|
+
function cap(text, max) {
|
|
5
|
+
const trimmed = text.trim();
|
|
6
|
+
if (trimmed.length <= max)
|
|
7
|
+
return trimmed;
|
|
8
|
+
return `${trimmed.slice(0, max)}…[truncated]`;
|
|
9
|
+
}
|
|
10
|
+
function readArtifact(cwd, name) {
|
|
11
|
+
const p = planningArtifact(cwd, name);
|
|
12
|
+
return existsSync(p) ? readFileSync(p, "utf8") : "";
|
|
13
|
+
}
|
|
14
|
+
/** Extract `## Acceptance` / `## Criteria` bullet lines from PLAN.md. */
|
|
15
|
+
export function extractAcceptanceCriteria(planBody) {
|
|
16
|
+
const lines = planBody.split("\n");
|
|
17
|
+
let inSection = false;
|
|
18
|
+
const out = [];
|
|
19
|
+
for (const line of lines) {
|
|
20
|
+
const heading = line.match(/^##\s+(.+?)\s*$/i);
|
|
21
|
+
if (heading) {
|
|
22
|
+
inSection = /accept|criteria|success/i.test(heading[1] ?? "");
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (inSection) {
|
|
26
|
+
const bullet = line.match(/^\s*[-*]\s+(.+)$/);
|
|
27
|
+
if (bullet?.[1]?.trim())
|
|
28
|
+
out.push(bullet[1].trim());
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
/** Pull `- <concern>` lines from the Concerns section of a prior PLAN-REVIEW.md. */
|
|
34
|
+
export function extractPriorConcerns(reviewMd) {
|
|
35
|
+
if (!reviewMd.trim())
|
|
36
|
+
return [];
|
|
37
|
+
const lines = reviewMd.split("\n");
|
|
38
|
+
let inSection = false;
|
|
39
|
+
const out = [];
|
|
40
|
+
for (const line of lines) {
|
|
41
|
+
const heading = line.match(/^##\s+(.+?)\s*$/i);
|
|
42
|
+
if (heading) {
|
|
43
|
+
inSection = /concern/i.test(heading[1] ?? "");
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (inSection) {
|
|
47
|
+
const bullet = line.match(/^\s*[-*]\s+(.+)$/);
|
|
48
|
+
if (bullet?.[1]?.trim() && !/^\(none\)$/i.test(bullet[1].trim())) {
|
|
49
|
+
out.push(bullet[1].trim());
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return out;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Render the bundle as a markdown block suitable to prepend to a debate topic
|
|
57
|
+
* or perspective prompt. `revisionCycle > 0` emphasises the prior-concerns
|
|
58
|
+
* directive so the council addresses them instead of re-deriving from scratch.
|
|
59
|
+
*/
|
|
60
|
+
export function renderCouncilContextBlock(bundle, opts = {}) {
|
|
61
|
+
const lines = ["## GSD Context (prior synthesized state)", ""];
|
|
62
|
+
lines.push(`- Phase: ${bundle.state.phase ?? "unknown"} | Depth: ${bundle.depth} | Workflow: ${bundle.workflowKind}`, `- Plan verified so far: ${bundle.state.planVerified ? "yes" : "no"}`);
|
|
63
|
+
if (bundle.contextMd) {
|
|
64
|
+
lines.push("", "### Discuss notes (CONTEXT.md)", "", cap(bundle.contextMd, 2000));
|
|
65
|
+
}
|
|
66
|
+
// Research perspective gets the full digest to avoid re-grounding; others
|
|
67
|
+
// get a short pointer so they know research exists but don't re-litigate it.
|
|
68
|
+
if (bundle.researchMd) {
|
|
69
|
+
const digest = opts.forPerspective === "research" ? cap(bundle.researchMd, 2000) : cap(bundle.researchMd, 400);
|
|
70
|
+
lines.push("", "### Research findings (RESEARCH.md)", "", digest);
|
|
71
|
+
}
|
|
72
|
+
if (bundle.assessment) {
|
|
73
|
+
lines.push("", "### Complexity assessment", "", cap(bundle.assessment, 600));
|
|
74
|
+
}
|
|
75
|
+
if (bundle.acceptanceCriteria.length) {
|
|
76
|
+
lines.push("", "### Acceptance criteria (verify contract)", "");
|
|
77
|
+
for (const c of bundle.acceptanceCriteria.slice(0, 12))
|
|
78
|
+
lines.push(`- ${c}`);
|
|
79
|
+
}
|
|
80
|
+
if (bundle.hadPriorConcerns && bundle.priorConcerns.length) {
|
|
81
|
+
lines.push("", `### Prior council concerns (revision ${bundle.revisionCycle})`, "");
|
|
82
|
+
for (const c of bundle.priorConcerns.slice(0, 20))
|
|
83
|
+
lines.push(`- ${c}`);
|
|
84
|
+
lines.push("", "Each perspective MUST address the prior concerns above in its verdict — do not relitigate settled points.");
|
|
85
|
+
}
|
|
86
|
+
return lines.join("\n");
|
|
87
|
+
}
|
|
88
|
+
export function buildCouncilContextBundle(cwd, opts) {
|
|
89
|
+
const state = readState(cwd);
|
|
90
|
+
const workflowKind = readWorkflowKind(cwd) ?? "task";
|
|
91
|
+
const contextMd = readArtifact(cwd, "CONTEXT.md");
|
|
92
|
+
const researchMd = readArtifact(cwd, "RESEARCH.md");
|
|
93
|
+
const planBody = readArtifact(cwd, "PLAN.md");
|
|
94
|
+
const reviewMd = readArtifact(cwd, "PLAN-REVIEW.md");
|
|
95
|
+
const assessment = readArtifact(cwd, "ASSESSMENT.md");
|
|
96
|
+
const acceptanceCriteria = extractAcceptanceCriteria(planBody);
|
|
97
|
+
const priorConcerns = extractPriorConcerns(reviewMd);
|
|
98
|
+
const hadPriorConcerns = (opts.revisionCycle ?? 0) > 0 && priorConcerns.length > 0;
|
|
99
|
+
const totalChars = state.raw.length + contextMd.length + researchMd.length + reviewMd.length + planBody.length + assessment.length;
|
|
100
|
+
return {
|
|
101
|
+
state,
|
|
102
|
+
workflowKind,
|
|
103
|
+
depth: opts.depth,
|
|
104
|
+
contextMd,
|
|
105
|
+
researchMd,
|
|
106
|
+
assessment,
|
|
107
|
+
priorConcerns,
|
|
108
|
+
acceptanceCriteria,
|
|
109
|
+
totalChars,
|
|
110
|
+
hadPriorConcerns,
|
|
111
|
+
revisionCycle: opts.revisionCycle ?? 0,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=council-context.js.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface GsdNativeTelemetry {
|
|
2
|
+
phase: string | null;
|
|
3
|
+
depth: string | null;
|
|
4
|
+
workflowKind?: string;
|
|
5
|
+
loopPoint?: string;
|
|
6
|
+
planVerified?: boolean;
|
|
7
|
+
verifyVerdict?: string | null;
|
|
8
|
+
councilPerspectives?: number;
|
|
9
|
+
leaderModelId?: string;
|
|
10
|
+
councilContextChars?: number;
|
|
11
|
+
councilHadPriorConcerns?: boolean;
|
|
12
|
+
councilVerdictSource?: "structured" | "heuristic-fallback" | "parse-failed";
|
|
13
|
+
councilVerdictParseFailed?: boolean;
|
|
14
|
+
phaseNumber?: string;
|
|
15
|
+
shipNotes?: string[];
|
|
16
|
+
}
|
|
17
|
+
export declare const PLANNING_CHECKPOINT_QUERY = "Context checkpoint summary OR PLAN-VERIFY verdict OR gsd-native STATE.md .planning/ Progress DONE";
|
|
18
|
+
/** Forensics-visible gsd-native interaction event (Phase 3 telemetry / Phase 5 closure). */
|
|
19
|
+
export declare function logGsdNativeEvent(sessionId: string, data: GsdNativeTelemetry): void;
|
|
20
|
+
export interface VerifyOutcomeOpts {
|
|
21
|
+
sessionId?: string;
|
|
22
|
+
cwd: string;
|
|
23
|
+
depth: string;
|
|
24
|
+
passed: boolean;
|
|
25
|
+
evidence?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
/** Fire EE phase-outcome on gsd verify:post pass/fail (best-effort, B-4 compliant). */
|
|
28
|
+
export declare function fireGsdVerifyOutcome(opts: VerifyOutcomeOpts): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { fireAndForgetPhaseOutcome } from "../ee/phase-outcome.js";
|
|
2
|
+
import { logInteraction } from "../storage/interaction-log.js";
|
|
3
|
+
import { readPlanVerifyVerdict, readState } from "./workflow-engine.js";
|
|
4
|
+
export const PLANNING_CHECKPOINT_QUERY = "Context checkpoint summary OR PLAN-VERIFY verdict OR gsd-native STATE.md .planning/ Progress DONE";
|
|
5
|
+
/** Forensics-visible gsd-native interaction event (Phase 3 telemetry / Phase 5 closure). */
|
|
6
|
+
export function logGsdNativeEvent(sessionId, data) {
|
|
7
|
+
if (!sessionId)
|
|
8
|
+
return;
|
|
9
|
+
try {
|
|
10
|
+
logInteraction(sessionId, "pil", {
|
|
11
|
+
eventSubtype: "gsd-native",
|
|
12
|
+
data: { ...data, ts: Date.now() },
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
console.error(`[gsd-ee-closure] logGsdNativeEvent failed: ${err.message}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** Fire EE phase-outcome on gsd verify:post pass/fail (best-effort, B-4 compliant). */
|
|
20
|
+
export function fireGsdVerifyOutcome(opts) {
|
|
21
|
+
const { sessionId, cwd, depth, passed, evidence } = opts;
|
|
22
|
+
const state = readState(cwd);
|
|
23
|
+
const verdict = readPlanVerifyVerdict(cwd);
|
|
24
|
+
const outcome = passed ? "pass" : "fail";
|
|
25
|
+
logGsdNativeEvent(sessionId ?? "gsd-native", {
|
|
26
|
+
phase: state.phase,
|
|
27
|
+
depth,
|
|
28
|
+
loopPoint: "verify:post",
|
|
29
|
+
planVerified: state.planVerified,
|
|
30
|
+
verifyVerdict: verdict,
|
|
31
|
+
workflowKind: typeof evidence?.workflowKind === "string" ? evidence.workflowKind : undefined,
|
|
32
|
+
});
|
|
33
|
+
if (!sessionId)
|
|
34
|
+
return;
|
|
35
|
+
fireAndForgetPhaseOutcome({
|
|
36
|
+
sessionId,
|
|
37
|
+
phaseName: `gsd:verify:${state.phase ?? "unknown"}`,
|
|
38
|
+
outcome,
|
|
39
|
+
evidence: {
|
|
40
|
+
cwd,
|
|
41
|
+
depth,
|
|
42
|
+
planVerified: state.planVerified,
|
|
43
|
+
planVerifyVerdict: verdict,
|
|
44
|
+
nativeHost: "muonroi-cli",
|
|
45
|
+
...evidence,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ee-closure.js.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native GSD workflow engine — default ON.
|
|
3
|
+
* Agent chooses when to call gsd_* tools; gates are soft except plan-review → execute.
|
|
4
|
+
* Opt out: MUONROI_GSD_NATIVE=0 (legacy playbook rubric, no gsd_* tools).
|
|
5
|
+
*/
|
|
6
|
+
export declare function isGsdNativeEnabled(): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Leader-tier complexity assessor over the native depth slot — default ON
|
|
9
|
+
* when native GSD is on. Opt out: MUONROI_GSD_ASSESSOR=0.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isComplexityAssessorEnabled(): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Native mutation gate — default ON when native GSD is on. Delegates to the SDK's
|
|
14
|
+
* own `canExecute(cwd, depth)` at the write-mutex wrapper so mutation tools are
|
|
15
|
+
* blocked until plan-review passes at standard/heavy depth. Opt out: MUONROI_GSD_HARD_GATE=0.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isGsdHardGateEnabled(): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* PIL prompt-gate full-context enrichment (conversation digest, EE recall,
|
|
20
|
+
* prior PLAN.md excerpt) — default ON when native GSD is on. Opt out:
|
|
21
|
+
* MUONROI_PIL_GATE_ENRICH=0.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isPilGateEnrichEnabled(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Debate/council TUI two-pane redesign — scroll-lock. Default ON (baked). When
|
|
26
|
+
* ON, forced `scrollToBottom()` calls respect the user's manual scroll position
|
|
27
|
+
* (OpenTUI `_hasManualScroll`) so streaming renders don't yank the view back to
|
|
28
|
+
* the latest line while the user is reading history. A jump-to-latest pill
|
|
29
|
+
* re-pins on demand. Opt out: MUONROI_SCROLL_LOCK=0.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isScrollLockEnabled(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Debate/council TUI two-pane redesign — right Context Rail for metadata-heavy
|
|
34
|
+
* modes (debate/council, ideal). Default ON (baked). When ON,
|
|
35
|
+
* session/leader/panel/budget metadata and info-cards move out of the scrolling
|
|
36
|
+
* transcript into a right-hand panel. Requires ≥100 terminal columns; below
|
|
37
|
+
* that the rail is hidden and metadata falls back inline. Opt out:
|
|
38
|
+
* MUONROI_CONTEXT_RAIL=0.
|
|
39
|
+
*/
|
|
40
|
+
export declare function isContextRailEnabled(): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Debate/council TUI two-pane redesign — round-grouped transcript. Default ON
|
|
43
|
+
* (baked). When ON, debate turns are grouped by round; only the running round
|
|
44
|
+
* streams live while done rounds render an expanded summary (input, outcome,
|
|
45
|
+
* leader decision, metrics). Opt out: MUONROI_ROUND_GROUPS=0.
|
|
46
|
+
*/
|
|
47
|
+
export declare function isRoundGroupsEnabled(): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* U3 — task-aware debate panel. Default ON. When ON, the leader reads the task
|
|
50
|
+
* and selects which reachable models should debate it (via selectTaskAwarePanel)
|
|
51
|
+
* instead of the prompt-blind capability roster from resolveParticipants. Always
|
|
52
|
+
* fails open to the default roster on any provider/parse failure. Opt out:
|
|
53
|
+
* MUONROI_TASK_AWARE_PANEL=0.
|
|
54
|
+
*/
|
|
55
|
+
export declare function isTaskAwarePanelEnabled(): boolean;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native GSD workflow engine — default ON.
|
|
3
|
+
* Agent chooses when to call gsd_* tools; gates are soft except plan-review → execute.
|
|
4
|
+
* Opt out: MUONROI_GSD_NATIVE=0 (legacy playbook rubric, no gsd_* tools).
|
|
5
|
+
*/
|
|
6
|
+
export function isGsdNativeEnabled() {
|
|
7
|
+
const raw = process.env.MUONROI_GSD_NATIVE;
|
|
8
|
+
if (raw === "0" || raw?.toLowerCase() === "false")
|
|
9
|
+
return false;
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Leader-tier complexity assessor over the native depth slot — default ON
|
|
14
|
+
* when native GSD is on. Opt out: MUONROI_GSD_ASSESSOR=0.
|
|
15
|
+
*/
|
|
16
|
+
export function isComplexityAssessorEnabled() {
|
|
17
|
+
if (!isGsdNativeEnabled())
|
|
18
|
+
return false;
|
|
19
|
+
return process.env.MUONROI_GSD_ASSESSOR !== "0";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Native mutation gate — default ON when native GSD is on. Delegates to the SDK's
|
|
23
|
+
* own `canExecute(cwd, depth)` at the write-mutex wrapper so mutation tools are
|
|
24
|
+
* blocked until plan-review passes at standard/heavy depth. Opt out: MUONROI_GSD_HARD_GATE=0.
|
|
25
|
+
*/
|
|
26
|
+
export function isGsdHardGateEnabled() {
|
|
27
|
+
if (!isGsdNativeEnabled())
|
|
28
|
+
return false;
|
|
29
|
+
return process.env.MUONROI_GSD_HARD_GATE !== "0";
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* PIL prompt-gate full-context enrichment (conversation digest, EE recall,
|
|
33
|
+
* prior PLAN.md excerpt) — default ON when native GSD is on. Opt out:
|
|
34
|
+
* MUONROI_PIL_GATE_ENRICH=0.
|
|
35
|
+
*/
|
|
36
|
+
export function isPilGateEnrichEnabled() {
|
|
37
|
+
return isGsdNativeEnabled() && process.env.MUONROI_PIL_GATE_ENRICH !== "0";
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Debate/council TUI two-pane redesign — scroll-lock. Default ON (baked). When
|
|
41
|
+
* ON, forced `scrollToBottom()` calls respect the user's manual scroll position
|
|
42
|
+
* (OpenTUI `_hasManualScroll`) so streaming renders don't yank the view back to
|
|
43
|
+
* the latest line while the user is reading history. A jump-to-latest pill
|
|
44
|
+
* re-pins on demand. Opt out: MUONROI_SCROLL_LOCK=0.
|
|
45
|
+
*/
|
|
46
|
+
export function isScrollLockEnabled() {
|
|
47
|
+
const raw = process.env.MUONROI_SCROLL_LOCK;
|
|
48
|
+
return raw !== "0" && raw?.toLowerCase() !== "false";
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Debate/council TUI two-pane redesign — right Context Rail for metadata-heavy
|
|
52
|
+
* modes (debate/council, ideal). Default ON (baked). When ON,
|
|
53
|
+
* session/leader/panel/budget metadata and info-cards move out of the scrolling
|
|
54
|
+
* transcript into a right-hand panel. Requires ≥100 terminal columns; below
|
|
55
|
+
* that the rail is hidden and metadata falls back inline. Opt out:
|
|
56
|
+
* MUONROI_CONTEXT_RAIL=0.
|
|
57
|
+
*/
|
|
58
|
+
export function isContextRailEnabled() {
|
|
59
|
+
const raw = process.env.MUONROI_CONTEXT_RAIL;
|
|
60
|
+
return raw !== "0" && raw?.toLowerCase() !== "false";
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Debate/council TUI two-pane redesign — round-grouped transcript. Default ON
|
|
64
|
+
* (baked). When ON, debate turns are grouped by round; only the running round
|
|
65
|
+
* streams live while done rounds render an expanded summary (input, outcome,
|
|
66
|
+
* leader decision, metrics). Opt out: MUONROI_ROUND_GROUPS=0.
|
|
67
|
+
*/
|
|
68
|
+
export function isRoundGroupsEnabled() {
|
|
69
|
+
const raw = process.env.MUONROI_ROUND_GROUPS;
|
|
70
|
+
return raw !== "0" && raw?.toLowerCase() !== "false";
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* U3 — task-aware debate panel. Default ON. When ON, the leader reads the task
|
|
74
|
+
* and selects which reachable models should debate it (via selectTaskAwarePanel)
|
|
75
|
+
* instead of the prompt-blind capability roster from resolveParticipants. Always
|
|
76
|
+
* fails open to the default roster on any provider/parse failure. Opt out:
|
|
77
|
+
* MUONROI_TASK_AWARE_PANEL=0.
|
|
78
|
+
*/
|
|
79
|
+
export function isTaskAwarePanelEnabled() {
|
|
80
|
+
const raw = process.env.MUONROI_TASK_AWARE_PANEL;
|
|
81
|
+
return raw !== "0" && raw?.toLowerCase() !== "false";
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=flags.js.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export interface GsdDispatchResult<T = unknown> {
|
|
2
|
+
ok: boolean;
|
|
3
|
+
data?: T;
|
|
4
|
+
error?: string;
|
|
5
|
+
raw?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface LoopHooksEnvelope {
|
|
8
|
+
point: string;
|
|
9
|
+
activeHooks: Array<Record<string, unknown>>;
|
|
10
|
+
rendered?: string;
|
|
11
|
+
warnings?: string[];
|
|
12
|
+
}
|
|
13
|
+
/** Resolve Capability Registry hooks at a loop point (native in-process). */
|
|
14
|
+
export declare function dispatchLoopRenderHooks(cwd: string, point: string): GsdDispatchResult<LoopHooksEnvelope>;
|
|
15
|
+
/** Milestone/phase progress JSON (native). */
|
|
16
|
+
export declare function dispatchInitProgress(cwd: string): GsdDispatchResult;
|
|
17
|
+
/** Bootstrap .planning/ (native — the paired ensurePlanningWorkspace writes the real config). */
|
|
18
|
+
export declare function dispatchConfigEnsure(cwd: string): GsdDispatchResult;
|
|
19
|
+
/** Drop cached dispatch results for a cwd. Call after ANY write to STATE.md. */
|
|
20
|
+
export declare function invalidateGsdCache(cwd: string): void;
|
|
21
|
+
/** state update <field> <value> — native STATE.md field replace. */
|
|
22
|
+
export declare function dispatchStateUpdate(cwd: string, field: string, value: string): GsdDispatchResult;
|
|
23
|
+
export interface RoadmapPhaseEntry {
|
|
24
|
+
number: string;
|
|
25
|
+
name?: string;
|
|
26
|
+
depends_on?: string | null;
|
|
27
|
+
disk_status?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface RoadmapAnalyzeResult {
|
|
30
|
+
error?: string;
|
|
31
|
+
phases?: RoadmapPhaseEntry[];
|
|
32
|
+
phase_count?: number;
|
|
33
|
+
current_phase?: string | null;
|
|
34
|
+
}
|
|
35
|
+
export interface PhaseAddResult {
|
|
36
|
+
phaseNumber: string;
|
|
37
|
+
rawStdout: string;
|
|
38
|
+
}
|
|
39
|
+
/** phase add <description> — creates .planning/phases/<NN>-<slug>/ (native). */
|
|
40
|
+
export declare function dispatchPhaseAdd(cwd: string, description: string): GsdDispatchResult<PhaseAddResult>;
|
|
41
|
+
/** phase complete <N> — marks milestone phase done (native). */
|
|
42
|
+
export declare function dispatchPhaseComplete(cwd: string, phaseNum: string): GsdDispatchResult;
|
|
43
|
+
/** roadmap update-plan-progress <N> — sync ROADMAP checkboxes (native). */
|
|
44
|
+
export declare function dispatchRoadmapPlanProgress(cwd: string, phaseNum: string): GsdDispatchResult;
|
|
45
|
+
/** roadmap analyze — parse ROADMAP.md + disk status (native, read-only). */
|
|
46
|
+
export declare function dispatchRoadmapAnalyze(cwd: string): GsdDispatchResult<RoadmapAnalyzeResult>;
|
|
47
|
+
/** state json — frontmatter snapshot (native derivation). */
|
|
48
|
+
export declare function dispatchStateJson(cwd: string): GsdDispatchResult<Record<string, unknown>>;
|
|
49
|
+
/**
|
|
50
|
+
* In-process loop hook resolution — uses native modules instead of dynamic require().
|
|
51
|
+
* For tests and low-latency paths. Replaces the old loadGsdLib() approach.
|
|
52
|
+
*/
|
|
53
|
+
export declare function resolveLoopHooksInProcess(cwd: string, point: string): {
|
|
54
|
+
point: string;
|
|
55
|
+
activeHooks: Array<Record<string, unknown>>;
|
|
56
|
+
} | null;
|
|
57
|
+
/** Map muonroi task phase → gsd STATE.md body field updates. */
|
|
58
|
+
export declare const PHASE_TO_GSD_STATUS: Record<string, string>;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { existsSync, statSync } from "node:fs";
|
|
2
|
+
import { REGISTRY } from "./capability-registry.js";
|
|
3
|
+
import { loadConfig } from "./config-loader.js";
|
|
4
|
+
import { resolveLoopHooks } from "./loop-resolver.js";
|
|
5
|
+
import { nativePhaseAdd, nativePhaseComplete, nativeRoadmapAnalyze, nativeRoadmapPlanProgress, } from "./native-roadmap.js";
|
|
6
|
+
import { nativeConfigEnsure, nativeInitProgress, nativeStateJson, nativeStateUpdate } from "./native-state.js";
|
|
7
|
+
import { planningArtifact } from "./paths.js";
|
|
8
|
+
/** Resolve Capability Registry hooks at a loop point (native in-process). */
|
|
9
|
+
export function dispatchLoopRenderHooks(cwd, point) {
|
|
10
|
+
const native = resolveLoopHooksInProcess(cwd, point);
|
|
11
|
+
if (!native)
|
|
12
|
+
return { ok: false, error: `loop render-hooks(${point}) failed` };
|
|
13
|
+
return { ok: true, data: { point: native.point, activeHooks: native.activeHooks } };
|
|
14
|
+
}
|
|
15
|
+
/** Milestone/phase progress JSON (native). */
|
|
16
|
+
export function dispatchInitProgress(cwd) {
|
|
17
|
+
return readThroughCache(cwd, "init.progress", () => ({ ok: true, data: nativeInitProgress(cwd) }));
|
|
18
|
+
}
|
|
19
|
+
/** Bootstrap .planning/ (native — the paired ensurePlanningWorkspace writes the real config). */
|
|
20
|
+
export function dispatchConfigEnsure(cwd) {
|
|
21
|
+
return { ok: true, data: nativeConfigEnsure(cwd) };
|
|
22
|
+
}
|
|
23
|
+
const _dispatchCache = new Map();
|
|
24
|
+
function stateMtimeMs(cwd) {
|
|
25
|
+
try {
|
|
26
|
+
const p = planningArtifact(cwd, "STATE.md");
|
|
27
|
+
return existsSync(p) ? statSync(p).mtimeMs : 0;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function readThroughCache(cwd, key, produce) {
|
|
34
|
+
const mtime = stateMtimeMs(cwd);
|
|
35
|
+
let bucket = _dispatchCache.get(cwd);
|
|
36
|
+
if (!bucket) {
|
|
37
|
+
bucket = new Map();
|
|
38
|
+
_dispatchCache.set(cwd, bucket);
|
|
39
|
+
}
|
|
40
|
+
const hit = bucket.get(key);
|
|
41
|
+
if (hit && hit.stateMtimeMs === mtime) {
|
|
42
|
+
return hit.value;
|
|
43
|
+
}
|
|
44
|
+
const value = produce();
|
|
45
|
+
// Only cache successful reads — failures usually mean .planning/ absent;
|
|
46
|
+
// caching them would mask a subsequent bootstrap.
|
|
47
|
+
if (value.ok) {
|
|
48
|
+
bucket.set(key, { stateMtimeMs: mtime, value });
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
bucket.delete(key);
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
/** Drop cached dispatch results for a cwd. Call after ANY write to STATE.md. */
|
|
56
|
+
export function invalidateGsdCache(cwd) {
|
|
57
|
+
_dispatchCache.delete(cwd);
|
|
58
|
+
}
|
|
59
|
+
/** state update <field> <value> — native STATE.md field replace. */
|
|
60
|
+
export function dispatchStateUpdate(cwd, field, value) {
|
|
61
|
+
const result = { ok: true, data: nativeStateUpdate(cwd, field, value) };
|
|
62
|
+
// State writes mutate STATE.md → drop cached reads so the next dispatch
|
|
63
|
+
// sees fresh data.
|
|
64
|
+
invalidateGsdCache(cwd);
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
/** phase add <description> — creates .planning/phases/<NN>-<slug>/ (native). */
|
|
68
|
+
export function dispatchPhaseAdd(cwd, description) {
|
|
69
|
+
const sanitized = description.trim().slice(0, 120);
|
|
70
|
+
const native = nativePhaseAdd(cwd, sanitized);
|
|
71
|
+
if ("error" in native)
|
|
72
|
+
return { ok: false, error: native.error };
|
|
73
|
+
return { ok: true, data: { phaseNumber: native.padded, rawStdout: native.padded } };
|
|
74
|
+
}
|
|
75
|
+
/** phase complete <N> — marks milestone phase done (native). */
|
|
76
|
+
export function dispatchPhaseComplete(cwd, phaseNum) {
|
|
77
|
+
const num = phaseNum.replace(/^0+/, "") || phaseNum;
|
|
78
|
+
const r = nativePhaseComplete(cwd, num);
|
|
79
|
+
// STATE.md may have changed → drop cached reads.
|
|
80
|
+
invalidateGsdCache(cwd);
|
|
81
|
+
if (!r.ok)
|
|
82
|
+
return { ok: false, error: r.error };
|
|
83
|
+
return { ok: true, data: r };
|
|
84
|
+
}
|
|
85
|
+
/** roadmap update-plan-progress <N> — sync ROADMAP checkboxes (native). */
|
|
86
|
+
export function dispatchRoadmapPlanProgress(cwd, phaseNum) {
|
|
87
|
+
const num = phaseNum.replace(/^0+/, "") || phaseNum;
|
|
88
|
+
const r = nativeRoadmapPlanProgress(cwd, num);
|
|
89
|
+
// "no plans" / "ROADMAP missing" are soft (ok:true, updated:false); only
|
|
90
|
+
// phase-not-found is a hard error.
|
|
91
|
+
const hardFail = !r.updated && r.reason === `Phase ${num} not found`;
|
|
92
|
+
return { ok: !hardFail, data: r, raw: r.raw };
|
|
93
|
+
}
|
|
94
|
+
/** roadmap analyze — parse ROADMAP.md + disk status (native, read-only). */
|
|
95
|
+
export function dispatchRoadmapAnalyze(cwd) {
|
|
96
|
+
return { ok: true, data: nativeRoadmapAnalyze(cwd) };
|
|
97
|
+
}
|
|
98
|
+
/** state json — frontmatter snapshot (native derivation). */
|
|
99
|
+
export function dispatchStateJson(cwd) {
|
|
100
|
+
return readThroughCache(cwd, "state.json", () => ({
|
|
101
|
+
ok: true,
|
|
102
|
+
data: nativeStateJson(cwd),
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* In-process loop hook resolution — uses native modules instead of dynamic require().
|
|
107
|
+
* For tests and low-latency paths. Replaces the old loadGsdLib() approach.
|
|
108
|
+
*/
|
|
109
|
+
export function resolveLoopHooksInProcess(cwd, point) {
|
|
110
|
+
try {
|
|
111
|
+
const config = loadConfig(cwd);
|
|
112
|
+
const resolved = resolveLoopHooks({ point, registry: REGISTRY, config, cwd });
|
|
113
|
+
// Convert LoopHook[] to the broader array shape for backward compatibility
|
|
114
|
+
const activeHooks = resolved.activeHooks;
|
|
115
|
+
return { point: resolved.point, activeHooks };
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
console.error(`[gsd-dispatch] resolveLoopHooksInProcess(${point}) failed: ${err.message}`);
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** Map muonroi task phase → gsd STATE.md body field updates. */
|
|
123
|
+
export const PHASE_TO_GSD_STATUS = {
|
|
124
|
+
discuss: "Planning",
|
|
125
|
+
plan: "Planning",
|
|
126
|
+
execute: "In progress",
|
|
127
|
+
verify: "In progress",
|
|
128
|
+
review: "Phase complete",
|
|
129
|
+
debug: "In progress",
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=gsd-dispatch.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gsd-runtime.ts — Native GSD runtime (replaces dynamic require() of .cjs blobs).
|
|
3
|
+
*
|
|
4
|
+
* Sprint 1: 5 in-process .cjs modules migrated to native TS.
|
|
5
|
+
* Sprint 2: the last gsd-tools subprocess calls were reimplemented natively and
|
|
6
|
+
* the `@opengsd/gsd-core` dependency was removed entirely (see gsd-dispatch.ts).
|
|
7
|
+
*/
|
|
8
|
+
import { type LoopHostContractEntry } from "./loop-host-contract.js";
|
|
9
|
+
import { computeProgressPercent, isStateTemplateDefault, normalizeStateStatus, type StateDocumentModule, stateExtractField, stateReplaceField, stateReplaceFieldWithFallback } from "./state-document.js";
|
|
10
|
+
export type { LoopHostContractEntry, StateDocumentModule };
|
|
11
|
+
/**
|
|
12
|
+
* Load the loop host contract — returns the in-memory LOOP_HOST_CONTRACT.
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadLoopHostContract(): LoopHostContractEntry[];
|
|
15
|
+
/** All canonical loop points. */
|
|
16
|
+
export declare function allLoopHostPoints(): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Load the state document module — returns native implementations wrapping
|
|
19
|
+
* the pure functions from state-document.ts.
|
|
20
|
+
*/
|
|
21
|
+
export declare function loadStateDocument(): StateDocumentModule;
|
|
22
|
+
export { computeProgressPercent, isStateTemplateDefault, normalizeStateStatus, stateExtractField, stateReplaceField, stateReplaceFieldWithFallback, };
|