muonroi-cli 1.7.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +122 -122
- package/dist/packages/agent-harness-core/src/event-filter.js +1 -0
- package/dist/packages/agent-harness-core/src/event-redact.js +8 -0
- package/dist/packages/agent-harness-core/src/mcp-server.d.ts +16 -0
- package/dist/packages/agent-harness-core/src/mcp-server.js +88 -10
- package/dist/packages/agent-harness-core/src/protocol.d.ts +15 -0
- package/dist/packages/agent-harness-core/src/selector.js +2 -2
- package/dist/packages/agent-harness-core/src/transports/sidechannel.js +1 -1
- package/dist/packages/agent-harness-opentui/src/agent-mode.js +1 -1
- package/dist/packages/agent-harness-opentui/src/install.js +1 -1
- package/dist/src/__test-stubs__/vitest-setup.js +4 -0
- package/dist/src/agent-harness/__tests__/mock-model.spec.js +54 -0
- package/dist/src/agent-harness/mock-model.d.ts +1 -1
- package/dist/src/agent-harness/mock-model.js +32 -3
- package/dist/src/agent-harness/test-spawn.js +3 -1
- package/dist/src/chat/chat-keychain.js +9 -1
- package/dist/src/cli/cost-forensics.js +12 -12
- package/dist/src/cli/keys.d.ts +2 -2
- package/dist/src/cli/keys.js +107 -28
- package/dist/src/cli/usage-report.js +2 -2
- package/dist/src/council/__tests__/abort-threading.test.d.ts +1 -0
- package/dist/src/council/__tests__/abort-threading.test.js +193 -0
- package/dist/src/council/__tests__/clarification-prompt.test.js +21 -1
- package/dist/src/council/__tests__/council-turn-length-emit.test.d.ts +1 -0
- package/dist/src/council/__tests__/council-turn-length-emit.test.js +130 -0
- package/dist/src/council/__tests__/debate-round-budget.test.d.ts +1 -0
- package/dist/src/council/__tests__/debate-round-budget.test.js +45 -0
- package/dist/src/council/__tests__/evaluator-metrics.test.js +3 -0
- package/dist/src/council/__tests__/post-debate-recommendation.test.d.ts +1 -0
- package/dist/src/council/__tests__/post-debate-recommendation.test.js +58 -0
- package/dist/src/council/__tests__/research-tools.test.js +4 -0
- package/dist/src/council/__tests__/round-tools.test.js +6 -0
- package/dist/src/council/clarifier-question-cap.test.d.ts +12 -0
- package/dist/src/council/clarifier-question-cap.test.js +73 -0
- package/dist/src/council/clarifier.d.ts +29 -1
- package/dist/src/council/clarifier.js +64 -1
- package/dist/src/council/debate-planner.d.ts +2 -1
- package/dist/src/council/debate-planner.js +5 -3
- package/dist/src/council/debate.d.ts +9 -0
- package/dist/src/council/debate.js +88 -8
- package/dist/src/council/index.d.ts +46 -1
- package/dist/src/council/index.js +125 -19
- package/dist/src/council/llm.js +41 -13
- package/dist/src/council/prompts.js +56 -21
- package/dist/src/council/types.d.ts +14 -1
- package/dist/src/ee/__tests__/export-transcripts.test.js +1 -1
- package/dist/src/ee/bridge.d.ts +3 -1
- package/dist/src/ee/bridge.js +9 -3
- package/dist/src/ee/bridge.test.js +1 -2
- package/dist/src/ee/client.js +15 -2
- package/dist/src/ee/recall-ledger.d.ts +20 -0
- package/dist/src/ee/recall-ledger.js +40 -1
- package/dist/src/ee/search.d.ts +25 -0
- package/dist/src/ee/search.js +73 -0
- package/dist/src/ee/types.d.ts +15 -1
- package/dist/src/ee/who-am-i.d.ts +41 -0
- package/dist/src/ee/who-am-i.js +143 -0
- package/dist/src/ee/who-am-i.test.d.ts +1 -0
- package/dist/src/ee/who-am-i.test.js +101 -0
- package/dist/src/generated/version.d.ts +1 -1
- package/dist/src/generated/version.js +1 -1
- package/dist/src/headless/council-answers.js +1 -0
- package/dist/src/headless/output.d.ts +30 -1
- package/dist/src/headless/output.js +180 -0
- package/dist/src/headless/output.test.js +61 -1
- package/dist/src/hooks/index.js +48 -2
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +143 -104
- package/dist/src/lsp/client-normalize.test.d.ts +12 -0
- package/dist/src/lsp/client-normalize.test.js +34 -0
- package/dist/src/lsp/client.d.ts +1 -0
- package/dist/src/lsp/client.js +10 -2
- package/dist/src/lsp/manager.d.ts +1 -1
- package/dist/src/lsp/manager.js +2 -2
- package/dist/src/lsp/manager.test.js +2 -2
- package/dist/src/lsp/runtime.d.ts +1 -1
- package/dist/src/lsp/runtime.js +2 -2
- package/dist/src/maintain/__tests__/gh-create-pr.test.js +7 -3
- package/dist/src/maintain/__tests__/pr-builder.test.js +7 -3
- package/dist/src/mcp/__tests__/client-pool.spec.js +3 -3
- package/dist/src/mcp/__tests__/ee-tools.test.js +42 -14
- package/dist/src/mcp/__tests__/forensics-tools.test.js +3 -3
- package/dist/src/mcp/__tests__/lsp-tools.test.js +4 -4
- package/dist/src/mcp/client-pool.d.ts +1 -1
- package/dist/src/mcp/client-pool.js +25 -9
- package/dist/src/mcp/ee-tools.d.ts +10 -0
- package/dist/src/mcp/ee-tools.js +34 -0
- package/dist/src/mcp/oauth-callback.js +2 -2
- package/dist/src/mcp/parse-headers.test.js +14 -14
- package/dist/src/mcp/self-verify-jobs.js +1 -3
- package/dist/src/mcp/setup-guide-text.js +74 -74
- package/dist/src/mcp/smoke.test.js +43 -43
- package/dist/src/models/catalog-gemini.test.js +12 -10
- package/dist/src/models/catalog.json +106 -38
- package/dist/src/ops/doctor.js +7 -7
- package/dist/src/orchestrator/__tests__/auto-commit.test.d.ts +1 -0
- package/dist/src/orchestrator/__tests__/auto-commit.test.js +142 -0
- package/dist/src/orchestrator/__tests__/batch-turn-runner.test.js +2 -0
- package/dist/src/orchestrator/__tests__/delegations.test.d.ts +1 -0
- package/dist/src/orchestrator/__tests__/delegations.test.js +96 -0
- package/dist/src/orchestrator/__tests__/message-processor.test.js +1 -0
- package/dist/src/orchestrator/__tests__/stream-runner.test.js +29 -0
- package/dist/src/orchestrator/agent.test.js +5 -2
- package/dist/src/orchestrator/auto-commit.d.ts +110 -0
- package/dist/src/orchestrator/auto-commit.js +364 -0
- package/dist/src/orchestrator/batch-turn-runner.d.ts +3 -2
- package/dist/src/orchestrator/batch-turn-runner.js +2 -1
- package/dist/src/orchestrator/compaction-proposer-prompt.d.ts +8 -0
- package/dist/src/orchestrator/compaction-proposer-prompt.js +43 -0
- package/dist/src/orchestrator/compaction.d.ts +22 -0
- package/dist/src/orchestrator/compaction.js +42 -0
- package/dist/src/orchestrator/delegations.d.ts +1 -0
- package/dist/src/orchestrator/delegations.js +41 -0
- package/dist/src/orchestrator/error-utils.js +27 -2
- package/dist/src/orchestrator/message-processor.d.ts +21 -5
- package/dist/src/orchestrator/message-processor.js +219 -2573
- package/dist/src/orchestrator/orchestrator.d.ts +8 -2
- package/dist/src/orchestrator/orchestrator.js +187 -34
- package/dist/src/orchestrator/preprocessor.d.ts +13 -0
- package/dist/src/orchestrator/preprocessor.js +145 -0
- package/dist/src/orchestrator/prompts.d.ts +8 -0
- package/dist/src/orchestrator/prompts.js +76 -60
- package/dist/src/orchestrator/safety-askcard.d.ts +66 -0
- package/dist/src/orchestrator/safety-askcard.js +74 -0
- package/dist/src/orchestrator/sandbox.test.js +8 -5
- package/dist/src/orchestrator/scope-ceiling.js +1 -1
- package/dist/src/orchestrator/stall-watchdog.d.ts +47 -0
- package/dist/src/orchestrator/stall-watchdog.js +23 -0
- package/dist/src/orchestrator/stall-watchdog.test.js +36 -1
- package/dist/src/orchestrator/stream-runner.js +52 -30
- package/dist/src/orchestrator/sub-agent-model-tier.js +1 -1
- package/dist/src/orchestrator/subagent-compactor.d.ts +14 -0
- package/dist/src/orchestrator/subagent-compactor.js +83 -10
- package/dist/src/orchestrator/subagent-compactor.spec.js +132 -0
- package/dist/src/orchestrator/text-tool-call-detector.d.ts +9 -5
- package/dist/src/orchestrator/text-tool-call-detector.js +16 -12
- package/dist/src/orchestrator/text-tool-call-detector.test.js +66 -8
- package/dist/src/orchestrator/tool-args-repair.js +1 -1
- package/dist/src/orchestrator/tool-engine.d.ts +151 -0
- package/dist/src/orchestrator/tool-engine.js +3079 -0
- package/dist/src/orchestrator/turn-runner-deps.d.ts +1 -0
- package/dist/src/pil/__tests__/discovery-types.test.js +15 -4
- package/dist/src/pil/__tests__/discovery.test.js +89 -145
- package/dist/src/pil/__tests__/dual-run.test.js +2 -0
- package/dist/src/pil/__tests__/layer1-intent-trace.test.js +3 -0
- package/dist/src/pil/__tests__/layer1-intent.test.js +3 -0
- package/dist/src/pil/__tests__/layer16-clarity.test.js +35 -32
- package/dist/src/pil/__tests__/layer18-acceptance.test.js +1 -78
- package/dist/src/pil/__tests__/layer2_5-ponytail.test.d.ts +1 -0
- package/dist/src/pil/__tests__/layer2_5-ponytail.test.js +53 -0
- package/dist/src/pil/__tests__/layer3-ee-injection.test.js +67 -4
- package/dist/src/pil/__tests__/layer3-injected-chunk.test.js +14 -2
- package/dist/src/pil/__tests__/layer4-gsd.test.js +30 -0
- package/dist/src/pil/__tests__/layer5-context.test.js +39 -1
- package/dist/src/pil/__tests__/layer6-output.test.js +30 -2
- package/dist/src/pil/__tests__/orchestrator-integration.test.js +3 -1
- package/dist/src/pil/__tests__/pipeline.test.js +11 -8
- package/dist/src/pil/__tests__/response-tools.test.js +52 -0
- package/dist/src/pil/agent-operating-contract.d.ts +1 -1
- package/dist/src/pil/agent-operating-contract.js +5 -3
- package/dist/src/pil/agent-operating-contract.test.js +2 -2
- package/dist/src/pil/cheap-model-playbook.d.ts +1 -1
- package/dist/src/pil/cheap-model-playbook.js +1 -1
- package/dist/src/pil/cheap-model-workbooks.d.ts +1 -1
- package/dist/src/pil/cheap-model-workbooks.js +1 -1
- package/dist/src/pil/config.d.ts +20 -0
- package/dist/src/pil/config.js +35 -0
- package/dist/src/pil/discovery-types.d.ts +32 -9
- package/dist/src/pil/discovery.d.ts +3 -3
- package/dist/src/pil/discovery.js +138 -244
- package/dist/src/pil/index.d.ts +1 -1
- package/dist/src/pil/index.js +1 -1
- package/dist/src/pil/layer1-intent.d.ts +9 -1
- package/dist/src/pil/layer1-intent.js +99 -44
- package/dist/src/pil/layer1-intent.test.js +112 -2
- package/dist/src/pil/layer15-context-scan.js +1 -1
- package/dist/src/pil/layer16-clarity.d.ts +21 -25
- package/dist/src/pil/layer16-clarity.js +52 -88
- package/dist/src/pil/layer18-acceptance.d.ts +13 -3
- package/dist/src/pil/layer18-acceptance.js +1 -75
- package/dist/src/pil/layer2-personality.js +7 -8
- package/dist/src/pil/layer2_5-ponytail.d.ts +2 -0
- package/dist/src/pil/layer2_5-ponytail.js +41 -0
- package/dist/src/pil/layer3-ee-injection.js +180 -14
- package/dist/src/pil/layer4-gsd.js +22 -8
- package/dist/src/pil/layer5-context.d.ts +1 -0
- package/dist/src/pil/layer5-context.js +26 -11
- package/dist/src/pil/layer6-output.js +23 -5
- package/dist/src/pil/llm-classify.js +3 -3
- package/dist/src/pil/native-capabilities-workbook.d.ts +1 -1
- package/dist/src/pil/native-capabilities-workbook.js +4 -3
- package/dist/src/pil/pipeline.js +15 -1
- package/dist/src/pil/response-tools.d.ts +16 -0
- package/dist/src/pil/response-tools.js +41 -0
- package/dist/src/pil/schema.d.ts +8 -0
- package/dist/src/pil/schema.js +24 -3
- package/dist/src/pil/task-tier-map.js +7 -7
- package/dist/src/pil/types.d.ts +9 -3
- package/dist/src/product-loop/__tests__/discovery-interview.test.js +103 -1
- package/dist/src/product-loop/__tests__/gather-selectable-alts.test.js +34 -0
- package/dist/src/product-loop/__tests__/sprint-self-verify.test.js +12 -12
- package/dist/src/product-loop/discovery-interview.d.ts +20 -0
- package/dist/src/product-loop/discovery-interview.js +121 -7
- package/dist/src/product-loop/done-gate.js +3 -3
- package/dist/src/product-loop/gather.js +19 -5
- package/dist/src/product-loop/loop-driver.js +20 -20
- package/dist/src/product-loop/progress-snapshot.js +4 -4
- package/dist/src/product-loop/sprint-self-verify.js +2 -2
- package/dist/src/providers/__tests__/reasoning-roundtrip.test.js +12 -0
- package/dist/src/providers/auth/__tests__/gemini-oauth.test.d.ts +1 -5
- package/dist/src/providers/auth/__tests__/gemini-oauth.test.js +1 -5
- package/dist/src/providers/auth/gcloud.d.ts +28 -0
- package/dist/src/providers/auth/gcloud.js +102 -0
- package/dist/src/providers/auth/gemini-oauth.d.ts +46 -19
- package/dist/src/providers/auth/gemini-oauth.js +292 -105
- package/dist/src/providers/auth/grok-oauth.d.ts +1 -1
- package/dist/src/providers/auth/grok-oauth.js +1 -1
- package/dist/src/providers/auth/registry.js +28 -6
- package/dist/src/providers/gemini.d.ts +1 -1
- package/dist/src/providers/gemini.js +10 -3
- package/dist/src/providers/keychain.d.ts +2 -2
- package/dist/src/providers/keychain.js +20 -2
- package/dist/src/providers/mcp-vision-bridge.js +48 -48
- package/dist/src/providers/openai.js +5 -1
- package/dist/src/providers/runtime.d.ts +1 -1
- package/dist/src/providers/runtime.js +11 -2
- package/dist/src/providers/siliconflow-sse-repair.js +1 -1
- package/dist/src/providers/strategies/google.strategy.d.ts +9 -2
- package/dist/src/providers/strategies/google.strategy.js +159 -9
- package/dist/src/providers/strategies/thinking-mode.js +19 -6
- package/dist/src/providers/types.d.ts +1 -1
- package/dist/src/reporter/index.js +1 -1
- package/dist/src/router/decide.test.js +40 -8
- package/dist/src/router/step-router.d.ts +20 -0
- package/dist/src/router/step-router.js +73 -0
- package/dist/src/scaffold/bb-ecosystem-apply.js +47 -47
- package/dist/src/scaffold/bb-quality-gate.js +5 -5
- package/dist/src/scaffold/continuation-prompt.js +60 -60
- package/dist/src/scaffold/init-new.js +453 -453
- package/dist/src/self-qa/__tests__/scenario-planner.test.js +3 -3
- package/dist/src/self-qa/agentic-loop.js +19 -19
- package/dist/src/self-qa/orchestrator.js +5 -5
- package/dist/src/self-qa/scenario-planner.js +1 -1
- package/dist/src/self-qa/spec-emitter.js +4 -4
- package/dist/src/storage/__tests__/migrations.test.js +2 -2
- package/dist/src/storage/index.d.ts +1 -1
- package/dist/src/storage/index.js +1 -1
- package/dist/src/storage/interaction-log.js +5 -5
- package/dist/src/storage/migrations.js +122 -122
- package/dist/src/storage/session-experience-store.js +4 -4
- package/dist/src/storage/sessions.d.ts +6 -0
- package/dist/src/storage/sessions.js +49 -42
- package/dist/src/storage/transcript-view.js +7 -1
- package/dist/src/storage/transcript.d.ts +1 -0
- package/dist/src/storage/transcript.js +55 -0
- package/dist/src/storage/ui-interaction-log.d.ts +17 -0
- package/dist/src/storage/usage.js +14 -14
- package/dist/src/storage/workspaces.js +12 -12
- package/dist/src/tools/__tests__/native-tools.test.js +6 -0
- package/dist/src/tools/bash.d.ts +36 -23
- package/dist/src/tools/bash.js +59 -301
- package/dist/src/tools/bash.test.js +2 -257
- package/dist/src/tools/file-tracker.d.ts +5 -0
- package/dist/src/tools/file-tracker.js +14 -0
- package/dist/src/tools/file.js +2 -0
- package/dist/src/tools/git-safety.d.ts +38 -1
- package/dist/src/tools/git-safety.js +94 -4
- package/dist/src/tools/git-safety.test.js +45 -1
- package/dist/src/tools/native-tools.d.ts +1 -1
- package/dist/src/tools/native-tools.js +56 -0
- package/dist/src/tools/registry-bash-empty-command.test.js +4 -3
- package/dist/src/tools/registry-git-safety.test.js +17 -6
- package/dist/src/tools/registry.d.ts +5 -0
- package/dist/src/tools/registry.js +185 -11
- package/dist/src/types/index.d.ts +7 -1
- package/dist/src/ui/app.d.ts +2 -1
- package/dist/src/ui/app.js +0 -0
- package/dist/src/ui/components/council-question-card.js +1 -0
- package/dist/src/ui/components/message-view.js +37 -3
- package/dist/src/ui/components/structured-response-view.js +7 -0
- package/dist/src/ui/components/task-list-panel.js +3 -12
- package/dist/src/ui/containers/chat-feed.d.ts +40 -0
- package/dist/src/ui/containers/chat-feed.js +66 -0
- package/dist/src/ui/containers/modals-layer.d.ts +87 -0
- package/dist/src/ui/containers/modals-layer.js +18 -0
- package/dist/src/ui/modals/session-picker-modal.js +14 -9
- package/dist/src/ui/modals/update-modal.js +2 -1
- package/dist/src/ui/slash/__tests__/menu-parity.test.d.ts +1 -0
- package/dist/src/ui/slash/__tests__/menu-parity.test.js +1 -0
- package/dist/src/ui/slash/__tests__/ponytail.test.d.ts +1 -0
- package/dist/src/ui/slash/__tests__/ponytail.test.js +37 -0
- package/dist/src/ui/slash/council-inspect.js +4 -4
- package/dist/src/ui/slash/export.js +16 -1
- package/dist/src/ui/slash/menu-items.js +1 -0
- package/dist/src/ui/slash/ponytail.d.ts +2 -0
- package/dist/src/ui/slash/ponytail.js +19 -0
- package/dist/src/ui/status-bar/store.js +0 -1
- package/dist/src/ui/status-bar/store.test.js +2 -2
- package/dist/src/ui/types.d.ts +7 -0
- package/dist/src/ui/use-app-logic.d.ts +26 -0
- package/dist/src/ui/use-app-logic.js +0 -0
- package/dist/src/ui/utils/relaunch.d.ts +17 -0
- package/dist/src/ui/utils/relaunch.js +28 -4
- package/dist/src/ui/utils/relaunch.test.js +50 -0
- package/dist/src/ui/utils/text.d.ts +11 -0
- package/dist/src/ui/utils/text.js +21 -1
- package/dist/src/ui/utils/text.test.js +25 -1
- package/dist/src/ui/utils/tools.js +3 -1
- package/dist/src/usage/cost-log.js +2 -2
- package/dist/src/usage/estimator.d.ts +14 -0
- package/dist/src/usage/estimator.js +22 -0
- package/dist/src/utils/__tests__/compaction-caps.test.d.ts +21 -0
- package/dist/src/utils/__tests__/compaction-caps.test.js +187 -0
- package/dist/src/utils/__tests__/llm-deadline-abort.test.d.ts +1 -0
- package/dist/src/utils/__tests__/llm-deadline-abort.test.js +33 -0
- package/dist/src/utils/clipboard-image.js +23 -23
- package/dist/src/utils/llm-deadline.d.ts +9 -1
- package/dist/src/utils/llm-deadline.js +31 -2
- package/dist/src/utils/permission-mode.d.ts +33 -0
- package/dist/src/utils/permission-mode.js +164 -3
- package/dist/src/utils/permission-mode.test.js +92 -1
- package/dist/src/utils/settings.d.ts +27 -31
- package/dist/src/utils/settings.js +100 -109
- package/dist/src/utils/side-question.js +2 -2
- package/dist/src/utils/skills.js +3 -3
- package/dist/src/verify/__tests__/coverage-parsers.test.js +30 -30
- package/package.json +1 -1
|
@@ -147,7 +147,6 @@ export function saveUserSettings(partial) {
|
|
|
147
147
|
...partial,
|
|
148
148
|
...(partial.apiKey !== undefined ? { apiKey: partial.apiKey } : {}),
|
|
149
149
|
...(partial.defaultModel !== undefined ? { defaultModel: normalizeModelId(partial.defaultModel) } : {}),
|
|
150
|
-
...(partial.sandboxMode !== undefined ? { sandboxMode: normalizeSandboxMode(partial.sandboxMode) } : {}),
|
|
151
150
|
...(partial.reasoningEffortByModel !== undefined
|
|
152
151
|
? {
|
|
153
152
|
reasoningEffortByModel: Object.fromEntries(Object.entries(partial.reasoningEffortByModel).map(([modelId, effort]) => [
|
|
@@ -189,9 +188,6 @@ export function saveUserSettings(partial) {
|
|
|
189
188
|
})),
|
|
190
189
|
}
|
|
191
190
|
: {}),
|
|
192
|
-
...(partial.sandbox !== undefined
|
|
193
|
-
? { sandbox: normalizeSandboxSettings({ ...current.sandbox, ...partial.sandbox }) }
|
|
194
|
-
: {}),
|
|
195
191
|
...(partial.shell !== undefined ? { shell: normalizeShellSettings({ ...current.shell, ...partial.shell }) } : {}),
|
|
196
192
|
...(partial.lsp !== undefined
|
|
197
193
|
? {
|
|
@@ -227,10 +223,6 @@ export function saveProjectSettings(partial) {
|
|
|
227
223
|
...current,
|
|
228
224
|
...partial,
|
|
229
225
|
...(partial.model !== undefined ? { model: normalizeModelId(partial.model) } : {}),
|
|
230
|
-
...(partial.sandboxMode !== undefined ? { sandboxMode: normalizeSandboxMode(partial.sandboxMode) } : {}),
|
|
231
|
-
...(partial.sandbox !== undefined
|
|
232
|
-
? { sandbox: normalizeSandboxSettings({ ...current.sandbox, ...partial.sandbox }) }
|
|
233
|
-
: {}),
|
|
234
226
|
...(partial.shell !== undefined ? { shell: normalizeShellSettings({ ...current.shell, ...partial.shell }) } : {}),
|
|
235
227
|
...(partial.lsp !== undefined
|
|
236
228
|
? {
|
|
@@ -352,94 +344,9 @@ export function getModeSpecificModel(mode) {
|
|
|
352
344
|
const modeModel = user.modeModels?.[mode];
|
|
353
345
|
return modeModel ? normalizeModelId(modeModel) : undefined;
|
|
354
346
|
}
|
|
355
|
-
export function normalizeSandboxMode(value) {
|
|
356
|
-
return value === "shuru" ? "shuru" : "off";
|
|
357
|
-
}
|
|
358
347
|
function isNonNullObject(v) {
|
|
359
348
|
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
360
349
|
}
|
|
361
|
-
function normalizeSecretConfig(raw) {
|
|
362
|
-
if (!isNonNullObject(raw))
|
|
363
|
-
return null;
|
|
364
|
-
const name = typeof raw.name === "string" ? raw.name.trim() : "";
|
|
365
|
-
const fromEnv = typeof raw.fromEnv === "string" ? raw.fromEnv.trim() : "";
|
|
366
|
-
const hosts = Array.isArray(raw.hosts)
|
|
367
|
-
? raw.hosts.filter((h) => typeof h === "string" && h.trim() !== "")
|
|
368
|
-
: [];
|
|
369
|
-
if (!name || !fromEnv)
|
|
370
|
-
return null;
|
|
371
|
-
return { name, fromEnv, hosts };
|
|
372
|
-
}
|
|
373
|
-
export function normalizeSandboxSettings(raw) {
|
|
374
|
-
if (!isNonNullObject(raw))
|
|
375
|
-
return {};
|
|
376
|
-
const result = {};
|
|
377
|
-
if (typeof raw.allowNet === "boolean")
|
|
378
|
-
result.allowNet = raw.allowNet;
|
|
379
|
-
if (Array.isArray(raw.allowedHosts)) {
|
|
380
|
-
const hosts = raw.allowedHosts.filter((h) => typeof h === "string" && h.trim() !== "");
|
|
381
|
-
if (hosts.length > 0)
|
|
382
|
-
result.allowedHosts = hosts;
|
|
383
|
-
}
|
|
384
|
-
if (Array.isArray(raw.ports)) {
|
|
385
|
-
const ports = raw.ports.filter((p) => typeof p === "string" && /^\d+:\d+$/.test(p.trim()));
|
|
386
|
-
if (ports.length > 0)
|
|
387
|
-
result.ports = ports;
|
|
388
|
-
}
|
|
389
|
-
if (typeof raw.cpus === "number" && raw.cpus > 0)
|
|
390
|
-
result.cpus = raw.cpus;
|
|
391
|
-
if (typeof raw.memory === "number" && raw.memory > 0)
|
|
392
|
-
result.memory = raw.memory;
|
|
393
|
-
if (typeof raw.diskSize === "number" && raw.diskSize > 0)
|
|
394
|
-
result.diskSize = raw.diskSize;
|
|
395
|
-
if (Array.isArray(raw.secrets)) {
|
|
396
|
-
const secrets = raw.secrets.map(normalizeSecretConfig).filter((s) => s !== null);
|
|
397
|
-
if (secrets.length > 0)
|
|
398
|
-
result.secrets = secrets;
|
|
399
|
-
}
|
|
400
|
-
if (typeof raw.from === "string" && raw.from.trim())
|
|
401
|
-
result.from = raw.from.trim();
|
|
402
|
-
if (typeof raw.verifyBaseFrom === "string" && raw.verifyBaseFrom.trim())
|
|
403
|
-
result.verifyBaseFrom = raw.verifyBaseFrom.trim();
|
|
404
|
-
if (typeof raw.allowEphemeralInstall === "boolean")
|
|
405
|
-
result.allowEphemeralInstall = raw.allowEphemeralInstall;
|
|
406
|
-
if (typeof raw.syncHostWorkspace === "boolean")
|
|
407
|
-
result.syncHostWorkspace = raw.syncHostWorkspace;
|
|
408
|
-
if (typeof raw.guestWorkdir === "string" && raw.guestWorkdir.trim())
|
|
409
|
-
result.guestWorkdir = raw.guestWorkdir.trim();
|
|
410
|
-
if (Array.isArray(raw.shellInit)) {
|
|
411
|
-
const shellInit = raw.shellInit.filter((line) => typeof line === "string" && line.trim() !== "");
|
|
412
|
-
if (shellInit.length > 0)
|
|
413
|
-
result.shellInit = shellInit;
|
|
414
|
-
}
|
|
415
|
-
if (typeof raw.hostBrowserCommandsOnHost === "boolean")
|
|
416
|
-
result.hostBrowserCommandsOnHost = raw.hostBrowserCommandsOnHost;
|
|
417
|
-
return result;
|
|
418
|
-
}
|
|
419
|
-
export function mergeSandboxSettings(base, override) {
|
|
420
|
-
if (!base && !override)
|
|
421
|
-
return {};
|
|
422
|
-
if (!base)
|
|
423
|
-
return { ...override };
|
|
424
|
-
if (!override)
|
|
425
|
-
return { ...base };
|
|
426
|
-
return {
|
|
427
|
-
allowNet: override.allowNet ?? base.allowNet,
|
|
428
|
-
allowedHosts: override.allowedHosts ?? base.allowedHosts,
|
|
429
|
-
ports: override.ports ?? base.ports,
|
|
430
|
-
cpus: override.cpus ?? base.cpus,
|
|
431
|
-
memory: override.memory ?? base.memory,
|
|
432
|
-
diskSize: override.diskSize ?? base.diskSize,
|
|
433
|
-
secrets: override.secrets ?? base.secrets,
|
|
434
|
-
from: override.from ?? base.from,
|
|
435
|
-
allowEphemeralInstall: override.allowEphemeralInstall ?? base.allowEphemeralInstall,
|
|
436
|
-
guestWorkdir: override.guestWorkdir ?? base.guestWorkdir,
|
|
437
|
-
syncHostWorkspace: override.syncHostWorkspace ?? base.syncHostWorkspace,
|
|
438
|
-
verifyBaseFrom: override.verifyBaseFrom ?? base.verifyBaseFrom,
|
|
439
|
-
shellInit: override.shellInit ?? base.shellInit,
|
|
440
|
-
hostBrowserCommandsOnHost: override.hostBrowserCommandsOnHost ?? base.hostBrowserCommandsOnHost,
|
|
441
|
-
};
|
|
442
|
-
}
|
|
443
350
|
function normalizeLspBuiltInServerSettings(raw) {
|
|
444
351
|
if (!isNonNullObject(raw))
|
|
445
352
|
return undefined;
|
|
@@ -564,20 +471,6 @@ export function mergeLspSettings(base, override) {
|
|
|
564
471
|
: DEFAULT_LSP_SETTINGS.servers,
|
|
565
472
|
};
|
|
566
473
|
}
|
|
567
|
-
export function getCurrentSandboxMode() {
|
|
568
|
-
const project = loadProjectSettings();
|
|
569
|
-
if (project.sandboxMode)
|
|
570
|
-
return normalizeSandboxMode(project.sandboxMode);
|
|
571
|
-
const user = loadUserSettings();
|
|
572
|
-
if (user.sandboxMode)
|
|
573
|
-
return normalizeSandboxMode(user.sandboxMode);
|
|
574
|
-
return "off";
|
|
575
|
-
}
|
|
576
|
-
export function getCurrentSandboxSettings() {
|
|
577
|
-
const user = loadUserSettings();
|
|
578
|
-
const project = loadProjectSettings();
|
|
579
|
-
return mergeSandboxSettings(user.sandbox, project.sandbox);
|
|
580
|
-
}
|
|
581
474
|
export function getCurrentShellSettings() {
|
|
582
475
|
const user = loadUserSettings();
|
|
583
476
|
const project = loadProjectSettings();
|
|
@@ -655,7 +548,7 @@ export function getAutoCompactThresholdPct() {
|
|
|
655
548
|
const val = loadUserSettings().autoCompactThresholdPct;
|
|
656
549
|
if (typeof val === "number" && val >= 0.05 && val <= 0.5)
|
|
657
550
|
return val;
|
|
658
|
-
return 0.
|
|
551
|
+
return 0.4; // default 40% — Reduced from 25% after session bf58d0f46b51 analysis: 13 compacts in 43min generated 1.3M uncached tokens. Higher threshold = fewer compacts = less compaction overhead. For DeepSeek 128K context: fires at 51K instead of 32K.
|
|
659
552
|
}
|
|
660
553
|
/**
|
|
661
554
|
* Per-invocation cap on cumulative tool-output chars inside a `task`
|
|
@@ -811,7 +704,14 @@ export function getTopLevelToolBudgetChars() {
|
|
|
811
704
|
const val = loadUserSettings().topLevelToolBudgetChars;
|
|
812
705
|
if (typeof val === "number" && val >= 50_000 && val <= 1_500_000)
|
|
813
706
|
return Math.floor(val);
|
|
814
|
-
|
|
707
|
+
// Phase C5 symmetry — lowered from 400_000 to 200_000 chars. Evidence from
|
|
708
|
+
// session f1eef338c784: top-level tool loop ran 49 turns consuming 3.4M
|
|
709
|
+
// input tokens before the budget cap (set at 400K chars) meaningfully
|
|
710
|
+
// constrained tool outputs. At 200K chars the 50% tier fires at 100K chars
|
|
711
|
+
// (~3 tool turns), and the 80% tier at 160K chars (~5 turns); small tasks
|
|
712
|
+
// (1-3 turns) are unaffected. The sub-agent budget is 120K, so 200K maintains
|
|
713
|
+
// a ~1.7x ratio reflecting the broader top-level conversation context.
|
|
714
|
+
return 200_000;
|
|
815
715
|
}
|
|
816
716
|
export function getRoleModel(role) {
|
|
817
717
|
return loadUserSettings().roleModels?.[role];
|
|
@@ -910,4 +810,95 @@ export function getDefaultProvider() {
|
|
|
910
810
|
export function setDefaultProvider(provider) {
|
|
911
811
|
saveUserSettings({ defaultProvider: provider });
|
|
912
812
|
}
|
|
813
|
+
export function getCurrentSandboxMode() {
|
|
814
|
+
return "off";
|
|
815
|
+
}
|
|
816
|
+
export function getCurrentSandboxSettings() {
|
|
817
|
+
return {};
|
|
818
|
+
}
|
|
819
|
+
function normalizeSecretConfig(raw) {
|
|
820
|
+
if (!isNonNullObject(raw))
|
|
821
|
+
return null;
|
|
822
|
+
const name = typeof raw.name === "string" ? raw.name.trim() : "";
|
|
823
|
+
const fromEnv = typeof raw.fromEnv === "string" ? raw.fromEnv.trim() : "";
|
|
824
|
+
const hosts = Array.isArray(raw.hosts)
|
|
825
|
+
? raw.hosts.filter((h) => typeof h === "string" && h.trim() !== "")
|
|
826
|
+
: [];
|
|
827
|
+
if (!name || !fromEnv)
|
|
828
|
+
return null;
|
|
829
|
+
return { name, fromEnv, hosts };
|
|
830
|
+
}
|
|
831
|
+
export function normalizeSandboxSettings(raw) {
|
|
832
|
+
if (!isNonNullObject(raw))
|
|
833
|
+
return {};
|
|
834
|
+
const result = {};
|
|
835
|
+
if (typeof raw.allowNet === "boolean")
|
|
836
|
+
result.allowNet = raw.allowNet;
|
|
837
|
+
if (Array.isArray(raw.allowedHosts)) {
|
|
838
|
+
const hosts = raw.allowedHosts.filter((h) => typeof h === "string" && h.trim() !== "");
|
|
839
|
+
if (hosts.length > 0)
|
|
840
|
+
result.allowedHosts = hosts;
|
|
841
|
+
}
|
|
842
|
+
if (Array.isArray(raw.ports)) {
|
|
843
|
+
const ports = raw.ports.filter((p) => typeof p === "string" && /^\d+:\d+$/.test(p.trim()));
|
|
844
|
+
if (ports.length > 0)
|
|
845
|
+
result.ports = ports;
|
|
846
|
+
}
|
|
847
|
+
if (typeof raw.cpus === "number" && raw.cpus > 0)
|
|
848
|
+
result.cpus = raw.cpus;
|
|
849
|
+
if (typeof raw.memory === "number" && raw.memory > 0)
|
|
850
|
+
result.memory = raw.memory;
|
|
851
|
+
if (typeof raw.diskSize === "number" && raw.diskSize > 0)
|
|
852
|
+
result.diskSize = raw.diskSize;
|
|
853
|
+
if (Array.isArray(raw.secrets)) {
|
|
854
|
+
const secrets = raw.secrets.map(normalizeSecretConfig).filter((s) => s !== null);
|
|
855
|
+
if (secrets.length > 0)
|
|
856
|
+
result.secrets = secrets;
|
|
857
|
+
}
|
|
858
|
+
if (typeof raw.from === "string" && raw.from.trim())
|
|
859
|
+
result.from = raw.from.trim();
|
|
860
|
+
if (typeof raw.verifyBaseFrom === "string" && raw.verifyBaseFrom.trim())
|
|
861
|
+
result.verifyBaseFrom = raw.verifyBaseFrom.trim();
|
|
862
|
+
if (typeof raw.allowEphemeralInstall === "boolean")
|
|
863
|
+
result.allowEphemeralInstall = raw.allowEphemeralInstall;
|
|
864
|
+
if (typeof raw.syncHostWorkspace === "boolean")
|
|
865
|
+
result.syncHostWorkspace = raw.syncHostWorkspace;
|
|
866
|
+
if (typeof raw.guestWorkdir === "string" && raw.guestWorkdir.trim())
|
|
867
|
+
result.guestWorkdir = raw.guestWorkdir.trim();
|
|
868
|
+
if (Array.isArray(raw.shellInit)) {
|
|
869
|
+
const shellInit = raw.shellInit.filter((line) => typeof line === "string" && line.trim() !== "");
|
|
870
|
+
if (shellInit.length > 0)
|
|
871
|
+
result.shellInit = shellInit;
|
|
872
|
+
}
|
|
873
|
+
if (typeof raw.hostBrowserCommandsOnHost === "boolean")
|
|
874
|
+
result.hostBrowserCommandsOnHost = raw.hostBrowserCommandsOnHost;
|
|
875
|
+
return result;
|
|
876
|
+
}
|
|
877
|
+
export function mergeSandboxSettings(base, override) {
|
|
878
|
+
if (!base && !override)
|
|
879
|
+
return {};
|
|
880
|
+
if (!base)
|
|
881
|
+
return { ...override };
|
|
882
|
+
if (!override)
|
|
883
|
+
return { ...base };
|
|
884
|
+
return {
|
|
885
|
+
allowNet: override.allowNet ?? base.allowNet,
|
|
886
|
+
allowedHosts: override.allowedHosts ?? base.allowedHosts,
|
|
887
|
+
ports: override.ports ?? base.ports,
|
|
888
|
+
cpus: override.cpus ?? base.cpus,
|
|
889
|
+
memory: override.memory ?? base.memory,
|
|
890
|
+
diskSize: override.diskSize ?? base.diskSize,
|
|
891
|
+
secrets: override.secrets ?? base.secrets,
|
|
892
|
+
from: override.from ?? base.from,
|
|
893
|
+
allowEphemeralInstall: override.allowEphemeralInstall ?? base.allowEphemeralInstall,
|
|
894
|
+
guestWorkdir: override.guestWorkdir ?? base.guestWorkdir,
|
|
895
|
+
syncHostWorkspace: override.syncHostWorkspace ?? base.syncHostWorkspace,
|
|
896
|
+
verifyBaseFrom: override.verifyBaseFrom ?? base.verifyBaseFrom,
|
|
897
|
+
shellInit: override.shellInit ?? base.shellInit,
|
|
898
|
+
hostBrowserCommandsOnHost: override.hostBrowserCommandsOnHost ?? base.hostBrowserCommandsOnHost,
|
|
899
|
+
};
|
|
900
|
+
}
|
|
901
|
+
export function normalizeSandboxMode(value) {
|
|
902
|
+
return value === "shuru" ? "shuru" : "off";
|
|
903
|
+
}
|
|
913
904
|
//# sourceMappingURL=settings.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { generateText } from "ai";
|
|
2
2
|
import { resolveModelRuntime } from "../providers/runtime.js";
|
|
3
|
-
const SIDE_QUESTION_SYSTEM = `You are a helpful coding assistant answering a quick side question. The user is in the middle of a coding session and needs a fast, concise answer. Keep your response short and focused — this is a side question, not the main task.
|
|
4
|
-
|
|
3
|
+
const SIDE_QUESTION_SYSTEM = `You are a helpful coding assistant answering a quick side question. The user is in the middle of a coding session and needs a fast, concise answer. Keep your response short and focused — this is a side question, not the main task.
|
|
4
|
+
|
|
5
5
|
If conversation context is provided below, use it to give a more relevant answer.`;
|
|
6
6
|
export async function runSideQuestion(question, provider, modelId, conversationContext, signal) {
|
|
7
7
|
const runtime = resolveModelRuntime(provider, modelId);
|
package/dist/src/utils/skills.js
CHANGED
|
@@ -163,9 +163,9 @@ export function discoverSkills(projectRoot) {
|
|
|
163
163
|
_skillsCache = { skills, cachedAt: now, cwd: projectRoot };
|
|
164
164
|
return skills;
|
|
165
165
|
}
|
|
166
|
-
const SKILLS_INSTRUCTIONS = `AGENT SKILLS (optional):
|
|
167
|
-
The following <available_skills> list specialized workflows. Use them when they might help the user's request — not only on exact keyword matches.
|
|
168
|
-
If a skill's description fits the task or could improve consistency, read that skill's instructions first using read_file with the path from <location>, then follow the SKILL.md body.
|
|
166
|
+
const SKILLS_INSTRUCTIONS = `AGENT SKILLS (optional):
|
|
167
|
+
The following <available_skills> list specialized workflows. Use them when they might help the user's request — not only on exact keyword matches.
|
|
168
|
+
If a skill's description fits the task or could improve consistency, read that skill's instructions first using read_file with the path from <location>, then follow the SKILL.md body.
|
|
169
169
|
Paths inside a skill (scripts/, references/, assets/) are relative to the skill directory (the folder containing SKILL.md); prefer absolute paths in tool calls.`;
|
|
170
170
|
/** OpenCode-style XML catalog plus activation instructions for read_file. Returns null if no skills. */
|
|
171
171
|
export function formatSkillsForPrompt(skills) {
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { extractCoverageFromOutput, parseBunCoverage, parseJestCoverage, parsePytestCoverage, parseVitestCoverage, } from "../coverage-parsers.js";
|
|
3
|
-
const BUN_OUTPUT = `
|
|
4
|
-
[0.12ms] 11 tests passed
|
|
5
|
-
[0.00ms] 0 tests failed
|
|
6
|
-
|
|
7
|
-
-----------------------|---------|---------|---------|---------|-----------------------
|
|
8
|
-
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
9
|
-
-----------------------|---------|---------|---------|---------|-----------------------
|
|
10
|
-
All files | 85.50 | 70.00 | 90.00 | 85.50 |
|
|
11
|
-
index.ts | 85.50 | 70.00 | 90.00 | 85.50 | 10-15
|
|
12
|
-
-----------------------|---------|---------|---------|---------|-----------------------
|
|
3
|
+
const BUN_OUTPUT = `
|
|
4
|
+
[0.12ms] 11 tests passed
|
|
5
|
+
[0.00ms] 0 tests failed
|
|
6
|
+
|
|
7
|
+
-----------------------|---------|---------|---------|---------|-----------------------
|
|
8
|
+
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
9
|
+
-----------------------|---------|---------|---------|---------|-----------------------
|
|
10
|
+
All files | 85.50 | 70.00 | 90.00 | 85.50 |
|
|
11
|
+
index.ts | 85.50 | 70.00 | 90.00 | 85.50 | 10-15
|
|
12
|
+
-----------------------|---------|---------|---------|---------|-----------------------
|
|
13
13
|
`;
|
|
14
|
-
const VITEST_OUTPUT = `
|
|
15
|
-
Files | % Stmts | % Branch | % Funcs | % Lines | Uncovered Lines
|
|
16
|
-
--------------------------|---------|---------|---------|---------|-----------------
|
|
17
|
-
All files | 92.31 | 85.71 | 100 | 92.31 |
|
|
18
|
-
reality-anchor.ts | 100 | 100 | 100 | 100 |
|
|
19
|
-
verify-result.ts | 83.33 | 75 | 100 | 83.33 | 12-15
|
|
20
|
-
--------------------------|---------|---------|---------|---------|-----------------
|
|
14
|
+
const VITEST_OUTPUT = `
|
|
15
|
+
Files | % Stmts | % Branch | % Funcs | % Lines | Uncovered Lines
|
|
16
|
+
--------------------------|---------|---------|---------|---------|-----------------
|
|
17
|
+
All files | 92.31 | 85.71 | 100 | 92.31 |
|
|
18
|
+
reality-anchor.ts | 100 | 100 | 100 | 100 |
|
|
19
|
+
verify-result.ts | 83.33 | 75 | 100 | 83.33 | 12-15
|
|
20
|
+
--------------------------|---------|---------|---------|---------|-----------------
|
|
21
21
|
`;
|
|
22
|
-
const JEST_OUTPUT = `
|
|
23
|
-
----------|---------|----------|---------|---------|-------------------
|
|
24
|
-
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
25
|
-
----------|---------|----------|---------|---------|-------------------
|
|
26
|
-
All files | 75.42 | 62.15 | 80.52 | 75.42 |
|
|
27
|
-
----------|---------|----------|---------|---------|-------------------
|
|
22
|
+
const JEST_OUTPUT = `
|
|
23
|
+
----------|---------|----------|---------|---------|-------------------
|
|
24
|
+
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
25
|
+
----------|---------|----------|---------|---------|-------------------
|
|
26
|
+
All files | 75.42 | 62.15 | 80.52 | 75.42 |
|
|
27
|
+
----------|---------|----------|---------|---------|-------------------
|
|
28
28
|
`;
|
|
29
|
-
const PYTEST_OUTPUT = `
|
|
30
|
-
Name Stmts Miss Cover
|
|
31
|
-
---------------------------------------------
|
|
32
|
-
muonroi/__init__.py 0 0 100%
|
|
33
|
-
muonroi/cli.py 42 8 81%
|
|
34
|
-
---------------------------------------------
|
|
35
|
-
TOTAL 42 8 81%
|
|
29
|
+
const PYTEST_OUTPUT = `
|
|
30
|
+
Name Stmts Miss Cover
|
|
31
|
+
---------------------------------------------
|
|
32
|
+
muonroi/__init__.py 0 0 100%
|
|
33
|
+
muonroi/cli.py 42 8 81%
|
|
34
|
+
---------------------------------------------
|
|
35
|
+
TOTAL 42 8 81%
|
|
36
36
|
`;
|
|
37
37
|
describe("Coverage Parsers", () => {
|
|
38
38
|
it("should parse bun coverage", () => {
|