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,37 @@
|
|
|
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 { LOOP_HOST_CONTRACT } from "./loop-host-contract.js";
|
|
9
|
+
import { computeProgressPercent, isStateTemplateDefault, normalizeStateStatus, stateExtractField, stateReplaceField, stateReplaceFieldWithFallback, } from "./state-document.js";
|
|
10
|
+
// Memoised contract cache
|
|
11
|
+
let _loopHostContractCache = null;
|
|
12
|
+
/**
|
|
13
|
+
* Load the loop host contract — returns the in-memory LOOP_HOST_CONTRACT.
|
|
14
|
+
*/
|
|
15
|
+
export function loadLoopHostContract() {
|
|
16
|
+
if (_loopHostContractCache)
|
|
17
|
+
return _loopHostContractCache;
|
|
18
|
+
_loopHostContractCache = LOOP_HOST_CONTRACT;
|
|
19
|
+
return _loopHostContractCache;
|
|
20
|
+
}
|
|
21
|
+
/** All canonical loop points. */
|
|
22
|
+
export function allLoopHostPoints() {
|
|
23
|
+
return loadLoopHostContract().flatMap((e) => e.points);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Load the state document module — returns native implementations wrapping
|
|
27
|
+
* the pure functions from state-document.ts.
|
|
28
|
+
*/
|
|
29
|
+
export function loadStateDocument() {
|
|
30
|
+
return {
|
|
31
|
+
stateExtractField,
|
|
32
|
+
stateReplaceField,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Re-export key state-document functions for convenience
|
|
36
|
+
export { computeProgressPercent, isStateTemplateDefault, normalizeStateStatus, stateExtractField, stateReplaceField, stateReplaceFieldWithFallback, };
|
|
37
|
+
//# sourceMappingURL=gsd-runtime.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type LoopHostContext, type LoopPointResult } from "./loop-host.js";
|
|
2
|
+
export type { LoopHostContext, LoopPointResult };
|
|
3
|
+
/** @deprecated Use GsdLoopHost.firePoint — thin facade for backwards compatibility. */
|
|
4
|
+
export declare class GsdHostAdapter {
|
|
5
|
+
private host;
|
|
6
|
+
dispatch(point: string, ctx: LoopHostContext): Promise<boolean>;
|
|
7
|
+
registeredPoints(): string[];
|
|
8
|
+
contractPoints(): string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function createDefaultHostAdapter(): GsdHostAdapter;
|
|
11
|
+
export { GsdLoopHost, getGsdLoopHost } from "./loop-host.js";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { loadLoopHostContract } from "./gsd-runtime.js";
|
|
2
|
+
import { getGsdLoopHost } from "./loop-host.js";
|
|
3
|
+
/** @deprecated Use GsdLoopHost.firePoint — thin facade for backwards compatibility. */
|
|
4
|
+
export class GsdHostAdapter {
|
|
5
|
+
host = getGsdLoopHost();
|
|
6
|
+
async dispatch(point, ctx) {
|
|
7
|
+
if (point === "plan-review:post") {
|
|
8
|
+
await this.host.firePoint(point, ctx);
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
const contract = this.host.canonicalPoints();
|
|
12
|
+
if (!contract.includes(point) && point !== "plan-review:post") {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
await this.host.firePoint(point, ctx);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
registeredPoints() {
|
|
19
|
+
return [...this.host.canonicalPoints(), "plan-review:post"];
|
|
20
|
+
}
|
|
21
|
+
contractPoints() {
|
|
22
|
+
return loadLoopHostContract().flatMap((e) => e.points);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function createDefaultHostAdapter() {
|
|
26
|
+
return new GsdHostAdapter();
|
|
27
|
+
}
|
|
28
|
+
export { GsdLoopHost, getGsdLoopHost } from "./loop-host.js";
|
|
29
|
+
//# sourceMappingURL=host-adapter.js.map
|
package/dist/src/gsd/index.d.ts
CHANGED
|
@@ -1 +1,24 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { type CapabilityRegistry, debateErrorStub, type LoopHook, type LoopPointEntry, REGISTRY, } from "./capability-registry.js";
|
|
2
|
+
export { type AssessInput, type AssessResult, assessComplexity, shouldAssess } from "./complexity-assessor.js";
|
|
3
|
+
export { buildPlanningConfig, ensurePlanningWorkspace } from "./config-bridge.js";
|
|
4
|
+
export { loadConfig, type PlanningConfig, resolveConfigKey } from "./config-loader.js";
|
|
5
|
+
export { fireGsdVerifyOutcome, logGsdNativeEvent, PLANNING_CHECKPOINT_QUERY } from "./ee-closure.js";
|
|
6
|
+
export { isComplexityAssessorEnabled, isGsdHardGateEnabled, isGsdNativeEnabled } from "./flags.js";
|
|
7
|
+
export { dispatchInitProgress, dispatchLoopRenderHooks, dispatchPhaseAdd, dispatchPhaseComplete, dispatchRoadmapAnalyze, dispatchRoadmapPlanProgress, dispatchStateUpdate, type PhaseAddResult, type RoadmapAnalyzeResult, } from "./gsd-dispatch.js";
|
|
8
|
+
export { allLoopHostPoints, loadLoopHostContract, loadStateDocument } from "./gsd-runtime.js";
|
|
9
|
+
export { createDefaultHostAdapter, GsdHostAdapter, GsdLoopHost, getGsdLoopHost } from "./host-adapter.js";
|
|
10
|
+
export { getAllCanonicalPoints, LOOP_HOST_CONTRACT, type LoopHostContractEntry } from "./loop-host-contract.js";
|
|
11
|
+
export { type ResolvedLoopHooks, renderLoopHooksEnvelope, resolveLoopHooks } from "./loop-resolver.js";
|
|
12
|
+
export { evaluateMutationGate, type MutationGateDecision } from "./mutation-gate.js";
|
|
13
|
+
export { orderPhasesForExecution, syncPhasePlanToRoadmap, topologicalPhaseOrder } from "./phase-dag.js";
|
|
14
|
+
export { ensureTaskRoadmap, syncTaskPhaseOnPlan, syncTaskPhaseOnVerifyPass, } from "./phase-sync.js";
|
|
15
|
+
export { type PlanCouncilResult, runPlanCouncil } from "./plan-council.js";
|
|
16
|
+
export { buildProjectMd, buildRoadmapFromPhasePlan, ensureProductPlanningWorkspace, syncRoadmapFromPhasePlan, } from "./product-workspace.js";
|
|
17
|
+
export { runTaskShip } from "./ship-bridge.js";
|
|
18
|
+
export { computeProgressPercent, isStateTemplateDefault, KNOWN_STATUS_PATTERNS, KNOWN_TEMPLATE_DEFAULTS, normalizeStateStatus, stateExtractField, stateReplaceField, stateReplaceFieldWithFallback, } from "./state-document.js";
|
|
19
|
+
export { detectGsdPhase, GSD_PHASES, type GsdPhase, isGsdPhase, type WorkflowKind } from "./types.js";
|
|
20
|
+
export { buildVerifyContextBundle, type VerifyContextBundle } from "./verify-context.js";
|
|
21
|
+
export { runVerifyCouncil, type VerifyCouncilResult } from "./verify-council.js";
|
|
22
|
+
export { type VerifyPerspective, verifyPerspectivesForDepth } from "./verify-council-prompts.js";
|
|
23
|
+
export { advancePhase, buildGsdStatusPayload, canExecute, canShip, currentPhase, readPlanVerifyVerdict, readProgress, readState, readWorkflowKind, syncWorkflowContext, } from "./workflow-engine.js";
|
|
24
|
+
export { GSD_WORKFLOW_TOOL_NAMES, registerGsdWorkflowTools } from "./workflow-tools.js";
|
package/dist/src/gsd/index.js
CHANGED
|
@@ -1,2 +1,29 @@
|
|
|
1
|
+
// Native modules (replaced .cjs require path)
|
|
2
|
+
export { debateErrorStub, REGISTRY, } from "./capability-registry.js";
|
|
3
|
+
export { assessComplexity, shouldAssess } from "./complexity-assessor.js";
|
|
4
|
+
export { buildPlanningConfig, ensurePlanningWorkspace } from "./config-bridge.js";
|
|
5
|
+
export { loadConfig, resolveConfigKey } from "./config-loader.js";
|
|
6
|
+
export { fireGsdVerifyOutcome, logGsdNativeEvent, PLANNING_CHECKPOINT_QUERY } from "./ee-closure.js";
|
|
7
|
+
export { isComplexityAssessorEnabled, isGsdHardGateEnabled, isGsdNativeEnabled } from "./flags.js";
|
|
8
|
+
// GSD dispatch (fully native — @opengsd/gsd-core subprocess removed in Part B step 2)
|
|
9
|
+
export { dispatchInitProgress, dispatchLoopRenderHooks, dispatchPhaseAdd, dispatchPhaseComplete, dispatchRoadmapAnalyze, dispatchRoadmapPlanProgress, dispatchStateUpdate, } from "./gsd-dispatch.js";
|
|
10
|
+
// GSD runtime (native module wrappers)
|
|
11
|
+
export { allLoopHostPoints, loadLoopHostContract, loadStateDocument } from "./gsd-runtime.js";
|
|
12
|
+
export { createDefaultHostAdapter, GsdHostAdapter, GsdLoopHost, getGsdLoopHost } from "./host-adapter.js";
|
|
13
|
+
export { getAllCanonicalPoints, LOOP_HOST_CONTRACT } from "./loop-host-contract.js";
|
|
14
|
+
export { renderLoopHooksEnvelope, resolveLoopHooks } from "./loop-resolver.js";
|
|
15
|
+
export { evaluateMutationGate } from "./mutation-gate.js";
|
|
16
|
+
export { orderPhasesForExecution, syncPhasePlanToRoadmap, topologicalPhaseOrder } from "./phase-dag.js";
|
|
17
|
+
export { ensureTaskRoadmap, syncTaskPhaseOnPlan, syncTaskPhaseOnVerifyPass, } from "./phase-sync.js";
|
|
18
|
+
export { runPlanCouncil } from "./plan-council.js";
|
|
19
|
+
export { buildProjectMd, buildRoadmapFromPhasePlan, ensureProductPlanningWorkspace, syncRoadmapFromPhasePlan, } from "./product-workspace.js";
|
|
20
|
+
export { runTaskShip } from "./ship-bridge.js";
|
|
21
|
+
// State-document functions
|
|
22
|
+
export { computeProgressPercent, isStateTemplateDefault, KNOWN_STATUS_PATTERNS, KNOWN_TEMPLATE_DEFAULTS, normalizeStateStatus, stateExtractField, stateReplaceField, stateReplaceFieldWithFallback, } from "./state-document.js";
|
|
1
23
|
export { detectGsdPhase, GSD_PHASES, isGsdPhase } from "./types.js";
|
|
24
|
+
export { buildVerifyContextBundle } from "./verify-context.js";
|
|
25
|
+
export { runVerifyCouncil } from "./verify-council.js";
|
|
26
|
+
export { verifyPerspectivesForDepth } from "./verify-council-prompts.js";
|
|
27
|
+
export { advancePhase, buildGsdStatusPayload, canExecute, canShip, currentPhase, readPlanVerifyVerdict, readProgress, readState, readWorkflowKind, syncWorkflowContext, } from "./workflow-engine.js";
|
|
28
|
+
export { GSD_WORKFLOW_TOOL_NAMES, registerGsdWorkflowTools } from "./workflow-tools.js";
|
|
2
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* loop-host-contract.ts — Native replacement for gsd-core/bin/lib/loop-host-contract.cjs
|
|
3
|
+
*
|
|
4
|
+
* ADR-894 §3 — Loop Host Contract, generated from workflow markers.
|
|
5
|
+
* 12 points: discuss:pre/post, plan:pre/post, execute:pre/wave:pre/wave:post/post,
|
|
6
|
+
* verify:pre/post, ship:pre/post. Per-step agentRoles and coreArtifacts.
|
|
7
|
+
*/
|
|
8
|
+
export interface LoopHostContractEntry {
|
|
9
|
+
step: string;
|
|
10
|
+
points: string[];
|
|
11
|
+
agentRoles: string[];
|
|
12
|
+
coreArtifacts: {
|
|
13
|
+
produces: string[];
|
|
14
|
+
consumes: string[];
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare const LOOP_HOST_CONTRACT: LoopHostContractEntry[];
|
|
18
|
+
/**
|
|
19
|
+
* All canonical loop points derived from LOOP_HOST_CONTRACT.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getAllCanonicalPoints(): string[];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const LOOP_HOST_CONTRACT = [
|
|
2
|
+
{
|
|
3
|
+
step: "discuss",
|
|
4
|
+
points: ["discuss:pre", "discuss:post"],
|
|
5
|
+
agentRoles: ["orchestrator"],
|
|
6
|
+
coreArtifacts: { produces: ["CONTEXT.md"], consumes: [] },
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
step: "plan",
|
|
10
|
+
points: ["plan:pre", "plan:post"],
|
|
11
|
+
agentRoles: ["researcher", "planner", "checker"],
|
|
12
|
+
coreArtifacts: { produces: ["PLAN.md"], consumes: ["CONTEXT.md"] },
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
step: "execute",
|
|
16
|
+
points: ["execute:pre", "execute:wave:pre", "execute:wave:post", "execute:post"],
|
|
17
|
+
agentRoles: ["executor", "verifier"],
|
|
18
|
+
coreArtifacts: { produces: ["SUMMARY.md"], consumes: ["PLAN.md"] },
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
step: "verify",
|
|
22
|
+
points: ["verify:pre", "verify:post"],
|
|
23
|
+
agentRoles: ["orchestrator"],
|
|
24
|
+
coreArtifacts: { produces: ["UAT.md"], consumes: ["SUMMARY.md"] },
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
step: "ship",
|
|
28
|
+
points: ["ship:pre", "ship:post"],
|
|
29
|
+
agentRoles: ["orchestrator"],
|
|
30
|
+
coreArtifacts: { produces: [], consumes: ["UAT.md"] },
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* All canonical loop points derived from LOOP_HOST_CONTRACT.
|
|
35
|
+
*/
|
|
36
|
+
export function getAllCanonicalPoints() {
|
|
37
|
+
return LOOP_HOST_CONTRACT.flatMap((e) => e.points);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=loop-host-contract.js.map
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { TaskRequest, ToolResult } from "../types/index.js";
|
|
2
|
+
import { type LoopHooksEnvelope } from "./gsd-dispatch.js";
|
|
3
|
+
import { type RunPerspectiveFn } from "./plan-council.js";
|
|
4
|
+
import type { GsdPhase } from "./types.js";
|
|
5
|
+
export interface LoopHostContext {
|
|
6
|
+
cwd: string;
|
|
7
|
+
sessionModelId: string;
|
|
8
|
+
depth: string;
|
|
9
|
+
phase?: GsdPhase | null;
|
|
10
|
+
sessionId?: string;
|
|
11
|
+
runPerspectiveFn?: RunPerspectiveFn;
|
|
12
|
+
revisionCycle?: number;
|
|
13
|
+
verifyPassed?: boolean;
|
|
14
|
+
verifyEvidence?: Record<string, unknown>;
|
|
15
|
+
planBody?: string;
|
|
16
|
+
planTitle?: string;
|
|
17
|
+
shipNotes?: string[];
|
|
18
|
+
commitMessage?: string;
|
|
19
|
+
runDebate?: (topic: string) => Promise<string>;
|
|
20
|
+
}
|
|
21
|
+
export interface LoopPointResult {
|
|
22
|
+
point: string;
|
|
23
|
+
gsdHooks?: LoopHooksEnvelope;
|
|
24
|
+
overlayRan: boolean;
|
|
25
|
+
overlayError?: string;
|
|
26
|
+
}
|
|
27
|
+
type OverlayHandler = (ctx: LoopHostContext) => Promise<void> | void;
|
|
28
|
+
/**
|
|
29
|
+
* Full Loop Host — fires gsd-core loop render-hooks then muonroi overlay handlers.
|
|
30
|
+
* gsd-core owns capability registry + hook resolution; muonroi owns plan-council + execute gates.
|
|
31
|
+
*/
|
|
32
|
+
export declare class GsdLoopHost {
|
|
33
|
+
private overlays;
|
|
34
|
+
private readonly hostProfile;
|
|
35
|
+
constructor();
|
|
36
|
+
registerOverlay(point: string, handler: OverlayHandler): void;
|
|
37
|
+
contractSteps(): import("./loop-host-contract.js").LoopHostContractEntry[];
|
|
38
|
+
canonicalPoints(): string[];
|
|
39
|
+
/** Bootstrap .planning/ via gsd-tools + muonroi config bridge. */
|
|
40
|
+
ensureHost(cwd: string, sessionModelId: string): void;
|
|
41
|
+
getHostProfile(): {
|
|
42
|
+
embeddingMode: "imperative";
|
|
43
|
+
commandSurface: "slash-programmatic";
|
|
44
|
+
hookBus: "host";
|
|
45
|
+
stateIO: "filesystem";
|
|
46
|
+
runtime: "bun";
|
|
47
|
+
native_host: string;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Fire one loop point: gsd-core hooks first (observability + gate metadata),
|
|
51
|
+
* then muonroi overlay (plan-council, phase advance).
|
|
52
|
+
*/
|
|
53
|
+
firePoint(point: string, ctx: LoopHostContext): Promise<LoopPointResult>;
|
|
54
|
+
/** Map tool lifecycle → loop points. */
|
|
55
|
+
onDiscussComplete(ctx: LoopHostContext): Promise<LoopPointResult>;
|
|
56
|
+
onPlanWritten(ctx: LoopHostContext): Promise<LoopPointResult>;
|
|
57
|
+
/** plan:post (council) + plan-review:post (execute gate). */
|
|
58
|
+
onPlanReviewComplete(ctx: LoopHostContext): Promise<LoopPointResult>;
|
|
59
|
+
onExecuteStart(ctx: LoopHostContext): Promise<LoopPointResult>;
|
|
60
|
+
onExecuteComplete(ctx: LoopHostContext): Promise<LoopPointResult>;
|
|
61
|
+
onVerifyComplete(ctx: LoopHostContext): Promise<LoopPointResult>;
|
|
62
|
+
onShipComplete(ctx: LoopHostContext): Promise<LoopPointResult>;
|
|
63
|
+
private registerDefaultOverlays;
|
|
64
|
+
private advanceTaskPhase;
|
|
65
|
+
}
|
|
66
|
+
export declare function getGsdLoopHost(): GsdLoopHost;
|
|
67
|
+
export declare function taskToRunPerspectiveFn(runTask: (request: TaskRequest, abortSignal?: AbortSignal) => Promise<ToolResult>, sessionModelId: string): RunPerspectiveFn;
|
|
68
|
+
export declare function loopHostContext(cwd: string, sessionModelId: string, depth: string, opts?: Pick<LoopHostContext, "runPerspectiveFn" | "revisionCycle" | "phase" | "sessionId" | "verifyPassed" | "verifyEvidence" | "planBody" | "planTitle" | "shipNotes" | "commitMessage" | "runDebate">): LoopHostContext;
|
|
69
|
+
export {};
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { ensurePlanningWorkspace } from "./config-bridge.js";
|
|
3
|
+
import { fireGsdVerifyOutcome, logGsdNativeEvent } from "./ee-closure.js";
|
|
4
|
+
import { dispatchConfigEnsure, dispatchLoopRenderHooks, dispatchStateUpdate, PHASE_TO_GSD_STATUS, } from "./gsd-dispatch.js";
|
|
5
|
+
import { allLoopHostPoints, loadLoopHostContract } from "./gsd-runtime.js";
|
|
6
|
+
import { buildGsdPerspectiveTaskRequest } from "./model-tier.js";
|
|
7
|
+
import { planningArtifact } from "./paths.js";
|
|
8
|
+
import { extractPlanTitle, mirrorVerifyMdToPhaseDir, syncTaskPhaseOnPlan, syncTaskPhaseOnVerifyPass, } from "./phase-sync.js";
|
|
9
|
+
import { runPlanCouncil } from "./plan-council.js";
|
|
10
|
+
import { runTaskShip } from "./ship-bridge.js";
|
|
11
|
+
import { readState, readWorkflowKind, setStateField } from "./workflow-engine.js";
|
|
12
|
+
/**
|
|
13
|
+
* Full Loop Host — fires gsd-core loop render-hooks then muonroi overlay handlers.
|
|
14
|
+
* gsd-core owns capability registry + hook resolution; muonroi owns plan-council + execute gates.
|
|
15
|
+
*/
|
|
16
|
+
export class GsdLoopHost {
|
|
17
|
+
overlays = new Map();
|
|
18
|
+
hostProfile = {
|
|
19
|
+
embeddingMode: "imperative",
|
|
20
|
+
commandSurface: "slash-programmatic",
|
|
21
|
+
hookBus: "host",
|
|
22
|
+
stateIO: "filesystem",
|
|
23
|
+
runtime: "bun",
|
|
24
|
+
native_host: "muonroi-cli",
|
|
25
|
+
};
|
|
26
|
+
constructor() {
|
|
27
|
+
this.registerDefaultOverlays();
|
|
28
|
+
}
|
|
29
|
+
registerOverlay(point, handler) {
|
|
30
|
+
this.overlays.set(point, handler);
|
|
31
|
+
}
|
|
32
|
+
contractSteps() {
|
|
33
|
+
return loadLoopHostContract();
|
|
34
|
+
}
|
|
35
|
+
canonicalPoints() {
|
|
36
|
+
return allLoopHostPoints();
|
|
37
|
+
}
|
|
38
|
+
/** Bootstrap .planning/ via gsd-tools + muonroi config bridge. */
|
|
39
|
+
ensureHost(cwd, sessionModelId) {
|
|
40
|
+
dispatchConfigEnsure(cwd);
|
|
41
|
+
ensurePlanningWorkspace(cwd, sessionModelId);
|
|
42
|
+
}
|
|
43
|
+
getHostProfile() {
|
|
44
|
+
return { ...this.hostProfile };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Fire one loop point: gsd-core hooks first (observability + gate metadata),
|
|
48
|
+
* then muonroi overlay (plan-council, phase advance).
|
|
49
|
+
*/
|
|
50
|
+
async firePoint(point, ctx) {
|
|
51
|
+
this.ensureHost(ctx.cwd, ctx.sessionModelId);
|
|
52
|
+
const canonical = this.canonicalPoints();
|
|
53
|
+
let gsdHooks;
|
|
54
|
+
if (canonical.includes(point)) {
|
|
55
|
+
const gsdResult = dispatchLoopRenderHooks(ctx.cwd, point);
|
|
56
|
+
gsdHooks = gsdResult.ok ? gsdResult.data : undefined;
|
|
57
|
+
}
|
|
58
|
+
if (gsdHooks?.activeHooks?.some((h) => h.blocking === true && h.kind === "gate")) {
|
|
59
|
+
console.error(`[gsd-loop-host] blocking gate at ${point}: ${JSON.stringify(gsdHooks.activeHooks.filter((h) => h.blocking))}`);
|
|
60
|
+
}
|
|
61
|
+
let overlayRan = false;
|
|
62
|
+
let overlayError;
|
|
63
|
+
const overlay = this.overlays.get(point);
|
|
64
|
+
if (overlay) {
|
|
65
|
+
overlayRan = true;
|
|
66
|
+
try {
|
|
67
|
+
await overlay(ctx);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
overlayError = err.message;
|
|
71
|
+
console.error(`[gsd-loop-host] overlay ${point} failed: ${overlayError}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return { point, gsdHooks, overlayRan, overlayError };
|
|
75
|
+
}
|
|
76
|
+
/** Map tool lifecycle → loop points. */
|
|
77
|
+
async onDiscussComplete(ctx) {
|
|
78
|
+
return this.firePoint("discuss:post", ctx);
|
|
79
|
+
}
|
|
80
|
+
async onPlanWritten(ctx) {
|
|
81
|
+
return this.firePoint("plan:pre", ctx);
|
|
82
|
+
}
|
|
83
|
+
/** plan:post (council) + plan-review:post (execute gate). */
|
|
84
|
+
async onPlanReviewComplete(ctx) {
|
|
85
|
+
await this.firePoint("plan:post", ctx);
|
|
86
|
+
return this.firePoint("plan-review:post", ctx);
|
|
87
|
+
}
|
|
88
|
+
async onExecuteStart(ctx) {
|
|
89
|
+
return this.firePoint("execute:pre", ctx);
|
|
90
|
+
}
|
|
91
|
+
async onExecuteComplete(ctx) {
|
|
92
|
+
return this.firePoint("execute:post", ctx);
|
|
93
|
+
}
|
|
94
|
+
async onVerifyComplete(ctx) {
|
|
95
|
+
await this.firePoint("verify:pre", ctx);
|
|
96
|
+
return this.firePoint("verify:post", ctx);
|
|
97
|
+
}
|
|
98
|
+
async onShipComplete(ctx) {
|
|
99
|
+
await this.firePoint("ship:pre", ctx);
|
|
100
|
+
return this.firePoint("ship:post", ctx);
|
|
101
|
+
}
|
|
102
|
+
registerDefaultOverlays() {
|
|
103
|
+
this.registerOverlay("discuss:post", (ctx) => {
|
|
104
|
+
this.advanceTaskPhase(ctx, "plan");
|
|
105
|
+
});
|
|
106
|
+
this.registerOverlay("plan:pre", (ctx) => {
|
|
107
|
+
if (readWorkflowKind(ctx.cwd) === "product")
|
|
108
|
+
return;
|
|
109
|
+
const planPath = planningArtifact(ctx.cwd, "PLAN.md");
|
|
110
|
+
try {
|
|
111
|
+
if (!existsSync(planPath))
|
|
112
|
+
return;
|
|
113
|
+
const body = ctx.planBody ?? readFileSync(planPath, "utf8");
|
|
114
|
+
const title = ctx.planTitle ?? extractPlanTitle(body);
|
|
115
|
+
syncTaskPhaseOnPlan(ctx.cwd, {
|
|
116
|
+
planTitle: title,
|
|
117
|
+
planBody: body,
|
|
118
|
+
sessionId: ctx.sessionId,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
console.error(`[gsd-loop-host] plan:pre phase-sync failed: ${err.message}`);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
this.registerOverlay("plan:post", async (ctx) => {
|
|
126
|
+
const council = await runPlanCouncil({
|
|
127
|
+
cwd: ctx.cwd,
|
|
128
|
+
sessionModelId: ctx.sessionModelId,
|
|
129
|
+
depth: ctx.depth,
|
|
130
|
+
runPerspectiveFn: ctx.runPerspectiveFn,
|
|
131
|
+
revisionCycle: ctx.revisionCycle,
|
|
132
|
+
runDebate: ctx.runDebate,
|
|
133
|
+
});
|
|
134
|
+
logGsdNativeEvent(ctx.sessionId ?? "gsd-native", {
|
|
135
|
+
phase: ctx.phase ?? readState(ctx.cwd).phase,
|
|
136
|
+
depth: ctx.depth,
|
|
137
|
+
loopPoint: "plan:post",
|
|
138
|
+
planVerified: council.verdict === "pass",
|
|
139
|
+
councilPerspectives: council.perspectives.length,
|
|
140
|
+
leaderModelId: council.leaderModelId,
|
|
141
|
+
councilContextChars: council.contextBundleChars,
|
|
142
|
+
councilHadPriorConcerns: council.hadPriorConcerns,
|
|
143
|
+
councilVerdictSource: council.verdictSource,
|
|
144
|
+
councilVerdictParseFailed: council.verdictParseFailed,
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
this.registerOverlay("plan-review:post", (ctx) => {
|
|
148
|
+
const state = readState(ctx.cwd);
|
|
149
|
+
if (state.planVerified) {
|
|
150
|
+
this.advanceTaskPhase(ctx, "execute");
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
this.registerOverlay("execute:pre", (ctx) => {
|
|
154
|
+
dispatchStateUpdate(ctx.cwd, "Status", "In progress");
|
|
155
|
+
});
|
|
156
|
+
this.registerOverlay("execute:post", (ctx) => {
|
|
157
|
+
this.advanceTaskPhase(ctx, "verify");
|
|
158
|
+
});
|
|
159
|
+
this.registerOverlay("verify:pre", (_ctx) => {
|
|
160
|
+
/* Tests/self-verify run in gsd_verify tool body. */
|
|
161
|
+
});
|
|
162
|
+
this.registerOverlay("verify:post", (ctx) => {
|
|
163
|
+
const passed = ctx.verifyPassed === true;
|
|
164
|
+
fireGsdVerifyOutcome({
|
|
165
|
+
sessionId: ctx.sessionId,
|
|
166
|
+
cwd: ctx.cwd,
|
|
167
|
+
depth: ctx.depth,
|
|
168
|
+
passed,
|
|
169
|
+
evidence: ctx.verifyEvidence,
|
|
170
|
+
});
|
|
171
|
+
if (!passed) {
|
|
172
|
+
this.advanceTaskPhase(ctx, "debug");
|
|
173
|
+
dispatchStateUpdate(ctx.cwd, "Status", "In progress");
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (readWorkflowKind(ctx.cwd) !== "product") {
|
|
177
|
+
const evidence = typeof ctx.verifyEvidence?.evidence === "string" ? ctx.verifyEvidence.evidence : undefined;
|
|
178
|
+
const sync = syncTaskPhaseOnVerifyPass(ctx.cwd, {
|
|
179
|
+
evidence,
|
|
180
|
+
sessionId: ctx.sessionId,
|
|
181
|
+
});
|
|
182
|
+
const phaseDir = sync.phaseDirName;
|
|
183
|
+
if (phaseDir)
|
|
184
|
+
mirrorVerifyMdToPhaseDir(ctx.cwd, phaseDir);
|
|
185
|
+
}
|
|
186
|
+
this.advanceTaskPhase(ctx, "review");
|
|
187
|
+
dispatchStateUpdate(ctx.cwd, "Status", PHASE_TO_GSD_STATUS.review ?? "Phase complete");
|
|
188
|
+
});
|
|
189
|
+
this.registerOverlay("ship:pre", (ctx) => {
|
|
190
|
+
dispatchStateUpdate(ctx.cwd, "Status", "Phase complete");
|
|
191
|
+
});
|
|
192
|
+
this.registerOverlay("ship:post", (ctx) => {
|
|
193
|
+
const result = runTaskShip({
|
|
194
|
+
cwd: ctx.cwd,
|
|
195
|
+
notes: ctx.shipNotes,
|
|
196
|
+
commitMessage: ctx.commitMessage,
|
|
197
|
+
});
|
|
198
|
+
logGsdNativeEvent(ctx.sessionId ?? "gsd-native", {
|
|
199
|
+
phase: "review",
|
|
200
|
+
depth: ctx.depth,
|
|
201
|
+
loopPoint: "ship:post",
|
|
202
|
+
shipNotes: result.notes,
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
advanceTaskPhase(ctx, phase) {
|
|
207
|
+
setStateField(ctx.cwd, "Phase", phase);
|
|
208
|
+
setStateField(ctx.cwd, "Depth", ctx.depth);
|
|
209
|
+
const status = PHASE_TO_GSD_STATUS[phase];
|
|
210
|
+
if (status) {
|
|
211
|
+
dispatchStateUpdate(ctx.cwd, "Status", status);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
let _defaultHost = null;
|
|
216
|
+
export function getGsdLoopHost() {
|
|
217
|
+
if (!_defaultHost)
|
|
218
|
+
_defaultHost = new GsdLoopHost();
|
|
219
|
+
return _defaultHost;
|
|
220
|
+
}
|
|
221
|
+
export function taskToRunPerspectiveFn(runTask, sessionModelId) {
|
|
222
|
+
return async (prompt, perspective) => {
|
|
223
|
+
const result = await runTask(buildGsdPerspectiveTaskRequest(prompt, perspective, sessionModelId));
|
|
224
|
+
return result.output ?? "";
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
export function loopHostContext(cwd, sessionModelId, depth, opts) {
|
|
228
|
+
return {
|
|
229
|
+
cwd,
|
|
230
|
+
sessionModelId,
|
|
231
|
+
depth,
|
|
232
|
+
phase: opts?.phase ?? readState(cwd).phase,
|
|
233
|
+
sessionId: opts?.sessionId,
|
|
234
|
+
runPerspectiveFn: opts?.runPerspectiveFn,
|
|
235
|
+
revisionCycle: opts?.revisionCycle,
|
|
236
|
+
verifyPassed: opts?.verifyPassed,
|
|
237
|
+
verifyEvidence: opts?.verifyEvidence,
|
|
238
|
+
planBody: opts?.planBody,
|
|
239
|
+
planTitle: opts?.planTitle,
|
|
240
|
+
shipNotes: opts?.shipNotes,
|
|
241
|
+
commitMessage: opts?.commitMessage,
|
|
242
|
+
runDebate: opts?.runDebate,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=loop-host.js.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* loop-resolver.ts — Native replacement for gsd-core/bin/lib/loop-resolver.cjs
|
|
3
|
+
*
|
|
4
|
+
* ADR-857 phase 3c registry-consuming query.
|
|
5
|
+
* Given a loop point (one of the 12 canonical points from loop-host-contract.ts),
|
|
6
|
+
* filters the frozen Capability Registry by config activation and returns
|
|
7
|
+
* the active hooks as a JSON envelope.
|
|
8
|
+
*/
|
|
9
|
+
import type { CapabilityRegistry, LoopHook } from "./capability-registry.js";
|
|
10
|
+
export interface ResolvedLoopHooks {
|
|
11
|
+
point: string;
|
|
12
|
+
activeHooks: LoopHook[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Pure resolver: given a point, registry, and config, returns the active hooks.
|
|
16
|
+
*
|
|
17
|
+
* Throws if `point` is not one of the 12 canonical points.
|
|
18
|
+
* Never throws for malformed registry/hook entries — skips and continues.
|
|
19
|
+
*
|
|
20
|
+
* Activation: a hook with no `when` is always active. With `when` (dotted key),
|
|
21
|
+
* resolved against `config`; active iff truthy. Inactive hooks are filtered out.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveLoopHooks(input: {
|
|
24
|
+
point: string;
|
|
25
|
+
registry: CapabilityRegistry;
|
|
26
|
+
config: Record<string, unknown>;
|
|
27
|
+
cwd?: string;
|
|
28
|
+
}): ResolvedLoopHooks;
|
|
29
|
+
/**
|
|
30
|
+
* Render resolved hooks as a simple envelope for backward compatibility
|
|
31
|
+
* with the existing GsdDispatchResult shape.
|
|
32
|
+
*/
|
|
33
|
+
export declare function renderLoopHooksEnvelope(resolved: ResolvedLoopHooks): {
|
|
34
|
+
point: string;
|
|
35
|
+
activeHooks: LoopHook[];
|
|
36
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { resolveConfigKey } from "./config-loader.js";
|
|
2
|
+
import { getAllCanonicalPoints } from "./loop-host-contract.js";
|
|
3
|
+
/**
|
|
4
|
+
* Pure resolver: given a point, registry, and config, returns the active hooks.
|
|
5
|
+
*
|
|
6
|
+
* Throws if `point` is not one of the 12 canonical points.
|
|
7
|
+
* Never throws for malformed registry/hook entries — skips and continues.
|
|
8
|
+
*
|
|
9
|
+
* Activation: a hook with no `when` is always active. With `when` (dotted key),
|
|
10
|
+
* resolved against `config`; active iff truthy. Inactive hooks are filtered out.
|
|
11
|
+
*/
|
|
12
|
+
export function resolveLoopHooks(input) {
|
|
13
|
+
const { point, registry, config } = input;
|
|
14
|
+
// Validate point against canonical points
|
|
15
|
+
const canonicalPoints = getAllCanonicalPoints();
|
|
16
|
+
if (!canonicalPoints.includes(point)) {
|
|
17
|
+
throw new Error(`Invalid loop point: "${point}". Valid points: ${canonicalPoints.join(", ")}`);
|
|
18
|
+
}
|
|
19
|
+
// Guard: registry missing byLoopPoint
|
|
20
|
+
const byLoopPoint = registry.byLoopPoint;
|
|
21
|
+
if (!byLoopPoint || typeof byLoopPoint !== "object") {
|
|
22
|
+
return { point, activeHooks: [] };
|
|
23
|
+
}
|
|
24
|
+
// Guard: point missing in registry
|
|
25
|
+
const entry = byLoopPoint[point];
|
|
26
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
27
|
+
return { point, activeHooks: [] };
|
|
28
|
+
}
|
|
29
|
+
const activeHooks = [];
|
|
30
|
+
// Helper: check activation using config key resolver
|
|
31
|
+
function isActive(hook) {
|
|
32
|
+
const when = hook.when;
|
|
33
|
+
if (when === undefined || when === null)
|
|
34
|
+
return true;
|
|
35
|
+
if (typeof when !== "string" || when.length === 0)
|
|
36
|
+
return false;
|
|
37
|
+
const { found, value } = resolveConfigKey(when, config);
|
|
38
|
+
return found && value === true;
|
|
39
|
+
}
|
|
40
|
+
// Process steps
|
|
41
|
+
const steps = Array.isArray(entry.steps) ? entry.steps : [];
|
|
42
|
+
for (const hook of steps) {
|
|
43
|
+
if (!hook || typeof hook !== "object")
|
|
44
|
+
continue;
|
|
45
|
+
if (!isActive(hook))
|
|
46
|
+
continue;
|
|
47
|
+
activeHooks.push(hook);
|
|
48
|
+
}
|
|
49
|
+
// Process contributions
|
|
50
|
+
const contributions = Array.isArray(entry.contributions) ? entry.contributions : [];
|
|
51
|
+
for (const hook of contributions) {
|
|
52
|
+
if (!hook || typeof hook !== "object")
|
|
53
|
+
continue;
|
|
54
|
+
if (!isActive(hook))
|
|
55
|
+
continue;
|
|
56
|
+
activeHooks.push(hook);
|
|
57
|
+
}
|
|
58
|
+
// Process gates
|
|
59
|
+
const gates = Array.isArray(entry.gates) ? entry.gates : [];
|
|
60
|
+
for (const hook of gates) {
|
|
61
|
+
if (!hook || typeof hook !== "object")
|
|
62
|
+
continue;
|
|
63
|
+
if (!isActive(hook))
|
|
64
|
+
continue;
|
|
65
|
+
activeHooks.push(hook);
|
|
66
|
+
}
|
|
67
|
+
return { point, activeHooks };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Render resolved hooks as a simple envelope for backward compatibility
|
|
71
|
+
* with the existing GsdDispatchResult shape.
|
|
72
|
+
*/
|
|
73
|
+
export function renderLoopHooksEnvelope(resolved) {
|
|
74
|
+
return {
|
|
75
|
+
point: resolved.point,
|
|
76
|
+
activeHooks: resolved.activeHooks,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=loop-resolver.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BuiltinSubagentId, TaskRequest } from "../types/index.js";
|
|
2
|
+
import type { PlanPerspective, PlanPerspectiveId } from "./plan-council-prompts.js";
|
|
3
|
+
/**
|
|
4
|
+
* GSD-only premium resolver — always picks the highest-tier model on the
|
|
5
|
+
* session provider for plan-council / verify gates. Unlike
|
|
6
|
+
* resolveLeaderModelDetailed, this intentionally promotes within-provider
|
|
7
|
+
* for critical GSD stages.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveGsdPremiumModel(sessionModelId: string): string;
|
|
10
|
+
/** Research perspectives ground against the codebase; others validate rigorously. */
|
|
11
|
+
export declare function resolveGsdPerspectiveAgent(id: PlanPerspectiveId): BuiltinSubagentId;
|
|
12
|
+
export declare function buildGsdPerspectiveTaskRequest(prompt: string, perspective: PlanPerspective, sessionModelId: string, descriptionPrefix?: string): TaskRequest;
|
|
13
|
+
export declare function tierOfModel(modelId: string): "fast" | "balanced" | "premium" | undefined;
|