@prestyj/cli 5.13.0 → 5.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/assets/skills/clarify/SKILL.md +30 -0
- package/assets/skills/code-review/SKILL.md +30 -0
- package/assets/skills/root-cause/SKILL.md +36 -0
- package/assets/skills/shared-language/SKILL.md +30 -0
- package/assets/skills/tdd/SKILL.md +30 -0
- package/dist/app-sidecar.js +394 -67
- package/dist/app-sidecar.js.map +1 -1
- package/dist/chat-agents/research.d.ts +1 -1
- package/dist/chat-agents/research.d.ts.map +1 -1
- package/dist/chat-agents/research.js +1 -1
- package/dist/chat-agents/research.js.map +1 -1
- package/dist/cli/shared.d.ts.map +1 -1
- package/dist/cli/shared.js +2 -0
- package/dist/cli/shared.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +34 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +168 -33
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.d.ts +2 -3
- package/dist/core/agents.d.ts.map +1 -1
- package/dist/core/agents.js +2 -3
- package/dist/core/agents.js.map +1 -1
- package/dist/core/ask-user.d.ts +63 -0
- package/dist/core/ask-user.d.ts.map +1 -0
- package/dist/core/ask-user.js +40 -0
- package/dist/core/ask-user.js.map +1 -0
- package/dist/core/auth-providers.d.ts +6 -0
- package/dist/core/auth-providers.d.ts.map +1 -1
- package/dist/core/auth-providers.js +30 -24
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/bundled-agents.d.ts.map +1 -1
- package/dist/core/bundled-agents.js +13 -4
- package/dist/core/bundled-agents.js.map +1 -1
- package/dist/core/context-limits.d.ts +35 -0
- package/dist/core/context-limits.d.ts.map +1 -0
- package/dist/core/context-limits.js +35 -0
- package/dist/core/context-limits.js.map +1 -0
- package/dist/core/env-delta.d.ts +27 -0
- package/dist/core/env-delta.d.ts.map +1 -0
- package/dist/core/env-delta.js +65 -0
- package/dist/core/env-delta.js.map +1 -0
- package/dist/core/event-bus.d.ts +6 -6
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/goal-worker.js +1 -1
- package/dist/core/goal-worker.js.map +1 -1
- package/dist/core/hashline-edit-benchmark.d.ts +2 -0
- package/dist/core/hashline-edit-benchmark.d.ts.map +1 -1
- package/dist/core/hashline-edit-benchmark.js +5 -1
- package/dist/core/hashline-edit-benchmark.js.map +1 -1
- package/dist/core/lsp/edit-telemetry.d.ts +27 -0
- package/dist/core/lsp/edit-telemetry.d.ts.map +1 -0
- package/dist/core/lsp/edit-telemetry.js +50 -0
- package/dist/core/lsp/edit-telemetry.js.map +1 -0
- package/dist/core/lsp/manager.d.ts +24 -1
- package/dist/core/lsp/manager.d.ts.map +1 -1
- package/dist/core/lsp/manager.js +53 -2
- package/dist/core/lsp/manager.js.map +1 -1
- package/dist/core/mcp/client.js +1 -1
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/content.d.ts +5 -0
- package/dist/core/mcp/content.d.ts.map +1 -1
- package/dist/core/mcp/content.js +20 -2
- package/dist/core/mcp/content.js.map +1 -1
- package/dist/core/mcp/defaults.d.ts +4 -2
- package/dist/core/mcp/defaults.d.ts.map +1 -1
- package/dist/core/mcp/defaults.js +10 -12
- package/dist/core/mcp/defaults.js.map +1 -1
- package/dist/core/mcp/deferred-catalog.d.ts +9 -0
- package/dist/core/mcp/deferred-catalog.d.ts.map +1 -1
- package/dist/core/mcp/deferred-catalog.js +15 -1
- package/dist/core/mcp/deferred-catalog.js.map +1 -1
- package/dist/core/mcp/elicitation-bridge.d.ts.map +1 -1
- package/dist/core/mcp/elicitation-bridge.js +12 -28
- package/dist/core/mcp/elicitation-bridge.js.map +1 -1
- package/dist/core/mcp/shared-pool.d.ts +2 -2
- package/dist/core/mcp/shared-pool.js +2 -2
- package/dist/core/nolan-prompt.d.ts +1 -1
- package/dist/core/nolan-prompt.js +16 -8
- package/dist/core/nolan-prompt.js.map +1 -1
- package/dist/core/parked-requests.d.ts +44 -0
- package/dist/core/parked-requests.d.ts.map +1 -0
- package/dist/core/parked-requests.js +34 -0
- package/dist/core/parked-requests.js.map +1 -0
- package/dist/core/platform-clis.d.ts +16 -0
- package/dist/core/platform-clis.d.ts.map +1 -0
- package/dist/core/platform-clis.js +299 -0
- package/dist/core/platform-clis.js.map +1 -0
- package/dist/core/process-manager.d.ts +11 -0
- package/dist/core/process-manager.d.ts.map +1 -1
- package/dist/core/process-manager.js +9 -2
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +75 -37
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/sandbox.d.ts +17 -1
- package/dist/core/sandbox.d.ts.map +1 -1
- package/dist/core/sandbox.js +140 -9
- package/dist/core/sandbox.js.map +1 -1
- package/dist/core/session-manager.d.ts +18 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +62 -23
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +12 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +28 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +16 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +37 -5
- package/dist/core/skills.js.map +1 -1
- package/dist/core/steroids.d.ts +59 -0
- package/dist/core/steroids.d.ts.map +1 -0
- package/dist/core/steroids.js +227 -0
- package/dist/core/steroids.js.map +1 -0
- package/dist/core/subagent-manager.d.ts +17 -0
- package/dist/core/subagent-manager.d.ts.map +1 -1
- package/dist/core/subagent-manager.js +92 -1
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-turn-record.d.ts +17 -0
- package/dist/core/subagent-turn-record.d.ts.map +1 -0
- package/dist/core/subagent-turn-record.js +82 -0
- package/dist/core/subagent-turn-record.js.map +1 -0
- package/dist/core/verification-gate.d.ts +81 -13
- package/dist/core/verification-gate.d.ts.map +1 -1
- package/dist/core/verification-gate.js +288 -30
- package/dist/core/verification-gate.js.map +1 -1
- package/dist/core/workspace-guard.d.ts +6 -0
- package/dist/core/workspace-guard.d.ts.map +1 -1
- package/dist/core/workspace-guard.js +58 -7
- package/dist/core/workspace-guard.js.map +1 -1
- package/dist/hf-pull.d.ts +102 -0
- package/dist/hf-pull.d.ts.map +1 -0
- package/dist/hf-pull.js +225 -0
- package/dist/hf-pull.js.map +1 -0
- package/dist/modes/json-mode.d.ts +2 -2
- package/dist/modes/json-mode.d.ts.map +1 -1
- package/dist/modes/json-mode.js +2 -8
- package/dist/modes/json-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
- package/dist/modes/subagent-worker-mode.js +66 -18
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/system-prompt.d.ts +5 -2
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +90 -36
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/ask-user.d.ts +35 -0
- package/dist/tools/ask-user.d.ts.map +1 -0
- package/dist/tools/ask-user.js +157 -0
- package/dist/tools/ask-user.js.map +1 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +6 -1
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts +2 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +21 -5
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +8 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/operations.d.ts +48 -0
- package/dist/tools/operations.d.ts.map +1 -1
- package/dist/tools/operations.js +92 -2
- package/dist/tools/operations.js.map +1 -1
- package/dist/tools/path-utils.d.ts +28 -1
- package/dist/tools/path-utils.d.ts.map +1 -1
- package/dist/tools/path-utils.js +44 -2
- package/dist/tools/path-utils.js.map +1 -1
- package/dist/tools/prompt-hints.d.ts.map +1 -1
- package/dist/tools/prompt-hints.js +7 -6
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +35 -3
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/skill.d.ts +3 -2
- package/dist/tools/skill.d.ts.map +1 -1
- package/dist/tools/skill.js +10 -7
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/steroids.d.ts +46 -0
- package/dist/tools/steroids.d.ts.map +1 -0
- package/dist/tools/steroids.js +233 -0
- package/dist/tools/steroids.js.map +1 -0
- package/dist/tools/subagent-shared.d.ts +1 -1
- package/dist/tools/subagent-shared.d.ts.map +1 -1
- package/dist/tools/subagent-shared.js +1 -4
- package/dist/tools/subagent-shared.js.map +1 -1
- package/dist/tools/subagent.js +1 -1
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/tool-search.d.ts +2 -1
- package/dist/tools/tool-search.d.ts.map +1 -1
- package/dist/tools/tool-search.js +28 -3
- package/dist/tools/tool-search.js.map +1 -1
- package/dist/tools/tool-tiers.d.ts.map +1 -1
- package/dist/tools/tool-tiers.js +5 -0
- package/dist/tools/tool-tiers.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +7 -0
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +308 -20
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/write.d.ts +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +1 -1
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +21 -31
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/app-items.d.ts +3 -0
- package/dist/ui/app-items.d.ts.map +1 -1
- package/dist/ui/app-items.js +3 -0
- package/dist/ui/app-items.js.map +1 -1
- package/dist/ui/components/Footer.js +1 -1
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/ModelSelector.d.ts.map +1 -1
- package/dist/ui/components/ModelSelector.js +1 -0
- package/dist/ui/components/ModelSelector.js.map +1 -1
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.js +10 -3
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/login.d.ts.map +1 -1
- package/dist/ui/login.js +5 -33
- package/dist/ui/login.js.map +1 -1
- package/dist/ui/prompt-routing.d.ts +2 -2
- package/dist/ui/prompt-routing.d.ts.map +1 -1
- package/dist/ui/prompt-routing.js +20 -8
- package/dist/ui/prompt-routing.js.map +1 -1
- package/dist/ui/submit-prompt-command.d.ts.map +1 -1
- package/dist/ui/submit-prompt-command.js +1 -1
- package/dist/ui/submit-prompt-command.js.map +1 -1
- package/dist/ui/terminal-history.js +4 -2
- package/dist/ui/terminal-history.js.map +1 -1
- package/dist/ui/tool-group-summary.d.ts +2 -0
- package/dist/ui/tool-group-summary.d.ts.map +1 -1
- package/dist/ui/tool-group-summary.js +11 -25
- package/dist/ui/tool-group-summary.js.map +1 -1
- package/dist/ui/tool-line-summary.d.ts.map +1 -1
- package/dist/ui/tool-line-summary.js +12 -9
- package/dist/ui/tool-line-summary.js.map +1 -1
- package/dist/ui/transcript/tool-presentation.d.ts.map +1 -1
- package/dist/ui/transcript/tool-presentation.js +2 -7
- package/dist/ui/transcript/tool-presentation.js.map +1 -1
- package/dist/ui/utils/text-utils.d.ts +0 -6
- package/dist/ui/utils/text-utils.d.ts.map +1 -1
- package/dist/ui/utils/text-utils.js +8 -3
- package/dist/ui/utils/text-utils.js.map +1 -1
- package/dist/utils/text.d.ts +41 -0
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/text.js +46 -0
- package/dist/utils/text.js.map +1 -1
- package/package.json +6 -7
- package/dist/app-sidecar-auth-broadcast.test.d.ts +0 -2
- package/dist/app-sidecar-auth-broadcast.test.d.ts.map +0 -1
- package/dist/app-sidecar-auth-broadcast.test.js +0 -383
- package/dist/app-sidecar-auth-broadcast.test.js.map +0 -1
- package/dist/app-sidecar-sessions.test.d.ts +0 -2
- package/dist/app-sidecar-sessions.test.d.ts.map +0 -1
- package/dist/app-sidecar-sessions.test.js +0 -178
- package/dist/app-sidecar-sessions.test.js.map +0 -1
- package/dist/chat-agents/general.test.d.ts +0 -2
- package/dist/chat-agents/general.test.d.ts.map +0 -1
- package/dist/chat-agents/general.test.js +0 -52
- package/dist/chat-agents/general.test.js.map +0 -1
- package/dist/chat-agents/jiwa.test.d.ts +0 -2
- package/dist/chat-agents/jiwa.test.d.ts.map +0 -1
- package/dist/chat-agents/jiwa.test.js +0 -66
- package/dist/chat-agents/jiwa.test.js.map +0 -1
- package/dist/chat-agents/memory.test.d.ts +0 -2
- package/dist/chat-agents/memory.test.d.ts.map +0 -1
- package/dist/chat-agents/memory.test.js +0 -165
- package/dist/chat-agents/memory.test.js.map +0 -1
- package/dist/chat-agents/specialists.test.d.ts +0 -2
- package/dist/chat-agents/specialists.test.d.ts.map +0 -1
- package/dist/chat-agents/specialists.test.js +0 -98
- package/dist/chat-agents/specialists.test.js.map +0 -1
- package/dist/cli/command-routing.test.d.ts +0 -2
- package/dist/cli/command-routing.test.d.ts.map +0 -1
- package/dist/cli/command-routing.test.js +0 -61
- package/dist/cli/command-routing.test.js.map +0 -1
- package/dist/config.test.d.ts +0 -2
- package/dist/config.test.d.ts.map +0 -1
- package/dist/config.test.js +0 -158
- package/dist/config.test.js.map +0 -1
- package/dist/core/agent-mcp-passthrough.test.d.ts +0 -2
- package/dist/core/agent-mcp-passthrough.test.d.ts.map +0 -1
- package/dist/core/agent-mcp-passthrough.test.js +0 -61
- package/dist/core/agent-mcp-passthrough.test.js.map +0 -1
- package/dist/core/agent-notifications.test.d.ts +0 -2
- package/dist/core/agent-notifications.test.d.ts.map +0 -1
- package/dist/core/agent-notifications.test.js +0 -97
- package/dist/core/agent-notifications.test.js.map +0 -1
- package/dist/core/agent-session-add-dir.test.d.ts +0 -2
- package/dist/core/agent-session-add-dir.test.d.ts.map +0 -1
- package/dist/core/agent-session-add-dir.test.js +0 -110
- package/dist/core/agent-session-add-dir.test.js.map +0 -1
- package/dist/core/agent-session-checkpoint-flush.test.d.ts +0 -2
- package/dist/core/agent-session-checkpoint-flush.test.d.ts.map +0 -1
- package/dist/core/agent-session-checkpoint-flush.test.js +0 -201
- package/dist/core/agent-session-checkpoint-flush.test.js.map +0 -1
- package/dist/core/agent-session-compaction.test.d.ts +0 -2
- package/dist/core/agent-session-compaction.test.d.ts.map +0 -1
- package/dist/core/agent-session-compaction.test.js +0 -1156
- package/dist/core/agent-session-compaction.test.js.map +0 -1
- package/dist/core/agent-session-crash-durability.test.d.ts +0 -2
- package/dist/core/agent-session-crash-durability.test.d.ts.map +0 -1
- package/dist/core/agent-session-crash-durability.test.js +0 -102
- package/dist/core/agent-session-crash-durability.test.js.map +0 -1
- package/dist/core/agent-session-marker-anchors.test.d.ts +0 -2
- package/dist/core/agent-session-marker-anchors.test.d.ts.map +0 -1
- package/dist/core/agent-session-marker-anchors.test.js +0 -326
- package/dist/core/agent-session-marker-anchors.test.js.map +0 -1
- package/dist/core/agent-session-memory-tail.test.d.ts +0 -2
- package/dist/core/agent-session-memory-tail.test.d.ts.map +0 -1
- package/dist/core/agent-session-memory-tail.test.js +0 -119
- package/dist/core/agent-session-memory-tail.test.js.map +0 -1
- package/dist/core/agent-session-model-switch.test.d.ts +0 -2
- package/dist/core/agent-session-model-switch.test.d.ts.map +0 -1
- package/dist/core/agent-session-model-switch.test.js +0 -161
- package/dist/core/agent-session-model-switch.test.js.map +0 -1
- package/dist/core/agent-session-notifications.test.d.ts +0 -2
- package/dist/core/agent-session-notifications.test.d.ts.map +0 -1
- package/dist/core/agent-session-notifications.test.js +0 -114
- package/dist/core/agent-session-notifications.test.js.map +0 -1
- package/dist/core/agent-session-process-gate.test.d.ts +0 -2
- package/dist/core/agent-session-process-gate.test.d.ts.map +0 -1
- package/dist/core/agent-session-process-gate.test.js +0 -98
- package/dist/core/agent-session-process-gate.test.js.map +0 -1
- package/dist/core/agent-session-queue.test.d.ts +0 -2
- package/dist/core/agent-session-queue.test.d.ts.map +0 -1
- package/dist/core/agent-session-queue.test.js +0 -184
- package/dist/core/agent-session-queue.test.js.map +0 -1
- package/dist/core/agent-session-review-coverage.test.d.ts +0 -2
- package/dist/core/agent-session-review-coverage.test.d.ts.map +0 -1
- package/dist/core/agent-session-review-coverage.test.js +0 -191
- package/dist/core/agent-session-review-coverage.test.js.map +0 -1
- package/dist/core/agent-session-slash-restore.test.d.ts +0 -2
- package/dist/core/agent-session-slash-restore.test.d.ts.map +0 -1
- package/dist/core/agent-session-slash-restore.test.js +0 -121
- package/dist/core/agent-session-slash-restore.test.js.map +0 -1
- package/dist/core/agent-session-subagent-policy.test.d.ts +0 -2
- package/dist/core/agent-session-subagent-policy.test.d.ts.map +0 -1
- package/dist/core/agent-session-subagent-policy.test.js +0 -40
- package/dist/core/agent-session-subagent-policy.test.js.map +0 -1
- package/dist/core/agent-session-tool-result-policy.test.d.ts +0 -2
- package/dist/core/agent-session-tool-result-policy.test.d.ts.map +0 -1
- package/dist/core/agent-session-tool-result-policy.test.js +0 -25
- package/dist/core/agent-session-tool-result-policy.test.js.map +0 -1
- package/dist/core/agent-session-tool-tiers.test.d.ts +0 -2
- package/dist/core/agent-session-tool-tiers.test.d.ts.map +0 -1
- package/dist/core/agent-session-tool-tiers.test.js +0 -138
- package/dist/core/agent-session-tool-tiers.test.js.map +0 -1
- package/dist/core/agent-session-verification-gate.test.d.ts +0 -2
- package/dist/core/agent-session-verification-gate.test.d.ts.map +0 -1
- package/dist/core/agent-session-verification-gate.test.js +0 -135
- package/dist/core/agent-session-verification-gate.test.js.map +0 -1
- package/dist/core/agent-tools-allowlist.test.d.ts +0 -2
- package/dist/core/agent-tools-allowlist.test.d.ts.map +0 -1
- package/dist/core/agent-tools-allowlist.test.js +0 -74
- package/dist/core/agent-tools-allowlist.test.js.map +0 -1
- package/dist/core/agents.test.d.ts +0 -2
- package/dist/core/agents.test.d.ts.map +0 -1
- package/dist/core/agents.test.js +0 -147
- package/dist/core/agents.test.js.map +0 -1
- package/dist/core/auto-update.test.d.ts +0 -2
- package/dist/core/auto-update.test.d.ts.map +0 -1
- package/dist/core/auto-update.test.js +0 -204
- package/dist/core/auto-update.test.js.map +0 -1
- package/dist/core/autopilot-cycle.test.d.ts +0 -2
- package/dist/core/autopilot-cycle.test.d.ts.map +0 -1
- package/dist/core/autopilot-cycle.test.js +0 -375
- package/dist/core/autopilot-cycle.test.js.map +0 -1
- package/dist/core/autopilot-gate.test.d.ts +0 -2
- package/dist/core/autopilot-gate.test.d.ts.map +0 -1
- package/dist/core/autopilot-gate.test.js +0 -298
- package/dist/core/autopilot-gate.test.js.map +0 -1
- package/dist/core/autopilot-verdict.test.d.ts +0 -2
- package/dist/core/autopilot-verdict.test.d.ts.map +0 -1
- package/dist/core/autopilot-verdict.test.js +0 -153
- package/dist/core/autopilot-verdict.test.js.map +0 -1
- package/dist/core/checkpoint-store.test.d.ts +0 -2
- package/dist/core/checkpoint-store.test.d.ts.map +0 -1
- package/dist/core/checkpoint-store.test.js +0 -111
- package/dist/core/checkpoint-store.test.js.map +0 -1
- package/dist/core/code-retrieval-chunkers.test.d.ts +0 -2
- package/dist/core/code-retrieval-chunkers.test.d.ts.map +0 -1
- package/dist/core/code-retrieval-chunkers.test.js +0 -203
- package/dist/core/code-retrieval-chunkers.test.js.map +0 -1
- package/dist/core/compaction/active-context.test.d.ts +0 -2
- package/dist/core/compaction/active-context.test.d.ts.map +0 -1
- package/dist/core/compaction/active-context.test.js +0 -57
- package/dist/core/compaction/active-context.test.js.map +0 -1
- package/dist/core/compaction/compactor.test.d.ts +0 -2
- package/dist/core/compaction/compactor.test.d.ts.map +0 -1
- package/dist/core/compaction/compactor.test.js +0 -1072
- package/dist/core/compaction/compactor.test.js.map +0 -1
- package/dist/core/compaction/policy.test.d.ts +0 -2
- package/dist/core/compaction/policy.test.d.ts.map +0 -1
- package/dist/core/compaction/policy.test.js +0 -35
- package/dist/core/compaction/policy.test.js.map +0 -1
- package/dist/core/compaction/query-aware-selector.test.d.ts +0 -2
- package/dist/core/compaction/query-aware-selector.test.d.ts.map +0 -1
- package/dist/core/compaction/query-aware-selector.test.js +0 -96
- package/dist/core/compaction/query-aware-selector.test.js.map +0 -1
- package/dist/core/compaction/token-estimator.test.d.ts +0 -2
- package/dist/core/compaction/token-estimator.test.d.ts.map +0 -1
- package/dist/core/compaction/token-estimator.test.js +0 -283
- package/dist/core/compaction/token-estimator.test.js.map +0 -1
- package/dist/core/compaction/tool-result-pruner.test.d.ts +0 -2
- package/dist/core/compaction/tool-result-pruner.test.d.ts.map +0 -1
- package/dist/core/compaction/tool-result-pruner.test.js +0 -320
- package/dist/core/compaction/tool-result-pruner.test.js.map +0 -1
- package/dist/core/continue-replay-inventory.test.d.ts +0 -2
- package/dist/core/continue-replay-inventory.test.d.ts.map +0 -1
- package/dist/core/continue-replay-inventory.test.js +0 -42
- package/dist/core/continue-replay-inventory.test.js.map +0 -1
- package/dist/core/encode-cwd.test.d.ts +0 -2
- package/dist/core/encode-cwd.test.d.ts.map +0 -1
- package/dist/core/encode-cwd.test.js +0 -80
- package/dist/core/encode-cwd.test.js.map +0 -1
- package/dist/core/event-bus.test.d.ts +0 -2
- package/dist/core/event-bus.test.d.ts.map +0 -1
- package/dist/core/event-bus.test.js +0 -33
- package/dist/core/event-bus.test.js.map +0 -1
- package/dist/core/extensions/plugin-bundles.test.d.ts +0 -2
- package/dist/core/extensions/plugin-bundles.test.d.ts.map +0 -1
- package/dist/core/extensions/plugin-bundles.test.js +0 -110
- package/dist/core/extensions/plugin-bundles.test.js.map +0 -1
- package/dist/core/foreign-session-import.test.d.ts +0 -2
- package/dist/core/foreign-session-import.test.d.ts.map +0 -1
- package/dist/core/foreign-session-import.test.js +0 -220
- package/dist/core/foreign-session-import.test.js.map +0 -1
- package/dist/core/goal-controller.test.d.ts +0 -2
- package/dist/core/goal-controller.test.d.ts.map +0 -1
- package/dist/core/goal-controller.test.js +0 -784
- package/dist/core/goal-controller.test.js.map +0 -1
- package/dist/core/goal-lifecycle-smoke.test.d.ts +0 -2
- package/dist/core/goal-lifecycle-smoke.test.d.ts.map +0 -1
- package/dist/core/goal-lifecycle-smoke.test.js +0 -248
- package/dist/core/goal-lifecycle-smoke.test.js.map +0 -1
- package/dist/core/goal-prerequisites.test.d.ts +0 -2
- package/dist/core/goal-prerequisites.test.d.ts.map +0 -1
- package/dist/core/goal-prerequisites.test.js +0 -118
- package/dist/core/goal-prerequisites.test.js.map +0 -1
- package/dist/core/goal-store.test.d.ts +0 -2
- package/dist/core/goal-store.test.d.ts.map +0 -1
- package/dist/core/goal-store.test.js +0 -398
- package/dist/core/goal-store.test.js.map +0 -1
- package/dist/core/goal-verifier.test.d.ts +0 -2
- package/dist/core/goal-verifier.test.d.ts.map +0 -1
- package/dist/core/goal-verifier.test.js +0 -131
- package/dist/core/goal-verifier.test.js.map +0 -1
- package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts +0 -2
- package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts.map +0 -1
- package/dist/core/goal-worker-dev-server-lifecycle.test.js +0 -68
- package/dist/core/goal-worker-dev-server-lifecycle.test.js.map +0 -1
- package/dist/core/goal-worker.test.d.ts +0 -2
- package/dist/core/goal-worker.test.d.ts.map +0 -1
- package/dist/core/goal-worker.test.js +0 -269
- package/dist/core/goal-worker.test.js.map +0 -1
- package/dist/core/hashline-edit-benchmark.test.d.ts +0 -2
- package/dist/core/hashline-edit-benchmark.test.d.ts.map +0 -1
- package/dist/core/hashline-edit-benchmark.test.js +0 -190
- package/dist/core/hashline-edit-benchmark.test.js.map +0 -1
- package/dist/core/ideal-review.test.d.ts +0 -2
- package/dist/core/ideal-review.test.d.ts.map +0 -1
- package/dist/core/ideal-review.test.js +0 -242
- package/dist/core/ideal-review.test.js.map +0 -1
- package/dist/core/input-normalization.test.d.ts +0 -2
- package/dist/core/input-normalization.test.d.ts.map +0 -1
- package/dist/core/input-normalization.test.js +0 -75
- package/dist/core/input-normalization.test.js.map +0 -1
- package/dist/core/json-mode-flag-parity.test.d.ts +0 -2
- package/dist/core/json-mode-flag-parity.test.d.ts.map +0 -1
- package/dist/core/json-mode-flag-parity.test.js +0 -66
- package/dist/core/json-mode-flag-parity.test.js.map +0 -1
- package/dist/core/language-detector.test.d.ts +0 -2
- package/dist/core/language-detector.test.d.ts.map +0 -1
- package/dist/core/language-detector.test.js +0 -109
- package/dist/core/language-detector.test.js.map +0 -1
- package/dist/core/local-endpoint-store.test.d.ts +0 -2
- package/dist/core/local-endpoint-store.test.d.ts.map +0 -1
- package/dist/core/local-endpoint-store.test.js +0 -131
- package/dist/core/local-endpoint-store.test.js.map +0 -1
- package/dist/core/loop-breaker.test.d.ts +0 -2
- package/dist/core/loop-breaker.test.d.ts.map +0 -1
- package/dist/core/loop-breaker.test.js +0 -238
- package/dist/core/loop-breaker.test.js.map +0 -1
- package/dist/core/lsp/client-navigation.test.d.ts +0 -2
- package/dist/core/lsp/client-navigation.test.d.ts.map +0 -1
- package/dist/core/lsp/client-navigation.test.js +0 -135
- package/dist/core/lsp/client-navigation.test.js.map +0 -1
- package/dist/core/lsp/format.test.d.ts +0 -2
- package/dist/core/lsp/format.test.d.ts.map +0 -1
- package/dist/core/lsp/format.test.js +0 -56
- package/dist/core/lsp/format.test.js.map +0 -1
- package/dist/core/lsp/integration.test.d.ts +0 -2
- package/dist/core/lsp/integration.test.d.ts.map +0 -1
- package/dist/core/lsp/integration.test.js +0 -60
- package/dist/core/lsp/integration.test.js.map +0 -1
- package/dist/core/lsp/jsonrpc.test.d.ts +0 -2
- package/dist/core/lsp/jsonrpc.test.d.ts.map +0 -1
- package/dist/core/lsp/jsonrpc.test.js +0 -127
- package/dist/core/lsp/jsonrpc.test.js.map +0 -1
- package/dist/core/lsp/manager-navigation.test.d.ts +0 -2
- package/dist/core/lsp/manager-navigation.test.d.ts.map +0 -1
- package/dist/core/lsp/manager-navigation.test.js +0 -121
- package/dist/core/lsp/manager-navigation.test.js.map +0 -1
- package/dist/core/lsp/manager.test.d.ts +0 -2
- package/dist/core/lsp/manager.test.d.ts.map +0 -1
- package/dist/core/lsp/manager.test.js +0 -220
- package/dist/core/lsp/manager.test.js.map +0 -1
- package/dist/core/lsp/pool.test.d.ts +0 -2
- package/dist/core/lsp/pool.test.d.ts.map +0 -1
- package/dist/core/lsp/pool.test.js +0 -286
- package/dist/core/lsp/pool.test.js.map +0 -1
- package/dist/core/lsp/servers.test.d.ts +0 -2
- package/dist/core/lsp/servers.test.d.ts.map +0 -1
- package/dist/core/lsp/servers.test.js +0 -67
- package/dist/core/lsp/servers.test.js.map +0 -1
- package/dist/core/lsp/uri.test.d.ts +0 -2
- package/dist/core/lsp/uri.test.d.ts.map +0 -1
- package/dist/core/lsp/uri.test.js +0 -56
- package/dist/core/lsp/uri.test.js.map +0 -1
- package/dist/core/lsp/windows.test.d.ts +0 -2
- package/dist/core/lsp/windows.test.d.ts.map +0 -1
- package/dist/core/lsp/windows.test.js +0 -239
- package/dist/core/lsp/windows.test.js.map +0 -1
- package/dist/core/mcp/catalog-cache.test.d.ts +0 -2
- package/dist/core/mcp/catalog-cache.test.d.ts.map +0 -1
- package/dist/core/mcp/catalog-cache.test.js +0 -99
- package/dist/core/mcp/catalog-cache.test.js.map +0 -1
- package/dist/core/mcp/client-session-recovery.test.d.ts +0 -2
- package/dist/core/mcp/client-session-recovery.test.d.ts.map +0 -1
- package/dist/core/mcp/client-session-recovery.test.js +0 -231
- package/dist/core/mcp/client-session-recovery.test.js.map +0 -1
- package/dist/core/mcp/content.test.d.ts +0 -2
- package/dist/core/mcp/content.test.d.ts.map +0 -1
- package/dist/core/mcp/content.test.js +0 -135
- package/dist/core/mcp/content.test.js.map +0 -1
- package/dist/core/mcp/defaults.test.d.ts +0 -2
- package/dist/core/mcp/defaults.test.d.ts.map +0 -1
- package/dist/core/mcp/defaults.test.js +0 -60
- package/dist/core/mcp/defaults.test.js.map +0 -1
- package/dist/core/mcp/elicitation.test.d.ts +0 -2
- package/dist/core/mcp/elicitation.test.d.ts.map +0 -1
- package/dist/core/mcp/elicitation.test.js +0 -158
- package/dist/core/mcp/elicitation.test.js.map +0 -1
- package/dist/core/mcp/legacy-negotiation.test.d.ts +0 -2
- package/dist/core/mcp/legacy-negotiation.test.d.ts.map +0 -1
- package/dist/core/mcp/legacy-negotiation.test.js +0 -80
- package/dist/core/mcp/legacy-negotiation.test.js.map +0 -1
- package/dist/core/mcp/loopback.test.d.ts +0 -2
- package/dist/core/mcp/loopback.test.d.ts.map +0 -1
- package/dist/core/mcp/loopback.test.js +0 -87
- package/dist/core/mcp/loopback.test.js.map +0 -1
- package/dist/core/mcp/oauth-store.test.d.ts +0 -2
- package/dist/core/mcp/oauth-store.test.d.ts.map +0 -1
- package/dist/core/mcp/oauth-store.test.js +0 -94
- package/dist/core/mcp/oauth-store.test.js.map +0 -1
- package/dist/core/mcp/parse-add-command.test.d.ts +0 -2
- package/dist/core/mcp/parse-add-command.test.d.ts.map +0 -1
- package/dist/core/mcp/parse-add-command.test.js +0 -81
- package/dist/core/mcp/parse-add-command.test.js.map +0 -1
- package/dist/core/mcp/resolve-stdio.test.d.ts +0 -2
- package/dist/core/mcp/resolve-stdio.test.d.ts.map +0 -1
- package/dist/core/mcp/resolve-stdio.test.js +0 -239
- package/dist/core/mcp/resolve-stdio.test.js.map +0 -1
- package/dist/core/mcp/session-elicitation-wiring.test.d.ts +0 -2
- package/dist/core/mcp/session-elicitation-wiring.test.d.ts.map +0 -1
- package/dist/core/mcp/session-elicitation-wiring.test.js +0 -138
- package/dist/core/mcp/session-elicitation-wiring.test.js.map +0 -1
- package/dist/core/mcp/shared-pool.test.d.ts +0 -2
- package/dist/core/mcp/shared-pool.test.d.ts.map +0 -1
- package/dist/core/mcp/shared-pool.test.js +0 -425
- package/dist/core/mcp/shared-pool.test.js.map +0 -1
- package/dist/core/mcp/store.test.d.ts +0 -2
- package/dist/core/mcp/store.test.d.ts.map +0 -1
- package/dist/core/mcp/store.test.js +0 -110
- package/dist/core/mcp/store.test.js.map +0 -1
- package/dist/core/mcp/when-connected.test.d.ts +0 -2
- package/dist/core/mcp/when-connected.test.d.ts.map +0 -1
- package/dist/core/mcp/when-connected.test.js +0 -46
- package/dist/core/mcp/when-connected.test.js.map +0 -1
- package/dist/core/message-images.test.d.ts +0 -2
- package/dist/core/message-images.test.d.ts.map +0 -1
- package/dist/core/message-images.test.js +0 -62
- package/dist/core/message-images.test.js.map +0 -1
- package/dist/core/network-guard.test.d.ts +0 -2
- package/dist/core/network-guard.test.d.ts.map +0 -1
- package/dist/core/network-guard.test.js +0 -72
- package/dist/core/network-guard.test.js.map +0 -1
- package/dist/core/nolan-context.test.d.ts +0 -2
- package/dist/core/nolan-context.test.d.ts.map +0 -1
- package/dist/core/nolan-context.test.js +0 -342
- package/dist/core/nolan-context.test.js.map +0 -1
- package/dist/core/nolan-model.test.d.ts +0 -2
- package/dist/core/nolan-model.test.d.ts.map +0 -1
- package/dist/core/nolan-model.test.js +0 -51
- package/dist/core/nolan-model.test.js.map +0 -1
- package/dist/core/nolan-prompt.test.d.ts +0 -2
- package/dist/core/nolan-prompt.test.d.ts.map +0 -1
- package/dist/core/nolan-prompt.test.js +0 -160
- package/dist/core/nolan-prompt.test.js.map +0 -1
- package/dist/core/persistent-shell.test.d.ts +0 -2
- package/dist/core/persistent-shell.test.d.ts.map +0 -1
- package/dist/core/persistent-shell.test.js +0 -84
- package/dist/core/persistent-shell.test.js.map +0 -1
- package/dist/core/pixel-fix.test.d.ts +0 -2
- package/dist/core/pixel-fix.test.d.ts.map +0 -1
- package/dist/core/pixel-fix.test.js +0 -310
- package/dist/core/pixel-fix.test.js.map +0 -1
- package/dist/core/pixel.test.d.ts +0 -2
- package/dist/core/pixel.test.d.ts.map +0 -1
- package/dist/core/pixel.test.js +0 -269
- package/dist/core/pixel.test.js.map +0 -1
- package/dist/core/process-gate.test.d.ts +0 -2
- package/dist/core/process-gate.test.d.ts.map +0 -1
- package/dist/core/process-gate.test.js +0 -87
- package/dist/core/process-gate.test.js.map +0 -1
- package/dist/core/process-manager-dev-server-repro.test.d.ts +0 -2
- package/dist/core/process-manager-dev-server-repro.test.d.ts.map +0 -1
- package/dist/core/process-manager-dev-server-repro.test.js +0 -225
- package/dist/core/process-manager-dev-server-repro.test.js.map +0 -1
- package/dist/core/process-manager-notifications.test.d.ts +0 -2
- package/dist/core/process-manager-notifications.test.d.ts.map +0 -1
- package/dist/core/process-manager-notifications.test.js +0 -227
- package/dist/core/process-manager-notifications.test.js.map +0 -1
- package/dist/core/process-manager-wake.test.d.ts +0 -2
- package/dist/core/process-manager-wake.test.d.ts.map +0 -1
- package/dist/core/process-manager-wake.test.js +0 -96
- package/dist/core/process-manager-wake.test.js.map +0 -1
- package/dist/core/progress/engine.test.d.ts +0 -2
- package/dist/core/progress/engine.test.d.ts.map +0 -1
- package/dist/core/progress/engine.test.js +0 -136
- package/dist/core/progress/engine.test.js.map +0 -1
- package/dist/core/progress/git-xp.test.d.ts +0 -2
- package/dist/core/progress/git-xp.test.d.ts.map +0 -1
- package/dist/core/progress/git-xp.test.js +0 -88
- package/dist/core/progress/git-xp.test.js.map +0 -1
- package/dist/core/progress/ranks.test.d.ts +0 -2
- package/dist/core/progress/ranks.test.d.ts.map +0 -1
- package/dist/core/progress/ranks.test.js +0 -100
- package/dist/core/progress/ranks.test.js.map +0 -1
- package/dist/core/progress/rebuild.test.d.ts +0 -2
- package/dist/core/progress/rebuild.test.d.ts.map +0 -1
- package/dist/core/progress/rebuild.test.js +0 -103
- package/dist/core/progress/rebuild.test.js.map +0 -1
- package/dist/core/progress/store.test.d.ts +0 -2
- package/dist/core/progress/store.test.d.ts.map +0 -1
- package/dist/core/progress/store.test.js +0 -108
- package/dist/core/progress/store.test.js.map +0 -1
- package/dist/core/project-discovery.test.d.ts +0 -2
- package/dist/core/project-discovery.test.d.ts.map +0 -1
- package/dist/core/project-discovery.test.js +0 -519
- package/dist/core/project-discovery.test.js.map +0 -1
- package/dist/core/prompt-commands.test.d.ts +0 -2
- package/dist/core/prompt-commands.test.d.ts.map +0 -1
- package/dist/core/prompt-commands.test.js +0 -175
- package/dist/core/prompt-commands.test.js.map +0 -1
- package/dist/core/provider-cache.e2e.test.d.ts +0 -2
- package/dist/core/provider-cache.e2e.test.d.ts.map +0 -1
- package/dist/core/provider-cache.e2e.test.js +0 -125
- package/dist/core/provider-cache.e2e.test.js.map +0 -1
- package/dist/core/radio.test.d.ts +0 -2
- package/dist/core/radio.test.d.ts.map +0 -1
- package/dist/core/radio.test.js +0 -117
- package/dist/core/radio.test.js.map +0 -1
- package/dist/core/regrounding.test.d.ts +0 -2
- package/dist/core/regrounding.test.d.ts.map +0 -1
- package/dist/core/regrounding.test.js +0 -38
- package/dist/core/regrounding.test.js.map +0 -1
- package/dist/core/resolve-start.test.d.ts +0 -2
- package/dist/core/resolve-start.test.d.ts.map +0 -1
- package/dist/core/resolve-start.test.js +0 -68
- package/dist/core/resolve-start.test.js.map +0 -1
- package/dist/core/run-claim.test.d.ts +0 -2
- package/dist/core/run-claim.test.d.ts.map +0 -1
- package/dist/core/run-claim.test.js +0 -107
- package/dist/core/run-claim.test.js.map +0 -1
- package/dist/core/run-journal.test.d.ts +0 -2
- package/dist/core/run-journal.test.d.ts.map +0 -1
- package/dist/core/run-journal.test.js +0 -195
- package/dist/core/run-journal.test.js.map +0 -1
- package/dist/core/run-lifecycle.test.d.ts +0 -2
- package/dist/core/run-lifecycle.test.d.ts.map +0 -1
- package/dist/core/run-lifecycle.test.js +0 -64
- package/dist/core/run-lifecycle.test.js.map +0 -1
- package/dist/core/sandbox-feedback.test.d.ts +0 -2
- package/dist/core/sandbox-feedback.test.d.ts.map +0 -1
- package/dist/core/sandbox-feedback.test.js +0 -32
- package/dist/core/sandbox-feedback.test.js.map +0 -1
- package/dist/core/sandbox.test.d.ts +0 -2
- package/dist/core/sandbox.test.d.ts.map +0 -1
- package/dist/core/sandbox.test.js +0 -157
- package/dist/core/sandbox.test.js.map +0 -1
- package/dist/core/semantic-search-benchmark.test.d.ts +0 -2
- package/dist/core/semantic-search-benchmark.test.d.ts.map +0 -1
- package/dist/core/semantic-search-benchmark.test.js +0 -89
- package/dist/core/semantic-search-benchmark.test.js.map +0 -1
- package/dist/core/session-compaction.test.d.ts +0 -2
- package/dist/core/session-compaction.test.d.ts.map +0 -1
- package/dist/core/session-compaction.test.js +0 -92
- package/dist/core/session-compaction.test.js.map +0 -1
- package/dist/core/session-export.test.d.ts +0 -2
- package/dist/core/session-export.test.d.ts.map +0 -1
- package/dist/core/session-export.test.js +0 -353
- package/dist/core/session-export.test.js.map +0 -1
- package/dist/core/session-history.test.d.ts +0 -2
- package/dist/core/session-history.test.d.ts.map +0 -1
- package/dist/core/session-history.test.js +0 -272
- package/dist/core/session-history.test.js.map +0 -1
- package/dist/core/session-injections.test.d.ts +0 -2
- package/dist/core/session-injections.test.d.ts.map +0 -1
- package/dist/core/session-injections.test.js +0 -117
- package/dist/core/session-injections.test.js.map +0 -1
- package/dist/core/session-manager.test.d.ts +0 -2
- package/dist/core/session-manager.test.d.ts.map +0 -1
- package/dist/core/session-manager.test.js +0 -573
- package/dist/core/session-manager.test.js.map +0 -1
- package/dist/core/session-notification-visibility.test.d.ts +0 -2
- package/dist/core/session-notification-visibility.test.d.ts.map +0 -1
- package/dist/core/session-notification-visibility.test.js +0 -113
- package/dist/core/session-notification-visibility.test.js.map +0 -1
- package/dist/core/session-reconstructability.test.d.ts +0 -2
- package/dist/core/session-reconstructability.test.d.ts.map +0 -1
- package/dist/core/session-reconstructability.test.js +0 -105
- package/dist/core/session-reconstructability.test.js.map +0 -1
- package/dist/core/session-restore-display.test.d.ts +0 -2
- package/dist/core/session-restore-display.test.d.ts.map +0 -1
- package/dist/core/session-restore-display.test.js +0 -103
- package/dist/core/session-restore-display.test.js.map +0 -1
- package/dist/core/session-storage-fd-leak.test.d.ts +0 -2
- package/dist/core/session-storage-fd-leak.test.d.ts.map +0 -1
- package/dist/core/session-storage-fd-leak.test.js +0 -116
- package/dist/core/session-storage-fd-leak.test.js.map +0 -1
- package/dist/core/session-storage.test.d.ts +0 -2
- package/dist/core/session-storage.test.d.ts.map +0 -1
- package/dist/core/session-storage.test.js +0 -277
- package/dist/core/session-storage.test.js.map +0 -1
- package/dist/core/setup-history.test.d.ts +0 -2
- package/dist/core/setup-history.test.d.ts.map +0 -1
- package/dist/core/setup-history.test.js +0 -59
- package/dist/core/setup-history.test.js.map +0 -1
- package/dist/core/shell.test.d.ts +0 -2
- package/dist/core/shell.test.d.ts.map +0 -1
- package/dist/core/shell.test.js +0 -87
- package/dist/core/shell.test.js.map +0 -1
- package/dist/core/shutdown.test.d.ts +0 -2
- package/dist/core/shutdown.test.d.ts.map +0 -1
- package/dist/core/shutdown.test.js +0 -160
- package/dist/core/shutdown.test.js.map +0 -1
- package/dist/core/sidecar-error-reporter.d.ts +0 -12
- package/dist/core/sidecar-error-reporter.d.ts.map +0 -1
- package/dist/core/sidecar-error-reporter.js +0 -57
- package/dist/core/sidecar-error-reporter.js.map +0 -1
- package/dist/core/sidecar-error-reporter.test.d.ts +0 -2
- package/dist/core/sidecar-error-reporter.test.d.ts.map +0 -1
- package/dist/core/sidecar-error-reporter.test.js +0 -61
- package/dist/core/sidecar-error-reporter.test.js.map +0 -1
- package/dist/core/skills-routing.test.d.ts +0 -2
- package/dist/core/skills-routing.test.d.ts.map +0 -1
- package/dist/core/skills-routing.test.js +0 -214
- package/dist/core/skills-routing.test.js.map +0 -1
- package/dist/core/slash-commands.test.d.ts +0 -2
- package/dist/core/slash-commands.test.d.ts.map +0 -1
- package/dist/core/slash-commands.test.js +0 -59
- package/dist/core/slash-commands.test.js.map +0 -1
- package/dist/core/source-maps.test.d.ts +0 -2
- package/dist/core/source-maps.test.d.ts.map +0 -1
- package/dist/core/source-maps.test.js +0 -175
- package/dist/core/source-maps.test.js.map +0 -1
- package/dist/core/speed-benchmark.test.d.ts +0 -2
- package/dist/core/speed-benchmark.test.d.ts.map +0 -1
- package/dist/core/speed-benchmark.test.js +0 -102
- package/dist/core/speed-benchmark.test.js.map +0 -1
- package/dist/core/subagent-manager.test.d.ts +0 -2
- package/dist/core/subagent-manager.test.d.ts.map +0 -1
- package/dist/core/subagent-manager.test.js +0 -375
- package/dist/core/subagent-manager.test.js.map +0 -1
- package/dist/core/subagent-store.test.d.ts +0 -2
- package/dist/core/subagent-store.test.d.ts.map +0 -1
- package/dist/core/subagent-store.test.js +0 -106
- package/dist/core/subagent-store.test.js.map +0 -1
- package/dist/core/verification-evidence.test.d.ts +0 -2
- package/dist/core/verification-evidence.test.d.ts.map +0 -1
- package/dist/core/verification-evidence.test.js +0 -103
- package/dist/core/verification-evidence.test.js.map +0 -1
- package/dist/core/verification-gate.test.d.ts +0 -2
- package/dist/core/verification-gate.test.d.ts.map +0 -1
- package/dist/core/verification-gate.test.js +0 -102
- package/dist/core/verification-gate.test.js.map +0 -1
- package/dist/core/verify-commands.test.d.ts +0 -2
- package/dist/core/verify-commands.test.d.ts.map +0 -1
- package/dist/core/verify-commands.test.js +0 -81
- package/dist/core/verify-commands.test.js.map +0 -1
- package/dist/core/workspace-guard.test.d.ts +0 -2
- package/dist/core/workspace-guard.test.d.ts.map +0 -1
- package/dist/core/workspace-guard.test.js +0 -107
- package/dist/core/workspace-guard.test.js.map +0 -1
- package/dist/modes/acp-mode.test.d.ts +0 -2
- package/dist/modes/acp-mode.test.d.ts.map +0 -1
- package/dist/modes/acp-mode.test.js +0 -1067
- package/dist/modes/acp-mode.test.js.map +0 -1
- package/dist/modes/json-mode.test.d.ts +0 -2
- package/dist/modes/json-mode.test.d.ts.map +0 -1
- package/dist/modes/json-mode.test.js +0 -84
- package/dist/modes/json-mode.test.js.map +0 -1
- package/dist/modes/subagent-worker-mode.test.d.ts +0 -2
- package/dist/modes/subagent-worker-mode.test.d.ts.map +0 -1
- package/dist/modes/subagent-worker-mode.test.js +0 -52
- package/dist/modes/subagent-worker-mode.test.js.map +0 -1
- package/dist/session.test.d.ts +0 -2
- package/dist/session.test.d.ts.map +0 -1
- package/dist/session.test.js +0 -35
- package/dist/session.test.js.map +0 -1
- package/dist/system-prompt.test.d.ts +0 -2
- package/dist/system-prompt.test.d.ts.map +0 -1
- package/dist/system-prompt.test.js +0 -616
- package/dist/system-prompt.test.js.map +0 -1
- package/dist/system-prompt.tiering.test.d.ts +0 -2
- package/dist/system-prompt.tiering.test.d.ts.map +0 -1
- package/dist/system-prompt.tiering.test.js +0 -108
- package/dist/system-prompt.tiering.test.js.map +0 -1
- package/dist/tools/bash.test.d.ts +0 -2
- package/dist/tools/bash.test.d.ts.map +0 -1
- package/dist/tools/bash.test.js +0 -241
- package/dist/tools/bash.test.js.map +0 -1
- package/dist/tools/checkpoint-hook.test.d.ts +0 -2
- package/dist/tools/checkpoint-hook.test.d.ts.map +0 -1
- package/dist/tools/checkpoint-hook.test.js +0 -65
- package/dist/tools/checkpoint-hook.test.js.map +0 -1
- package/dist/tools/code-nav.test.d.ts +0 -2
- package/dist/tools/code-nav.test.d.ts.map +0 -1
- package/dist/tools/code-nav.test.js +0 -136
- package/dist/tools/code-nav.test.js.map +0 -1
- package/dist/tools/code-skeleton.test.d.ts +0 -2
- package/dist/tools/code-skeleton.test.d.ts.map +0 -1
- package/dist/tools/code-skeleton.test.js +0 -115
- package/dist/tools/code-skeleton.test.js.map +0 -1
- package/dist/tools/compress-integration.test.d.ts +0 -2
- package/dist/tools/compress-integration.test.d.ts.map +0 -1
- package/dist/tools/compress-integration.test.js +0 -59
- package/dist/tools/compress-integration.test.js.map +0 -1
- package/dist/tools/compress.test.d.ts +0 -2
- package/dist/tools/compress.test.d.ts.map +0 -1
- package/dist/tools/compress.test.js +0 -60
- package/dist/tools/compress.test.js.map +0 -1
- package/dist/tools/edit-diff.test.d.ts +0 -2
- package/dist/tools/edit-diff.test.d.ts.map +0 -1
- package/dist/tools/edit-diff.test.js +0 -329
- package/dist/tools/edit-diff.test.js.map +0 -1
- package/dist/tools/edit-robustness.test.d.ts +0 -2
- package/dist/tools/edit-robustness.test.d.ts.map +0 -1
- package/dist/tools/edit-robustness.test.js +0 -417
- package/dist/tools/edit-robustness.test.js.map +0 -1
- package/dist/tools/edit.test.d.ts +0 -2
- package/dist/tools/edit.test.d.ts.map +0 -1
- package/dist/tools/edit.test.js +0 -984
- package/dist/tools/edit.test.js.map +0 -1
- package/dist/tools/exit-plan.test.d.ts +0 -2
- package/dist/tools/exit-plan.test.d.ts.map +0 -1
- package/dist/tools/exit-plan.test.js +0 -72
- package/dist/tools/exit-plan.test.js.map +0 -1
- package/dist/tools/generate-image.test.d.ts +0 -2
- package/dist/tools/generate-image.test.d.ts.map +0 -1
- package/dist/tools/generate-image.test.js +0 -240
- package/dist/tools/generate-image.test.js.map +0 -1
- package/dist/tools/goal-mode.test.d.ts +0 -2
- package/dist/tools/goal-mode.test.d.ts.map +0 -1
- package/dist/tools/goal-mode.test.js +0 -121
- package/dist/tools/goal-mode.test.js.map +0 -1
- package/dist/tools/goals.test.d.ts +0 -2
- package/dist/tools/goals.test.d.ts.map +0 -1
- package/dist/tools/goals.test.js +0 -795
- package/dist/tools/goals.test.js.map +0 -1
- package/dist/tools/grep-parity.test.d.ts +0 -2
- package/dist/tools/grep-parity.test.d.ts.map +0 -1
- package/dist/tools/grep-parity.test.js +0 -92
- package/dist/tools/grep-parity.test.js.map +0 -1
- package/dist/tools/grep-recall.test.d.ts +0 -2
- package/dist/tools/grep-recall.test.d.ts.map +0 -1
- package/dist/tools/grep-recall.test.js +0 -114
- package/dist/tools/grep-recall.test.js.map +0 -1
- package/dist/tools/grep-spawn.test.d.ts +0 -2
- package/dist/tools/grep-spawn.test.d.ts.map +0 -1
- package/dist/tools/grep-spawn.test.js +0 -66
- package/dist/tools/grep-spawn.test.js.map +0 -1
- package/dist/tools/grep.test.d.ts +0 -2
- package/dist/tools/grep.test.d.ts.map +0 -1
- package/dist/tools/grep.test.js +0 -82
- package/dist/tools/grep.test.js.map +0 -1
- package/dist/tools/html-extract.test.d.ts +0 -2
- package/dist/tools/html-extract.test.d.ts.map +0 -1
- package/dist/tools/html-extract.test.js +0 -60
- package/dist/tools/html-extract.test.js.map +0 -1
- package/dist/tools/index.test.d.ts +0 -2
- package/dist/tools/index.test.d.ts.map +0 -1
- package/dist/tools/index.test.js +0 -55
- package/dist/tools/index.test.js.map +0 -1
- package/dist/tools/overflow.test.d.ts +0 -2
- package/dist/tools/overflow.test.d.ts.map +0 -1
- package/dist/tools/overflow.test.js +0 -59
- package/dist/tools/overflow.test.js.map +0 -1
- package/dist/tools/path-utils.test.d.ts +0 -2
- package/dist/tools/path-utils.test.d.ts.map +0 -1
- package/dist/tools/path-utils.test.js +0 -54
- package/dist/tools/path-utils.test.js.map +0 -1
- package/dist/tools/pdf-extract.test.d.ts +0 -2
- package/dist/tools/pdf-extract.test.d.ts.map +0 -1
- package/dist/tools/pdf-extract.test.js +0 -15
- package/dist/tools/pdf-extract.test.js.map +0 -1
- package/dist/tools/plan-mode.test.d.ts +0 -2
- package/dist/tools/plan-mode.test.d.ts.map +0 -1
- package/dist/tools/plan-mode.test.js +0 -116
- package/dist/tools/plan-mode.test.js.map +0 -1
- package/dist/tools/read-only-bash.test.d.ts +0 -2
- package/dist/tools/read-only-bash.test.d.ts.map +0 -1
- package/dist/tools/read-only-bash.test.js +0 -96
- package/dist/tools/read-only-bash.test.js.map +0 -1
- package/dist/tools/read.test.d.ts +0 -2
- package/dist/tools/read.test.d.ts.map +0 -1
- package/dist/tools/read.test.js +0 -146
- package/dist/tools/read.test.js.map +0 -1
- package/dist/tools/screenshot.test.d.ts +0 -2
- package/dist/tools/screenshot.test.d.ts.map +0 -1
- package/dist/tools/screenshot.test.js +0 -145
- package/dist/tools/screenshot.test.js.map +0 -1
- package/dist/tools/search-code.test.d.ts +0 -2
- package/dist/tools/search-code.test.d.ts.map +0 -1
- package/dist/tools/search-code.test.js +0 -83
- package/dist/tools/search-code.test.js.map +0 -1
- package/dist/tools/source-path.test.d.ts +0 -2
- package/dist/tools/source-path.test.d.ts.map +0 -1
- package/dist/tools/source-path.test.js +0 -80
- package/dist/tools/source-path.test.js.map +0 -1
- package/dist/tools/subagent-control.test.d.ts +0 -2
- package/dist/tools/subagent-control.test.d.ts.map +0 -1
- package/dist/tools/subagent-control.test.js +0 -73
- package/dist/tools/subagent-control.test.js.map +0 -1
- package/dist/tools/subagent-shared.test.d.ts +0 -2
- package/dist/tools/subagent-shared.test.d.ts.map +0 -1
- package/dist/tools/subagent-shared.test.js +0 -83
- package/dist/tools/subagent-shared.test.js.map +0 -1
- package/dist/tools/subagent.test.d.ts +0 -2
- package/dist/tools/subagent.test.d.ts.map +0 -1
- package/dist/tools/subagent.test.js +0 -180
- package/dist/tools/subagent.test.js.map +0 -1
- package/dist/tools/task-send.test.d.ts +0 -2
- package/dist/tools/task-send.test.d.ts.map +0 -1
- package/dist/tools/task-send.test.js +0 -104
- package/dist/tools/task-send.test.js.map +0 -1
- package/dist/tools/tasks.test.d.ts +0 -2
- package/dist/tools/tasks.test.d.ts.map +0 -1
- package/dist/tools/tasks.test.js +0 -62
- package/dist/tools/tasks.test.js.map +0 -1
- package/dist/tools/tool-catalog.test.d.ts +0 -2
- package/dist/tools/tool-catalog.test.d.ts.map +0 -1
- package/dist/tools/tool-catalog.test.js +0 -124
- package/dist/tools/tool-catalog.test.js.map +0 -1
- package/dist/tools/tool-search.test.d.ts +0 -2
- package/dist/tools/tool-search.test.d.ts.map +0 -1
- package/dist/tools/tool-search.test.js +0 -69
- package/dist/tools/tool-search.test.js.map +0 -1
- package/dist/tools/tool-tiers.test.d.ts +0 -2
- package/dist/tools/tool-tiers.test.d.ts.map +0 -1
- package/dist/tools/tool-tiers.test.js +0 -48
- package/dist/tools/tool-tiers.test.js.map +0 -1
- package/dist/tools/truncate-utils.test.d.ts +0 -2
- package/dist/tools/truncate-utils.test.d.ts.map +0 -1
- package/dist/tools/truncate-utils.test.js +0 -93
- package/dist/tools/truncate-utils.test.js.map +0 -1
- package/dist/tools/truncate.test.d.ts +0 -2
- package/dist/tools/truncate.test.d.ts.map +0 -1
- package/dist/tools/truncate.test.js +0 -100
- package/dist/tools/truncate.test.js.map +0 -1
- package/dist/tools/web-fetch.test.d.ts +0 -2
- package/dist/tools/web-fetch.test.d.ts.map +0 -1
- package/dist/tools/web-fetch.test.js +0 -539
- package/dist/tools/web-fetch.test.js.map +0 -1
- package/dist/tools/web-search.test.d.ts +0 -2
- package/dist/tools/web-search.test.d.ts.map +0 -1
- package/dist/tools/web-search.test.js +0 -333
- package/dist/tools/web-search.test.js.map +0 -1
- package/dist/tools/write.test.d.ts +0 -2
- package/dist/tools/write.test.d.ts.map +0 -1
- package/dist/tools/write.test.js +0 -176
- package/dist/tools/write.test.js.map +0 -1
- package/dist/ui/anchor-pad-reclaim.test.d.ts +0 -2
- package/dist/ui/anchor-pad-reclaim.test.d.ts.map +0 -1
- package/dist/ui/anchor-pad-reclaim.test.js +0 -146
- package/dist/ui/anchor-pad-reclaim.test.js.map +0 -1
- package/dist/ui/app-items.test.d.ts +0 -2
- package/dist/ui/app-items.test.d.ts.map +0 -1
- package/dist/ui/app-items.test.js +0 -54
- package/dist/ui/app-items.test.js.map +0 -1
- package/dist/ui/app-state-persistence.test.d.ts +0 -2
- package/dist/ui/app-state-persistence.test.d.ts.map +0 -1
- package/dist/ui/app-state-persistence.test.js +0 -71
- package/dist/ui/app-state-persistence.test.js.map +0 -1
- package/dist/ui/assistant-stream-flush-parity.test.d.ts +0 -2
- package/dist/ui/assistant-stream-flush-parity.test.d.ts.map +0 -1
- package/dist/ui/assistant-stream-flush-parity.test.js +0 -85
- package/dist/ui/assistant-stream-flush-parity.test.js.map +0 -1
- package/dist/ui/atomic-flush-regression.test.d.ts +0 -2
- package/dist/ui/atomic-flush-regression.test.d.ts.map +0 -1
- package/dist/ui/atomic-flush-regression.test.js +0 -218
- package/dist/ui/atomic-flush-regression.test.js.map +0 -1
- package/dist/ui/chat-layout-pinning.test.d.ts +0 -2
- package/dist/ui/chat-layout-pinning.test.d.ts.map +0 -1
- package/dist/ui/chat-layout-pinning.test.js +0 -525
- package/dist/ui/chat-layout-pinning.test.js.map +0 -1
- package/dist/ui/components/ActivityIndicator.test.d.ts +0 -2
- package/dist/ui/components/ActivityIndicator.test.d.ts.map +0 -1
- package/dist/ui/components/ActivityIndicator.test.js +0 -40
- package/dist/ui/components/ActivityIndicator.test.js.map +0 -1
- package/dist/ui/components/AssistantMessage.test.d.ts +0 -2
- package/dist/ui/components/AssistantMessage.test.d.ts.map +0 -1
- package/dist/ui/components/AssistantMessage.test.js +0 -418
- package/dist/ui/components/AssistantMessage.test.js.map +0 -1
- package/dist/ui/components/Footer.test.d.ts +0 -2
- package/dist/ui/components/Footer.test.d.ts.map +0 -1
- package/dist/ui/components/Footer.test.js +0 -16
- package/dist/ui/components/Footer.test.js.map +0 -1
- package/dist/ui/components/InputArea.test.d.ts +0 -2
- package/dist/ui/components/InputArea.test.d.ts.map +0 -1
- package/dist/ui/components/InputArea.test.js +0 -95
- package/dist/ui/components/InputArea.test.js.map +0 -1
- package/dist/ui/components/PlanOverlay.test.d.ts +0 -2
- package/dist/ui/components/PlanOverlay.test.d.ts.map +0 -1
- package/dist/ui/components/PlanOverlay.test.js +0 -24
- package/dist/ui/components/PlanOverlay.test.js.map +0 -1
- package/dist/ui/components/StreamingArea.test.d.ts +0 -2
- package/dist/ui/components/StreamingArea.test.d.ts.map +0 -1
- package/dist/ui/components/StreamingArea.test.js +0 -18
- package/dist/ui/components/StreamingArea.test.js.map +0 -1
- package/dist/ui/components/UserMessage.test.d.ts +0 -2
- package/dist/ui/components/UserMessage.test.d.ts.map +0 -1
- package/dist/ui/components/UserMessage.test.js +0 -39
- package/dist/ui/components/UserMessage.test.js.map +0 -1
- package/dist/ui/components/themed-output.test.d.ts +0 -2
- package/dist/ui/components/themed-output.test.d.ts.map +0 -1
- package/dist/ui/components/themed-output.test.js +0 -111
- package/dist/ui/components/themed-output.test.js.map +0 -1
- package/dist/ui/footer-jump-regression.test.d.ts +0 -2
- package/dist/ui/footer-jump-regression.test.d.ts.map +0 -1
- package/dist/ui/footer-jump-regression.test.js +0 -224
- package/dist/ui/footer-jump-regression.test.js.map +0 -1
- package/dist/ui/footer-status-layout.test.d.ts +0 -2
- package/dist/ui/footer-status-layout.test.d.ts.map +0 -1
- package/dist/ui/footer-status-layout.test.js +0 -71
- package/dist/ui/footer-status-layout.test.js.map +0 -1
- package/dist/ui/frame-clip-regression.test.d.ts +0 -2
- package/dist/ui/frame-clip-regression.test.d.ts.map +0 -1
- package/dist/ui/frame-clip-regression.test.js +0 -215
- package/dist/ui/frame-clip-regression.test.js.map +0 -1
- package/dist/ui/goal-events.test.d.ts +0 -2
- package/dist/ui/goal-events.test.d.ts.map +0 -1
- package/dist/ui/goal-events.test.js +0 -350
- package/dist/ui/goal-events.test.js.map +0 -1
- package/dist/ui/goal-lifecycle-orchestration.test.d.ts +0 -2
- package/dist/ui/goal-lifecycle-orchestration.test.d.ts.map +0 -1
- package/dist/ui/goal-lifecycle-orchestration.test.js +0 -512
- package/dist/ui/goal-lifecycle-orchestration.test.js.map +0 -1
- package/dist/ui/goal-overlay.test.d.ts +0 -2
- package/dist/ui/goal-overlay.test.d.ts.map +0 -1
- package/dist/ui/goal-overlay.test.js +0 -384
- package/dist/ui/goal-overlay.test.js.map +0 -1
- package/dist/ui/goal-status-bar.test.d.ts +0 -2
- package/dist/ui/goal-status-bar.test.d.ts.map +0 -1
- package/dist/ui/goal-status-bar.test.js +0 -172
- package/dist/ui/goal-status-bar.test.js.map +0 -1
- package/dist/ui/hooks/stall-retry-duplicate.test.d.ts +0 -2
- package/dist/ui/hooks/stall-retry-duplicate.test.d.ts.map +0 -1
- package/dist/ui/hooks/stall-retry-duplicate.test.js +0 -94
- package/dist/ui/hooks/stall-retry-duplicate.test.js.map +0 -1
- package/dist/ui/hooks/useAgentLoop.test.d.ts +0 -2
- package/dist/ui/hooks/useAgentLoop.test.d.ts.map +0 -1
- package/dist/ui/hooks/useAgentLoop.test.js +0 -66
- package/dist/ui/hooks/useAgentLoop.test.js.map +0 -1
- package/dist/ui/hooks/useContextCompaction.test.d.ts +0 -2
- package/dist/ui/hooks/useContextCompaction.test.d.ts.map +0 -1
- package/dist/ui/hooks/useContextCompaction.test.js +0 -135
- package/dist/ui/hooks/useContextCompaction.test.js.map +0 -1
- package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts +0 -2
- package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts.map +0 -1
- package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js +0 -81
- package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js.map +0 -1
- package/dist/ui/hooks/useTranscriptHistory.test.d.ts +0 -2
- package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +0 -1
- package/dist/ui/hooks/useTranscriptHistory.test.js +0 -61
- package/dist/ui/hooks/useTranscriptHistory.test.js.map +0 -1
- package/dist/ui/hooks/useTranscriptScroll.test.d.ts +0 -2
- package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +0 -1
- package/dist/ui/hooks/useTranscriptScroll.test.js +0 -119
- package/dist/ui/hooks/useTranscriptScroll.test.js.map +0 -1
- package/dist/ui/live-area-clamp.test.d.ts +0 -2
- package/dist/ui/live-area-clamp.test.d.ts.map +0 -1
- package/dist/ui/live-area-clamp.test.js +0 -125
- package/dist/ui/live-area-clamp.test.js.map +0 -1
- package/dist/ui/live-area-height.test.d.ts +0 -2
- package/dist/ui/live-area-height.test.d.ts.map +0 -1
- package/dist/ui/live-area-height.test.js +0 -76
- package/dist/ui/live-area-height.test.js.map +0 -1
- package/dist/ui/live-frame-height.test.d.ts +0 -2
- package/dist/ui/live-frame-height.test.d.ts.map +0 -1
- package/dist/ui/live-frame-height.test.js +0 -116
- package/dist/ui/live-frame-height.test.js.map +0 -1
- package/dist/ui/live-item-flush.test.d.ts +0 -2
- package/dist/ui/live-item-flush.test.d.ts.map +0 -1
- package/dist/ui/live-item-flush.test.js +0 -437
- package/dist/ui/live-item-flush.test.js.map +0 -1
- package/dist/ui/long-prompt-regression-harness.test.d.ts +0 -2
- package/dist/ui/long-prompt-regression-harness.test.d.ts.map +0 -1
- package/dist/ui/long-prompt-regression-harness.test.js +0 -195
- package/dist/ui/long-prompt-regression-harness.test.js.map +0 -1
- package/dist/ui/pixel.test.d.ts +0 -2
- package/dist/ui/pixel.test.d.ts.map +0 -1
- package/dist/ui/pixel.test.js +0 -138
- package/dist/ui/pixel.test.js.map +0 -1
- package/dist/ui/plan-overlay.test.d.ts +0 -2
- package/dist/ui/plan-overlay.test.d.ts.map +0 -1
- package/dist/ui/plan-overlay.test.js +0 -305
- package/dist/ui/plan-overlay.test.js.map +0 -1
- package/dist/ui/queued-message.test.d.ts +0 -2
- package/dist/ui/queued-message.test.d.ts.map +0 -1
- package/dist/ui/queued-message.test.js +0 -172
- package/dist/ui/queued-message.test.js.map +0 -1
- package/dist/ui/render.test.d.ts +0 -2
- package/dist/ui/render.test.d.ts.map +0 -1
- package/dist/ui/render.test.js +0 -42
- package/dist/ui/render.test.js.map +0 -1
- package/dist/ui/scroll-stabilization.test.d.ts +0 -2
- package/dist/ui/scroll-stabilization.test.d.ts.map +0 -1
- package/dist/ui/scroll-stabilization.test.js +0 -64
- package/dist/ui/scroll-stabilization.test.js.map +0 -1
- package/dist/ui/slash-command-images.test.d.ts +0 -2
- package/dist/ui/slash-command-images.test.d.ts.map +0 -1
- package/dist/ui/slash-command-images.test.js +0 -110
- package/dist/ui/slash-command-images.test.js.map +0 -1
- package/dist/ui/startup-banner-order.test.d.ts +0 -2
- package/dist/ui/startup-banner-order.test.d.ts.map +0 -1
- package/dist/ui/startup-banner-order.test.js +0 -105
- package/dist/ui/startup-banner-order.test.js.map +0 -1
- package/dist/ui/stores/transcript-scroll-store.test.d.ts +0 -2
- package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +0 -1
- package/dist/ui/stores/transcript-scroll-store.test.js +0 -73
- package/dist/ui/stores/transcript-scroll-store.test.js.map +0 -1
- package/dist/ui/streaming-flush-bounce.test.d.ts +0 -2
- package/dist/ui/streaming-flush-bounce.test.d.ts.map +0 -1
- package/dist/ui/streaming-flush-bounce.test.js +0 -177
- package/dist/ui/streaming-flush-bounce.test.js.map +0 -1
- package/dist/ui/submit-boundary-gap.test.d.ts +0 -2
- package/dist/ui/submit-boundary-gap.test.d.ts.map +0 -1
- package/dist/ui/submit-boundary-gap.test.js +0 -180
- package/dist/ui/submit-boundary-gap.test.js.map +0 -1
- package/dist/ui/terminal-history-repaint.test.d.ts +0 -2
- package/dist/ui/terminal-history-repaint.test.d.ts.map +0 -1
- package/dist/ui/terminal-history-repaint.test.js +0 -73
- package/dist/ui/terminal-history-repaint.test.js.map +0 -1
- package/dist/ui/terminal-history-retry-dedup.test.d.ts +0 -2
- package/dist/ui/terminal-history-retry-dedup.test.d.ts.map +0 -1
- package/dist/ui/terminal-history-retry-dedup.test.js +0 -61
- package/dist/ui/terminal-history-retry-dedup.test.js.map +0 -1
- package/dist/ui/terminal-history.test.d.ts +0 -2
- package/dist/ui/terminal-history.test.d.ts.map +0 -1
- package/dist/ui/terminal-history.test.js +0 -557
- package/dist/ui/terminal-history.test.js.map +0 -1
- package/dist/ui/thinking-level-cycle.test.d.ts +0 -2
- package/dist/ui/thinking-level-cycle.test.d.ts.map +0 -1
- package/dist/ui/thinking-level-cycle.test.js +0 -45
- package/dist/ui/thinking-level-cycle.test.js.map +0 -1
- package/dist/ui/tool-group-summary.test.d.ts +0 -2
- package/dist/ui/tool-group-summary.test.d.ts.map +0 -1
- package/dist/ui/tool-group-summary.test.js +0 -79
- package/dist/ui/tool-group-summary.test.js.map +0 -1
- package/dist/ui/transcript/spacing.test.d.ts +0 -2
- package/dist/ui/transcript/spacing.test.d.ts.map +0 -1
- package/dist/ui/transcript/spacing.test.js +0 -191
- package/dist/ui/transcript/spacing.test.js.map +0 -1
- package/dist/ui/transcript/transcript-lines.test.d.ts +0 -2
- package/dist/ui/transcript/transcript-lines.test.d.ts.map +0 -1
- package/dist/ui/transcript/transcript-lines.test.js +0 -76
- package/dist/ui/transcript/transcript-lines.test.js.map +0 -1
- package/dist/ui/transcript-viewport-pinning.test.d.ts +0 -2
- package/dist/ui/transcript-viewport-pinning.test.d.ts.map +0 -1
- package/dist/ui/transcript-viewport-pinning.test.js +0 -148
- package/dist/ui/transcript-viewport-pinning.test.js.map +0 -1
- package/dist/ui/tui-history-parity.test.d.ts +0 -2
- package/dist/ui/tui-history-parity.test.d.ts.map +0 -1
- package/dist/ui/tui-history-parity.test.js +0 -388
- package/dist/ui/tui-history-parity.test.js.map +0 -1
- package/dist/ui/tui-simulation.test.d.ts +0 -2
- package/dist/ui/tui-simulation.test.d.ts.map +0 -1
- package/dist/ui/tui-simulation.test.js +0 -145
- package/dist/ui/tui-simulation.test.js.map +0 -1
- package/dist/ui/tui-terminal-recorder.test.d.ts +0 -2
- package/dist/ui/tui-terminal-recorder.test.d.ts.map +0 -1
- package/dist/ui/tui-terminal-recorder.test.js +0 -134
- package/dist/ui/tui-terminal-recorder.test.js.map +0 -1
- package/dist/ui/utils/assistant-stream-split.test.d.ts +0 -2
- package/dist/ui/utils/assistant-stream-split.test.d.ts.map +0 -1
- package/dist/ui/utils/assistant-stream-split.test.js +0 -74
- package/dist/ui/utils/assistant-stream-split.test.js.map +0 -1
- package/dist/ui/utils/markdown-renderer.test.d.ts +0 -2
- package/dist/ui/utils/markdown-renderer.test.d.ts.map +0 -1
- package/dist/ui/utils/markdown-renderer.test.js +0 -63
- package/dist/ui/utils/markdown-renderer.test.js.map +0 -1
- package/dist/ui/utils/table-text.test.d.ts +0 -2
- package/dist/ui/utils/table-text.test.d.ts.map +0 -1
- package/dist/ui/utils/table-text.test.js +0 -202
- package/dist/ui/utils/table-text.test.js.map +0 -1
- package/dist/ui/utils/terminal-graphics.test.d.ts +0 -2
- package/dist/ui/utils/terminal-graphics.test.d.ts.map +0 -1
- package/dist/ui/utils/terminal-graphics.test.js +0 -100
- package/dist/ui/utils/terminal-graphics.test.js.map +0 -1
- package/dist/ui/utils/terminal-input.test.d.ts +0 -2
- package/dist/ui/utils/terminal-input.test.d.ts.map +0 -1
- package/dist/ui/utils/terminal-input.test.js +0 -15
- package/dist/ui/utils/terminal-input.test.js.map +0 -1
- package/dist/utils/git.test.d.ts +0 -2
- package/dist/utils/git.test.d.ts.map +0 -1
- package/dist/utils/git.test.js +0 -36
- package/dist/utils/git.test.js.map +0 -1
- package/dist/utils/github.test.d.ts +0 -2
- package/dist/utils/github.test.d.ts.map +0 -1
- package/dist/utils/github.test.js +0 -23
- package/dist/utils/github.test.js.map +0 -1
- package/dist/utils/http-body.test.d.ts +0 -2
- package/dist/utils/http-body.test.d.ts.map +0 -1
- package/dist/utils/http-body.test.js +0 -68
- package/dist/utils/http-body.test.js.map +0 -1
- package/dist/utils/image.test.d.ts +0 -2
- package/dist/utils/image.test.d.ts.map +0 -1
- package/dist/utils/image.test.js +0 -139
- package/dist/utils/image.test.js.map +0 -1
- package/dist/utils/plan-steps.test.d.ts +0 -2
- package/dist/utils/plan-steps.test.d.ts.map +0 -1
- package/dist/utils/plan-steps.test.js +0 -159
- package/dist/utils/plan-steps.test.js.map +0 -1
- package/dist/utils/process.test.d.ts +0 -2
- package/dist/utils/process.test.d.ts.map +0 -1
- package/dist/utils/process.test.js +0 -42
- package/dist/utils/process.test.js.map +0 -1
package/dist/app-sidecar.js
CHANGED
|
@@ -18,6 +18,7 @@ import os from "node:os";
|
|
|
18
18
|
import path from "node:path";
|
|
19
19
|
import { randomUUID } from "node:crypto";
|
|
20
20
|
import { parseArgs } from "node:util";
|
|
21
|
+
import { spawn } from "node:child_process";
|
|
21
22
|
import { environmentSecrets, formatError, redactValue } from "@prestyj/ai";
|
|
22
23
|
import { runJsonMode } from "./modes/json-mode.js";
|
|
23
24
|
import { runSubagentWorkerMode } from "./modes/subagent-worker-mode.js";
|
|
@@ -37,6 +38,7 @@ import { validateNolanModelPref, effectiveNolanModel, } from "./core/nolan-model
|
|
|
37
38
|
import { normalizeAutopilotMarkersForHistory, normalizeAppMarkersForHistory, normalizeNolanTurnsForHistory, getHistoryMessageVisibility, replayMessagesInOrder, restoreUserRow, restoreAssistantTexts, resolveRestoredCommand, autopilotMarkerCopySeed, } from "./core/session-history.js";
|
|
38
39
|
import { sessionToMarkdown, defaultExportFilename, } from "./core/session-export.js";
|
|
39
40
|
import { AuthStorage } from "./core/auth-storage.js";
|
|
41
|
+
import { advancesPhase, explainPullFailure, isGgufShard, isValidHfRepoId, parseOllamaPullLine, pickGgufQuant, SHARDED_MESSAGE, toHfSearchRow, } from "./hf-pull.js";
|
|
40
42
|
import { cleanupToolOutputs } from "./tools/overflow.js";
|
|
41
43
|
import { readCappedBody } from "./utils/http-body.js";
|
|
42
44
|
import { fetchSubscriptionUsage, SubscriptionUsageError, XIAOMI_CREDITS_KEY, dualAuthProvider, oauthStorageKey, discoverLocalModels, findProbedModel, formatLocalModelId, parseLocalModelId, probeEndpoint, toModelInfo as localModelInfo, } from "@prestyj/core";
|
|
@@ -67,14 +69,16 @@ import { RADIO_STATIONS, getCurrentStation, getRadioVolume, playRadio, setRadioV
|
|
|
67
69
|
import { enrichProcessPath } from "./core/shell-path.js";
|
|
68
70
|
import { downscaleForPreview, shrinkToFit, validateVisionImage } from "./utils/image.js";
|
|
69
71
|
import { startServeMode } from "./modes/serve-mode.js";
|
|
72
|
+
import { installSteroids, probeSteroids } from "./core/steroids.js";
|
|
70
73
|
import { loadTelegramConfig, saveTelegramConfig, verifyBotToken } from "./core/telegram-config.js";
|
|
71
74
|
import { loadServers, addServer, removeServer, getServer, parseMcpAddCommand, MCPClientManager, McpOAuthStore, createElicitationBridge, } from "./core/mcp/index.js";
|
|
75
|
+
import { createAskUserBridge } from "./core/ask-user.js";
|
|
76
|
+
import { createAskUserTool } from "./tools/ask-user.js";
|
|
72
77
|
import { buildSnapshot, levelForXp, rankForLevel } from "./core/progress/ranks.js";
|
|
73
78
|
import { loadProgress, peekProgress, updateProgress } from "./core/progress/store.js";
|
|
74
79
|
import { awardPrompt, awardCommits } from "./core/progress/engine.js";
|
|
75
80
|
import { detectNewCommits, repoKey } from "./core/progress/git-xp.js";
|
|
76
81
|
import { rebuildFromSessions } from "./core/progress/rebuild.js";
|
|
77
|
-
import { captureSidecarError, flushSidecarErrors, shouldCaptureToolFailure, shouldCaptureUsagePollingError, wrapSidecarHandler, } from "./core/sidecar-error-reporter.js";
|
|
78
82
|
const AUTOMATION_PROVENANCE = {
|
|
79
83
|
source: "runtime",
|
|
80
84
|
kind: "automation",
|
|
@@ -92,6 +96,8 @@ const ALL_PROVIDERS = [
|
|
|
92
96
|
"minimax",
|
|
93
97
|
"xiaomi",
|
|
94
98
|
"deepseek",
|
|
99
|
+
// Open-community gateway, before the provider-agnostic one
|
|
100
|
+
"huggingface",
|
|
95
101
|
// Japan, then provider-agnostic gateway last
|
|
96
102
|
"sakana",
|
|
97
103
|
"openrouter",
|
|
@@ -193,7 +199,6 @@ async function persistModelSelection(settingsFile, provider, model) {
|
|
|
193
199
|
await sm.set("defaultModel", model);
|
|
194
200
|
}
|
|
195
201
|
catch (err) {
|
|
196
|
-
captureSidecarError(err, "app-sidecar.settings.persist-model");
|
|
197
202
|
log("WARN", "app-sidecar", "failed to persist model selection", { err: String(err) });
|
|
198
203
|
}
|
|
199
204
|
}
|
|
@@ -210,7 +215,6 @@ async function persistThinkingLevel(settingsFile, level) {
|
|
|
210
215
|
await sm.set("thinkingLevel", level);
|
|
211
216
|
}
|
|
212
217
|
catch (err) {
|
|
213
|
-
captureSidecarError(err, "app-sidecar.settings.persist-thinking");
|
|
214
218
|
log("WARN", "app-sidecar", "failed to persist thinking level", { err: String(err) });
|
|
215
219
|
}
|
|
216
220
|
}
|
|
@@ -516,10 +520,6 @@ async function runJsonModeIfRequested() {
|
|
|
516
520
|
allowedMcpServers,
|
|
517
521
|
promptCacheKey: values["prompt-cache-key"],
|
|
518
522
|
}).catch(async (err) => {
|
|
519
|
-
captureSidecarError(err, "app-sidecar.json-mode", {
|
|
520
|
-
provider: String(values.provider ?? "anthropic"),
|
|
521
|
-
});
|
|
522
|
-
await flushSidecarErrors();
|
|
523
523
|
process.stderr.write((err instanceof Error ? err.message : String(err)) + "\n");
|
|
524
524
|
process.exit(1);
|
|
525
525
|
});
|
|
@@ -573,7 +573,9 @@ async function main() {
|
|
|
573
573
|
const includeRuntime = phase === "idle_timeout_fired" ||
|
|
574
574
|
phase === "hard_timeout_fired" ||
|
|
575
575
|
phase === "stall_exhausted";
|
|
576
|
-
|
|
576
|
+
// A session stuck on the non-streaming fallback costs real money and real
|
|
577
|
+
// latency; it does not belong in the INFO noise floor.
|
|
578
|
+
log(phase === "non_streaming_session" ? "WARN" : "INFO", "stream", phase, {
|
|
577
579
|
...(data ?? {}),
|
|
578
580
|
...(includeRuntime
|
|
579
581
|
? {
|
|
@@ -722,9 +724,6 @@ async function main() {
|
|
|
722
724
|
}
|
|
723
725
|
catch (error) {
|
|
724
726
|
const message = error instanceof Error ? error.message : String(error);
|
|
725
|
-
if (shouldCaptureUsagePollingError(error)) {
|
|
726
|
-
captureSidecarError(error, "app-sidecar.usage.fetch", { provider });
|
|
727
|
-
}
|
|
728
727
|
let backoffMs;
|
|
729
728
|
if (error instanceof SubscriptionUsageError && error.status === 429) {
|
|
730
729
|
backoffMs = Math.min(USAGE_RATE_LIMIT_MAX_BACKOFF_MS, Math.max(USAGE_RATE_LIMIT_MIN_BACKOFF_MS, error.retryAfterMs ?? USAGE_RATE_LIMIT_FALLBACK_BACKOFF_MS));
|
|
@@ -807,7 +806,7 @@ async function main() {
|
|
|
807
806
|
return null;
|
|
808
807
|
}
|
|
809
808
|
}
|
|
810
|
-
const server = http.createServer(
|
|
809
|
+
const server = http.createServer((req, res) => {
|
|
811
810
|
const url = req.url ?? "/";
|
|
812
811
|
const method = req.method ?? "GET";
|
|
813
812
|
// Answer preflights with a bare 204 but grant NO origins — the webview
|
|
@@ -871,7 +870,6 @@ async function main() {
|
|
|
871
870
|
}
|
|
872
871
|
catch (err) {
|
|
873
872
|
const message = err instanceof Error ? err.message : String(err);
|
|
874
|
-
captureSidecarError(err, "app-sidecar.session.create");
|
|
875
873
|
log("ERROR", "app-sidecar", "session create failed", { message });
|
|
876
874
|
daemonJson(res, 500, { error: message });
|
|
877
875
|
}
|
|
@@ -908,7 +906,6 @@ async function main() {
|
|
|
908
906
|
}
|
|
909
907
|
daemonJson(res, 200, await subscriptionUsage(provider));
|
|
910
908
|
})().catch((error) => {
|
|
911
|
-
captureSidecarError(error, "app-sidecar.usage.request");
|
|
912
909
|
log("ERROR", "app-sidecar", "subscription usage request failed", {
|
|
913
910
|
message: error instanceof Error ? error.message : String(error),
|
|
914
911
|
});
|
|
@@ -924,7 +921,7 @@ async function main() {
|
|
|
924
921
|
return;
|
|
925
922
|
}
|
|
926
923
|
ctx.handle(req, res, url, method);
|
|
927
|
-
}
|
|
924
|
+
});
|
|
928
925
|
server.listen(port, host, () => {
|
|
929
926
|
const addr = server.address();
|
|
930
927
|
// The Rust shell reads this line to learn the daemon port (it already
|
|
@@ -986,11 +983,10 @@ const NOLAN_ALLOWED_TOOLS = [
|
|
|
986
983
|
"web_fetch",
|
|
987
984
|
"web_search",
|
|
988
985
|
"screenshot",
|
|
986
|
+
// Local corpus of real repos: lets Nolan verify against code that ships
|
|
987
|
+
// instead of assuming — core to how he's meant to work. Read-only.
|
|
988
|
+
"steroids",
|
|
989
989
|
];
|
|
990
|
-
/** MCP servers Nolan is allowed to use. kencode-search lets him look into real
|
|
991
|
-
* public repos / verify against actual code instead of assuming — core to how
|
|
992
|
-
* he's meant to work. Read-only research; no other MCP server is connected. */
|
|
993
|
-
const NOLAN_ALLOWED_MCP_SERVERS = ["kencode-search"];
|
|
994
990
|
/** Extract the plain text of the most recent assistant message (Nolan's reply).
|
|
995
991
|
* Strips tool-call / image blocks, returning just the prose Nolan streamed. */
|
|
996
992
|
function lastAssistantText(messages) {
|
|
@@ -1077,7 +1073,6 @@ async function createProgressManager(agentDir, broadcastAll) {
|
|
|
1077
1073
|
broadcastAll(buildSnapshot(updated), originId);
|
|
1078
1074
|
}
|
|
1079
1075
|
catch (err) {
|
|
1080
|
-
captureSidecarError(err, "app-sidecar.progress.award");
|
|
1081
1076
|
log("DEBUG", "app-sidecar", "progress award failed", {
|
|
1082
1077
|
message: err instanceof Error ? err.message : String(err),
|
|
1083
1078
|
});
|
|
@@ -1111,7 +1106,6 @@ async function createProgressManager(agentDir, broadcastAll) {
|
|
|
1111
1106
|
progressWatcher = watcher;
|
|
1112
1107
|
}
|
|
1113
1108
|
catch (err) {
|
|
1114
|
-
captureSidecarError(err, "app-sidecar.progress.watch");
|
|
1115
1109
|
log("DEBUG", "app-sidecar", "progress watch unavailable", {
|
|
1116
1110
|
message: err instanceof Error ? err.message : String(err),
|
|
1117
1111
|
});
|
|
@@ -1209,7 +1203,7 @@ async function createSession(deps, opts) {
|
|
|
1209
1203
|
// command that doesn't exist in the app.
|
|
1210
1204
|
.replaceAll(/Run \/compact to shrink history, or start a new session\./gi, "Start a new session to reset the context.")
|
|
1211
1205
|
// /model: handle each phrasing pattern
|
|
1212
|
-
.replaceAll(/switch to
|
|
1206
|
+
.replaceAll(/switch to (\S+) with \/model/gi, "switch to $1 using the model selector")
|
|
1213
1207
|
.replaceAll(/Switch with \/model\./gi, "Switch using the model selector.")
|
|
1214
1208
|
.replaceAll(/try a different model with \/model\./gi, "try a different model using the model selector.")
|
|
1215
1209
|
.replaceAll(/Use \/model to switch/gi, "Use the model selector to switch")
|
|
@@ -1245,11 +1239,6 @@ async function createSession(deps, opts) {
|
|
|
1245
1239
|
const f = formatError(err);
|
|
1246
1240
|
const message = f.message ? desktopGuidance(f.message) : undefined;
|
|
1247
1241
|
const guidance = localNetworkGuidance(f.source) ?? desktopGuidance(f.guidance);
|
|
1248
|
-
captureSidecarError(err, `app-sidecar.${logLabel.replaceAll(" ", "-")}`, {
|
|
1249
|
-
scope: type,
|
|
1250
|
-
...(f.provider ? { provider: f.provider } : {}),
|
|
1251
|
-
...(f.statusCode != null ? { status: String(f.statusCode) } : {}),
|
|
1252
|
-
});
|
|
1253
1242
|
log("ERROR", "app-sidecar", logLabel, {
|
|
1254
1243
|
headline: f.headline,
|
|
1255
1244
|
source: f.source,
|
|
@@ -1288,6 +1277,16 @@ async function createSession(deps, opts) {
|
|
|
1288
1277
|
server: prompt.server,
|
|
1289
1278
|
}),
|
|
1290
1279
|
});
|
|
1280
|
+
// ── ask_user bridge ────────────────────────────────────────
|
|
1281
|
+
// The `ask_user` tool parks the turn on a human answer. Same shape as the
|
|
1282
|
+
// MCP bridge above: broadcast over SSE, resolved when the webview POSTs
|
|
1283
|
+
// /ask/:id. Registered ONLY here — a TUI/headless/subagent run has nobody to
|
|
1284
|
+
// answer, so the tool is absent there rather than hanging on a dead channel.
|
|
1285
|
+
const asks = createAskUserBridge({
|
|
1286
|
+
broadcast: (prompt) => broadcast("ask_user", prompt),
|
|
1287
|
+
onTimeout: (prompt) => log("WARN", "app-sidecar", "ask_user timed out", { id: prompt.id }),
|
|
1288
|
+
});
|
|
1289
|
+
const askUserTool = createAskUserTool(asks.park);
|
|
1291
1290
|
// The session file path to resume (passed by the daemon's POST /session);
|
|
1292
1291
|
// empty/unset starts a fresh session.
|
|
1293
1292
|
const resumeSessionPath = opts.sessionPath;
|
|
@@ -1313,13 +1312,16 @@ async function createSession(deps, opts) {
|
|
|
1313
1312
|
session = createChatAgent(chatAgent, {
|
|
1314
1313
|
...baseSessionOptions,
|
|
1315
1314
|
sessionsDir: paths.sessionsDir,
|
|
1316
|
-
additionalTools: [
|
|
1315
|
+
additionalTools: [
|
|
1316
|
+
askUserTool,
|
|
1317
|
+
...buildMemoryTools(memoryStore),
|
|
1318
|
+
...buildJiwaTools(jiwaStore),
|
|
1319
|
+
],
|
|
1317
1320
|
getSystemPromptTail: () => `${memoryStore.renderForPrompt()}\n\n${jiwaStore.renderForPrompt()}`,
|
|
1318
1321
|
onAgentChange: async (nextAgent) => {
|
|
1319
1322
|
chatAgent = nextAgent;
|
|
1320
1323
|
broadcast("chat_agent_change", { chatAgent: nextAgent });
|
|
1321
1324
|
await session.persistAppMarker("agent_handoff", { chatAgent: nextAgent }).catch((error) => {
|
|
1322
|
-
captureSidecarError(error, "app-sidecar.chat-agent.persist-handoff");
|
|
1323
1325
|
log("WARN", "app-sidecar", "agent handoff marker persist failed", {
|
|
1324
1326
|
message: error instanceof Error ? error.message : String(error),
|
|
1325
1327
|
});
|
|
@@ -1330,6 +1332,7 @@ async function createSession(deps, opts) {
|
|
|
1330
1332
|
else {
|
|
1331
1333
|
session = new AgentSession({
|
|
1332
1334
|
...baseSessionOptions,
|
|
1335
|
+
additionalTools: [askUserTool],
|
|
1333
1336
|
// Plan mode belongs only to the coding agent.
|
|
1334
1337
|
onEnterPlan: async (reason) => {
|
|
1335
1338
|
// Unattended task runs cannot approve plans; implement directly instead.
|
|
@@ -1372,8 +1375,8 @@ async function createSession(deps, opts) {
|
|
|
1372
1375
|
}
|
|
1373
1376
|
}
|
|
1374
1377
|
log("INFO", "app-sidecar", "session ready", { provider, model, mode, chatAgent, cwd });
|
|
1375
|
-
// ── Local models (Ollama
|
|
1376
|
-
// Probing
|
|
1378
|
+
// ── Local models (Ollama, plus user-added custom endpoints) ──
|
|
1379
|
+
// Probing endpoints must never delay readiness, so this runs in the
|
|
1377
1380
|
// background (same shape as backgroundMcpConnect) and pushes a models_change
|
|
1378
1381
|
// frame when it lands.
|
|
1379
1382
|
let localProbes = [];
|
|
@@ -1416,6 +1419,204 @@ async function createSession(deps, opts) {
|
|
|
1416
1419
|
})),
|
|
1417
1420
|
};
|
|
1418
1421
|
}
|
|
1422
|
+
let hfPull = null;
|
|
1423
|
+
const hfPullPayload = (s) => ({
|
|
1424
|
+
repo: s.repo,
|
|
1425
|
+
model: s.model,
|
|
1426
|
+
tag: s.tag,
|
|
1427
|
+
file: s.file,
|
|
1428
|
+
sizeBytes: s.sizeBytes,
|
|
1429
|
+
phase: s.phase,
|
|
1430
|
+
percent: s.percent,
|
|
1431
|
+
...(s.detail ? { detail: s.detail } : {}),
|
|
1432
|
+
...(s.error ? { error: s.error } : {}),
|
|
1433
|
+
});
|
|
1434
|
+
/** Stored HF token, if the user connected the huggingface provider. */
|
|
1435
|
+
async function hfToken() {
|
|
1436
|
+
try {
|
|
1437
|
+
const auth = new AuthStorage(paths.authFile);
|
|
1438
|
+
const creds = await auth.resolveCredentials("huggingface");
|
|
1439
|
+
return creds.accessToken || undefined;
|
|
1440
|
+
}
|
|
1441
|
+
catch {
|
|
1442
|
+
return undefined;
|
|
1443
|
+
}
|
|
1444
|
+
}
|
|
1445
|
+
async function hfHubJson(pathname) {
|
|
1446
|
+
const token = await hfToken();
|
|
1447
|
+
const res = await fetch(`https://huggingface.co${pathname}`, {
|
|
1448
|
+
headers: token ? { authorization: `Bearer ${token}` } : {},
|
|
1449
|
+
signal: AbortSignal.timeout(10_000),
|
|
1450
|
+
});
|
|
1451
|
+
if (!res.ok)
|
|
1452
|
+
throw new Error(`Hugging Face responded ${res.status}`);
|
|
1453
|
+
return res.json();
|
|
1454
|
+
}
|
|
1455
|
+
/** Search the Hub for GGUF repos (what Ollama can pull). */
|
|
1456
|
+
async function hfSearch(query) {
|
|
1457
|
+
// `filter=gguf` (the tag the Hub applies to repos that actually contain
|
|
1458
|
+
// GGUF files) — `library=gguf` also matches safetensors-only base repos,
|
|
1459
|
+
// which then fail at pull time. `expand[]=gguf` confirms per row.
|
|
1460
|
+
const params = new URLSearchParams({
|
|
1461
|
+
search: query,
|
|
1462
|
+
filter: "gguf",
|
|
1463
|
+
sort: "downloads",
|
|
1464
|
+
direction: "-1",
|
|
1465
|
+
limit: "12",
|
|
1466
|
+
});
|
|
1467
|
+
for (const field of ["gguf", "downloads", "likes", "lastModified"]) {
|
|
1468
|
+
params.append("expand[]", field);
|
|
1469
|
+
}
|
|
1470
|
+
const data = (await hfHubJson(`/api/models?${params.toString()}`));
|
|
1471
|
+
return (Array.isArray(data) ? data : [])
|
|
1472
|
+
.map(toHfSearchRow)
|
|
1473
|
+
.filter((r) => r !== null);
|
|
1474
|
+
}
|
|
1475
|
+
/**
|
|
1476
|
+
* Start `ollama pull hf.co/<repo>[:quant]`. Resolves once the child is
|
|
1477
|
+
* spawned; progress streams as `hf_pull` events. The chosen quant comes from
|
|
1478
|
+
* the repo's real file list — the client only ever sends a repo id, so there
|
|
1479
|
+
* is no injection surface into argv.
|
|
1480
|
+
*/
|
|
1481
|
+
async function startHfPull(repo) {
|
|
1482
|
+
if (hfPull?.child) {
|
|
1483
|
+
throw Object.assign(new Error("A download is already running."), { status: 409 });
|
|
1484
|
+
}
|
|
1485
|
+
// `recursive=true`: many repos (unsloth, mradermacher) keep quants in
|
|
1486
|
+
// per-quant subfolders, and a flat listing reports them as GGUF-less.
|
|
1487
|
+
const tree = (await hfHubJson(`/api/models/${repo}/tree/main?recursive=true`));
|
|
1488
|
+
const files = (Array.isArray(tree) ? tree : []).flatMap((entry) => {
|
|
1489
|
+
const e = entry;
|
|
1490
|
+
// `type` guards a directory entry (size 0) from beating real files in the
|
|
1491
|
+
// size fallback; the Hub marks folders as "directory".
|
|
1492
|
+
if (e.type !== undefined && e.type !== "file")
|
|
1493
|
+
return [];
|
|
1494
|
+
if (typeof e.path !== "string" || !e.path.toLowerCase().endsWith(".gguf"))
|
|
1495
|
+
return [];
|
|
1496
|
+
const size = Number(e.lfs?.size ?? e.size ?? 0);
|
|
1497
|
+
return [{ path: e.path, sizeBytes: Number.isFinite(size) ? size : 0 }];
|
|
1498
|
+
});
|
|
1499
|
+
const choice = pickGgufQuant(files);
|
|
1500
|
+
if (!choice) {
|
|
1501
|
+
const sharded = files.some((f) => isGgufShard(f.path));
|
|
1502
|
+
throw Object.assign(new Error(sharded ? SHARDED_MESSAGE : "That repo has no GGUF file for Ollama to pull."), { status: 400 });
|
|
1503
|
+
}
|
|
1504
|
+
const model = `hf.co/${repo}${choice.tag ? `:${choice.tag}` : ""}`;
|
|
1505
|
+
const token = await hfToken();
|
|
1506
|
+
const state = {
|
|
1507
|
+
repo,
|
|
1508
|
+
model,
|
|
1509
|
+
tag: choice.tag,
|
|
1510
|
+
file: choice.file.path,
|
|
1511
|
+
sizeBytes: choice.file.sizeBytes,
|
|
1512
|
+
phase: "preparing",
|
|
1513
|
+
percent: 0,
|
|
1514
|
+
child: null,
|
|
1515
|
+
};
|
|
1516
|
+
hfPull = state;
|
|
1517
|
+
broadcast("hf_pull", hfPullPayload(state));
|
|
1518
|
+
// ollama prints progress to stderr (stdout on some builds); parse both.
|
|
1519
|
+
let stderrTail = "";
|
|
1520
|
+
let lastBroadcast = "";
|
|
1521
|
+
const feed = (chunk) => {
|
|
1522
|
+
// Once the pull is terminal (success, failure, or user cancel) stop
|
|
1523
|
+
// parsing: a killed ollama dumps a burst of stderr that would otherwise
|
|
1524
|
+
// spam the modal with garbage frames after the outcome is already shown.
|
|
1525
|
+
if (state.phase === "success" || state.phase === "error")
|
|
1526
|
+
return;
|
|
1527
|
+
for (const line of chunk.split(/\r\n|\r|\n/)) {
|
|
1528
|
+
const parsed = parseOllamaPullLine(line);
|
|
1529
|
+
if (!parsed)
|
|
1530
|
+
continue;
|
|
1531
|
+
// A redrawn frame repeats `pulling manifest` next to live progress; it
|
|
1532
|
+
// must not drag the modal back to "Contacting Ollama…".
|
|
1533
|
+
if (!advancesPhase(state.phase, parsed.phase))
|
|
1534
|
+
continue;
|
|
1535
|
+
if (parsed.phase !== "error") {
|
|
1536
|
+
state.phase = parsed.phase;
|
|
1537
|
+
if (parsed.percent !== undefined)
|
|
1538
|
+
state.percent = parsed.percent;
|
|
1539
|
+
state.detail = parsed.detail;
|
|
1540
|
+
}
|
|
1541
|
+
// ollama redraws its TUI frame several times a second, mostly with
|
|
1542
|
+
// identical numbers. Broadcasting each one re-rendered the modal for no
|
|
1543
|
+
// visible change; only a frame that actually reads differently ships.
|
|
1544
|
+
const next = JSON.stringify(hfPullPayload(state));
|
|
1545
|
+
if (next === lastBroadcast)
|
|
1546
|
+
continue;
|
|
1547
|
+
lastBroadcast = next;
|
|
1548
|
+
broadcast("hf_pull", hfPullPayload(state));
|
|
1549
|
+
}
|
|
1550
|
+
};
|
|
1551
|
+
try {
|
|
1552
|
+
const child = spawn("ollama", ["pull", model], {
|
|
1553
|
+
env: { ...process.env, ...(token ? { HF_TOKEN: token } : {}) },
|
|
1554
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
1555
|
+
});
|
|
1556
|
+
state.child = child;
|
|
1557
|
+
child.stdout?.setEncoding("utf8");
|
|
1558
|
+
child.stderr?.setEncoding("utf8");
|
|
1559
|
+
child.stdout?.on("data", feed);
|
|
1560
|
+
child.stderr?.on("data", (d) => {
|
|
1561
|
+
stderrTail = (stderrTail + d).slice(-2000);
|
|
1562
|
+
feed(d);
|
|
1563
|
+
});
|
|
1564
|
+
child.on("error", (err) => {
|
|
1565
|
+
state.child = null;
|
|
1566
|
+
state.phase = "error";
|
|
1567
|
+
state.error =
|
|
1568
|
+
err.code === "ENOENT"
|
|
1569
|
+
? "Ollama isn't installed (or isn't on PATH). Install it from ollama.com, then retry."
|
|
1570
|
+
: `Could not start Ollama: ${err.message}`;
|
|
1571
|
+
broadcast("hf_pull", hfPullPayload(state));
|
|
1572
|
+
});
|
|
1573
|
+
child.on("close", (code) => {
|
|
1574
|
+
state.child = null;
|
|
1575
|
+
if (state.phase === "success" || state.phase === "error")
|
|
1576
|
+
return; // cancelled
|
|
1577
|
+
if (code === 0) {
|
|
1578
|
+
state.phase = "success";
|
|
1579
|
+
state.percent = 100;
|
|
1580
|
+
state.detail = undefined;
|
|
1581
|
+
broadcast("hf_pull", hfPullPayload(state));
|
|
1582
|
+
// The new model only exists to the app once Ollama lists it. Ollama's
|
|
1583
|
+
// library is machine-wide, like the shared auth file, so every window
|
|
1584
|
+
// gets the refresh — not just the one that ran the download.
|
|
1585
|
+
void scanLocalModels(true)
|
|
1586
|
+
.then(() => broadcastAll("models_change", { local: localStatePayload() }))
|
|
1587
|
+
.catch(() => undefined);
|
|
1588
|
+
}
|
|
1589
|
+
else {
|
|
1590
|
+
state.phase = "error";
|
|
1591
|
+
state.error = state.error ?? explainPullFailure(stderrTail);
|
|
1592
|
+
broadcast("hf_pull", hfPullPayload(state));
|
|
1593
|
+
}
|
|
1594
|
+
});
|
|
1595
|
+
}
|
|
1596
|
+
catch (err) {
|
|
1597
|
+
state.child = null;
|
|
1598
|
+
state.phase = "error";
|
|
1599
|
+
state.error = `Could not start Ollama: ${err instanceof Error ? err.message : String(err)}`;
|
|
1600
|
+
broadcast("hf_pull", hfPullPayload(state));
|
|
1601
|
+
}
|
|
1602
|
+
return hfPullPayload(state);
|
|
1603
|
+
}
|
|
1604
|
+
function cancelHfPull() {
|
|
1605
|
+
const child = hfPull?.child;
|
|
1606
|
+
if (!child)
|
|
1607
|
+
return false;
|
|
1608
|
+
// Terminal state FIRST, then the kill: the child's death rattle must not
|
|
1609
|
+
// overwrite the clean "cancelled" outcome with raw stderr.
|
|
1610
|
+
if (hfPull) {
|
|
1611
|
+
hfPull.phase = "error";
|
|
1612
|
+
hfPull.error = "Download cancelled.";
|
|
1613
|
+
hfPull.detail = undefined;
|
|
1614
|
+
hfPull.child = null;
|
|
1615
|
+
broadcast("hf_pull", hfPullPayload(hfPull));
|
|
1616
|
+
}
|
|
1617
|
+
child.kill("SIGTERM");
|
|
1618
|
+
return true;
|
|
1619
|
+
}
|
|
1419
1620
|
/**
|
|
1420
1621
|
* Why `modelId` can't be selected right now, or `undefined` when it can.
|
|
1421
1622
|
* Two real footguns get a clear answer instead of a mid-run provider error:
|
|
@@ -1577,7 +1778,6 @@ async function createSession(deps, opts) {
|
|
|
1577
1778
|
.catch(() => false)
|
|
1578
1779
|
.then(() => syncApprovedPlanProgress(generation))
|
|
1579
1780
|
.catch((error) => {
|
|
1580
|
-
captureSidecarError(error, "app-sidecar.plan.refresh-progress");
|
|
1581
1781
|
log("WARN", "app-sidecar", "plan progress refresh failed", {
|
|
1582
1782
|
message: error instanceof Error ? error.message : String(error),
|
|
1583
1783
|
});
|
|
@@ -1636,11 +1836,6 @@ async function createSession(deps, opts) {
|
|
|
1636
1836
|
session.eventBus.on("tool_call_end", (d) => {
|
|
1637
1837
|
const name = toolCallNames.get(d.toolCallId) ?? "unknown";
|
|
1638
1838
|
toolCallNames.delete(d.toolCallId);
|
|
1639
|
-
if (d.isError && shouldCaptureToolFailure(name, d.result)) {
|
|
1640
|
-
// Expected model-correctable validation failures stay in the local log and
|
|
1641
|
-
// conversation. Unexpected failures are reported without private result data.
|
|
1642
|
-
captureSidecarError(new Error(`Tool ${name} failed`), `tool.${name}`, { tool: name });
|
|
1643
|
-
}
|
|
1644
1839
|
log(d.isError ? "ERROR" : "INFO", "tool", `Tool call ended: ${name}`, {
|
|
1645
1840
|
id: d.toolCallId,
|
|
1646
1841
|
durationMs: String(d.durationMs),
|
|
@@ -1854,7 +2049,6 @@ async function createSession(deps, opts) {
|
|
|
1854
2049
|
cwd,
|
|
1855
2050
|
systemPrompt: await buildNolanSystemPrompt(cwd),
|
|
1856
2051
|
allowedTools: NOLAN_ALLOWED_TOOLS,
|
|
1857
|
-
allowedMcpServers: NOLAN_ALLOWED_MCP_SERVERS,
|
|
1858
2052
|
transient: true,
|
|
1859
2053
|
signal: nolanAbort.signal,
|
|
1860
2054
|
// Nolan belongs to this window, so route MCP elicitation prompts there.
|
|
@@ -1926,7 +2120,6 @@ async function createSession(deps, opts) {
|
|
|
1926
2120
|
cwd,
|
|
1927
2121
|
systemPrompt: await buildNolanAutopilotSystemPrompt(cwd),
|
|
1928
2122
|
allowedTools: NOLAN_ALLOWED_TOOLS,
|
|
1929
|
-
allowedMcpServers: NOLAN_ALLOWED_MCP_SERVERS,
|
|
1930
2123
|
transient: true,
|
|
1931
2124
|
signal: nolanAutoAbort.signal,
|
|
1932
2125
|
// Route this window's MCP elicitation prompts through the shared bridge.
|
|
@@ -1953,8 +2146,9 @@ async function createSession(deps, opts) {
|
|
|
1953
2146
|
abort.abort();
|
|
1954
2147
|
// An MCP tool call parked on user input is not cancelled by the signal —
|
|
1955
2148
|
// the promise lives in the bridge. Release it, or the aborted turn's tool
|
|
1956
|
-
// call never returns.
|
|
2149
|
+
// call never returns. Same for a question parked on the user.
|
|
1957
2150
|
elicitations.cancelAll();
|
|
2151
|
+
asks.cancelAll();
|
|
1958
2152
|
// Stop a run-all sweep and every async child through AgentSession's signal.
|
|
1959
2153
|
taskRunAll = false;
|
|
1960
2154
|
autopilotCancelled = true;
|
|
@@ -2040,7 +2234,6 @@ async function createSession(deps, opts) {
|
|
|
2040
2234
|
catch (error) {
|
|
2041
2235
|
// Keep tracking when prompt cleanup fails; hiding the widget here
|
|
2042
2236
|
// would claim completion while the approved-plan contract remained.
|
|
2043
|
-
captureSidecarError(error, "app-sidecar.plan.cleanup");
|
|
2044
2237
|
log("WARN", "app-sidecar", "completed plan cleanup failed", {
|
|
2045
2238
|
message: error instanceof Error ? error.message : String(error),
|
|
2046
2239
|
});
|
|
@@ -2600,7 +2793,6 @@ async function createSession(deps, opts) {
|
|
|
2600
2793
|
.snapshot()
|
|
2601
2794
|
.then((snapshot) => json(res, 200, snapshot))
|
|
2602
2795
|
.catch((error) => {
|
|
2603
|
-
captureSidecarError(error, "app-sidecar.memory.snapshot");
|
|
2604
2796
|
json(res, 500, { error: error instanceof Error ? error.message : String(error) });
|
|
2605
2797
|
});
|
|
2606
2798
|
return;
|
|
@@ -2616,7 +2808,6 @@ async function createSession(deps, opts) {
|
|
|
2616
2808
|
.then(() => memoryStore.snapshot())
|
|
2617
2809
|
.then((snapshot) => json(res, 200, snapshot))
|
|
2618
2810
|
.catch((error) => {
|
|
2619
|
-
captureSidecarError(error, "app-sidecar.memory.forget");
|
|
2620
2811
|
json(res, 500, { error: error instanceof Error ? error.message : String(error) });
|
|
2621
2812
|
});
|
|
2622
2813
|
return;
|
|
@@ -2626,7 +2817,6 @@ async function createSession(deps, opts) {
|
|
|
2626
2817
|
.snapshot()
|
|
2627
2818
|
.then((snapshot) => json(res, 200, snapshot))
|
|
2628
2819
|
.catch((error) => {
|
|
2629
|
-
captureSidecarError(error, "app-sidecar.jiwa.snapshot");
|
|
2630
2820
|
json(res, 500, { error: error instanceof Error ? error.message : String(error) });
|
|
2631
2821
|
});
|
|
2632
2822
|
return;
|
|
@@ -2642,7 +2832,6 @@ async function createSession(deps, opts) {
|
|
|
2642
2832
|
.then(() => jiwaStore.snapshot())
|
|
2643
2833
|
.then((snapshot) => json(res, 200, snapshot))
|
|
2644
2834
|
.catch((error) => {
|
|
2645
|
-
captureSidecarError(error, "app-sidecar.jiwa.forget");
|
|
2646
2835
|
json(res, 500, { error: error instanceof Error ? error.message : String(error) });
|
|
2647
2836
|
});
|
|
2648
2837
|
return;
|
|
@@ -2684,7 +2873,6 @@ async function createSession(deps, opts) {
|
|
|
2684
2873
|
void listInstalledPlugins(paths.extensionsDir)
|
|
2685
2874
|
.then((plugins) => json(res, 200, { plugins }))
|
|
2686
2875
|
.catch((error) => {
|
|
2687
|
-
captureSidecarError(error, "app-sidecar.plugins.list");
|
|
2688
2876
|
json(res, 500, { error: error instanceof Error ? error.message : String(error) });
|
|
2689
2877
|
});
|
|
2690
2878
|
return;
|
|
@@ -2703,7 +2891,6 @@ async function createSession(deps, opts) {
|
|
|
2703
2891
|
json(res, 200, { plugin, restartRequired: true });
|
|
2704
2892
|
}
|
|
2705
2893
|
catch (error) {
|
|
2706
|
-
captureSidecarError(error, "app-sidecar.plugins.install");
|
|
2707
2894
|
json(res, 400, { error: error instanceof Error ? error.message : String(error) });
|
|
2708
2895
|
}
|
|
2709
2896
|
});
|
|
@@ -2714,7 +2901,6 @@ async function createSession(deps, opts) {
|
|
|
2714
2901
|
void removePlugin(pluginId, paths.extensionsDir)
|
|
2715
2902
|
.then(() => json(res, 200, { removed: pluginId, restartRequired: true }))
|
|
2716
2903
|
.catch((error) => {
|
|
2717
|
-
captureSidecarError(error, "app-sidecar.plugins.remove");
|
|
2718
2904
|
json(res, 400, { error: error instanceof Error ? error.message : String(error) });
|
|
2719
2905
|
});
|
|
2720
2906
|
return;
|
|
@@ -2799,7 +2985,6 @@ async function createSession(deps, opts) {
|
|
|
2799
2985
|
json(res, 200, { path: dir });
|
|
2800
2986
|
}
|
|
2801
2987
|
catch (err) {
|
|
2802
|
-
captureSidecarError(err, "app-sidecar.project.create");
|
|
2803
2988
|
json(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
2804
2989
|
}
|
|
2805
2990
|
});
|
|
@@ -2838,7 +3023,6 @@ async function createSession(deps, opts) {
|
|
|
2838
3023
|
json(res, 200, { hidden: Array.from(current) });
|
|
2839
3024
|
}
|
|
2840
3025
|
catch (err) {
|
|
2841
|
-
captureSidecarError(err, "app-sidecar.projects.hidden");
|
|
2842
3026
|
json(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
2843
3027
|
}
|
|
2844
3028
|
});
|
|
@@ -2854,7 +3038,6 @@ async function createSession(deps, opts) {
|
|
|
2854
3038
|
}))
|
|
2855
3039
|
.then((projects) => json(res, 200, { projects }))
|
|
2856
3040
|
.catch((err) => {
|
|
2857
|
-
captureSidecarError(err, "app-sidecar.projects.discover");
|
|
2858
3041
|
log("ERROR", "app-sidecar", "discoverProjects failed", {
|
|
2859
3042
|
message: err instanceof Error ? err.message : String(err),
|
|
2860
3043
|
});
|
|
@@ -2873,10 +3056,7 @@ async function createSession(deps, opts) {
|
|
|
2873
3056
|
// agent or request the combined, recency-sorted "all" listing.
|
|
2874
3057
|
void listSidecarSessions(target, requestedAgent, paths.sessionsDir)
|
|
2875
3058
|
.then((sessions) => json(res, 200, { sessions }))
|
|
2876
|
-
.catch((
|
|
2877
|
-
captureSidecarError(error, "app-sidecar.sessions.list");
|
|
2878
|
-
json(res, 200, { sessions: [] });
|
|
2879
|
-
});
|
|
3059
|
+
.catch(() => json(res, 200, { sessions: [] }));
|
|
2880
3060
|
return;
|
|
2881
3061
|
}
|
|
2882
3062
|
if (method === "GET" && url.startsWith("/files")) {
|
|
@@ -2884,7 +3064,6 @@ async function createSession(deps, opts) {
|
|
|
2884
3064
|
void searchProjectFiles(cwd, q)
|
|
2885
3065
|
.then((files) => json(res, 200, { files }))
|
|
2886
3066
|
.catch((err) => {
|
|
2887
|
-
captureSidecarError(err, "app-sidecar.files.search");
|
|
2888
3067
|
log("ERROR", "app-sidecar", "searchProjectFiles failed", {
|
|
2889
3068
|
message: err instanceof Error ? err.message : String(err),
|
|
2890
3069
|
});
|
|
@@ -3328,6 +3507,13 @@ async function createSession(deps, opts) {
|
|
|
3328
3507
|
json(res, 400, { error: "empty prompt" });
|
|
3329
3508
|
return;
|
|
3330
3509
|
}
|
|
3510
|
+
// A typed prompt supersedes any question parked on the user: they
|
|
3511
|
+
// answered with a message of their own. Release the blocked tool call
|
|
3512
|
+
// NOW — otherwise it waits out its ten-minute timeout while this very
|
|
3513
|
+
// message sits behind it as steering that only drains once the tool
|
|
3514
|
+
// returns, so the turn looks frozen. The webview closes the band on
|
|
3515
|
+
// send; a racing /ask POST just 409s.
|
|
3516
|
+
asks.cancelAll({ action: "cancel", superseded: true });
|
|
3331
3517
|
if (runLifecycle.running &&
|
|
3332
3518
|
runLifecycle.isCancellationRequested(runLifecycle.generation)) {
|
|
3333
3519
|
json(res, 409, {
|
|
@@ -3572,7 +3758,6 @@ async function createSession(deps, opts) {
|
|
|
3572
3758
|
}
|
|
3573
3759
|
catch (err) {
|
|
3574
3760
|
const message = err instanceof Error ? err.message : String(err);
|
|
3575
|
-
captureSidecarError(err, "app-sidecar.prompt-enhancer");
|
|
3576
3761
|
log("ERROR", "app-sidecar", "enhance failed", { message });
|
|
3577
3762
|
json(res, 500, { error: message });
|
|
3578
3763
|
}
|
|
@@ -3912,6 +4097,14 @@ async function createSession(deps, opts) {
|
|
|
3912
4097
|
json(res, 400, { error: "invalid JSON body" });
|
|
3913
4098
|
return;
|
|
3914
4099
|
}
|
|
4100
|
+
// Same lock as POST /model, for the same reason: this retargets Nolan's
|
|
4101
|
+
// chat session AND the autopilot reviewer, and `switchModel` on a
|
|
4102
|
+
// session mid-turn races the stream it is already consuming. The
|
|
4103
|
+
// footer picker is disabled to match; this is the enforcement.
|
|
4104
|
+
if (running || nolanRunning || autopilotReviewing) {
|
|
4105
|
+
json(res, 409, { error: "cannot switch Nolan's model while running" });
|
|
4106
|
+
return;
|
|
4107
|
+
}
|
|
3915
4108
|
if (modelId === null) {
|
|
3916
4109
|
// Clear the pin → follow EZ Coder again, syncing both sessions back.
|
|
3917
4110
|
nolanModelOverride = null;
|
|
@@ -4028,6 +4221,14 @@ async function createSession(deps, opts) {
|
|
|
4028
4221
|
return;
|
|
4029
4222
|
}
|
|
4030
4223
|
if (method === "POST" && url === "/thinking") {
|
|
4224
|
+
// The in-flight request already carries its reasoning config, so a
|
|
4225
|
+
// mid-run cycle cannot affect the turn the user is watching — it just
|
|
4226
|
+
// persists a level the footer then reports for a run that never used it.
|
|
4227
|
+
// Locked like POST /model; the footer button is disabled to match.
|
|
4228
|
+
if (running) {
|
|
4229
|
+
json(res, 409, { error: "cannot change reasoning level while running" });
|
|
4230
|
+
return;
|
|
4231
|
+
}
|
|
4031
4232
|
const st = session.getState();
|
|
4032
4233
|
const next = getNextThinkingLevel(st.provider, st.model, session.getThinkingLevel());
|
|
4033
4234
|
session.setThinkingLevel(next);
|
|
@@ -4085,7 +4286,6 @@ async function createSession(deps, opts) {
|
|
|
4085
4286
|
drained,
|
|
4086
4287
|
});
|
|
4087
4288
|
})().catch((error) => {
|
|
4088
|
-
captureSidecarError(error, "app-sidecar.run.cancel");
|
|
4089
4289
|
broadcast("cancel_failed", { error: "cancel_failed", runState: runLifecycle.state });
|
|
4090
4290
|
json(res, 500, {
|
|
4091
4291
|
error: "cancel_failed",
|
|
@@ -4113,7 +4313,6 @@ async function createSession(deps, opts) {
|
|
|
4113
4313
|
json(res, 200, { ok: true });
|
|
4114
4314
|
})
|
|
4115
4315
|
.catch((err) => {
|
|
4116
|
-
captureSidecarError(err, "app-sidecar.session.new");
|
|
4117
4316
|
json(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
4118
4317
|
});
|
|
4119
4318
|
return;
|
|
@@ -4170,7 +4369,6 @@ async function createSession(deps, opts) {
|
|
|
4170
4369
|
json(res, 200, { ok: true, planTotal });
|
|
4171
4370
|
}
|
|
4172
4371
|
catch (err) {
|
|
4173
|
-
captureSidecarError(err, "app-sidecar.plan.accept");
|
|
4174
4372
|
json(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
4175
4373
|
}
|
|
4176
4374
|
});
|
|
@@ -4300,7 +4498,6 @@ async function createSession(deps, opts) {
|
|
|
4300
4498
|
broadcastAll("models_change", {});
|
|
4301
4499
|
}
|
|
4302
4500
|
catch (err) {
|
|
4303
|
-
captureSidecarError(err, "app-sidecar.auth.oauth", { provider });
|
|
4304
4501
|
// Deliberately session-scoped: this is the outcome of ONE window's
|
|
4305
4502
|
// attempt. Another window that never pressed Connect has nothing to
|
|
4306
4503
|
// show an error about, and its modal correctly still offers login.
|
|
@@ -4373,6 +4570,50 @@ async function createSession(deps, opts) {
|
|
|
4373
4570
|
});
|
|
4374
4571
|
return;
|
|
4375
4572
|
}
|
|
4573
|
+
// Answer (or dismiss) an `ask_user` question band. The turn is blocked on
|
|
4574
|
+
// this, so both paths must land: "answer" carries the picked values,
|
|
4575
|
+
// "cancel" releases the tool call with no answer.
|
|
4576
|
+
if (method === "POST" && url.startsWith("/ask/")) {
|
|
4577
|
+
const id = decodeURIComponent(url.slice("/ask/".length));
|
|
4578
|
+
void readBody(req, res).then((raw) => {
|
|
4579
|
+
if (raw === null)
|
|
4580
|
+
return;
|
|
4581
|
+
let result;
|
|
4582
|
+
try {
|
|
4583
|
+
const parsed = JSON.parse(raw);
|
|
4584
|
+
if (parsed.action !== "answer" && parsed.action !== "cancel") {
|
|
4585
|
+
json(res, 400, { error: "action must be answer or cancel" });
|
|
4586
|
+
return;
|
|
4587
|
+
}
|
|
4588
|
+
if (parsed.action === "cancel") {
|
|
4589
|
+
result = { action: "cancel" };
|
|
4590
|
+
}
|
|
4591
|
+
else {
|
|
4592
|
+
// Only strings and string arrays are answers; anything else is a
|
|
4593
|
+
// malformed client, not a value to hand the model.
|
|
4594
|
+
const answers = {};
|
|
4595
|
+
for (const [key, value] of Object.entries(parsed.answers ?? {})) {
|
|
4596
|
+
if (typeof value === "string")
|
|
4597
|
+
answers[key] = value;
|
|
4598
|
+
else if (Array.isArray(value) && value.every((v) => typeof v === "string")) {
|
|
4599
|
+
answers[key] = value;
|
|
4600
|
+
}
|
|
4601
|
+
}
|
|
4602
|
+
result = { action: "answer", answers };
|
|
4603
|
+
}
|
|
4604
|
+
}
|
|
4605
|
+
catch {
|
|
4606
|
+
json(res, 400, { error: "invalid JSON body" });
|
|
4607
|
+
return;
|
|
4608
|
+
}
|
|
4609
|
+
if (!asks.settle(id, result)) {
|
|
4610
|
+
json(res, 409, { error: "no question is awaiting an answer" });
|
|
4611
|
+
return;
|
|
4612
|
+
}
|
|
4613
|
+
json(res, 200, { ok: true });
|
|
4614
|
+
});
|
|
4615
|
+
return;
|
|
4616
|
+
}
|
|
4376
4617
|
if (method === "POST" && url === "/auth/logout") {
|
|
4377
4618
|
void readBody(req, res).then(async (raw) => {
|
|
4378
4619
|
if (raw === null)
|
|
@@ -4489,6 +4730,80 @@ async function createSession(deps, opts) {
|
|
|
4489
4730
|
})();
|
|
4490
4731
|
return;
|
|
4491
4732
|
}
|
|
4733
|
+
// ── Hugging Face search & pull (the "Add from Hugging Face" modal) ──
|
|
4734
|
+
if (method === "GET" && url === "/hf/pull") {
|
|
4735
|
+
json(res, 200, hfPull ? { active: hfPullPayload(hfPull) } : { active: null });
|
|
4736
|
+
return;
|
|
4737
|
+
}
|
|
4738
|
+
if (method === "POST" && url === "/hf/search") {
|
|
4739
|
+
void readBody(req, res).then(async (raw) => {
|
|
4740
|
+
if (raw === null)
|
|
4741
|
+
return;
|
|
4742
|
+
let body;
|
|
4743
|
+
try {
|
|
4744
|
+
body = JSON.parse(raw);
|
|
4745
|
+
}
|
|
4746
|
+
catch {
|
|
4747
|
+
json(res, 400, { error: "invalid JSON body" });
|
|
4748
|
+
return;
|
|
4749
|
+
}
|
|
4750
|
+
// Strip control characters and cap length — this goes into a URL query.
|
|
4751
|
+
const query = String(body.query ?? "")
|
|
4752
|
+
// eslint-disable-next-line no-control-regex -- stripping control characters is the point
|
|
4753
|
+
.replace(/[\u0000-\u001f]/g, "")
|
|
4754
|
+
.trim()
|
|
4755
|
+
.slice(0, 100);
|
|
4756
|
+
if (!query) {
|
|
4757
|
+
json(res, 400, { error: "Type something to search for." });
|
|
4758
|
+
return;
|
|
4759
|
+
}
|
|
4760
|
+
try {
|
|
4761
|
+
json(res, 200, { models: await hfSearch(query) });
|
|
4762
|
+
}
|
|
4763
|
+
catch (err) {
|
|
4764
|
+
broadcastError("error", "hugging face search failed", err);
|
|
4765
|
+
json(res, 502, {
|
|
4766
|
+
error: `Hugging Face search failed — ${err instanceof Error ? err.message : "network error"}.`,
|
|
4767
|
+
});
|
|
4768
|
+
}
|
|
4769
|
+
});
|
|
4770
|
+
return;
|
|
4771
|
+
}
|
|
4772
|
+
if (method === "POST" && url === "/hf/pull") {
|
|
4773
|
+
void readBody(req, res).then(async (raw) => {
|
|
4774
|
+
if (raw === null)
|
|
4775
|
+
return;
|
|
4776
|
+
let body;
|
|
4777
|
+
try {
|
|
4778
|
+
body = JSON.parse(raw);
|
|
4779
|
+
}
|
|
4780
|
+
catch {
|
|
4781
|
+
json(res, 400, { error: "invalid JSON body" });
|
|
4782
|
+
return;
|
|
4783
|
+
}
|
|
4784
|
+
const repo = String(body.repo ?? "").trim();
|
|
4785
|
+
if (!isValidHfRepoId(repo)) {
|
|
4786
|
+
json(res, 400, { error: 'Expected a Hugging Face repo like "org/model".' });
|
|
4787
|
+
return;
|
|
4788
|
+
}
|
|
4789
|
+
try {
|
|
4790
|
+
json(res, 200, await startHfPull(repo));
|
|
4791
|
+
}
|
|
4792
|
+
catch (err) {
|
|
4793
|
+
const status = err instanceof Error && "status" in err && typeof err.status === "number"
|
|
4794
|
+
? err.status
|
|
4795
|
+
: 502;
|
|
4796
|
+
if (status >= 500)
|
|
4797
|
+
broadcastError("error", "hugging face pull failed", err);
|
|
4798
|
+
json(res, status, { error: err instanceof Error ? err.message : "Pull failed." });
|
|
4799
|
+
}
|
|
4800
|
+
});
|
|
4801
|
+
return;
|
|
4802
|
+
}
|
|
4803
|
+
if (method === "POST" && url === "/hf/pull/cancel") {
|
|
4804
|
+
json(res, 200, { ok: cancelHfPull() });
|
|
4805
|
+
return;
|
|
4806
|
+
}
|
|
4492
4807
|
// ── Telegram config (mirrors `ezcoder telegram`) ─────────
|
|
4493
4808
|
if (method === "GET" && url === "/telegram") {
|
|
4494
4809
|
void loadTelegramConfig().then((cfg) => {
|
|
@@ -4575,7 +4890,6 @@ async function createSession(deps, opts) {
|
|
|
4575
4890
|
}
|
|
4576
4891
|
catch (err) {
|
|
4577
4892
|
serveController = null;
|
|
4578
|
-
captureSidecarError(err, "app-sidecar.serve.start", { provider: st.provider });
|
|
4579
4893
|
json(res, 400, { error: err instanceof Error ? err.message : String(err) });
|
|
4580
4894
|
}
|
|
4581
4895
|
})();
|
|
@@ -4593,6 +4907,23 @@ async function createSession(deps, opts) {
|
|
|
4593
4907
|
})();
|
|
4594
4908
|
return;
|
|
4595
4909
|
}
|
|
4910
|
+
// ── Agent Steroids (local code corpus) ───────────────────────────────
|
|
4911
|
+
if (method === "GET" && url === "/steroids") {
|
|
4912
|
+
void probeSteroids().then((status) => json(res, 200, status));
|
|
4913
|
+
return;
|
|
4914
|
+
}
|
|
4915
|
+
if (method === "POST" && url === "/steroids/install") {
|
|
4916
|
+
void installSteroids()
|
|
4917
|
+
.then((status) => {
|
|
4918
|
+
broadcast("steroids_change", status);
|
|
4919
|
+
log("INFO", "app-sidecar", "steroids installed", { version: status.version });
|
|
4920
|
+
json(res, 200, status);
|
|
4921
|
+
})
|
|
4922
|
+
.catch((err) => {
|
|
4923
|
+
json(res, 400, { error: err instanceof Error ? err.message : String(err) });
|
|
4924
|
+
});
|
|
4925
|
+
return;
|
|
4926
|
+
}
|
|
4596
4927
|
// ── MCP server management (mirrors `ezcoder mcp`) ──────────────────
|
|
4597
4928
|
// `targetCwd` (project scope) overrides the window cwd so a server can be
|
|
4598
4929
|
// added/removed for ANY discovered project, not just this window's. Global
|
|
@@ -4602,7 +4933,6 @@ async function createSession(deps, opts) {
|
|
|
4602
4933
|
void buildMcpRows(targetCwd, paths.settingsFile)
|
|
4603
4934
|
.then((servers) => json(res, 200, { servers }))
|
|
4604
4935
|
.catch((err) => {
|
|
4605
|
-
captureSidecarError(err, "app-sidecar.mcp.list");
|
|
4606
4936
|
log("ERROR", "app-sidecar", "buildMcpRows failed", {
|
|
4607
4937
|
message: err instanceof Error ? err.message : String(err),
|
|
4608
4938
|
});
|
|
@@ -4667,7 +4997,6 @@ async function createSession(deps, opts) {
|
|
|
4667
4997
|
});
|
|
4668
4998
|
}
|
|
4669
4999
|
catch (err) {
|
|
4670
|
-
captureSidecarError(err, "app-sidecar.mcp.add", { server: config.name });
|
|
4671
5000
|
json(res, 500, {
|
|
4672
5001
|
error: err instanceof Error ? err.message : String(err),
|
|
4673
5002
|
});
|
|
@@ -4761,7 +5090,6 @@ async function createSession(deps, opts) {
|
|
|
4761
5090
|
}
|
|
4762
5091
|
}
|
|
4763
5092
|
catch (err) {
|
|
4764
|
-
captureSidecarError(err, "app-sidecar.mcp.login", { server: name });
|
|
4765
5093
|
broadcast("mcp_auth_error", {
|
|
4766
5094
|
name,
|
|
4767
5095
|
message: err instanceof Error ? err.message : String(err),
|
|
@@ -4777,6 +5105,7 @@ async function createSession(deps, opts) {
|
|
|
4777
5105
|
}
|
|
4778
5106
|
async function dispose() {
|
|
4779
5107
|
elicitations.cancelAll();
|
|
5108
|
+
asks.cancelAll();
|
|
4780
5109
|
tasksPollStopped = true;
|
|
4781
5110
|
if (tasksPoll)
|
|
4782
5111
|
clearTimeout(tasksPoll);
|
|
@@ -4813,8 +5142,6 @@ async function createSession(deps, opts) {
|
|
|
4813
5142
|
};
|
|
4814
5143
|
}
|
|
4815
5144
|
main().catch(async (err) => {
|
|
4816
|
-
captureSidecarError(err, "app-sidecar.main", { severity: "fatal" });
|
|
4817
|
-
await flushSidecarErrors();
|
|
4818
5145
|
const message = err instanceof Error ? err.message : String(err);
|
|
4819
5146
|
process.stderr.write(`GG_APP_FATAL ${message}\n`);
|
|
4820
5147
|
process.exit(1);
|