muonroi-cli 1.8.0 → 1.8.3
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/dist/src/agent-harness/mock-model.js +112 -4
- package/dist/src/cli/cost-forensics.js +7 -4
- package/dist/src/flow/compaction/index.d.ts +1 -0
- package/dist/src/flow/compaction/index.js +4 -0
- package/dist/src/generated/version.d.ts +1 -1
- package/dist/src/generated/version.js +1 -1
- package/dist/src/index.js +4 -2
- package/dist/src/lsp/manager.js +11 -3
- package/dist/src/mcp/auto-setup.js +0 -8
- package/dist/src/mcp/self-verify-jobs.d.ts +1 -0
- package/dist/src/mcp/self-verify-runner.js +1 -1
- package/dist/src/mcp/setup-guide-text.d.ts +1 -1
- package/dist/src/mcp/setup-guide-text.js +3 -1
- package/dist/src/orchestrator/auto-commit.js +9 -7
- package/dist/src/orchestrator/message-processor.d.ts +2 -0
- package/dist/src/orchestrator/message-processor.js +7 -0
- package/dist/src/orchestrator/orchestrator.d.ts +3 -0
- package/dist/src/orchestrator/orchestrator.js +371 -28
- package/dist/src/orchestrator/pending-calls.js +2 -1
- package/dist/src/orchestrator/preprocessor.js +3 -2
- package/dist/src/orchestrator/prompts.d.ts +8 -0
- package/dist/src/orchestrator/prompts.js +224 -177
- package/dist/src/orchestrator/sub-agent-cap.d.ts +2 -0
- package/dist/src/orchestrator/sub-agent-cap.js +12 -4
- package/dist/src/orchestrator/subagent-compactor.d.ts +7 -0
- package/dist/src/orchestrator/subagent-compactor.js +65 -14
- package/dist/src/orchestrator/tool-engine.d.ts +2 -0
- package/dist/src/orchestrator/tool-engine.js +80 -21
- package/dist/src/orchestrator/turn-runner-deps.d.ts +2 -0
- package/dist/src/pil/llm-classify.d.ts +11 -0
- package/dist/src/pil/llm-classify.js +193 -0
- package/dist/src/self-qa/agentic-loop.js +30 -21
- package/dist/src/storage/index.d.ts +1 -1
- package/dist/src/storage/index.js +1 -1
- package/dist/src/storage/migrations.js +13 -1
- package/dist/src/storage/transcript.d.ts +2 -0
- package/dist/src/storage/transcript.js +304 -178
- package/dist/src/storage/usage.js +22 -5
- package/dist/src/tools/native-tools.js +10 -1
- package/dist/src/tools/registry.d.ts +1 -0
- package/dist/src/tools/registry.js +30 -2
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/ui/app.js +0 -0
- package/dist/src/ui/slash/expand.js +14 -1
- package/dist/src/ui/use-app-logic.js +0 -0
- package/dist/src/utils/install-manager.d.ts +2 -0
- package/dist/src/utils/install-manager.js +105 -7
- package/dist/src/utils/logger.d.ts +28 -0
- package/dist/src/utils/logger.js +171 -0
- package/dist/src/utils/settings.d.ts +9 -1
- package/dist/src/utils/settings.js +59 -22
- package/dist/src/utils/update-checker.js +12 -2
- package/package.json +8 -1
- package/dist/src/__test-helpers__/catalog-fixtures.d.ts +0 -22
- package/dist/src/__test-helpers__/catalog-fixtures.js +0 -55
- package/dist/src/__test-stubs__/ee-server.d.ts +0 -27
- package/dist/src/__test-stubs__/ee-server.js +0 -138
- package/dist/src/__test-stubs__/vitest-setup.d.ts +0 -1
- package/dist/src/__test-stubs__/vitest-setup.js +0 -38
- package/dist/src/__tests__/council/bubble-layout.test.d.ts +0 -1
- package/dist/src/__tests__/council/bubble-layout.test.js +0 -39
- package/dist/src/__tests__/council/code-block-truncate.test.d.ts +0 -1
- package/dist/src/__tests__/council/code-block-truncate.test.js +0 -45
- package/dist/src/__tests__/council/role-palette.test.d.ts +0 -1
- package/dist/src/__tests__/council/role-palette.test.js +0 -59
- package/dist/src/__tests__/first-run-wizard.test.d.ts +0 -1
- package/dist/src/__tests__/first-run-wizard.test.js +0 -9
- package/dist/src/agent-harness/__tests__/cli-flags.spec.d.ts +0 -1
- package/dist/src/agent-harness/__tests__/cli-flags.spec.js +0 -33
- package/dist/src/agent-harness/__tests__/driver.spec.d.ts +0 -1
- package/dist/src/agent-harness/__tests__/driver.spec.js +0 -141
- package/dist/src/agent-harness/__tests__/idle.spec.d.ts +0 -1
- package/dist/src/agent-harness/__tests__/idle.spec.js +0 -84
- package/dist/src/agent-harness/__tests__/mock-llm.spec.d.ts +0 -1
- package/dist/src/agent-harness/__tests__/mock-llm.spec.js +0 -91
- package/dist/src/agent-harness/__tests__/mock-model.spec.d.ts +0 -5
- package/dist/src/agent-harness/__tests__/mock-model.spec.js +0 -270
- package/dist/src/agent-harness/__tests__/predicate.spec.d.ts +0 -1
- package/dist/src/agent-harness/__tests__/predicate.spec.js +0 -27
- package/dist/src/agent-harness/__tests__/protocol.spec.d.ts +0 -1
- package/dist/src/agent-harness/__tests__/protocol.spec.js +0 -56
- package/dist/src/agent-harness/__tests__/schema.spec.d.ts +0 -1
- package/dist/src/agent-harness/__tests__/schema.spec.js +0 -76
- package/dist/src/agent-harness/__tests__/selector.spec.d.ts +0 -1
- package/dist/src/agent-harness/__tests__/selector.spec.js +0 -70
- package/dist/src/agent-harness/__tests__/sidechannel.spec.d.ts +0 -1
- package/dist/src/agent-harness/__tests__/sidechannel.spec.js +0 -29
- package/dist/src/agent-harness/__tests__/spec-helpers.spec.d.ts +0 -1
- package/dist/src/agent-harness/__tests__/spec-helpers.spec.js +0 -68
- package/dist/src/chat/__tests__/broadcast-bus.test.d.ts +0 -1
- package/dist/src/chat/__tests__/broadcast-bus.test.js +0 -81
- package/dist/src/chat/__tests__/channel-manager.test.d.ts +0 -1
- package/dist/src/chat/__tests__/channel-manager.test.js +0 -133
- package/dist/src/chat/__tests__/client.test.d.ts +0 -1
- package/dist/src/chat/__tests__/client.test.js +0 -109
- package/dist/src/chat/__tests__/discord-integration.test.d.ts +0 -1
- package/dist/src/chat/__tests__/discord-integration.test.js +0 -153
- package/dist/src/chat/__tests__/intent-prompt.test.d.ts +0 -1
- package/dist/src/chat/__tests__/intent-prompt.test.js +0 -80
- package/dist/src/chat/__tests__/verdict-resolver.test.d.ts +0 -1
- package/dist/src/chat/__tests__/verdict-resolver.test.js +0 -308
- package/dist/src/cli/__tests__/bw-vault.test.d.ts +0 -1
- package/dist/src/cli/__tests__/bw-vault.test.js +0 -87
- package/dist/src/cli/__tests__/keys-bundle.test.d.ts +0 -1
- package/dist/src/cli/__tests__/keys-bundle.test.js +0 -40
- package/dist/src/cli/__tests__/share-cmd.test.d.ts +0 -1
- package/dist/src/cli/__tests__/share-cmd.test.js +0 -175
- package/dist/src/cli/config/__tests__/model-picker.test.d.ts +0 -1
- package/dist/src/cli/config/__tests__/model-picker.test.js +0 -56
- package/dist/src/cli/config/__tests__/provider-fetch.test.d.ts +0 -1
- package/dist/src/cli/config/__tests__/provider-fetch.test.js +0 -38
- package/dist/src/cli/cost-forensics.test.d.ts +0 -1
- package/dist/src/cli/cost-forensics.test.js +0 -223
- package/dist/src/cli/experience-report.test.d.ts +0 -5
- package/dist/src/cli/experience-report.test.js +0 -63
- package/dist/src/cli/keys.test.d.ts +0 -1
- package/dist/src/cli/keys.test.js +0 -86
- package/dist/src/council/__tests__/abort-threading.test.d.ts +0 -1
- package/dist/src/council/__tests__/abort-threading.test.js +0 -193
- package/dist/src/council/__tests__/accounting.test.d.ts +0 -1
- package/dist/src/council/__tests__/accounting.test.js +0 -66
- package/dist/src/council/__tests__/audit-replay.test.d.ts +0 -1
- package/dist/src/council/__tests__/audit-replay.test.js +0 -241
- package/dist/src/council/__tests__/clarification-prompt.test.d.ts +0 -1
- package/dist/src/council/__tests__/clarification-prompt.test.js +0 -71
- package/dist/src/council/__tests__/clarifier-max-rounds.test.d.ts +0 -1
- package/dist/src/council/__tests__/clarifier-max-rounds.test.js +0 -46
- package/dist/src/council/__tests__/clarifier-options.test.d.ts +0 -1
- package/dist/src/council/__tests__/clarifier-options.test.js +0 -54
- package/dist/src/council/__tests__/clarifier-ready-gate.test.d.ts +0 -1
- package/dist/src/council/__tests__/clarifier-ready-gate.test.js +0 -265
- package/dist/src/council/__tests__/cost-aware.test.d.ts +0 -1
- package/dist/src/council/__tests__/cost-aware.test.js +0 -49
- package/dist/src/council/__tests__/council-turn-length-emit.test.d.ts +0 -1
- package/dist/src/council/__tests__/council-turn-length-emit.test.js +0 -130
- package/dist/src/council/__tests__/debate-planner-structured.test.d.ts +0 -1
- package/dist/src/council/__tests__/debate-planner-structured.test.js +0 -209
- package/dist/src/council/__tests__/debate-round-budget.test.d.ts +0 -1
- package/dist/src/council/__tests__/debate-round-budget.test.js +0 -45
- package/dist/src/council/__tests__/decisions-lock.test.d.ts +0 -6
- package/dist/src/council/__tests__/decisions-lock.test.js +0 -352
- package/dist/src/council/__tests__/evaluator-metrics.test.d.ts +0 -1
- package/dist/src/council/__tests__/evaluator-metrics.test.js +0 -463
- package/dist/src/council/__tests__/oauth-reachable.test.d.ts +0 -1
- package/dist/src/council/__tests__/oauth-reachable.test.js +0 -31
- package/dist/src/council/__tests__/parse-outcome-fallback.test.d.ts +0 -1
- package/dist/src/council/__tests__/parse-outcome-fallback.test.js +0 -114
- package/dist/src/council/__tests__/post-debate-recommendation.test.d.ts +0 -1
- package/dist/src/council/__tests__/post-debate-recommendation.test.js +0 -58
- package/dist/src/council/__tests__/research-tools.test.d.ts +0 -1
- package/dist/src/council/__tests__/research-tools.test.js +0 -214
- package/dist/src/council/__tests__/round-tools.test.d.ts +0 -1
- package/dist/src/council/__tests__/round-tools.test.js +0 -306
- package/dist/src/council/__tests__/tool-trace.test.d.ts +0 -1
- package/dist/src/council/__tests__/tool-trace.test.js +0 -131
- package/dist/src/council/__tests__/types-contract.test.d.ts +0 -9
- package/dist/src/council/__tests__/types-contract.test.js +0 -82
- package/dist/src/council/clarifier-question-cap.test.d.ts +0 -12
- package/dist/src/council/clarifier-question-cap.test.js +0 -73
- package/dist/src/daemon/scheduler.test.d.ts +0 -1
- package/dist/src/daemon/scheduler.test.js +0 -103
- package/dist/src/ee/__tests__/bb-design.test.d.ts +0 -14
- package/dist/src/ee/__tests__/bb-design.test.js +0 -180
- package/dist/src/ee/__tests__/ee-onboarding.test.d.ts +0 -1
- package/dist/src/ee/__tests__/ee-onboarding.test.js +0 -32
- package/dist/src/ee/__tests__/export-transcripts.test.d.ts +0 -11
- package/dist/src/ee/__tests__/export-transcripts.test.js +0 -200
- package/dist/src/ee/__tests__/pil-context-bridge.test.d.ts +0 -1
- package/dist/src/ee/__tests__/pil-context-bridge.test.js +0 -54
- package/dist/src/ee/__tests__/pipeline.integration.test.d.ts +0 -14
- package/dist/src/ee/__tests__/pipeline.integration.test.js +0 -151
- package/dist/src/ee/__tests__/recall-format.test.d.ts +0 -10
- package/dist/src/ee/__tests__/recall-format.test.js +0 -57
- package/dist/src/ee/__tests__/recall-ledger.test.d.ts +0 -1
- package/dist/src/ee/__tests__/recall-ledger.test.js +0 -45
- package/dist/src/ee/__tests__/render-sink-wiring.test.d.ts +0 -1
- package/dist/src/ee/__tests__/render-sink-wiring.test.js +0 -74
- package/dist/src/ee/artifact-cache.test.d.ts +0 -1
- package/dist/src/ee/artifact-cache.test.js +0 -69
- package/dist/src/ee/auth.test.d.ts +0 -1
- package/dist/src/ee/auth.test.js +0 -59
- package/dist/src/ee/bridge.test.d.ts +0 -1
- package/dist/src/ee/bridge.test.js +0 -230
- package/dist/src/ee/client.test.d.ts +0 -1
- package/dist/src/ee/client.test.js +0 -181
- package/dist/src/ee/extract-session.test.d.ts +0 -1
- package/dist/src/ee/extract-session.test.js +0 -192
- package/dist/src/ee/intercept.test.d.ts +0 -1
- package/dist/src/ee/intercept.test.js +0 -171
- package/dist/src/ee/judge.test.d.ts +0 -1
- package/dist/src/ee/judge.test.js +0 -190
- package/dist/src/ee/mistake-detector.test.d.ts +0 -1
- package/dist/src/ee/mistake-detector.test.js +0 -221
- package/dist/src/ee/offline-queue.test.d.ts +0 -1
- package/dist/src/ee/offline-queue.test.js +0 -246
- package/dist/src/ee/phase-outcome.test.d.ts +0 -1
- package/dist/src/ee/phase-outcome.test.js +0 -94
- package/dist/src/ee/phase-tracker.test.d.ts +0 -1
- package/dist/src/ee/phase-tracker.test.js +0 -142
- package/dist/src/ee/posttool.test.d.ts +0 -1
- package/dist/src/ee/posttool.test.js +0 -70
- package/dist/src/ee/prompt-stale.test.d.ts +0 -8
- package/dist/src/ee/prompt-stale.test.js +0 -76
- package/dist/src/ee/recall-mirror.test.d.ts +0 -1
- package/dist/src/ee/recall-mirror.test.js +0 -65
- package/dist/src/ee/render.test.d.ts +0 -1
- package/dist/src/ee/render.test.js +0 -63
- package/dist/src/ee/scope.test.d.ts +0 -1
- package/dist/src/ee/scope.test.js +0 -97
- package/dist/src/ee/search.test.d.ts +0 -1
- package/dist/src/ee/search.test.js +0 -23
- package/dist/src/ee/session-trajectory.test.d.ts +0 -1
- package/dist/src/ee/session-trajectory.test.js +0 -120
- package/dist/src/ee/touch.test.d.ts +0 -1
- package/dist/src/ee/touch.test.js +0 -62
- package/dist/src/ee/who-am-i.test.d.ts +0 -1
- package/dist/src/ee/who-am-i.test.js +0 -101
- package/dist/src/flow/__tests__/migration.test.d.ts +0 -1
- package/dist/src/flow/__tests__/migration.test.js +0 -105
- package/dist/src/flow/__tests__/parser.test.d.ts +0 -1
- package/dist/src/flow/__tests__/parser.test.js +0 -68
- package/dist/src/flow/__tests__/run-manager-product.test.d.ts +0 -1
- package/dist/src/flow/__tests__/run-manager-product.test.js +0 -49
- package/dist/src/flow/__tests__/run-manager.test.d.ts +0 -1
- package/dist/src/flow/__tests__/run-manager.test.js +0 -83
- package/dist/src/flow/__tests__/scaffold-checkpoint.test.d.ts +0 -1
- package/dist/src/flow/__tests__/scaffold-checkpoint.test.js +0 -93
- package/dist/src/flow/__tests__/scaffold.test.d.ts +0 -1
- package/dist/src/flow/__tests__/scaffold.test.js +0 -47
- package/dist/src/flow/__tests__/warning-persist.test.d.ts +0 -5
- package/dist/src/flow/__tests__/warning-persist.test.js +0 -96
- package/dist/src/flow/compaction/__tests__/compress.test.d.ts +0 -1
- package/dist/src/flow/compaction/__tests__/compress.test.js +0 -63
- package/dist/src/flow/compaction/__tests__/extract.test.d.ts +0 -1
- package/dist/src/flow/compaction/__tests__/extract.test.js +0 -66
- package/dist/src/flow/compaction/__tests__/preserve.test.d.ts +0 -1
- package/dist/src/flow/compaction/__tests__/preserve.test.js +0 -62
- package/dist/src/gsd/__tests__/gray-areas.test.d.ts +0 -1
- package/dist/src/gsd/__tests__/gray-areas.test.js +0 -29
- package/dist/src/gsd/__tests__/types.test.d.ts +0 -1
- package/dist/src/gsd/__tests__/types.test.js +0 -78
- package/dist/src/headless/__tests__/council-answers.test.d.ts +0 -1
- package/dist/src/headless/__tests__/council-answers.test.js +0 -251
- package/dist/src/headless/output.test.d.ts +0 -1
- package/dist/src/headless/output.test.js +0 -239
- package/dist/src/lsp/builtins.test.d.ts +0 -1
- package/dist/src/lsp/builtins.test.js +0 -112
- package/dist/src/lsp/client-normalize.test.d.ts +0 -12
- package/dist/src/lsp/client-normalize.test.js +0 -34
- package/dist/src/lsp/manager.test.d.ts +0 -1
- package/dist/src/lsp/manager.test.js +0 -155
- package/dist/src/lsp/npm-cache.test.d.ts +0 -1
- package/dist/src/lsp/npm-cache.test.js +0 -53
- package/dist/src/lsp/smoke.test.d.ts +0 -1
- package/dist/src/lsp/smoke.test.js +0 -56
- package/dist/src/maintain/__tests__/codebase-intel.test.d.ts +0 -5
- package/dist/src/maintain/__tests__/codebase-intel.test.js +0 -237
- package/dist/src/maintain/__tests__/gh-create-pr.test.d.ts +0 -11
- package/dist/src/maintain/__tests__/gh-create-pr.test.js +0 -160
- package/dist/src/maintain/__tests__/pr-builder.test.d.ts +0 -10
- package/dist/src/maintain/__tests__/pr-builder.test.js +0 -229
- package/dist/src/maintain/__tests__/repo-map.test.d.ts +0 -5
- package/dist/src/maintain/__tests__/repo-map.test.js +0 -90
- package/dist/src/maintain/__tests__/task-runner.test.d.ts +0 -11
- package/dist/src/maintain/__tests__/task-runner.test.js +0 -281
- package/dist/src/mcp/__tests__/auto-setup.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/auto-setup.test.js +0 -155
- package/dist/src/mcp/__tests__/cap-tool-result.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/cap-tool-result.test.js +0 -58
- package/dist/src/mcp/__tests__/client-pool.spec.d.ts +0 -1
- package/dist/src/mcp/__tests__/client-pool.spec.js +0 -169
- package/dist/src/mcp/__tests__/ee-tools.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/ee-tools.test.js +0 -226
- package/dist/src/mcp/__tests__/forensics-tools.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/forensics-tools.test.js +0 -54
- package/dist/src/mcp/__tests__/harness-driver-action-tools.spec.d.ts +0 -1
- package/dist/src/mcp/__tests__/harness-driver-action-tools.spec.js +0 -103
- package/dist/src/mcp/__tests__/harness-driver-async-tools.spec.d.ts +0 -1
- package/dist/src/mcp/__tests__/harness-driver-async-tools.spec.js +0 -112
- package/dist/src/mcp/__tests__/harness-driver-read-tools.spec.d.ts +0 -1
- package/dist/src/mcp/__tests__/harness-driver-read-tools.spec.js +0 -124
- package/dist/src/mcp/__tests__/harness-driver-security.spec.d.ts +0 -1
- package/dist/src/mcp/__tests__/harness-driver-security.spec.js +0 -61
- package/dist/src/mcp/__tests__/harness-driver.spec.d.ts +0 -1
- package/dist/src/mcp/__tests__/harness-driver.spec.js +0 -20
- package/dist/src/mcp/__tests__/lazy-schema.spec.d.ts +0 -1
- package/dist/src/mcp/__tests__/lazy-schema.spec.js +0 -152
- package/dist/src/mcp/__tests__/lsp-tools.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/lsp-tools.test.js +0 -56
- package/dist/src/mcp/__tests__/mcp-keychain.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/mcp-keychain.test.js +0 -40
- package/dist/src/mcp/__tests__/parallel-build.spec.d.ts +0 -1
- package/dist/src/mcp/__tests__/parallel-build.spec.js +0 -67
- package/dist/src/mcp/__tests__/research-onboarding.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/research-onboarding.test.js +0 -148
- package/dist/src/mcp/__tests__/runtime-hydration.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/runtime-hydration.test.js +0 -78
- package/dist/src/mcp/__tests__/runtime-output-cap.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/runtime-output-cap.test.js +0 -42
- package/dist/src/mcp/__tests__/runtime-sanitize.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/runtime-sanitize.test.js +0 -40
- package/dist/src/mcp/__tests__/self-verify-jobs.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/self-verify-jobs.test.js +0 -92
- package/dist/src/mcp/__tests__/smart-filter.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/smart-filter.test.js +0 -177
- package/dist/src/mcp/__tests__/tools-server.smoke.test.d.ts +0 -1
- package/dist/src/mcp/__tests__/tools-server.smoke.test.js +0 -42
- package/dist/src/mcp/parse-headers.test.d.ts +0 -1
- package/dist/src/mcp/parse-headers.test.js +0 -43
- package/dist/src/mcp/smoke.test.d.ts +0 -1
- package/dist/src/mcp/smoke.test.js +0 -159
- package/dist/src/models/__tests__/registry.test.d.ts +0 -1
- package/dist/src/models/__tests__/registry.test.js +0 -74
- package/dist/src/models/catalog-gemini.test.d.ts +0 -1
- package/dist/src/models/catalog-gemini.test.js +0 -48
- package/dist/src/models/catalog-url.test.d.ts +0 -1
- package/dist/src/models/catalog-url.test.js +0 -26
- package/dist/src/models/catalog-validation.test.d.ts +0 -1
- package/dist/src/models/catalog-validation.test.js +0 -63
- package/dist/src/ops/__tests__/doctor-council-mcp.test.d.ts +0 -1
- package/dist/src/ops/__tests__/doctor-council-mcp.test.js +0 -139
- package/dist/src/ops/__tests__/doctor-ee-health.test.d.ts +0 -1
- package/dist/src/ops/__tests__/doctor-ee-health.test.js +0 -134
- package/dist/src/ops/bug-report.test.d.ts +0 -1
- package/dist/src/ops/bug-report.test.js +0 -148
- package/dist/src/ops/doctor.test.d.ts +0 -1
- package/dist/src/ops/doctor.test.js +0 -97
- package/dist/src/orchestrator/__tests__/agent-base-url-switch.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/agent-base-url-switch.test.js +0 -77
- package/dist/src/orchestrator/__tests__/auto-commit.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/auto-commit.test.js +0 -142
- package/dist/src/orchestrator/__tests__/batch-turn-runner.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/batch-turn-runner.test.js +0 -163
- package/dist/src/orchestrator/__tests__/council-manager.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/council-manager.test.js +0 -148
- package/dist/src/orchestrator/__tests__/cross-turn-dedup.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/cross-turn-dedup.test.js +0 -175
- package/dist/src/orchestrator/__tests__/current-call-id.test.d.ts +0 -16
- package/dist/src/orchestrator/__tests__/current-call-id.test.js +0 -138
- package/dist/src/orchestrator/__tests__/delegations.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/delegations.test.js +0 -96
- package/dist/src/orchestrator/__tests__/error-forensics.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/error-forensics.test.js +0 -93
- package/dist/src/orchestrator/__tests__/flow-resume.test.d.ts +0 -5
- package/dist/src/orchestrator/__tests__/flow-resume.test.js +0 -61
- package/dist/src/orchestrator/__tests__/humanize-api-error.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/humanize-api-error.test.js +0 -68
- package/dist/src/orchestrator/__tests__/mcp-capability-block.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/mcp-capability-block.test.js +0 -39
- package/dist/src/orchestrator/__tests__/message-processor.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/message-processor.test.js +0 -188
- package/dist/src/orchestrator/__tests__/message-write-ahead.test.d.ts +0 -22
- package/dist/src/orchestrator/__tests__/message-write-ahead.test.js +0 -149
- package/dist/src/orchestrator/__tests__/project-stack.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/project-stack.test.js +0 -65
- package/dist/src/orchestrator/__tests__/read-path-budget.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/read-path-budget.test.js +0 -156
- package/dist/src/orchestrator/__tests__/retry-classifier.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/retry-classifier.test.js +0 -112
- package/dist/src/orchestrator/__tests__/retry-stream.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/retry-stream.test.js +0 -151
- package/dist/src/orchestrator/__tests__/route-feedback.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/route-feedback.test.js +0 -47
- package/dist/src/orchestrator/__tests__/stream-runner.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/stream-runner.test.js +0 -202
- package/dist/src/orchestrator/__tests__/sub-agent-model-tier.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/sub-agent-model-tier.test.js +0 -45
- package/dist/src/orchestrator/__tests__/usage-events-shape.test.d.ts +0 -8
- package/dist/src/orchestrator/__tests__/usage-events-shape.test.js +0 -58
- package/dist/src/orchestrator/__tests__/usage-normalizer-c1.test.d.ts +0 -21
- package/dist/src/orchestrator/__tests__/usage-normalizer-c1.test.js +0 -155
- package/dist/src/orchestrator/__tests__/usage-shape-threading.test.d.ts +0 -1
- package/dist/src/orchestrator/__tests__/usage-shape-threading.test.js +0 -98
- package/dist/src/orchestrator/__tests__/write-ahead.test.d.ts +0 -20
- package/dist/src/orchestrator/__tests__/write-ahead.test.js +0 -134
- package/dist/src/orchestrator/abort.test.d.ts +0 -1
- package/dist/src/orchestrator/abort.test.js +0 -34
- package/dist/src/orchestrator/agent.test.d.ts +0 -1
- package/dist/src/orchestrator/agent.test.js +0 -178
- package/dist/src/orchestrator/cleanup.test.d.ts +0 -1
- package/dist/src/orchestrator/cleanup.test.js +0 -67
- package/dist/src/orchestrator/compaction.test.d.ts +0 -1
- package/dist/src/orchestrator/compaction.test.js +0 -187
- package/dist/src/orchestrator/delegations.test.d.ts +0 -1
- package/dist/src/orchestrator/delegations.test.js +0 -107
- package/dist/src/orchestrator/grounding-check.test.d.ts +0 -1
- package/dist/src/orchestrator/grounding-check.test.js +0 -94
- package/dist/src/orchestrator/interrupted-turn.test.d.ts +0 -1
- package/dist/src/orchestrator/interrupted-turn.test.js +0 -34
- package/dist/src/orchestrator/message-seq.test.d.ts +0 -1
- package/dist/src/orchestrator/message-seq.test.js +0 -24
- package/dist/src/orchestrator/pending-calls.test.d.ts +0 -1
- package/dist/src/orchestrator/pending-calls.test.js +0 -188
- package/dist/src/orchestrator/provider-options-shape.spec.d.ts +0 -1
- package/dist/src/orchestrator/provider-options-shape.spec.js +0 -63
- package/dist/src/orchestrator/reasoning.test.d.ts +0 -1
- package/dist/src/orchestrator/reasoning.test.js +0 -101
- package/dist/src/orchestrator/repetition-detector.test.d.ts +0 -1
- package/dist/src/orchestrator/repetition-detector.test.js +0 -103
- package/dist/src/orchestrator/sandbox.test.d.ts +0 -1
- package/dist/src/orchestrator/sandbox.test.js +0 -99
- package/dist/src/orchestrator/scope-ceiling.test.d.ts +0 -13
- package/dist/src/orchestrator/scope-ceiling.test.js +0 -181
- package/dist/src/orchestrator/scope-reminder.test.d.ts +0 -15
- package/dist/src/orchestrator/scope-reminder.test.js +0 -225
- package/dist/src/orchestrator/session-experience.test.d.ts +0 -6
- package/dist/src/orchestrator/session-experience.test.js +0 -72
- package/dist/src/orchestrator/stall-rescue.test.d.ts +0 -1
- package/dist/src/orchestrator/stall-rescue.test.js +0 -117
- package/dist/src/orchestrator/stall-watchdog.test.d.ts +0 -1
- package/dist/src/orchestrator/stall-watchdog.test.js +0 -153
- package/dist/src/orchestrator/steer-inbox.test.d.ts +0 -1
- package/dist/src/orchestrator/steer-inbox.test.js +0 -33
- package/dist/src/orchestrator/sub-agent-cap.test.d.ts +0 -1
- package/dist/src/orchestrator/sub-agent-cap.test.js +0 -208
- package/dist/src/orchestrator/subagent-compactor.spec.d.ts +0 -1
- package/dist/src/orchestrator/subagent-compactor.spec.js +0 -520
- package/dist/src/orchestrator/text-tool-call-detector.test.d.ts +0 -1
- package/dist/src/orchestrator/text-tool-call-detector.test.js +0 -147
- package/dist/src/orchestrator/token-counter.test.d.ts +0 -1
- package/dist/src/orchestrator/token-counter.test.js +0 -57
- package/dist/src/orchestrator/tool-args-hash.test.d.ts +0 -1
- package/dist/src/orchestrator/tool-args-hash.test.js +0 -105
- package/dist/src/orchestrator/tool-args-repair.test.d.ts +0 -1
- package/dist/src/orchestrator/tool-args-repair.test.js +0 -136
- package/dist/src/orchestrator/tool-loop-askcard.test.d.ts +0 -1
- package/dist/src/orchestrator/tool-loop-askcard.test.js +0 -71
- package/dist/src/orchestrator/tool-loop-cap.test.d.ts +0 -1
- package/dist/src/orchestrator/tool-loop-cap.test.js +0 -176
- package/dist/src/orchestrator/tool-repetition-detector.test.d.ts +0 -1
- package/dist/src/orchestrator/tool-repetition-detector.test.js +0 -101
- package/dist/src/pil/__tests__/budget.test.d.ts +0 -1
- package/dist/src/pil/__tests__/budget.test.js +0 -33
- package/dist/src/pil/__tests__/clarity-gate.test.d.ts +0 -1
- package/dist/src/pil/__tests__/clarity-gate.test.js +0 -37
- package/dist/src/pil/__tests__/config.test.d.ts +0 -1
- package/dist/src/pil/__tests__/config.test.js +0 -57
- package/dist/src/pil/__tests__/discovery-cache.test.d.ts +0 -1
- package/dist/src/pil/__tests__/discovery-cache.test.js +0 -38
- package/dist/src/pil/__tests__/discovery-types.test.d.ts +0 -1
- package/dist/src/pil/__tests__/discovery-types.test.js +0 -65
- package/dist/src/pil/__tests__/discovery.test.d.ts +0 -1
- package/dist/src/pil/__tests__/discovery.test.js +0 -178
- package/dist/src/pil/__tests__/dual-run.test.d.ts +0 -1
- package/dist/src/pil/__tests__/dual-run.test.js +0 -51
- package/dist/src/pil/__tests__/layer1-intent-trace.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer1-intent-trace.test.js +0 -138
- package/dist/src/pil/__tests__/layer1-intent.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer1-intent.test.js +0 -329
- package/dist/src/pil/__tests__/layer15-context-scan.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer15-context-scan.test.js +0 -64
- package/dist/src/pil/__tests__/layer16-clarity.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer16-clarity.test.js +0 -72
- package/dist/src/pil/__tests__/layer17-feasibility.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer17-feasibility.test.js +0 -36
- package/dist/src/pil/__tests__/layer18-acceptance.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer18-acceptance.test.js +0 -18
- package/dist/src/pil/__tests__/layer2-personality.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer2-personality.test.js +0 -57
- package/dist/src/pil/__tests__/layer2_5-ponytail.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer2_5-ponytail.test.js +0 -53
- package/dist/src/pil/__tests__/layer3-ee-injection.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer3-ee-injection.test.js +0 -221
- package/dist/src/pil/__tests__/layer3-injected-chunk.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer3-injected-chunk.test.js +0 -134
- package/dist/src/pil/__tests__/layer4-gsd.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer4-gsd.test.js +0 -191
- package/dist/src/pil/__tests__/layer5-context.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer5-context.test.js +0 -175
- package/dist/src/pil/__tests__/layer6-output.test.d.ts +0 -1
- package/dist/src/pil/__tests__/layer6-output.test.js +0 -465
- package/dist/src/pil/__tests__/llm-classify.test.d.ts +0 -1
- package/dist/src/pil/__tests__/llm-classify.test.js +0 -197
- package/dist/src/pil/__tests__/native-capabilities-workbook.test.d.ts +0 -1
- package/dist/src/pil/__tests__/native-capabilities-workbook.test.js +0 -40
- package/dist/src/pil/__tests__/ollama-classify.test.d.ts +0 -1
- package/dist/src/pil/__tests__/ollama-classify.test.js +0 -68
- package/dist/src/pil/__tests__/orchestrator-integration.test.d.ts +0 -10
- package/dist/src/pil/__tests__/orchestrator-integration.test.js +0 -100
- package/dist/src/pil/__tests__/pipeline.test.d.ts +0 -1
- package/dist/src/pil/__tests__/pipeline.test.js +0 -188
- package/dist/src/pil/__tests__/renderer-coverage.test.d.ts +0 -7
- package/dist/src/pil/__tests__/renderer-coverage.test.js +0 -42
- package/dist/src/pil/__tests__/response-tools.test.d.ts +0 -1
- package/dist/src/pil/__tests__/response-tools.test.js +0 -242
- package/dist/src/pil/__tests__/schema.test.d.ts +0 -1
- package/dist/src/pil/__tests__/schema.test.js +0 -202
- package/dist/src/pil/__tests__/scoreComplexity.test.d.ts +0 -1
- package/dist/src/pil/__tests__/scoreComplexity.test.js +0 -119
- package/dist/src/pil/__tests__/scoreSufficiency.test.d.ts +0 -8
- package/dist/src/pil/__tests__/scoreSufficiency.test.js +0 -89
- package/dist/src/pil/__tests__/store.test.d.ts +0 -1
- package/dist/src/pil/__tests__/store.test.js +0 -44
- package/dist/src/pil/__tests__/surface-compaction-artifacts.test.d.ts +0 -1
- package/dist/src/pil/__tests__/surface-compaction-artifacts.test.js +0 -112
- package/dist/src/pil/__tests__/task-tier-map.test.d.ts +0 -1
- package/dist/src/pil/__tests__/task-tier-map.test.js +0 -33
- package/dist/src/pil/agent-operating-contract.test.d.ts +0 -1
- package/dist/src/pil/agent-operating-contract.test.js +0 -80
- package/dist/src/pil/cheap-model-playbook.test.d.ts +0 -1
- package/dist/src/pil/cheap-model-playbook.test.js +0 -160
- package/dist/src/pil/cheap-model-workbooks.test.d.ts +0 -1
- package/dist/src/pil/cheap-model-workbooks.test.js +0 -129
- package/dist/src/pil/layer1-intent.test.d.ts +0 -1
- package/dist/src/pil/layer1-intent.test.js +0 -764
- package/dist/src/pil/layer1_5-complexity-size.test.d.ts +0 -10
- package/dist/src/pil/layer1_5-complexity-size.test.js +0 -248
- package/dist/src/pil/session-experience-injection.test.d.ts +0 -6
- package/dist/src/pil/session-experience-injection.test.js +0 -79
- package/dist/src/pil/session-state.test.d.ts +0 -1
- package/dist/src/pil/session-state.test.js +0 -73
- package/dist/src/playbook/__tests__/directives.test.d.ts +0 -1
- package/dist/src/playbook/__tests__/directives.test.js +0 -115
- package/dist/src/product-loop/__tests__/artifact-io.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/artifact-io.test.js +0 -83
- package/dist/src/product-loop/__tests__/assumption-ledger.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/assumption-ledger.test.js +0 -261
- package/dist/src/product-loop/__tests__/backlog-builder.test.d.ts +0 -10
- package/dist/src/product-loop/__tests__/backlog-builder.test.js +0 -175
- package/dist/src/product-loop/__tests__/backlog-store.test.d.ts +0 -4
- package/dist/src/product-loop/__tests__/backlog-store.test.js +0 -96
- package/dist/src/product-loop/__tests__/cb2-retry-bonus.test.d.ts +0 -13
- package/dist/src/product-loop/__tests__/cb2-retry-bonus.test.js +0 -158
- package/dist/src/product-loop/__tests__/circuit-breakers-coverage.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/circuit-breakers-coverage.test.js +0 -67
- package/dist/src/product-loop/__tests__/circuit-breakers.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/circuit-breakers.test.js +0 -79
- package/dist/src/product-loop/__tests__/complexity-routing.spec.d.ts +0 -11
- package/dist/src/product-loop/__tests__/complexity-routing.spec.js +0 -240
- package/dist/src/product-loop/__tests__/context-policy.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/context-policy.test.js +0 -266
- package/dist/src/product-loop/__tests__/cost-preview.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/cost-preview.test.js +0 -111
- package/dist/src/product-loop/__tests__/cost-scoper.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/cost-scoper.test.js +0 -50
- package/dist/src/product-loop/__tests__/cross-run-memory.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/cross-run-memory.test.js +0 -168
- package/dist/src/product-loop/__tests__/design-output.spec.d.ts +0 -1
- package/dist/src/product-loop/__tests__/design-output.spec.js +0 -36
- package/dist/src/product-loop/__tests__/discover.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discover.test.js +0 -83
- package/dist/src/product-loop/__tests__/discovery-context-format.test.d.ts +0 -13
- package/dist/src/product-loop/__tests__/discovery-context-format.test.js +0 -100
- package/dist/src/product-loop/__tests__/discovery-council-runner.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discovery-council-runner.test.js +0 -13
- package/dist/src/product-loop/__tests__/discovery-detection.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discovery-detection.test.js +0 -151
- package/dist/src/product-loop/__tests__/discovery-ecosystem.test.d.ts +0 -8
- package/dist/src/product-loop/__tests__/discovery-ecosystem.test.js +0 -209
- package/dist/src/product-loop/__tests__/discovery-integration.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discovery-integration.test.js +0 -126
- package/dist/src/product-loop/__tests__/discovery-interview.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discovery-interview.test.js +0 -394
- package/dist/src/product-loop/__tests__/discovery-migrations.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discovery-migrations.test.js +0 -69
- package/dist/src/product-loop/__tests__/discovery-persistence.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discovery-persistence.test.js +0 -146
- package/dist/src/product-loop/__tests__/discovery-prompt-parser.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discovery-prompt-parser.test.js +0 -65
- package/dist/src/product-loop/__tests__/discovery-prompt-specificity.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discovery-prompt-specificity.test.js +0 -55
- package/dist/src/product-loop/__tests__/discovery-recommender-ecosystem.test.d.ts +0 -9
- package/dist/src/product-loop/__tests__/discovery-recommender-ecosystem.test.js +0 -178
- package/dist/src/product-loop/__tests__/discovery-recommender.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discovery-recommender.test.js +0 -316
- package/dist/src/product-loop/__tests__/discovery-schema.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/discovery-schema.test.js +0 -77
- package/dist/src/product-loop/__tests__/done-gate-coverage.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/done-gate-coverage.test.js +0 -135
- package/dist/src/product-loop/__tests__/done-gate.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/done-gate.test.js +0 -122
- package/dist/src/product-loop/__tests__/ee-extract-wiring.test.d.ts +0 -8
- package/dist/src/product-loop/__tests__/ee-extract-wiring.test.js +0 -186
- package/dist/src/product-loop/__tests__/extract-to-ee.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/extract-to-ee.test.js +0 -161
- package/dist/src/product-loop/__tests__/feedback-routing.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/feedback-routing.test.js +0 -83
- package/dist/src/product-loop/__tests__/gather-selectable-alts.test.d.ts +0 -15
- package/dist/src/product-loop/__tests__/gather-selectable-alts.test.js +0 -143
- package/dist/src/product-loop/__tests__/hot-path.spec.d.ts +0 -11
- package/dist/src/product-loop/__tests__/hot-path.spec.js +0 -146
- package/dist/src/product-loop/__tests__/integration.test.d.ts +0 -7
- package/dist/src/product-loop/__tests__/integration.test.js +0 -301
- package/dist/src/product-loop/__tests__/loop-driver-audit.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/loop-driver-audit.test.js +0 -269
- package/dist/src/product-loop/__tests__/loop-driver.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/loop-driver.test.js +0 -225
- package/dist/src/product-loop/__tests__/maintenance-task-synthesis.test.d.ts +0 -8
- package/dist/src/product-loop/__tests__/maintenance-task-synthesis.test.js +0 -67
- package/dist/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.d.ts +0 -13
- package/dist/src/product-loop/__tests__/phase-a1-a3-sprint-runner.test.js +0 -268
- package/dist/src/product-loop/__tests__/phase-a2-backlog-build.test.d.ts +0 -8
- package/dist/src/product-loop/__tests__/phase-a2-backlog-build.test.js +0 -162
- package/dist/src/product-loop/__tests__/phase-budget.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/phase-budget.test.js +0 -149
- package/dist/src/product-loop/__tests__/phase-orchestrator-integration.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/phase-orchestrator-integration.test.js +0 -138
- package/dist/src/product-loop/__tests__/phase-plan.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/phase-plan.test.js +0 -208
- package/dist/src/product-loop/__tests__/phase-rituals.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/phase-rituals.test.js +0 -174
- package/dist/src/product-loop/__tests__/phase-runner.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/phase-runner.test.js +0 -414
- package/dist/src/product-loop/__tests__/phase-tracker-bridge.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/phase-tracker-bridge.test.js +0 -67
- package/dist/src/product-loop/__tests__/pick-backend-stack.test.d.ts +0 -11
- package/dist/src/product-loop/__tests__/pick-backend-stack.test.js +0 -95
- package/dist/src/product-loop/__tests__/product-identity.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/product-identity.test.js +0 -40
- package/dist/src/product-loop/__tests__/progress-snapshot.test.d.ts +0 -8
- package/dist/src/product-loop/__tests__/progress-snapshot.test.js +0 -152
- package/dist/src/product-loop/__tests__/reality-anchor.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/reality-anchor.test.js +0 -49
- package/dist/src/product-loop/__tests__/repo-audit.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/repo-audit.test.js +0 -97
- package/dist/src/product-loop/__tests__/repo-brief.test.d.ts +0 -9
- package/dist/src/product-loop/__tests__/repo-brief.test.js +0 -132
- package/dist/src/product-loop/__tests__/role-memory.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/role-memory.test.js +0 -56
- package/dist/src/product-loop/__tests__/role-registry.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/role-registry.test.js +0 -222
- package/dist/src/product-loop/__tests__/role-routing-ee.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/role-routing-ee.test.js +0 -79
- package/dist/src/product-loop/__tests__/route-decision-emit.test.d.ts +0 -10
- package/dist/src/product-loop/__tests__/route-decision-emit.test.js +0 -222
- package/dist/src/product-loop/__tests__/seed-questions.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/seed-questions.test.js +0 -30
- package/dist/src/product-loop/__tests__/ship-polish.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/ship-polish.test.js +0 -96
- package/dist/src/product-loop/__tests__/sprint-planner.test.d.ts +0 -6
- package/dist/src/product-loop/__tests__/sprint-planner.test.js +0 -140
- package/dist/src/product-loop/__tests__/sprint-runner-backlog.test.d.ts +0 -8
- package/dist/src/product-loop/__tests__/sprint-runner-backlog.test.js +0 -221
- package/dist/src/product-loop/__tests__/sprint-runner-emit.test.d.ts +0 -14
- package/dist/src/product-loop/__tests__/sprint-runner-emit.test.js +0 -279
- package/dist/src/product-loop/__tests__/sprint-runner-phase-chunks.test.d.ts +0 -14
- package/dist/src/product-loop/__tests__/sprint-runner-phase-chunks.test.js +0 -193
- package/dist/src/product-loop/__tests__/sprint-runner.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/sprint-runner.test.js +0 -432
- package/dist/src/product-loop/__tests__/sprint-self-verify.test.d.ts +0 -8
- package/dist/src/product-loop/__tests__/sprint-self-verify.test.js +0 -73
- package/dist/src/product-loop/__tests__/sprint-store.test.d.ts +0 -7
- package/dist/src/product-loop/__tests__/sprint-store.test.js +0 -84
- package/dist/src/product-loop/__tests__/stakeholder-acl.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/stakeholder-acl.test.js +0 -83
- package/dist/src/product-loop/__tests__/state-md-ee-injections.test.d.ts +0 -8
- package/dist/src/product-loop/__tests__/state-md-ee-injections.test.js +0 -182
- package/dist/src/product-loop/__tests__/sufficiency-routing.spec.d.ts +0 -12
- package/dist/src/product-loop/__tests__/sufficiency-routing.spec.js +0 -140
- package/dist/src/product-loop/__tests__/typed-artifacts.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/typed-artifacts.test.js +0 -222
- package/dist/src/product-loop/__tests__/types.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/types.test.js +0 -79
- package/dist/src/product-loop/__tests__/verify-failure-threshold.test.d.ts +0 -9
- package/dist/src/product-loop/__tests__/verify-failure-threshold.test.js +0 -146
- package/dist/src/product-loop/__tests__/verify-failure-tracking.test.d.ts +0 -4
- package/dist/src/product-loop/__tests__/verify-failure-tracking.test.js +0 -122
- package/dist/src/product-loop/__tests__/verify-result.test.d.ts +0 -1
- package/dist/src/product-loop/__tests__/verify-result.test.js +0 -53
- package/dist/src/providers/__tests__/adapter-oauth-wiring.test.d.ts +0 -8
- package/dist/src/providers/__tests__/adapter-oauth-wiring.test.js +0 -125
- package/dist/src/providers/__tests__/capabilities-cosmetic.test.d.ts +0 -1
- package/dist/src/providers/__tests__/capabilities-cosmetic.test.js +0 -109
- package/dist/src/providers/__tests__/capabilities-flags.test.d.ts +0 -1
- package/dist/src/providers/__tests__/capabilities-flags.test.js +0 -145
- package/dist/src/providers/__tests__/capabilities-provider-options.test.d.ts +0 -1
- package/dist/src/providers/__tests__/capabilities-provider-options.test.js +0 -201
- package/dist/src/providers/__tests__/capabilities-sanitize.test.d.ts +0 -1
- package/dist/src/providers/__tests__/capabilities-sanitize.test.js +0 -60
- package/dist/src/providers/__tests__/capabilities.test.d.ts +0 -1
- package/dist/src/providers/__tests__/capabilities.test.js +0 -41
- package/dist/src/providers/__tests__/provider-coverage.test.d.ts +0 -1
- package/dist/src/providers/__tests__/provider-coverage.test.js +0 -45
- package/dist/src/providers/__tests__/reasoning-roundtrip.test.d.ts +0 -1
- package/dist/src/providers/__tests__/reasoning-roundtrip.test.js +0 -216
- package/dist/src/providers/__tests__/runtime-integration.test.d.ts +0 -1
- package/dist/src/providers/__tests__/runtime-integration.test.js +0 -93
- package/dist/src/providers/__tests__/runtime.test.d.ts +0 -1
- package/dist/src/providers/__tests__/runtime.test.js +0 -80
- package/dist/src/providers/__tests__/siliconflow-sse-repair.test.d.ts +0 -1
- package/dist/src/providers/__tests__/siliconflow-sse-repair.test.js +0 -267
- package/dist/src/providers/__tests__/strategies-registry.test.d.ts +0 -8
- package/dist/src/providers/__tests__/strategies-registry.test.js +0 -49
- package/dist/src/providers/__tests__/strategies-resolve.test.d.ts +0 -12
- package/dist/src/providers/__tests__/strategies-resolve.test.js +0 -128
- package/dist/src/providers/__tests__/wire-debug.test.d.ts +0 -1
- package/dist/src/providers/__tests__/wire-debug.test.js +0 -39
- package/dist/src/providers/adapter.test.d.ts +0 -1
- package/dist/src/providers/adapter.test.js +0 -19
- package/dist/src/providers/auth/__tests__/browser-flow.test.d.ts +0 -8
- package/dist/src/providers/auth/__tests__/browser-flow.test.js +0 -186
- package/dist/src/providers/auth/__tests__/device-flow.test.d.ts +0 -6
- package/dist/src/providers/auth/__tests__/device-flow.test.js +0 -219
- package/dist/src/providers/auth/__tests__/gemini-oauth.test.d.ts +0 -4
- package/dist/src/providers/auth/__tests__/gemini-oauth.test.js +0 -306
- package/dist/src/providers/auth/__tests__/grok-oauth.test.d.ts +0 -8
- package/dist/src/providers/auth/__tests__/grok-oauth.test.js +0 -236
- package/dist/src/providers/auth/__tests__/openai-oauth.test.d.ts +0 -7
- package/dist/src/providers/auth/__tests__/openai-oauth.test.js +0 -309
- package/dist/src/providers/auth/__tests__/token-store.test.d.ts +0 -7
- package/dist/src/providers/auth/__tests__/token-store.test.js +0 -125
- package/dist/src/providers/errors.test.d.ts +0 -1
- package/dist/src/providers/errors.test.js +0 -66
- package/dist/src/providers/gemini.test.d.ts +0 -1
- package/dist/src/providers/gemini.test.js +0 -37
- package/dist/src/providers/keychain.test.d.ts +0 -1
- package/dist/src/providers/keychain.test.js +0 -84
- package/dist/src/providers/mcp-vision-bridge.test.d.ts +0 -1
- package/dist/src/providers/mcp-vision-bridge.test.js +0 -381
- package/dist/src/providers/ollama.test.d.ts +0 -1
- package/dist/src/providers/ollama.test.js +0 -37
- package/dist/src/providers/openai-compatible.test.d.ts +0 -1
- package/dist/src/providers/openai-compatible.test.js +0 -53
- package/dist/src/providers/openai.test.d.ts +0 -1
- package/dist/src/providers/openai.test.js +0 -53
- package/dist/src/providers/pricing.test.d.ts +0 -1
- package/dist/src/providers/pricing.test.js +0 -81
- package/dist/src/providers/prompt-cache-key.spec.d.ts +0 -5
- package/dist/src/providers/prompt-cache-key.spec.js +0 -24
- package/dist/src/providers/runtime-mock.spec.d.ts +0 -8
- package/dist/src/providers/runtime-mock.spec.js +0 -69
- package/dist/src/providers/vision-proxy.test.d.ts +0 -1
- package/dist/src/providers/vision-proxy.test.js +0 -212
- package/dist/src/reporter/__tests__/acl-check.test.d.ts +0 -6
- package/dist/src/reporter/__tests__/acl-check.test.js +0 -59
- package/dist/src/reporter/__tests__/auto-fire.test.d.ts +0 -10
- package/dist/src/reporter/__tests__/auto-fire.test.js +0 -140
- package/dist/src/reporter/__tests__/budget.test.d.ts +0 -7
- package/dist/src/reporter/__tests__/budget.test.js +0 -60
- package/dist/src/reporter/__tests__/handlers.test.d.ts +0 -7
- package/dist/src/reporter/__tests__/handlers.test.js +0 -163
- package/dist/src/reporter/__tests__/query-router.test.d.ts +0 -6
- package/dist/src/reporter/__tests__/query-router.test.js +0 -90
- package/dist/src/router/__tests__/step-router.test.d.ts +0 -4
- package/dist/src/router/__tests__/step-router.test.js +0 -131
- package/dist/src/router/classifier/index.test.d.ts +0 -1
- package/dist/src/router/classifier/index.test.js +0 -29
- package/dist/src/router/classifier/regex.test.d.ts +0 -1
- package/dist/src/router/classifier/regex.test.js +0 -44
- package/dist/src/router/classifier/tree-sitter.test.d.ts +0 -1
- package/dist/src/router/classifier/tree-sitter.test.js +0 -23
- package/dist/src/router/cold.test.d.ts +0 -1
- package/dist/src/router/cold.test.js +0 -56
- package/dist/src/router/decide.test.d.ts +0 -1
- package/dist/src/router/decide.test.js +0 -198
- package/dist/src/router/health.test.d.ts +0 -1
- package/dist/src/router/health.test.js +0 -52
- package/dist/src/router/provider-sentinel.test.d.ts +0 -1
- package/dist/src/router/provider-sentinel.test.js +0 -20
- package/dist/src/router/role-override.test.d.ts +0 -1
- package/dist/src/router/role-override.test.js +0 -26
- package/dist/src/router/warm.test.d.ts +0 -1
- package/dist/src/router/warm.test.js +0 -202
- package/dist/src/scaffold/__tests__/continuation-prompt.test.d.ts +0 -4
- package/dist/src/scaffold/__tests__/continuation-prompt.test.js +0 -79
- package/dist/src/scaffold/__tests__/continue-as-council.spec.d.ts +0 -10
- package/dist/src/scaffold/__tests__/continue-as-council.spec.js +0 -102
- package/dist/src/scaffold/__tests__/dotnet-assembly-name.test.d.ts +0 -1
- package/dist/src/scaffold/__tests__/dotnet-assembly-name.test.js +0 -27
- package/dist/src/scaffold/__tests__/fe-scaffold-contents.test.d.ts +0 -1
- package/dist/src/scaffold/__tests__/fe-scaffold-contents.test.js +0 -106
- package/dist/src/scaffold/__tests__/init-new.smoke.spec.d.ts +0 -15
- package/dist/src/scaffold/__tests__/init-new.smoke.spec.js +0 -81
- package/dist/src/scaffold/__tests__/init-new.spec.d.ts +0 -5
- package/dist/src/scaffold/__tests__/init-new.spec.js +0 -378
- package/dist/src/scaffold/__tests__/install-bb-templates.spec.d.ts +0 -1
- package/dist/src/scaffold/__tests__/install-bb-templates.spec.js +0 -77
- package/dist/src/scaffold/__tests__/point-to-existing.spec.d.ts +0 -7
- package/dist/src/scaffold/__tests__/point-to-existing.spec.js +0 -94
- package/dist/src/self-qa/__tests__/agentic-context.test.d.ts +0 -1
- package/dist/src/self-qa/__tests__/agentic-context.test.js +0 -98
- package/dist/src/self-qa/__tests__/agentic-loop.test.d.ts +0 -1
- package/dist/src/self-qa/__tests__/agentic-loop.test.js +0 -62
- package/dist/src/self-qa/__tests__/delta-encoder.test.d.ts +0 -1
- package/dist/src/self-qa/__tests__/delta-encoder.test.js +0 -97
- package/dist/src/self-qa/__tests__/judge.test.d.ts +0 -1
- package/dist/src/self-qa/__tests__/judge.test.js +0 -131
- package/dist/src/self-qa/__tests__/scenario-planner.test.d.ts +0 -1
- package/dist/src/self-qa/__tests__/scenario-planner.test.js +0 -79
- package/dist/src/self-qa/__tests__/spec-emitter.test.d.ts +0 -1
- package/dist/src/self-qa/__tests__/spec-emitter.test.js +0 -62
- package/dist/src/storage/__tests__/migrations.test.d.ts +0 -12
- package/dist/src/storage/__tests__/migrations.test.js +0 -357
- package/dist/src/storage/__tests__/sweep-stale-pending.test.d.ts +0 -10
- package/dist/src/storage/__tests__/sweep-stale-pending.test.js +0 -97
- package/dist/src/storage/__tests__/ui-interaction-log.test.d.ts +0 -7
- package/dist/src/storage/__tests__/ui-interaction-log.test.js +0 -127
- package/dist/src/storage/atomic-io.test.d.ts +0 -1
- package/dist/src/storage/atomic-io.test.js +0 -74
- package/dist/src/storage/config.test.d.ts +0 -1
- package/dist/src/storage/config.test.js +0 -29
- package/dist/src/storage/session-experience-store.test.d.ts +0 -5
- package/dist/src/storage/session-experience-store.test.js +0 -86
- package/dist/src/storage/tool-results.test.d.ts +0 -1
- package/dist/src/storage/tool-results.test.js +0 -48
- package/dist/src/storage/transcript-response-entry.test.d.ts +0 -1
- package/dist/src/storage/transcript-response-entry.test.js +0 -98
- package/dist/src/storage/transcript.test.d.ts +0 -1
- package/dist/src/storage/transcript.test.js +0 -22
- package/dist/src/storage/usage-cap.test.d.ts +0 -1
- package/dist/src/storage/usage-cap.test.js +0 -51
- package/dist/src/tools/__tests__/native-tools.test.d.ts +0 -1
- package/dist/src/tools/__tests__/native-tools.test.js +0 -59
- package/dist/src/tools/__tests__/vision-gate.test.d.ts +0 -1
- package/dist/src/tools/__tests__/vision-gate.test.js +0 -56
- package/dist/src/tools/bash-output-cache.test.d.ts +0 -1
- package/dist/src/tools/bash-output-cache.test.js +0 -89
- package/dist/src/tools/bash-output-integration.test.d.ts +0 -10
- package/dist/src/tools/bash-output-integration.test.js +0 -30
- package/dist/src/tools/bash.test.d.ts +0 -1
- package/dist/src/tools/bash.test.js +0 -90
- package/dist/src/tools/computer.test.d.ts +0 -1
- package/dist/src/tools/computer.test.js +0 -142
- package/dist/src/tools/file-tracker.test.d.ts +0 -1
- package/dist/src/tools/file-tracker.test.js +0 -77
- package/dist/src/tools/file.test.d.ts +0 -1
- package/dist/src/tools/file.test.js +0 -106
- package/dist/src/tools/git-safety.test.d.ts +0 -1
- package/dist/src/tools/git-safety.test.js +0 -155
- package/dist/src/tools/registry-bash-empty-command.test.d.ts +0 -13
- package/dist/src/tools/registry-bash-empty-command.test.js +0 -57
- package/dist/src/tools/registry-bash-footer.test.d.ts +0 -7
- package/dist/src/tools/registry-bash-footer.test.js +0 -82
- package/dist/src/tools/registry-ee-query.test.d.ts +0 -11
- package/dist/src/tools/registry-ee-query.test.js +0 -71
- package/dist/src/tools/registry-git-safety.test.d.ts +0 -7
- package/dist/src/tools/registry-git-safety.test.js +0 -103
- package/dist/src/tools/registry-session-repeat.test.d.ts +0 -12
- package/dist/src/tools/registry-session-repeat.test.js +0 -87
- package/dist/src/tools/registry.test.d.ts +0 -1
- package/dist/src/tools/registry.test.js +0 -34
- package/dist/src/tools/schedule.test.d.ts +0 -1
- package/dist/src/tools/schedule.test.js +0 -118
- package/dist/src/tools/todo-write-snapshot.test.d.ts +0 -1
- package/dist/src/tools/todo-write-snapshot.test.js +0 -43
- package/dist/src/ui/__tests__/markdown-render.test.d.ts +0 -1
- package/dist/src/ui/__tests__/markdown-render.test.js +0 -65
- package/dist/src/ui/__tests__/picker-providers.test.d.ts +0 -1
- package/dist/src/ui/__tests__/picker-providers.test.js +0 -31
- package/dist/src/ui/cards/__tests__/product-status-card.test.d.ts +0 -1
- package/dist/src/ui/cards/__tests__/product-status-card.test.js +0 -27
- package/dist/src/ui/components/__tests__/council-leader-bubble.test.d.ts +0 -1
- package/dist/src/ui/components/__tests__/council-leader-bubble.test.js +0 -14
- package/dist/src/ui/components/__tests__/council-message-bubble.test.d.ts +0 -1
- package/dist/src/ui/components/__tests__/council-message-bubble.test.js +0 -74
- package/dist/src/ui/components/__tests__/council-phase-timeline.test.d.ts +0 -1
- package/dist/src/ui/components/__tests__/council-phase-timeline.test.js +0 -51
- package/dist/src/ui/components/__tests__/council-placeholder-bubble.test.d.ts +0 -1
- package/dist/src/ui/components/__tests__/council-placeholder-bubble.test.js +0 -14
- package/dist/src/ui/components/__tests__/council-question-card.test.d.ts +0 -1
- package/dist/src/ui/components/__tests__/council-question-card.test.js +0 -121
- package/dist/src/ui/components/__tests__/council-synthesis-banner.test.d.ts +0 -1
- package/dist/src/ui/components/__tests__/council-synthesis-banner.test.js +0 -11
- package/dist/src/ui/components/__tests__/task-list-panel.test.d.ts +0 -1
- package/dist/src/ui/components/__tests__/task-list-panel.test.js +0 -31
- package/dist/src/ui/components/__tests__/use-pair-quote-buffer.test.d.ts +0 -1
- package/dist/src/ui/components/__tests__/use-pair-quote-buffer.test.js +0 -37
- package/dist/src/ui/slash/__tests__/clear.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/clear.test.js +0 -58
- package/dist/src/ui/slash/__tests__/compact.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/compact.test.js +0 -43
- package/dist/src/ui/slash/__tests__/cost.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/cost.test.js +0 -54
- package/dist/src/ui/slash/__tests__/discuss.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/discuss.test.js +0 -83
- package/dist/src/ui/slash/__tests__/execute.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/execute.test.js +0 -71
- package/dist/src/ui/slash/__tests__/expand.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/expand.test.js +0 -67
- package/dist/src/ui/slash/__tests__/ideal.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/ideal.test.js +0 -158
- package/dist/src/ui/slash/__tests__/menu-parity.test.d.ts +0 -17
- package/dist/src/ui/slash/__tests__/menu-parity.test.js +0 -43
- package/dist/src/ui/slash/__tests__/optimize.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/optimize.test.js +0 -130
- package/dist/src/ui/slash/__tests__/pin.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/pin.test.js +0 -38
- package/dist/src/ui/slash/__tests__/plan.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/plan.test.js +0 -82
- package/dist/src/ui/slash/__tests__/ponytail.test.d.ts +0 -1
- package/dist/src/ui/slash/__tests__/ponytail.test.js +0 -37
- package/dist/src/ui/slash/__tests__/status-render.test.d.ts +0 -7
- package/dist/src/ui/slash/__tests__/status-render.test.js +0 -77
- package/dist/src/ui/slash/route.test.d.ts +0 -1
- package/dist/src/ui/slash/route.test.js +0 -70
- package/dist/src/ui/status-bar/index.test.d.ts +0 -1
- package/dist/src/ui/status-bar/index.test.js +0 -139
- package/dist/src/ui/status-bar/store.test.d.ts +0 -1
- package/dist/src/ui/status-bar/store.test.js +0 -116
- package/dist/src/ui/status-bar/tier-badge.test.d.ts +0 -1
- package/dist/src/ui/status-bar/tier-badge.test.js +0 -34
- package/dist/src/ui/status-bar/usd-meter.test.d.ts +0 -1
- package/dist/src/ui/status-bar/usd-meter.test.js +0 -32
- package/dist/src/ui/utils/__tests__/format.test.d.ts +0 -1
- package/dist/src/ui/utils/__tests__/format.test.js +0 -50
- package/dist/src/ui/utils/__tests__/tools.test.d.ts +0 -1
- package/dist/src/ui/utils/__tests__/tools.test.js +0 -48
- package/dist/src/ui/utils/relaunch.test.d.ts +0 -1
- package/dist/src/ui/utils/relaunch.test.js +0 -133
- package/dist/src/ui/utils/text.test.d.ts +0 -1
- package/dist/src/ui/utils/text.test.js +0 -47
- package/dist/src/usage/__tests__/product-ledger.test.d.ts +0 -1
- package/dist/src/usage/__tests__/product-ledger.test.js +0 -60
- package/dist/src/usage/downgrade.test.d.ts +0 -1
- package/dist/src/usage/downgrade.test.js +0 -70
- package/dist/src/usage/estimator.test.d.ts +0 -1
- package/dist/src/usage/estimator.test.js +0 -38
- package/dist/src/usage/ledger.test.d.ts +0 -1
- package/dist/src/usage/ledger.test.js +0 -171
- package/dist/src/usage/midstream.test.d.ts +0 -1
- package/dist/src/usage/midstream.test.js +0 -47
- package/dist/src/usage/thresholds.test.d.ts +0 -1
- package/dist/src/usage/thresholds.test.js +0 -77
- package/dist/src/utils/__tests__/auto-council-settings.test.d.ts +0 -1
- package/dist/src/utils/__tests__/auto-council-settings.test.js +0 -41
- package/dist/src/utils/__tests__/compaction-caps.test.d.ts +0 -21
- package/dist/src/utils/__tests__/compaction-caps.test.js +0 -187
- package/dist/src/utils/__tests__/ee-logger.test.d.ts +0 -11
- package/dist/src/utils/__tests__/ee-logger.test.js +0 -165
- package/dist/src/utils/__tests__/file-lock.test.d.ts +0 -1
- package/dist/src/utils/__tests__/file-lock.test.js +0 -66
- package/dist/src/utils/__tests__/footprint-gitignore.test.d.ts +0 -1
- package/dist/src/utils/__tests__/footprint-gitignore.test.js +0 -50
- package/dist/src/utils/__tests__/llm-deadline-abort.test.d.ts +0 -1
- package/dist/src/utils/__tests__/llm-deadline-abort.test.js +0 -33
- package/dist/src/utils/__tests__/llm-deadline.test.d.ts +0 -1
- package/dist/src/utils/__tests__/llm-deadline.test.js +0 -56
- package/dist/src/utils/__tests__/rate-limit.test.d.ts +0 -1
- package/dist/src/utils/__tests__/rate-limit.test.js +0 -38
- package/dist/src/utils/__tests__/settings-disabled-models.test.d.ts +0 -7
- package/dist/src/utils/__tests__/settings-disabled-models.test.js +0 -99
- package/dist/src/utils/__tests__/settings-web-research.test.d.ts +0 -1
- package/dist/src/utils/__tests__/settings-web-research.test.js +0 -46
- package/dist/src/utils/__tests__/slugify.test.d.ts +0 -1
- package/dist/src/utils/__tests__/slugify.test.js +0 -37
- package/dist/src/utils/__tests__/visible-retry.test.d.ts +0 -1
- package/dist/src/utils/__tests__/visible-retry.test.js +0 -143
- package/dist/src/utils/install-manager.test.d.ts +0 -1
- package/dist/src/utils/install-manager.test.js +0 -127
- package/dist/src/utils/instructions.test.d.ts +0 -1
- package/dist/src/utils/instructions.test.js +0 -93
- package/dist/src/utils/open-url.test.d.ts +0 -1
- package/dist/src/utils/open-url.test.js +0 -86
- package/dist/src/utils/permission-mode.test.d.ts +0 -1
- package/dist/src/utils/permission-mode.test.js +0 -188
- package/dist/src/utils/redactor.test.d.ts +0 -1
- package/dist/src/utils/redactor.test.js +0 -84
- package/dist/src/utils/settings.test.d.ts +0 -1
- package/dist/src/utils/settings.test.js +0 -212
- package/dist/src/utils/shell.test.d.ts +0 -1
- package/dist/src/utils/shell.test.js +0 -97
- package/dist/src/utils/skills.test.d.ts +0 -1
- package/dist/src/utils/skills.test.js +0 -45
- package/dist/src/utils/subagent-display.test.d.ts +0 -1
- package/dist/src/utils/subagent-display.test.js +0 -21
- package/dist/src/utils/subagents-settings.test.d.ts +0 -1
- package/dist/src/utils/subagents-settings.test.js +0 -64
- package/dist/src/utils/telegram-audio-settings.test.d.ts +0 -1
- package/dist/src/utils/telegram-audio-settings.test.js +0 -39
- package/dist/src/utils/update-checker.test.d.ts +0 -1
- package/dist/src/utils/update-checker.test.js +0 -138
- package/dist/src/verify/__tests__/coverage-parsers.test.d.ts +0 -1
- package/dist/src/verify/__tests__/coverage-parsers.test.js +0 -69
- package/dist/src/verify/__tests__/dotnet-recipe.test.d.ts +0 -10
- package/dist/src/verify/__tests__/dotnet-recipe.test.js +0 -70
- package/dist/src/verify/checkpoint.test.d.ts +0 -1
- package/dist/src/verify/checkpoint.test.js +0 -160
- package/dist/src/verify/entrypoint.test.d.ts +0 -1
- package/dist/src/verify/entrypoint.test.js +0 -233
- package/dist/src/verify/environment.test.d.ts +0 -1
- package/dist/src/verify/environment.test.js +0 -94
- package/dist/src/verify/orchestrator.test.d.ts +0 -1
- package/dist/src/verify/orchestrator.test.js +0 -126
- package/dist/src/verify/runtime-prep.test.d.ts +0 -1
- package/dist/src/verify/runtime-prep.test.js +0 -38
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it } from "vitest";
|
|
2
|
-
import { CrossTurnDedup, isCrossTurnDedupEnabled, wrapToolSetWithDedup } from "../cross-turn-dedup.js";
|
|
3
|
-
describe("CrossTurnDedup", () => {
|
|
4
|
-
describe("maybeDedup", () => {
|
|
5
|
-
it("returns null for the first occurrence and a stub for the second", () => {
|
|
6
|
-
const dedup = new CrossTurnDedup();
|
|
7
|
-
dedup.beginTurn();
|
|
8
|
-
const payload = "x".repeat(2_000);
|
|
9
|
-
// First call: passes through.
|
|
10
|
-
const first = dedup.maybeDedup("read_file", payload);
|
|
11
|
-
expect(first).toBeNull();
|
|
12
|
-
// Second user turn — bump counter.
|
|
13
|
-
dedup.beginTurn();
|
|
14
|
-
const second = dedup.maybeDedup("read_file", payload);
|
|
15
|
-
expect(second).not.toBeNull();
|
|
16
|
-
expect(second).toContain("[dup of");
|
|
17
|
-
expect(second).toContain("read_file");
|
|
18
|
-
expect(second).toContain("turn 1");
|
|
19
|
-
});
|
|
20
|
-
it("distinct large tool outputs do not collide on sha256-16", () => {
|
|
21
|
-
// Two large strings differing only in last char must produce different
|
|
22
|
-
// stubs (i.e. no false-positive dedup hit). Regression coverage for the
|
|
23
|
-
// sha1-12 → sha256-16 upgrade — at 48 bits the birthday bound made this
|
|
24
|
-
// theoretically plausible; at 64 bits it's astronomically unlikely.
|
|
25
|
-
const dedup = new CrossTurnDedup({ minChars: 100 });
|
|
26
|
-
dedup.beginTurn();
|
|
27
|
-
const a = "A".repeat(2_000);
|
|
28
|
-
const b = `${"A".repeat(1_999)}B`;
|
|
29
|
-
expect(dedup.maybeDedup("read_file", a)).toBeNull();
|
|
30
|
-
// Distinct content must NOT hit the cache.
|
|
31
|
-
expect(dedup.maybeDedup("read_file", b)).toBeNull();
|
|
32
|
-
// Two distinct payloads → two distinct cache entries (verified via
|
|
33
|
-
// cache size since the marker no longer embeds the hash post-G3).
|
|
34
|
-
expect(dedup.getStats().size).toBe(2);
|
|
35
|
-
// Re-emitting either payload now triggers a dedup hit.
|
|
36
|
-
const stubA = dedup.maybeDedup("read_file", a);
|
|
37
|
-
const stubB = dedup.maybeDedup("read_file", b);
|
|
38
|
-
expect(stubA).not.toBeNull();
|
|
39
|
-
expect(stubB).not.toBeNull();
|
|
40
|
-
expect(dedup.getStats().hits).toBe(2);
|
|
41
|
-
});
|
|
42
|
-
it("does not dedup different outputs", () => {
|
|
43
|
-
const dedup = new CrossTurnDedup();
|
|
44
|
-
dedup.beginTurn();
|
|
45
|
-
const a = "a".repeat(1_000);
|
|
46
|
-
const b = "b".repeat(1_000);
|
|
47
|
-
expect(dedup.maybeDedup("read_file", a)).toBeNull();
|
|
48
|
-
expect(dedup.maybeDedup("read_file", b)).toBeNull();
|
|
49
|
-
// Re-run yields a hit for a, miss for c.
|
|
50
|
-
expect(dedup.maybeDedup("read_file", a)).not.toBeNull();
|
|
51
|
-
const c = "c".repeat(1_000);
|
|
52
|
-
expect(dedup.maybeDedup("read_file", c)).toBeNull();
|
|
53
|
-
});
|
|
54
|
-
it("skips outputs below the min-chars threshold", () => {
|
|
55
|
-
const dedup = new CrossTurnDedup({ minChars: 500 });
|
|
56
|
-
dedup.beginTurn();
|
|
57
|
-
const small = "y".repeat(100);
|
|
58
|
-
expect(dedup.maybeDedup("bash", small)).toBeNull();
|
|
59
|
-
expect(dedup.maybeDedup("bash", small)).toBeNull();
|
|
60
|
-
expect(dedup.getStats().inserts).toBe(0);
|
|
61
|
-
expect(dedup.getStats().hits).toBe(0);
|
|
62
|
-
});
|
|
63
|
-
it("evicts oldest entry after exceeding maxEntries", () => {
|
|
64
|
-
const dedup = new CrossTurnDedup({ maxEntries: 3, minChars: 10 });
|
|
65
|
-
dedup.beginTurn();
|
|
66
|
-
// Insert 4 distinct payloads — first should be evicted.
|
|
67
|
-
const payloads = ["A", "B", "C", "D"].map((c) => c.repeat(50));
|
|
68
|
-
for (const p of payloads)
|
|
69
|
-
expect(dedup.maybeDedup("read_file", p)).toBeNull();
|
|
70
|
-
expect(dedup.getStats().size).toBe(3);
|
|
71
|
-
// First payload should no longer be cached (evicted) — re-running it
|
|
72
|
-
// returns null, not a stub.
|
|
73
|
-
expect(dedup.maybeDedup("read_file", payloads[0])).toBeNull();
|
|
74
|
-
// Latest payload should still be cached — re-running returns a stub.
|
|
75
|
-
expect(dedup.maybeDedup("read_file", payloads[3])).not.toBeNull();
|
|
76
|
-
});
|
|
77
|
-
it("no-ops when constructed with enabled=false", () => {
|
|
78
|
-
const dedup = new CrossTurnDedup({ enabled: false });
|
|
79
|
-
dedup.beginTurn();
|
|
80
|
-
const payload = "z".repeat(2_000);
|
|
81
|
-
expect(dedup.maybeDedup("read_file", payload)).toBeNull();
|
|
82
|
-
expect(dedup.maybeDedup("read_file", payload)).toBeNull();
|
|
83
|
-
expect(dedup.getStats().inserts).toBe(0);
|
|
84
|
-
expect(dedup.getStats().hits).toBe(0);
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
describe("isCrossTurnDedupEnabled", () => {
|
|
88
|
-
const original = process.env.MUONROI_CROSS_TURN_DEDUP;
|
|
89
|
-
afterEach(() => {
|
|
90
|
-
if (original === undefined)
|
|
91
|
-
delete process.env.MUONROI_CROSS_TURN_DEDUP;
|
|
92
|
-
else
|
|
93
|
-
process.env.MUONROI_CROSS_TURN_DEDUP = original;
|
|
94
|
-
});
|
|
95
|
-
it("defaults to enabled", () => {
|
|
96
|
-
delete process.env.MUONROI_CROSS_TURN_DEDUP;
|
|
97
|
-
expect(isCrossTurnDedupEnabled()).toBe(true);
|
|
98
|
-
});
|
|
99
|
-
it("respects MUONROI_CROSS_TURN_DEDUP=0", () => {
|
|
100
|
-
process.env.MUONROI_CROSS_TURN_DEDUP = "0";
|
|
101
|
-
expect(isCrossTurnDedupEnabled()).toBe(false);
|
|
102
|
-
});
|
|
103
|
-
it("respects MUONROI_CROSS_TURN_DEDUP=false", () => {
|
|
104
|
-
process.env.MUONROI_CROSS_TURN_DEDUP = "false";
|
|
105
|
-
expect(isCrossTurnDedupEnabled()).toBe(false);
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
describe("wrapToolSetWithDedup", () => {
|
|
109
|
-
function makeTool(returnValue) {
|
|
110
|
-
return {
|
|
111
|
-
description: "test tool",
|
|
112
|
-
inputSchema: { type: "object", properties: {} },
|
|
113
|
-
execute: async () => returnValue,
|
|
114
|
-
// biome-ignore lint: minimal AI ToolSet shape used by the wrapper only
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
it("returns the same tool set when dedup is null", () => {
|
|
118
|
-
const tools = { read_file: makeTool("payload") };
|
|
119
|
-
expect(wrapToolSetWithDedup(tools, null)).toBe(tools);
|
|
120
|
-
});
|
|
121
|
-
it("dedups string outputs across calls", async () => {
|
|
122
|
-
const dedup = new CrossTurnDedup({ minChars: 10 });
|
|
123
|
-
dedup.beginTurn();
|
|
124
|
-
const payload = "p".repeat(1_000);
|
|
125
|
-
const tools = { read_file: makeTool(payload) };
|
|
126
|
-
const wrapped = wrapToolSetWithDedup(tools, dedup);
|
|
127
|
-
const exec = wrapped.read_file.execute;
|
|
128
|
-
const first = await exec({});
|
|
129
|
-
expect(first).toBe(payload);
|
|
130
|
-
const second = (await exec({}));
|
|
131
|
-
expect(second).not.toBe(payload);
|
|
132
|
-
expect(second).toContain("[dup of");
|
|
133
|
-
});
|
|
134
|
-
it("dedups the .output field on object-shaped results", async () => {
|
|
135
|
-
const dedup = new CrossTurnDedup({ minChars: 10 });
|
|
136
|
-
dedup.beginTurn();
|
|
137
|
-
const payload = "q".repeat(1_000);
|
|
138
|
-
const tools = { read_file: makeTool({ success: true, output: payload }) };
|
|
139
|
-
const wrapped = wrapToolSetWithDedup(tools, dedup);
|
|
140
|
-
const exec = wrapped.read_file.execute;
|
|
141
|
-
const first = (await exec({}));
|
|
142
|
-
expect(first.output).toBe(payload);
|
|
143
|
-
const second = (await exec({}));
|
|
144
|
-
expect(second.output).toContain("[dup of");
|
|
145
|
-
});
|
|
146
|
-
it("dedups MCP content-array text parts across calls", async () => {
|
|
147
|
-
// MCP results are { type: "content", value: [{type:"text", text}] } — a
|
|
148
|
-
// shape the dedup previously ignored, so re-fetching the same MCP payload
|
|
149
|
-
// (e.g. the same docs page) re-billed full content every turn.
|
|
150
|
-
const dedup = new CrossTurnDedup({ minChars: 10 });
|
|
151
|
-
dedup.beginTurn();
|
|
152
|
-
const payload = "r".repeat(1_000);
|
|
153
|
-
const tools = {
|
|
154
|
-
mcp_docs__fetch: makeTool({ type: "content", value: [{ type: "text", text: payload }] }),
|
|
155
|
-
};
|
|
156
|
-
const wrapped = wrapToolSetWithDedup(tools, dedup);
|
|
157
|
-
const exec = wrapped.mcp_docs__fetch.execute;
|
|
158
|
-
const first = (await exec({}));
|
|
159
|
-
expect(first.value[0].text).toBe(payload);
|
|
160
|
-
const second = (await exec({}));
|
|
161
|
-
expect(second.value[0].text).toContain("[dup of");
|
|
162
|
-
});
|
|
163
|
-
it("leaves non-text MCP content parts (images) untouched", async () => {
|
|
164
|
-
const dedup = new CrossTurnDedup({ minChars: 10 });
|
|
165
|
-
dedup.beginTurn();
|
|
166
|
-
const image = { type: "image", data: "BASE64", mediaType: "image/png" };
|
|
167
|
-
const tools = { mcp_x__shot: makeTool({ type: "content", value: [image] }) };
|
|
168
|
-
const wrapped = wrapToolSetWithDedup(tools, dedup);
|
|
169
|
-
const exec = wrapped.mcp_x__shot.execute;
|
|
170
|
-
const out = (await exec({}));
|
|
171
|
-
expect(out.value[0]).toEqual(image);
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
//# sourceMappingURL=cross-turn-dedup.test.js.map
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* current-call-id.test.ts — Phase 6.9a unit tests.
|
|
3
|
-
*
|
|
4
|
-
* Verifies the _currentCallId state machine semantics for llm-token / llm-done
|
|
5
|
-
* correlationId pairing. Instead of instantiating the full Agent class (which
|
|
6
|
-
* has >20 private deps + AI SDK), this test validates the INVARIANTS that must
|
|
7
|
-
* hold true in the emitted events:
|
|
8
|
-
*
|
|
9
|
-
* 1. correlationId on llm-done is a valid non-empty UUID.
|
|
10
|
-
* 2. Two consecutive llm-done emits have DIFFERENT correlationIds.
|
|
11
|
-
* 3. llm-token events emitted between start and done share the same correlationId.
|
|
12
|
-
*
|
|
13
|
-
* These invariants are tested by simulating the emit sequence directly —
|
|
14
|
-
* the same logic the orchestrator executes at runtime.
|
|
15
|
-
*/
|
|
16
|
-
export {};
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* current-call-id.test.ts — Phase 6.9a unit tests.
|
|
3
|
-
*
|
|
4
|
-
* Verifies the _currentCallId state machine semantics for llm-token / llm-done
|
|
5
|
-
* correlationId pairing. Instead of instantiating the full Agent class (which
|
|
6
|
-
* has >20 private deps + AI SDK), this test validates the INVARIANTS that must
|
|
7
|
-
* hold true in the emitted events:
|
|
8
|
-
*
|
|
9
|
-
* 1. correlationId on llm-done is a valid non-empty UUID.
|
|
10
|
-
* 2. Two consecutive llm-done emits have DIFFERENT correlationIds.
|
|
11
|
-
* 3. llm-token events emitted between start and done share the same correlationId.
|
|
12
|
-
*
|
|
13
|
-
* These invariants are tested by simulating the emit sequence directly —
|
|
14
|
-
* the same logic the orchestrator executes at runtime.
|
|
15
|
-
*/
|
|
16
|
-
import { describe, expect, it } from "vitest";
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
// Simulate the _currentCallId state machine in isolation.
|
|
19
|
-
// This mirrors exactly what the orchestrator does:
|
|
20
|
-
// 1. _currentCallId = crypto.randomUUID() (before streamText)
|
|
21
|
-
// 2. emitEvent({ kind: "llm-token", correlationId: _currentCallId, ... }) (per token)
|
|
22
|
-
// 3. emitEvent({ kind: "llm-done", correlationId: _currentCallId, ... }) (onFinish)
|
|
23
|
-
// 4. _currentCallId = "" (clear after done)
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
function UUID_PATTERN() {
|
|
26
|
-
return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
27
|
-
}
|
|
28
|
-
/** Minimal simulation of one streamText call lifecycle. */
|
|
29
|
-
function simulateStreamTextCall(emitEvent, tokenCount = 3) {
|
|
30
|
-
// Step 1: assign fresh correlation ID (mirrors orchestrator line 1332 / 3873)
|
|
31
|
-
let currentCallId = crypto.randomUUID();
|
|
32
|
-
const callId = currentCallId; // capture for verification
|
|
33
|
-
// Step 2: emit llm-token per delta (mirrors orchestrator lines 1384–1408)
|
|
34
|
-
for (let i = 0; i < tokenCount; i++) {
|
|
35
|
-
try {
|
|
36
|
-
emitEvent({ t: "event", kind: "llm-token", correlationId: currentCallId, delta: `tok${i}`, tokenIndex: i });
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
/* best-effort */
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
// Step 3: onFinish — emit llm-done then clear (mirrors orchestrator lines 1360–1374 / 3920–3930)
|
|
43
|
-
try {
|
|
44
|
-
emitEvent({
|
|
45
|
-
t: "event",
|
|
46
|
-
kind: "llm-done",
|
|
47
|
-
correlationId: currentCallId,
|
|
48
|
-
totalChars: tokenCount * 4,
|
|
49
|
-
finishReason: "stop",
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
/* best-effort */
|
|
54
|
-
}
|
|
55
|
-
currentCallId = ""; // cleared after done
|
|
56
|
-
// After clear, callId is "" — use the captured pre-clear value for return
|
|
57
|
-
void currentCallId; // verify it was cleared
|
|
58
|
-
return callId;
|
|
59
|
-
}
|
|
60
|
-
// ---------------------------------------------------------------------------
|
|
61
|
-
// Tests
|
|
62
|
-
// ---------------------------------------------------------------------------
|
|
63
|
-
describe("_currentCallId state machine — invariant 1: correlationId is a valid UUID", () => {
|
|
64
|
-
it("llm-done correlationId is a valid UUID v4", () => {
|
|
65
|
-
const emitted = [];
|
|
66
|
-
simulateStreamTextCall((e) => emitted.push(e));
|
|
67
|
-
const done = emitted.find((e) => e.kind === "llm-done");
|
|
68
|
-
expect(done).toBeDefined();
|
|
69
|
-
expect(typeof done.correlationId).toBe("string");
|
|
70
|
-
expect(done.correlationId).toMatch(UUID_PATTERN());
|
|
71
|
-
expect(done.correlationId).not.toBe("");
|
|
72
|
-
});
|
|
73
|
-
it("llm-token correlationId is a valid UUID v4", () => {
|
|
74
|
-
const emitted = [];
|
|
75
|
-
simulateStreamTextCall((e) => emitted.push(e), 2);
|
|
76
|
-
const tokens = emitted.filter((e) => e.kind === "llm-token");
|
|
77
|
-
expect(tokens.length).toBe(2);
|
|
78
|
-
for (const t of tokens) {
|
|
79
|
-
expect(t.correlationId).toMatch(UUID_PATTERN());
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
describe("_currentCallId state machine — invariant 2: different correlationId per call", () => {
|
|
84
|
-
it("two consecutive calls produce different correlationIds", () => {
|
|
85
|
-
const emitted = [];
|
|
86
|
-
const id1 = simulateStreamTextCall((e) => emitted.push(e));
|
|
87
|
-
const id2 = simulateStreamTextCall((e) => emitted.push(e));
|
|
88
|
-
expect(id1).not.toBe(id2);
|
|
89
|
-
expect(id1).toMatch(UUID_PATTERN());
|
|
90
|
-
expect(id2).toMatch(UUID_PATTERN());
|
|
91
|
-
});
|
|
92
|
-
it("correlationId is unique across 10 sequential calls", () => {
|
|
93
|
-
const ids = new Set();
|
|
94
|
-
for (let i = 0; i < 10; i++) {
|
|
95
|
-
const id = simulateStreamTextCall(() => { });
|
|
96
|
-
ids.add(id);
|
|
97
|
-
}
|
|
98
|
-
expect(ids.size).toBe(10); // all unique
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
describe("_currentCallId state machine — invariant 3: tokens share correlationId with their done", () => {
|
|
102
|
-
it("all llm-token events share the same correlationId as llm-done", () => {
|
|
103
|
-
const emitted = [];
|
|
104
|
-
simulateStreamTextCall((e) => emitted.push(e), 5);
|
|
105
|
-
const done = emitted.find((e) => e.kind === "llm-done");
|
|
106
|
-
const tokens = emitted.filter((e) => e.kind === "llm-token");
|
|
107
|
-
expect(done).toBeDefined();
|
|
108
|
-
expect(tokens.length).toBe(5);
|
|
109
|
-
for (const t of tokens) {
|
|
110
|
-
expect(t.correlationId).toBe(done.correlationId);
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
it("tokens from call1 do NOT share correlationId with call2", () => {
|
|
114
|
-
const call1 = [];
|
|
115
|
-
const call2 = [];
|
|
116
|
-
simulateStreamTextCall((e) => call1.push(e), 3);
|
|
117
|
-
simulateStreamTextCall((e) => call2.push(e), 3);
|
|
118
|
-
const call1Id = call1.find((e) => e.kind === "llm-done").correlationId;
|
|
119
|
-
const call2Id = call2.find((e) => e.kind === "llm-done").correlationId;
|
|
120
|
-
expect(call1Id).not.toBe(call2Id);
|
|
121
|
-
for (const t of call1.filter((e) => e.kind === "llm-token")) {
|
|
122
|
-
expect(t.correlationId).toBe(call1Id);
|
|
123
|
-
}
|
|
124
|
-
for (const t of call2.filter((e) => e.kind === "llm-token")) {
|
|
125
|
-
expect(t.correlationId).toBe(call2Id);
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
describe("_currentCallId state machine — cleared to empty after done", () => {
|
|
130
|
-
it("callId captured before done is non-empty; cleared value after done would be empty", () => {
|
|
131
|
-
// The orchestrator sets currentCallId = "" after emitting llm-done.
|
|
132
|
-
// We verify the captured callId (before clear) is non-empty and UUID-shaped.
|
|
133
|
-
const callId = simulateStreamTextCall(() => { });
|
|
134
|
-
expect(callId).toMatch(UUID_PATTERN()); // was non-empty UUID before clear
|
|
135
|
-
expect(callId).not.toBe(""); // was not already empty
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
//# sourceMappingURL=current-call-id.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { createHash } from "crypto";
|
|
2
|
-
import { promises as fs } from "fs";
|
|
3
|
-
import os from "os";
|
|
4
|
-
import path from "path";
|
|
5
|
-
import { describe, expect, it } from "vitest";
|
|
6
|
-
import { DelegationManager } from "../delegations.js";
|
|
7
|
-
function getProjectId(cwd) {
|
|
8
|
-
const base = path
|
|
9
|
-
.basename(cwd)
|
|
10
|
-
.replace(/[^a-zA-Z0-9._-]+/g, "-")
|
|
11
|
-
.replace(/^-+|-+$/g, "") || "project";
|
|
12
|
-
const hash = createHash("sha1").update(cwd).digest("hex").slice(0, 10);
|
|
13
|
-
return `${base}-${hash}`;
|
|
14
|
-
}
|
|
15
|
-
async function getDelegationsDir(cwd) {
|
|
16
|
-
const projectId = getProjectId(cwd);
|
|
17
|
-
return path.join(os.homedir(), ".muonroi-cli", "delegations", projectId);
|
|
18
|
-
}
|
|
19
|
-
describe("DelegationManager.kill", () => {
|
|
20
|
-
it("terminates a running delegation and updates its status to error", async () => {
|
|
21
|
-
const tempCwd = path.join(os.tmpdir(), "muonroi-test-" + Math.random().toString(36).slice(2));
|
|
22
|
-
const manager = new DelegationManager(() => tempCwd);
|
|
23
|
-
const dir = await getDelegationsDir(tempCwd);
|
|
24
|
-
await fs.mkdir(dir, { recursive: true });
|
|
25
|
-
const id = "test-amber-panda";
|
|
26
|
-
const jobPath = path.join(dir, `${id}.json`);
|
|
27
|
-
const outputPath = path.join(dir, `${id}.md`);
|
|
28
|
-
// Create a mock running delegation
|
|
29
|
-
const record = {
|
|
30
|
-
id,
|
|
31
|
-
agent: "explore",
|
|
32
|
-
description: "test delegation",
|
|
33
|
-
prompt: "noop",
|
|
34
|
-
cwd: tempCwd,
|
|
35
|
-
model: "grok-4",
|
|
36
|
-
sandboxMode: "off",
|
|
37
|
-
maxToolRounds: 10,
|
|
38
|
-
maxTokens: 4000,
|
|
39
|
-
status: "running",
|
|
40
|
-
startedAt: new Date().toISOString(),
|
|
41
|
-
outputPath,
|
|
42
|
-
pid: 99999, // dummy PID
|
|
43
|
-
};
|
|
44
|
-
await fs.writeFile(jobPath, JSON.stringify(record, null, 2), "utf8");
|
|
45
|
-
// Call cancel
|
|
46
|
-
const result = await manager.kill(id);
|
|
47
|
-
expect(result.success).toBe(true);
|
|
48
|
-
expect(result.output).toContain(`Delegation "${id}" (PID: 99999) has been terminated.`);
|
|
49
|
-
// Verify the record was updated
|
|
50
|
-
const updatedRaw = await fs.readFile(jobPath, "utf8");
|
|
51
|
-
const updated = JSON.parse(updatedRaw);
|
|
52
|
-
expect(updated.status).toBe("error");
|
|
53
|
-
expect(updated.error).toBe("Cancelled by user.");
|
|
54
|
-
// Cleanup
|
|
55
|
-
await fs.rm(jobPath, { force: true });
|
|
56
|
-
await fs.rm(outputPath, { force: true });
|
|
57
|
-
await fs.rm(dir, { recursive: true, force: true });
|
|
58
|
-
});
|
|
59
|
-
it("returns failure if the delegation ID is not found", async () => {
|
|
60
|
-
const tempCwd = path.join(os.tmpdir(), "muonroi-test-" + Math.random().toString(36).slice(2));
|
|
61
|
-
const manager = new DelegationManager(() => tempCwd);
|
|
62
|
-
const result = await manager.kill("non-existent-id");
|
|
63
|
-
expect(result.success).toBe(false);
|
|
64
|
-
expect(result.output).toContain('Delegation "non-existent-id" not found.');
|
|
65
|
-
});
|
|
66
|
-
it("returns failure if the delegation is already finished", async () => {
|
|
67
|
-
const tempCwd = path.join(os.tmpdir(), "muonroi-test-" + Math.random().toString(36).slice(2));
|
|
68
|
-
const manager = new DelegationManager(() => tempCwd);
|
|
69
|
-
const dir = await getDelegationsDir(tempCwd);
|
|
70
|
-
await fs.mkdir(dir, { recursive: true });
|
|
71
|
-
const id = "test-steady-owl";
|
|
72
|
-
const jobPath = path.join(dir, `${id}.json`);
|
|
73
|
-
const record = {
|
|
74
|
-
id,
|
|
75
|
-
agent: "explore",
|
|
76
|
-
description: "test delegation",
|
|
77
|
-
prompt: "noop",
|
|
78
|
-
cwd: tempCwd,
|
|
79
|
-
model: "grok-4",
|
|
80
|
-
sandboxMode: "off",
|
|
81
|
-
maxToolRounds: 10,
|
|
82
|
-
maxTokens: 4000,
|
|
83
|
-
status: "complete",
|
|
84
|
-
startedAt: new Date().toISOString(),
|
|
85
|
-
outputPath: path.join(dir, `${id}.md`),
|
|
86
|
-
};
|
|
87
|
-
await fs.writeFile(jobPath, JSON.stringify(record, null, 2), "utf8");
|
|
88
|
-
const result = await manager.kill(id);
|
|
89
|
-
expect(result.success).toBe(false);
|
|
90
|
-
expect(result.output).toContain(`Delegation "${id}" is not running (status: complete).`);
|
|
91
|
-
// Cleanup
|
|
92
|
-
await fs.rm(jobPath, { force: true });
|
|
93
|
-
await fs.rm(dir, { recursive: true, force: true });
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
//# sourceMappingURL=delegations.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Forensics envelope for opaque provider 4xx errors.
|
|
3
|
-
*
|
|
4
|
-
* Background: 16 occurrences in interaction_logs of
|
|
5
|
-
* "The parameter is invalid. Please check again."
|
|
6
|
-
* (siliconflow / DeepSeek-V4-Flash, 2026-05-13 → 2026-05-14) were logged with
|
|
7
|
-
* ONLY the friendly message. With nothing else captured — no status code,
|
|
8
|
-
* no response body, no request param names — the cause is unrecoverable
|
|
9
|
-
* without a repro. summarizeApiErrorForLog closes that gap.
|
|
10
|
-
*
|
|
11
|
-
* Test goals:
|
|
12
|
-
* 1. Wire-shape we WANT to persist (statusCode, urlHost, body trunc, param keys).
|
|
13
|
-
* 2. NEVER persist request param VALUES (might contain secrets / PII).
|
|
14
|
-
* 3. Cap response body so a 1MB error response can't bloat interaction_logs.
|
|
15
|
-
* 4. Identity null on non-APICallError so the helper is safe to call
|
|
16
|
-
* unconditionally from the log site.
|
|
17
|
-
*/
|
|
18
|
-
import { APICallError } from "@ai-sdk/provider";
|
|
19
|
-
import { describe, expect, it } from "vitest";
|
|
20
|
-
import { summarizeApiErrorForLog } from "../error-utils.js";
|
|
21
|
-
describe("summarizeApiErrorForLog", () => {
|
|
22
|
-
it("captures the wire envelope for an APICallError without leaking param values", () => {
|
|
23
|
-
const err = new APICallError({
|
|
24
|
-
message: "The parameter is invalid. Please check again.",
|
|
25
|
-
url: "https://api.siliconflow.com/v1/chat/completions",
|
|
26
|
-
requestBodyValues: {
|
|
27
|
-
model: "deepseek-ai/DeepSeek-V4-Flash",
|
|
28
|
-
messages: [{ role: "user", content: "secret prompt" }],
|
|
29
|
-
temperature: 0.7,
|
|
30
|
-
tools: [{ type: "function", function: { name: "read_file" } }],
|
|
31
|
-
},
|
|
32
|
-
statusCode: 400,
|
|
33
|
-
responseBody: '{"error":{"message":"The parameter is invalid. Please check again.","code":20015}}',
|
|
34
|
-
isRetryable: false,
|
|
35
|
-
});
|
|
36
|
-
const out = summarizeApiErrorForLog(err);
|
|
37
|
-
expect(out).not.toBeNull();
|
|
38
|
-
expect(out.statusCode).toBe(400);
|
|
39
|
-
expect(out.urlHost).toBe("api.siliconflow.com");
|
|
40
|
-
expect(out.responseBodyTrunc).toBe('{"error":{"message":"The parameter is invalid. Please check again.","code":20015}}');
|
|
41
|
-
// Keys ONLY — values must never reach the log.
|
|
42
|
-
expect(out.requestParamKeys).toEqual(["messages", "model", "temperature", "tools"]);
|
|
43
|
-
// Confirm no value leak by stringifying the whole envelope.
|
|
44
|
-
const serialized = JSON.stringify(out);
|
|
45
|
-
expect(serialized).not.toContain("secret prompt");
|
|
46
|
-
expect(serialized).not.toContain("DeepSeek-V4-Flash");
|
|
47
|
-
expect(serialized).not.toContain("read_file");
|
|
48
|
-
expect(out.isRetryable).toBe(false);
|
|
49
|
-
});
|
|
50
|
-
it("truncates response body over 1000 chars to keep interaction_logs bounded", () => {
|
|
51
|
-
const giantBody = `${"x".repeat(2_000)}`;
|
|
52
|
-
const err = new APICallError({
|
|
53
|
-
message: "rate limit",
|
|
54
|
-
url: "https://api.example.com/x",
|
|
55
|
-
requestBodyValues: {},
|
|
56
|
-
statusCode: 429,
|
|
57
|
-
responseBody: giantBody,
|
|
58
|
-
});
|
|
59
|
-
const out = summarizeApiErrorForLog(err);
|
|
60
|
-
expect(out).not.toBeNull();
|
|
61
|
-
expect(out.responseBodyTrunc.length).toBeLessThanOrEqual(1020);
|
|
62
|
-
expect(out.responseBodyTrunc.endsWith("…[truncated]")).toBe(true);
|
|
63
|
-
});
|
|
64
|
-
it("returns null for non-APICallError so the helper is safe to call unconditionally", () => {
|
|
65
|
-
expect(summarizeApiErrorForLog(new Error("plain"))).toBeNull();
|
|
66
|
-
expect(summarizeApiErrorForLog("string error")).toBeNull();
|
|
67
|
-
expect(summarizeApiErrorForLog(undefined)).toBeNull();
|
|
68
|
-
});
|
|
69
|
-
it("handles malformed URL without throwing — urlHost becomes undefined", () => {
|
|
70
|
-
const err = new APICallError({
|
|
71
|
-
message: "bad",
|
|
72
|
-
url: "not a url",
|
|
73
|
-
requestBodyValues: {},
|
|
74
|
-
statusCode: 500,
|
|
75
|
-
});
|
|
76
|
-
const out = summarizeApiErrorForLog(err);
|
|
77
|
-
expect(out).not.toBeNull();
|
|
78
|
-
expect(out.urlHost).toBeUndefined();
|
|
79
|
-
expect(out.statusCode).toBe(500);
|
|
80
|
-
});
|
|
81
|
-
it("handles non-object requestBodyValues without crashing — requestParamKeys becomes undefined", () => {
|
|
82
|
-
const err = new APICallError({
|
|
83
|
-
message: "x",
|
|
84
|
-
url: "https://api.example.com/x",
|
|
85
|
-
requestBodyValues: "raw json string", // pathological case
|
|
86
|
-
statusCode: 400,
|
|
87
|
-
});
|
|
88
|
-
const out = summarizeApiErrorForLog(err);
|
|
89
|
-
expect(out).not.toBeNull();
|
|
90
|
-
expect(out.requestParamKeys).toBeUndefined();
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
//# sourceMappingURL=error-forensics.test.js.map
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for flow-resume.ts — loadFlowResumeDigest reads .muonroi-flow/
|
|
3
|
-
* state before chat transcript on cold start.
|
|
4
|
-
*/
|
|
5
|
-
import { mkdtemp, rm } from "node:fs/promises";
|
|
6
|
-
import { tmpdir } from "node:os";
|
|
7
|
-
import * as path from "node:path";
|
|
8
|
-
import { afterEach, describe, expect, it } from "vitest";
|
|
9
|
-
import { parseSections } from "../../flow/parser.js";
|
|
10
|
-
import { createRun, setActiveRunId, updateRunFile } from "../../flow/run-manager.js";
|
|
11
|
-
import { ensureFlowDir } from "../../flow/scaffold.js";
|
|
12
|
-
import { loadFlowResumeDigest } from "../flow-resume.js";
|
|
13
|
-
let tempDirs = [];
|
|
14
|
-
async function makeTempDir(prefix) {
|
|
15
|
-
const dir = await mkdtemp(path.join(tmpdir(), prefix));
|
|
16
|
-
tempDirs.push(dir);
|
|
17
|
-
return dir;
|
|
18
|
-
}
|
|
19
|
-
afterEach(async () => {
|
|
20
|
-
for (const d of tempDirs) {
|
|
21
|
-
await rm(d, { recursive: true, force: true, maxRetries: 10, retryDelay: 50 }).catch(() => { });
|
|
22
|
-
}
|
|
23
|
-
tempDirs = [];
|
|
24
|
-
});
|
|
25
|
-
describe("loadFlowResumeDigest", () => {
|
|
26
|
-
it("returns Resume Digest content from active run state.md", async () => {
|
|
27
|
-
const cwd = await makeTempDir("resume-digest-");
|
|
28
|
-
const flowDir = await ensureFlowDir(cwd);
|
|
29
|
-
const run = await createRun(flowDir);
|
|
30
|
-
await setActiveRunId(flowDir, run.id);
|
|
31
|
-
// Write Resume Digest content
|
|
32
|
-
const stateMap = parseSections("");
|
|
33
|
-
stateMap.sections.set("Resume Digest", "Working on feature X. File: src/foo.ts modified.");
|
|
34
|
-
stateMap.sections.set("Experience Snapshot", "");
|
|
35
|
-
await updateRunFile(flowDir, run.id, "state.md", stateMap);
|
|
36
|
-
const digest = await loadFlowResumeDigest(cwd);
|
|
37
|
-
expect(digest).toBe("Working on feature X. File: src/foo.ts modified.");
|
|
38
|
-
});
|
|
39
|
-
it("returns null when .muonroi-flow/ does not exist", async () => {
|
|
40
|
-
const cwd = await makeTempDir("no-flow-");
|
|
41
|
-
const digest = await loadFlowResumeDigest(cwd);
|
|
42
|
-
expect(digest).toBeNull();
|
|
43
|
-
});
|
|
44
|
-
it("returns null when no active run is set", async () => {
|
|
45
|
-
const cwd = await makeTempDir("no-active-");
|
|
46
|
-
await ensureFlowDir(cwd);
|
|
47
|
-
// Don't set active run
|
|
48
|
-
const digest = await loadFlowResumeDigest(cwd);
|
|
49
|
-
expect(digest).toBeNull();
|
|
50
|
-
});
|
|
51
|
-
it("returns null when active run has empty Resume Digest", async () => {
|
|
52
|
-
const cwd = await makeTempDir("empty-digest-");
|
|
53
|
-
const flowDir = await ensureFlowDir(cwd);
|
|
54
|
-
const run = await createRun(flowDir);
|
|
55
|
-
await setActiveRunId(flowDir, run.id);
|
|
56
|
-
// createRun initializes state.md with empty Resume Digest — don't write content
|
|
57
|
-
const digest = await loadFlowResumeDigest(cwd);
|
|
58
|
-
expect(digest).toBeNull();
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
//# sourceMappingURL=flow-resume.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* P0 #2 — surface the ROUTED model/provider on account/auth/rate errors so a
|
|
3
|
-
* cryptic provider 402 ("Insufficient Balance") tells the user WHICH model it
|
|
4
|
-
* actually ran (e.g. a project-pinned deepseek model overriding their default)
|
|
5
|
-
* and how to fix it, instead of leaving them guessing.
|
|
6
|
-
*/
|
|
7
|
-
import { APICallError } from "@ai-sdk/provider";
|
|
8
|
-
import { describe, expect, it } from "vitest";
|
|
9
|
-
import { humanizeApiError } from "../error-utils.js";
|
|
10
|
-
function apiErr(statusCode, responseBody) {
|
|
11
|
-
return new APICallError({
|
|
12
|
-
message: "provider error",
|
|
13
|
-
url: "https://api.deepseek.com/chat/completions",
|
|
14
|
-
requestBodyValues: { model: "deepseek-v4-flash" },
|
|
15
|
-
statusCode,
|
|
16
|
-
responseBody,
|
|
17
|
-
isRetryable: false,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
describe("humanizeApiError — routing context (P0 #2)", () => {
|
|
21
|
-
it("adds routed model + provider + a balance hint on 402", () => {
|
|
22
|
-
const err = apiErr(402, '{"error":{"message":"Insufficient Balance"}}');
|
|
23
|
-
const msg = humanizeApiError(err, { modelId: "deepseek-v4-flash", providerId: "deepseek" });
|
|
24
|
-
expect(msg).toContain("Insufficient Balance");
|
|
25
|
-
expect(msg).toContain("deepseek-v4-flash");
|
|
26
|
-
expect(msg).toContain("deepseek");
|
|
27
|
-
expect(msg).toMatch(/-m /); // suggests switching model
|
|
28
|
-
expect(msg).toMatch(/balance|credit/i);
|
|
29
|
-
});
|
|
30
|
-
it("points to keys login on 401/403", () => {
|
|
31
|
-
const msg = humanizeApiError(apiErr(401, '{"error":{"message":"bad key"}}'), {
|
|
32
|
-
modelId: "gpt-5.4-mini",
|
|
33
|
-
providerId: "openai",
|
|
34
|
-
});
|
|
35
|
-
expect(msg).toContain("gpt-5.4-mini");
|
|
36
|
-
expect(msg).toMatch(/keys login/);
|
|
37
|
-
});
|
|
38
|
-
it("mentions rate limit + switch on 429", () => {
|
|
39
|
-
const msg = humanizeApiError(apiErr(429, '{"error":{"message":"slow down"}}'), {
|
|
40
|
-
modelId: "deepseek-v4-flash",
|
|
41
|
-
providerId: "deepseek",
|
|
42
|
-
});
|
|
43
|
-
expect(msg).toMatch(/rate.?limit/i);
|
|
44
|
-
expect(msg).toMatch(/-m /);
|
|
45
|
-
});
|
|
46
|
-
it("does NOT add a routing suffix on server-side 500 (not the user's routing)", () => {
|
|
47
|
-
const msg = humanizeApiError(apiErr(500, '{"error":{"message":"boom"}}'), {
|
|
48
|
-
modelId: "deepseek-v4-flash",
|
|
49
|
-
providerId: "deepseek",
|
|
50
|
-
});
|
|
51
|
-
expect(msg).not.toContain("routed to");
|
|
52
|
-
expect(msg).not.toContain("deepseek-v4-flash");
|
|
53
|
-
});
|
|
54
|
-
it("is unchanged when no context is supplied (backward compatible)", () => {
|
|
55
|
-
const err = apiErr(402, '{"error":{"message":"Insufficient Balance"}}');
|
|
56
|
-
const withoutCtx = humanizeApiError(err);
|
|
57
|
-
expect(withoutCtx).toBe("Insufficient Balance");
|
|
58
|
-
expect(withoutCtx).not.toContain("routed to");
|
|
59
|
-
});
|
|
60
|
-
it("flags balance even when status is unparsed but the body says so", () => {
|
|
61
|
-
// Some gateways surface the balance error without a clean statusCode.
|
|
62
|
-
const err = new Error("Insufficient Balance");
|
|
63
|
-
const msg = humanizeApiError(err, { modelId: "deepseek-v4-flash", providerId: "deepseek" });
|
|
64
|
-
expect(msg).toContain("deepseek-v4-flash");
|
|
65
|
-
expect(msg).toMatch(/balance|credit/i);
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
//# sourceMappingURL=humanize-api-error.test.js.map
|