muonroi-cli 1.8.3 → 1.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +133 -122
- package/dist/packages/agent-harness-core/src/driver.d.ts +27 -1
- package/dist/packages/agent-harness-core/src/driver.js +46 -0
- package/dist/packages/agent-harness-core/src/event-tee.d.ts +48 -0
- package/dist/packages/agent-harness-core/src/event-tee.js +77 -0
- package/dist/packages/agent-harness-core/src/mcp-server.d.ts +11 -0
- package/dist/packages/agent-harness-core/src/mcp-server.js +87 -15
- package/dist/packages/agent-harness-core/src/protocol.d.ts +66 -2
- package/dist/packages/agent-harness-core/src/protocol.js +15 -0
- package/dist/packages/agent-harness-core/src/visual-quality.d.ts +58 -0
- package/dist/packages/agent-harness-core/src/visual-quality.js +141 -0
- package/dist/packages/agent-harness-opentui/src/agent-mode.d.ts +6 -0
- package/dist/packages/agent-harness-opentui/src/agent-mode.js +14 -1
- package/dist/packages/agent-harness-opentui/src/input-bridge.d.ts +2 -10
- package/dist/packages/agent-harness-opentui/src/input-bridge.js +103 -16
- package/dist/packages/agent-harness-opentui/src/install.d.ts +8 -0
- package/dist/packages/agent-harness-opentui/src/install.js +10 -0
- package/dist/packages/agent-harness-opentui/src/semantic.js +12 -10
- package/dist/packages/agent-harness-opentui/src/visual-capture.d.ts +56 -0
- package/dist/packages/agent-harness-opentui/src/visual-capture.js +103 -0
- package/dist/src/agent-harness/mock-model.d.ts +28 -0
- package/dist/src/agent-harness/mock-model.js +63 -1
- package/dist/src/agent-harness/test-spawn.js +31 -0
- package/dist/src/cli/config/screen-providers.js +1 -1
- package/dist/src/cli/cost-forensics.d.ts +10 -0
- package/dist/src/cli/cost-forensics.js +30 -15
- package/dist/src/cli/keys-bundle.d.ts +1 -1
- package/dist/src/cli/keys-bundle.js +1 -1
- package/dist/src/cli/keys.d.ts +2 -2
- package/dist/src/cli/keys.js +19 -81
- package/dist/src/council/clarifier.d.ts +28 -2
- package/dist/src/council/clarifier.js +81 -15
- package/dist/src/council/context.js +49 -15
- package/dist/src/council/debate-checkpoint.d.ts +129 -0
- package/dist/src/council/debate-checkpoint.js +176 -0
- package/dist/src/council/debate-planner.js +51 -3
- package/dist/src/council/debate-summary.d.ts +25 -0
- package/dist/src/council/debate-summary.js +85 -0
- package/dist/src/council/debate.d.ts +169 -2
- package/dist/src/council/debate.js +1210 -134
- package/dist/src/council/index.d.ts +85 -1
- package/dist/src/council/index.js +634 -196
- package/dist/src/council/leader.d.ts +26 -0
- package/dist/src/council/leader.js +150 -9
- package/dist/src/council/llm.d.ts +32 -0
- package/dist/src/council/llm.js +231 -38
- package/dist/src/council/panel-select.d.ts +30 -0
- package/dist/src/council/panel-select.js +72 -0
- package/dist/src/council/planner.js +23 -0
- package/dist/src/council/preflight.d.ts +7 -0
- package/dist/src/council/preflight.js +14 -2
- package/dist/src/council/prompts.d.ts +30 -3
- package/dist/src/council/prompts.js +254 -84
- package/dist/src/council/stance-recall.d.ts +42 -0
- package/dist/src/council/stance-recall.js +57 -0
- package/dist/src/council/strip-think.d.ts +17 -0
- package/dist/src/council/strip-think.js +33 -0
- package/dist/src/council/types.d.ts +128 -0
- package/dist/src/ee/artifact-cache.d.ts +16 -0
- package/dist/src/ee/artifact-cache.js +32 -0
- package/dist/src/ee/auth.d.ts +1 -0
- package/dist/src/ee/auth.js +15 -2
- package/dist/src/ee/bridge.d.ts +10 -0
- package/dist/src/ee/bridge.js +58 -0
- package/dist/src/ee/client.js +81 -18
- package/dist/src/ee/export-transcripts.d.ts +1 -0
- package/dist/src/ee/export-transcripts.js +8 -10
- package/dist/src/ee/extract-session.js +29 -0
- package/dist/src/ee/extract-style.d.ts +58 -0
- package/dist/src/ee/extract-style.js +270 -0
- package/dist/src/ee/recall-ledger.d.ts +9 -0
- package/dist/src/ee/recall-ledger.js +3 -0
- package/dist/src/ee/scope.d.ts +1 -0
- package/dist/src/ee/scope.js +26 -1
- package/dist/src/ee/search.d.ts +7 -0
- package/dist/src/ee/search.js +24 -0
- package/dist/src/ee/transcript-emit.js +2 -0
- package/dist/src/ee/types.d.ts +22 -0
- package/dist/src/ee/who-am-i-brain.d.ts +35 -0
- package/dist/src/ee/who-am-i-brain.js +220 -0
- package/dist/src/ee/who-am-i.d.ts +10 -3
- package/dist/src/ee/who-am-i.js +12 -0
- package/dist/src/ee/workflow-event.d.ts +48 -0
- package/dist/src/ee/workflow-event.js +81 -0
- package/dist/src/flow/compaction/compress.d.ts +3 -3
- package/dist/src/flow/compaction/compress.js +45 -8
- package/dist/src/flow/compaction/extract.d.ts +4 -7
- package/dist/src/flow/compaction/extract.js +50 -10
- package/dist/src/flow/compaction/index.d.ts +13 -1
- package/dist/src/flow/compaction/index.js +70 -3
- package/dist/src/flow/compaction/input-guard.d.ts +24 -0
- package/dist/src/flow/compaction/input-guard.js +43 -0
- package/dist/src/flow/fold-planning.d.ts +36 -0
- package/dist/src/flow/fold-planning.js +83 -0
- package/dist/src/flow/hierarchy.d.ts +146 -0
- package/dist/src/flow/hierarchy.js +427 -0
- package/dist/src/flow/index.d.ts +1 -0
- package/dist/src/flow/index.js +2 -0
- package/dist/src/flow/run-artifacts.d.ts +102 -0
- package/dist/src/flow/run-artifacts.js +208 -0
- package/dist/src/generated/version.d.ts +1 -1
- package/dist/src/generated/version.js +1 -1
- package/dist/src/gsd/assessment-schema.d.ts +44 -0
- package/dist/src/gsd/assessment-schema.js +134 -0
- package/dist/src/gsd/capability-registry.d.ts +45 -0
- package/dist/src/gsd/capability-registry.js +337 -0
- package/dist/src/gsd/complexity-assessor.d.ts +39 -0
- package/dist/src/gsd/complexity-assessor.js +152 -0
- package/dist/src/gsd/config-bridge.d.ts +7 -0
- package/dist/src/gsd/config-bridge.js +114 -0
- package/dist/src/gsd/config-loader.d.ts +27 -0
- package/dist/src/gsd/config-loader.js +50 -0
- package/dist/src/gsd/council-context.d.ts +44 -0
- package/dist/src/gsd/council-context.js +114 -0
- package/dist/src/gsd/ee-closure.d.ts +28 -0
- package/dist/src/gsd/ee-closure.js +49 -0
- package/dist/src/gsd/flags.d.ts +55 -0
- package/dist/src/gsd/flags.js +83 -0
- package/dist/src/gsd/gsd-dispatch.d.ts +58 -0
- package/dist/src/gsd/gsd-dispatch.js +131 -0
- package/dist/src/gsd/gsd-runtime.d.ts +22 -0
- package/dist/src/gsd/gsd-runtime.js +37 -0
- package/dist/src/gsd/host-adapter.d.ts +11 -0
- package/dist/src/gsd/host-adapter.js +29 -0
- package/dist/src/gsd/index.d.ts +24 -1
- package/dist/src/gsd/index.js +27 -0
- package/dist/src/gsd/loop-host-contract.d.ts +21 -0
- package/dist/src/gsd/loop-host-contract.js +39 -0
- package/dist/src/gsd/loop-host.d.ts +69 -0
- package/dist/src/gsd/loop-host.js +245 -0
- package/dist/src/gsd/loop-resolver.d.ts +36 -0
- package/dist/src/gsd/loop-resolver.js +79 -0
- package/dist/src/gsd/model-tier.d.ts +13 -0
- package/dist/src/gsd/model-tier.js +45 -0
- package/dist/src/gsd/mutation-gate.d.ts +16 -0
- package/dist/src/gsd/mutation-gate.js +41 -0
- package/dist/src/gsd/native-roadmap.d.ts +89 -0
- package/dist/src/gsd/native-roadmap.js +343 -0
- package/dist/src/gsd/native-state.d.ts +47 -0
- package/dist/src/gsd/native-state.js +220 -0
- package/dist/src/gsd/paths.d.ts +23 -0
- package/dist/src/gsd/paths.js +66 -0
- package/dist/src/gsd/phase-dag.d.ts +12 -0
- package/dist/src/gsd/phase-dag.js +94 -0
- package/dist/src/gsd/phase-sync.d.ts +42 -0
- package/dist/src/gsd/phase-sync.js +321 -0
- package/dist/src/gsd/pil-gate-context.d.ts +13 -0
- package/dist/src/gsd/pil-gate-context.js +64 -0
- package/dist/src/gsd/pil-gate-critic.d.ts +19 -0
- package/dist/src/gsd/pil-gate-critic.js +74 -0
- package/dist/src/gsd/plan-council-prompts.d.ts +25 -0
- package/dist/src/gsd/plan-council-prompts.js +79 -0
- package/dist/src/gsd/plan-council.d.ts +44 -0
- package/dist/src/gsd/plan-council.js +251 -0
- package/dist/src/gsd/plan-gate-vocabulary.d.ts +40 -0
- package/dist/src/gsd/plan-gate-vocabulary.js +64 -0
- package/dist/src/gsd/product-workspace.d.ts +13 -0
- package/dist/src/gsd/product-workspace.js +124 -0
- package/dist/src/gsd/ship-bridge.d.ts +25 -0
- package/dist/src/gsd/ship-bridge.js +65 -0
- package/dist/src/gsd/state-document.d.ts +40 -0
- package/dist/src/gsd/state-document.js +163 -0
- package/dist/src/gsd/verdict-schema.d.ts +39 -0
- package/dist/src/gsd/verdict-schema.js +144 -0
- package/dist/src/gsd/verify-context.d.ts +22 -0
- package/dist/src/gsd/verify-context.js +27 -0
- package/dist/src/gsd/verify-council-prompts.d.ts +19 -0
- package/dist/src/gsd/verify-council-prompts.js +85 -0
- package/dist/src/gsd/verify-council.d.ts +25 -0
- package/dist/src/gsd/verify-council.js +119 -0
- package/dist/src/gsd/verify-gate-vocabulary.d.ts +25 -0
- package/dist/src/gsd/verify-gate-vocabulary.js +46 -0
- package/dist/src/gsd/workflow-engine.d.ts +60 -0
- package/dist/src/gsd/workflow-engine.js +207 -0
- package/dist/src/gsd/workflow-tools.d.ts +13 -0
- package/dist/src/gsd/workflow-tools.js +277 -0
- package/dist/src/hooks/index.js +1 -1
- package/dist/src/index.js +44 -11
- package/dist/src/maintain/pr-builder.js +23 -13
- package/dist/src/mcp/auto-setup.js +57 -32
- package/dist/src/mcp/client-pool.js +1 -1
- package/dist/src/mcp/ee-tools.js +1 -0
- package/dist/src/mcp/oauth-callback.js +2 -2
- package/dist/src/mcp/research-onboarding.js +8 -7
- package/dist/src/mcp/runtime.js +34 -2
- package/dist/src/mcp/setup-guide-text.d.ts +1 -1
- package/dist/src/mcp/setup-guide-text.js +77 -76
- package/dist/src/models/catalog-client.d.ts +87 -0
- package/dist/src/models/catalog-client.js +105 -38
- package/dist/src/models/catalog.json +528 -265
- package/dist/src/models/registry.d.ts +22 -7
- package/dist/src/models/registry.js +73 -10
- package/dist/src/ops/doctor.js +8 -8
- package/dist/src/orchestrator/auto-commit.js +1 -1
- package/dist/src/orchestrator/batch-turn-runner.js +2 -2
- package/dist/src/orchestrator/cache-prefix.d.ts +67 -0
- package/dist/src/orchestrator/cache-prefix.js +83 -0
- package/dist/src/orchestrator/compact-request.d.ts +32 -0
- package/dist/src/orchestrator/compact-request.js +41 -0
- package/dist/src/orchestrator/compaction.d.ts +10 -0
- package/dist/src/orchestrator/compaction.js +27 -7
- package/dist/src/orchestrator/council-manager.d.ts +12 -3
- package/dist/src/orchestrator/council-manager.js +65 -24
- package/dist/src/orchestrator/cross-turn-dedup.d.ts +6 -0
- package/dist/src/orchestrator/cross-turn-dedup.js +22 -1
- package/dist/src/orchestrator/error-utils.d.ts +29 -0
- package/dist/src/orchestrator/error-utils.js +132 -24
- package/dist/src/orchestrator/grounding-check.js +39 -1
- package/dist/src/orchestrator/message-processor.js +242 -33
- package/dist/src/orchestrator/orchestrator.d.ts +39 -3
- package/dist/src/orchestrator/orchestrator.js +651 -102
- package/dist/src/orchestrator/preprocessor.js +1 -1
- package/dist/src/orchestrator/proactive-compact-detector.d.ts +26 -0
- package/dist/src/orchestrator/proactive-compact-detector.js +36 -0
- package/dist/src/orchestrator/prompts.js +159 -159
- package/dist/src/orchestrator/reactive-delegation.d.ts +39 -0
- package/dist/src/orchestrator/reactive-delegation.js +59 -0
- package/dist/src/orchestrator/retry-classifier.d.ts +2 -1
- package/dist/src/orchestrator/retry-classifier.js +46 -2
- package/dist/src/orchestrator/safety-intercept.d.ts +45 -0
- package/dist/src/orchestrator/safety-intercept.js +55 -0
- package/dist/src/orchestrator/scope-reminder.js +1 -1
- package/dist/src/orchestrator/session-experience.d.ts +2 -1
- package/dist/src/orchestrator/session-experience.js +2 -1
- package/dist/src/orchestrator/should-run-gate.d.ts +5 -0
- package/dist/src/orchestrator/should-run-gate.js +18 -0
- package/dist/src/orchestrator/stall-watchdog.d.ts +24 -3
- package/dist/src/orchestrator/stall-watchdog.js +47 -13
- package/dist/src/orchestrator/stream-runner.js +62 -29
- package/dist/src/orchestrator/sub-agent-cap.d.ts +13 -1
- package/dist/src/orchestrator/sub-agent-cap.js +16 -1
- package/dist/src/orchestrator/sub-agent-model-tier.d.ts +13 -1
- package/dist/src/orchestrator/sub-agent-model-tier.js +16 -2
- package/dist/src/orchestrator/subagent-compactor.d.ts +53 -1
- package/dist/src/orchestrator/subagent-compactor.js +126 -15
- package/dist/src/orchestrator/tool-engine.d.ts +26 -0
- package/dist/src/orchestrator/tool-engine.js +669 -56
- package/dist/src/orchestrator/tool-limit-auto-recover.d.ts +22 -0
- package/dist/src/orchestrator/tool-limit-auto-recover.js +30 -0
- package/dist/src/orchestrator/turn-runner-deps.d.ts +19 -0
- package/dist/src/orchestrator/turn-watchdog.d.ts +37 -0
- package/dist/src/orchestrator/turn-watchdog.js +55 -0
- package/dist/src/pil/agent-operating-contract.d.ts +1 -1
- package/dist/src/pil/agent-operating-contract.js +1 -1
- package/dist/src/pil/cheap-model-playbook.d.ts +1 -1
- package/dist/src/pil/cheap-model-playbook.js +5 -1
- package/dist/src/pil/cheap-model-workbooks.d.ts +1 -1
- package/dist/src/pil/cheap-model-workbooks.js +1 -1
- package/dist/src/pil/discovery-types.d.ts +1 -0
- package/dist/src/pil/discovery.js +16 -11
- package/dist/src/pil/layer1-intent.d.ts +18 -6
- package/dist/src/pil/layer1-intent.js +66 -757
- package/dist/src/pil/layer15-context-scan.js +15 -1
- package/dist/src/pil/layer2_5-ponytail.js +8 -8
- package/dist/src/pil/layer3-ee-injection.js +23 -8
- package/dist/src/pil/layer4-gsd.js +69 -16
- package/dist/src/pil/layer5-context.js +7 -3
- package/dist/src/pil/layer6-output.d.ts +23 -0
- package/dist/src/pil/layer6-output.js +5 -1
- package/dist/src/pil/llm-classify.d.ts +33 -2
- package/dist/src/pil/llm-classify.js +123 -131
- package/dist/src/pil/native-capabilities-workbook.d.ts +1 -1
- package/dist/src/pil/native-capabilities-workbook.js +1 -0
- package/dist/src/pil/pipeline.js +34 -2
- package/dist/src/pil/response-tools.js +5 -3
- package/dist/src/pil/schema.d.ts +1 -0
- package/dist/src/pil/schema.js +2 -0
- package/dist/src/pil/types.d.ts +18 -0
- package/dist/src/playbook/directives.d.ts +4 -0
- package/dist/src/playbook/directives.js +17 -5
- package/dist/src/product-loop/backlog-builder.d.ts +14 -1
- package/dist/src/product-loop/backlog-builder.js +30 -6
- package/dist/src/product-loop/discovery-context-format.js +3 -1
- package/dist/src/product-loop/discovery-ecosystem.js +4 -1
- package/dist/src/product-loop/discovery-interview.js +32 -3
- package/dist/src/product-loop/discovery-schema.js +5 -1
- package/dist/src/product-loop/done-gate.js +3 -3
- package/dist/src/product-loop/ideal-trace.d.ts +7 -0
- package/dist/src/product-loop/ideal-trace.js +64 -0
- package/dist/src/product-loop/index.d.ts +13 -1
- package/dist/src/product-loop/index.js +333 -52
- package/dist/src/product-loop/loop-driver.d.ts +7 -0
- package/dist/src/product-loop/loop-driver.js +327 -116
- package/dist/src/product-loop/phase-plan.d.ts +5 -0
- package/dist/src/product-loop/phase-plan.js +39 -2
- package/dist/src/product-loop/phase-runner.js +9 -1
- package/dist/src/product-loop/progress-snapshot.js +4 -4
- package/dist/src/product-loop/sprint-runner.d.ts +111 -0
- package/dist/src/product-loop/sprint-runner.js +559 -16
- package/dist/src/product-loop/types.d.ts +36 -5
- package/dist/src/providers/adapter.d.ts +1 -1
- package/dist/src/providers/adapter.js +3 -4
- package/dist/src/providers/auth/browser-flow.d.ts +1 -1
- package/dist/src/providers/auth/browser-flow.js +1 -1
- package/dist/src/providers/auth/openai-oauth.js +1 -1
- package/dist/src/providers/auth/registry.js +0 -34
- package/dist/src/providers/auth/token-store.js +4 -1
- package/dist/src/providers/auth/types.d.ts +1 -1
- package/dist/src/providers/auth/types.js +1 -1
- package/dist/src/providers/capabilities.d.ts +24 -5
- package/dist/src/providers/capabilities.js +42 -24
- package/dist/src/providers/endpoints.d.ts +2 -2
- package/dist/src/providers/endpoints.js +11 -10
- package/dist/src/providers/keychain.d.ts +1 -1
- package/dist/src/providers/keychain.js +7 -9
- package/dist/src/providers/mcp-vision-bridge.js +82 -172
- package/dist/src/providers/openai-compatible.js +8 -1
- package/dist/src/providers/pricing.d.ts +2 -2
- package/dist/src/providers/pricing.js +3 -13
- package/dist/src/providers/runtime.d.ts +27 -2
- package/dist/src/providers/runtime.js +78 -15
- package/dist/src/providers/strategies/base.strategy.d.ts +16 -0
- package/dist/src/providers/strategies/base.strategy.js +24 -1
- package/dist/src/providers/strategies/{siliconflow.strategy.d.ts → opencode-go.strategy.d.ts} +3 -3
- package/dist/src/providers/strategies/opencode-go.strategy.js +83 -0
- package/dist/src/providers/strategies/registry.js +4 -4
- package/dist/src/providers/strategies/thinking-mode.d.ts +109 -0
- package/dist/src/providers/strategies/thinking-mode.js +280 -1
- package/dist/src/providers/strategies/zai.strategy.d.ts +14 -0
- package/dist/src/providers/strategies/zai.strategy.js +44 -0
- package/dist/src/providers/types.d.ts +5 -6
- package/dist/src/providers/types.js +2 -2
- package/dist/src/providers/vision-backend.d.ts +47 -0
- package/dist/src/providers/vision-backend.js +258 -0
- package/dist/src/providers/vision-proxy.d.ts +22 -9
- package/dist/src/providers/vision-proxy.js +63 -132
- package/dist/src/providers/wire-debug.js +95 -0
- package/dist/src/reporter/index.js +1 -1
- package/dist/src/router/decide.d.ts +13 -0
- package/dist/src/router/decide.js +138 -36
- package/dist/src/router/peak-hour.d.ts +38 -0
- package/dist/src/router/peak-hour.js +107 -0
- package/dist/src/router/step-router.js +3 -2
- package/dist/src/router/warm.js +4 -5
- package/dist/src/scaffold/bb-ecosystem-apply.js +47 -47
- package/dist/src/scaffold/bb-quality-gate.js +5 -5
- package/dist/src/scaffold/continuation-prompt.d.ts +11 -0
- package/dist/src/scaffold/continuation-prompt.js +86 -60
- package/dist/src/scaffold/init-new.js +453 -453
- package/dist/src/scaffold/point-to-existing.d.ts +21 -0
- package/dist/src/scaffold/point-to-existing.js +25 -0
- package/dist/src/self-qa/agentic-loop.js +22 -22
- package/dist/src/{ui/state → state}/active-run.d.ts +19 -0
- package/dist/src/{ui/state → state}/active-run.js +21 -0
- package/dist/src/{ui/status-bar/store.d.ts → state/status-bar-store.d.ts} +4 -1
- package/dist/src/{ui/status-bar/store.js → state/status-bar-store.js} +12 -9
- package/dist/src/state/turn-trace.d.ts +43 -0
- package/dist/src/state/turn-trace.js +32 -0
- package/dist/src/storage/db.js +2 -1
- package/dist/src/storage/index.d.ts +1 -1
- package/dist/src/storage/index.js +1 -1
- package/dist/src/storage/interaction-log.d.ts +1 -1
- package/dist/src/storage/interaction-log.js +5 -5
- package/dist/src/storage/migrations.js +196 -126
- package/dist/src/storage/session-experience-store.js +4 -4
- package/dist/src/storage/sessions.d.ts +28 -10
- package/dist/src/storage/sessions.js +112 -55
- package/dist/src/storage/transcript-view.js +1 -1
- package/dist/src/storage/transcript.d.ts +51 -0
- package/dist/src/storage/transcript.js +383 -112
- package/dist/src/storage/usage.js +14 -14
- package/dist/src/storage/workspaces.js +12 -12
- package/dist/src/tools/file.d.ts +15 -0
- package/dist/src/tools/file.js +32 -0
- package/dist/src/tools/native-tools.js +5 -0
- package/dist/src/tools/registry.d.ts +3 -0
- package/dist/src/tools/registry.js +460 -22
- package/dist/src/tools/research.d.ts +29 -0
- package/dist/src/tools/research.js +233 -0
- package/dist/src/types/index.d.ts +118 -3
- package/dist/src/ui/app.js +0 -0
- package/dist/src/ui/cards/product-status-card.js +1 -1
- package/dist/src/ui/components/bubble-body-guard.d.ts +27 -0
- package/dist/src/ui/components/bubble-body-guard.js +50 -0
- package/dist/src/ui/components/context-rail.d.ts +26 -0
- package/dist/src/ui/components/context-rail.js +33 -0
- package/dist/src/ui/components/council-conclusion-card.d.ts +73 -0
- package/dist/src/ui/components/council-conclusion-card.js +420 -0
- package/dist/src/ui/components/council-debate-pill.d.ts +36 -0
- package/dist/src/ui/components/council-debate-pill.js +34 -0
- package/dist/src/ui/components/council-info-card.js +2 -2
- package/dist/src/ui/components/council-leader-bubble.d.ts +10 -3
- package/dist/src/ui/components/council-leader-bubble.js +21 -11
- package/dist/src/ui/components/council-message-bubble.d.ts +15 -2
- package/dist/src/ui/components/council-message-bubble.js +16 -15
- package/dist/src/ui/components/council-phase-timeline.d.ts +9 -1
- package/dist/src/ui/components/council-phase-timeline.js +49 -15
- package/dist/src/ui/components/council-placeholder-bubble.d.ts +16 -9
- package/dist/src/ui/components/council-placeholder-bubble.js +32 -29
- package/dist/src/ui/components/council-question-card.js +12 -12
- package/dist/src/ui/components/council-rail-rounds.d.ts +26 -0
- package/dist/src/ui/components/council-rail-rounds.js +57 -0
- package/dist/src/ui/components/council-round-group.d.ts +38 -0
- package/dist/src/ui/components/council-round-group.js +88 -0
- package/dist/src/ui/components/council-status-list.d.ts +3 -1
- package/dist/src/ui/components/council-status-list.js +36 -24
- package/dist/src/ui/components/council-synthesis-banner.d.ts +7 -2
- package/dist/src/ui/components/council-synthesis-banner.js +20 -5
- package/dist/src/ui/components/halt-recovery-card.js +9 -5
- package/dist/src/ui/components/jump-to-latest-pill.d.ts +11 -0
- package/dist/src/ui/components/jump-to-latest-pill.js +14 -0
- package/dist/src/ui/components/prompt-box.js +18 -16
- package/dist/src/ui/components/session-tree-card.d.ts +14 -0
- package/dist/src/ui/components/session-tree-card.js +46 -0
- package/dist/src/ui/components/slash-inline-menu.d.ts +12 -0
- package/dist/src/ui/components/slash-inline-menu.js +26 -5
- package/dist/src/ui/components/task-list-panel.d.ts +14 -1
- package/dist/src/ui/components/task-list-panel.js +22 -2
- package/dist/src/ui/containers/modals-layer.d.ts +2 -1
- package/dist/src/ui/hooks/use-session-picker.d.ts +3 -3
- package/dist/src/ui/mcp-modal.js +2 -4
- package/dist/src/ui/modals/api-key-modal.js +1 -1
- package/dist/src/ui/modals/connect-modal.js +4 -3
- package/dist/src/ui/modals/session-picker-modal.d.ts +2 -2
- package/dist/src/ui/modals/session-picker-modal.js +3 -5
- package/dist/src/ui/picker-providers.d.ts +1 -1
- package/dist/src/ui/picker-providers.js +1 -1
- package/dist/src/ui/primitives/index.d.ts +1 -0
- package/dist/src/ui/primitives/index.js +2 -0
- package/dist/src/ui/primitives/semantic-primitives.d.ts +76 -0
- package/dist/src/ui/primitives/semantic-primitives.js +81 -0
- package/dist/src/ui/slash/compact.js +5 -7
- package/dist/src/ui/slash/cost.js +1 -1
- package/dist/src/ui/slash/council-inspect.js +4 -4
- package/dist/src/ui/slash/council.js +19 -1
- package/dist/src/ui/slash/debug.d.ts +3 -31
- package/dist/src/ui/slash/debug.js +9 -20
- package/dist/src/ui/slash/ideal.d.ts +6 -2
- package/dist/src/ui/slash/ideal.js +97 -7
- package/dist/src/ui/slash/menu-items.d.ts +7 -0
- package/dist/src/ui/slash/menu-items.js +12 -18
- package/dist/src/ui/slash/registry.d.ts +2 -0
- package/dist/src/ui/slash/registry.js +4 -0
- package/dist/src/ui/status-bar/cache-hit.d.ts +6 -0
- package/dist/src/ui/status-bar/cache-hit.js +9 -0
- package/dist/src/ui/status-bar/index.d.ts +1 -1
- package/dist/src/ui/status-bar/index.js +7 -3
- package/dist/src/ui/status-bar/usd-meter.d.ts +5 -4
- package/dist/src/ui/status-bar/usd-meter.js +6 -4
- package/dist/src/ui/theme.d.ts +1 -0
- package/dist/src/ui/theme.js +2 -0
- package/dist/src/ui/types.d.ts +7 -0
- package/dist/src/ui/use-app-logic.js +0 -0
- package/dist/src/ui/utils/format.d.ts +14 -0
- package/dist/src/ui/utils/format.js +23 -3
- package/dist/src/usage/downgrade.js +2 -2
- package/dist/src/usage/product-ledger.js +2 -2
- package/dist/src/utils/clipboard-image.js +23 -23
- package/dist/src/utils/install-manager.js +14 -11
- package/dist/src/utils/logger.js +2 -2
- package/dist/src/utils/permission-mode.js +5 -3
- package/dist/src/utils/redactor.js +1 -1
- package/dist/src/utils/settings.d.ts +153 -5
- package/dist/src/utils/settings.js +233 -29
- package/dist/src/utils/side-question.js +2 -2
- package/dist/src/utils/skills.js +3 -3
- package/dist/src/utils/visible-retry.d.ts +11 -0
- package/dist/src/utils/visible-retry.js +10 -1
- package/dist/src/verify/entrypoint.d.ts +1 -1
- package/dist/src/verify/entrypoint.js +1 -1
- package/dist/src/verify/recipes.d.ts +13 -0
- package/dist/src/verify/recipes.js +15 -0
- package/package.json +135 -132
- package/dist/src/providers/auth/gcloud.d.ts +0 -28
- package/dist/src/providers/auth/gcloud.js +0 -102
- package/dist/src/providers/auth/gemini-oauth.d.ts +0 -82
- package/dist/src/providers/auth/gemini-oauth.js +0 -472
- package/dist/src/providers/gemini.d.ts +0 -11
- package/dist/src/providers/gemini.js +0 -45
- package/dist/src/providers/siliconflow-sse-repair.d.ts +0 -58
- package/dist/src/providers/siliconflow-sse-repair.js +0 -177
- package/dist/src/providers/strategies/google.strategy.d.ts +0 -22
- package/dist/src/providers/strategies/google.strategy.js +0 -174
- package/dist/src/providers/strategies/siliconflow.strategy.js +0 -29
- package/dist/src/ui/containers/chat-feed.d.ts +0 -40
- package/dist/src/ui/containers/chat-feed.js +0 -66
package/dist/src/router/warm.js
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { routeModel as bridgeRouteModel } from "../ee/bridge.js";
|
|
8
8
|
import { getDefaultEEClient } from "../ee/intercept.js";
|
|
9
|
-
import {
|
|
9
|
+
import { getRoutedModelByTier } from "./peak-hour.js";
|
|
10
10
|
import { PROVIDER_INHERIT } from "./provider-sentinel.js";
|
|
11
11
|
/**
|
|
12
12
|
* Map the session's provider to the EE runtime whose tier ladder the EE serves.
|
|
13
13
|
* EE keys its `getModelTiers()` ladders by agent runtime, not provider, and only
|
|
14
|
-
* the catalog-backed runtimes (claude/codex
|
|
15
|
-
* Providers without an EE runtime (deepseek/
|
|
14
|
+
* the catalog-backed runtimes (claude/codex) resolve to a non-null model.
|
|
15
|
+
* Providers without an EE runtime (deepseek/xai) map to "" — EE then
|
|
16
16
|
* returns the routing TIER with a null model and we resolve the concrete model
|
|
17
17
|
* from the shared catalog for the session provider. This removes the old
|
|
18
18
|
* hardcoded `runtime:"claude"`, which leaked EE's stale `claude-*` ids into the
|
|
@@ -21,7 +21,6 @@ import { PROVIDER_INHERIT } from "./provider-sentinel.js";
|
|
|
21
21
|
const PROVIDER_TO_EE_RUNTIME = Object.freeze({
|
|
22
22
|
anthropic: "claude",
|
|
23
23
|
openai: "codex",
|
|
24
|
-
google: "gemini",
|
|
25
24
|
});
|
|
26
25
|
function eeRuntimeForProvider(provider) {
|
|
27
26
|
return (provider && PROVIDER_TO_EE_RUNTIME[provider]) || "";
|
|
@@ -36,7 +35,7 @@ export async function callWarmRoute(prompt, opts) {
|
|
|
36
35
|
// EE returns a model only for catalog-backed runtimes; otherwise resolve the
|
|
37
36
|
// concrete model from the catalog for the session provider + decided tier.
|
|
38
37
|
const catalogTier = TIER_TO_CATALOG_TIER[bridgeResult.tier] ?? "balanced";
|
|
39
|
-
const model = bridgeResult.model ||
|
|
38
|
+
const model = bridgeResult.model || getRoutedModelByTier(catalogTier, opts.defaultProvider)?.id;
|
|
40
39
|
if (model) {
|
|
41
40
|
return {
|
|
42
41
|
tier: bridgeResult.tier === "fast" ? "hot" : bridgeResult.tier === "premium" ? "cold" : "warm",
|
|
@@ -91,24 +91,24 @@ function buildSampleRuleCs(projectName, intent) {
|
|
|
91
91
|
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
92
92
|
.join("");
|
|
93
93
|
const contextTypeName = `${projectName}RuleContext`;
|
|
94
|
-
return `using Muonroi.RuleEngine.Abstractions;
|
|
95
|
-
using Muonroi.RuleEngine.Core;
|
|
96
|
-
|
|
97
|
-
namespace ${projectName}.Domain.Rules;
|
|
98
|
-
|
|
99
|
-
/// <summary>
|
|
100
|
-
/// Sample rule for intent: ${intent}.
|
|
101
|
-
/// Generated by muonroi-cli — replace stub logic with real business logic.
|
|
102
|
-
/// </summary>
|
|
103
|
-
[MExtractAsRule("SAMPLE_${intent.toUpperCase().replace(/[-\s]/g, "_")}", DependsOn = new string[] { })]
|
|
104
|
-
public class Sample${intentPascal}Rule : IRule<${contextTypeName}>
|
|
105
|
-
{
|
|
106
|
-
public Task<RuleResult> EvaluateAsync(${contextTypeName} context, CancellationToken cancellationToken = default)
|
|
107
|
-
{
|
|
108
|
-
// TODO: Replace with real ${intent} evaluation logic.
|
|
109
|
-
return Task.FromResult(RuleResult.Passed());
|
|
110
|
-
}
|
|
111
|
-
}
|
|
94
|
+
return `using Muonroi.RuleEngine.Abstractions;
|
|
95
|
+
using Muonroi.RuleEngine.Core;
|
|
96
|
+
|
|
97
|
+
namespace ${projectName}.Domain.Rules;
|
|
98
|
+
|
|
99
|
+
/// <summary>
|
|
100
|
+
/// Sample rule for intent: ${intent}.
|
|
101
|
+
/// Generated by muonroi-cli — replace stub logic with real business logic.
|
|
102
|
+
/// </summary>
|
|
103
|
+
[MExtractAsRule("SAMPLE_${intent.toUpperCase().replace(/[-\s]/g, "_")}", DependsOn = new string[] { })]
|
|
104
|
+
public class Sample${intentPascal}Rule : IRule<${contextTypeName}>
|
|
105
|
+
{
|
|
106
|
+
public Task<RuleResult> EvaluateAsync(${contextTypeName} context, CancellationToken cancellationToken = default)
|
|
107
|
+
{
|
|
108
|
+
// TODO: Replace with real ${intent} evaluation logic.
|
|
109
|
+
return Task.FromResult(RuleResult.Passed());
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
112
|
`;
|
|
113
113
|
}
|
|
114
114
|
export async function generateSampleRule(serverDir, projectName, intent, fsOps) {
|
|
@@ -133,32 +133,32 @@ function buildSampleRuleTestCs(projectName, intent) {
|
|
|
133
133
|
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
134
134
|
.join("");
|
|
135
135
|
const contextTypeName = `${projectName}RuleContext`;
|
|
136
|
-
return `using Muonroi.RuleEngine.Abstractions;
|
|
137
|
-
using Muonroi.RuleEngine.Core;
|
|
138
|
-
using Xunit;
|
|
139
|
-
|
|
140
|
-
namespace ${projectName}.UnitTests.Rules;
|
|
141
|
-
|
|
142
|
-
/// <summary>
|
|
143
|
-
/// Tests for Sample${intentPascal}Rule.
|
|
144
|
-
/// Generated by muonroi-cli — extend with real test cases.
|
|
145
|
-
/// </summary>
|
|
146
|
-
public class Sample${intentPascal}RuleTests
|
|
147
|
-
{
|
|
148
|
-
[Fact]
|
|
149
|
-
public async Task EvaluateAsync_ReturnsRuleResultPassed()
|
|
150
|
-
{
|
|
151
|
-
// Arrange — senior-grade: uses FactBag + reflection-free context construction
|
|
152
|
-
var context = new ${contextTypeName}();
|
|
153
|
-
var rule = new Sample${intentPascal}Rule();
|
|
154
|
-
|
|
155
|
-
// Act
|
|
156
|
-
var result = await rule.EvaluateAsync(context, CancellationToken.None);
|
|
157
|
-
|
|
158
|
-
// Assert
|
|
159
|
-
Assert.Equal(RuleResultStatus.Passed, result.Status);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
136
|
+
return `using Muonroi.RuleEngine.Abstractions;
|
|
137
|
+
using Muonroi.RuleEngine.Core;
|
|
138
|
+
using Xunit;
|
|
139
|
+
|
|
140
|
+
namespace ${projectName}.UnitTests.Rules;
|
|
141
|
+
|
|
142
|
+
/// <summary>
|
|
143
|
+
/// Tests for Sample${intentPascal}Rule.
|
|
144
|
+
/// Generated by muonroi-cli — extend with real test cases.
|
|
145
|
+
/// </summary>
|
|
146
|
+
public class Sample${intentPascal}RuleTests
|
|
147
|
+
{
|
|
148
|
+
[Fact]
|
|
149
|
+
public async Task EvaluateAsync_ReturnsRuleResultPassed()
|
|
150
|
+
{
|
|
151
|
+
// Arrange — senior-grade: uses FactBag + reflection-free context construction
|
|
152
|
+
var context = new ${contextTypeName}();
|
|
153
|
+
var rule = new Sample${intentPascal}Rule();
|
|
154
|
+
|
|
155
|
+
// Act
|
|
156
|
+
var result = await rule.EvaluateAsync(context, CancellationToken.None);
|
|
157
|
+
|
|
158
|
+
// Assert
|
|
159
|
+
Assert.Equal(RuleResultStatus.Passed, result.Status);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
162
|
`;
|
|
163
163
|
}
|
|
164
164
|
export async function generateSampleRuleTest(serverDir, projectName, intent, fsOps) {
|
|
@@ -246,9 +246,9 @@ export async function copyBoundaryScript(serverDir, bbRepoRoot, fsOps) {
|
|
|
246
246
|
const ciContent = fsOps.readFile(ciYmlPath);
|
|
247
247
|
// Idempotency: skip if already wired
|
|
248
248
|
if (!ciContent.includes(BOUNDARIES_SCRIPT_NAME)) {
|
|
249
|
-
const boundaryStep = `
|
|
250
|
-
- name: Check modular boundaries
|
|
251
|
-
run: pwsh ./scripts/${BOUNDARIES_SCRIPT_NAME} -RepoRoot .
|
|
249
|
+
const boundaryStep = `
|
|
250
|
+
- name: Check modular boundaries
|
|
251
|
+
run: pwsh ./scripts/${BOUNDARIES_SCRIPT_NAME} -RepoRoot .
|
|
252
252
|
`;
|
|
253
253
|
// Append before the last line or after the last job step
|
|
254
254
|
const updated = `${ciContent.trimEnd()}\n${boundaryStep}\n`;
|
|
@@ -93,11 +93,11 @@ export async function runQualityGateWithRetry(opts, onRetryCodeGen) {
|
|
|
93
93
|
const failureSummary = firstResult.failures
|
|
94
94
|
.map((f) => `### ${f.step}\n\`\`\`\n${f.output.slice(0, 500)}\n\`\`\``)
|
|
95
95
|
.join("\n\n");
|
|
96
|
-
const councilPrompt = `${opts.intentPrompt}
|
|
97
|
-
|
|
98
|
-
## Gate failures (please fix in next iteration)
|
|
99
|
-
${failureSummary}
|
|
100
|
-
|
|
96
|
+
const councilPrompt = `${opts.intentPrompt}
|
|
97
|
+
|
|
98
|
+
## Gate failures (please fix in next iteration)
|
|
99
|
+
${failureSummary}
|
|
100
|
+
|
|
101
101
|
Please revise the BB ecosystem wiring to fix these compilation/boundary errors.`;
|
|
102
102
|
// Call council once with failures appended
|
|
103
103
|
await continueAsCouncil({
|
|
@@ -10,3 +10,14 @@ export interface ContinuationPromptInput {
|
|
|
10
10
|
installedPackages?: readonly string[];
|
|
11
11
|
}
|
|
12
12
|
export declare function buildIdealContinuationPrompt(input: ContinuationPromptInput): string;
|
|
13
|
+
export interface AdoptExistingPromptInput {
|
|
14
|
+
originalPrompt: string;
|
|
15
|
+
projectDir: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Build the continuation prompt fed to the LLM after the user adopts an EXISTING
|
|
19
|
+
* project via the CB-3 "Point to existing" recovery option. Unlike the init_new
|
|
20
|
+
* variant this makes no template/BB assumptions — the target is an arbitrary
|
|
21
|
+
* repo the user already has, with a verify recipe already detected there.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildAdoptExistingContinuationPrompt(input: AdoptExistingPromptInput): string;
|
|
@@ -1,66 +1,92 @@
|
|
|
1
1
|
export function buildIdealContinuationPrompt(input) {
|
|
2
2
|
const { originalPrompt, projectDir, templateName, installedPackages } = input;
|
|
3
3
|
const packagesSuffix = installedPackages && installedPackages.length > 0 ? ` with packages: ${installedPackages.join(", ")}` : "";
|
|
4
|
-
return `You are continuing a /ideal product loop. The project has been scaffolded at ${projectDir} using the BB template ${templateName}${packagesSuffix}.
|
|
5
|
-
|
|
6
|
-
User's original request:
|
|
7
|
-
"${originalPrompt}"
|
|
8
|
-
|
|
9
|
-
You MUST implement this feature now. Do NOT ask the user for clarification unless a hard blocker is reached (missing API key, ambiguous schema requirement, etc.).
|
|
10
|
-
|
|
11
|
-
Execute these steps in order:
|
|
12
|
-
|
|
13
|
-
1. Discover structure (1-2 tool calls max)
|
|
14
|
-
- PREFERRED: if a \`muonroi-docs\` MCP tool is in your tool list (look for any \`mcp_*docs*_docs_search\` tool), call it with query \`"${templateName} structure overview"\`. This is faster than reading files.
|
|
15
|
-
- FALLBACK: list the project directory, then read whichever of \`README.md\`, \`AGENTS.md\`, \`Agent.md\`, \`EE-INTENT.md\` actually exist (do NOT assume — missing files are fine, just skip them).
|
|
16
|
-
- Identify: project name, main entry point (Program.cs / Gateway), modular boundaries, where to add new domain code.
|
|
17
|
-
|
|
18
|
-
IMPORTANT — Template sample files are REFERENCE ONLY:
|
|
19
|
-
- The BB template ships example code (e.g. \`todo-app.Catalog\`, sample \`TodoRepository\`, \`Catalog\` controller, \`DocTemplateDbContext\`, \`BaseTemplateDbContext\`) named after the template/demo, NOT after the user's project.
|
|
20
|
-
- Read AT MOST ONE such sample file to learn the convention, then DELETE all template sample directories before generating your real domain code. They are reference, not the user's feature.
|
|
21
|
-
- Do not re-read the same sample file repeatedly. If you need its pattern again, recall from memory or rely on \`docs.search\`.
|
|
22
|
-
- RENAME every file/class/namespace that still contains the literal token \`BaseTemplate\`, \`DocTemplate\`, or \`TemplateSample\` to a project-appropriate name BEFORE writing domain code. After cleanup, \`git grep -i basetemplate\` MUST return zero hits — the post-scaffold quality gate fails if any survive.
|
|
23
|
-
- DELETE any stub \`<projectName>.Catalog/\` directory that lives at server root next to \`server/src/Services/\` — \`dotnet new\` may emit a duplicate empty stub.
|
|
24
|
-
|
|
25
|
-
.NET / C# conventions to follow:
|
|
26
|
-
- Async methods MUST accept and forward \`CancellationToken\` to every downstream await; suffix names with \`Async\`.
|
|
27
|
-
- Prefer singular folder names that already exist in the template; if you add new folders, use \`Infrastructure\` (singular), \`Enums\` (plural), \`Authorization\` instead of "Permissioning".
|
|
28
|
-
- Namespace MUST mirror the folder path under the project, in PascalCase.
|
|
29
|
-
- DTO ≠ Entity. Don't return EF entities from controllers — always project to a DTO.
|
|
30
|
-
- DI registration uses \`AddX*\` extension methods in a static class under \`Extensions/\` or \`DependencyInjection/\`; wire them from \`Program.cs\`. Do not register services inline in \`Program.cs\`.
|
|
31
|
-
|
|
32
|
-
Frontend / client/ conventions (apply ONLY if a \`client/\` directory exists in the scaffold):
|
|
33
|
-
- NEVER delete or overwrite \`SemanticProvider\`, \`createSemanticRegistry\`, or any \`<Semantic ...>\` wrapper that the scaffold wrote into \`main.tsx\` / \`app.component.ts\`. The agent harness depends on them — removing them silently breaks all E2E specs. If you rewrite \`main.tsx\`, re-include the existing SemanticProvider block verbatim.
|
|
34
|
-
- Wrap every NEW user-visible region with \`<Semantic id="..." role="..." name="...">\` (composer, list, listitem, modal, statusbar). Pick \`role\` from the union in \`@muonroi/agent-harness-core/protocol\`.
|
|
35
|
-
- NEVER hardcode API URLs in components. Read from \`import.meta.env.VITE_API_BASE\` (React/Vite) or \`environment.apiBase\` (Angular). If \`.env.example\` does not exist yet, create it with a sensible default; never inline \`http://localhost:5000\` or similar in source.
|
|
36
|
-
- Put HTTP + DTO code under \`client/src/api/\`. Define request/response types in \`api/types.ts\` (mirror the C# DTO names). Components import a typed client; never call \`fetch\` directly.
|
|
37
|
-
- Every async view needs THREE states: loading, empty, error. Surface errors via a toast/notification component, not \`console.error\`. Provide an \`ErrorBoundary\` at the app shell.
|
|
38
|
-
- No inline \`style={{...}}\` literals — use CSS modules (\`*.module.css\`) or utility classes (Tailwind if scaffolded). If neither is present, write tokens + reset into \`src/styles/app.css\` and import it ONCE in main; reference variables via \`var(--color-...)\`.
|
|
39
|
-
- TypeScript MUST be strict. If \`tsconfig.json\` does not have \`"strict": true\`, add it. Run \`bunx tsc --noEmit\` before declaring done — it must exit 0.
|
|
40
|
-
- Run \`bun run build\` from \`client/\` before declaring done — it must exit 0 with zero browser-side console errors.
|
|
41
|
-
|
|
42
|
-
2. Design the feature
|
|
43
|
-
- List the domain entity(ies), DTOs, endpoints, persistence model.
|
|
44
|
-
- Match BB conventions (controller-per-resource, MediatR/CQRS if used, validation patterns observed in step 1).
|
|
45
|
-
- State your design in 5-10 lines before generating code.
|
|
46
|
-
|
|
47
|
-
3. Generate code
|
|
48
|
-
- Create files in the locations identified in step 1.
|
|
49
|
-
- Wire DI in Program.cs (use BB extension methods if present).
|
|
50
|
-
- Mirror existing patterns — same namespaces, attributes, error-handling style.
|
|
51
|
-
|
|
52
|
-
4. Verify
|
|
53
|
-
- Run \`dotnet build\` from the server root — must exit 0.
|
|
54
|
-
- If a \`client/\` directory exists, also run \`bun install\` and \`bun run build\` from \`client/\`.
|
|
55
|
-
- Report concrete evidence: build output excerpt + file list created.
|
|
56
|
-
|
|
57
|
-
5. Summarize
|
|
58
|
-
- 3-5 bullets: what was added, where, how to test manually.
|
|
59
|
-
|
|
60
|
-
Constraints:
|
|
61
|
-
- Don't re-scaffold. Don't run \`dotnet new\` again.
|
|
62
|
-
- Don't \`cd\` into ${projectDir} — your working directory is already there.
|
|
63
|
-
- Don't ask "do you want me to continue?" — proceed end-to-end.
|
|
4
|
+
return `You are continuing a /ideal product loop. The project has been scaffolded at ${projectDir} using the BB template ${templateName}${packagesSuffix}.
|
|
5
|
+
|
|
6
|
+
User's original request:
|
|
7
|
+
"${originalPrompt}"
|
|
8
|
+
|
|
9
|
+
You MUST implement this feature now. Do NOT ask the user for clarification unless a hard blocker is reached (missing API key, ambiguous schema requirement, etc.).
|
|
10
|
+
|
|
11
|
+
Execute these steps in order:
|
|
12
|
+
|
|
13
|
+
1. Discover structure (1-2 tool calls max)
|
|
14
|
+
- PREFERRED: if a \`muonroi-docs\` MCP tool is in your tool list (look for any \`mcp_*docs*_docs_search\` tool), call it with query \`"${templateName} structure overview"\`. This is faster than reading files.
|
|
15
|
+
- FALLBACK: list the project directory, then read whichever of \`README.md\`, \`AGENTS.md\`, \`Agent.md\`, \`EE-INTENT.md\` actually exist (do NOT assume — missing files are fine, just skip them).
|
|
16
|
+
- Identify: project name, main entry point (Program.cs / Gateway), modular boundaries, where to add new domain code.
|
|
17
|
+
|
|
18
|
+
IMPORTANT — Template sample files are REFERENCE ONLY:
|
|
19
|
+
- The BB template ships example code (e.g. \`todo-app.Catalog\`, sample \`TodoRepository\`, \`Catalog\` controller, \`DocTemplateDbContext\`, \`BaseTemplateDbContext\`) named after the template/demo, NOT after the user's project.
|
|
20
|
+
- Read AT MOST ONE such sample file to learn the convention, then DELETE all template sample directories before generating your real domain code. They are reference, not the user's feature.
|
|
21
|
+
- Do not re-read the same sample file repeatedly. If you need its pattern again, recall from memory or rely on \`docs.search\`.
|
|
22
|
+
- RENAME every file/class/namespace that still contains the literal token \`BaseTemplate\`, \`DocTemplate\`, or \`TemplateSample\` to a project-appropriate name BEFORE writing domain code. After cleanup, \`git grep -i basetemplate\` MUST return zero hits — the post-scaffold quality gate fails if any survive.
|
|
23
|
+
- DELETE any stub \`<projectName>.Catalog/\` directory that lives at server root next to \`server/src/Services/\` — \`dotnet new\` may emit a duplicate empty stub.
|
|
24
|
+
|
|
25
|
+
.NET / C# conventions to follow:
|
|
26
|
+
- Async methods MUST accept and forward \`CancellationToken\` to every downstream await; suffix names with \`Async\`.
|
|
27
|
+
- Prefer singular folder names that already exist in the template; if you add new folders, use \`Infrastructure\` (singular), \`Enums\` (plural), \`Authorization\` instead of "Permissioning".
|
|
28
|
+
- Namespace MUST mirror the folder path under the project, in PascalCase.
|
|
29
|
+
- DTO ≠ Entity. Don't return EF entities from controllers — always project to a DTO.
|
|
30
|
+
- DI registration uses \`AddX*\` extension methods in a static class under \`Extensions/\` or \`DependencyInjection/\`; wire them from \`Program.cs\`. Do not register services inline in \`Program.cs\`.
|
|
31
|
+
|
|
32
|
+
Frontend / client/ conventions (apply ONLY if a \`client/\` directory exists in the scaffold):
|
|
33
|
+
- NEVER delete or overwrite \`SemanticProvider\`, \`createSemanticRegistry\`, or any \`<Semantic ...>\` wrapper that the scaffold wrote into \`main.tsx\` / \`app.component.ts\`. The agent harness depends on them — removing them silently breaks all E2E specs. If you rewrite \`main.tsx\`, re-include the existing SemanticProvider block verbatim.
|
|
34
|
+
- Wrap every NEW user-visible region with \`<Semantic id="..." role="..." name="...">\` (composer, list, listitem, modal, statusbar). Pick \`role\` from the union in \`@muonroi/agent-harness-core/protocol\`.
|
|
35
|
+
- NEVER hardcode API URLs in components. Read from \`import.meta.env.VITE_API_BASE\` (React/Vite) or \`environment.apiBase\` (Angular). If \`.env.example\` does not exist yet, create it with a sensible default; never inline \`http://localhost:5000\` or similar in source.
|
|
36
|
+
- Put HTTP + DTO code under \`client/src/api/\`. Define request/response types in \`api/types.ts\` (mirror the C# DTO names). Components import a typed client; never call \`fetch\` directly.
|
|
37
|
+
- Every async view needs THREE states: loading, empty, error. Surface errors via a toast/notification component, not \`console.error\`. Provide an \`ErrorBoundary\` at the app shell.
|
|
38
|
+
- No inline \`style={{...}}\` literals — use CSS modules (\`*.module.css\`) or utility classes (Tailwind if scaffolded). If neither is present, write tokens + reset into \`src/styles/app.css\` and import it ONCE in main; reference variables via \`var(--color-...)\`.
|
|
39
|
+
- TypeScript MUST be strict. If \`tsconfig.json\` does not have \`"strict": true\`, add it. Run \`bunx tsc --noEmit\` before declaring done — it must exit 0.
|
|
40
|
+
- Run \`bun run build\` from \`client/\` before declaring done — it must exit 0 with zero browser-side console errors.
|
|
41
|
+
|
|
42
|
+
2. Design the feature
|
|
43
|
+
- List the domain entity(ies), DTOs, endpoints, persistence model.
|
|
44
|
+
- Match BB conventions (controller-per-resource, MediatR/CQRS if used, validation patterns observed in step 1).
|
|
45
|
+
- State your design in 5-10 lines before generating code.
|
|
46
|
+
|
|
47
|
+
3. Generate code
|
|
48
|
+
- Create files in the locations identified in step 1.
|
|
49
|
+
- Wire DI in Program.cs (use BB extension methods if present).
|
|
50
|
+
- Mirror existing patterns — same namespaces, attributes, error-handling style.
|
|
51
|
+
|
|
52
|
+
4. Verify
|
|
53
|
+
- Run \`dotnet build\` from the server root — must exit 0.
|
|
54
|
+
- If a \`client/\` directory exists, also run \`bun install\` and \`bun run build\` from \`client/\`.
|
|
55
|
+
- Report concrete evidence: build output excerpt + file list created.
|
|
56
|
+
|
|
57
|
+
5. Summarize
|
|
58
|
+
- 3-5 bullets: what was added, where, how to test manually.
|
|
59
|
+
|
|
60
|
+
Constraints:
|
|
61
|
+
- Don't re-scaffold. Don't run \`dotnet new\` again.
|
|
62
|
+
- Don't \`cd\` into ${projectDir} — your working directory is already there.
|
|
63
|
+
- Don't ask "do you want me to continue?" — proceed end-to-end.
|
|
64
64
|
- If you hit a blocker that genuinely needs the user, state EXACTLY which decision is blocking and stop.`;
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Build the continuation prompt fed to the LLM after the user adopts an EXISTING
|
|
68
|
+
* project via the CB-3 "Point to existing" recovery option. Unlike the init_new
|
|
69
|
+
* variant this makes no template/BB assumptions — the target is an arbitrary
|
|
70
|
+
* repo the user already has, with a verify recipe already detected there.
|
|
71
|
+
*/
|
|
72
|
+
export function buildAdoptExistingContinuationPrompt(input) {
|
|
73
|
+
const { originalPrompt, projectDir } = input;
|
|
74
|
+
return `You are continuing a /ideal product loop in an EXISTING project the user pointed to at ${projectDir}. A verify recipe was detected there, so the project already has a runnable test/build setup — adopt it, do NOT re-scaffold.
|
|
75
|
+
|
|
76
|
+
User's original request:
|
|
77
|
+
"${originalPrompt}"
|
|
78
|
+
|
|
79
|
+
Implement this now against the existing codebase. Do NOT ask the user to restate the request.
|
|
80
|
+
|
|
81
|
+
1. Discover structure (1-2 tool calls max): list the project directory, then read the manifest that exists (package.json / pyproject.toml / go.mod / Cargo.toml / *.csproj) and any README/AGENTS.md to learn the stack, entry point, and conventions. Do NOT assume files — skip whatever is absent.
|
|
82
|
+
2. Design briefly (5-10 lines): the entities/modules/endpoints to add, matching the conventions you observed (naming, error-handling, DI, folder layout).
|
|
83
|
+
3. Implement: create/edit files in the EXISTING layout; mirror the surrounding patterns. Never hardcode secrets or URLs — read config from the project's existing mechanism.
|
|
84
|
+
4. Verify: run the project's OWN detected test/build command; it must pass. Report the exact command + an output excerpt as evidence.
|
|
85
|
+
5. Summarize in 3-5 bullets: what was added, where, and how to run/test it.
|
|
86
|
+
|
|
87
|
+
Constraints:
|
|
88
|
+
- Your working directory is already ${projectDir}; do NOT cd into it and do NOT re-scaffold.
|
|
89
|
+
- Don't ask "do you want me to continue?" — proceed end-to-end.
|
|
90
|
+
- If a genuine blocker needs the user (missing API key, ambiguous requirement), state EXACTLY which decision is blocking and stop.`;
|
|
91
|
+
}
|
|
66
92
|
//# sourceMappingURL=continuation-prompt.js.map
|