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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
1
2
|
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
3
|
import { join } from "node:path";
|
|
3
4
|
export function detectLanguage(cwd, exists = (p) => existsSync(p)) {
|
|
@@ -141,14 +142,27 @@ export async function scanProjectContext(raw, cwd) {
|
|
|
141
142
|
catch {
|
|
142
143
|
/* EE unavailable */
|
|
143
144
|
}
|
|
145
|
+
let recentModifiedFiles = [];
|
|
146
|
+
try {
|
|
147
|
+
const gitOut = execSync("git status --porcelain", { cwd, encoding: "utf-8", stdio: "pipe" });
|
|
148
|
+
recentModifiedFiles = gitOut
|
|
149
|
+
.split("\n")
|
|
150
|
+
.map((line) => line.slice(3).trim())
|
|
151
|
+
.filter((line) => line.length > 0)
|
|
152
|
+
.slice(0, 10);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Not a git repo or git not installed
|
|
156
|
+
}
|
|
144
157
|
return {
|
|
145
158
|
language,
|
|
146
159
|
framework,
|
|
147
160
|
packageManager,
|
|
148
|
-
domain:
|
|
161
|
+
domain: null,
|
|
149
162
|
boundedContexts,
|
|
150
163
|
eePatterns,
|
|
151
164
|
relevantModules,
|
|
165
|
+
recentModifiedFiles,
|
|
152
166
|
scannedAt: Date.now(),
|
|
153
167
|
cwd,
|
|
154
168
|
};
|
|
@@ -19,6 +19,8 @@ import { searchByText } from "../ee/bridge.js";
|
|
|
19
19
|
import { updateLastSurfacedState } from "../ee/intercept.js";
|
|
20
20
|
import { formatPendingReminder, isRecallLedgerEnabled, sessionRecallLedger } from "../ee/recall-ledger.js";
|
|
21
21
|
import { getRenderSink } from "../ee/render.js";
|
|
22
|
+
import { PLANNING_CHECKPOINT_QUERY } from "../gsd/ee-closure.js";
|
|
23
|
+
import { isGsdNativeEnabled } from "../gsd/flags.js";
|
|
22
24
|
import { logInteraction } from "../storage/interaction-log.js";
|
|
23
25
|
import { classifyEeError, logEeFailure, readTimeoutEnv } from "../utils/ee-logger.js";
|
|
24
26
|
import { truncateToBudget } from "./budget.js";
|
|
@@ -138,10 +140,13 @@ async function queryEeBridge(raw, taskType) {
|
|
|
138
140
|
// Phase 3 (ee-anti-mu): third arm for compaction checkpoints so PIL can surface
|
|
139
141
|
// prior "Progress ✔ DONE / elided" without the agent having to ask "task finished?".
|
|
140
142
|
const signal = AbortSignal.timeout(PIL_SEARCH_TIMEOUT_MS);
|
|
143
|
+
const planningQuery = isGsdNativeEnabled()
|
|
144
|
+
? `${PLANNING_CHECKPOINT_QUERY} OR compaction checkpoint`
|
|
145
|
+
: 'Context checkpoint summary OR "compaction checkpoint" recent Progress DONE elided OR tool-artifact OR "tool result id="';
|
|
141
146
|
const [principleRaw, behavioralRaw, checkpointRaw] = await Promise.all([
|
|
142
147
|
searchByText(queryWithTask, ["experience-principles"], 3, signal),
|
|
143
148
|
searchByText(queryWithTask, ["experience-behavioral"], 4, signal),
|
|
144
|
-
searchByText(
|
|
149
|
+
searchByText(planningQuery, ["experience-behavioral"], 3, signal).catch(() => []),
|
|
145
150
|
]);
|
|
146
151
|
const principlePoints = principleRaw.filter((p) => (p.score ?? 0) >= PIL_PRINCIPLES_FLOOR);
|
|
147
152
|
const behavioralPoints = behavioralRaw.filter((p) => (p.score ?? 0) >= PIL_SCORE_FLOOR);
|
|
@@ -217,10 +222,15 @@ export async function layer3EeInjection(ctx) {
|
|
|
217
222
|
...p,
|
|
218
223
|
collection: p.collection ?? "experience-behavioral",
|
|
219
224
|
}));
|
|
220
|
-
// Suppress already-
|
|
225
|
+
// Suppress (a) already-fed-back entries AND (b) entries already surfaced
|
|
226
|
+
// earlier this session (still pending) — re-injecting the full body of a
|
|
227
|
+
// hint the agent already saw is pure repetition (the "hint lặp"); the hit
|
|
228
|
+
// stays in the feedback nudge (shown once via _surfacedPendingIds) so the
|
|
229
|
+
// rating path is preserved without duplicating content every turn.
|
|
221
230
|
if (isRecallLedgerEnabled()) {
|
|
222
|
-
|
|
223
|
-
|
|
231
|
+
const alreadyShown = (id) => sessionRecallLedger.wasCleared(id) || sessionRecallLedger.isPending(id);
|
|
232
|
+
principleItems = principleItems.filter((p) => !alreadyShown(String(p.id)));
|
|
233
|
+
behavioralItems = behavioralItems.filter((p) => !alreadyShown(String(p.id)));
|
|
224
234
|
}
|
|
225
235
|
// Render the [id:..] handle inline (mirrors formatPrincipleRules/Hints) so the
|
|
226
236
|
// [id collection] reminder below refers to handles the agent can actually see.
|
|
@@ -397,11 +407,16 @@ export async function layer3EeInjection(ctx) {
|
|
|
397
407
|
return text.length === 0 || !checkpointMarkerShas.has(payloadSha16(text));
|
|
398
408
|
})
|
|
399
409
|
: result.checkpointPoints || [];
|
|
400
|
-
//
|
|
401
|
-
//
|
|
410
|
+
// Suppression: skip rateable hints that were already (a) rated via ee_feedback
|
|
411
|
+
// OR (b) surfaced earlier this session (still pending). Re-injecting the full
|
|
412
|
+
// body of a hint the agent already saw is the "hint lặp" repetition; the entry
|
|
413
|
+
// stays in the feedback nudge (shown once) so rating is still prompted.
|
|
414
|
+
// Checkpoints are GSD status context (not rateable) — only cleared-suppressed,
|
|
415
|
+
// they may legitimately re-surface each turn.
|
|
402
416
|
const ledgerEnabled = isRecallLedgerEnabled();
|
|
403
|
-
const
|
|
404
|
-
const
|
|
417
|
+
const alreadyShown = (id) => ledgerEnabled && (sessionRecallLedger.wasCleared(id) || sessionRecallLedger.isPending(id));
|
|
418
|
+
const clearedFilteredPrinciples = deduplicatedPrinciples.filter((p) => !alreadyShown(String(p.id)));
|
|
419
|
+
const clearedFilteredBehavioral = deduplicatedBehavioral.filter((p) => !alreadyShown(String(p.id)));
|
|
405
420
|
const clearedFilteredCheckpoints = deduplicatedCheckpoints.filter((p) => !(ledgerEnabled && sessionRecallLedger.wasCleared(String(p.id))));
|
|
406
421
|
const allPoints = [...clearedFilteredPrinciples, ...clearedFilteredBehavioral, ...clearedFilteredCheckpoints];
|
|
407
422
|
// STALE-01: Register injected point IDs for prompt-stale reconciliation.
|
|
@@ -17,10 +17,12 @@
|
|
|
17
17
|
* the agent, into the user's language.
|
|
18
18
|
*/
|
|
19
19
|
import { getWhoAmIProfile, routeTask } from "../ee/bridge.js";
|
|
20
|
+
import { isGsdNativeEnabled } from "../gsd/flags.js";
|
|
21
|
+
import { readState } from "../gsd/workflow-engine.js";
|
|
20
22
|
import { buildDirective } from "../playbook/directives.js";
|
|
21
23
|
import { classifyEeError, logEeFailure } from "../utils/ee-logger.js";
|
|
22
24
|
import { truncateToBudget } from "./budget.js";
|
|
23
|
-
import { isImplementationIntent, isMetaAnalysisPrompt, isQuestionLike } from "./layer6-output.js";
|
|
25
|
+
import { isImplementationIntent, isMetaAnalysisPrompt, isQuestionLike, isSprintPlanExecution, } from "./layer6-output.js";
|
|
24
26
|
function mapRouteToPhase(route) {
|
|
25
27
|
switch (route) {
|
|
26
28
|
case "qc-flow":
|
|
@@ -66,10 +68,10 @@ export async function layer4Gsd(ctx) {
|
|
|
66
68
|
}
|
|
67
69
|
let phase = ctx.gsdPhase ?? null;
|
|
68
70
|
let routeSource = "preset";
|
|
69
|
-
// Skip brain routeTask when L1
|
|
70
|
-
//
|
|
71
|
-
// round-trip would duplicate the
|
|
72
|
-
if (!phase && !ctx._brainData) {
|
|
71
|
+
// Skip brain routeTask when L1 unified pilContext already supplied gsd_phase
|
|
72
|
+
// (on ctx.gsdPhase) or brain retrieval data (_brainData) — a separate routeTask
|
|
73
|
+
// round-trip would duplicate the unified endpoint.
|
|
74
|
+
if (!phase && !ctx._brainData && !ctx.gsdPhase) {
|
|
73
75
|
const eeRoute = await routeTask(ctx.raw).catch((err) => {
|
|
74
76
|
logEeFailure("pil.layer4.routeTask", classifyEeError(err), err);
|
|
75
77
|
return null;
|
|
@@ -124,13 +126,23 @@ export async function layer4Gsd(ctx) {
|
|
|
124
126
|
// read/summarize/architecture tasks (deliverableKind "report") down the heavy
|
|
125
127
|
// council + AskUserQuestion path, over-asking on a task that just wanted a
|
|
126
128
|
// written summary (session 666630479c1a: "Đọc và tóm tắt kiến trúc…" raised 2
|
|
127
|
-
// askcards + a council loop).
|
|
128
|
-
//
|
|
129
|
+
// askcards + a council loop).
|
|
130
|
+
//
|
|
131
|
+
// BUT a "report" deliverable can still be a genuine implementation request the
|
|
132
|
+
// model mis-tagged (e.g. "make a plan to implement OAuth device flow" — the
|
|
133
|
+
// deliverable IS a plan/report, yet the raw prompt asks to implement). Without
|
|
134
|
+
// a guard this never entered GSD. isImplementationIntent re-checks the raw
|
|
135
|
+
// text so a real implementation ask overrides the deliverable-kind shortcut;
|
|
136
|
+
// a genuine summary/read prompt (no implementation keywords) still passes
|
|
137
|
+
// through as informational.
|
|
138
|
+
//
|
|
139
|
+
// Only when the model emitted no deliverable (deliverableKind null → legacy
|
|
140
|
+
// cascade) do we fall back to regex predicates:
|
|
129
141
|
// 1. isMetaAnalysisPrompt — self/CLI evaluation, prior-turn reflection.
|
|
130
142
|
// 2. taskType "general" classified as a real task by L1.
|
|
131
143
|
// 3. question-shaped prompt that is NOT an implementation request.
|
|
132
144
|
const informational = ctx.deliverableKind
|
|
133
|
-
? ctx.deliverableKind !== "code"
|
|
145
|
+
? ctx.deliverableKind !== "code" && !isImplementationIntent(ctx.raw)
|
|
134
146
|
: isMetaAnalysisPrompt(ctx.raw) ||
|
|
135
147
|
(ctx.taskType === "general" && ctx.intentKind === "task") ||
|
|
136
148
|
(isQuestionLike(ctx.raw) && !isImplementationIntent(ctx.raw));
|
|
@@ -141,17 +153,57 @@ export async function layer4Gsd(ctx) {
|
|
|
141
153
|
// language the model detected (the old regex only caught Vietnamese).
|
|
142
154
|
const ecosystem = ctx.ecosystemScope === true;
|
|
143
155
|
const replyLanguage = ctx.replyLanguage ?? undefined;
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
156
|
+
const native = isGsdNativeEnabled();
|
|
157
|
+
const sprintExecution = isSprintPlanExecution(ctx.raw);
|
|
158
|
+
let trimmed;
|
|
159
|
+
let blocking = false;
|
|
160
|
+
let appliedTier = tier;
|
|
161
|
+
if (sprintExecution) {
|
|
162
|
+
// Sprint plan execution: the plan has already been debated and reviewed by
|
|
163
|
+
// the council. The impl turn must APPLY it, not re-enter gsd_plan_review.
|
|
164
|
+
// Override any depth-tier hint that would tell the model to plan first.
|
|
165
|
+
const execDirective = [
|
|
166
|
+
"[sprint-execution] The attached text is an APPROVED sprint plan.",
|
|
167
|
+
"EXECUTE it directly with edit_file/write_file/bash tools.",
|
|
168
|
+
"Do NOT call gsd_discuss, gsd_plan, or gsd_plan_review — the plan is already reviewed.",
|
|
169
|
+
"After edits, run gsd_verify if verification steps are listed, otherwise finish.",
|
|
170
|
+
].join(" ");
|
|
171
|
+
trimmed = truncateToBudget(execDirective, 200);
|
|
172
|
+
blocking = false;
|
|
173
|
+
appliedTier = "standard";
|
|
174
|
+
}
|
|
175
|
+
else if (native && !informational) {
|
|
176
|
+
const cwd = process.cwd();
|
|
177
|
+
const wf = readState(cwd);
|
|
178
|
+
// Heavy is now a hard MANDATORY sequence (Task 8 wires the runtime mutation
|
|
179
|
+
// gate that actually BLOCKs edit_file/write_file/bash on this depth); standard
|
|
180
|
+
// stays advisory-only — never say BLOCKED for standard, the gate doesn't fire there.
|
|
181
|
+
const heavyLine = tier === "heavy"
|
|
182
|
+
? " MANDATORY (heavy): gsd_status → gsd_discuss → gsd_plan → gsd_plan_review BEFORE any edit_file/write_file/bash. Mutation tools are BLOCKED until plan-review passes. Start with gsd_status now."
|
|
183
|
+
: "";
|
|
184
|
+
const nativeHint = [
|
|
185
|
+
"[gsd-native] Tools: gsd_status, gsd_discuss, gsd_plan, gsd_plan_review, gsd_execute, gsd_verify, gsd_ship.",
|
|
186
|
+
`Depth=${tier}. standard/heavy: recommend gsd_plan_review before gsd_execute; then gsd_verify → gsd_ship.${heavyLine}`,
|
|
187
|
+
wf.phase ? `phase=${wf.phase}` : "gsd_status bootstraps .planning/",
|
|
188
|
+
wf.planVerified ? "plan-verified=yes" : "plan-verified=pending",
|
|
189
|
+
].join(" ");
|
|
190
|
+
trimmed = truncateToBudget(nativeHint, 200);
|
|
191
|
+
blocking = tier === "heavy";
|
|
192
|
+
appliedTier = tier;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
const directive = buildDirective({ tier, phase, informational, ecosystem, replyLanguage, nativeGsd: native });
|
|
196
|
+
const directiveTokenBudget = Math.max(Math.floor(ctx.tokenBudget * DIRECTIVE_BUDGET_FRACTION), DIRECTIVE_MIN_TOKENS);
|
|
197
|
+
trimmed = truncateToBudget(directive.text, directiveTokenBudget);
|
|
198
|
+
blocking = directive.blocking;
|
|
199
|
+
appliedTier = directive.tier;
|
|
200
|
+
}
|
|
150
201
|
const depthSource = ctx.modelDepthTier ? "model" : "default";
|
|
151
202
|
return {
|
|
152
203
|
...ctx,
|
|
153
204
|
gsdPhase: phase,
|
|
154
205
|
complexityTier: tier,
|
|
206
|
+
gsdGateBlocking: blocking,
|
|
155
207
|
grayAreas,
|
|
156
208
|
enriched: `${ctx.enriched}\n${trimmed}`,
|
|
157
209
|
layers: [
|
|
@@ -160,11 +212,12 @@ export async function layer4Gsd(ctx) {
|
|
|
160
212
|
name: "gsd-workflow-structuring",
|
|
161
213
|
applied: true,
|
|
162
214
|
delta: [
|
|
163
|
-
`tier=${
|
|
215
|
+
`tier=${appliedTier}`,
|
|
216
|
+
`native=${native}`,
|
|
164
217
|
`depth=${depthSource}`,
|
|
165
218
|
`phase=${phase ?? "none"}`,
|
|
166
219
|
`route=${routeSource}`,
|
|
167
|
-
`blocking=${
|
|
220
|
+
`blocking=${blocking}`,
|
|
168
221
|
`chars=${trimmed.length}`,
|
|
169
222
|
].join(" "),
|
|
170
223
|
},
|
|
@@ -50,11 +50,15 @@ async function fetchPrinciples(raw, budget) {
|
|
|
50
50
|
}
|
|
51
51
|
async function fetchFlowState(cwd, budget) {
|
|
52
52
|
try {
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
// Canonical focus pointer: `state.md` `Active Run` (run-manager). The old
|
|
54
|
+
// `.muonroi-flow/active-run` file had no writer in src and always read stale
|
|
55
|
+
// (F8 follow-up: dropped that dead path in favor of the single source).
|
|
56
|
+
const { getActiveRunId } = await import("../flow/run-manager.js");
|
|
57
|
+
const flowDir = path.join(cwd, ".muonroi-flow");
|
|
58
|
+
const runId = await getActiveRunId(flowDir);
|
|
55
59
|
if (!runId)
|
|
56
60
|
return "";
|
|
57
|
-
const statePath = path.join(
|
|
61
|
+
const statePath = path.join(flowDir, "runs", runId, "state.md");
|
|
58
62
|
const state = await fs.readFile(statePath, "utf8");
|
|
59
63
|
const phaseLine = state.match(/phase:\s*(.+)/i)?.[1]?.trim() ?? "unknown";
|
|
60
64
|
const statusLine = state.match(/status:\s*(.+)/i)?.[1]?.trim() ?? "unknown";
|
|
@@ -17,6 +17,29 @@ import type { ProviderId } from "../providers/types.js";
|
|
|
17
17
|
import type { PipelineContext } from "./types.js";
|
|
18
18
|
export declare function isMetaAnalysisPrompt(raw: string): boolean;
|
|
19
19
|
export declare function applyPilSuffix(systemPrompt: string, ctx: PipelineContext, responseToolsActive?: boolean): string;
|
|
20
|
+
/**
|
|
21
|
+
* Detect an explicit IMPLEMENTATION / edit-the-files intent. When the user asks
|
|
22
|
+
* to implement/edit/refactor (the deliverable is file changes, not a structured
|
|
23
|
+
* report), a terminal `respond_<task>` tool is inappropriate: the model can call
|
|
24
|
+
* it mid-task to "state a plan/answer" and the turn then winds down before the
|
|
25
|
+
* edits are finished. Live (grok session 19fa8895c41c): an "Improve … implement
|
|
26
|
+
* these fixes" prompt was classified `debug`, so `respond_debug` was offered; the
|
|
27
|
+
* model called it after reading the files, made a few edits, then stopped — the
|
|
28
|
+
* HTML was never wired. Dropping the tool just falls through to the markdown
|
|
29
|
+
* OUTPUT RULES (graceful — exactly what code-heavy tasks already do), so a false
|
|
30
|
+
* positive on an analysis turn only forgoes structured JSON, never breaks output.
|
|
31
|
+
*
|
|
32
|
+
* High-signal verbs only (implement/edit/wire/rewrite/rename/scaffold/refactor/
|
|
33
|
+
* improve, "make the change", "apply the fix/patch", VI equivalents incl. "cải
|
|
34
|
+
* thiện"). Bare "fix"/"replace" are excluded — too common in analysis ("explain
|
|
35
|
+
* the fix") — so pure analyze/plan/debug-investigation turns keep their
|
|
36
|
+
* structured output. "improve(ment)" / "cải thiện" added after session
|
|
37
|
+
* 2b7a10219499: "lên plan rồi improvement … cải thiện Compaction" was an
|
|
38
|
+
* implement turn the model mis-classified as a `report`, so a terminal
|
|
39
|
+
* respond_plan ended it on a plan (edits done but uncommitted/unreported).
|
|
40
|
+
*/
|
|
41
|
+
export declare const SPRINT_EXECUTION_MARKER = "[SPRINT-PLAN-EXECUTION: locked]";
|
|
42
|
+
export declare function isSprintPlanExecution(raw: string): boolean;
|
|
20
43
|
export declare function isImplementationIntent(raw: string): boolean;
|
|
21
44
|
export declare function isQuestionLike(raw: string): boolean;
|
|
22
45
|
export declare function prefersStructuredReport(raw: string): boolean;
|
|
@@ -285,7 +285,11 @@ export function applyPilSuffix(systemPrompt, ctx, responseToolsActive = false) {
|
|
|
285
285
|
* implement turn the model mis-classified as a `report`, so a terminal
|
|
286
286
|
* respond_plan ended it on a plan (edits done but uncommitted/unreported).
|
|
287
287
|
*/
|
|
288
|
-
const
|
|
288
|
+
export const SPRINT_EXECUTION_MARKER = "[SPRINT-PLAN-EXECUTION: locked]";
|
|
289
|
+
export function isSprintPlanExecution(raw) {
|
|
290
|
+
return raw.includes(SPRINT_EXECUTION_MARKER) || raw.includes("--- SPRINT PLAN TO IMPLEMENT ---");
|
|
291
|
+
}
|
|
292
|
+
const IMPLEMENTATION_INTENT_RE = /\b(implement|edit|wire(?:\s+up)?|rewrite|rename|scaffold|refactor)\b|\bimprove(?:ment)?\b|\bmake\s+(the\s+)?(change|edit|modification)s?\b|\bapply\s+(the\s+)?(fix|change|patch|edit|diff)\b|(?:^|\s)(triển\s*khai|trien\s*khai|chỉnh\s*sửa|chinh\s*sua|viết\s*lại|viet\s*lai|đổi\s*tên|doi\s*ten|cải\s*thiện|cai\s*thien)\b|\[SPRINT-PLAN-EXECUTION:\s*locked\]/i;
|
|
289
293
|
export function isImplementationIntent(raw) {
|
|
290
294
|
return !!raw && IMPLEMENTATION_INTENT_RE.test(raw);
|
|
291
295
|
}
|
|
@@ -49,6 +49,18 @@ export interface LlmClassifyResult {
|
|
|
49
49
|
* what the task actually entails, not by which keywords it happens to contain.
|
|
50
50
|
*/
|
|
51
51
|
depthTier: DepthTier | null;
|
|
52
|
+
/**
|
|
53
|
+
* Model-decided clarity: true when the request is UNDERSPECIFIED — missing
|
|
54
|
+
* information the agent would need to proceed without guessing (an unstated
|
|
55
|
+
* target/scope, a vague "make it better", competing interpretations, or an
|
|
56
|
+
* unresolved design choice). Drives the interview gate: a `standard`-depth
|
|
57
|
+
* task that is underspecified earns a clarify/council pass instead of hot-
|
|
58
|
+
* pathing straight to implementation. `false` = well-specified enough to plan
|
|
59
|
+
* directly. null when the model omitted the word → treated as not-
|
|
60
|
+
* underspecified (the don't-over-ask safe direction). Agent-first replacement
|
|
61
|
+
* for the regex `scoreSufficiency` scorer.
|
|
62
|
+
*/
|
|
63
|
+
needsClarification: boolean | null;
|
|
52
64
|
/**
|
|
53
65
|
* Model-decided scope: true when the turn is about the Muonroi PLATFORM /
|
|
54
66
|
* ecosystem (BB/.NET packages, building-block, open-core, rule engine,
|
|
@@ -67,7 +79,19 @@ export interface LlmClassifyResult {
|
|
|
67
79
|
*/
|
|
68
80
|
replyLanguage: string | null;
|
|
69
81
|
}
|
|
70
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Options for a classify call. `recentTurns` is a compact digest of the last
|
|
84
|
+
* few conversation turns; when present the classifier uses it ONLY to resolve
|
|
85
|
+
* back-references in the new message (e.g. "từ các phần đó", "làm tiếp", "this")
|
|
86
|
+
* so a terse follow-up that points at heavy prior work is not mis-scored as a
|
|
87
|
+
* trivial one-liner. Without it the classifier sees the bare prompt and is blind
|
|
88
|
+
* to context — the documented "chấm điểm chỉ dựa only prompt" failure.
|
|
89
|
+
*/
|
|
90
|
+
export interface LlmClassifyOptions {
|
|
91
|
+
recentTurns?: string | null;
|
|
92
|
+
signal?: AbortSignal;
|
|
93
|
+
}
|
|
94
|
+
export type LlmClassifyFn = (prompt: string, opts?: LlmClassifyOptions) => Promise<LlmClassifyResult | null>;
|
|
71
95
|
/**
|
|
72
96
|
* Build a closure the PIL pipeline can call. Reuses the orchestrator's already-
|
|
73
97
|
* constructed providerFactory + modelId so we don't pay key-loading cost twice.
|
|
@@ -82,8 +106,15 @@ export interface SubSessionRouteResult {
|
|
|
82
106
|
confidence: number;
|
|
83
107
|
reason: string;
|
|
84
108
|
}
|
|
85
|
-
export declare function classifySubSessionActionHeuristic(prompt: string): SubSessionRouteResult | null;
|
|
86
109
|
export declare function classifySubSessionAction(factory: ProviderFactory, modelId: string, prompt: string, contextInfo?: {
|
|
87
110
|
currentChars: number;
|
|
88
111
|
threshold: number;
|
|
112
|
+
/**
|
|
113
|
+
* Compact digest of recent conversation turns. The router's system prompt
|
|
114
|
+
* says it decides "based on the conversation history" — without this the
|
|
115
|
+
* history was never actually supplied and the router judged the prompt in
|
|
116
|
+
* isolation, so a follow-up like "ok làm phần đó đi" could not be told apart
|
|
117
|
+
* from a fresh unrelated task. Supplying it makes the claim true.
|
|
118
|
+
*/
|
|
119
|
+
recentTurns?: string | null;
|
|
89
120
|
}, signal?: AbortSignal): Promise<SubSessionRouteResult | null>;
|