muonroi-cli 1.3.4 → 1.4.1
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 +122 -122
- package/dist/packages/agent-harness-core/src/predicate.d.ts +2 -2
- package/dist/packages/agent-harness-core/src/protocol.d.ts +8 -0
- package/dist/src/__test-helpers__/catalog-fixtures.d.ts +22 -0
- package/dist/src/__test-helpers__/catalog-fixtures.js +55 -0
- package/dist/src/agent-harness/index.js +1 -1
- package/dist/src/agent-harness/mock-model.d.ts +5 -0
- package/dist/src/agent-harness/mock-model.js +68 -23
- package/dist/src/agent-harness/test-spawn.d.ts +7 -1
- package/dist/src/agent-harness/test-spawn.js +19 -4
- package/dist/src/chat/__tests__/broadcast-bus.test.js +2 -2
- package/dist/src/chat/__tests__/client.test.js +1 -1
- package/dist/src/chat/broadcast-bus.js +2 -2
- package/dist/src/chat/chat-keychain.js +11 -2
- package/dist/src/chat/providers/discord/client.d.ts +1 -1
- package/dist/src/chat/providers/discord/client.js +1 -1
- package/dist/src/cli/config/screen-council.js +1 -1
- package/dist/src/cli/config/screen-models.js +2 -2
- package/dist/src/cli/config/screen-providers.js +2 -2
- package/dist/src/cli/config/tui.js +1 -1
- package/dist/src/cli/cost-forensics.d.ts +31 -0
- package/dist/src/cli/cost-forensics.js +58 -12
- package/dist/src/cli/cost-forensics.test.js +125 -2
- package/dist/src/cli/keys.d.ts +5 -1
- package/dist/src/cli/keys.js +48 -20
- package/dist/src/cli/keys.test.js +1 -1
- package/dist/src/cli/reporter-cmd.d.ts +15 -0
- package/dist/src/cli/reporter-cmd.js +120 -0
- package/dist/src/cli/usage-report.d.ts +38 -1
- package/dist/src/cli/usage-report.js +133 -0
- package/dist/src/council/__tests__/audit-replay.test.js +1 -1
- package/dist/src/council/__tests__/clarifier-max-rounds.test.js +5 -5
- package/dist/src/council/__tests__/clarifier-ready-gate.test.js +233 -0
- package/dist/src/council/__tests__/debate-planner-structured.test.js +2 -2
- package/dist/src/council/__tests__/decisions-lock.test.d.ts +6 -0
- package/dist/src/council/__tests__/decisions-lock.test.js +336 -0
- package/dist/src/council/__tests__/tool-trace.test.js +2 -2
- package/dist/src/council/clarifier.d.ts +19 -2
- package/dist/src/council/clarifier.js +84 -6
- package/dist/src/council/context.js +3 -3
- package/dist/src/council/debate-planner.d.ts +1 -1
- package/dist/src/council/debate-planner.js +40 -7
- package/dist/src/council/debate.js +1 -1
- package/dist/src/council/decisions-lock.d.ts +76 -0
- package/dist/src/council/decisions-lock.js +239 -0
- package/dist/src/council/index.d.ts +5 -0
- package/dist/src/council/index.js +50 -18
- package/dist/src/council/leader.d.ts +1 -1
- package/dist/src/council/leader.js +14 -1
- package/dist/src/council/llm.js +33 -61
- package/dist/src/council/phase-events.d.ts +5 -0
- package/dist/src/council/phase-events.js +1 -0
- package/dist/src/council/planner.js +1 -1
- package/dist/src/council/prompts.d.ts +24 -0
- package/dist/src/council/prompts.js +112 -22
- package/dist/src/council/types.d.ts +18 -0
- package/dist/src/ee/__tests__/export-transcripts.test.d.ts +11 -0
- package/dist/src/ee/__tests__/export-transcripts.test.js +200 -0
- package/dist/src/ee/__tests__/recall-format.test.d.ts +10 -0
- package/dist/src/ee/__tests__/recall-format.test.js +57 -0
- package/dist/src/ee/__tests__/recall-ledger.test.d.ts +1 -0
- package/dist/src/ee/__tests__/recall-ledger.test.js +45 -0
- package/dist/src/ee/auth.test.js +2 -2
- package/dist/src/ee/client.js +59 -0
- package/dist/src/ee/client.test.js +30 -0
- package/dist/src/ee/council-bridge.js +3 -3
- package/dist/src/ee/export-transcripts.d.ts +26 -0
- package/dist/src/ee/export-transcripts.js +115 -0
- package/dist/src/ee/intercept.d.ts +9 -0
- package/dist/src/ee/intercept.js +19 -0
- package/dist/src/ee/offline-queue.test.js +3 -3
- package/dist/src/ee/phase-tracker.js +1 -1
- package/dist/src/ee/recall-ledger.d.ts +32 -0
- package/dist/src/ee/recall-ledger.js +52 -0
- package/dist/src/ee/recall-mirror.test.d.ts +1 -0
- package/dist/src/ee/recall-mirror.test.js +65 -0
- package/dist/src/ee/scope.js +1 -1
- package/dist/src/ee/scope.test.js +1 -1
- package/dist/src/ee/search.d.ts +99 -0
- package/dist/src/ee/search.js +220 -0
- package/dist/src/ee/session-trajectory.js +1 -1
- package/dist/src/ee/session-trajectory.test.js +1 -1
- package/dist/src/ee/transcript-emit.d.ts +51 -0
- package/dist/src/ee/transcript-emit.js +140 -0
- package/dist/src/ee/types.d.ts +37 -1
- package/dist/src/flow/__tests__/migration.test.js +1 -1
- package/dist/src/flow/__tests__/run-manager-product.test.js +1 -1
- package/dist/src/flow/__tests__/run-manager.test.js +1 -1
- package/dist/src/flow/__tests__/scaffold-checkpoint.test.js +2 -2
- package/dist/src/flow/__tests__/scaffold.test.js +1 -1
- package/dist/src/flow/__tests__/warning-persist.test.js +1 -1
- package/dist/src/generated/version.d.ts +1 -1
- package/dist/src/generated/version.js +1 -1
- package/dist/src/gsd/__tests__/directives.test.js +35 -0
- package/dist/src/gsd/__tests__/types.test.js +14 -1
- package/dist/src/gsd/directives.d.ts +10 -0
- package/dist/src/gsd/directives.js +38 -2
- package/dist/src/gsd/gray-areas.js +1 -1
- package/dist/src/gsd/types.d.ts +1 -1
- package/dist/src/gsd/types.js +20 -6
- package/dist/src/headless/__tests__/council-answers.test.js +26 -1
- package/dist/src/headless/council-answers.d.ts +17 -2
- package/dist/src/headless/council-answers.js +21 -0
- package/dist/src/hooks/index.js +74 -49
- package/dist/src/index.js +180 -16
- package/dist/src/lsp/builtins.js +44 -0
- package/dist/src/lsp/builtins.test.js +22 -1
- package/dist/src/lsp/manager.js +40 -9
- package/dist/src/lsp/manager.test.js +23 -1
- package/dist/src/lsp/npm-cache.js +2 -1
- package/dist/src/lsp/npm-cache.test.js +1 -1
- package/dist/src/lsp/smoke.test.js +1 -1
- package/dist/src/lsp/types.d.ts +3 -1
- package/dist/src/maintain/__tests__/codebase-intel.test.d.ts +5 -0
- package/dist/src/maintain/__tests__/codebase-intel.test.js +237 -0
- package/dist/src/maintain/__tests__/gh-create-pr.test.d.ts +11 -0
- package/dist/src/maintain/__tests__/gh-create-pr.test.js +156 -0
- package/dist/src/maintain/__tests__/pr-builder.test.d.ts +10 -0
- package/dist/src/maintain/__tests__/pr-builder.test.js +225 -0
- package/dist/src/maintain/__tests__/repo-map.test.d.ts +5 -0
- package/dist/src/maintain/__tests__/repo-map.test.js +90 -0
- package/dist/src/maintain/__tests__/task-runner.test.d.ts +11 -0
- package/dist/src/maintain/__tests__/task-runner.test.js +281 -0
- package/dist/src/maintain/codebase-intel.d.ts +22 -0
- package/dist/src/maintain/codebase-intel.js +548 -0
- package/dist/src/maintain/gh-create-pr.d.ts +24 -0
- package/dist/src/maintain/gh-create-pr.js +111 -0
- package/dist/src/maintain/index.d.ts +12 -0
- package/dist/src/maintain/index.js +10 -0
- package/dist/src/maintain/pr-builder.d.ts +35 -0
- package/dist/src/maintain/pr-builder.js +305 -0
- package/dist/src/maintain/repo-map.d.ts +25 -0
- package/dist/src/maintain/repo-map.js +189 -0
- package/dist/src/maintain/task-runner.d.ts +45 -0
- package/dist/src/maintain/task-runner.js +401 -0
- package/dist/src/maintain/types.d.ts +45 -0
- package/dist/src/maintain/types.js +7 -0
- package/dist/src/mcp/__tests__/auto-setup.test.js +1 -1
- package/dist/src/mcp/__tests__/cap-tool-result.test.d.ts +1 -0
- package/dist/src/mcp/__tests__/cap-tool-result.test.js +58 -0
- package/dist/src/mcp/__tests__/ee-tools.test.d.ts +1 -0
- package/dist/src/mcp/__tests__/ee-tools.test.js +198 -0
- package/dist/src/mcp/__tests__/forensics-tools.test.d.ts +1 -0
- package/dist/src/mcp/__tests__/forensics-tools.test.js +53 -0
- package/dist/src/mcp/__tests__/harness-driver-action-tools.spec.js +3 -1
- package/dist/src/mcp/__tests__/harness-driver-async-tools.spec.js +3 -1
- package/dist/src/mcp/__tests__/lsp-tools.test.d.ts +1 -0
- package/dist/src/mcp/__tests__/lsp-tools.test.js +56 -0
- package/dist/src/mcp/__tests__/runtime-output-cap.test.d.ts +1 -0
- package/dist/src/mcp/__tests__/runtime-output-cap.test.js +42 -0
- package/dist/src/mcp/__tests__/self-verify-jobs.test.d.ts +1 -0
- package/dist/src/mcp/__tests__/self-verify-jobs.test.js +92 -0
- package/dist/src/mcp/__tests__/smart-filter.test.d.ts +1 -0
- package/dist/src/mcp/__tests__/smart-filter.test.js +121 -0
- package/dist/src/mcp/__tests__/tools-server.smoke.test.d.ts +1 -0
- package/dist/src/mcp/__tests__/tools-server.smoke.test.js +42 -0
- package/dist/src/mcp/cap-tool-result.d.ts +1 -0
- package/dist/src/mcp/cap-tool-result.js +35 -0
- package/dist/src/mcp/ee-tools.d.ts +36 -0
- package/dist/src/mcp/ee-tools.js +159 -0
- package/dist/src/mcp/forensics-tools.d.ts +13 -0
- package/dist/src/mcp/forensics-tools.js +52 -0
- package/dist/src/mcp/lsp-tools.d.ts +16 -0
- package/dist/src/mcp/lsp-tools.js +65 -0
- package/dist/src/mcp/mcp-keychain.js +11 -2
- package/dist/src/mcp/oauth-callback.js +2 -2
- package/dist/src/mcp/opentui-spawn.js +1 -1
- package/dist/src/mcp/parse-headers.test.js +14 -14
- package/dist/src/mcp/runtime.js +11 -0
- package/dist/src/mcp/self-verify-jobs.d.ts +55 -0
- package/dist/src/mcp/self-verify-jobs.js +86 -0
- package/dist/src/mcp/smart-filter.d.ts +48 -0
- package/dist/src/mcp/smart-filter.js +115 -0
- package/dist/src/mcp/smoke.test.js +44 -44
- package/dist/src/mcp/tools-server.d.ts +14 -0
- package/dist/src/mcp/tools-server.js +147 -0
- package/dist/src/models/catalog-client.d.ts +22 -0
- package/dist/src/models/catalog-client.js +95 -9
- package/dist/src/models/catalog-gemini.test.d.ts +1 -0
- package/dist/src/models/catalog-gemini.test.js +46 -0
- package/dist/src/models/catalog-url.test.d.ts +1 -0
- package/dist/src/models/catalog-url.test.js +26 -0
- package/dist/src/models/catalog-validation.test.d.ts +1 -0
- package/dist/src/models/catalog-validation.test.js +63 -0
- package/dist/src/models/catalog.json +349 -177
- package/dist/src/models/classify-tier.d.ts +1 -1
- package/dist/src/models/classify-tier.js +1 -1
- package/dist/src/models/registry.d.ts +2 -0
- package/dist/src/models/registry.js +9 -0
- package/dist/src/ops/__tests__/doctor-ee-health.test.js +1 -1
- package/dist/src/ops/doctor.js +7 -7
- package/dist/src/orchestrator/__tests__/agent-base-url-switch.test.d.ts +1 -0
- package/dist/src/orchestrator/__tests__/agent-base-url-switch.test.js +77 -0
- package/dist/src/orchestrator/__tests__/batch-turn-runner.test.js +10 -3
- package/dist/src/orchestrator/__tests__/cross-turn-dedup.test.js +38 -16
- package/dist/src/orchestrator/__tests__/error-forensics.test.d.ts +1 -0
- package/dist/src/orchestrator/__tests__/error-forensics.test.js +93 -0
- package/dist/src/orchestrator/__tests__/flow-resume.test.js +1 -1
- package/dist/src/orchestrator/__tests__/humanize-api-error.test.d.ts +1 -0
- package/dist/src/orchestrator/__tests__/humanize-api-error.test.js +68 -0
- package/dist/src/orchestrator/__tests__/message-processor.test.js +6 -1
- package/dist/src/orchestrator/__tests__/read-path-budget.test.js +62 -4
- package/dist/src/orchestrator/__tests__/retry-classifier.test.js +10 -0
- package/dist/src/orchestrator/__tests__/stream-runner.test.js +77 -4
- package/dist/src/orchestrator/__tests__/sub-agent-model-tier.test.d.ts +1 -0
- package/dist/src/orchestrator/__tests__/sub-agent-model-tier.test.js +45 -0
- package/dist/src/orchestrator/__tests__/usage-shape-threading.test.d.ts +1 -0
- package/dist/src/orchestrator/__tests__/usage-shape-threading.test.js +98 -0
- package/dist/src/orchestrator/agent.test.js +33 -18
- package/dist/src/orchestrator/batch-turn-runner.d.ts +1 -1
- package/dist/src/orchestrator/batch-turn-runner.js +3 -2
- package/dist/src/orchestrator/compaction.js +99 -87
- package/dist/src/orchestrator/compaction.test.js +17 -0
- package/dist/src/orchestrator/council-manager.d.ts +1 -1
- package/dist/src/orchestrator/council-manager.js +3 -10
- package/dist/src/orchestrator/cross-turn-dedup.js +21 -1
- package/dist/src/orchestrator/delegations.js +7 -1
- package/dist/src/orchestrator/delegations.test.js +1 -1
- package/dist/src/orchestrator/error-utils.d.ts +27 -1
- package/dist/src/orchestrator/error-utils.js +63 -1
- package/dist/src/orchestrator/grounding-check.d.ts +50 -0
- package/dist/src/orchestrator/grounding-check.js +123 -0
- package/dist/src/orchestrator/grounding-check.test.d.ts +1 -0
- package/dist/src/orchestrator/grounding-check.test.js +94 -0
- package/dist/src/orchestrator/interrupted-turn.d.ts +19 -0
- package/dist/src/orchestrator/interrupted-turn.js +28 -0
- package/dist/src/orchestrator/interrupted-turn.test.d.ts +1 -0
- package/dist/src/orchestrator/interrupted-turn.test.js +34 -0
- package/dist/src/orchestrator/message-processor.d.ts +11 -10
- package/dist/src/orchestrator/message-processor.js +1367 -93
- package/dist/src/orchestrator/orchestrator.d.ts +7 -3
- package/dist/src/orchestrator/orchestrator.js +158 -43
- package/dist/src/orchestrator/pending-calls.test.js +1 -1
- package/dist/src/orchestrator/prompts.d.ts +1 -1
- package/dist/src/orchestrator/prompts.js +237 -154
- package/dist/src/orchestrator/read-path-budget.d.ts +22 -2
- package/dist/src/orchestrator/read-path-budget.js +96 -18
- package/dist/src/orchestrator/reasoning.js +43 -1
- package/dist/src/orchestrator/reasoning.test.js +75 -0
- package/dist/src/orchestrator/repair-tool-call.d.ts +32 -0
- package/dist/src/orchestrator/repair-tool-call.js +50 -0
- package/dist/src/orchestrator/repetition-detector.d.ts +58 -0
- package/dist/src/orchestrator/repetition-detector.js +126 -0
- package/dist/src/orchestrator/repetition-detector.test.d.ts +1 -0
- package/dist/src/orchestrator/repetition-detector.test.js +103 -0
- package/dist/src/orchestrator/retry-classifier.js +8 -0
- package/dist/src/orchestrator/sandbox.test.js +3 -1
- package/dist/src/orchestrator/scope-ceiling.d.ts +86 -0
- package/dist/src/orchestrator/scope-ceiling.js +161 -0
- package/dist/src/orchestrator/scope-ceiling.test.d.ts +13 -0
- package/dist/src/orchestrator/scope-ceiling.test.js +181 -0
- package/dist/src/orchestrator/scope-reminder.d.ts +102 -0
- package/dist/src/orchestrator/scope-reminder.js +221 -0
- package/dist/src/orchestrator/scope-reminder.test.d.ts +15 -0
- package/dist/src/orchestrator/scope-reminder.test.js +204 -0
- package/dist/src/orchestrator/stall-rescue.d.ts +67 -0
- package/dist/src/orchestrator/stall-rescue.js +72 -0
- package/dist/src/orchestrator/stall-rescue.test.d.ts +1 -0
- package/dist/src/orchestrator/stall-rescue.test.js +88 -0
- package/dist/src/orchestrator/stall-watchdog.d.ts +34 -0
- package/dist/src/orchestrator/stall-watchdog.js +72 -0
- package/dist/src/orchestrator/stall-watchdog.test.d.ts +1 -0
- package/dist/src/orchestrator/stall-watchdog.test.js +73 -0
- package/dist/src/orchestrator/stream-runner.d.ts +18 -2
- package/dist/src/orchestrator/stream-runner.js +248 -77
- package/dist/src/orchestrator/sub-agent-cap.js +21 -1
- package/dist/src/orchestrator/sub-agent-cap.test.js +41 -3
- package/dist/src/orchestrator/sub-agent-model-tier.d.ts +13 -0
- package/dist/src/orchestrator/sub-agent-model-tier.js +45 -0
- package/dist/src/orchestrator/subagent-compactor.d.ts +49 -0
- package/dist/src/orchestrator/subagent-compactor.js +184 -11
- package/dist/src/orchestrator/subagent-compactor.spec.js +187 -2
- package/dist/src/orchestrator/text-tool-call-detector.d.ts +61 -0
- package/dist/src/orchestrator/text-tool-call-detector.js +163 -0
- package/dist/src/orchestrator/text-tool-call-detector.test.d.ts +1 -0
- package/dist/src/orchestrator/text-tool-call-detector.test.js +89 -0
- package/dist/src/orchestrator/tool-args-hash.d.ts +51 -0
- package/dist/src/orchestrator/tool-args-hash.js +219 -0
- package/dist/src/orchestrator/tool-args-hash.test.d.ts +1 -0
- package/dist/src/orchestrator/tool-args-hash.test.js +105 -0
- package/dist/src/orchestrator/tool-args-repair.d.ts +93 -0
- package/dist/src/orchestrator/tool-args-repair.js +219 -0
- package/dist/src/orchestrator/tool-args-repair.test.d.ts +1 -0
- package/dist/src/orchestrator/tool-args-repair.test.js +136 -0
- package/dist/src/orchestrator/tool-loop-cap.d.ts +66 -0
- package/dist/src/orchestrator/tool-loop-cap.js +138 -0
- package/dist/src/orchestrator/tool-loop-cap.test.d.ts +1 -0
- package/dist/src/orchestrator/tool-loop-cap.test.js +176 -0
- package/dist/src/orchestrator/tool-repetition-detector.d.ts +64 -0
- package/dist/src/orchestrator/tool-repetition-detector.js +0 -0
- package/dist/src/orchestrator/tool-repetition-detector.test.d.ts +1 -0
- package/dist/src/orchestrator/tool-repetition-detector.test.js +101 -0
- package/dist/src/orchestrator/turn-runner-deps.d.ts +3 -1
- package/dist/src/pil/__tests__/clarity-gate.test.d.ts +1 -0
- package/dist/src/pil/__tests__/clarity-gate.test.js +228 -0
- package/dist/src/pil/__tests__/config.test.js +44 -1
- package/dist/src/pil/__tests__/discovery-cache.test.d.ts +1 -0
- package/dist/src/pil/__tests__/discovery-cache.test.js +38 -0
- package/dist/src/pil/__tests__/discovery-types.test.d.ts +1 -0
- package/dist/src/pil/__tests__/discovery-types.test.js +54 -0
- package/dist/src/pil/__tests__/discovery.test.d.ts +1 -0
- package/dist/src/pil/__tests__/discovery.test.js +101 -0
- package/dist/src/pil/__tests__/layer1-intent-trace.test.js +5 -3
- package/dist/src/pil/__tests__/layer1-intent.test.js +25 -7
- package/dist/src/pil/__tests__/layer15-context-scan.test.d.ts +1 -0
- package/dist/src/pil/__tests__/layer15-context-scan.test.js +64 -0
- package/dist/src/pil/__tests__/layer16-clarity.test.d.ts +1 -0
- package/dist/src/pil/__tests__/layer16-clarity.test.js +153 -0
- package/dist/src/pil/__tests__/layer17-feasibility.test.d.ts +1 -0
- package/dist/src/pil/__tests__/layer17-feasibility.test.js +36 -0
- package/dist/src/pil/__tests__/layer18-acceptance.test.d.ts +1 -0
- package/dist/src/pil/__tests__/layer18-acceptance.test.js +95 -0
- package/dist/src/pil/__tests__/layer3-ee-injection.test.js +4 -1
- package/dist/src/pil/__tests__/layer3-injected-chunk.test.js +3 -3
- package/dist/src/pil/__tests__/layer6-output.test.js +69 -9
- package/dist/src/pil/__tests__/llm-classify.test.d.ts +1 -0
- package/dist/src/pil/__tests__/llm-classify.test.js +113 -0
- package/dist/src/pil/__tests__/native-capabilities-workbook.test.d.ts +1 -0
- package/dist/src/pil/__tests__/native-capabilities-workbook.test.js +40 -0
- package/dist/src/pil/__tests__/pipeline.test.js +3 -2
- package/dist/src/pil/__tests__/renderer-coverage.test.js +1 -1
- package/dist/src/pil/__tests__/response-tools.test.js +49 -1
- package/dist/src/pil/__tests__/scoreComplexity.test.js +2 -2
- package/dist/src/pil/agent-operating-contract.d.ts +51 -0
- package/dist/src/pil/agent-operating-contract.js +66 -0
- package/dist/src/pil/agent-operating-contract.test.d.ts +1 -0
- package/dist/src/pil/agent-operating-contract.test.js +75 -0
- package/dist/src/pil/budget-log.js +1 -1
- package/dist/src/pil/cheap-model-playbook.d.ts +80 -0
- package/dist/src/pil/cheap-model-playbook.js +147 -0
- package/dist/src/pil/cheap-model-playbook.test.d.ts +1 -0
- package/dist/src/pil/cheap-model-playbook.test.js +160 -0
- package/dist/src/pil/cheap-model-workbooks.d.ts +55 -0
- package/dist/src/pil/cheap-model-workbooks.js +102 -0
- package/dist/src/pil/cheap-model-workbooks.test.d.ts +1 -0
- package/dist/src/pil/cheap-model-workbooks.test.js +129 -0
- package/dist/src/pil/clarity-gate.d.ts +22 -0
- package/dist/src/pil/clarity-gate.js +162 -0
- package/dist/src/pil/config.d.ts +3 -0
- package/dist/src/pil/config.js +11 -0
- package/dist/src/pil/discovery-cache.d.ts +4 -0
- package/dist/src/pil/discovery-cache.js +18 -0
- package/dist/src/pil/discovery-types.d.ts +94 -0
- package/dist/src/pil/discovery-types.js +2 -0
- package/dist/src/pil/discovery.d.ts +18 -0
- package/dist/src/pil/discovery.js +341 -0
- package/dist/src/pil/index.d.ts +3 -1
- package/dist/src/pil/index.js +2 -1
- package/dist/src/pil/layer1-intent.d.ts +37 -1
- package/dist/src/pil/layer1-intent.js +675 -39
- package/dist/src/pil/layer1-intent.test.js +333 -1
- package/dist/src/pil/layer15-context-scan.d.ts +9 -0
- package/dist/src/pil/layer15-context-scan.js +164 -0
- package/dist/src/pil/layer16-clarity.d.ts +19 -0
- package/dist/src/pil/layer16-clarity.js +394 -0
- package/dist/src/pil/layer16-clarity.test.d.ts +1 -0
- package/dist/src/pil/layer16-clarity.test.js +31 -0
- package/dist/src/pil/layer17-feasibility.d.ts +4 -0
- package/dist/src/pil/layer17-feasibility.js +30 -0
- package/dist/src/pil/layer18-acceptance.d.ts +4 -0
- package/dist/src/pil/layer18-acceptance.js +84 -0
- package/dist/src/pil/layer1_5-complexity-size.d.ts +23 -0
- package/dist/src/pil/layer1_5-complexity-size.js +152 -0
- package/dist/src/pil/layer1_5-complexity-size.test.d.ts +10 -0
- package/dist/src/pil/layer1_5-complexity-size.test.js +248 -0
- package/dist/src/pil/layer3-ee-injection.js +63 -6
- package/dist/src/pil/layer4-gsd.js +7 -1
- package/dist/src/pil/layer5-context.js +15 -5
- package/dist/src/pil/layer6-output.d.ts +2 -0
- package/dist/src/pil/layer6-output.js +110 -18
- package/dist/src/pil/llm-classify.d.ts +16 -0
- package/dist/src/pil/llm-classify.js +179 -0
- package/dist/src/pil/native-capabilities-workbook.d.ts +39 -0
- package/dist/src/pil/native-capabilities-workbook.js +112 -0
- package/dist/src/pil/pipeline.d.ts +21 -0
- package/dist/src/pil/pipeline.js +89 -13
- package/dist/src/pil/response-tools.d.ts +56 -0
- package/dist/src/pil/response-tools.js +76 -2
- package/dist/src/pil/schema.d.ts +10 -1
- package/dist/src/pil/schema.js +8 -0
- package/dist/src/pil/session-state.d.ts +44 -0
- package/dist/src/pil/session-state.js +143 -0
- package/dist/src/pil/session-state.test.d.ts +1 -0
- package/dist/src/pil/session-state.test.js +73 -0
- package/dist/src/pil/task-tier-map.d.ts +6 -1
- package/dist/src/pil/task-tier-map.js +13 -6
- package/dist/src/pil/types.d.ts +18 -0
- package/dist/src/product-loop/__tests__/artifact-io.test.js +1 -1
- package/dist/src/product-loop/__tests__/assumption-ledger.test.js +1 -1
- package/dist/src/product-loop/__tests__/backlog-builder.test.d.ts +10 -0
- package/dist/src/product-loop/__tests__/backlog-builder.test.js +175 -0
- package/dist/src/product-loop/__tests__/backlog-store.test.d.ts +4 -0
- package/dist/src/product-loop/__tests__/backlog-store.test.js +96 -0
- package/dist/src/product-loop/__tests__/cb2-retry-bonus.test.js +1 -1
- package/dist/src/product-loop/__tests__/complexity-routing.spec.js +113 -7
- package/dist/src/product-loop/__tests__/context-policy.test.js +3 -3
- package/dist/src/product-loop/__tests__/cost-scoper.test.js +1 -1
- package/dist/src/product-loop/__tests__/discovery-context-format.test.d.ts +13 -0
- package/dist/src/product-loop/__tests__/discovery-context-format.test.js +100 -0
- package/dist/src/product-loop/__tests__/discovery-ecosystem.test.js +100 -1
- package/dist/src/product-loop/__tests__/discovery-prompt-specificity.test.d.ts +1 -0
- package/dist/src/product-loop/__tests__/discovery-prompt-specificity.test.js +55 -0
- package/dist/src/product-loop/__tests__/discovery-recommender-ecosystem.test.js +92 -0
- package/dist/src/product-loop/__tests__/ee-extract-wiring.test.js +8 -3
- package/dist/src/product-loop/__tests__/extract-to-ee.test.js +2 -2
- package/dist/src/product-loop/__tests__/gather-selectable-alts.test.d.ts +15 -0
- package/dist/src/product-loop/__tests__/gather-selectable-alts.test.js +109 -0
- package/dist/src/product-loop/__tests__/integration.test.js +7 -2
- package/dist/src/product-loop/__tests__/loop-driver-audit.test.js +7 -2
- package/dist/src/product-loop/__tests__/loop-driver.test.js +7 -2
- package/dist/src/product-loop/__tests__/maintenance-task-synthesis.test.d.ts +8 -0
- package/dist/src/product-loop/__tests__/maintenance-task-synthesis.test.js +67 -0
- package/dist/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.d.ts +13 -0
- package/dist/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.js +268 -0
- package/dist/src/product-loop/__tests__/phase-a2-backlog-build.test.d.ts +8 -0
- package/dist/src/product-loop/__tests__/phase-a2-backlog-build.test.js +162 -0
- package/dist/src/product-loop/__tests__/phase-rituals.test.js +1 -1
- package/dist/src/product-loop/__tests__/pick-backend-stack.test.d.ts +11 -0
- package/dist/src/product-loop/__tests__/pick-backend-stack.test.js +95 -0
- package/dist/src/product-loop/__tests__/progress-snapshot.test.d.ts +8 -0
- package/dist/src/product-loop/__tests__/progress-snapshot.test.js +152 -0
- package/dist/src/product-loop/__tests__/repo-audit.test.js +1 -1
- package/dist/src/product-loop/__tests__/repo-brief.test.d.ts +9 -0
- package/dist/src/product-loop/__tests__/repo-brief.test.js +132 -0
- package/dist/src/product-loop/__tests__/route-decision-emit.test.js +51 -2
- package/dist/src/product-loop/__tests__/ship-polish.test.js +1 -1
- package/dist/src/product-loop/__tests__/sprint-planner.test.d.ts +6 -0
- package/dist/src/product-loop/__tests__/sprint-planner.test.js +140 -0
- package/dist/src/product-loop/__tests__/sprint-runner-backlog.test.d.ts +8 -0
- package/dist/src/product-loop/__tests__/sprint-runner-backlog.test.js +221 -0
- package/dist/src/product-loop/__tests__/sprint-runner-phase-chunks.test.d.ts +14 -0
- package/dist/src/product-loop/__tests__/sprint-runner-phase-chunks.test.js +193 -0
- package/dist/src/product-loop/__tests__/sprint-self-verify.test.d.ts +8 -0
- package/dist/src/product-loop/__tests__/sprint-self-verify.test.js +73 -0
- package/dist/src/product-loop/__tests__/sprint-store.test.d.ts +7 -0
- package/dist/src/product-loop/__tests__/sprint-store.test.js +84 -0
- package/dist/src/product-loop/__tests__/sufficiency-routing.spec.js +6 -0
- package/dist/src/product-loop/__tests__/types.test.js +7 -7
- package/dist/src/product-loop/__tests__/verify-failure-threshold.test.js +3 -2
- package/dist/src/product-loop/__tests__/verify-failure-tracking.test.js +2 -2
- package/dist/src/product-loop/assumption-ledger.js +6 -6
- package/dist/src/product-loop/backlog-builder.d.ts +32 -0
- package/dist/src/product-loop/backlog-builder.js +198 -0
- package/dist/src/product-loop/backlog-store.d.ts +22 -0
- package/dist/src/product-loop/backlog-store.js +49 -0
- package/dist/src/product-loop/context-policy.js +1 -1
- package/dist/src/product-loop/cost-preview.js +17 -1
- package/dist/src/product-loop/cross-run-memory.js +11 -11
- package/dist/src/product-loop/discover.js +6 -6
- package/dist/src/product-loop/discovery-context-format.d.ts +16 -0
- package/dist/src/product-loop/discovery-context-format.js +45 -13
- package/dist/src/product-loop/discovery-council-runner.js +5 -10
- package/dist/src/product-loop/discovery-detection.js +3 -3
- package/dist/src/product-loop/discovery-ecosystem.d.ts +23 -0
- package/dist/src/product-loop/discovery-ecosystem.js +104 -0
- package/dist/src/product-loop/discovery-interview.d.ts +6 -0
- package/dist/src/product-loop/discovery-interview.js +38 -2
- package/dist/src/product-loop/discovery-recommender.d.ts +29 -0
- package/dist/src/product-loop/discovery-recommender.js +126 -7
- package/dist/src/product-loop/done-gate.js +5 -5
- package/dist/src/product-loop/gather.d.ts +12 -1
- package/dist/src/product-loop/gather.js +93 -12
- package/dist/src/product-loop/index.d.ts +23 -0
- package/dist/src/product-loop/index.js +502 -9
- package/dist/src/product-loop/loop-driver.js +27 -28
- package/dist/src/product-loop/phase-budget.js +2 -2
- package/dist/src/product-loop/progress-snapshot.d.ts +25 -0
- package/dist/src/product-loop/progress-snapshot.js +180 -0
- package/dist/src/product-loop/repo-brief.d.ts +40 -0
- package/dist/src/product-loop/repo-brief.js +212 -0
- package/dist/src/product-loop/role-registry.js +1 -1
- package/dist/src/product-loop/sprint-planner.d.ts +39 -0
- package/dist/src/product-loop/sprint-planner.js +189 -0
- package/dist/src/product-loop/sprint-runner.js +201 -9
- package/dist/src/product-loop/sprint-self-verify.d.ts +54 -0
- package/dist/src/product-loop/sprint-self-verify.js +145 -0
- package/dist/src/product-loop/sprint-store.d.ts +27 -0
- package/dist/src/product-loop/sprint-store.js +81 -0
- package/dist/src/product-loop/typed-artifacts.js +5 -5
- package/dist/src/product-loop/types.d.ts +113 -2
- package/dist/src/product-loop/verify-failure-tracking.js +1 -1
- package/dist/src/providers/__tests__/adapter-oauth-wiring.test.js +18 -2
- package/dist/src/providers/__tests__/capabilities-provider-options.test.js +23 -1
- package/dist/src/providers/__tests__/capabilities-sanitize.test.js +46 -61
- package/dist/src/providers/__tests__/reasoning-roundtrip.test.d.ts +1 -0
- package/dist/src/providers/__tests__/reasoning-roundtrip.test.js +135 -0
- package/dist/src/providers/__tests__/runtime-integration.test.js +19 -12
- package/dist/src/providers/__tests__/runtime.test.js +3 -6
- package/dist/src/providers/__tests__/siliconflow-sse-repair.test.d.ts +1 -0
- package/dist/src/providers/__tests__/siliconflow-sse-repair.test.js +267 -0
- package/dist/src/providers/auth/__tests__/browser-flow.test.js +1 -1
- package/dist/src/providers/auth/__tests__/gemini-oauth.test.js +1 -1
- package/dist/src/providers/auth/__tests__/grok-oauth.test.d.ts +8 -0
- package/dist/src/providers/auth/__tests__/grok-oauth.test.js +236 -0
- package/dist/src/providers/auth/__tests__/token-store.test.js +7 -7
- package/dist/src/providers/auth/gemini-oauth.js +2 -2
- package/dist/src/providers/auth/grok-oauth.d.ts +63 -0
- package/dist/src/providers/auth/grok-oauth.js +341 -0
- package/dist/src/providers/auth/registry.js +17 -0
- package/dist/src/providers/auth/token-store.js +1 -1
- package/dist/src/providers/capabilities.js +9 -15
- package/dist/src/providers/keychain.js +14 -2
- package/dist/src/providers/mcp-vision-bridge.js +49 -49
- package/dist/src/providers/mcp-vision-bridge.test.js +12 -12
- package/dist/src/providers/openai-compatible.js +5 -1
- package/dist/src/providers/pricing.d.ts +7 -4
- package/dist/src/providers/pricing.js +21 -5
- package/dist/src/providers/pricing.test.js +35 -9
- package/dist/src/providers/runtime.d.ts +1 -0
- package/dist/src/providers/runtime.js +39 -13
- package/dist/src/providers/siliconflow-sse-repair.d.ts +58 -0
- package/dist/src/providers/siliconflow-sse-repair.js +177 -0
- package/dist/src/providers/strategies/deepseek.strategy.js +28 -0
- package/dist/src/providers/strategies/siliconflow.strategy.js +2 -0
- package/dist/src/providers/strategies/xai.strategy.js +8 -1
- package/dist/src/providers/wire-debug.js +2 -2
- package/dist/src/reporter/__tests__/acl-check.test.d.ts +6 -0
- package/dist/src/reporter/__tests__/acl-check.test.js +59 -0
- package/dist/src/reporter/__tests__/auto-fire.test.d.ts +10 -0
- package/dist/src/reporter/__tests__/auto-fire.test.js +140 -0
- package/dist/src/reporter/__tests__/budget.test.d.ts +7 -0
- package/dist/src/reporter/__tests__/budget.test.js +60 -0
- package/dist/src/reporter/__tests__/handlers.test.d.ts +7 -0
- package/dist/src/reporter/__tests__/handlers.test.js +163 -0
- package/dist/src/reporter/__tests__/query-router.test.d.ts +6 -0
- package/dist/src/reporter/__tests__/query-router.test.js +90 -0
- package/dist/src/reporter/acl-check.d.ts +23 -0
- package/dist/src/reporter/acl-check.js +43 -0
- package/dist/src/reporter/auto-fire.d.ts +59 -0
- package/dist/src/reporter/auto-fire.js +126 -0
- package/dist/src/reporter/budget.d.ts +17 -0
- package/dist/src/reporter/budget.js +52 -0
- package/dist/src/reporter/handlers.d.ts +32 -0
- package/dist/src/reporter/handlers.js +180 -0
- package/dist/src/reporter/index.d.ts +44 -0
- package/dist/src/reporter/index.js +167 -0
- package/dist/src/reporter/query-router.d.ts +21 -0
- package/dist/src/reporter/query-router.js +32 -0
- package/dist/src/router/__tests__/step-router.test.js +3 -3
- package/dist/src/router/classifier/regex.js +49 -2
- package/dist/src/router/classifier/regex.test.js +3 -1
- package/dist/src/router/decide.d.ts +18 -0
- package/dist/src/router/decide.js +39 -7
- package/dist/src/router/decide.test.js +58 -8
- package/dist/src/router/role-override.test.d.ts +1 -0
- package/dist/src/router/role-override.test.js +26 -0
- package/dist/src/router/step-router.js +1 -1
- package/dist/src/router/warm.d.ts +2 -0
- package/dist/src/router/warm.js +42 -12
- package/dist/src/router/warm.test.js +59 -1
- package/dist/src/scaffold/__tests__/init-new.spec.js +3 -3
- package/dist/src/scaffold/bb-ecosystem-apply.js +51 -49
- package/dist/src/scaffold/bb-quality-gate.js +5 -5
- package/dist/src/scaffold/continuation-prompt.js +60 -60
- package/dist/src/scaffold/init-new.js +454 -454
- package/dist/src/self-qa/__tests__/agentic-context.test.d.ts +1 -0
- package/dist/src/self-qa/__tests__/agentic-context.test.js +98 -0
- package/dist/src/self-qa/__tests__/agentic-loop.test.d.ts +1 -0
- package/dist/src/self-qa/__tests__/agentic-loop.test.js +62 -0
- package/dist/src/self-qa/__tests__/delta-encoder.test.d.ts +1 -0
- package/dist/src/self-qa/__tests__/delta-encoder.test.js +97 -0
- package/dist/src/self-qa/__tests__/judge.test.d.ts +1 -0
- package/dist/src/self-qa/__tests__/judge.test.js +131 -0
- package/dist/src/self-qa/__tests__/scenario-planner.test.d.ts +1 -0
- package/dist/src/self-qa/__tests__/scenario-planner.test.js +79 -0
- package/dist/src/self-qa/__tests__/spec-emitter.test.d.ts +1 -0
- package/dist/src/self-qa/__tests__/spec-emitter.test.js +62 -0
- package/dist/src/self-qa/agentic-context.d.ts +29 -0
- package/dist/src/self-qa/agentic-context.js +189 -0
- package/dist/src/self-qa/agentic-loop.d.ts +96 -0
- package/dist/src/self-qa/agentic-loop.js +516 -0
- package/dist/src/self-qa/delta-encoder.d.ts +35 -0
- package/dist/src/self-qa/delta-encoder.js +138 -0
- package/dist/src/self-qa/index.d.ts +43 -0
- package/dist/src/self-qa/index.js +65 -0
- package/dist/src/self-qa/judge.d.ts +25 -0
- package/dist/src/self-qa/judge.js +233 -0
- package/dist/src/self-qa/orchestrator.d.ts +31 -0
- package/dist/src/self-qa/orchestrator.js +236 -0
- package/dist/src/self-qa/scenario-planner.d.ts +39 -0
- package/dist/src/self-qa/scenario-planner.js +262 -0
- package/dist/src/self-qa/spec-emitter.d.ts +25 -0
- package/dist/src/self-qa/spec-emitter.js +138 -0
- package/dist/src/self-qa/types.d.ts +113 -0
- package/dist/src/self-qa/types.js +11 -0
- package/dist/src/storage/__tests__/migrations.test.js +2 -2
- package/dist/src/storage/__tests__/sweep-stale-pending.test.d.ts +10 -0
- package/dist/src/storage/__tests__/sweep-stale-pending.test.js +97 -0
- package/dist/src/storage/__tests__/ui-interaction-log.test.js +30 -0
- package/dist/src/storage/atomic-io.test.js +2 -2
- package/dist/src/storage/config.test.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 +122 -122
- package/dist/src/storage/sessions.js +57 -42
- package/dist/src/storage/transcript-response-entry.test.d.ts +1 -0
- package/dist/src/storage/transcript-response-entry.test.js +98 -0
- package/dist/src/storage/transcript.d.ts +22 -0
- package/dist/src/storage/transcript.js +149 -74
- package/dist/src/storage/ui-interaction-log.d.ts +11 -1
- package/dist/src/storage/usage-cap.test.js +1 -1
- package/dist/src/storage/usage.js +14 -14
- package/dist/src/storage/workspaces.js +12 -12
- package/dist/src/tools/__tests__/vision-gate.test.d.ts +1 -0
- package/dist/src/tools/__tests__/vision-gate.test.js +56 -0
- package/dist/src/tools/bash-output-cache.d.ts +59 -0
- package/dist/src/tools/bash-output-cache.js +108 -0
- package/dist/src/tools/bash-output-cache.test.d.ts +1 -0
- package/dist/src/tools/bash-output-cache.test.js +89 -0
- package/dist/src/tools/bash-output-integration.test.d.ts +10 -0
- package/dist/src/tools/bash-output-integration.test.js +30 -0
- package/dist/src/tools/bash.d.ts +12 -0
- package/dist/src/tools/bash.js +114 -21
- package/dist/src/tools/bash.test.js +80 -3
- package/dist/src/tools/computer.test.js +1 -1
- package/dist/src/tools/file-tracker.test.js +1 -1
- package/dist/src/tools/file.js +23 -2
- package/dist/src/tools/file.test.js +49 -1
- package/dist/src/tools/registry-bash-empty-command.test.d.ts +13 -0
- package/dist/src/tools/registry-bash-empty-command.test.js +56 -0
- package/dist/src/tools/registry-bash-footer.test.d.ts +7 -0
- package/dist/src/tools/registry-bash-footer.test.js +82 -0
- package/dist/src/tools/registry-ee-query.test.d.ts +11 -0
- package/dist/src/tools/registry-ee-query.test.js +48 -0
- package/dist/src/tools/registry-session-repeat.test.d.ts +12 -0
- package/dist/src/tools/registry-session-repeat.test.js +87 -0
- package/dist/src/tools/registry.d.ts +38 -0
- package/dist/src/tools/registry.js +262 -4
- package/dist/src/tools/schedule.test.js +1 -1
- package/dist/src/tools/todo-write-snapshot.d.ts +18 -0
- package/dist/src/tools/todo-write-snapshot.js +66 -0
- package/dist/src/tools/todo-write-snapshot.test.d.ts +1 -0
- package/dist/src/tools/todo-write-snapshot.test.js +43 -0
- package/dist/src/tools/vision-gate.d.ts +41 -0
- package/dist/src/tools/vision-gate.js +67 -0
- package/dist/src/types/index.d.ts +65 -4
- package/dist/src/ui/__tests__/picker-providers.test.d.ts +1 -0
- package/dist/src/ui/__tests__/picker-providers.test.js +31 -0
- package/dist/src/ui/agents-modal.js +2 -0
- package/dist/src/ui/app.d.ts +1 -0
- package/dist/src/ui/app.js +0 -0
- package/dist/src/ui/components/__tests__/task-list-panel.test.d.ts +1 -0
- package/dist/src/ui/components/__tests__/task-list-panel.test.js +31 -0
- package/dist/src/ui/components/council-info-card.d.ts +1 -2
- package/dist/src/ui/components/council-leader-bubble.d.ts +1 -2
- package/dist/src/ui/components/council-message-bubble.d.ts +1 -2
- package/dist/src/ui/components/council-phase-timeline.js +20 -1
- package/dist/src/ui/components/council-placeholder-bubble.d.ts +1 -2
- package/dist/src/ui/components/council-question-card.js +3 -0
- package/dist/src/ui/components/council-synthesis-banner.d.ts +1 -2
- package/dist/src/ui/components/halt-recovery-card.js +1 -0
- package/dist/src/ui/components/message-view.d.ts +11 -1
- package/dist/src/ui/components/message-view.js +65 -3
- package/dist/src/ui/components/point-to-existing-form-card.js +5 -1
- package/dist/src/ui/components/task-list-panel.d.ts +32 -0
- package/dist/src/ui/components/task-list-panel.js +84 -0
- package/dist/src/ui/components/tool-group.d.ts +22 -0
- package/dist/src/ui/components/tool-group.js +85 -0
- package/dist/src/ui/hooks/use-agent-editor.js +2 -3
- package/dist/src/ui/hooks/use-model-picker.d.ts +2 -2
- package/dist/src/ui/modals/model-picker-modal.d.ts +2 -0
- package/dist/src/ui/modals/model-picker-modal.js +2 -4
- package/dist/src/ui/picker-providers.d.ts +21 -0
- package/dist/src/ui/picker-providers.js +39 -0
- package/dist/src/ui/slash/__tests__/clear.test.js +1 -1
- package/dist/src/ui/slash/__tests__/compact.test.js +1 -1
- package/dist/src/ui/slash/__tests__/discuss.test.js +1 -1
- package/dist/src/ui/slash/__tests__/execute.test.js +1 -1
- package/dist/src/ui/slash/__tests__/expand.test.js +1 -1
- package/dist/src/ui/slash/__tests__/ideal.test.js +41 -0
- package/dist/src/ui/slash/__tests__/menu-parity.test.d.ts +1 -0
- package/dist/src/ui/slash/__tests__/menu-parity.test.js +1 -0
- package/dist/src/ui/slash/__tests__/plan.test.js +4 -1
- package/dist/src/ui/slash/__tests__/status-render.test.d.ts +7 -0
- package/dist/src/ui/slash/__tests__/status-render.test.js +77 -0
- package/dist/src/ui/slash/council-inspect.js +4 -4
- package/dist/src/ui/slash/export.js +32 -5
- package/dist/src/ui/slash/ideal.d.ts +9 -0
- package/dist/src/ui/slash/ideal.js +27 -1
- package/dist/src/ui/slash/menu-items.js +1 -0
- package/dist/src/ui/slash/status.d.ts +12 -0
- package/dist/src/ui/slash/status.js +32 -0
- package/dist/src/ui/state/active-run.d.ts +26 -0
- package/dist/src/ui/state/active-run.js +44 -0
- package/dist/src/ui/status-bar/index.d.ts +6 -1
- package/dist/src/ui/status-bar/index.js +21 -2
- package/dist/src/ui/status-bar/index.test.js +60 -1
- package/dist/src/ui/status-bar/store.d.ts +16 -0
- package/dist/src/ui/status-bar/store.js +120 -1
- package/dist/src/ui/utils/__tests__/format.test.d.ts +1 -0
- package/dist/src/ui/utils/__tests__/format.test.js +50 -0
- package/dist/src/ui/utils/__tests__/tools.test.d.ts +1 -0
- package/dist/src/ui/utils/__tests__/tools.test.js +48 -0
- package/dist/src/ui/utils/format.d.ts +17 -0
- package/dist/src/ui/utils/format.js +45 -2
- package/dist/src/ui/utils/text.js +2 -1
- package/dist/src/ui/utils/tools.d.ts +2 -0
- package/dist/src/ui/utils/tools.js +58 -9
- package/dist/src/usage/__tests__/product-ledger.test.js +5 -4
- package/dist/src/usage/decision-log.d.ts +1 -1
- package/dist/src/usage/downgrade.d.ts +3 -2
- package/dist/src/usage/downgrade.js +25 -9
- package/dist/src/usage/downgrade.test.js +40 -37
- package/dist/src/usage/product-ledger.d.ts +4 -0
- package/dist/src/usage/product-ledger.js +8 -1
- package/dist/src/utils/__tests__/llm-deadline.test.d.ts +1 -0
- package/dist/src/utils/__tests__/llm-deadline.test.js +56 -0
- package/dist/src/utils/__tests__/settings-disabled-models.test.js +1 -1
- package/dist/src/utils/__tests__/settings-web-research.test.js +1 -1
- package/dist/src/utils/__tests__/visible-retry.test.js +1 -1
- package/dist/src/utils/clipboard-image.js +23 -23
- package/dist/src/utils/install-manager.test.js +1 -1
- package/dist/src/utils/llm-deadline.d.ts +44 -0
- package/dist/src/utils/llm-deadline.js +80 -0
- package/dist/src/utils/permission-mode.d.ts +16 -9
- package/dist/src/utils/permission-mode.js +55 -4
- package/dist/src/utils/settings.d.ts +22 -0
- package/dist/src/utils/settings.js +47 -6
- package/dist/src/utils/shell.d.ts +12 -0
- package/dist/src/utils/shell.js +23 -12
- package/dist/src/utils/shell.test.js +27 -1
- package/dist/src/utils/side-question.js +2 -2
- package/dist/src/utils/skills.js +3 -3
- package/dist/src/utils/skills.test.js +1 -1
- package/dist/src/utils/subagents-settings.test.js +9 -3
- package/dist/src/verify/__tests__/coverage-parsers.test.js +30 -30
- package/dist/src/verify/__tests__/dotnet-recipe.test.js +1 -1
- package/dist/src/verify/checkpoint.test.js +1 -1
- package/dist/src/verify/entrypoint.d.ts +8 -8
- package/dist/src/verify/entrypoint.js +69 -32
- package/dist/src/verify/entrypoint.test.js +1 -1
- package/dist/src/verify/environment.test.js +1 -1
- package/dist/src/verify/orchestrator.test.js +1 -1
- package/dist/src/verify/runtime-prep.test.js +1 -1
- package/package.json +125 -122
- package/scripts/postinstall.cjs +76 -73
- package/dist/packages/agent-harness-core/src/driver.js.map +0 -1
- package/dist/packages/agent-harness-core/src/event-filter.js.map +0 -1
- package/dist/packages/agent-harness-core/src/event-redact.js.map +0 -1
- package/dist/packages/agent-harness-core/src/idle.js.map +0 -1
- package/dist/packages/agent-harness-core/src/index.js.map +0 -1
- package/dist/packages/agent-harness-core/src/mcp-server.js.map +0 -1
- package/dist/packages/agent-harness-core/src/mock-llm.js.map +0 -1
- package/dist/packages/agent-harness-core/src/predicate.js.map +0 -1
- package/dist/packages/agent-harness-core/src/protocol.js.map +0 -1
- package/dist/packages/agent-harness-core/src/registry.js.map +0 -1
- package/dist/packages/agent-harness-core/src/selector.js.map +0 -1
- package/dist/packages/agent-harness-core/src/spec-helpers.js.map +0 -1
- package/dist/packages/agent-harness-core/src/transports/sidechannel.js.map +0 -1
- package/dist/packages/agent-harness-core/src/transports/ws.js.map +0 -1
- package/dist/packages/agent-harness-opentui/src/agent-mode.js.map +0 -1
- package/dist/packages/agent-harness-opentui/src/index.js.map +0 -1
- package/dist/packages/agent-harness-opentui/src/input-bridge.js.map +0 -1
- package/dist/packages/agent-harness-opentui/src/install.js.map +0 -1
- package/dist/packages/agent-harness-opentui/src/reconciler-hook.js.map +0 -1
- package/dist/packages/agent-harness-opentui/src/semantic.js.map +0 -1
- package/dist/src/__test-stubs__/ee-server.js.map +0 -1
- package/dist/src/__test-stubs__/vitest-setup.js.map +0 -1
- package/dist/src/__tests__/council/bubble-layout.test.js.map +0 -1
- package/dist/src/__tests__/council/code-block-truncate.test.js.map +0 -1
- package/dist/src/__tests__/council/role-palette.test.js.map +0 -1
- package/dist/src/__tests__/first-run-wizard.test.js.map +0 -1
- package/dist/src/agent-harness/__tests__/cli-flags.spec.js.map +0 -1
- package/dist/src/agent-harness/__tests__/driver.spec.js.map +0 -1
- package/dist/src/agent-harness/__tests__/idle.spec.js.map +0 -1
- package/dist/src/agent-harness/__tests__/mock-llm.spec.js.map +0 -1
- package/dist/src/agent-harness/__tests__/mock-model.spec.js.map +0 -1
- package/dist/src/agent-harness/__tests__/predicate.spec.js.map +0 -1
- package/dist/src/agent-harness/__tests__/protocol.spec.js.map +0 -1
- package/dist/src/agent-harness/__tests__/schema.spec.js.map +0 -1
- package/dist/src/agent-harness/__tests__/selector.spec.js.map +0 -1
- package/dist/src/agent-harness/__tests__/sidechannel.spec.js.map +0 -1
- package/dist/src/agent-harness/__tests__/spec-helpers.spec.js.map +0 -1
- package/dist/src/agent-harness/index.js.map +0 -1
- package/dist/src/agent-harness/mock-model.js.map +0 -1
- package/dist/src/agent-harness/test-spawn.js.map +0 -1
- package/dist/src/billing/index.js.map +0 -1
- package/dist/src/chat/__tests__/broadcast-bus.test.js.map +0 -1
- package/dist/src/chat/__tests__/channel-manager.test.js.map +0 -1
- package/dist/src/chat/__tests__/client.test.js.map +0 -1
- package/dist/src/chat/__tests__/discord-integration.test.js.map +0 -1
- package/dist/src/chat/__tests__/intent-prompt.test.js.map +0 -1
- package/dist/src/chat/__tests__/verdict-resolver.test.js.map +0 -1
- package/dist/src/chat/broadcast-bus.js.map +0 -1
- package/dist/src/chat/channel-manager.js.map +0 -1
- package/dist/src/chat/chat-keychain.js.map +0 -1
- package/dist/src/chat/factory.js.map +0 -1
- package/dist/src/chat/intent-prompt.js.map +0 -1
- package/dist/src/chat/providers/discord/client.js.map +0 -1
- package/dist/src/chat/types.js.map +0 -1
- package/dist/src/chat/verdict-constants.js.map +0 -1
- package/dist/src/chat/verdict-resolver.js.map +0 -1
- package/dist/src/cli/__tests__/bw-vault.test.js.map +0 -1
- package/dist/src/cli/__tests__/keys-bundle.test.js.map +0 -1
- package/dist/src/cli/__tests__/share-cmd.test.js.map +0 -1
- package/dist/src/cli/bw-vault.js.map +0 -1
- package/dist/src/cli/config/__tests__/model-picker.test.js.map +0 -1
- package/dist/src/cli/config/__tests__/provider-fetch.test.js.map +0 -1
- package/dist/src/cli/config/index.js.map +0 -1
- package/dist/src/cli/config/model-picker.js.map +0 -1
- package/dist/src/cli/config/provider-fetch.js.map +0 -1
- package/dist/src/cli/config/screen-council.js.map +0 -1
- package/dist/src/cli/config/screen-models.js.map +0 -1
- package/dist/src/cli/config/screen-providers.js.map +0 -1
- package/dist/src/cli/config/tui.js.map +0 -1
- package/dist/src/cli/cost-forensics.js.map +0 -1
- package/dist/src/cli/cost-forensics.test.js.map +0 -1
- package/dist/src/cli/keys-bundle.js.map +0 -1
- package/dist/src/cli/keys.js.map +0 -1
- package/dist/src/cli/keys.test.js.map +0 -1
- package/dist/src/cli/pil-report.js.map +0 -1
- package/dist/src/cli/share-cmd.js.map +0 -1
- package/dist/src/cli/usage-report.js.map +0 -1
- package/dist/src/cloud/index.js.map +0 -1
- package/dist/src/council/__tests__/accounting.test.js.map +0 -1
- package/dist/src/council/__tests__/audit-replay.test.js.map +0 -1
- package/dist/src/council/__tests__/clarifier-max-rounds.test.js.map +0 -1
- package/dist/src/council/__tests__/clarifier-options.test.js.map +0 -1
- package/dist/src/council/__tests__/cost-aware.test.js.map +0 -1
- package/dist/src/council/__tests__/debate-planner-structured.test.js.map +0 -1
- package/dist/src/council/__tests__/evaluator-metrics.test.js.map +0 -1
- package/dist/src/council/__tests__/parse-outcome-fallback.test.js.map +0 -1
- package/dist/src/council/__tests__/research-tools.test.js.map +0 -1
- package/dist/src/council/__tests__/round-tools.test.js.map +0 -1
- package/dist/src/council/__tests__/tool-trace.test.js.map +0 -1
- package/dist/src/council/__tests__/types-contract.test.js.map +0 -1
- package/dist/src/council/clarifier.js.map +0 -1
- package/dist/src/council/context.js.map +0 -1
- package/dist/src/council/debate-planner.js.map +0 -1
- package/dist/src/council/debate.js.map +0 -1
- package/dist/src/council/executor.js.map +0 -1
- package/dist/src/council/index.js.map +0 -1
- package/dist/src/council/leader.js.map +0 -1
- package/dist/src/council/llm.js.map +0 -1
- package/dist/src/council/phase-events.js.map +0 -1
- package/dist/src/council/planner.js.map +0 -1
- package/dist/src/council/preflight.js.map +0 -1
- package/dist/src/council/prompts.js.map +0 -1
- package/dist/src/council/types.js.map +0 -1
- package/dist/src/daemon/scheduler.js.map +0 -1
- package/dist/src/daemon/scheduler.test.js.map +0 -1
- package/dist/src/ee/__tests__/bb-design.test.js.map +0 -1
- package/dist/src/ee/__tests__/pil-context-bridge.test.js.map +0 -1
- package/dist/src/ee/__tests__/pipeline.integration.test.js.map +0 -1
- package/dist/src/ee/__tests__/render-sink-wiring.test.js.map +0 -1
- package/dist/src/ee/auth.js.map +0 -1
- package/dist/src/ee/auth.test.js.map +0 -1
- package/dist/src/ee/bb-design.js.map +0 -1
- package/dist/src/ee/bb-retrieval.js.map +0 -1
- package/dist/src/ee/bridge.js.map +0 -1
- package/dist/src/ee/bridge.test.js.map +0 -1
- package/dist/src/ee/client-mode.js.map +0 -1
- package/dist/src/ee/client.js.map +0 -1
- package/dist/src/ee/client.test.js.map +0 -1
- package/dist/src/ee/council-bridge.js.map +0 -1
- package/dist/src/ee/embedding-cache.js.map +0 -1
- package/dist/src/ee/extract-session.js.map +0 -1
- package/dist/src/ee/extract-session.test.js.map +0 -1
- package/dist/src/ee/health.js.map +0 -1
- package/dist/src/ee/index.js.map +0 -1
- package/dist/src/ee/intercept.js.map +0 -1
- package/dist/src/ee/intercept.test.js.map +0 -1
- package/dist/src/ee/judge.js.map +0 -1
- package/dist/src/ee/judge.test.js.map +0 -1
- package/dist/src/ee/mistake-detector.js.map +0 -1
- package/dist/src/ee/mistake-detector.test.js.map +0 -1
- package/dist/src/ee/offline-queue.js.map +0 -1
- package/dist/src/ee/offline-queue.test.js.map +0 -1
- package/dist/src/ee/phase-outcome.js.map +0 -1
- package/dist/src/ee/phase-outcome.test.js.map +0 -1
- package/dist/src/ee/phase-tracker.js.map +0 -1
- package/dist/src/ee/phase-tracker.test.js.map +0 -1
- package/dist/src/ee/posttool.js.map +0 -1
- package/dist/src/ee/posttool.test.js.map +0 -1
- package/dist/src/ee/prompt-stale.js.map +0 -1
- package/dist/src/ee/prompt-stale.test.js.map +0 -1
- package/dist/src/ee/render.js.map +0 -1
- package/dist/src/ee/render.test.js.map +0 -1
- package/dist/src/ee/scope.js.map +0 -1
- package/dist/src/ee/scope.test.js.map +0 -1
- package/dist/src/ee/session-trajectory.js.map +0 -1
- package/dist/src/ee/session-trajectory.test.js.map +0 -1
- package/dist/src/ee/tenant.js.map +0 -1
- package/dist/src/ee/touch.test.js.map +0 -1
- package/dist/src/ee/types.js.map +0 -1
- package/dist/src/flow/__tests__/migration.test.js.map +0 -1
- package/dist/src/flow/__tests__/parser.test.js.map +0 -1
- package/dist/src/flow/__tests__/run-manager-product.test.js.map +0 -1
- package/dist/src/flow/__tests__/run-manager.test.js.map +0 -1
- package/dist/src/flow/__tests__/scaffold-checkpoint.test.js.map +0 -1
- package/dist/src/flow/__tests__/scaffold.test.js.map +0 -1
- package/dist/src/flow/__tests__/warning-persist.test.js.map +0 -1
- package/dist/src/flow/artifact-io.js.map +0 -1
- package/dist/src/flow/compaction/__tests__/compress.test.js.map +0 -1
- package/dist/src/flow/compaction/__tests__/extract.test.js.map +0 -1
- package/dist/src/flow/compaction/__tests__/preserve.test.js.map +0 -1
- package/dist/src/flow/compaction/compress.js.map +0 -1
- package/dist/src/flow/compaction/extract.js.map +0 -1
- package/dist/src/flow/compaction/index.js.map +0 -1
- package/dist/src/flow/compaction/preserve.js.map +0 -1
- package/dist/src/flow/index.js.map +0 -1
- package/dist/src/flow/migration.js.map +0 -1
- package/dist/src/flow/parser.js.map +0 -1
- package/dist/src/flow/run-manager.js.map +0 -1
- package/dist/src/flow/scaffold-checkpoint.js.map +0 -1
- package/dist/src/flow/scaffold.js.map +0 -1
- package/dist/src/flow/warning-persist.js.map +0 -1
- package/dist/src/generated/version.js.map +0 -1
- package/dist/src/gsd/__tests__/complexity.test.js.map +0 -1
- package/dist/src/gsd/__tests__/directives.test.js.map +0 -1
- package/dist/src/gsd/__tests__/gray-areas.test.js.map +0 -1
- package/dist/src/gsd/__tests__/types.test.js.map +0 -1
- package/dist/src/gsd/complexity.js.map +0 -1
- package/dist/src/gsd/directives.js.map +0 -1
- package/dist/src/gsd/gray-areas.js.map +0 -1
- package/dist/src/gsd/index.js.map +0 -1
- package/dist/src/gsd/types.js.map +0 -1
- package/dist/src/headless/__tests__/council-answers.test.js.map +0 -1
- package/dist/src/headless/council-answers.js.map +0 -1
- package/dist/src/headless/output.js.map +0 -1
- package/dist/src/headless/output.test.js.map +0 -1
- package/dist/src/hooks/config.js.map +0 -1
- package/dist/src/hooks/index.js.map +0 -1
- package/dist/src/hooks/types.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/lsp/builtins.js.map +0 -1
- package/dist/src/lsp/builtins.test.js.map +0 -1
- package/dist/src/lsp/client.js.map +0 -1
- package/dist/src/lsp/manager.js.map +0 -1
- package/dist/src/lsp/manager.test.js.map +0 -1
- package/dist/src/lsp/npm-cache.js.map +0 -1
- package/dist/src/lsp/npm-cache.test.js.map +0 -1
- package/dist/src/lsp/runtime.js.map +0 -1
- package/dist/src/lsp/smoke.test.js.map +0 -1
- package/dist/src/lsp/types.js.map +0 -1
- package/dist/src/mcp/__tests__/auto-setup.test.js.map +0 -1
- package/dist/src/mcp/__tests__/harness-driver-action-tools.spec.js.map +0 -1
- package/dist/src/mcp/__tests__/harness-driver-async-tools.spec.js.map +0 -1
- package/dist/src/mcp/__tests__/harness-driver-read-tools.spec.js.map +0 -1
- package/dist/src/mcp/__tests__/harness-driver-security.spec.js.map +0 -1
- package/dist/src/mcp/__tests__/harness-driver.spec.js.map +0 -1
- package/dist/src/mcp/__tests__/lazy-schema.spec.js.map +0 -1
- package/dist/src/mcp/__tests__/mcp-keychain.test.js.map +0 -1
- package/dist/src/mcp/__tests__/research-onboarding.test.js.map +0 -1
- package/dist/src/mcp/__tests__/runtime-hydration.test.js.map +0 -1
- package/dist/src/mcp/__tests__/runtime-sanitize.test.js.map +0 -1
- package/dist/src/mcp/auto-setup.js.map +0 -1
- package/dist/src/mcp/catalog.js.map +0 -1
- package/dist/src/mcp/mcp-keychain.js.map +0 -1
- package/dist/src/mcp/oauth-callback.js.map +0 -1
- package/dist/src/mcp/oauth-provider.js.map +0 -1
- package/dist/src/mcp/opentui-spawn.js.map +0 -1
- package/dist/src/mcp/parse-headers.js.map +0 -1
- package/dist/src/mcp/parse-headers.test.js.map +0 -1
- package/dist/src/mcp/research-onboarding.js.map +0 -1
- package/dist/src/mcp/runtime.js.map +0 -1
- package/dist/src/mcp/smoke.test.js.map +0 -1
- package/dist/src/mcp/validate.js.map +0 -1
- package/dist/src/models/__tests__/registry.test.js.map +0 -1
- package/dist/src/models/catalog-client.js.map +0 -1
- package/dist/src/models/classify-tier.js.map +0 -1
- package/dist/src/models/index.js.map +0 -1
- package/dist/src/models/registry.js.map +0 -1
- package/dist/src/ops/__tests__/doctor-council-mcp.test.js.map +0 -1
- package/dist/src/ops/__tests__/doctor-ee-health.test.js.map +0 -1
- package/dist/src/ops/bug-report.js.map +0 -1
- package/dist/src/ops/bug-report.test.js.map +0 -1
- package/dist/src/ops/doctor.js.map +0 -1
- package/dist/src/ops/doctor.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/batch-turn-runner.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/council-manager.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/cross-turn-dedup.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/current-call-id.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/flow-resume.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/message-processor.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/message-write-ahead.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/read-path-budget.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/retry-classifier.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/retry-stream.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/route-feedback.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/stream-runner.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/usage-events-shape.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/usage-normalizer-c1.test.js.map +0 -1
- package/dist/src/orchestrator/__tests__/write-ahead.test.js.map +0 -1
- package/dist/src/orchestrator/abort.js.map +0 -1
- package/dist/src/orchestrator/abort.test.js.map +0 -1
- package/dist/src/orchestrator/agent-options.js.map +0 -1
- package/dist/src/orchestrator/agent.test.js.map +0 -1
- package/dist/src/orchestrator/batch-turn-runner.js.map +0 -1
- package/dist/src/orchestrator/batch-utils.js.map +0 -1
- package/dist/src/orchestrator/cleanup.test.js.map +0 -1
- package/dist/src/orchestrator/compaction.js.map +0 -1
- package/dist/src/orchestrator/compaction.test.js.map +0 -1
- package/dist/src/orchestrator/council-manager.js.map +0 -1
- package/dist/src/orchestrator/cross-turn-dedup.js.map +0 -1
- package/dist/src/orchestrator/delegations.js.map +0 -1
- package/dist/src/orchestrator/delegations.test.js.map +0 -1
- package/dist/src/orchestrator/error-utils.js.map +0 -1
- package/dist/src/orchestrator/flow-resume.js.map +0 -1
- package/dist/src/orchestrator/message-processor.js.map +0 -1
- package/dist/src/orchestrator/message-seq.js.map +0 -1
- package/dist/src/orchestrator/message-seq.test.js.map +0 -1
- package/dist/src/orchestrator/orchestrator.js.map +0 -1
- package/dist/src/orchestrator/pending-calls.js.map +0 -1
- package/dist/src/orchestrator/pending-calls.test.js.map +0 -1
- package/dist/src/orchestrator/prompts.js.map +0 -1
- package/dist/src/orchestrator/provider-options-shape.js.map +0 -1
- package/dist/src/orchestrator/provider-options-shape.spec.js.map +0 -1
- package/dist/src/orchestrator/read-path-budget.js.map +0 -1
- package/dist/src/orchestrator/reasoning.js.map +0 -1
- package/dist/src/orchestrator/reasoning.test.js.map +0 -1
- package/dist/src/orchestrator/retry-classifier.js.map +0 -1
- package/dist/src/orchestrator/retry-stream.js.map +0 -1
- package/dist/src/orchestrator/sandbox.test.js.map +0 -1
- package/dist/src/orchestrator/stream-runner.js.map +0 -1
- package/dist/src/orchestrator/sub-agent-cap.js.map +0 -1
- package/dist/src/orchestrator/sub-agent-cap.test.js.map +0 -1
- package/dist/src/orchestrator/subagent-compactor.js.map +0 -1
- package/dist/src/orchestrator/subagent-compactor.spec.js.map +0 -1
- package/dist/src/orchestrator/token-counter.js.map +0 -1
- package/dist/src/orchestrator/token-counter.test.js.map +0 -1
- package/dist/src/orchestrator/tool-utils.js.map +0 -1
- package/dist/src/orchestrator/turn-runner-deps.js.map +0 -1
- package/dist/src/pil/__tests__/budget.test.js.map +0 -1
- package/dist/src/pil/__tests__/config.test.js.map +0 -1
- package/dist/src/pil/__tests__/dual-run.test.js.map +0 -1
- package/dist/src/pil/__tests__/layer1-intent-trace.test.js.map +0 -1
- package/dist/src/pil/__tests__/layer1-intent.test.js.map +0 -1
- package/dist/src/pil/__tests__/layer2-personality.test.js.map +0 -1
- package/dist/src/pil/__tests__/layer3-ee-injection.test.js.map +0 -1
- package/dist/src/pil/__tests__/layer3-injected-chunk.test.js.map +0 -1
- package/dist/src/pil/__tests__/layer4-gsd.test.js.map +0 -1
- package/dist/src/pil/__tests__/layer5-context.test.js.map +0 -1
- package/dist/src/pil/__tests__/layer6-output.test.js.map +0 -1
- package/dist/src/pil/__tests__/ollama-classify.test.js.map +0 -1
- package/dist/src/pil/__tests__/orchestrator-integration.test.js.map +0 -1
- package/dist/src/pil/__tests__/pipeline.test.js.map +0 -1
- package/dist/src/pil/__tests__/renderer-coverage.test.js.map +0 -1
- package/dist/src/pil/__tests__/response-tools.test.js.map +0 -1
- package/dist/src/pil/__tests__/schema.test.js.map +0 -1
- package/dist/src/pil/__tests__/scoreComplexity.test.js.map +0 -1
- package/dist/src/pil/__tests__/scoreSufficiency.test.js.map +0 -1
- package/dist/src/pil/__tests__/store.test.js.map +0 -1
- package/dist/src/pil/__tests__/task-tier-map.test.js.map +0 -1
- package/dist/src/pil/budget-log.js.map +0 -1
- package/dist/src/pil/budget.js.map +0 -1
- package/dist/src/pil/config.js.map +0 -1
- package/dist/src/pil/index.js.map +0 -1
- package/dist/src/pil/layer1-intent.js.map +0 -1
- package/dist/src/pil/layer1-intent.test.js.map +0 -1
- package/dist/src/pil/layer2-personality.js.map +0 -1
- package/dist/src/pil/layer3-ee-injection.js.map +0 -1
- package/dist/src/pil/layer4-gsd.js.map +0 -1
- package/dist/src/pil/layer5-context.js.map +0 -1
- package/dist/src/pil/layer6-output.js.map +0 -1
- package/dist/src/pil/ollama-classify.js.map +0 -1
- package/dist/src/pil/pipeline.js.map +0 -1
- package/dist/src/pil/response-tools.js.map +0 -1
- package/dist/src/pil/schema.js.map +0 -1
- package/dist/src/pil/store.js.map +0 -1
- package/dist/src/pil/task-tier-map.js.map +0 -1
- package/dist/src/pil/timeout.js.map +0 -1
- package/dist/src/pil/types.js.map +0 -1
- package/dist/src/product-loop/__tests__/artifact-io.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/assumption-ledger.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/cb2-retry-bonus.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/circuit-breakers-coverage.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/circuit-breakers.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/complexity-routing.spec.js.map +0 -1
- package/dist/src/product-loop/__tests__/context-policy.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/cost-preview.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/cost-scoper.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/cross-run-memory.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/design-output.spec.js.map +0 -1
- package/dist/src/product-loop/__tests__/discover.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-council-runner.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-detection.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-ecosystem.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-integration.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-interview.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-migrations.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-persistence.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-prompt-parser.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-recommender-ecosystem.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-recommender.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/discovery-schema.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/done-gate-coverage.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/done-gate.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/ee-extract-wiring.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/extract-to-ee.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/feedback-routing.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/hot-path.spec.js.map +0 -1
- package/dist/src/product-loop/__tests__/integration.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/loop-driver-audit.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/loop-driver.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/phase-budget.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/phase-orchestrator-integration.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/phase-plan.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/phase-rituals.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/phase-runner.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/phase-tracker-bridge.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/product-identity.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/reality-anchor.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/repo-audit.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/role-memory.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/role-registry.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/role-routing-ee.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/route-decision-emit.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/seed-questions.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/ship-polish.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/sprint-runner-emit.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/sprint-runner.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/stakeholder-acl.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/state-md-ee-injections.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/sufficiency-routing.spec.js.map +0 -1
- package/dist/src/product-loop/__tests__/typed-artifacts.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/types.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/verify-failure-threshold.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/verify-failure-tracking.test.js.map +0 -1
- package/dist/src/product-loop/__tests__/verify-result.test.js.map +0 -1
- package/dist/src/product-loop/artifact-io.js.map +0 -1
- package/dist/src/product-loop/assumption-ledger.js.map +0 -1
- package/dist/src/product-loop/circuit-breakers.js.map +0 -1
- package/dist/src/product-loop/context-policy.js.map +0 -1
- package/dist/src/product-loop/cost-preview.js.map +0 -1
- package/dist/src/product-loop/cost-scoper.js.map +0 -1
- package/dist/src/product-loop/cross-run-memory.js.map +0 -1
- package/dist/src/product-loop/design-output.js.map +0 -1
- package/dist/src/product-loop/discover.js.map +0 -1
- package/dist/src/product-loop/discovery-context-format.js.map +0 -1
- package/dist/src/product-loop/discovery-council-runner.js.map +0 -1
- package/dist/src/product-loop/discovery-detection.js.map +0 -1
- package/dist/src/product-loop/discovery-ecosystem.js.map +0 -1
- package/dist/src/product-loop/discovery-interview.js.map +0 -1
- package/dist/src/product-loop/discovery-migrations.js.map +0 -1
- package/dist/src/product-loop/discovery-persistence.js.map +0 -1
- package/dist/src/product-loop/discovery-prompt-parser.js.map +0 -1
- package/dist/src/product-loop/discovery-recommender.js.map +0 -1
- package/dist/src/product-loop/discovery-schema.js.map +0 -1
- package/dist/src/product-loop/done-gate.js.map +0 -1
- package/dist/src/product-loop/feedback-routing.js.map +0 -1
- package/dist/src/product-loop/gather.js.map +0 -1
- package/dist/src/product-loop/index.js.map +0 -1
- package/dist/src/product-loop/loop-driver.js.map +0 -1
- package/dist/src/product-loop/phase-budget.js.map +0 -1
- package/dist/src/product-loop/phase-plan.js.map +0 -1
- package/dist/src/product-loop/phase-rituals.js.map +0 -1
- package/dist/src/product-loop/phase-runner.js.map +0 -1
- package/dist/src/product-loop/phase-tracker-bridge.js.map +0 -1
- package/dist/src/product-loop/product-identity.js.map +0 -1
- package/dist/src/product-loop/reality-anchor.js.map +0 -1
- package/dist/src/product-loop/repo-audit.js.map +0 -1
- package/dist/src/product-loop/role-memory.js.map +0 -1
- package/dist/src/product-loop/role-registry.js.map +0 -1
- package/dist/src/product-loop/seed-questions.js.map +0 -1
- package/dist/src/product-loop/ship-polish.js.map +0 -1
- package/dist/src/product-loop/sprint-runner.js.map +0 -1
- package/dist/src/product-loop/stakeholder-acl.js.map +0 -1
- package/dist/src/product-loop/typed-artifacts.js.map +0 -1
- package/dist/src/product-loop/types.js.map +0 -1
- package/dist/src/product-loop/verify-failure-tracking.js.map +0 -1
- package/dist/src/product-loop/verify-result.js.map +0 -1
- package/dist/src/providers/__test-utils__/load-fixture.js.map +0 -1
- package/dist/src/providers/__tests__/adapter-oauth-wiring.test.js.map +0 -1
- package/dist/src/providers/__tests__/capabilities-cosmetic.test.js.map +0 -1
- package/dist/src/providers/__tests__/capabilities-flags.test.js.map +0 -1
- package/dist/src/providers/__tests__/capabilities-provider-options.test.js.map +0 -1
- package/dist/src/providers/__tests__/capabilities-sanitize.test.js.map +0 -1
- package/dist/src/providers/__tests__/capabilities.test.js.map +0 -1
- package/dist/src/providers/__tests__/provider-coverage.test.js.map +0 -1
- package/dist/src/providers/__tests__/runtime-integration.test.js.map +0 -1
- package/dist/src/providers/__tests__/runtime.test.js.map +0 -1
- package/dist/src/providers/__tests__/siliconflow-history.test.js +0 -76
- package/dist/src/providers/__tests__/siliconflow-history.test.js.map +0 -1
- package/dist/src/providers/__tests__/strategies-registry.test.js.map +0 -1
- package/dist/src/providers/__tests__/strategies-resolve.test.js.map +0 -1
- package/dist/src/providers/__tests__/wire-debug.test.js.map +0 -1
- package/dist/src/providers/adapter.js.map +0 -1
- package/dist/src/providers/adapter.test.js.map +0 -1
- package/dist/src/providers/anthropic.js.map +0 -1
- package/dist/src/providers/auth/__tests__/browser-flow.test.js.map +0 -1
- package/dist/src/providers/auth/__tests__/device-flow.test.js.map +0 -1
- package/dist/src/providers/auth/__tests__/gemini-oauth.test.js.map +0 -1
- package/dist/src/providers/auth/__tests__/openai-oauth.test.js.map +0 -1
- package/dist/src/providers/auth/__tests__/token-store.test.js.map +0 -1
- package/dist/src/providers/auth/browser-flow.js.map +0 -1
- package/dist/src/providers/auth/device-flow.js.map +0 -1
- package/dist/src/providers/auth/gemini-oauth.js.map +0 -1
- package/dist/src/providers/auth/openai-oauth.js.map +0 -1
- package/dist/src/providers/auth/registry.js.map +0 -1
- package/dist/src/providers/auth/token-store.js.map +0 -1
- package/dist/src/providers/auth/types.js.map +0 -1
- package/dist/src/providers/capabilities.js.map +0 -1
- package/dist/src/providers/endpoints.js.map +0 -1
- package/dist/src/providers/errors.js.map +0 -1
- package/dist/src/providers/errors.test.js.map +0 -1
- package/dist/src/providers/gemini.js.map +0 -1
- package/dist/src/providers/gemini.test.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/providers/keychain.js.map +0 -1
- package/dist/src/providers/keychain.test.js.map +0 -1
- package/dist/src/providers/mcp-vision-bridge.js.map +0 -1
- package/dist/src/providers/mcp-vision-bridge.test.js.map +0 -1
- package/dist/src/providers/ollama.js.map +0 -1
- package/dist/src/providers/ollama.test.js.map +0 -1
- package/dist/src/providers/openai-compatible.js.map +0 -1
- package/dist/src/providers/openai-compatible.test.js.map +0 -1
- package/dist/src/providers/openai.js.map +0 -1
- package/dist/src/providers/openai.test.js.map +0 -1
- package/dist/src/providers/patch-zod-schema.js.map +0 -1
- package/dist/src/providers/pricing.js.map +0 -1
- package/dist/src/providers/pricing.test.js.map +0 -1
- package/dist/src/providers/prompt-cache-key.spec.js.map +0 -1
- package/dist/src/providers/runtime-mock.spec.js.map +0 -1
- package/dist/src/providers/runtime.js.map +0 -1
- package/dist/src/providers/siliconflow-history.d.ts +0 -50
- package/dist/src/providers/siliconflow-history.js +0 -64
- package/dist/src/providers/siliconflow-history.js.map +0 -1
- package/dist/src/providers/strategies/anthropic.strategy.js.map +0 -1
- package/dist/src/providers/strategies/base.strategy.js.map +0 -1
- package/dist/src/providers/strategies/deepseek.strategy.js.map +0 -1
- package/dist/src/providers/strategies/google.strategy.js.map +0 -1
- package/dist/src/providers/strategies/ollama.strategy.js.map +0 -1
- package/dist/src/providers/strategies/openai.strategy.js.map +0 -1
- package/dist/src/providers/strategies/registry.js.map +0 -1
- package/dist/src/providers/strategies/siliconflow.strategy.js.map +0 -1
- package/dist/src/providers/strategies/xai.strategy.js.map +0 -1
- package/dist/src/providers/stream-loop.js.map +0 -1
- package/dist/src/providers/types.js.map +0 -1
- package/dist/src/providers/vision-proxy.js.map +0 -1
- package/dist/src/providers/vision-proxy.test.js.map +0 -1
- package/dist/src/providers/wire-debug.js.map +0 -1
- package/dist/src/router/__tests__/step-router.test.js.map +0 -1
- package/dist/src/router/classifier/grammars.js.map +0 -1
- package/dist/src/router/classifier/index.js.map +0 -1
- package/dist/src/router/classifier/index.test.js.map +0 -1
- package/dist/src/router/classifier/regex.js.map +0 -1
- package/dist/src/router/classifier/regex.test.js.map +0 -1
- package/dist/src/router/classifier/tree-sitter.js.map +0 -1
- package/dist/src/router/classifier/tree-sitter.test.js.map +0 -1
- package/dist/src/router/cold.js.map +0 -1
- package/dist/src/router/cold.test.js.map +0 -1
- package/dist/src/router/decide.js.map +0 -1
- package/dist/src/router/decide.test.js.map +0 -1
- package/dist/src/router/health.js.map +0 -1
- package/dist/src/router/health.test.js.map +0 -1
- package/dist/src/router/provider-sentinel.js.map +0 -1
- package/dist/src/router/provider-sentinel.test.js.map +0 -1
- package/dist/src/router/step-router.js.map +0 -1
- package/dist/src/router/store.js.map +0 -1
- package/dist/src/router/types.js.map +0 -1
- package/dist/src/router/warm.js.map +0 -1
- package/dist/src/router/warm.test.js.map +0 -1
- package/dist/src/scaffold/__tests__/continuation-prompt.test.js.map +0 -1
- package/dist/src/scaffold/__tests__/continue-as-council.spec.js.map +0 -1
- package/dist/src/scaffold/__tests__/dotnet-assembly-name.test.js.map +0 -1
- package/dist/src/scaffold/__tests__/fe-scaffold-contents.test.js.map +0 -1
- package/dist/src/scaffold/__tests__/init-new.smoke.spec.js.map +0 -1
- package/dist/src/scaffold/__tests__/init-new.spec.js.map +0 -1
- package/dist/src/scaffold/__tests__/install-bb-templates.spec.js.map +0 -1
- package/dist/src/scaffold/__tests__/point-to-existing.spec.js.map +0 -1
- package/dist/src/scaffold/bb-ecosystem-apply.js.map +0 -1
- package/dist/src/scaffold/bb-quality-gate.js.map +0 -1
- package/dist/src/scaffold/continuation-prompt.js.map +0 -1
- package/dist/src/scaffold/continue-as-council.js.map +0 -1
- package/dist/src/scaffold/init-new.js.map +0 -1
- package/dist/src/scaffold/point-to-existing.js.map +0 -1
- package/dist/src/scaffold/resume-from-gate-failures.js.map +0 -1
- package/dist/src/storage/__tests__/migrations.test.js.map +0 -1
- package/dist/src/storage/__tests__/ui-interaction-log.test.js.map +0 -1
- package/dist/src/storage/atomic-io.js.map +0 -1
- package/dist/src/storage/atomic-io.test.js.map +0 -1
- package/dist/src/storage/config.js.map +0 -1
- package/dist/src/storage/config.test.js.map +0 -1
- package/dist/src/storage/db.js.map +0 -1
- package/dist/src/storage/index.js.map +0 -1
- package/dist/src/storage/interaction-log.js.map +0 -1
- package/dist/src/storage/migrations.js.map +0 -1
- package/dist/src/storage/session-dir.js.map +0 -1
- package/dist/src/storage/sessions.js.map +0 -1
- package/dist/src/storage/tool-results.js.map +0 -1
- package/dist/src/storage/transcript-view.js.map +0 -1
- package/dist/src/storage/transcript.js.map +0 -1
- package/dist/src/storage/transcript.test.js.map +0 -1
- package/dist/src/storage/ui-interaction-log.js.map +0 -1
- package/dist/src/storage/usage-cap.js.map +0 -1
- package/dist/src/storage/usage-cap.test.js.map +0 -1
- package/dist/src/storage/usage.js.map +0 -1
- package/dist/src/storage/workspaces.js.map +0 -1
- package/dist/src/tools/bash.js.map +0 -1
- package/dist/src/tools/bash.test.js.map +0 -1
- package/dist/src/tools/computer.js.map +0 -1
- package/dist/src/tools/computer.test.js.map +0 -1
- package/dist/src/tools/file-tracker.js.map +0 -1
- package/dist/src/tools/file-tracker.test.js.map +0 -1
- package/dist/src/tools/file.js.map +0 -1
- package/dist/src/tools/file.test.js.map +0 -1
- package/dist/src/tools/grep.js.map +0 -1
- package/dist/src/tools/registry.js.map +0 -1
- package/dist/src/tools/registry.test.js.map +0 -1
- package/dist/src/tools/schedule.js.map +0 -1
- package/dist/src/tools/schedule.test.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/ui/agents-modal.js.map +0 -1
- package/dist/src/ui/app.js.map +0 -1
- package/dist/src/ui/cards/__tests__/product-status-card.test.js.map +0 -1
- package/dist/src/ui/cards/product-status-card.js.map +0 -1
- package/dist/src/ui/components/SuggestionOverlay.js.map +0 -1
- package/dist/src/ui/components/Toast.js.map +0 -1
- package/dist/src/ui/components/__tests__/council-leader-bubble.test.js.map +0 -1
- package/dist/src/ui/components/__tests__/council-message-bubble.test.js.map +0 -1
- package/dist/src/ui/components/__tests__/council-phase-timeline.test.js.map +0 -1
- package/dist/src/ui/components/__tests__/council-placeholder-bubble.test.js.map +0 -1
- package/dist/src/ui/components/__tests__/council-question-card.test.js.map +0 -1
- package/dist/src/ui/components/__tests__/council-synthesis-banner.test.js.map +0 -1
- package/dist/src/ui/components/__tests__/use-pair-quote-buffer.test.js.map +0 -1
- package/dist/src/ui/components/btw-overlay.js.map +0 -1
- package/dist/src/ui/components/bubble-layout.js.map +0 -1
- package/dist/src/ui/components/code-block-truncate.js.map +0 -1
- package/dist/src/ui/components/copy-flash-banner.js.map +0 -1
- package/dist/src/ui/components/council-info-card.js.map +0 -1
- package/dist/src/ui/components/council-leader-bubble.js.map +0 -1
- package/dist/src/ui/components/council-message-bubble.js.map +0 -1
- package/dist/src/ui/components/council-phase-timeline.js.map +0 -1
- package/dist/src/ui/components/council-placeholder-bubble.js.map +0 -1
- package/dist/src/ui/components/council-question-card.js.map +0 -1
- package/dist/src/ui/components/council-status-list.js.map +0 -1
- package/dist/src/ui/components/council-synthesis-banner.js.map +0 -1
- package/dist/src/ui/components/diff-view.js.map +0 -1
- package/dist/src/ui/components/halt-recovery-card.js.map +0 -1
- package/dist/src/ui/components/hero-logo.js.map +0 -1
- package/dist/src/ui/components/init-new-form-card.js.map +0 -1
- package/dist/src/ui/components/lsp-views.js.map +0 -1
- package/dist/src/ui/components/media-views.js.map +0 -1
- package/dist/src/ui/components/message-view.js.map +0 -1
- package/dist/src/ui/components/point-to-existing-form-card.js.map +0 -1
- package/dist/src/ui/components/prompt-box.js.map +0 -1
- package/dist/src/ui/components/role-palette.js.map +0 -1
- package/dist/src/ui/components/session-header.js.map +0 -1
- package/dist/src/ui/components/slash-inline-menu.js.map +0 -1
- package/dist/src/ui/components/structured-response-view.js.map +0 -1
- package/dist/src/ui/components/tool-result-views.js.map +0 -1
- package/dist/src/ui/components/use-pair-quote-buffer.js.map +0 -1
- package/dist/src/ui/constants.js.map +0 -1
- package/dist/src/ui/hooks/use-agent-editor.js.map +0 -1
- package/dist/src/ui/hooks/use-mcp-editor.js.map +0 -1
- package/dist/src/ui/hooks/use-model-picker.js.map +0 -1
- package/dist/src/ui/hooks/useTypeahead.js.map +0 -1
- package/dist/src/ui/markdown.js.map +0 -1
- package/dist/src/ui/mcp-modal-types.js.map +0 -1
- package/dist/src/ui/mcp-modal.js.map +0 -1
- package/dist/src/ui/modals/api-key-modal.js.map +0 -1
- package/dist/src/ui/modals/connect-modal.js.map +0 -1
- package/dist/src/ui/modals/model-picker-modal.js.map +0 -1
- package/dist/src/ui/modals/sandbox-picker-modal.js.map +0 -1
- package/dist/src/ui/modals/update-modal.js.map +0 -1
- package/dist/src/ui/modals/wallet-picker-modal.js.map +0 -1
- package/dist/src/ui/plan.js.map +0 -1
- package/dist/src/ui/schedule-modal.js.map +0 -1
- package/dist/src/ui/slash/__tests__/clear.test.js.map +0 -1
- package/dist/src/ui/slash/__tests__/compact.test.js.map +0 -1
- package/dist/src/ui/slash/__tests__/cost.test.js.map +0 -1
- package/dist/src/ui/slash/__tests__/discuss.test.js.map +0 -1
- package/dist/src/ui/slash/__tests__/execute.test.js.map +0 -1
- package/dist/src/ui/slash/__tests__/expand.test.js.map +0 -1
- package/dist/src/ui/slash/__tests__/ideal.test.js.map +0 -1
- package/dist/src/ui/slash/__tests__/menu-parity.test.js.map +0 -1
- package/dist/src/ui/slash/__tests__/optimize.test.js.map +0 -1
- package/dist/src/ui/slash/__tests__/pin.test.js.map +0 -1
- package/dist/src/ui/slash/__tests__/plan.test.js.map +0 -1
- package/dist/src/ui/slash/clear.js.map +0 -1
- package/dist/src/ui/slash/compact.js.map +0 -1
- package/dist/src/ui/slash/cost.js.map +0 -1
- package/dist/src/ui/slash/council-inspect.js.map +0 -1
- package/dist/src/ui/slash/council.js.map +0 -1
- package/dist/src/ui/slash/debug.js.map +0 -1
- package/dist/src/ui/slash/discuss.js.map +0 -1
- package/dist/src/ui/slash/ee.js.map +0 -1
- package/dist/src/ui/slash/execute.js.map +0 -1
- package/dist/src/ui/slash/expand.js.map +0 -1
- package/dist/src/ui/slash/export.js.map +0 -1
- package/dist/src/ui/slash/ideal.js.map +0 -1
- package/dist/src/ui/slash/menu-items.js.map +0 -1
- package/dist/src/ui/slash/optimize.js.map +0 -1
- package/dist/src/ui/slash/pin.js.map +0 -1
- package/dist/src/ui/slash/plan.js.map +0 -1
- package/dist/src/ui/slash/registry.js.map +0 -1
- package/dist/src/ui/slash/route.js.map +0 -1
- package/dist/src/ui/slash/route.test.js.map +0 -1
- package/dist/src/ui/status-bar/index.js.map +0 -1
- package/dist/src/ui/status-bar/index.test.js.map +0 -1
- package/dist/src/ui/status-bar/store.js.map +0 -1
- package/dist/src/ui/status-bar/store.test.js.map +0 -1
- package/dist/src/ui/status-bar/tier-badge.js.map +0 -1
- package/dist/src/ui/status-bar/tier-badge.test.js.map +0 -1
- package/dist/src/ui/status-bar/usd-meter.js.map +0 -1
- package/dist/src/ui/status-bar/usd-meter.test.js.map +0 -1
- package/dist/src/ui/syntax-highlight.js.map +0 -1
- package/dist/src/ui/terminal-selection-text.js.map +0 -1
- package/dist/src/ui/theme.js.map +0 -1
- package/dist/src/ui/types.js.map +0 -1
- package/dist/src/ui/utils/color.js.map +0 -1
- package/dist/src/ui/utils/format.js.map +0 -1
- package/dist/src/ui/utils/modal.js.map +0 -1
- package/dist/src/ui/utils/text.js.map +0 -1
- package/dist/src/ui/utils/tools.js.map +0 -1
- package/dist/src/usage/__tests__/product-ledger.test.js.map +0 -1
- package/dist/src/usage/cost-log.js.map +0 -1
- package/dist/src/usage/decision-log.js.map +0 -1
- package/dist/src/usage/downgrade.js.map +0 -1
- package/dist/src/usage/downgrade.test.js.map +0 -1
- package/dist/src/usage/estimator.js.map +0 -1
- package/dist/src/usage/estimator.test.js.map +0 -1
- package/dist/src/usage/ledger.js.map +0 -1
- package/dist/src/usage/ledger.test.js.map +0 -1
- package/dist/src/usage/midstream.js.map +0 -1
- package/dist/src/usage/midstream.test.js.map +0 -1
- package/dist/src/usage/product-ledger.js.map +0 -1
- package/dist/src/usage/thresholds.js.map +0 -1
- package/dist/src/usage/thresholds.test.js.map +0 -1
- package/dist/src/usage/types.js.map +0 -1
- package/dist/src/utils/__tests__/auto-council-settings.test.js.map +0 -1
- package/dist/src/utils/__tests__/ee-logger.test.js.map +0 -1
- package/dist/src/utils/__tests__/file-lock.test.js.map +0 -1
- package/dist/src/utils/__tests__/rate-limit.test.js.map +0 -1
- package/dist/src/utils/__tests__/settings-disabled-models.test.js.map +0 -1
- package/dist/src/utils/__tests__/settings-web-research.test.js.map +0 -1
- package/dist/src/utils/__tests__/slugify.test.js.map +0 -1
- package/dist/src/utils/__tests__/visible-retry.test.js.map +0 -1
- package/dist/src/utils/at-mentions.js.map +0 -1
- package/dist/src/utils/clipboard-image.js.map +0 -1
- package/dist/src/utils/ee-logger.js.map +0 -1
- package/dist/src/utils/file-index.js.map +0 -1
- package/dist/src/utils/file-lock.js.map +0 -1
- package/dist/src/utils/git-root.js.map +0 -1
- package/dist/src/utils/host-clipboard.js.map +0 -1
- package/dist/src/utils/install-manager.js.map +0 -1
- package/dist/src/utils/install-manager.test.js.map +0 -1
- package/dist/src/utils/instructions.js.map +0 -1
- package/dist/src/utils/instructions.test.js.map +0 -1
- package/dist/src/utils/permission-mode.js.map +0 -1
- package/dist/src/utils/permission-mode.test.js.map +0 -1
- package/dist/src/utils/rate-limit.js.map +0 -1
- package/dist/src/utils/redactor.js.map +0 -1
- package/dist/src/utils/redactor.test.js.map +0 -1
- package/dist/src/utils/settings.js.map +0 -1
- package/dist/src/utils/settings.test.js.map +0 -1
- package/dist/src/utils/shell.js.map +0 -1
- package/dist/src/utils/shell.test.js.map +0 -1
- package/dist/src/utils/side-question.js.map +0 -1
- package/dist/src/utils/skills.js.map +0 -1
- package/dist/src/utils/skills.test.js.map +0 -1
- package/dist/src/utils/slugify.js.map +0 -1
- package/dist/src/utils/subagent-display.js.map +0 -1
- package/dist/src/utils/subagent-display.test.js.map +0 -1
- package/dist/src/utils/subagents-settings.test.js.map +0 -1
- package/dist/src/utils/telegram-audio-settings.test.js.map +0 -1
- package/dist/src/utils/update-checker.js.map +0 -1
- package/dist/src/utils/update-checker.test.js.map +0 -1
- package/dist/src/utils/visible-retry.js.map +0 -1
- package/dist/src/verify/__tests__/coverage-parsers.test.js.map +0 -1
- package/dist/src/verify/__tests__/dotnet-recipe.test.js.map +0 -1
- package/dist/src/verify/checkpoint.js.map +0 -1
- package/dist/src/verify/checkpoint.test.js.map +0 -1
- package/dist/src/verify/coverage-parsers.js.map +0 -1
- package/dist/src/verify/entrypoint.js.map +0 -1
- package/dist/src/verify/entrypoint.test.js.map +0 -1
- package/dist/src/verify/environment.js.map +0 -1
- package/dist/src/verify/environment.test.js.map +0 -1
- package/dist/src/verify/evidence.js.map +0 -1
- package/dist/src/verify/orchestrator.js.map +0 -1
- package/dist/src/verify/orchestrator.test.js.map +0 -1
- package/dist/src/verify/recipes.js.map +0 -1
- package/dist/src/verify/retry.js.map +0 -1
- package/dist/src/verify/runtime-prep.test.js.map +0 -1
- package/src/__test-stubs__/ee-server.ts +0 -173
- package/src/__test-stubs__/vitest-setup.ts +0 -36
- package/src/__tests__/council/bubble-layout.test.ts +0 -45
- package/src/__tests__/council/code-block-truncate.test.ts +0 -50
- package/src/__tests__/council/role-palette.test.ts +0 -66
- package/src/__tests__/first-run-wizard.test.ts +0 -9
- package/src/agent-harness/__tests__/cli-flags.spec.ts +0 -35
- package/src/agent-harness/__tests__/driver.spec.ts +0 -154
- package/src/agent-harness/__tests__/idle.spec.ts +0 -90
- package/src/agent-harness/__tests__/mock-llm.spec.ts +0 -126
- package/src/agent-harness/__tests__/mock-model.spec.ts +0 -195
- package/src/agent-harness/__tests__/predicate.spec.ts +0 -33
- package/src/agent-harness/__tests__/protocol.spec.ts +0 -62
- package/src/agent-harness/__tests__/schema.spec.ts +0 -81
- package/src/agent-harness/__tests__/selector.spec.ts +0 -82
- package/src/agent-harness/__tests__/sidechannel.spec.ts +0 -40
- package/src/agent-harness/__tests__/spec-helpers.spec.ts +0 -76
- package/src/agent-harness/index.ts +0 -24
- package/src/agent-harness/mock-model.ts +0 -394
- package/src/agent-harness/test-spawn.ts +0 -200
- package/src/billing/index.ts +0 -5
- package/src/bun-sqlite.d.ts +0 -15
- package/src/chat/__tests__/broadcast-bus.test.ts +0 -90
- package/src/chat/__tests__/channel-manager.test.ts +0 -149
- package/src/chat/__tests__/client.test.ts +0 -118
- package/src/chat/__tests__/discord-integration.test.ts +0 -162
- package/src/chat/__tests__/intent-prompt.test.ts +0 -92
- package/src/chat/__tests__/verdict-resolver.test.ts +0 -336
- package/src/chat/broadcast-bus.ts +0 -53
- package/src/chat/channel-manager.ts +0 -146
- package/src/chat/chat-keychain.ts +0 -129
- package/src/chat/factory.ts +0 -37
- package/src/chat/intent-prompt.ts +0 -72
- package/src/chat/providers/discord/client.ts +0 -91
- package/src/chat/types.ts +0 -42
- package/src/chat/verdict-constants.ts +0 -26
- package/src/chat/verdict-resolver.ts +0 -231
- package/src/cli/__tests__/bw-vault.test.ts +0 -97
- package/src/cli/__tests__/keys-bundle.test.ts +0 -46
- package/src/cli/__tests__/share-cmd.test.ts +0 -197
- package/src/cli/bw-vault.ts +0 -184
- package/src/cli/config/__tests__/model-picker.test.ts +0 -59
- package/src/cli/config/__tests__/provider-fetch.test.ts +0 -38
- package/src/cli/config/index.ts +0 -112
- package/src/cli/config/model-picker.ts +0 -193
- package/src/cli/config/provider-fetch.ts +0 -75
- package/src/cli/config/screen-council.ts +0 -245
- package/src/cli/config/screen-models.ts +0 -104
- package/src/cli/config/screen-providers.ts +0 -197
- package/src/cli/config/tui.ts +0 -153
- package/src/cli/cost-forensics.test.ts +0 -128
- package/src/cli/cost-forensics.ts +0 -264
- package/src/cli/keys-bundle.ts +0 -91
- package/src/cli/keys.test.ts +0 -104
- package/src/cli/keys.ts +0 -787
- package/src/cli/pil-report.ts +0 -202
- package/src/cli/share-cmd.ts +0 -132
- package/src/cli/usage-report.ts +0 -266
- package/src/cloud/index.ts +0 -5
- package/src/council/__tests__/accounting.test.ts +0 -72
- package/src/council/__tests__/audit-replay.test.ts +0 -344
- package/src/council/__tests__/clarifier-max-rounds.test.ts +0 -91
- package/src/council/__tests__/clarifier-options.test.ts +0 -63
- package/src/council/__tests__/cost-aware.test.ts +0 -60
- package/src/council/__tests__/debate-planner-structured.test.ts +0 -236
- package/src/council/__tests__/evaluator-metrics.test.ts +0 -513
- package/src/council/__tests__/parse-outcome-fallback.test.ts +0 -125
- package/src/council/__tests__/research-tools.test.ts +0 -239
- package/src/council/__tests__/round-tools.test.ts +0 -334
- package/src/council/__tests__/tool-trace.test.ts +0 -152
- package/src/council/__tests__/types-contract.test.ts +0 -88
- package/src/council/clarifier.ts +0 -409
- package/src/council/context.ts +0 -250
- package/src/council/debate-planner.ts +0 -264
- package/src/council/debate.ts +0 -1179
- package/src/council/executor.ts +0 -27
- package/src/council/index.ts +0 -916
- package/src/council/leader.ts +0 -262
- package/src/council/llm.ts +0 -967
- package/src/council/phase-events.ts +0 -58
- package/src/council/planner.ts +0 -303
- package/src/council/preflight.ts +0 -86
- package/src/council/prompts.ts +0 -600
- package/src/council/types.ts +0 -286
- package/src/daemon/scheduler.test.ts +0 -128
- package/src/daemon/scheduler.ts +0 -152
- package/src/ee/.gitkeep +0 -0
- package/src/ee/__tests__/bb-design.test.ts +0 -223
- package/src/ee/__tests__/pil-context-bridge.test.ts +0 -59
- package/src/ee/__tests__/pipeline.integration.test.ts +0 -193
- package/src/ee/__tests__/render-sink-wiring.test.ts +0 -89
- package/src/ee/auth.test.ts +0 -76
- package/src/ee/auth.ts +0 -80
- package/src/ee/bb-design.ts +0 -284
- package/src/ee/bb-retrieval.ts +0 -467
- package/src/ee/bridge.test.ts +0 -283
- package/src/ee/bridge.ts +0 -443
- package/src/ee/client-mode.ts +0 -161
- package/src/ee/client.test.ts +0 -171
- package/src/ee/client.ts +0 -620
- package/src/ee/council-bridge.ts +0 -89
- package/src/ee/embedding-cache.ts +0 -42
- package/src/ee/extract-session.test.ts +0 -231
- package/src/ee/extract-session.ts +0 -71
- package/src/ee/health.ts +0 -83
- package/src/ee/index.ts +0 -33
- package/src/ee/intercept.test.ts +0 -197
- package/src/ee/intercept.ts +0 -143
- package/src/ee/judge.test.ts +0 -213
- package/src/ee/judge.ts +0 -126
- package/src/ee/mistake-detector.test.ts +0 -252
- package/src/ee/mistake-detector.ts +0 -297
- package/src/ee/offline-queue.test.ts +0 -302
- package/src/ee/offline-queue.ts +0 -205
- package/src/ee/phase-outcome.test.ts +0 -107
- package/src/ee/phase-outcome.ts +0 -165
- package/src/ee/phase-tracker.test.ts +0 -175
- package/src/ee/phase-tracker.ts +0 -180
- package/src/ee/posttool.test.ts +0 -81
- package/src/ee/posttool.ts +0 -16
- package/src/ee/prompt-stale.test.ts +0 -92
- package/src/ee/prompt-stale.ts +0 -39
- package/src/ee/render.test.ts +0 -74
- package/src/ee/render.ts +0 -68
- package/src/ee/scope.test.ts +0 -112
- package/src/ee/scope.ts +0 -93
- package/src/ee/session-trajectory.test.ts +0 -139
- package/src/ee/session-trajectory.ts +0 -226
- package/src/ee/tenant.ts +0 -14
- package/src/ee/touch.test.ts +0 -73
- package/src/ee/types.ts +0 -387
- package/src/flow/.gitkeep +0 -0
- package/src/flow/__tests__/migration.test.ts +0 -133
- package/src/flow/__tests__/parser.test.ts +0 -77
- package/src/flow/__tests__/run-manager-product.test.ts +0 -59
- package/src/flow/__tests__/run-manager.test.ts +0 -95
- package/src/flow/__tests__/scaffold-checkpoint.test.ts +0 -113
- package/src/flow/__tests__/scaffold.test.ts +0 -57
- package/src/flow/__tests__/warning-persist.test.ts +0 -112
- package/src/flow/artifact-io.ts +0 -41
- package/src/flow/compaction/__tests__/compress.test.ts +0 -69
- package/src/flow/compaction/__tests__/extract.test.ts +0 -74
- package/src/flow/compaction/__tests__/preserve.test.ts +0 -69
- package/src/flow/compaction/compress.ts +0 -67
- package/src/flow/compaction/extract.ts +0 -60
- package/src/flow/compaction/index.ts +0 -86
- package/src/flow/compaction/preserve.ts +0 -48
- package/src/flow/index.ts +0 -18
- package/src/flow/migration.ts +0 -139
- package/src/flow/parser.ts +0 -78
- package/src/flow/run-manager.ts +0 -162
- package/src/flow/scaffold-checkpoint.ts +0 -132
- package/src/flow/scaffold.ts +0 -52
- package/src/flow/warning-persist.ts +0 -84
- package/src/generated/version.ts +0 -4
- package/src/gsd/.gitkeep +0 -0
- package/src/gsd/__tests__/complexity.test.ts +0 -0
- package/src/gsd/__tests__/directives.test.ts +0 -49
- package/src/gsd/__tests__/gray-areas.test.ts +0 -33
- package/src/gsd/__tests__/types.test.ts +0 -77
- package/src/gsd/complexity.ts +0 -124
- package/src/gsd/directives.ts +0 -94
- package/src/gsd/gray-areas.ts +0 -144
- package/src/gsd/index.ts +0 -1
- package/src/gsd/types.ts +0 -49
- package/src/headless/__tests__/council-answers.test.ts +0 -266
- package/src/headless/council-answers.ts +0 -130
- package/src/headless/output.test.ts +0 -201
- package/src/headless/output.ts +0 -312
- package/src/hooks/config.ts +0 -41
- package/src/hooks/index.ts +0 -547
- package/src/hooks/types.ts +0 -263
- package/src/index.ts +0 -1570
- package/src/lsp/builtins.test.ts +0 -104
- package/src/lsp/builtins.ts +0 -409
- package/src/lsp/client.ts +0 -342
- package/src/lsp/manager.test.ts +0 -164
- package/src/lsp/manager.ts +0 -293
- package/src/lsp/npm-cache.test.ts +0 -68
- package/src/lsp/npm-cache.ts +0 -108
- package/src/lsp/runtime.ts +0 -70
- package/src/lsp/smoke.test.ts +0 -74
- package/src/lsp/types.ts +0 -116
- package/src/mcp/__tests__/auto-setup.test.ts +0 -88
- package/src/mcp/__tests__/harness-driver-action-tools.spec.ts +0 -114
- package/src/mcp/__tests__/harness-driver-async-tools.spec.ts +0 -127
- package/src/mcp/__tests__/harness-driver-read-tools.spec.ts +0 -140
- package/src/mcp/__tests__/harness-driver-security.spec.ts +0 -71
- package/src/mcp/__tests__/harness-driver.spec.ts +0 -21
- package/src/mcp/__tests__/lazy-schema.spec.ts +0 -173
- package/src/mcp/__tests__/mcp-keychain.test.ts +0 -46
- package/src/mcp/__tests__/research-onboarding.test.ts +0 -163
- package/src/mcp/__tests__/runtime-hydration.test.ts +0 -86
- package/src/mcp/__tests__/runtime-sanitize.test.ts +0 -44
- package/src/mcp/auto-setup.ts +0 -99
- package/src/mcp/catalog.ts +0 -155
- package/src/mcp/mcp-keychain.ts +0 -77
- package/src/mcp/oauth-callback.ts +0 -75
- package/src/mcp/oauth-provider.ts +0 -128
- package/src/mcp/opentui-spawn.ts +0 -64
- package/src/mcp/parse-headers.test.ts +0 -54
- package/src/mcp/parse-headers.ts +0 -35
- package/src/mcp/research-onboarding.ts +0 -143
- package/src/mcp/runtime.ts +0 -171
- package/src/mcp/smoke.test.ts +0 -170
- package/src/mcp/validate.ts +0 -48
- package/src/models/__tests__/registry.test.ts +0 -95
- package/src/models/catalog-client.ts +0 -140
- package/src/models/catalog.README.md +0 -136
- package/src/models/catalog.json +0 -177
- package/src/models/classify-tier.ts +0 -48
- package/src/models/index.ts +0 -9
- package/src/models/registry.ts +0 -77
- package/src/ops/__tests__/doctor-council-mcp.test.ts +0 -161
- package/src/ops/__tests__/doctor-ee-health.test.ts +0 -129
- package/src/ops/bug-report.test.ts +0 -172
- package/src/ops/bug-report.ts +0 -80
- package/src/ops/doctor.test.ts +0 -108
- package/src/ops/doctor.ts +0 -366
- package/src/orchestrator/__tests__/batch-turn-runner.test.ts +0 -178
- package/src/orchestrator/__tests__/council-manager.test.ts +0 -171
- package/src/orchestrator/__tests__/cross-turn-dedup.test.ts +0 -174
- package/src/orchestrator/__tests__/current-call-id.test.ts +0 -160
- package/src/orchestrator/__tests__/flow-resume.test.ts +0 -71
- package/src/orchestrator/__tests__/message-processor.test.ts +0 -196
- package/src/orchestrator/__tests__/message-write-ahead.test.ts +0 -170
- package/src/orchestrator/__tests__/read-path-budget.test.ts +0 -107
- package/src/orchestrator/__tests__/retry-classifier.test.ts +0 -120
- package/src/orchestrator/__tests__/retry-stream.test.ts +0 -186
- package/src/orchestrator/__tests__/route-feedback.test.ts +0 -55
- package/src/orchestrator/__tests__/stream-runner.test.ts +0 -123
- package/src/orchestrator/__tests__/usage-events-shape.test.ts +0 -80
- package/src/orchestrator/__tests__/usage-normalizer-c1.test.ts +0 -172
- package/src/orchestrator/__tests__/write-ahead.test.ts +0 -162
- package/src/orchestrator/abort.test.ts +0 -37
- package/src/orchestrator/abort.ts +0 -51
- package/src/orchestrator/agent-options.ts +0 -168
- package/src/orchestrator/agent.test.ts +0 -184
- package/src/orchestrator/batch-turn-runner.ts +0 -425
- package/src/orchestrator/batch-utils.ts +0 -340
- package/src/orchestrator/cleanup.test.ts +0 -86
- package/src/orchestrator/compaction.test.ts +0 -181
- package/src/orchestrator/compaction.ts +0 -613
- package/src/orchestrator/council-manager.ts +0 -580
- package/src/orchestrator/cross-turn-dedup.ts +0 -187
- package/src/orchestrator/delegations.test.ts +0 -145
- package/src/orchestrator/delegations.ts +0 -364
- package/src/orchestrator/error-utils.ts +0 -72
- package/src/orchestrator/flow-resume.ts +0 -54
- package/src/orchestrator/message-processor.ts +0 -1985
- package/src/orchestrator/message-seq.test.ts +0 -29
- package/src/orchestrator/message-seq.ts +0 -19
- package/src/orchestrator/orchestrator.ts +0 -2641
- package/src/orchestrator/pending-calls.test.ts +0 -226
- package/src/orchestrator/pending-calls.ts +0 -240
- package/src/orchestrator/prompts.ts +0 -482
- package/src/orchestrator/provider-options-shape.spec.ts +0 -67
- package/src/orchestrator/provider-options-shape.ts +0 -70
- package/src/orchestrator/read-path-budget.ts +0 -128
- package/src/orchestrator/reasoning.test.ts +0 -29
- package/src/orchestrator/reasoning.ts +0 -69
- package/src/orchestrator/retry-classifier.ts +0 -131
- package/src/orchestrator/retry-stream.ts +0 -159
- package/src/orchestrator/sandbox.test.ts +0 -115
- package/src/orchestrator/stream-runner.ts +0 -729
- package/src/orchestrator/sub-agent-cap.test.ts +0 -186
- package/src/orchestrator/sub-agent-cap.ts +0 -218
- package/src/orchestrator/subagent-compactor.spec.ts +0 -144
- package/src/orchestrator/subagent-compactor.ts +0 -242
- package/src/orchestrator/token-counter.test.ts +0 -69
- package/src/orchestrator/token-counter.ts +0 -81
- package/src/orchestrator/tool-utils.ts +0 -214
- package/src/orchestrator/turn-runner-deps.ts +0 -83
- package/src/pil/__tests__/budget.test.ts +0 -39
- package/src/pil/__tests__/config.test.ts +0 -32
- package/src/pil/__tests__/dual-run.test.ts +0 -53
- package/src/pil/__tests__/layer1-intent-trace.test.ts +0 -140
- package/src/pil/__tests__/layer1-intent.test.ts +0 -346
- package/src/pil/__tests__/layer2-personality.test.ts +0 -63
- package/src/pil/__tests__/layer3-ee-injection.test.ts +0 -181
- package/src/pil/__tests__/layer3-injected-chunk.test.ts +0 -122
- package/src/pil/__tests__/layer4-gsd.test.ts +0 -109
- package/src/pil/__tests__/layer5-context.test.ts +0 -157
- package/src/pil/__tests__/layer6-output.test.ts +0 -284
- package/src/pil/__tests__/ollama-classify.test.ts +0 -81
- package/src/pil/__tests__/orchestrator-integration.test.ts +0 -107
- package/src/pil/__tests__/pipeline.test.ts +0 -190
- package/src/pil/__tests__/renderer-coverage.test.ts +0 -46
- package/src/pil/__tests__/response-tools.test.ts +0 -174
- package/src/pil/__tests__/schema.test.ts +0 -233
- package/src/pil/__tests__/scoreComplexity.test.ts +0 -134
- package/src/pil/__tests__/scoreSufficiency.test.ts +0 -104
- package/src/pil/__tests__/store.test.ts +0 -49
- package/src/pil/__tests__/task-tier-map.test.ts +0 -41
- package/src/pil/budget-log.ts +0 -86
- package/src/pil/budget.ts +0 -18
- package/src/pil/config.ts +0 -11
- package/src/pil/index.ts +0 -12
- package/src/pil/layer1-intent.test.ts +0 -127
- package/src/pil/layer1-intent.ts +0 -580
- package/src/pil/layer2-personality.ts +0 -46
- package/src/pil/layer3-ee-injection.ts +0 -345
- package/src/pil/layer4-gsd.ts +0 -118
- package/src/pil/layer5-context.ts +0 -160
- package/src/pil/layer6-output.ts +0 -260
- package/src/pil/ollama-classify.ts +0 -49
- package/src/pil/pipeline.ts +0 -207
- package/src/pil/response-tools.ts +0 -110
- package/src/pil/schema.ts +0 -103
- package/src/pil/store.ts +0 -29
- package/src/pil/task-tier-map.ts +0 -90
- package/src/pil/timeout.ts +0 -10
- package/src/pil/types.ts +0 -150
- package/src/product-loop/__tests__/artifact-io.test.ts +0 -97
- package/src/product-loop/__tests__/assumption-ledger.test.ts +0 -292
- package/src/product-loop/__tests__/cb2-retry-bonus.test.ts +0 -182
- package/src/product-loop/__tests__/circuit-breakers-coverage.test.ts +0 -82
- package/src/product-loop/__tests__/circuit-breakers.test.ts +0 -90
- package/src/product-loop/__tests__/complexity-routing.spec.ts +0 -169
- package/src/product-loop/__tests__/context-policy.test.ts +0 -280
- package/src/product-loop/__tests__/cost-preview.test.ts +0 -118
- package/src/product-loop/__tests__/cost-scoper.test.ts +0 -76
- package/src/product-loop/__tests__/cross-run-memory.test.ts +0 -195
- package/src/product-loop/__tests__/design-output.spec.ts +0 -39
- package/src/product-loop/__tests__/discover.test.ts +0 -98
- package/src/product-loop/__tests__/discovery-council-runner.test.ts +0 -13
- package/src/product-loop/__tests__/discovery-detection.test.ts +0 -180
- package/src/product-loop/__tests__/discovery-ecosystem.test.ts +0 -132
- package/src/product-loop/__tests__/discovery-integration.test.ts +0 -133
- package/src/product-loop/__tests__/discovery-interview.test.ts +0 -305
- package/src/product-loop/__tests__/discovery-migrations.test.ts +0 -75
- package/src/product-loop/__tests__/discovery-persistence.test.ts +0 -171
- package/src/product-loop/__tests__/discovery-prompt-parser.test.ts +0 -77
- package/src/product-loop/__tests__/discovery-recommender-ecosystem.test.ts +0 -94
- package/src/product-loop/__tests__/discovery-recommender.test.ts +0 -382
- package/src/product-loop/__tests__/discovery-schema.test.ts +0 -102
- package/src/product-loop/__tests__/done-gate-coverage.test.ts +0 -151
- package/src/product-loop/__tests__/done-gate.test.ts +0 -140
- package/src/product-loop/__tests__/ee-extract-wiring.test.ts +0 -216
- package/src/product-loop/__tests__/extract-to-ee.test.ts +0 -205
- package/src/product-loop/__tests__/feedback-routing.test.ts +0 -93
- package/src/product-loop/__tests__/hot-path.spec.ts +0 -177
- package/src/product-loop/__tests__/integration.test.ts +0 -344
- package/src/product-loop/__tests__/loop-driver-audit.test.ts +0 -321
- package/src/product-loop/__tests__/loop-driver.test.ts +0 -247
- package/src/product-loop/__tests__/phase-budget.test.ts +0 -172
- package/src/product-loop/__tests__/phase-orchestrator-integration.test.ts +0 -143
- package/src/product-loop/__tests__/phase-plan.test.ts +0 -241
- package/src/product-loop/__tests__/phase-rituals.test.ts +0 -211
- package/src/product-loop/__tests__/phase-runner.test.ts +0 -454
- package/src/product-loop/__tests__/phase-tracker-bridge.test.ts +0 -85
- package/src/product-loop/__tests__/product-identity.test.ts +0 -47
- package/src/product-loop/__tests__/reality-anchor.test.ts +0 -58
- package/src/product-loop/__tests__/repo-audit.test.ts +0 -103
- package/src/product-loop/__tests__/role-memory.test.ts +0 -70
- package/src/product-loop/__tests__/role-registry.test.ts +0 -235
- package/src/product-loop/__tests__/role-routing-ee.test.ts +0 -90
- package/src/product-loop/__tests__/route-decision-emit.test.ts +0 -207
- package/src/product-loop/__tests__/seed-questions.test.ts +0 -33
- package/src/product-loop/__tests__/ship-polish.test.ts +0 -109
- package/src/product-loop/__tests__/sprint-runner-emit.test.ts +0 -324
- package/src/product-loop/__tests__/sprint-runner.test.ts +0 -501
- package/src/product-loop/__tests__/stakeholder-acl.test.ts +0 -94
- package/src/product-loop/__tests__/state-md-ee-injections.test.ts +0 -229
- package/src/product-loop/__tests__/sufficiency-routing.spec.ts +0 -177
- package/src/product-loop/__tests__/typed-artifacts.test.ts +0 -261
- package/src/product-loop/__tests__/types.test.ts +0 -103
- package/src/product-loop/__tests__/verify-failure-threshold.test.ts +0 -177
- package/src/product-loop/__tests__/verify-failure-tracking.test.ts +0 -154
- package/src/product-loop/__tests__/verify-result.test.ts +0 -60
- package/src/product-loop/artifact-io.ts +0 -239
- package/src/product-loop/assumption-ledger.ts +0 -270
- package/src/product-loop/circuit-breakers.ts +0 -76
- package/src/product-loop/context-policy.ts +0 -180
- package/src/product-loop/cost-preview.ts +0 -124
- package/src/product-loop/cost-scoper.ts +0 -49
- package/src/product-loop/cross-run-memory.ts +0 -450
- package/src/product-loop/design-output.ts +0 -24
- package/src/product-loop/discover.ts +0 -159
- package/src/product-loop/discovery-context-format.ts +0 -32
- package/src/product-loop/discovery-council-runner.ts +0 -82
- package/src/product-loop/discovery-detection.ts +0 -161
- package/src/product-loop/discovery-ecosystem.ts +0 -124
- package/src/product-loop/discovery-interview.ts +0 -237
- package/src/product-loop/discovery-migrations.ts +0 -40
- package/src/product-loop/discovery-persistence.ts +0 -219
- package/src/product-loop/discovery-prompt-parser.ts +0 -80
- package/src/product-loop/discovery-recommender.ts +0 -366
- package/src/product-loop/discovery-schema.ts +0 -143
- package/src/product-loop/done-gate.ts +0 -224
- package/src/product-loop/feedback-routing.ts +0 -82
- package/src/product-loop/gather.ts +0 -304
- package/src/product-loop/index.ts +0 -1305
- package/src/product-loop/loop-driver.ts +0 -901
- package/src/product-loop/phase-budget.ts +0 -182
- package/src/product-loop/phase-plan.ts +0 -158
- package/src/product-loop/phase-rituals.ts +0 -158
- package/src/product-loop/phase-runner.ts +0 -455
- package/src/product-loop/phase-tracker-bridge.ts +0 -60
- package/src/product-loop/product-identity.ts +0 -11
- package/src/product-loop/reality-anchor.ts +0 -45
- package/src/product-loop/repo-audit.ts +0 -314
- package/src/product-loop/role-memory.ts +0 -72
- package/src/product-loop/role-registry.ts +0 -175
- package/src/product-loop/seed-questions.ts +0 -51
- package/src/product-loop/ship-polish.ts +0 -164
- package/src/product-loop/sprint-runner.ts +0 -610
- package/src/product-loop/stakeholder-acl.ts +0 -82
- package/src/product-loop/typed-artifacts.ts +0 -332
- package/src/product-loop/types.ts +0 -443
- package/src/product-loop/verify-failure-tracking.ts +0 -225
- package/src/product-loop/verify-result.ts +0 -39
- package/src/providers/.gitkeep +0 -0
- package/src/providers/__test-utils__/load-fixture.ts +0 -36
- package/src/providers/__tests__/adapter-oauth-wiring.test.ts +0 -129
- package/src/providers/__tests__/capabilities-cosmetic.test.ts +0 -119
- package/src/providers/__tests__/capabilities-flags.test.ts +0 -166
- package/src/providers/__tests__/capabilities-provider-options.test.ts +0 -203
- package/src/providers/__tests__/capabilities-sanitize.test.ts +0 -82
- package/src/providers/__tests__/capabilities.test.ts +0 -44
- package/src/providers/__tests__/provider-coverage.test.ts +0 -48
- package/src/providers/__tests__/runtime-integration.test.ts +0 -97
- package/src/providers/__tests__/runtime.test.ts +0 -96
- package/src/providers/__tests__/siliconflow-history.test.ts +0 -82
- package/src/providers/__tests__/strategies-registry.test.ts +0 -55
- package/src/providers/__tests__/strategies-resolve.test.ts +0 -137
- package/src/providers/__tests__/wire-debug.test.ts +0 -42
- package/src/providers/adapter.test.ts +0 -21
- package/src/providers/adapter.ts +0 -156
- package/src/providers/anthropic.ts +0 -174
- package/src/providers/auth/__tests__/browser-flow.test.ts +0 -235
- package/src/providers/auth/__tests__/device-flow.test.ts +0 -263
- package/src/providers/auth/__tests__/gemini-oauth.test.ts +0 -387
- package/src/providers/auth/__tests__/openai-oauth.test.ts +0 -378
- package/src/providers/auth/__tests__/token-store.test.ts +0 -152
- package/src/providers/auth/browser-flow.ts +0 -140
- package/src/providers/auth/device-flow.ts +0 -221
- package/src/providers/auth/gemini-oauth.ts +0 -351
- package/src/providers/auth/openai-oauth.ts +0 -455
- package/src/providers/auth/registry.ts +0 -121
- package/src/providers/auth/token-store.ts +0 -154
- package/src/providers/auth/types.ts +0 -111
- package/src/providers/capabilities.ts +0 -351
- package/src/providers/endpoints.ts +0 -68
- package/src/providers/errors.test.ts +0 -76
- package/src/providers/errors.ts +0 -46
- package/src/providers/gemini.test.ts +0 -46
- package/src/providers/gemini.ts +0 -42
- package/src/providers/index.ts +0 -28
- package/src/providers/keychain.test.ts +0 -100
- package/src/providers/keychain.ts +0 -267
- package/src/providers/mcp-vision-bridge.test.ts +0 -513
- package/src/providers/mcp-vision-bridge.ts +0 -1020
- package/src/providers/ollama.test.ts +0 -46
- package/src/providers/ollama.ts +0 -36
- package/src/providers/openai-compatible.test.ts +0 -63
- package/src/providers/openai-compatible.ts +0 -58
- package/src/providers/openai.test.ts +0 -65
- package/src/providers/openai.ts +0 -56
- package/src/providers/patch-zod-schema.ts +0 -126
- package/src/providers/pricing.test.ts +0 -65
- package/src/providers/pricing.ts +0 -111
- package/src/providers/prompt-cache-key.spec.ts +0 -28
- package/src/providers/runtime-mock.spec.ts +0 -86
- package/src/providers/runtime.ts +0 -283
- package/src/providers/siliconflow-history.ts +0 -74
- package/src/providers/strategies/anthropic.strategy.ts +0 -25
- package/src/providers/strategies/base.strategy.ts +0 -76
- package/src/providers/strategies/deepseek.strategy.ts +0 -26
- package/src/providers/strategies/google.strategy.ts +0 -28
- package/src/providers/strategies/ollama.strategy.ts +0 -22
- package/src/providers/strategies/openai.strategy.ts +0 -55
- package/src/providers/strategies/registry.ts +0 -43
- package/src/providers/strategies/siliconflow.strategy.ts +0 -26
- package/src/providers/strategies/xai.strategy.ts +0 -26
- package/src/providers/stream-loop.ts +0 -83
- package/src/providers/types.ts +0 -145
- package/src/providers/vision-proxy.test.ts +0 -252
- package/src/providers/vision-proxy.ts +0 -317
- package/src/providers/wire-debug.ts +0 -163
- package/src/router/.gitkeep +0 -0
- package/src/router/__tests__/step-router.test.ts +0 -150
- package/src/router/classifier/grammars.ts +0 -17
- package/src/router/classifier/index.test.ts +0 -33
- package/src/router/classifier/index.ts +0 -21
- package/src/router/classifier/regex.test.ts +0 -49
- package/src/router/classifier/regex.ts +0 -113
- package/src/router/classifier/tree-sitter.test.ts +0 -26
- package/src/router/classifier/tree-sitter.ts +0 -87
- package/src/router/cold.test.ts +0 -62
- package/src/router/cold.ts +0 -27
- package/src/router/decide.test.ts +0 -147
- package/src/router/decide.ts +0 -472
- package/src/router/health.test.ts +0 -59
- package/src/router/health.ts +0 -49
- package/src/router/provider-sentinel.test.ts +0 -22
- package/src/router/provider-sentinel.ts +0 -20
- package/src/router/step-router.ts +0 -194
- package/src/router/store.ts +0 -47
- package/src/router/types.ts +0 -20
- package/src/router/warm.test.ts +0 -168
- package/src/router/warm.ts +0 -53
- package/src/scaffold/__tests__/continuation-prompt.test.ts +0 -93
- package/src/scaffold/__tests__/continue-as-council.spec.ts +0 -124
- package/src/scaffold/__tests__/dotnet-assembly-name.test.ts +0 -28
- package/src/scaffold/__tests__/fe-scaffold-contents.test.ts +0 -127
- package/src/scaffold/__tests__/init-new.smoke.spec.ts +0 -99
- package/src/scaffold/__tests__/init-new.spec.ts +0 -450
- package/src/scaffold/__tests__/install-bb-templates.spec.ts +0 -86
- package/src/scaffold/__tests__/point-to-existing.spec.ts +0 -114
- package/src/scaffold/bb-ecosystem-apply.ts +0 -454
- package/src/scaffold/bb-quality-gate.ts +0 -287
- package/src/scaffold/continuation-prompt.ts +0 -80
- package/src/scaffold/continue-as-council.ts +0 -99
- package/src/scaffold/init-new.ts +0 -1691
- package/src/scaffold/point-to-existing.ts +0 -83
- package/src/scaffold/resume-from-gate-failures.ts +0 -167
- package/src/storage/__tests__/migrations.test.ts +0 -395
- package/src/storage/__tests__/ui-interaction-log.test.ts +0 -105
- package/src/storage/atomic-io.test.ts +0 -92
- package/src/storage/atomic-io.ts +0 -160
- package/src/storage/config.test.ts +0 -33
- package/src/storage/config.ts +0 -53
- package/src/storage/db.ts +0 -184
- package/src/storage/index.ts +0 -26
- package/src/storage/interaction-log.ts +0 -121
- package/src/storage/migrations.ts +0 -205
- package/src/storage/session-dir.ts +0 -37
- package/src/storage/sessions.ts +0 -206
- package/src/storage/tool-results.ts +0 -56
- package/src/storage/transcript-view.ts +0 -45
- package/src/storage/transcript.test.ts +0 -24
- package/src/storage/transcript.ts +0 -561
- package/src/storage/ui-interaction-log.ts +0 -160
- package/src/storage/usage-cap.test.ts +0 -59
- package/src/storage/usage-cap.ts +0 -81
- package/src/storage/usage.ts +0 -117
- package/src/storage/workspaces.ts +0 -84
- package/src/tools/bash.test.ts +0 -363
- package/src/tools/bash.ts +0 -668
- package/src/tools/computer.test.ts +0 -187
- package/src/tools/computer.ts +0 -632
- package/src/tools/file-tracker.test.ts +0 -99
- package/src/tools/file-tracker.ts +0 -70
- package/src/tools/file.test.ts +0 -95
- package/src/tools/file.ts +0 -182
- package/src/tools/grep.ts +0 -187
- package/src/tools/registry.test.ts +0 -38
- package/src/tools/registry.ts +0 -388
- package/src/tools/schedule.test.ts +0 -143
- package/src/tools/schedule.ts +0 -610
- package/src/types/index.ts +0 -474
- package/src/ui/agents-modal.tsx +0 -292
- package/src/ui/app.tsx +0 -6464
- package/src/ui/cards/__tests__/product-status-card.test.ts +0 -30
- package/src/ui/cards/product-status-card.tsx +0 -117
- package/src/ui/components/SuggestionOverlay.tsx +0 -38
- package/src/ui/components/Toast.tsx +0 -100
- package/src/ui/components/__tests__/council-leader-bubble.test.ts +0 -16
- package/src/ui/components/__tests__/council-message-bubble.test.ts +0 -85
- package/src/ui/components/__tests__/council-phase-timeline.test.ts +0 -57
- package/src/ui/components/__tests__/council-placeholder-bubble.test.ts +0 -16
- package/src/ui/components/__tests__/council-question-card.test.ts +0 -133
- package/src/ui/components/__tests__/council-synthesis-banner.test.ts +0 -12
- package/src/ui/components/__tests__/use-pair-quote-buffer.test.ts +0 -41
- package/src/ui/components/btw-overlay.tsx +0 -66
- package/src/ui/components/bubble-layout.ts +0 -66
- package/src/ui/components/code-block-truncate.ts +0 -24
- package/src/ui/components/copy-flash-banner.tsx +0 -31
- package/src/ui/components/council-info-card.tsx +0 -45
- package/src/ui/components/council-leader-bubble.tsx +0 -41
- package/src/ui/components/council-message-bubble.tsx +0 -111
- package/src/ui/components/council-phase-timeline.tsx +0 -91
- package/src/ui/components/council-placeholder-bubble.tsx +0 -65
- package/src/ui/components/council-question-card.tsx +0 -253
- package/src/ui/components/council-status-list.tsx +0 -111
- package/src/ui/components/council-synthesis-banner.tsx +0 -37
- package/src/ui/components/diff-view.tsx +0 -225
- package/src/ui/components/halt-recovery-card.tsx +0 -83
- package/src/ui/components/hero-logo.tsx +0 -62
- package/src/ui/components/init-new-form-card.tsx +0 -470
- package/src/ui/components/lsp-views.tsx +0 -104
- package/src/ui/components/media-views.tsx +0 -66
- package/src/ui/components/message-view.tsx +0 -343
- package/src/ui/components/point-to-existing-form-card.tsx +0 -136
- package/src/ui/components/prompt-box.tsx +0 -306
- package/src/ui/components/role-palette.ts +0 -62
- package/src/ui/components/session-header.tsx +0 -68
- package/src/ui/components/slash-inline-menu.tsx +0 -63
- package/src/ui/components/structured-response-view.tsx +0 -191
- package/src/ui/components/tool-result-views.tsx +0 -258
- package/src/ui/components/use-pair-quote-buffer.ts +0 -23
- package/src/ui/constants.ts +0 -242
- package/src/ui/hooks/use-agent-editor.ts +0 -64
- package/src/ui/hooks/use-mcp-editor.ts +0 -39
- package/src/ui/hooks/use-model-picker.ts +0 -50
- package/src/ui/hooks/useTypeahead.ts +0 -160
- package/src/ui/markdown.tsx +0 -49
- package/src/ui/mcp-modal-types.ts +0 -33
- package/src/ui/mcp-modal.tsx +0 -484
- package/src/ui/modals/api-key-modal.tsx +0 -99
- package/src/ui/modals/connect-modal.tsx +0 -259
- package/src/ui/modals/model-picker-modal.tsx +0 -323
- package/src/ui/modals/sandbox-picker-modal.tsx +0 -99
- package/src/ui/modals/update-modal.tsx +0 -67
- package/src/ui/modals/wallet-picker-modal.tsx +0 -186
- package/src/ui/plan.tsx +0 -346
- package/src/ui/schedule-modal.tsx +0 -138
- package/src/ui/slash/__tests__/clear.test.ts +0 -86
- package/src/ui/slash/__tests__/compact.test.ts +0 -56
- package/src/ui/slash/__tests__/cost.test.ts +0 -62
- package/src/ui/slash/__tests__/discuss.test.ts +0 -101
- package/src/ui/slash/__tests__/execute.test.ts +0 -86
- package/src/ui/slash/__tests__/expand.test.ts +0 -86
- package/src/ui/slash/__tests__/ideal.test.ts +0 -134
- package/src/ui/slash/__tests__/menu-parity.test.ts +0 -43
- package/src/ui/slash/__tests__/optimize.test.ts +0 -155
- package/src/ui/slash/__tests__/pin.test.ts +0 -47
- package/src/ui/slash/__tests__/plan.test.ts +0 -95
- package/src/ui/slash/clear.ts +0 -89
- package/src/ui/slash/compact.ts +0 -46
- package/src/ui/slash/cost.ts +0 -63
- package/src/ui/slash/council-inspect.ts +0 -188
- package/src/ui/slash/council.ts +0 -30
- package/src/ui/slash/debug.ts +0 -153
- package/src/ui/slash/discuss.ts +0 -71
- package/src/ui/slash/ee.ts +0 -304
- package/src/ui/slash/execute.ts +0 -44
- package/src/ui/slash/expand.ts +0 -51
- package/src/ui/slash/export.ts +0 -281
- package/src/ui/slash/ideal.ts +0 -254
- package/src/ui/slash/menu-items.ts +0 -106
- package/src/ui/slash/optimize.ts +0 -47
- package/src/ui/slash/pin.ts +0 -41
- package/src/ui/slash/plan.ts +0 -62
- package/src/ui/slash/registry.ts +0 -47
- package/src/ui/slash/route.test.ts +0 -82
- package/src/ui/slash/route.ts +0 -43
- package/src/ui/status-bar/index.test.tsx +0 -90
- package/src/ui/status-bar/index.tsx +0 -98
- package/src/ui/status-bar/store.test.ts +0 -131
- package/src/ui/status-bar/store.ts +0 -186
- package/src/ui/status-bar/tier-badge.test.tsx +0 -38
- package/src/ui/status-bar/tier-badge.tsx +0 -29
- package/src/ui/status-bar/usd-meter.test.tsx +0 -37
- package/src/ui/status-bar/usd-meter.tsx +0 -22
- package/src/ui/syntax-highlight.ts +0 -627
- package/src/ui/terminal-selection-text.ts +0 -72
- package/src/ui/theme.ts +0 -95
- package/src/ui/types.ts +0 -83
- package/src/ui/utils/color.ts +0 -19
- package/src/ui/utils/format.ts +0 -86
- package/src/ui/utils/modal.ts +0 -9
- package/src/ui/utils/text.ts +0 -31
- package/src/ui/utils/tools.ts +0 -95
- package/src/usage/.gitkeep +0 -0
- package/src/usage/__tests__/product-ledger.test.ts +0 -85
- package/src/usage/cost-log.ts +0 -158
- package/src/usage/decision-log.ts +0 -86
- package/src/usage/downgrade.test.ts +0 -82
- package/src/usage/downgrade.ts +0 -70
- package/src/usage/estimator.test.ts +0 -43
- package/src/usage/estimator.ts +0 -58
- package/src/usage/ledger.test.ts +0 -200
- package/src/usage/ledger.ts +0 -253
- package/src/usage/midstream.test.ts +0 -55
- package/src/usage/midstream.ts +0 -51
- package/src/usage/product-ledger.ts +0 -111
- package/src/usage/thresholds.test.ts +0 -83
- package/src/usage/thresholds.ts +0 -74
- package/src/usage/types.ts +0 -41
- package/src/utils/__tests__/auto-council-settings.test.ts +0 -46
- package/src/utils/__tests__/ee-logger.test.ts +0 -197
- package/src/utils/__tests__/file-lock.test.ts +0 -74
- package/src/utils/__tests__/rate-limit.test.ts +0 -42
- package/src/utils/__tests__/settings-disabled-models.test.ts +0 -113
- package/src/utils/__tests__/settings-web-research.test.ts +0 -45
- package/src/utils/__tests__/slugify.test.ts +0 -45
- package/src/utils/__tests__/visible-retry.test.ts +0 -195
- package/src/utils/at-mentions.ts +0 -120
- package/src/utils/clipboard-image.ts +0 -139
- package/src/utils/ee-logger.ts +0 -163
- package/src/utils/file-index.ts +0 -152
- package/src/utils/file-lock.ts +0 -66
- package/src/utils/git-root.ts +0 -17
- package/src/utils/host-clipboard.ts +0 -68
- package/src/utils/install-manager.test.ts +0 -167
- package/src/utils/install-manager.ts +0 -429
- package/src/utils/instructions.test.ts +0 -112
- package/src/utils/instructions.ts +0 -149
- package/src/utils/permission-mode.test.ts +0 -121
- package/src/utils/permission-mode.ts +0 -37
- package/src/utils/rate-limit.ts +0 -21
- package/src/utils/redactor.test.ts +0 -100
- package/src/utils/redactor.ts +0 -223
- package/src/utils/settings.test.ts +0 -181
- package/src/utils/settings.ts +0 -1108
- package/src/utils/shell.test.ts +0 -72
- package/src/utils/shell.ts +0 -193
- package/src/utils/side-question.ts +0 -39
- package/src/utils/skills.test.ts +0 -58
- package/src/utils/skills.ts +0 -207
- package/src/utils/slugify.ts +0 -9
- package/src/utils/subagent-display.test.ts +0 -23
- package/src/utils/subagent-display.ts +0 -11
- package/src/utils/subagents-settings.test.ts +0 -77
- package/src/utils/telegram-audio-settings.test.ts +0 -44
- package/src/utils/update-checker.test.ts +0 -182
- package/src/utils/update-checker.ts +0 -33
- package/src/utils/visible-retry.ts +0 -56
- package/src/verify/__tests__/coverage-parsers.test.ts +0 -86
- package/src/verify/__tests__/dotnet-recipe.test.ts +0 -88
- package/src/verify/checkpoint.test.ts +0 -186
- package/src/verify/checkpoint.ts +0 -239
- package/src/verify/coverage-parsers.ts +0 -76
- package/src/verify/entrypoint.test.ts +0 -293
- package/src/verify/entrypoint.ts +0 -439
- package/src/verify/environment.test.ts +0 -119
- package/src/verify/environment.ts +0 -115
- package/src/verify/evidence.ts +0 -104
- package/src/verify/orchestrator.test.ts +0 -159
- package/src/verify/orchestrator.ts +0 -129
- package/src/verify/recipes.ts +0 -592
- package/src/verify/retry.ts +0 -62
- package/src/verify/runtime-prep.test.ts +0 -47
- /package/dist/src/{providers/__tests__/siliconflow-history.test.d.ts → council/__tests__/clarifier-ready-gate.test.d.ts} +0 -0
package/src/scaffold/init-new.ts
DELETED
|
@@ -1,1691 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* init-new.ts — Scaffolds a new muonroi project with:
|
|
3
|
-
* - <name>/server/ scaffolded via `dotnet new <bbTemplate.shortName>` (BE)
|
|
4
|
-
* - <name>/client/ scaffolded with React or Angular + SemanticProvider wiring
|
|
5
|
-
*
|
|
6
|
-
* Phase 6 additions:
|
|
7
|
-
* - detectDotnet(): spawnSync("dotnet", ["--version"]) check (task 6.1)
|
|
8
|
-
* - detectBBTemplates(): parse `dotnet new list` for 3 template shortNames (task 6.2)
|
|
9
|
-
* - installBBTemplates(): dotnet new install <pkgs> with NuGet-unreachable fallback (task 6.2)
|
|
10
|
-
* - bbTemplate / eePackages on InitNewOptions (task 6.2b)
|
|
11
|
-
* - dotnet-new scaffold path with Directory.Packages.props injection (task 6.3)
|
|
12
|
-
* - OSS-only package filter, --commercial opt-in (task 6.4)
|
|
13
|
-
* - EE-INTENT.md generation (task 6.5)
|
|
14
|
-
*
|
|
15
|
-
* Designed for testability: callers inject fs+exec via opts.fs to avoid
|
|
16
|
-
* real I/O in unit tests. Only the smoke test uses real filesystem operations.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import { exec as nodeExec, spawnSync } from "node:child_process";
|
|
20
|
-
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
21
|
-
import { mkdir as fsMkdir, writeFile as fsWriteFile } from "node:fs/promises";
|
|
22
|
-
import * as path from "node:path";
|
|
23
|
-
import { promisify } from "node:util";
|
|
24
|
-
|
|
25
|
-
const execAsync = promisify(nodeExec);
|
|
26
|
-
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
// BB detection helper
|
|
29
|
-
// ---------------------------------------------------------------------------
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Detect whether a directory is a muonroi-building-block project.
|
|
33
|
-
* Heuristic: presence of Directory.Build.props + *.sln + any src/Muonroi.* directory.
|
|
34
|
-
* Returns "muonroi-building-block" when matched, undefined otherwise.
|
|
35
|
-
*/
|
|
36
|
-
export function detectBBFramework(
|
|
37
|
-
dirPath: string,
|
|
38
|
-
fsOps?: { exists: (p: string) => boolean },
|
|
39
|
-
): "muonroi-building-block" | undefined {
|
|
40
|
-
const checkExists = fsOps?.exists ?? ((p: string) => existsSync(p));
|
|
41
|
-
const hasBuildProps = checkExists(path.join(dirPath, "Directory.Build.props"));
|
|
42
|
-
if (!hasBuildProps) return undefined;
|
|
43
|
-
|
|
44
|
-
// Check for any *.sln file in root
|
|
45
|
-
const hasSlnFile = (() => {
|
|
46
|
-
try {
|
|
47
|
-
return readdirSync(dirPath).some((f) => f.endsWith(".sln"));
|
|
48
|
-
} catch {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
})();
|
|
52
|
-
if (!hasSlnFile) return undefined;
|
|
53
|
-
|
|
54
|
-
// Check for src/Muonroi.* directory
|
|
55
|
-
const srcPath = path.join(dirPath, "src");
|
|
56
|
-
const hasMuonroiSrc = (() => {
|
|
57
|
-
try {
|
|
58
|
-
return readdirSync(srcPath).some((f) => f.startsWith("Muonroi."));
|
|
59
|
-
} catch {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
})();
|
|
63
|
-
if (!hasMuonroiSrc) return undefined;
|
|
64
|
-
|
|
65
|
-
return "muonroi-building-block";
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// ---------------------------------------------------------------------------
|
|
69
|
-
// Dotnet detection helpers (task 6.1 + 6.2)
|
|
70
|
-
// ---------------------------------------------------------------------------
|
|
71
|
-
|
|
72
|
-
export interface BBTemplateInfo {
|
|
73
|
-
shortName: string;
|
|
74
|
-
nugetId: string;
|
|
75
|
-
version: string;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Known BB template package descriptors with pinned versions.
|
|
80
|
-
* Update these constants when bumping to a newer published nupkg version on NuGet.org.
|
|
81
|
-
* `userSettings.bbTemplateVersions` can override at runtime.
|
|
82
|
-
*
|
|
83
|
-
* `minSdkMajor` is the minimum dotnet SDK major version that ships a runtime
|
|
84
|
-
* matching the template's embedded `<TargetFramework>`. Verified from NuGet
|
|
85
|
-
* nuspec target frameworks 2026-05-19:
|
|
86
|
-
* - Muonroi.BaseTemplate@1.0.0-alpha.3 → group targetFramework="net9.0"
|
|
87
|
-
* - Muonroi.Modular.Template@1.10.0 → net8 LTS line (no nuspec TFM)
|
|
88
|
-
* - Muonroi.Microservices.Template@1.10.0 → net8 LTS line (no nuspec TFM)
|
|
89
|
-
* SDK 10 is forward-compatible with net8/9 targets, so users on SDK 10 can
|
|
90
|
-
* install + scaffold all three; the floor is what blocks SDK 7 / 6.
|
|
91
|
-
*/
|
|
92
|
-
export const BB_TEMPLATE_PACKAGES: ReadonlyArray<Omit<BBTemplateInfo, "shortName"> & { minSdkMajor: number }> = [
|
|
93
|
-
{ nugetId: "Muonroi.BaseTemplate", version: "1.0.0-alpha.3", minSdkMajor: 9 },
|
|
94
|
-
{ nugetId: "Muonroi.Modular.Template", version: "1.10.0", minSdkMajor: 8 },
|
|
95
|
-
{ nugetId: "Muonroi.Microservices.Template", version: "1.10.0", minSdkMajor: 8 },
|
|
96
|
-
];
|
|
97
|
-
|
|
98
|
-
/** Parse "10.0.201" / "8.0.404" → 10 / 8. Returns null on garbage input. */
|
|
99
|
-
export function parseDotnetMajor(version: string | null): number | null {
|
|
100
|
-
if (!version) return null;
|
|
101
|
-
const m = version.match(/^(\d+)\./);
|
|
102
|
-
if (!m) return null;
|
|
103
|
-
const n = Number.parseInt(m[1], 10);
|
|
104
|
-
return Number.isFinite(n) ? n : null;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/** Look up the min SDK major for a given nugetId. Returns null if unknown. */
|
|
108
|
-
export function getMinSdkMajor(nugetId: string): number | null {
|
|
109
|
-
return BB_TEMPLATE_PACKAGES.find((p) => p.nugetId === nugetId)?.minSdkMajor ?? null;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Maps NuGet package id → actual `dotnet new` shortName as registered by the
|
|
114
|
-
* published template.json. Verified empirically against NuGet 2026-05-16:
|
|
115
|
-
* Muonroi.BaseTemplate@1.0.0-alpha.3 → mr-base-sln
|
|
116
|
-
* Muonroi.Modular.Template@1.10.0 → mr-mod-sln
|
|
117
|
-
* Muonroi.Microservices.Template@1.10.0 → mr-micro-sln
|
|
118
|
-
*
|
|
119
|
-
* Note: each package also registers ancillary templates (e.g. tenant-service,
|
|
120
|
-
* tenant-site-module). The CLI only consumes the *-sln entry points; the
|
|
121
|
-
* ancillary templates are out-of-scope for /ideal scaffold.
|
|
122
|
-
*/
|
|
123
|
-
const NUGET_TO_SHORTNAME: Record<string, string> = {
|
|
124
|
-
"Muonroi.BaseTemplate": "mr-base-sln",
|
|
125
|
-
"Muonroi.Modular.Template": "mr-mod-sln",
|
|
126
|
-
"Muonroi.Microservices.Template": "mr-micro-sln",
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Reverse lookup: dotnet shortName → NuGet package id.
|
|
131
|
-
* Used by `src/ee/bb-design.ts` to map an EE recipe's shortName back to
|
|
132
|
-
* the canonical nugetId for `dotnet new install`.
|
|
133
|
-
*/
|
|
134
|
-
export const SHORTNAME_TO_NUGET: Record<string, string> = Object.fromEntries(
|
|
135
|
-
Object.entries(NUGET_TO_SHORTNAME).map(([k, v]) => [v, k]),
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Windows shells resolve `dotnet` to `dotnet.exe` via PATHEXT lookup, which
|
|
140
|
-
* spawnSync only does when `shell: true` is passed. Without it, the
|
|
141
|
-
* "command not found" branch fires even though `dotnet --version` works
|
|
142
|
-
* fine in a terminal. POSIX shells don't need this flag.
|
|
143
|
-
*/
|
|
144
|
-
const NEEDS_SHELL = process.platform === "win32";
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Common dotnet install locations checked as a fallback when `dotnet --version`
|
|
148
|
-
* via PATH fails. Some users have dotnet installed system-wide but the TUI
|
|
149
|
-
* inherits a PATH from a shell where the install dir wasn't added (e.g. a
|
|
150
|
-
* bare cmd.exe launched without the system profile loaded).
|
|
151
|
-
*/
|
|
152
|
-
const fsExistsSync = existsSync;
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Walks `root` recursively (depth-limited) to find the most likely "primary"
|
|
156
|
-
* .csproj file — the one a user would target for `dotnet add package`.
|
|
157
|
-
*
|
|
158
|
-
* Empirically verified against published BB templates 2026-05-19 by manually
|
|
159
|
-
* scaffolding into /tmp/muonroi-scaffold-test-851:
|
|
160
|
-
* mr-micro-sln (Muonroi.Microservices.Template@1.10.0) →
|
|
161
|
-
* - src/Gateways/<App>.Gateway/<App>.Gateway.csproj (Sdk="Web")
|
|
162
|
-
* - src/Services/<App>.Catalog/<App>.Catalog.csproj (Sdk="Web")
|
|
163
|
-
* - src/Services/<App>.Core/<App>.Core.csproj
|
|
164
|
-
* - src/Services/<App>.Data/<App>.Data.csproj
|
|
165
|
-
* mr-mod-sln (Muonroi.Modular.Template@1.10.0) →
|
|
166
|
-
* - src/Host/<App>.Host/<App>.Host.csproj (Sdk="Web")
|
|
167
|
-
* - src/Modules/Catalog/<App>.Modules.Catalog.csproj
|
|
168
|
-
* - src/Modules/Identity/<App>.Modules.Identity.csproj
|
|
169
|
-
* - src/Shared/<App>.Kernel/<App>.Kernel.csproj
|
|
170
|
-
* - src/Shared/<App>.Shared/<App>.Shared.csproj
|
|
171
|
-
*
|
|
172
|
-
* Heuristic priority (highest first):
|
|
173
|
-
* 1. Skip noise dirs (bin, obj, .git, node_modules, .vs, .vscode)
|
|
174
|
-
* 2. Exclude test projects (.Tests / .Test / .Specs suffix)
|
|
175
|
-
* 3. Prefer Web SDK csproj (Sdk="Microsoft.NET.Sdk.Web" inside <Project>)
|
|
176
|
-
* 4. Within Web SDK group, prefer paths containing /Gateway/ or /Host/
|
|
177
|
-
* (entry-project convention)
|
|
178
|
-
* 5. Tie-break by shallowest depth, then alphabetical
|
|
179
|
-
*
|
|
180
|
-
* Returns absolute path or null if no csproj found under root.
|
|
181
|
-
*/
|
|
182
|
-
export interface FindCsprojFs {
|
|
183
|
-
readdir: (p: string) => Array<{ name: string; isDir: boolean; isFile: boolean }>;
|
|
184
|
-
readFile: (p: string) => string;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
const defaultFindCsprojFs: FindCsprojFs = {
|
|
188
|
-
readdir: (p: string) =>
|
|
189
|
-
readdirSync(p, { withFileTypes: true, encoding: "utf8" }).map((e) => ({
|
|
190
|
-
name: String(e.name),
|
|
191
|
-
isDir: e.isDirectory(),
|
|
192
|
-
isFile: e.isFile(),
|
|
193
|
-
})),
|
|
194
|
-
readFile: (p: string) => readFileSync(p, "utf8"),
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
export function findPrimaryCsproj(
|
|
198
|
-
root: string,
|
|
199
|
-
maxDepth = 6,
|
|
200
|
-
fsAdapter: FindCsprojFs = defaultFindCsprojFs,
|
|
201
|
-
): string | null {
|
|
202
|
-
const skipDirs = new Set(["bin", "obj", ".git", "node_modules", ".vs", ".vscode"]);
|
|
203
|
-
const candidates: Array<{
|
|
204
|
-
absPath: string;
|
|
205
|
-
depth: number;
|
|
206
|
-
isTest: boolean;
|
|
207
|
-
isWebSdk: boolean;
|
|
208
|
-
isEntry: boolean;
|
|
209
|
-
}> = [];
|
|
210
|
-
|
|
211
|
-
function walk(dir: string, depth: number): void {
|
|
212
|
-
if (depth > maxDepth) return;
|
|
213
|
-
let entries: ReturnType<FindCsprojFs["readdir"]>;
|
|
214
|
-
try {
|
|
215
|
-
entries = fsAdapter.readdir(dir);
|
|
216
|
-
} catch {
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
for (const e of entries) {
|
|
220
|
-
if (e.isDir) {
|
|
221
|
-
if (skipDirs.has(e.name)) continue;
|
|
222
|
-
walk(path.join(dir, e.name), depth + 1);
|
|
223
|
-
} else if (e.isFile && e.name.endsWith(".csproj")) {
|
|
224
|
-
const stem = e.name.slice(0, -".csproj".length);
|
|
225
|
-
const isTest = /\.(Tests?|Specs)$/i.test(stem);
|
|
226
|
-
const absPath = path.join(dir, e.name);
|
|
227
|
-
let isWebSdk = false;
|
|
228
|
-
try {
|
|
229
|
-
isWebSdk = /Sdk="Microsoft\.NET\.Sdk\.Web"/.test(fsAdapter.readFile(absPath));
|
|
230
|
-
} catch {
|
|
231
|
-
/* unreadable — leave as non-web */
|
|
232
|
-
}
|
|
233
|
-
const isEntry = /[/\\](Gateway|Host)s?[/\\]/i.test(absPath);
|
|
234
|
-
candidates.push({ absPath, depth, isTest, isWebSdk, isEntry });
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
walk(root, 0);
|
|
239
|
-
|
|
240
|
-
if (candidates.length === 0) return null;
|
|
241
|
-
candidates.sort((a, b) => {
|
|
242
|
-
if (a.isTest !== b.isTest) return a.isTest ? 1 : -1;
|
|
243
|
-
if (a.isWebSdk !== b.isWebSdk) return a.isWebSdk ? -1 : 1;
|
|
244
|
-
if (a.isEntry !== b.isEntry) return a.isEntry ? -1 : 1;
|
|
245
|
-
if (a.depth !== b.depth) return a.depth - b.depth;
|
|
246
|
-
return a.absPath.localeCompare(b.absPath);
|
|
247
|
-
});
|
|
248
|
-
return candidates[0]?.absPath ?? null;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
function getDotnetFallbackPaths(): string[] {
|
|
252
|
-
if (process.platform !== "win32") return ["/usr/local/share/dotnet/dotnet", "/usr/share/dotnet/dotnet"];
|
|
253
|
-
const home = process.env.USERPROFILE ?? process.env.HOME ?? "";
|
|
254
|
-
return [
|
|
255
|
-
"C:\\Program Files\\dotnet\\dotnet.exe",
|
|
256
|
-
"C:\\Program Files (x86)\\dotnet\\dotnet.exe",
|
|
257
|
-
...(home ? [path.join(home, ".dotnet", "dotnet.exe")] : []),
|
|
258
|
-
];
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Last-resolved absolute path to dotnet, when PATH-based lookup failed and we
|
|
263
|
-
* had to fall back. Set by detectDotnet on success-via-fallback so callers
|
|
264
|
-
* (installBBTemplates, `dotnet new`, `dotnet add package`, etc.) can re-use
|
|
265
|
-
* the same binary instead of re-discovering on every spawn.
|
|
266
|
-
*/
|
|
267
|
-
let _resolvedDotnetPath: string | null = null;
|
|
268
|
-
|
|
269
|
-
/** Diagnostic — last spawn attempt result, for surfacing in errors. */
|
|
270
|
-
let _lastDotnetDetectDiagnostic: string = "";
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Task 6.1 — Detect dotnet SDK availability via spawnSync.
|
|
274
|
-
* Returns the dotnet version string, or null if not found.
|
|
275
|
-
*
|
|
276
|
-
* Strategy:
|
|
277
|
-
* 1. Try `dotnet --version` via PATH (with shell:true on Windows).
|
|
278
|
-
* 2. If that fails, walk common install locations and call them directly
|
|
279
|
-
* by absolute path. If any one returns version, remember it for reuse.
|
|
280
|
-
* 3. On total failure, populate _lastDotnetDetectDiagnostic so the
|
|
281
|
-
* "SDK not found" error can show the user *why* (status, stderr).
|
|
282
|
-
*/
|
|
283
|
-
export function detectDotnet(): string | null {
|
|
284
|
-
_resolvedDotnetPath = null;
|
|
285
|
-
let pathDiag = "";
|
|
286
|
-
try {
|
|
287
|
-
const result = spawnSync("dotnet", ["--version"], {
|
|
288
|
-
encoding: "utf8",
|
|
289
|
-
timeout: 5000,
|
|
290
|
-
shell: NEEDS_SHELL,
|
|
291
|
-
});
|
|
292
|
-
if (result.status === 0 && result.stdout) {
|
|
293
|
-
return result.stdout.trim();
|
|
294
|
-
}
|
|
295
|
-
pathDiag =
|
|
296
|
-
`PATH lookup: status=${result.status} ` +
|
|
297
|
-
`stderr=${(result.stderr ?? "").trim().slice(0, 120) || "(empty)"} ` +
|
|
298
|
-
`error=${result.error?.message ?? "(none)"}`;
|
|
299
|
-
} catch (err) {
|
|
300
|
-
pathDiag = `PATH lookup threw: ${err instanceof Error ? err.message : String(err)}`;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// Fallback — try absolute paths
|
|
304
|
-
const fallbackTries: string[] = [];
|
|
305
|
-
for (const candidate of getDotnetFallbackPaths()) {
|
|
306
|
-
if (!fsExistsSync(candidate)) {
|
|
307
|
-
fallbackTries.push(`${candidate}: not present`);
|
|
308
|
-
continue;
|
|
309
|
-
}
|
|
310
|
-
try {
|
|
311
|
-
const result = spawnSync(candidate, ["--version"], {
|
|
312
|
-
encoding: "utf8",
|
|
313
|
-
timeout: 5000,
|
|
314
|
-
shell: false,
|
|
315
|
-
});
|
|
316
|
-
if (result.status === 0 && result.stdout) {
|
|
317
|
-
_resolvedDotnetPath = candidate;
|
|
318
|
-
_lastDotnetDetectDiagnostic = `${pathDiag} | fallback: ${candidate} ok`;
|
|
319
|
-
return result.stdout.trim();
|
|
320
|
-
}
|
|
321
|
-
fallbackTries.push(`${candidate}: status=${result.status}`);
|
|
322
|
-
} catch (err) {
|
|
323
|
-
fallbackTries.push(`${candidate}: threw ${err instanceof Error ? err.message : String(err)}`);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
_lastDotnetDetectDiagnostic = `${pathDiag} | fallbacks: ${fallbackTries.join("; ")}`;
|
|
328
|
-
return null;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
/** Returns the absolute dotnet path discovered via fallback, or "dotnet" for normal PATH use. */
|
|
332
|
-
export function getDotnetCommand(): string {
|
|
333
|
-
return _resolvedDotnetPath ?? "dotnet";
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* Whether to wrap spawnSync in a shell. We need shell:true on Windows ONLY when
|
|
338
|
-
* relying on PATHEXT resolution of the literal "dotnet". When we have an
|
|
339
|
-
* absolute resolved path (e.g. "C:\\Program Files\\dotnet\\dotnet.exe"), shell:true
|
|
340
|
-
* triggers a quoting bug — cmd.exe splits the path at the first space and
|
|
341
|
-
* fails with "'C:\\Program' is not recognized". Use shell:false in that case.
|
|
342
|
-
*/
|
|
343
|
-
function dotnetSpawnShell(): boolean {
|
|
344
|
-
return NEEDS_SHELL && _resolvedDotnetPath === null;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
/** Test-only / diagnostic accessor. */
|
|
348
|
-
export function getDotnetDiagnostic(): string {
|
|
349
|
-
return _lastDotnetDetectDiagnostic;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
/**
|
|
353
|
-
* HEAD-check the NuGet flatcontainer index for a package id. Manually verified
|
|
354
|
-
* 2026-05-19 against Muonroi.Ui.Engine.Mvc (404) vs Muonroi.AspNetCore (200):
|
|
355
|
-
* each HEAD returns in 250-400ms vs the 5-10s timeout `dotnet add package`
|
|
356
|
-
* suffers when a 404 is discovered mid-resolution.
|
|
357
|
-
*
|
|
358
|
-
* On any error (DNS, abort, offline) → returns true so the dotnet command
|
|
359
|
-
* runs and reports the real error. Pre-validation is an optimization, not a
|
|
360
|
-
* gate.
|
|
361
|
-
*/
|
|
362
|
-
export async function isPackageOnNuGet(pkgId: string, timeoutMs = 3000): Promise<boolean> {
|
|
363
|
-
const ctl = new AbortController();
|
|
364
|
-
const timer = setTimeout(() => ctl.abort(), timeoutMs);
|
|
365
|
-
try {
|
|
366
|
-
const url = `https://api.nuget.org/v3-flatcontainer/${pkgId.toLowerCase()}/index.json`;
|
|
367
|
-
const res = await fetch(url, { method: "HEAD", signal: ctl.signal });
|
|
368
|
-
return res.ok;
|
|
369
|
-
} catch {
|
|
370
|
-
return true;
|
|
371
|
-
} finally {
|
|
372
|
-
clearTimeout(timer);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
/**
|
|
377
|
-
* Task 6.2 — Detect which BB templates are installed by parsing `dotnet new list`.
|
|
378
|
-
* Returns map of nugetId → shortName for installed templates.
|
|
379
|
-
*/
|
|
380
|
-
export function detectInstalledBBTemplates(): Map<string, string> {
|
|
381
|
-
const result = spawnSync(getDotnetCommand(), ["new", "list"], {
|
|
382
|
-
encoding: "utf8",
|
|
383
|
-
timeout: 15000,
|
|
384
|
-
shell: dotnetSpawnShell(),
|
|
385
|
-
});
|
|
386
|
-
const installed = new Map<string, string>();
|
|
387
|
-
if (result.status !== 0 || !result.stdout) return installed;
|
|
388
|
-
|
|
389
|
-
const lines = result.stdout.split("\n");
|
|
390
|
-
for (const [nugetId, expectedShort] of Object.entries(NUGET_TO_SHORTNAME)) {
|
|
391
|
-
// Match by known shortName or NuGet id in the output
|
|
392
|
-
const found = lines.some(
|
|
393
|
-
(l) => l.toLowerCase().includes(expectedShort.toLowerCase()) || l.toLowerCase().includes(nugetId.toLowerCase()),
|
|
394
|
-
);
|
|
395
|
-
if (found) {
|
|
396
|
-
installed.set(nugetId, expectedShort);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
return installed;
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
/**
|
|
403
|
-
* Task 6.2 — Install BB dotnet templates from NuGet with pinned versions.
|
|
404
|
-
* Returns true if install succeeded, false if NuGet unreachable.
|
|
405
|
-
*
|
|
406
|
-
* When `nugetIds` is provided, installs ONLY those packages (selective install
|
|
407
|
-
* triggered by EE-driven BB design — Plan 23-01b). When omitted, installs all
|
|
408
|
-
* `BB_TEMPLATE_PACKAGES` (back-compat for legacy callers and tests).
|
|
409
|
-
*
|
|
410
|
-
* Each package is installed individually as `Pkg@version` (canonical separator
|
|
411
|
-
* since dotnet 8; `::` is deprecated in dotnet 9+) so a single failure (e.g.
|
|
412
|
-
* one version yanked) does not abort the whole batch.
|
|
413
|
-
*
|
|
414
|
-
* Exit code 106 ("template package already installed") is treated as success —
|
|
415
|
-
* the package being available is what we need, regardless of whether this call
|
|
416
|
-
* installed it or it was already there.
|
|
417
|
-
*/
|
|
418
|
-
export function installBBTemplates(nugetIds?: string[]): boolean {
|
|
419
|
-
const targets =
|
|
420
|
-
nugetIds && nugetIds.length > 0
|
|
421
|
-
? BB_TEMPLATE_PACKAGES.filter((p) => nugetIds.includes(p.nugetId))
|
|
422
|
-
: BB_TEMPLATE_PACKAGES;
|
|
423
|
-
let allOk = true;
|
|
424
|
-
for (const pkg of targets) {
|
|
425
|
-
const ref = pkg.version === "latest" ? pkg.nugetId : `${pkg.nugetId}@${pkg.version}`;
|
|
426
|
-
const result = spawnSync(getDotnetCommand(), ["new", "install", ref], {
|
|
427
|
-
encoding: "utf8",
|
|
428
|
-
timeout: 60000,
|
|
429
|
-
shell: dotnetSpawnShell(),
|
|
430
|
-
});
|
|
431
|
-
// Plan 23-fix: `dotnet new install` can print warnings about stale template
|
|
432
|
-
// paths (e.g. `Failed to scan D:\Personal\Project\Foo`) and STILL succeed,
|
|
433
|
-
// yet exit non-zero on some SDK builds. Treat any of the following as success:
|
|
434
|
-
// - status === 0
|
|
435
|
-
// - status === 106 (legacy "already installed" code)
|
|
436
|
-
// - stdout contains "is already installed"
|
|
437
|
-
// - stdout contains "Success:" (canonical success marker emitted before
|
|
438
|
-
// the per-template summary table — present even when scan warnings fire)
|
|
439
|
-
const stdout = result.stdout ?? "";
|
|
440
|
-
const success =
|
|
441
|
-
result.status === 0 ||
|
|
442
|
-
result.status === 106 ||
|
|
443
|
-
stdout.includes("is already installed") ||
|
|
444
|
-
stdout.includes("Success:");
|
|
445
|
-
if (!success) {
|
|
446
|
-
process.stderr.write(`[init-new] dotnet new install failed (${ref}): ${result.stderr ?? "unknown error"}\n`);
|
|
447
|
-
allOk = false;
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
return allOk;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
// ---------------------------------------------------------------------------
|
|
454
|
-
// Public types
|
|
455
|
-
// ---------------------------------------------------------------------------
|
|
456
|
-
|
|
457
|
-
export interface InitNewOptions {
|
|
458
|
-
/** Target directory name; created at projectsRoot (or cwd). */
|
|
459
|
-
projectName: string;
|
|
460
|
-
/** "react" | "angular" | "none" */
|
|
461
|
-
feStack: "react" | "angular" | "none";
|
|
462
|
-
/** Where to write the project. Defaults to process.cwd(). */
|
|
463
|
-
projectsRoot?: string;
|
|
464
|
-
/**
|
|
465
|
-
* Task 6.2b / Plan 23-01b — BB template selection.
|
|
466
|
-
* When absent → FE-only project (BE scaffold skipped entirely).
|
|
467
|
-
* When provided → `dotnet new <shortName>` runs against the chosen template;
|
|
468
|
-
* the template is auto-installed from NuGet if not already present.
|
|
469
|
-
*/
|
|
470
|
-
bbTemplate?: BBTemplateInfo;
|
|
471
|
-
/**
|
|
472
|
-
* Task 6.2b — EE-recommended packages to inject into Directory.Packages.props.
|
|
473
|
-
* OSS-only by default; commercial packages require explicit --commercial flag.
|
|
474
|
-
*/
|
|
475
|
-
eePackages?: string[];
|
|
476
|
-
/**
|
|
477
|
-
* Task 6.4 — Allow commercial BB packages in the scaffold.
|
|
478
|
-
* Defaults to false (OSS-only).
|
|
479
|
-
*/
|
|
480
|
-
commercial?: boolean;
|
|
481
|
-
/** Optional override: inject filesystem operations for testability. */
|
|
482
|
-
fs?: {
|
|
483
|
-
mkdir: (p: string) => Promise<void>;
|
|
484
|
-
writeFile: (p: string, content: string) => Promise<void>;
|
|
485
|
-
exec: (cmd: string, cwd: string) => Promise<{ stdout: string; stderr: string }>;
|
|
486
|
-
exists: (p: string) => boolean;
|
|
487
|
-
};
|
|
488
|
-
/**
|
|
489
|
-
* Diagnostic log callback. When provided, replaces direct `process.stderr.write`
|
|
490
|
-
* which would bleed into the OpenTUI render buffer and corrupt the screen.
|
|
491
|
-
* Called once per warning/non-fatal error. Receives a single line (no trailing newline).
|
|
492
|
-
*/
|
|
493
|
-
onLog?: (line: string) => void;
|
|
494
|
-
/**
|
|
495
|
-
* Per-package progress callback during the `dotnet add package` loop. Lets the
|
|
496
|
-
* TUI update its "running" step with the current package index/name instead of
|
|
497
|
-
* appearing frozen for ~15s while 9 sequential NuGet lookups happen.
|
|
498
|
-
*/
|
|
499
|
-
onPackageProgress?: (info: {
|
|
500
|
-
index: number;
|
|
501
|
-
total: number;
|
|
502
|
-
pkgId: string;
|
|
503
|
-
status: "start" | "ok" | "fail";
|
|
504
|
-
error?: string;
|
|
505
|
-
}) => void;
|
|
506
|
-
/**
|
|
507
|
-
* Plan 23-fix — Template-missing hook. Called BEFORE auto-installing a missing
|
|
508
|
-
* BB template. Lets the TUI ask the user: install automatically, wait for
|
|
509
|
-
* manual install + retry detection, or cancel. When omitted, auto-install
|
|
510
|
-
* fires immediately (legacy behaviour).
|
|
511
|
-
*
|
|
512
|
-
* Return values:
|
|
513
|
-
* "install" — run `dotnet new install <pkg>@<version>` then re-check
|
|
514
|
-
* "wait-manual" — pause; caller re-checks `detectInstalledBBTemplates()`
|
|
515
|
-
* and re-invokes the hook until it returns "install" or
|
|
516
|
-
* "cancel". The hook implementation owns the wait loop.
|
|
517
|
-
* "cancel" — abort scaffold; throw a clear "template not installed" error.
|
|
518
|
-
*/
|
|
519
|
-
onTemplateMissing?: (info: {
|
|
520
|
-
shortName: string;
|
|
521
|
-
nugetId: string;
|
|
522
|
-
version: string;
|
|
523
|
-
}) => Promise<"install" | "wait-manual" | "cancel">;
|
|
524
|
-
/** Plan 23-fix — Progress callback during `dotnet new install`. */
|
|
525
|
-
onTemplateInstallProgress?: (info: { status: "start" | "ok" | "fail"; message?: string }) => void;
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
export interface InitNewResult {
|
|
529
|
-
projectDir: string;
|
|
530
|
-
/** Relative paths of files written (relative to projectDir). */
|
|
531
|
-
files: string[];
|
|
532
|
-
/** Whether the dotnet-template path ran successfully (false for FE-only projects). */
|
|
533
|
-
usedDotnetTemplate?: boolean;
|
|
534
|
-
/** Non-fatal warnings collected during scaffold (template install, package add, restore errors). */
|
|
535
|
-
warnings?: string[];
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
// ---------------------------------------------------------------------------
|
|
539
|
-
// Validation helpers
|
|
540
|
-
// ---------------------------------------------------------------------------
|
|
541
|
-
|
|
542
|
-
const VALID_NAME_RE = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/i;
|
|
543
|
-
|
|
544
|
-
function validateProjectName(name: string): void {
|
|
545
|
-
if (!name || name.trim().length === 0) {
|
|
546
|
-
throw new Error("Project name cannot be empty.");
|
|
547
|
-
}
|
|
548
|
-
if (name.includes("..") || name.includes("/") || name.includes("\\")) {
|
|
549
|
-
throw new Error(`Project name "${name}" contains path traversal characters. Use a simple name like "my-app".`);
|
|
550
|
-
}
|
|
551
|
-
if (!VALID_NAME_RE.test(name)) {
|
|
552
|
-
throw new Error(`Project name "${name}" is invalid. Use kebab-case alphanumeric only (e.g. "my-app", "project1").`);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
/**
|
|
557
|
-
* Convert a kebab-case (or snake_case) project name to a .NET-style
|
|
558
|
-
* PascalCase assembly/namespace prefix. Used for `dotnet new -n` so the
|
|
559
|
-
* generated .csproj, .sln, and `namespace` declarations follow .NET
|
|
560
|
-
* conventions, while the outer workspace folder + package.json keep the
|
|
561
|
-
* user's kebab name.
|
|
562
|
-
*
|
|
563
|
-
* Example: "todo-app" → "TodoApp", "my_cool-svc" → "MyCoolSvc"
|
|
564
|
-
*/
|
|
565
|
-
export function toDotNetAssemblyName(kebab: string): string {
|
|
566
|
-
return kebab
|
|
567
|
-
.split(/[-_]/)
|
|
568
|
-
.filter(Boolean)
|
|
569
|
-
.map((part) => part[0]!.toUpperCase() + part.slice(1).toLowerCase())
|
|
570
|
-
.join("");
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
// ---------------------------------------------------------------------------
|
|
574
|
-
// File templates
|
|
575
|
-
// ---------------------------------------------------------------------------
|
|
576
|
-
|
|
577
|
-
function rootPackageJson(projectName: string, hasClient: boolean): string {
|
|
578
|
-
const workspaces = hasClient ? '["server", "client"]' : '["server"]';
|
|
579
|
-
return JSON.stringify(
|
|
580
|
-
{
|
|
581
|
-
name: projectName,
|
|
582
|
-
version: "0.1.0",
|
|
583
|
-
private: true,
|
|
584
|
-
workspaces: JSON.parse(workspaces),
|
|
585
|
-
scripts: {
|
|
586
|
-
dev: "bun run --filter='*' dev",
|
|
587
|
-
build: "bun run --filter='*' build",
|
|
588
|
-
test: "bun run --filter='*' test",
|
|
589
|
-
},
|
|
590
|
-
},
|
|
591
|
-
null,
|
|
592
|
-
2,
|
|
593
|
-
);
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
function reactClientPackageJson(projectName: string): string {
|
|
597
|
-
return JSON.stringify(
|
|
598
|
-
{
|
|
599
|
-
name: `${projectName}-client`,
|
|
600
|
-
version: "0.1.0",
|
|
601
|
-
private: true,
|
|
602
|
-
scripts: {
|
|
603
|
-
dev: "vite",
|
|
604
|
-
build: "vite build",
|
|
605
|
-
test: "vitest run",
|
|
606
|
-
},
|
|
607
|
-
dependencies: {
|
|
608
|
-
react: "^18.3.0",
|
|
609
|
-
"react-dom": "^18.3.0",
|
|
610
|
-
"@muonroi/agent-harness-react": "^0.1.0",
|
|
611
|
-
},
|
|
612
|
-
devDependencies: {
|
|
613
|
-
"@types/react": "^18.3.0",
|
|
614
|
-
"@types/react-dom": "^18.3.0",
|
|
615
|
-
"@vitejs/plugin-react": "^4.3.0",
|
|
616
|
-
vite: "^5.4.0",
|
|
617
|
-
vitest: "^2.0.0",
|
|
618
|
-
},
|
|
619
|
-
},
|
|
620
|
-
null,
|
|
621
|
-
2,
|
|
622
|
-
);
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
function reactViteConfig(): string {
|
|
626
|
-
return `import { defineConfig } from "vite";
|
|
627
|
-
import react from "@vitejs/plugin-react";
|
|
628
|
-
|
|
629
|
-
export default defineConfig({
|
|
630
|
-
plugins: [react()],
|
|
631
|
-
define: {
|
|
632
|
-
__MUONROI_HARNESS__: JSON.stringify(process.env.NODE_ENV !== "production"),
|
|
633
|
-
},
|
|
634
|
-
});
|
|
635
|
-
`;
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
function reactIndexHtml(projectName: string): string {
|
|
639
|
-
return `<!doctype html>
|
|
640
|
-
<html lang="en">
|
|
641
|
-
<head>
|
|
642
|
-
<meta charset="UTF-8" />
|
|
643
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
644
|
-
<title>${projectName}</title>
|
|
645
|
-
</head>
|
|
646
|
-
<body>
|
|
647
|
-
<div id="root"></div>
|
|
648
|
-
<script type="module" src="/src/main.tsx"></script>
|
|
649
|
-
</body>
|
|
650
|
-
</html>
|
|
651
|
-
`;
|
|
652
|
-
}
|
|
653
|
-
|
|
654
|
-
function reactMainTsx(): string {
|
|
655
|
-
return `import { StrictMode } from "react";
|
|
656
|
-
import { createRoot } from "react-dom/client";
|
|
657
|
-
import { SemanticProvider, Semantic } from "@muonroi/agent-harness-react";
|
|
658
|
-
import { createSemanticRegistry } from "@muonroi/agent-harness-core/registry";
|
|
659
|
-
import { ErrorBoundary } from "./components/ErrorBoundary";
|
|
660
|
-
import "./styles/app.css";
|
|
661
|
-
|
|
662
|
-
const registry = createSemanticRegistry();
|
|
663
|
-
|
|
664
|
-
createRoot(document.getElementById("root")!).render(
|
|
665
|
-
<StrictMode>
|
|
666
|
-
<SemanticProvider registry={registry}>
|
|
667
|
-
<ErrorBoundary>
|
|
668
|
-
<Semantic id="root" role="region" name="App root">
|
|
669
|
-
{/* Your application components go here */}
|
|
670
|
-
<h1>Hello from ${"{projectName}"}</h1>
|
|
671
|
-
</Semantic>
|
|
672
|
-
</ErrorBoundary>
|
|
673
|
-
</SemanticProvider>
|
|
674
|
-
</StrictMode>,
|
|
675
|
-
);
|
|
676
|
-
`;
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
function reactTsConfig(): string {
|
|
680
|
-
return JSON.stringify(
|
|
681
|
-
{
|
|
682
|
-
compilerOptions: {
|
|
683
|
-
target: "ES2022",
|
|
684
|
-
useDefineForClassFields: true,
|
|
685
|
-
lib: ["ES2022", "DOM", "DOM.Iterable"],
|
|
686
|
-
module: "ESNext",
|
|
687
|
-
skipLibCheck: true,
|
|
688
|
-
moduleResolution: "bundler",
|
|
689
|
-
allowImportingTsExtensions: true,
|
|
690
|
-
resolveJsonModule: true,
|
|
691
|
-
isolatedModules: true,
|
|
692
|
-
noEmit: true,
|
|
693
|
-
jsx: "react-jsx",
|
|
694
|
-
strict: true,
|
|
695
|
-
noUnusedLocals: true,
|
|
696
|
-
noUnusedParameters: true,
|
|
697
|
-
noFallthroughCasesInSwitch: true,
|
|
698
|
-
types: ["vite/client"],
|
|
699
|
-
},
|
|
700
|
-
include: ["src"],
|
|
701
|
-
},
|
|
702
|
-
null,
|
|
703
|
-
2,
|
|
704
|
-
);
|
|
705
|
-
}
|
|
706
|
-
|
|
707
|
-
function reactEnvExample(): string {
|
|
708
|
-
return `# Copy to .env.local and edit. NEVER commit .env.local.
|
|
709
|
-
VITE_API_BASE=http://localhost:5000
|
|
710
|
-
`;
|
|
711
|
-
}
|
|
712
|
-
|
|
713
|
-
function reactGitignore(): string {
|
|
714
|
-
return `node_modules/
|
|
715
|
-
dist/
|
|
716
|
-
.env
|
|
717
|
-
.env.local
|
|
718
|
-
.env.*.local
|
|
719
|
-
*.log
|
|
720
|
-
.vite/
|
|
721
|
-
coverage/
|
|
722
|
-
`;
|
|
723
|
-
}
|
|
724
|
-
|
|
725
|
-
function reactReadme(projectName: string): string {
|
|
726
|
-
return `# ${projectName} — client
|
|
727
|
-
|
|
728
|
-
React + Vite + TypeScript (strict) frontend wired to the agent harness via
|
|
729
|
-
\`@muonroi/agent-harness-react\`.
|
|
730
|
-
|
|
731
|
-
## Setup
|
|
732
|
-
|
|
733
|
-
\`\`\`bash
|
|
734
|
-
bun install
|
|
735
|
-
cp .env.example .env.local # then edit VITE_API_BASE
|
|
736
|
-
bun run dev
|
|
737
|
-
\`\`\`
|
|
738
|
-
|
|
739
|
-
## Layout
|
|
740
|
-
|
|
741
|
-
- \`src/api/\` — typed HTTP client + DTO types (mirror server contracts)
|
|
742
|
-
- \`src/components/\` — reusable UI (ErrorBoundary, Toast)
|
|
743
|
-
- \`src/styles/\` — tokens + global reset
|
|
744
|
-
- \`src/main.tsx\` — bootstrap (do NOT remove SemanticProvider)
|
|
745
|
-
|
|
746
|
-
## Conventions
|
|
747
|
-
|
|
748
|
-
- Every async view has loading / empty / error states.
|
|
749
|
-
- No inline \`style={{...}}\` — use CSS modules or tokens from \`styles/app.css\`.
|
|
750
|
-
- API base lives in \`import.meta.env.VITE_API_BASE\`. Never hardcode URLs.
|
|
751
|
-
- Wrap user-visible regions with \`<Semantic id role name>\` so harness specs can target them.
|
|
752
|
-
`;
|
|
753
|
-
}
|
|
754
|
-
|
|
755
|
-
function reactApiClient(): string {
|
|
756
|
-
return `/**
|
|
757
|
-
* Typed HTTP client. Reads API base from \`VITE_API_BASE\` env var.
|
|
758
|
-
* Never hardcode URLs in components — import this client.
|
|
759
|
-
*/
|
|
760
|
-
|
|
761
|
-
const API_BASE: string = import.meta.env.VITE_API_BASE ?? "";
|
|
762
|
-
|
|
763
|
-
if (!API_BASE) {
|
|
764
|
-
// Surfaces during dev if VITE_API_BASE is missing from .env.local.
|
|
765
|
-
console.warn("[api] VITE_API_BASE is empty — set it in .env.local");
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
export class ApiError extends Error {
|
|
769
|
-
constructor(public readonly status: number, public readonly body: unknown, message: string) {
|
|
770
|
-
super(message);
|
|
771
|
-
this.name = "ApiError";
|
|
772
|
-
}
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
interface RequestOptions {
|
|
776
|
-
method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
777
|
-
body?: unknown;
|
|
778
|
-
signal?: AbortSignal;
|
|
779
|
-
token?: string | null;
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
export async function apiFetch<T>(path: string, opts: RequestOptions = {}): Promise<T> {
|
|
783
|
-
const headers: Record<string, string> = { "Content-Type": "application/json" };
|
|
784
|
-
const token = opts.token ?? (typeof localStorage !== "undefined" ? localStorage.getItem("access_token") : null);
|
|
785
|
-
if (token) headers.Authorization = \`Bearer \${token}\`;
|
|
786
|
-
|
|
787
|
-
const res = await fetch(\`\${API_BASE}\${path}\`, {
|
|
788
|
-
method: opts.method ?? "GET",
|
|
789
|
-
headers,
|
|
790
|
-
body: opts.body ? JSON.stringify(opts.body) : undefined,
|
|
791
|
-
signal: opts.signal,
|
|
792
|
-
});
|
|
793
|
-
|
|
794
|
-
let body: unknown = null;
|
|
795
|
-
const text = await res.text();
|
|
796
|
-
if (text) {
|
|
797
|
-
try {
|
|
798
|
-
body = JSON.parse(text);
|
|
799
|
-
} catch {
|
|
800
|
-
body = text;
|
|
801
|
-
}
|
|
802
|
-
}
|
|
803
|
-
|
|
804
|
-
if (!res.ok) {
|
|
805
|
-
throw new ApiError(res.status, body, \`HTTP \${res.status} on \${opts.method ?? "GET"} \${path}\`);
|
|
806
|
-
}
|
|
807
|
-
return body as T;
|
|
808
|
-
}
|
|
809
|
-
`;
|
|
810
|
-
}
|
|
811
|
-
|
|
812
|
-
function reactApiTypes(): string {
|
|
813
|
-
return `/**
|
|
814
|
-
* API request/response DTOs. Mirror server-side contracts here so the
|
|
815
|
-
* compiler catches contract drift early. Replace the placeholder once
|
|
816
|
-
* you generate domain types.
|
|
817
|
-
*/
|
|
818
|
-
export interface Envelope<T> {
|
|
819
|
-
result: T;
|
|
820
|
-
error?: string | null;
|
|
821
|
-
}
|
|
822
|
-
|
|
823
|
-
// EXAMPLE — delete or replace with your real DTOs.
|
|
824
|
-
// export interface TodoDto {
|
|
825
|
-
// id: string;
|
|
826
|
-
// title: string;
|
|
827
|
-
// isCompleted: boolean;
|
|
828
|
-
// createdAt: string;
|
|
829
|
-
// }
|
|
830
|
-
export {};
|
|
831
|
-
`;
|
|
832
|
-
}
|
|
833
|
-
|
|
834
|
-
function reactErrorBoundary(): string {
|
|
835
|
-
return `import { Component, type ErrorInfo, type ReactNode } from "react";
|
|
836
|
-
|
|
837
|
-
interface Props {
|
|
838
|
-
children: ReactNode;
|
|
839
|
-
fallback?: (error: Error) => ReactNode;
|
|
840
|
-
}
|
|
841
|
-
|
|
842
|
-
interface State {
|
|
843
|
-
error: Error | null;
|
|
844
|
-
}
|
|
845
|
-
|
|
846
|
-
/**
|
|
847
|
-
* Root-level error boundary. Catches uncaught render/effect errors and
|
|
848
|
-
* shows a fallback instead of an unmounted blank page. Logs to console
|
|
849
|
-
* for dev; replace the logger with your telemetry sink in prod.
|
|
850
|
-
*/
|
|
851
|
-
export class ErrorBoundary extends Component<Props, State> {
|
|
852
|
-
state: State = { error: null };
|
|
853
|
-
|
|
854
|
-
static getDerivedStateFromError(error: Error): State {
|
|
855
|
-
return { error };
|
|
856
|
-
}
|
|
857
|
-
|
|
858
|
-
componentDidCatch(error: Error, info: ErrorInfo): void {
|
|
859
|
-
console.error("[ErrorBoundary]", error, info);
|
|
860
|
-
}
|
|
861
|
-
|
|
862
|
-
render(): ReactNode {
|
|
863
|
-
if (this.state.error) {
|
|
864
|
-
if (this.props.fallback) return this.props.fallback(this.state.error);
|
|
865
|
-
return (
|
|
866
|
-
<div role="alert" style={{ padding: "1rem", color: "var(--color-error, #b91c1c)" }}>
|
|
867
|
-
<h2>Something went wrong</h2>
|
|
868
|
-
<pre style={{ whiteSpace: "pre-wrap" }}>{this.state.error.message}</pre>
|
|
869
|
-
</div>
|
|
870
|
-
);
|
|
871
|
-
}
|
|
872
|
-
return this.props.children;
|
|
873
|
-
}
|
|
874
|
-
}
|
|
875
|
-
`;
|
|
876
|
-
}
|
|
877
|
-
|
|
878
|
-
function reactAppCss(): string {
|
|
879
|
-
return `:root {
|
|
880
|
-
--color-bg: #ffffff;
|
|
881
|
-
--color-fg: #111827;
|
|
882
|
-
--color-muted: #6b7280;
|
|
883
|
-
--color-primary: #2563eb;
|
|
884
|
-
--color-primary-hover: #1d4ed8;
|
|
885
|
-
--color-border: #e5e7eb;
|
|
886
|
-
--color-error: #b91c1c;
|
|
887
|
-
--color-success: #15803d;
|
|
888
|
-
--space-1: 0.25rem;
|
|
889
|
-
--space-2: 0.5rem;
|
|
890
|
-
--space-3: 0.75rem;
|
|
891
|
-
--space-4: 1rem;
|
|
892
|
-
--space-6: 1.5rem;
|
|
893
|
-
--space-8: 2rem;
|
|
894
|
-
--radius: 0.5rem;
|
|
895
|
-
--font-stack: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
896
|
-
}
|
|
897
|
-
|
|
898
|
-
@media (prefers-color-scheme: dark) {
|
|
899
|
-
:root {
|
|
900
|
-
--color-bg: #0b1220;
|
|
901
|
-
--color-fg: #f3f4f6;
|
|
902
|
-
--color-muted: #9ca3af;
|
|
903
|
-
--color-border: #1f2937;
|
|
904
|
-
}
|
|
905
|
-
}
|
|
906
|
-
|
|
907
|
-
* { box-sizing: border-box; }
|
|
908
|
-
html, body, #root { height: 100%; }
|
|
909
|
-
body {
|
|
910
|
-
margin: 0;
|
|
911
|
-
background: var(--color-bg);
|
|
912
|
-
color: var(--color-fg);
|
|
913
|
-
font-family: var(--font-stack);
|
|
914
|
-
line-height: 1.5;
|
|
915
|
-
}
|
|
916
|
-
button { font: inherit; cursor: pointer; }
|
|
917
|
-
input, textarea, select { font: inherit; }
|
|
918
|
-
a { color: var(--color-primary); }
|
|
919
|
-
`;
|
|
920
|
-
}
|
|
921
|
-
|
|
922
|
-
function angularClientPackageJson(projectName: string): string {
|
|
923
|
-
return JSON.stringify(
|
|
924
|
-
{
|
|
925
|
-
name: `${projectName}-client`,
|
|
926
|
-
version: "0.1.0",
|
|
927
|
-
private: true,
|
|
928
|
-
scripts: {
|
|
929
|
-
dev: "ng serve",
|
|
930
|
-
build: "ng build",
|
|
931
|
-
test: "ng test --watch=false",
|
|
932
|
-
},
|
|
933
|
-
dependencies: {
|
|
934
|
-
"@angular/core": "^18.0.0",
|
|
935
|
-
"@angular/common": "^18.0.0",
|
|
936
|
-
"@angular/platform-browser": "^18.0.0",
|
|
937
|
-
"@muonroi/agent-harness-angular": "^0.1.0",
|
|
938
|
-
},
|
|
939
|
-
devDependencies: {
|
|
940
|
-
"@angular/cli": "^18.0.0",
|
|
941
|
-
"@angular/compiler-cli": "^18.0.0",
|
|
942
|
-
typescript: "^5.4.0",
|
|
943
|
-
},
|
|
944
|
-
},
|
|
945
|
-
null,
|
|
946
|
-
2,
|
|
947
|
-
);
|
|
948
|
-
}
|
|
949
|
-
|
|
950
|
-
function angularMainTs(): string {
|
|
951
|
-
return `import { bootstrapApplication } from "@angular/platform-browser";
|
|
952
|
-
import { ErrorHandler } from "@angular/core";
|
|
953
|
-
import { provideHttpClient } from "@angular/common/http";
|
|
954
|
-
import { AppComponent } from "./app/app.component";
|
|
955
|
-
import { AppErrorHandler } from "./app/error-handler";
|
|
956
|
-
import "./styles.css";
|
|
957
|
-
|
|
958
|
-
bootstrapApplication(AppComponent, {
|
|
959
|
-
providers: [
|
|
960
|
-
provideHttpClient(),
|
|
961
|
-
{ provide: ErrorHandler, useClass: AppErrorHandler },
|
|
962
|
-
],
|
|
963
|
-
}).catch((err) => console.error(err));
|
|
964
|
-
`;
|
|
965
|
-
}
|
|
966
|
-
|
|
967
|
-
function angularAppComponentTs(projectName: string): string {
|
|
968
|
-
return `import { Component } from "@angular/core";
|
|
969
|
-
import { SemanticDirective } from "@muonroi/agent-harness-angular";
|
|
970
|
-
|
|
971
|
-
@Component({
|
|
972
|
-
selector: "app-root",
|
|
973
|
-
standalone: true,
|
|
974
|
-
imports: [SemanticDirective],
|
|
975
|
-
template: \`
|
|
976
|
-
<div muonroiSemantic id="root" role="region" name="App root">
|
|
977
|
-
<!-- Your application components go here -->
|
|
978
|
-
<h1>Hello from ${projectName}</h1>
|
|
979
|
-
</div>
|
|
980
|
-
\`,
|
|
981
|
-
})
|
|
982
|
-
export class AppComponent {}
|
|
983
|
-
`;
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
function angularTsConfig(): string {
|
|
987
|
-
return JSON.stringify(
|
|
988
|
-
{
|
|
989
|
-
compilerOptions: {
|
|
990
|
-
target: "ES2022",
|
|
991
|
-
module: "ES2022",
|
|
992
|
-
lib: ["ES2022", "dom"],
|
|
993
|
-
strict: true,
|
|
994
|
-
noImplicitOverride: true,
|
|
995
|
-
noPropertyAccessFromIndexSignature: true,
|
|
996
|
-
noImplicitReturns: true,
|
|
997
|
-
noFallthroughCasesInSwitch: true,
|
|
998
|
-
experimentalDecorators: true,
|
|
999
|
-
emitDecoratorMetadata: false,
|
|
1000
|
-
moduleResolution: "bundler",
|
|
1001
|
-
},
|
|
1002
|
-
},
|
|
1003
|
-
null,
|
|
1004
|
-
2,
|
|
1005
|
-
);
|
|
1006
|
-
}
|
|
1007
|
-
|
|
1008
|
-
function angularEnvironmentTs(): string {
|
|
1009
|
-
return `/**
|
|
1010
|
-
* Build-time environment config. Angular CLI swaps this file with
|
|
1011
|
-
* \`environment.prod.ts\` when building for production via fileReplacements
|
|
1012
|
-
* in angular.json. Never hardcode API URLs in components — import this.
|
|
1013
|
-
*/
|
|
1014
|
-
export const environment = {
|
|
1015
|
-
production: false,
|
|
1016
|
-
apiBase: "http://localhost:5000",
|
|
1017
|
-
};
|
|
1018
|
-
`;
|
|
1019
|
-
}
|
|
1020
|
-
|
|
1021
|
-
function angularEnvironmentProdTs(): string {
|
|
1022
|
-
return `export const environment = {
|
|
1023
|
-
production: true,
|
|
1024
|
-
// Replaced at build time; set via your deploy pipeline.
|
|
1025
|
-
apiBase: "",
|
|
1026
|
-
};
|
|
1027
|
-
`;
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
|
-
function angularApiServiceTs(): string {
|
|
1031
|
-
return `import { Injectable, inject } from "@angular/core";
|
|
1032
|
-
import { HttpClient, HttpErrorResponse, HttpHeaders } from "@angular/common/http";
|
|
1033
|
-
import { Observable, catchError, throwError } from "rxjs";
|
|
1034
|
-
import { environment } from "../environments/environment";
|
|
1035
|
-
|
|
1036
|
-
/**
|
|
1037
|
-
* Typed HTTP client wrapper. Reads API base from environment.apiBase.
|
|
1038
|
-
* Components must call methods on this service, never inject HttpClient
|
|
1039
|
-
* directly, so URL configuration stays centralized.
|
|
1040
|
-
*/
|
|
1041
|
-
export class ApiError extends Error {
|
|
1042
|
-
constructor(public readonly status: number, public readonly body: unknown, message: string) {
|
|
1043
|
-
super(message);
|
|
1044
|
-
this.name = "ApiError";
|
|
1045
|
-
}
|
|
1046
|
-
}
|
|
1047
|
-
|
|
1048
|
-
@Injectable({ providedIn: "root" })
|
|
1049
|
-
export class ApiService {
|
|
1050
|
-
private readonly http = inject(HttpClient);
|
|
1051
|
-
|
|
1052
|
-
private headers(): HttpHeaders {
|
|
1053
|
-
let h = new HttpHeaders({ "Content-Type": "application/json" });
|
|
1054
|
-
const token =
|
|
1055
|
-
typeof localStorage !== "undefined" ? localStorage.getItem("access_token") : null;
|
|
1056
|
-
if (token) h = h.set("Authorization", \`Bearer \${token}\`);
|
|
1057
|
-
return h;
|
|
1058
|
-
}
|
|
1059
|
-
|
|
1060
|
-
private wrap<T>(obs: Observable<T>): Observable<T> {
|
|
1061
|
-
return obs.pipe(
|
|
1062
|
-
catchError((err: HttpErrorResponse) =>
|
|
1063
|
-
throwError(() => new ApiError(err.status, err.error, err.message)),
|
|
1064
|
-
),
|
|
1065
|
-
);
|
|
1066
|
-
}
|
|
1067
|
-
|
|
1068
|
-
get<T>(path: string): Observable<T> {
|
|
1069
|
-
return this.wrap(this.http.get<T>(\`\${environment.apiBase}\${path}\`, { headers: this.headers() }));
|
|
1070
|
-
}
|
|
1071
|
-
|
|
1072
|
-
post<T>(path: string, body: unknown): Observable<T> {
|
|
1073
|
-
return this.wrap(
|
|
1074
|
-
this.http.post<T>(\`\${environment.apiBase}\${path}\`, body, { headers: this.headers() }),
|
|
1075
|
-
);
|
|
1076
|
-
}
|
|
1077
|
-
|
|
1078
|
-
put<T>(path: string, body: unknown): Observable<T> {
|
|
1079
|
-
return this.wrap(
|
|
1080
|
-
this.http.put<T>(\`\${environment.apiBase}\${path}\`, body, { headers: this.headers() }),
|
|
1081
|
-
);
|
|
1082
|
-
}
|
|
1083
|
-
|
|
1084
|
-
delete<T>(path: string): Observable<T> {
|
|
1085
|
-
return this.wrap(
|
|
1086
|
-
this.http.delete<T>(\`\${environment.apiBase}\${path}\`, { headers: this.headers() }),
|
|
1087
|
-
);
|
|
1088
|
-
}
|
|
1089
|
-
}
|
|
1090
|
-
`;
|
|
1091
|
-
}
|
|
1092
|
-
|
|
1093
|
-
function angularErrorHandlerTs(): string {
|
|
1094
|
-
return `import { ErrorHandler, Injectable } from "@angular/core";
|
|
1095
|
-
|
|
1096
|
-
/**
|
|
1097
|
-
* Root error handler. Replace the console sink with your telemetry
|
|
1098
|
-
* provider in prod. Angular wires this via providers: [{ provide:
|
|
1099
|
-
* ErrorHandler, useClass: AppErrorHandler }].
|
|
1100
|
-
*/
|
|
1101
|
-
@Injectable({ providedIn: "root" })
|
|
1102
|
-
export class AppErrorHandler implements ErrorHandler {
|
|
1103
|
-
handleError(error: unknown): void {
|
|
1104
|
-
console.error("[AppErrorHandler]", error);
|
|
1105
|
-
}
|
|
1106
|
-
}
|
|
1107
|
-
`;
|
|
1108
|
-
}
|
|
1109
|
-
|
|
1110
|
-
function angularStylesCss(): string {
|
|
1111
|
-
return `:root {
|
|
1112
|
-
--color-bg: #ffffff;
|
|
1113
|
-
--color-fg: #111827;
|
|
1114
|
-
--color-muted: #6b7280;
|
|
1115
|
-
--color-primary: #2563eb;
|
|
1116
|
-
--color-primary-hover: #1d4ed8;
|
|
1117
|
-
--color-border: #e5e7eb;
|
|
1118
|
-
--color-error: #b91c1c;
|
|
1119
|
-
--color-success: #15803d;
|
|
1120
|
-
--space-1: 0.25rem;
|
|
1121
|
-
--space-2: 0.5rem;
|
|
1122
|
-
--space-3: 0.75rem;
|
|
1123
|
-
--space-4: 1rem;
|
|
1124
|
-
--space-6: 1.5rem;
|
|
1125
|
-
--space-8: 2rem;
|
|
1126
|
-
--radius: 0.5rem;
|
|
1127
|
-
--font-stack: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
1128
|
-
}
|
|
1129
|
-
|
|
1130
|
-
@media (prefers-color-scheme: dark) {
|
|
1131
|
-
:root {
|
|
1132
|
-
--color-bg: #0b1220;
|
|
1133
|
-
--color-fg: #f3f4f6;
|
|
1134
|
-
--color-muted: #9ca3af;
|
|
1135
|
-
--color-border: #1f2937;
|
|
1136
|
-
}
|
|
1137
|
-
}
|
|
1138
|
-
|
|
1139
|
-
* { box-sizing: border-box; }
|
|
1140
|
-
html, body { height: 100%; margin: 0; }
|
|
1141
|
-
body {
|
|
1142
|
-
background: var(--color-bg);
|
|
1143
|
-
color: var(--color-fg);
|
|
1144
|
-
font-family: var(--font-stack);
|
|
1145
|
-
line-height: 1.5;
|
|
1146
|
-
}
|
|
1147
|
-
button { font: inherit; cursor: pointer; }
|
|
1148
|
-
input, textarea, select { font: inherit; }
|
|
1149
|
-
a { color: var(--color-primary); }
|
|
1150
|
-
`;
|
|
1151
|
-
}
|
|
1152
|
-
|
|
1153
|
-
function angularGitignore(): string {
|
|
1154
|
-
return `node_modules/
|
|
1155
|
-
dist/
|
|
1156
|
-
.angular/
|
|
1157
|
-
.env
|
|
1158
|
-
.env.local
|
|
1159
|
-
*.log
|
|
1160
|
-
coverage/
|
|
1161
|
-
`;
|
|
1162
|
-
}
|
|
1163
|
-
|
|
1164
|
-
function angularReadme(projectName: string): string {
|
|
1165
|
-
return `# ${projectName} — client
|
|
1166
|
-
|
|
1167
|
-
Angular (standalone components) + agent harness via \`@muonroi/agent-harness-angular\`.
|
|
1168
|
-
|
|
1169
|
-
## Setup
|
|
1170
|
-
|
|
1171
|
-
\`\`\`bash
|
|
1172
|
-
bun install
|
|
1173
|
-
bun run dev
|
|
1174
|
-
\`\`\`
|
|
1175
|
-
|
|
1176
|
-
Edit \`src/environments/environment.ts\` to point \`apiBase\` at your backend.
|
|
1177
|
-
|
|
1178
|
-
## Layout
|
|
1179
|
-
|
|
1180
|
-
- \`src/api/\` — \`ApiService\` (typed HTTP) + DTO types
|
|
1181
|
-
- \`src/environments/\` — env config (dev + prod). \`apiBase\` is the only URL knob.
|
|
1182
|
-
- \`src/app/\` — components. Do NOT remove \`muonroiSemantic\` attributes.
|
|
1183
|
-
|
|
1184
|
-
## Conventions
|
|
1185
|
-
|
|
1186
|
-
- Every async view has loading / empty / error states.
|
|
1187
|
-
- API URLs come from \`environment.apiBase\`. Never hardcode.
|
|
1188
|
-
- Wrap user-visible regions with \`[muonroiSemantic]\` so harness specs can target them.
|
|
1189
|
-
- AppErrorHandler is wired via providers — extend it instead of console.error.
|
|
1190
|
-
`;
|
|
1191
|
-
}
|
|
1192
|
-
|
|
1193
|
-
function angularApiTypes(): string {
|
|
1194
|
-
return `/**
|
|
1195
|
-
* API request/response DTOs. Mirror server-side contracts here so the
|
|
1196
|
-
* compiler catches contract drift early.
|
|
1197
|
-
*/
|
|
1198
|
-
export interface Envelope<T> {
|
|
1199
|
-
result: T;
|
|
1200
|
-
error?: string | null;
|
|
1201
|
-
}
|
|
1202
|
-
export {};
|
|
1203
|
-
`;
|
|
1204
|
-
}
|
|
1205
|
-
|
|
1206
|
-
// ---------------------------------------------------------------------------
|
|
1207
|
-
// Main scaffolder
|
|
1208
|
-
// ---------------------------------------------------------------------------
|
|
1209
|
-
|
|
1210
|
-
export async function initNewProject(opts: InitNewOptions): Promise<InitNewResult> {
|
|
1211
|
-
const { projectName, feStack, projectsRoot } = opts;
|
|
1212
|
-
|
|
1213
|
-
// 1. Validate project name.
|
|
1214
|
-
validateProjectName(projectName);
|
|
1215
|
-
|
|
1216
|
-
// 2. Resolve project directory.
|
|
1217
|
-
const root = projectsRoot ?? process.cwd();
|
|
1218
|
-
const projectDir = path.join(root, projectName);
|
|
1219
|
-
|
|
1220
|
-
// Inject or use real fs/exec.
|
|
1221
|
-
const fsOps = opts.fs ?? {
|
|
1222
|
-
mkdir: (p: string) => fsMkdir(p, { recursive: true }),
|
|
1223
|
-
writeFile: (p: string, content: string) => fsWriteFile(p, content, "utf-8"),
|
|
1224
|
-
exec: (cmd: string, cwd: string) => execAsync(cmd, { cwd }),
|
|
1225
|
-
exists: (p: string) => existsSync(p),
|
|
1226
|
-
};
|
|
1227
|
-
|
|
1228
|
-
// 3. Refuse if projectDir already exists.
|
|
1229
|
-
if (fsOps.exists(projectDir)) {
|
|
1230
|
-
throw new Error(`Project directory already exists: ${projectDir}`);
|
|
1231
|
-
}
|
|
1232
|
-
|
|
1233
|
-
const hasClient = feStack !== "none";
|
|
1234
|
-
const filesWritten: string[] = [];
|
|
1235
|
-
const warnings: string[] = [];
|
|
1236
|
-
const logWarn = (line: string): void => {
|
|
1237
|
-
warnings.push(line);
|
|
1238
|
-
opts.onLog?.(line);
|
|
1239
|
-
};
|
|
1240
|
-
|
|
1241
|
-
// Helper to write and track. Ensures parent dir exists so nested paths
|
|
1242
|
-
// (client/src/api/, client/src/components/, client/src/styles/,
|
|
1243
|
-
// client/src/environments/) don't ENOENT when the step-4 mkdir list misses
|
|
1244
|
-
// them. fsOps.mkdir defaults to recursive; idempotent on existing dirs.
|
|
1245
|
-
async function write(relPath: string, content: string) {
|
|
1246
|
-
const full = path.join(projectDir, relPath);
|
|
1247
|
-
await fsOps.mkdir(path.dirname(full));
|
|
1248
|
-
await fsOps.writeFile(full, content);
|
|
1249
|
-
filesWritten.push(relPath);
|
|
1250
|
-
}
|
|
1251
|
-
|
|
1252
|
-
// 4. Create project directories.
|
|
1253
|
-
await fsOps.mkdir(projectDir);
|
|
1254
|
-
await fsOps.mkdir(path.join(projectDir, "server"));
|
|
1255
|
-
if (hasClient) {
|
|
1256
|
-
await fsOps.mkdir(path.join(projectDir, "client"));
|
|
1257
|
-
await fsOps.mkdir(path.join(projectDir, "client", "src"));
|
|
1258
|
-
if (feStack === "angular") {
|
|
1259
|
-
await fsOps.mkdir(path.join(projectDir, "client", "src", "app"));
|
|
1260
|
-
}
|
|
1261
|
-
}
|
|
1262
|
-
|
|
1263
|
-
// 5. Write root package.json.
|
|
1264
|
-
await write("package.json", rootPackageJson(projectName, hasClient));
|
|
1265
|
-
|
|
1266
|
-
// 6. Task 6.3 / Plan 23-01b — Scaffold BE source via `dotnet new <bbTemplate>`.
|
|
1267
|
-
// Auto-installs the BB template from NuGet when not already present
|
|
1268
|
-
// (selective: only the chosen template, via `installBBTemplates([nugetId])`).
|
|
1269
|
-
// After scaffold + restore, runs `dotnet add package <id>` for each
|
|
1270
|
-
// EE-recommended package so .csproj <PackageReference> entries are added
|
|
1271
|
-
// by the SDK (Directory.Packages.props still pins versions when present).
|
|
1272
|
-
// The legacy git-clone fallback has been retired (Plan 23-01b).
|
|
1273
|
-
const serverDir = path.join(projectDir, "server");
|
|
1274
|
-
let usedDotnetTemplate = false;
|
|
1275
|
-
|
|
1276
|
-
if (opts.bbTemplate) {
|
|
1277
|
-
const dotnetVersion = detectDotnet();
|
|
1278
|
-
if (!dotnetVersion) {
|
|
1279
|
-
const diag = getDotnetDiagnostic();
|
|
1280
|
-
throw new Error(
|
|
1281
|
-
`Scaffold failed: .NET SDK not found on PATH.\n` +
|
|
1282
|
-
`→ Install .NET SDK 8.0 or 9.0 from https://dotnet.microsoft.com/download\n` +
|
|
1283
|
-
` (BB template ${opts.bbTemplate.shortName} requires SDK ${getMinSdkMajor(opts.bbTemplate.nugetId) ?? 8}+)\n` +
|
|
1284
|
-
(diag ? ` diagnostic: ${diag}` : ""),
|
|
1285
|
-
);
|
|
1286
|
-
}
|
|
1287
|
-
// Plan 23-XX — SDK version compatibility pre-flight.
|
|
1288
|
-
const sdkMajor = parseDotnetMajor(dotnetVersion);
|
|
1289
|
-
const required = getMinSdkMajor(opts.bbTemplate.nugetId);
|
|
1290
|
-
if (sdkMajor !== null && required !== null && sdkMajor < required) {
|
|
1291
|
-
throw new Error(
|
|
1292
|
-
`Scaffold failed: .NET SDK ${dotnetVersion} is too old.\n` +
|
|
1293
|
-
`→ Template ${opts.bbTemplate.shortName} (${opts.bbTemplate.nugetId}@${opts.bbTemplate.version}) requires SDK ${required}.0+ runtime.\n` +
|
|
1294
|
-
` Install SDK ${required}.0 from https://dotnet.microsoft.com/download/dotnet/${required}.0\n` +
|
|
1295
|
-
` Alternatively, pick a different template via the manual menu (Esc → select another template).`,
|
|
1296
|
-
);
|
|
1297
|
-
}
|
|
1298
|
-
// Plan 23-01b — auto-install the chosen BB template from NuGet if missing.
|
|
1299
|
-
// Plan 23-fix — when `onTemplateMissing` hook is provided, prompt the user
|
|
1300
|
-
// before running `dotnet new install`. Hook can also signal that the user
|
|
1301
|
-
// will install manually (we re-poll detection) or cancel outright.
|
|
1302
|
-
{
|
|
1303
|
-
let installed = detectInstalledBBTemplates();
|
|
1304
|
-
if (!installed.has(opts.bbTemplate.nugetId)) {
|
|
1305
|
-
let decision: "install" | "wait-manual" | "cancel" = "install";
|
|
1306
|
-
if (opts.onTemplateMissing) {
|
|
1307
|
-
decision = await opts.onTemplateMissing({
|
|
1308
|
-
shortName: opts.bbTemplate.shortName,
|
|
1309
|
-
nugetId: opts.bbTemplate.nugetId,
|
|
1310
|
-
version: opts.bbTemplate.version,
|
|
1311
|
-
});
|
|
1312
|
-
}
|
|
1313
|
-
if (decision === "cancel") {
|
|
1314
|
-
throw new Error(
|
|
1315
|
-
`Scaffold cancelled: template ${opts.bbTemplate.nugetId}@${opts.bbTemplate.version} is not installed.\n` +
|
|
1316
|
-
`→ Install manually then retry:\n` +
|
|
1317
|
-
` dotnet new install ${opts.bbTemplate.nugetId}@${opts.bbTemplate.version}`,
|
|
1318
|
-
);
|
|
1319
|
-
}
|
|
1320
|
-
if (decision === "wait-manual") {
|
|
1321
|
-
// The UI is responsible for re-invoking init-new once the user
|
|
1322
|
-
// signals install complete. Re-check detection one more time in case
|
|
1323
|
-
// the hook implementation already waited; if still missing, bail out
|
|
1324
|
-
// with the manual-install hint.
|
|
1325
|
-
installed = detectInstalledBBTemplates();
|
|
1326
|
-
if (!installed.has(opts.bbTemplate.nugetId)) {
|
|
1327
|
-
throw new Error(
|
|
1328
|
-
`Scaffold paused: template ${opts.bbTemplate.nugetId}@${opts.bbTemplate.version} still not installed after manual wait.\n` +
|
|
1329
|
-
`→ Run:\n` +
|
|
1330
|
-
` dotnet new install ${opts.bbTemplate.nugetId}@${opts.bbTemplate.version}\n` +
|
|
1331
|
-
` then press Retry.`,
|
|
1332
|
-
);
|
|
1333
|
-
}
|
|
1334
|
-
} else {
|
|
1335
|
-
// decision === "install" — run auto-install.
|
|
1336
|
-
opts.onTemplateInstallProgress?.({
|
|
1337
|
-
status: "start",
|
|
1338
|
-
message: `dotnet new install ${opts.bbTemplate.nugetId}@${opts.bbTemplate.version}`,
|
|
1339
|
-
});
|
|
1340
|
-
const ok = installBBTemplates([opts.bbTemplate.nugetId]);
|
|
1341
|
-
if (!ok) {
|
|
1342
|
-
opts.onTemplateInstallProgress?.({ status: "fail", message: "dotnet new install returned an error" });
|
|
1343
|
-
logWarn(`[init-new] failed to install ${opts.bbTemplate.nugetId} from NuGet`);
|
|
1344
|
-
// fall through to throw below (no clone fallback)
|
|
1345
|
-
} else {
|
|
1346
|
-
opts.onTemplateInstallProgress?.({ status: "ok" });
|
|
1347
|
-
// Re-check after install. Some `dotnet new install` runs print
|
|
1348
|
-
// warnings and return non-zero even though the template registered
|
|
1349
|
-
// successfully — `installBBTemplates` would have reported false but
|
|
1350
|
-
// the post-install detection is the source of truth.
|
|
1351
|
-
installed = detectInstalledBBTemplates();
|
|
1352
|
-
if (installed.has(opts.bbTemplate.nugetId)) {
|
|
1353
|
-
logWarn(`[init-new] template ${opts.bbTemplate.nugetId} now installed (post-install detection)`);
|
|
1354
|
-
}
|
|
1355
|
-
}
|
|
1356
|
-
}
|
|
1357
|
-
}
|
|
1358
|
-
|
|
1359
|
-
try {
|
|
1360
|
-
// Task 6.3 — run: dotnet new <shortName> -n <name> -o <target>/server
|
|
1361
|
-
// NOTE: do NOT pass --no-restore here. BB custom templates (e.g.
|
|
1362
|
-
// mr-micro-sln) reject unknown flags with
|
|
1363
|
-
// '--no-restore' is not a valid option
|
|
1364
|
-
// breaking the scaffold. We do an explicit `dotnet restore` below
|
|
1365
|
-
// anyway, so the template's auto-restore is harmless duplication.
|
|
1366
|
-
const dotnetCmd = getDotnetCommand() === "dotnet" ? "dotnet" : JSON.stringify(getDotnetCommand());
|
|
1367
|
-
// .NET assembly + namespace name must be PascalCase. Outer folder /
|
|
1368
|
-
// package.json keep the kebab project name. C# cannot have dashes in
|
|
1369
|
-
// namespaces, so a kebab here produces snake_case namespaces (bug).
|
|
1370
|
-
const dotnetAssemblyName = toDotNetAssemblyName(projectName);
|
|
1371
|
-
await fsOps.exec(
|
|
1372
|
-
`${dotnetCmd} new ${opts.bbTemplate.shortName} -n ${dotnetAssemblyName} -o ${JSON.stringify(serverDir)}`,
|
|
1373
|
-
root,
|
|
1374
|
-
);
|
|
1375
|
-
|
|
1376
|
-
// Task 6.3 — inject EE-recommended packages into Directory.Packages.props
|
|
1377
|
-
// (pins versions; `dotnet add package` below adds the <PackageReference>
|
|
1378
|
-
// entries to the .csproj without overriding those pins).
|
|
1379
|
-
const propsPath = path.join(serverDir, "Directory.Packages.props");
|
|
1380
|
-
if (opts.eePackages && opts.eePackages.length > 0 && fsOps.exists(propsPath)) {
|
|
1381
|
-
await injectPackagesProps(propsPath, opts.eePackages, opts.commercial ?? false, fsOps);
|
|
1382
|
-
filesWritten.push("server/Directory.Packages.props");
|
|
1383
|
-
}
|
|
1384
|
-
|
|
1385
|
-
// Task 6.3 — verify with dotnet restore --nologo
|
|
1386
|
-
const restoreResult = await fsOps
|
|
1387
|
-
.exec(`${dotnetCmd} restore --nologo`, serverDir)
|
|
1388
|
-
.catch((e: unknown) => ({ stdout: "", stderr: String(e) }));
|
|
1389
|
-
if (restoreResult.stderr && restoreResult.stderr.includes("error")) {
|
|
1390
|
-
logWarn(`[init-new] dotnet restore reported errors; continuing best-effort`);
|
|
1391
|
-
} else {
|
|
1392
|
-
usedDotnetTemplate = true;
|
|
1393
|
-
}
|
|
1394
|
-
|
|
1395
|
-
// Plan 23-01b — add each EE-recommended package via `dotnet add package`.
|
|
1396
|
-
// BB solution templates (mr-micro-sln, mr-modular-sln) create nested
|
|
1397
|
-
// structures under server/ — no .csproj sits directly in serverDir, so
|
|
1398
|
-
// `dotnet add package` from serverDir fails with "Could not find any
|
|
1399
|
-
// project". Discover the primary csproj first; skip the loop with a
|
|
1400
|
-
// single warning if none is found instead of spamming N failures.
|
|
1401
|
-
const targetCsproj = findPrimaryCsproj(serverDir);
|
|
1402
|
-
if (!targetCsproj && (opts.eePackages?.length ?? 0) > 0) {
|
|
1403
|
-
logWarn(
|
|
1404
|
-
`[init-new] no .csproj found under ${serverDir} — skipping ${opts.eePackages?.length ?? 0} dotnet add package call(s). ` +
|
|
1405
|
-
`Packages were still pinned in Directory.Packages.props if present.`,
|
|
1406
|
-
);
|
|
1407
|
-
}
|
|
1408
|
-
// Single-package failures are logged but do NOT abort the scaffold.
|
|
1409
|
-
if (targetCsproj) {
|
|
1410
|
-
// Pre-validate against NuGet flatcontainer. Some EE-recommended
|
|
1411
|
-
// packages (e.g. Muonroi.Ui.Engine.Mvc as of 2026-05-19) exist
|
|
1412
|
-
// locally in source repos but haven't been published. A HEAD
|
|
1413
|
-
// request takes <500ms vs a 5-10s timeout if dotnet add discovers
|
|
1414
|
-
// the 404 itself. Verified manually: response time ~250-400ms,
|
|
1415
|
-
// reliable 404 detection.
|
|
1416
|
-
const pkgList = opts.eePackages ?? [];
|
|
1417
|
-
const validatedList: string[] = [];
|
|
1418
|
-
for (const pkgId of pkgList) {
|
|
1419
|
-
const available = await isPackageOnNuGet(pkgId);
|
|
1420
|
-
if (available) {
|
|
1421
|
-
validatedList.push(pkgId);
|
|
1422
|
-
} else {
|
|
1423
|
-
logWarn(
|
|
1424
|
-
`[init-new] package ${pkgId} not found on nuget.org — skipping (publish or use local nupkg source to include)`,
|
|
1425
|
-
);
|
|
1426
|
-
}
|
|
1427
|
-
}
|
|
1428
|
-
for (let i = 0; i < validatedList.length; i++) {
|
|
1429
|
-
const pkgId = validatedList[i]!;
|
|
1430
|
-
opts.onPackageProgress?.({ index: i + 1, total: validatedList.length, pkgId, status: "start" });
|
|
1431
|
-
try {
|
|
1432
|
-
// `--prerelease` is required because Muonroi.* packages currently
|
|
1433
|
-
// ship only alpha versions on NuGet (manually verified 2026-05-19
|
|
1434
|
-
// against Muonroi.AspNetCore@1.0.0-alpha.14, Muonroi.Governance@
|
|
1435
|
-
// 1.0.0-alpha.14). Without the flag, dotnet errors:
|
|
1436
|
-
// "There are no stable versions available, 1.0.0-alpha.14 is
|
|
1437
|
-
// the best available. Consider adding the --prerelease option"
|
|
1438
|
-
await fsOps.exec(
|
|
1439
|
-
`${dotnetCmd} add ${JSON.stringify(targetCsproj)} package ${pkgId} --prerelease`,
|
|
1440
|
-
serverDir,
|
|
1441
|
-
);
|
|
1442
|
-
filesWritten.push(path.relative(root, targetCsproj));
|
|
1443
|
-
opts.onPackageProgress?.({ index: i + 1, total: validatedList.length, pkgId, status: "ok" });
|
|
1444
|
-
} catch (e) {
|
|
1445
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
1446
|
-
logWarn(`[init-new] dotnet add package ${pkgId} failed: ${msg}`);
|
|
1447
|
-
opts.onPackageProgress?.({
|
|
1448
|
-
index: i + 1,
|
|
1449
|
-
total: validatedList.length,
|
|
1450
|
-
pkgId,
|
|
1451
|
-
status: "fail",
|
|
1452
|
-
error: msg,
|
|
1453
|
-
});
|
|
1454
|
-
}
|
|
1455
|
-
}
|
|
1456
|
-
}
|
|
1457
|
-
|
|
1458
|
-
// Task 6.5 — Emit EE-INTENT.md
|
|
1459
|
-
const eePackageList = opts.eePackages ?? [];
|
|
1460
|
-
// Compute coverage: partial if any package not in eePackages list
|
|
1461
|
-
const coverage = eePackageList.length > 0 ? "full" : "partial";
|
|
1462
|
-
await write(
|
|
1463
|
-
"server/EE-INTENT.md",
|
|
1464
|
-
buildEEIntentMd({
|
|
1465
|
-
projectName,
|
|
1466
|
-
template: opts.bbTemplate,
|
|
1467
|
-
eePackages: eePackageList,
|
|
1468
|
-
coverage,
|
|
1469
|
-
}),
|
|
1470
|
-
);
|
|
1471
|
-
} catch (err) {
|
|
1472
|
-
logWarn(
|
|
1473
|
-
`[init-new] dotnet new ${opts.bbTemplate.shortName} failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
1474
|
-
);
|
|
1475
|
-
usedDotnetTemplate = false;
|
|
1476
|
-
}
|
|
1477
|
-
}
|
|
1478
|
-
}
|
|
1479
|
-
|
|
1480
|
-
if (!usedDotnetTemplate) {
|
|
1481
|
-
if (opts.bbTemplate) {
|
|
1482
|
-
const dotnetVersion = detectDotnet() ?? "(not detected)";
|
|
1483
|
-
const sdkMajor = parseDotnetMajor(dotnetVersion);
|
|
1484
|
-
const required = getMinSdkMajor(opts.bbTemplate.nugetId);
|
|
1485
|
-
const installed = detectInstalledBBTemplates();
|
|
1486
|
-
const templateInstalled = installed.has(opts.bbTemplate.nugetId);
|
|
1487
|
-
const sdkTooOld = sdkMajor !== null && required !== null && sdkMajor < required;
|
|
1488
|
-
// Plan 23-fix — distinguish the three real failure modes instead of
|
|
1489
|
-
// unconditionally claiming the SDK is too old. The original bug surfaced
|
|
1490
|
-
// on a machine running SDK 9.0.313 against a template requiring 9.0:
|
|
1491
|
-
// the message said "requires SDK 9.0+; you have 9.0.313" which is
|
|
1492
|
-
// self-contradictory.
|
|
1493
|
-
let hint: string;
|
|
1494
|
-
if (sdkTooOld) {
|
|
1495
|
-
hint =
|
|
1496
|
-
`→ Template ${opts.bbTemplate.shortName} requires .NET SDK ${required}.0+; you have ${dotnetVersion}.\n` +
|
|
1497
|
-
` Install SDK ${required}.0 from https://dotnet.microsoft.com/download/dotnet/${required}.0`;
|
|
1498
|
-
} else if (!templateInstalled) {
|
|
1499
|
-
hint =
|
|
1500
|
-
`→ Template ${opts.bbTemplate.shortName} (${opts.bbTemplate.nugetId}@${opts.bbTemplate.version}) is not installed.\n` +
|
|
1501
|
-
` Install it manually then press Retry:\n` +
|
|
1502
|
-
` dotnet new install ${opts.bbTemplate.nugetId}@${opts.bbTemplate.version}\n` +
|
|
1503
|
-
` Verify NuGet feeds with: dotnet nuget list source`;
|
|
1504
|
-
} else {
|
|
1505
|
-
// Template is installed and SDK is new enough — the `dotnet new`
|
|
1506
|
-
// invocation itself failed for another reason. Most common causes:
|
|
1507
|
-
// restore conflict, locked output dir, project name collision.
|
|
1508
|
-
hint =
|
|
1509
|
-
`→ Template ${opts.bbTemplate.shortName} is installed but \`dotnet new\` failed.\n` +
|
|
1510
|
-
` Common causes: existing files in target dir, restore conflict, or assembly-name collision.\n` +
|
|
1511
|
-
` Run manually to see the underlying error:\n` +
|
|
1512
|
-
` dotnet new ${opts.bbTemplate.shortName} -n <Name> -o <dir>`;
|
|
1513
|
-
}
|
|
1514
|
-
throw new Error(`Scaffold failed: dotnet template ${opts.bbTemplate.shortName} could not be applied.\n${hint}`);
|
|
1515
|
-
}
|
|
1516
|
-
// No bbTemplate provided → FE-only project, skip BE scaffold entirely.
|
|
1517
|
-
}
|
|
1518
|
-
|
|
1519
|
-
// 7. Scaffold FE client.
|
|
1520
|
-
if (feStack === "react") {
|
|
1521
|
-
await write("client/package.json", reactClientPackageJson(projectName));
|
|
1522
|
-
await write("client/vite.config.ts", reactViteConfig());
|
|
1523
|
-
await write("client/tsconfig.json", reactTsConfig());
|
|
1524
|
-
await write("client/.env.example", reactEnvExample());
|
|
1525
|
-
await write("client/.gitignore", reactGitignore());
|
|
1526
|
-
await write("client/README.md", reactReadme(projectName));
|
|
1527
|
-
await write("client/index.html", reactIndexHtml(projectName));
|
|
1528
|
-
await write("client/src/main.tsx", reactMainTsx());
|
|
1529
|
-
await write("client/src/api/client.ts", reactApiClient());
|
|
1530
|
-
await write("client/src/api/types.ts", reactApiTypes());
|
|
1531
|
-
await write("client/src/components/ErrorBoundary.tsx", reactErrorBoundary());
|
|
1532
|
-
await write("client/src/styles/app.css", reactAppCss());
|
|
1533
|
-
} else if (feStack === "angular") {
|
|
1534
|
-
await write("client/package.json", angularClientPackageJson(projectName));
|
|
1535
|
-
await write("client/tsconfig.json", angularTsConfig());
|
|
1536
|
-
await write("client/.gitignore", angularGitignore());
|
|
1537
|
-
await write("client/README.md", angularReadme(projectName));
|
|
1538
|
-
await write("client/src/styles.css", angularStylesCss());
|
|
1539
|
-
await write("client/src/environments/environment.ts", angularEnvironmentTs());
|
|
1540
|
-
await write("client/src/environments/environment.prod.ts", angularEnvironmentProdTs());
|
|
1541
|
-
await write("client/src/api/api.service.ts", angularApiServiceTs());
|
|
1542
|
-
await write("client/src/api/types.ts", angularApiTypes());
|
|
1543
|
-
await write("client/src/app/error-handler.ts", angularErrorHandlerTs());
|
|
1544
|
-
await write("client/src/main.ts", angularMainTs());
|
|
1545
|
-
await write("client/src/app/app.component.ts", angularAppComponentTs(projectName));
|
|
1546
|
-
}
|
|
1547
|
-
|
|
1548
|
-
return { projectDir, files: filesWritten, usedDotnetTemplate, warnings: warnings.length > 0 ? warnings : undefined };
|
|
1549
|
-
}
|
|
1550
|
-
|
|
1551
|
-
// ---------------------------------------------------------------------------
|
|
1552
|
-
// Task 6.3 — Directory.Packages.props injection helper
|
|
1553
|
-
// Task 6.4 — OSS-only filter (commercial packages excluded unless flag set)
|
|
1554
|
-
// ---------------------------------------------------------------------------
|
|
1555
|
-
|
|
1556
|
-
/** Commercial BB package ids — excluded unless opts.commercial is true. */
|
|
1557
|
-
const COMMERCIAL_PACKAGE_PREFIXES = [
|
|
1558
|
-
"Muonroi.RuleEngine.CEP",
|
|
1559
|
-
"Muonroi.Governance.Commercial",
|
|
1560
|
-
"Muonroi.Infrastructure.Commercial",
|
|
1561
|
-
];
|
|
1562
|
-
|
|
1563
|
-
function isCommercialPackage(pkgId: string): boolean {
|
|
1564
|
-
return COMMERCIAL_PACKAGE_PREFIXES.some((prefix) => pkgId.startsWith(prefix));
|
|
1565
|
-
}
|
|
1566
|
-
|
|
1567
|
-
async function injectPackagesProps(
|
|
1568
|
-
propsPath: string,
|
|
1569
|
-
eePackages: string[],
|
|
1570
|
-
commercial: boolean,
|
|
1571
|
-
fsOps: {
|
|
1572
|
-
writeFile: (p: string, content: string) => Promise<void>;
|
|
1573
|
-
exists: (p: string) => boolean;
|
|
1574
|
-
},
|
|
1575
|
-
): Promise<void> {
|
|
1576
|
-
// Task 6.4 — filter out commercial packages unless flag is set
|
|
1577
|
-
const filteredPackages = eePackages.filter((pkg) => commercial || !isCommercialPackage(pkg));
|
|
1578
|
-
if (filteredPackages.length === 0) return;
|
|
1579
|
-
|
|
1580
|
-
// Read current props content
|
|
1581
|
-
let propsContent: string;
|
|
1582
|
-
try {
|
|
1583
|
-
const { readFileSync } = await import("node:fs");
|
|
1584
|
-
propsContent = readFileSync(propsPath, "utf-8");
|
|
1585
|
-
} catch {
|
|
1586
|
-
propsContent = buildMinimalPackagesProps();
|
|
1587
|
-
}
|
|
1588
|
-
|
|
1589
|
-
// Use fast-xml-parser for safe XML round-trip (task 6.2c / 6.11)
|
|
1590
|
-
// Dynamically import so tests can stub it
|
|
1591
|
-
let updatedContent = propsContent;
|
|
1592
|
-
try {
|
|
1593
|
-
const { XMLParser, XMLBuilder } = await import("fast-xml-parser");
|
|
1594
|
-
const parser = new XMLParser({
|
|
1595
|
-
ignoreAttributes: false,
|
|
1596
|
-
attributeNamePrefix: "@_",
|
|
1597
|
-
isArray: (name) => name === "PackageVersion",
|
|
1598
|
-
});
|
|
1599
|
-
const builder = new XMLBuilder({
|
|
1600
|
-
ignoreAttributes: false,
|
|
1601
|
-
attributeNamePrefix: "@_",
|
|
1602
|
-
format: true,
|
|
1603
|
-
indentBy: " ",
|
|
1604
|
-
});
|
|
1605
|
-
|
|
1606
|
-
const parsed = parser.parse(propsContent) as {
|
|
1607
|
-
Project?: {
|
|
1608
|
-
PropertyGroup?: unknown;
|
|
1609
|
-
ItemGroup?: {
|
|
1610
|
-
PackageVersion?: Array<{ "@_Include": string; "@_Version": string }>;
|
|
1611
|
-
};
|
|
1612
|
-
};
|
|
1613
|
-
};
|
|
1614
|
-
|
|
1615
|
-
const project = parsed.Project ?? {};
|
|
1616
|
-
const itemGroup = project.ItemGroup ?? {};
|
|
1617
|
-
const existing: Array<{ "@_Include": string; "@_Version": string }> = itemGroup.PackageVersion ?? [];
|
|
1618
|
-
const existingIds = new Set(existing.map((pv) => pv["@_Include"]));
|
|
1619
|
-
|
|
1620
|
-
// Add missing EE-recommended packages
|
|
1621
|
-
for (const pkg of filteredPackages) {
|
|
1622
|
-
if (!existingIds.has(pkg)) {
|
|
1623
|
-
existing.push({ "@_Include": pkg, "@_Version": "*" });
|
|
1624
|
-
}
|
|
1625
|
-
}
|
|
1626
|
-
itemGroup.PackageVersion = existing;
|
|
1627
|
-
project.ItemGroup = itemGroup;
|
|
1628
|
-
parsed.Project = project;
|
|
1629
|
-
updatedContent = builder.build(parsed) as string;
|
|
1630
|
-
} catch {
|
|
1631
|
-
// fast-xml-parser not available or parse failed — append raw entries as comment
|
|
1632
|
-
const rawEntries = filteredPackages.map((pkg) => ` <PackageVersion Include="${pkg}" Version="*" />`).join("\n");
|
|
1633
|
-
updatedContent = propsContent.replace(
|
|
1634
|
-
"</Project>",
|
|
1635
|
-
` <!-- muonroi-cli:injected:ee-packages -->\n${rawEntries}\n <!-- /muonroi-cli:injected:ee-packages -->\n</Project>`,
|
|
1636
|
-
);
|
|
1637
|
-
}
|
|
1638
|
-
|
|
1639
|
-
await fsOps.writeFile(propsPath, updatedContent);
|
|
1640
|
-
}
|
|
1641
|
-
|
|
1642
|
-
function buildMinimalPackagesProps(): string {
|
|
1643
|
-
return `<Project>
|
|
1644
|
-
<PropertyGroup>
|
|
1645
|
-
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
|
1646
|
-
</PropertyGroup>
|
|
1647
|
-
<ItemGroup>
|
|
1648
|
-
</ItemGroup>
|
|
1649
|
-
</Project>`;
|
|
1650
|
-
}
|
|
1651
|
-
|
|
1652
|
-
// ---------------------------------------------------------------------------
|
|
1653
|
-
// Task 6.5 — EE-INTENT.md builder
|
|
1654
|
-
// ---------------------------------------------------------------------------
|
|
1655
|
-
|
|
1656
|
-
interface EEIntentMdOpts {
|
|
1657
|
-
projectName: string;
|
|
1658
|
-
template: BBTemplateInfo;
|
|
1659
|
-
eePackages: string[];
|
|
1660
|
-
coverage: "full" | "partial";
|
|
1661
|
-
}
|
|
1662
|
-
|
|
1663
|
-
function buildEEIntentMd(opts: EEIntentMdOpts): string {
|
|
1664
|
-
const date = new Date().toISOString().slice(0, 10);
|
|
1665
|
-
const packageList = opts.eePackages.length > 0 ? opts.eePackages.map((p) => `- ${p}`).join("\n") : "_(none)_";
|
|
1666
|
-
return `# EE-INTENT.md
|
|
1667
|
-
|
|
1668
|
-
Generated by muonroi-cli on ${date}.
|
|
1669
|
-
|
|
1670
|
-
## Project
|
|
1671
|
-
**Name:** ${opts.projectName}
|
|
1672
|
-
|
|
1673
|
-
## Template
|
|
1674
|
-
**Package:** ${opts.template.nugetId}
|
|
1675
|
-
**Short name:** ${opts.template.shortName}
|
|
1676
|
-
**Version:** ${opts.template.version}
|
|
1677
|
-
|
|
1678
|
-
## EE-Recommended Packages
|
|
1679
|
-
${packageList}
|
|
1680
|
-
|
|
1681
|
-
## Coverage
|
|
1682
|
-
**Status:** ${opts.coverage}
|
|
1683
|
-
${opts.coverage === "partial" ? "\n> Some recommended packages have weak EE coverage (< 0.70). Code-gen applied generic wiring only for low-coverage packages. Run `bun run ee:ingest-bb` to improve coverage.\n" : ""}
|
|
1684
|
-
|
|
1685
|
-
## Resume
|
|
1686
|
-
To re-apply or fix scaffold issues interactively:
|
|
1687
|
-
\`\`\`
|
|
1688
|
-
/ideal --resume .
|
|
1689
|
-
\`\`\`
|
|
1690
|
-
`;
|
|
1691
|
-
}
|