@prestyj/cli 5.12.0 → 5.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -36
- package/assets/skills/bulletproof/SKILL.md +158 -0
- package/assets/skills/bulletproof/references/agent-surface.md +82 -0
- package/assets/skills/bulletproof/references/audit-protocol.md +147 -0
- package/assets/skills/bulletproof/references/platform-playbooks.md +176 -0
- package/assets/skills/bulletproof/references/provenance.md +45 -0
- package/assets/skills/bulletproof/references/secure-defaults.md +108 -0
- package/assets/skills/bulletproof/references/supply-chain.md +76 -0
- package/assets/skills/bulletproof/references/threat-landscape.md +74 -0
- package/assets/skills/bulletproof/references/verification.md +65 -0
- package/assets/skills/clarify/SKILL.md +30 -0
- package/assets/skills/code-review/SKILL.md +30 -0
- package/assets/skills/durable/SKILL.md +111 -0
- package/assets/skills/durable/references/backups-and-runtime.md +86 -0
- package/assets/skills/durable/references/migrations-and-schema.md +79 -0
- package/assets/skills/lean/SKILL.md +110 -0
- package/assets/skills/lean/references/memory-and-processes.md +98 -0
- package/assets/skills/lean/references/playbooks.md +107 -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 +486 -95
- 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/mcp.js +30 -10
- package/dist/cli/mcp.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 +16 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +65 -4
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +281 -22
- 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 +4 -5
- package/dist/core/agents.js.map +1 -1
- package/dist/core/api-benchmark.d.ts +1 -1
- package/dist/core/api-benchmark.js +2 -2
- 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 +17 -5
- 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 +12 -2
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +1 -0
- 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 +7 -3
- package/dist/core/mcp/defaults.d.ts.map +1 -1
- package/dist/core/mcp/defaults.js +19 -14
- 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 +50 -1
- package/dist/core/process-manager.d.ts.map +1 -1
- package/dist/core/process-manager.js +155 -4
- 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 +22 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +64 -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 +38 -6
- 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 +123 -0
- package/dist/core/verification-gate.d.ts.map +1 -0
- package/dist/core/verification-gate.js +446 -0
- package/dist/core/verification-gate.js.map +1 -0
- 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 +136 -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 +4 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +63 -4
- 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 +58 -9
- 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 +8 -6
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read-only-bash.d.ts +6 -0
- package/dist/tools/read-only-bash.d.ts.map +1 -1
- package/dist/tools/read-only-bash.js +168 -9
- package/dist/tools/read-only-bash.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 +11 -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 +3 -0
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +56 -30
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/app-items.d.ts +5 -0
- package/dist/ui/app-items.d.ts.map +1 -1
- package/dist/ui/app-items.js +5 -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/hooks/useAgentLoop.d.ts +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.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/image.d.ts.map +1 -1
- package/dist/utils/image.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 +7 -8
- 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 -348
- 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 -123
- 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 -1096
- 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 -140
- 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-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 -295
- 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/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/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/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/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-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-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 -168
- 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/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 -1065
- 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 -536
- 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 -105
- 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 -204
- 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 -940
- 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 -47
- 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-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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-turn-record.d.ts","sourceRoot":"","sources":["../../src/core/subagent-turn-record.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;CACtB;AA2BD,wBAAsB,eAAe,CACnC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,cAAc,CAClC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACnC,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAWzC;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzF"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { log } from "./logger.js";
|
|
5
|
+
/**
|
|
6
|
+
* Durable side-channel for one child's LAST completed turn, written by the
|
|
7
|
+
* worker itself next to its session transcript. It closes the restart gap in
|
|
8
|
+
* durable delegation: when the parent dies mid-child-turn, a detached child
|
|
9
|
+
* finishes its turn with nowhere to report — its stdout pipe is gone — and
|
|
10
|
+
* without this record the rehydrated parent would forever mark it
|
|
11
|
+
* "interrupted", losing completed work (the fx durable-queue lesson).
|
|
12
|
+
*
|
|
13
|
+
* Written atomically (tmp + rename, mirroring subagent-store.ts) and BEST
|
|
14
|
+
* EFFORT: a failed record write is logged and never fails the turn it
|
|
15
|
+
* describes. Reading is fail closed — anything malformed, oversized or absent
|
|
16
|
+
* reads as "no record".
|
|
17
|
+
*/
|
|
18
|
+
const MAX_RECORD_BYTES = 1024 * 1024;
|
|
19
|
+
function recordPath(childSessionPath) {
|
|
20
|
+
// <validated .jsonl session path>.turn.json — the .jsonl suffix is asserted
|
|
21
|
+
// by the caller (assertChildSessionPath), so this stays a sibling file.
|
|
22
|
+
return `${childSessionPath}.turn.json`;
|
|
23
|
+
}
|
|
24
|
+
function isTurnRecord(value) {
|
|
25
|
+
if (!value || typeof value !== "object")
|
|
26
|
+
return false;
|
|
27
|
+
const record = value;
|
|
28
|
+
return ((record.status === "completed" ||
|
|
29
|
+
record.status === "interrupted" ||
|
|
30
|
+
record.status === "failed") &&
|
|
31
|
+
typeof record.turn_count === "number" &&
|
|
32
|
+
Number.isFinite(record.turn_count) &&
|
|
33
|
+
!!record.token_usage &&
|
|
34
|
+
typeof record.token_usage.input === "number" &&
|
|
35
|
+
Number.isFinite(record.token_usage.input) &&
|
|
36
|
+
typeof record.token_usage.output === "number" &&
|
|
37
|
+
Number.isFinite(record.token_usage.output) &&
|
|
38
|
+
typeof record.completed_at === "number" &&
|
|
39
|
+
Number.isFinite(record.completed_at));
|
|
40
|
+
}
|
|
41
|
+
export async function writeTurnRecord(childSessionPath, record) {
|
|
42
|
+
if (!childSessionPath)
|
|
43
|
+
return;
|
|
44
|
+
const filePath = recordPath(childSessionPath);
|
|
45
|
+
const tempPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;
|
|
46
|
+
try {
|
|
47
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
48
|
+
await fs.writeFile(tempPath, `${JSON.stringify(record)}\n`, "utf-8");
|
|
49
|
+
await fs.rename(tempPath, filePath);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
log("WARN", "subagent", "Failed to write child turn record", {
|
|
53
|
+
path: filePath,
|
|
54
|
+
error: error instanceof Error ? error.message : String(error),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
await fs.unlink(tempPath).catch(() => { });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export async function readTurnRecord(childSessionPath) {
|
|
62
|
+
if (!childSessionPath)
|
|
63
|
+
return undefined;
|
|
64
|
+
const filePath = recordPath(childSessionPath);
|
|
65
|
+
try {
|
|
66
|
+
const stat = await fs.stat(filePath);
|
|
67
|
+
if (stat.size === 0 || stat.size > MAX_RECORD_BYTES)
|
|
68
|
+
return undefined;
|
|
69
|
+
const parsed = JSON.parse(await fs.readFile(filePath, "utf-8"));
|
|
70
|
+
return isTurnRecord(parsed) ? parsed : undefined;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** ADOPTED records have served their purpose; keep the transcript dir clean. */
|
|
77
|
+
export async function clearTurnRecord(childSessionPath) {
|
|
78
|
+
if (!childSessionPath)
|
|
79
|
+
return;
|
|
80
|
+
await fs.unlink(recordPath(childSessionPath)).catch(() => { });
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=subagent-turn-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-turn-record.js","sourceRoot":"","sources":["../../src/core/subagent-turn-record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC;;;;;;;;;;;;GAYG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC;AAYrC,SAAS,UAAU,CAAC,gBAAwB;IAC1C,4EAA4E;IAC5E,wEAAwE;IACxE,OAAO,GAAG,gBAAgB,YAAY,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,KAAoC,CAAC;IACpD,OAAO,CACL,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW;QAC5B,MAAM,CAAC,MAAM,KAAK,aAAa;QAC/B,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC;QAC7B,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;QAClC,CAAC,CAAC,MAAM,CAAC,WAAW;QACpB,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,KAAK,QAAQ;QAC5C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;QACzC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,QAAQ;QAC7C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;QAC1C,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ;QACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CACrC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,gBAAoC,EACpC,MAA0B;IAE1B,IAAI,CAAC,gBAAgB;QAAE,OAAO;IAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,MAAM,CAAC;IAClE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,mCAAmC,EAAE;YAC3D,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,gBAAoC;IAEpC,IAAI,CAAC,gBAAgB;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,gBAAgB;YAAE,OAAO,SAAS,CAAC;QACtE,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACzE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,gBAAoC;IACxE,IAAI,CAAC,gBAAgB;QAAE,OAAO;IAC9B,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification gate — the turn cannot claim "done" while a promised check is
|
|
3
|
+
* still owed.
|
|
4
|
+
*
|
|
5
|
+
* When a run mutated code files and no test / typecheck / lint / build command
|
|
6
|
+
* completed after the last mutation, the pre-stop hook injects a follow-up
|
|
7
|
+
* demanding the project's verification be run. Exactly one such follow-up per
|
|
8
|
+
* run: a gate that keeps prompting after the model has decided it is done buys
|
|
9
|
+
* nothing but extra full-length final answers, so the demand carries its own
|
|
10
|
+
* fallback ("say which changes went unverified") and the gate then goes silent.
|
|
11
|
+
* Prompt-only "verify before finishing" instructions can be ignored; this gate
|
|
12
|
+
* is harness-owned bookkeeping on what actually executed.
|
|
13
|
+
*
|
|
14
|
+
* Simplification: verification is recognised by a conservative runner-shape
|
|
15
|
+
* classifier (package-manager/runner + test/lint/check keyword) applied to each
|
|
16
|
+
* segment of a compound command. Both error directions are safe — a missed
|
|
17
|
+
* recognition leaves the gate silent (today's behavior), a false positive merely
|
|
18
|
+
* skips one continuation.
|
|
19
|
+
*
|
|
20
|
+
* Second gate — TAMPER DISCLOSURE. A passing check only proves something if the
|
|
21
|
+
* check itself was not the thing that changed. Editing a test, a test runner's
|
|
22
|
+
* config, or adding a suppression pragma makes a red suite go green without
|
|
23
|
+
* fixing anything, and the resulting transcript is byte-for-byte the shape of a
|
|
24
|
+
* real fix: mutation, then `pnpm test`, then exit 0. So mutations that alter
|
|
25
|
+
* what the check ASSERTS are recorded separately from ordinary code mutations,
|
|
26
|
+
* and survive the verification they enabled — a check cannot clear the
|
|
27
|
+
* suspicion that it was rigged.
|
|
28
|
+
*
|
|
29
|
+
* This gate DISCLOSES, it does not block: writing or repairing a test is normal,
|
|
30
|
+
* legitimate work (TDD, adding coverage), so refusing to finish would punish the
|
|
31
|
+
* common case. One demand per run: name what changed in the checks and why, and
|
|
32
|
+
* confirm the fix stands without it.
|
|
33
|
+
*/
|
|
34
|
+
import type { Message } from "@prestyj/ai";
|
|
35
|
+
/** Follow-ups per run. After this the gate is silent for the rest of the run. */
|
|
36
|
+
export declare const MAX_VERIFICATION_INJECTIONS = 1;
|
|
37
|
+
/** Tamper-disclosure demands per run. Same reasoning as above: one is enough. */
|
|
38
|
+
export declare const MAX_TAMPER_INJECTIONS = 1;
|
|
39
|
+
/**
|
|
40
|
+
* True when the command looks like a test/typecheck/lint/build invocation:
|
|
41
|
+
* compound segments considered independently, wrappers stripped, a known runner
|
|
42
|
+
* leading, and a verification keyword among its operands. Deliberately strict —
|
|
43
|
+
* `grep test x`, `git commit -m test` and `./run_tests.sh` all read as NOT
|
|
44
|
+
* verification.
|
|
45
|
+
*/
|
|
46
|
+
export declare function isVerificationCommand(command: string): boolean;
|
|
47
|
+
/** True for paths that look like source code (not docs, config or assets). */
|
|
48
|
+
export declare function isCodeFilePath(filePath: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Files that define what a check ASSERTS rather than what it tests: test files
|
|
51
|
+
* and test directories, test-runner configs, and the type/lint configs whose
|
|
52
|
+
* strictness the checks inherit. Editing one of these can turn a failing check
|
|
53
|
+
* green without touching the behaviour under test.
|
|
54
|
+
*
|
|
55
|
+
* Deliberately matched on path shape only. Both error directions are cheap: a
|
|
56
|
+
* miss leaves today's behavior, a false positive costs one disclosure sentence.
|
|
57
|
+
*/
|
|
58
|
+
export declare function isCheckOwnFile(filePath: string): boolean;
|
|
59
|
+
/** The `+` lines of a unified diff, with the marker stripped. */
|
|
60
|
+
export declare function extractAddedLines(diff: string): string;
|
|
61
|
+
/** Suppression/skip markers present in newly added text, de-duplicated. */
|
|
62
|
+
export declare function detectCheckWeakening(addedText: string): string[];
|
|
63
|
+
/** A mutation that changed what a check asserts, and why it looked that way. */
|
|
64
|
+
export interface SuspectMutation {
|
|
65
|
+
filePath: string;
|
|
66
|
+
reason: string;
|
|
67
|
+
}
|
|
68
|
+
export declare function buildTamperDisclosureMessage(suspects: readonly SuspectMutation[]): Message;
|
|
69
|
+
export declare function buildVerificationFollowUpMessage(files: readonly string[]): Message;
|
|
70
|
+
/**
|
|
71
|
+
* Bookkeeping for "code was edited, nothing proved it since". Callers record
|
|
72
|
+
* successful edit/write mutations on code files and completed foreground
|
|
73
|
+
* verification commands, in occurrence order; the gate is owed whenever the
|
|
74
|
+
* newest recorded event is a mutation.
|
|
75
|
+
*/
|
|
76
|
+
export declare class VerificationGate {
|
|
77
|
+
private seq;
|
|
78
|
+
private lastMutationSeq;
|
|
79
|
+
private lastVerificationSeq;
|
|
80
|
+
private injections;
|
|
81
|
+
private tamperInjections;
|
|
82
|
+
/** Code files mutated since the last verification — the gate's file list. */
|
|
83
|
+
private mutatedFiles;
|
|
84
|
+
/**
|
|
85
|
+
* Mutations that changed what a check asserts. Keyed by path so repeated edits
|
|
86
|
+
* to one file disclose once. Deliberately NOT cleared by recordVerification():
|
|
87
|
+
* the whole point is that the passing check cannot clear the suspicion that it
|
|
88
|
+
* was the thing edited.
|
|
89
|
+
*/
|
|
90
|
+
private suspects;
|
|
91
|
+
/**
|
|
92
|
+
* @param addedText Text the model ADDED in this mutation (the `+` lines of a
|
|
93
|
+
* diff, or a written file's full content). Scanned for suppression and skip
|
|
94
|
+
* markers; omit it and only the path check applies.
|
|
95
|
+
*/
|
|
96
|
+
recordMutation(filePath: string, addedText?: string): void;
|
|
97
|
+
recordVerification(): void;
|
|
98
|
+
isOwed(): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* True when a check passed after the run altered what the checks assert —
|
|
101
|
+
* the false-green shape. Requires a verification to have completed: with none,
|
|
102
|
+
* the standard gate already demands one, and demanding disclosure of an
|
|
103
|
+
* unproven fix on top of it is noise.
|
|
104
|
+
*/
|
|
105
|
+
isTamperOwed(): boolean;
|
|
106
|
+
/** Suspect mutations recorded this run, sorted for stable output. */
|
|
107
|
+
tamperSuspects(): SuspectMutation[];
|
|
108
|
+
/**
|
|
109
|
+
* Would a stop right now inject? Lets the session arm clients BEFORE the
|
|
110
|
+
* candidate final answer streams, so the draft the injection replaces is held
|
|
111
|
+
* rather than painted and then superseded.
|
|
112
|
+
*/
|
|
113
|
+
willInject(): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* The blocking message for the pre-stop hook, or null when nothing is owed
|
|
116
|
+
* or the single injection is spent. Still-owed on a later stop is deliberately
|
|
117
|
+
* silent: the demand already told the model to disclose what went unverified,
|
|
118
|
+
* and one more injection only costs the user another restated final answer.
|
|
119
|
+
*/
|
|
120
|
+
followUp(): Message[] | null;
|
|
121
|
+
reset(): void;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=verification-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-gate.d.ts","sourceRoot":"","sources":["../../src/core/verification-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,iFAAiF;AACjF,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AA2KvC;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D;AAwCD,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA+BxD;AAmCD,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAMhE;AAED,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAe1F;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAalF;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,6EAA6E;IAC7E,OAAO,CAAC,YAAY,CAAqB;IACzC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAA6B;IAE7C;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAc1D,kBAAkB,IAAI,IAAI;IAK1B,MAAM,IAAI,OAAO;IAIjB;;;;;OAKG;IACH,YAAY,IAAI,OAAO;IAIvB,qEAAqE;IACrE,cAAc,IAAI,eAAe,EAAE;IAMnC;;;;OAIG;IACH,UAAU,IAAI,OAAO;IAOrB;;;;;OAKG;IACH,QAAQ,IAAI,OAAO,EAAE,GAAG,IAAI;IAc5B,KAAK,IAAI,IAAI;CASd"}
|
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
/** Follow-ups per run. After this the gate is silent for the rest of the run. */
|
|
2
|
+
export const MAX_VERIFICATION_INJECTIONS = 1;
|
|
3
|
+
/** Tamper-disclosure demands per run. Same reasoning as above: one is enough. */
|
|
4
|
+
export const MAX_TAMPER_INJECTIONS = 1;
|
|
5
|
+
/** Words that may precede the real command without changing its shape. */
|
|
6
|
+
const SHELL_WRAPPERS = new Set([
|
|
7
|
+
"env",
|
|
8
|
+
"nohup",
|
|
9
|
+
"nice",
|
|
10
|
+
"time",
|
|
11
|
+
"sudo",
|
|
12
|
+
"stdbuf",
|
|
13
|
+
"command",
|
|
14
|
+
"exec",
|
|
15
|
+
]);
|
|
16
|
+
/** Leading words that mark a command as a build/test-tool invocation. Anything
|
|
17
|
+
* else (git, grep, ./script.sh, bash …) is conservatively not verification. */
|
|
18
|
+
const RUNNERS = new Set([
|
|
19
|
+
"npm",
|
|
20
|
+
"pnpm",
|
|
21
|
+
"yarn",
|
|
22
|
+
"bun",
|
|
23
|
+
"npx",
|
|
24
|
+
"nr",
|
|
25
|
+
"deno",
|
|
26
|
+
"python",
|
|
27
|
+
"python3",
|
|
28
|
+
"py",
|
|
29
|
+
"uv",
|
|
30
|
+
"go",
|
|
31
|
+
"cargo",
|
|
32
|
+
"rustc",
|
|
33
|
+
"make",
|
|
34
|
+
"cmake",
|
|
35
|
+
"gradle",
|
|
36
|
+
"mvn",
|
|
37
|
+
"dotnet",
|
|
38
|
+
"sbt",
|
|
39
|
+
"swift",
|
|
40
|
+
"tsc",
|
|
41
|
+
"vitest",
|
|
42
|
+
"jest",
|
|
43
|
+
"mocha",
|
|
44
|
+
"pytest",
|
|
45
|
+
"unittest",
|
|
46
|
+
"eslint",
|
|
47
|
+
"biome",
|
|
48
|
+
"ruff",
|
|
49
|
+
"mypy",
|
|
50
|
+
"pylint",
|
|
51
|
+
]);
|
|
52
|
+
/** Shells whose `-c <script>` operand is itself a command to classify. */
|
|
53
|
+
const SHELL_INTERPRETERS = new Set(["sh", "bash", "zsh", "dash", "ksh"]);
|
|
54
|
+
/** Nested `sh -c` unwraps allowed before the classifier gives up. */
|
|
55
|
+
const MAX_SHELL_DEPTH = 3;
|
|
56
|
+
/** A non-flag word after the runner that makes the command a verification. */
|
|
57
|
+
const VERIFY_KEYWORDS = [
|
|
58
|
+
"test",
|
|
59
|
+
"tests",
|
|
60
|
+
"vitest",
|
|
61
|
+
"jest",
|
|
62
|
+
"mocha",
|
|
63
|
+
"pytest",
|
|
64
|
+
"unittest",
|
|
65
|
+
"tsc",
|
|
66
|
+
"typecheck",
|
|
67
|
+
"type-check",
|
|
68
|
+
"eslint",
|
|
69
|
+
"biome",
|
|
70
|
+
"ruff",
|
|
71
|
+
"mypy",
|
|
72
|
+
"pylint",
|
|
73
|
+
"lint",
|
|
74
|
+
"clippy",
|
|
75
|
+
"vet",
|
|
76
|
+
"check",
|
|
77
|
+
"build",
|
|
78
|
+
"compile",
|
|
79
|
+
"verify",
|
|
80
|
+
];
|
|
81
|
+
function isVerifyWord(word) {
|
|
82
|
+
// Exact keyword, or a script name built on one (npm run test:unit).
|
|
83
|
+
return VERIFY_KEYWORDS.some((keyword) => word === keyword || word.startsWith(`${keyword}:`));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Split a command on shell control operators (`&&`, `||`, `;`, `|`, newline),
|
|
87
|
+
* ignoring operators inside quotes, and strip subshell/group punctuation from
|
|
88
|
+
* each piece. `cd pkg && npm test` must classify on its `npm test` half — the
|
|
89
|
+
* whole-string read saw `cd` as the runner and left the gate owed forever.
|
|
90
|
+
*/
|
|
91
|
+
function splitCommandSegments(command) {
|
|
92
|
+
const segments = [];
|
|
93
|
+
let current = "";
|
|
94
|
+
let quote = null;
|
|
95
|
+
for (let i = 0; i < command.length; i++) {
|
|
96
|
+
const char = command[i];
|
|
97
|
+
if (quote) {
|
|
98
|
+
current += char;
|
|
99
|
+
if (char === "\\" && quote === '"')
|
|
100
|
+
current += command[++i] ?? "";
|
|
101
|
+
else if (char === quote)
|
|
102
|
+
quote = null;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (char === "'" || char === '"') {
|
|
106
|
+
quote = char;
|
|
107
|
+
current += char;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (char === "\\") {
|
|
111
|
+
current += char + (command[++i] ?? "");
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
// Bare `&` is deliberately not an operator: it would split `2>&1`.
|
|
115
|
+
const operator = ["&&", "||", ";", "|", "\n"].find((op) => command.startsWith(op, i));
|
|
116
|
+
if (operator) {
|
|
117
|
+
segments.push(current);
|
|
118
|
+
current = "";
|
|
119
|
+
i += operator.length - 1;
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
current += char;
|
|
123
|
+
}
|
|
124
|
+
segments.push(current);
|
|
125
|
+
return segments
|
|
126
|
+
.map((segment) => segment
|
|
127
|
+
.trim()
|
|
128
|
+
.replace(/^[({!\s]+/, "")
|
|
129
|
+
.replace(/[)}\s]+$/, ""))
|
|
130
|
+
.filter((segment) => segment.length > 0);
|
|
131
|
+
}
|
|
132
|
+
/** Split a segment into words, honouring quotes and dropping the quote marks. */
|
|
133
|
+
function tokenize(segment) {
|
|
134
|
+
const words = [];
|
|
135
|
+
let current = "";
|
|
136
|
+
let quote = null;
|
|
137
|
+
let started = false;
|
|
138
|
+
for (let i = 0; i < segment.length; i++) {
|
|
139
|
+
const char = segment[i];
|
|
140
|
+
if (quote) {
|
|
141
|
+
if (char === "\\" && quote === '"')
|
|
142
|
+
current += segment[++i] ?? "";
|
|
143
|
+
else if (char === quote)
|
|
144
|
+
quote = null;
|
|
145
|
+
else
|
|
146
|
+
current += char;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (char === "'" || char === '"') {
|
|
150
|
+
quote = char;
|
|
151
|
+
started = true;
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (/\s/.test(char)) {
|
|
155
|
+
if (started || current.length > 0)
|
|
156
|
+
words.push(current);
|
|
157
|
+
current = "";
|
|
158
|
+
started = false;
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (char === "\\") {
|
|
162
|
+
current += segment[++i] ?? "";
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
current += char;
|
|
166
|
+
}
|
|
167
|
+
if (started || current.length > 0)
|
|
168
|
+
words.push(current);
|
|
169
|
+
return words;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* True when the command looks like a test/typecheck/lint/build invocation:
|
|
173
|
+
* compound segments considered independently, wrappers stripped, a known runner
|
|
174
|
+
* leading, and a verification keyword among its operands. Deliberately strict —
|
|
175
|
+
* `grep test x`, `git commit -m test` and `./run_tests.sh` all read as NOT
|
|
176
|
+
* verification.
|
|
177
|
+
*/
|
|
178
|
+
export function isVerificationCommand(command) {
|
|
179
|
+
return splitCommandSegments(command).some((segment) => isVerificationSegment(segment, 0));
|
|
180
|
+
}
|
|
181
|
+
/** Classify one operator-free segment. `depth` bounds `sh -c` unwrapping. */
|
|
182
|
+
function isVerificationSegment(segment, depth) {
|
|
183
|
+
const words = tokenize(segment);
|
|
184
|
+
let i = 0;
|
|
185
|
+
while (i < words.length) {
|
|
186
|
+
const word = words[i];
|
|
187
|
+
if (SHELL_WRAPPERS.has(word) || /^[A-Za-z_][A-Za-z0-9_]*=/.test(word)) {
|
|
188
|
+
i += 1;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
// `timeout <duration> runner …` — skip the duration argument too.
|
|
192
|
+
if (word === "timeout") {
|
|
193
|
+
i += 2;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
const runner = words[i] ?? "";
|
|
199
|
+
// `sh -c "cd pkg && npm test"` — classify the script the shell will run.
|
|
200
|
+
if (SHELL_INTERPRETERS.has(runner)) {
|
|
201
|
+
if (depth >= MAX_SHELL_DEPTH)
|
|
202
|
+
return false;
|
|
203
|
+
const flagIndex = words.indexOf("-c", i + 1);
|
|
204
|
+
const script = flagIndex === -1 ? undefined : words[flagIndex + 1];
|
|
205
|
+
if (!script)
|
|
206
|
+
return false;
|
|
207
|
+
return splitCommandSegments(script).some((inner) => isVerificationSegment(inner, depth + 1));
|
|
208
|
+
}
|
|
209
|
+
if (!RUNNERS.has(runner))
|
|
210
|
+
return false;
|
|
211
|
+
if (isVerifyWord(runner))
|
|
212
|
+
return true; // bare vitest / jest / tsc / eslint …
|
|
213
|
+
return words
|
|
214
|
+
.slice(i + 1)
|
|
215
|
+
.filter((word) => !word.startsWith("-"))
|
|
216
|
+
.some(isVerifyWord);
|
|
217
|
+
}
|
|
218
|
+
/** Source-file extensions whose edits count as code mutations. */
|
|
219
|
+
const CODE_EXT_RE = /\.(?:[cm]?[jt]sx?|py|rb|go|rs|java|kt|kts|swift|c|h|cpp|cc|hpp|cs|php|vue|svelte|scala|sh|sql|m|mm|zig|ex|exs|erl|dart|lua|pl|r|jl|hs|clj)$/;
|
|
220
|
+
/** True for paths that look like source code (not docs, config or assets). */
|
|
221
|
+
export function isCodeFilePath(filePath) {
|
|
222
|
+
return CODE_EXT_RE.test(filePath);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Files that define what a check ASSERTS rather than what it tests: test files
|
|
226
|
+
* and test directories, test-runner configs, and the type/lint configs whose
|
|
227
|
+
* strictness the checks inherit. Editing one of these can turn a failing check
|
|
228
|
+
* green without touching the behaviour under test.
|
|
229
|
+
*
|
|
230
|
+
* Deliberately matched on path shape only. Both error directions are cheap: a
|
|
231
|
+
* miss leaves today's behavior, a false positive costs one disclosure sentence.
|
|
232
|
+
*/
|
|
233
|
+
export function isCheckOwnFile(filePath) {
|
|
234
|
+
const normalized = filePath.replace(/\\/g, "/");
|
|
235
|
+
const base = normalized.slice(normalized.lastIndexOf("/") + 1);
|
|
236
|
+
// A test/spec file, by suffix (foo.test.ts, foo_test.go, test_foo.py).
|
|
237
|
+
if (/\.(?:test|spec)\.[cm]?[jt]sx?$/.test(base))
|
|
238
|
+
return true;
|
|
239
|
+
if (/_test\.(?:go|py|rb|rs)$/.test(base) || /^test_.+\.py$/.test(base))
|
|
240
|
+
return true;
|
|
241
|
+
if (/(?:^|\.)spec\.[cm]?[jt]sx?$/.test(base))
|
|
242
|
+
return true;
|
|
243
|
+
// Anything under a tests directory.
|
|
244
|
+
if (/(?:^|\/)(?:tests?|__tests__|spec|specs|e2e|testdata|fixtures)\//.test(normalized)) {
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
// Test-runner and check configuration.
|
|
248
|
+
if (/^(?:vitest|jest|playwright|cypress|karma|mocha|ava|nightwatch|wdio)\.config\.[cm]?[jt]s$/.test(base)) {
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
if (/^(?:jest|vitest|mocha|ava|nyc|c8)\.(?:config|setup)\./.test(base))
|
|
252
|
+
return true;
|
|
253
|
+
// Type / lint configuration whose strictness the checks inherit.
|
|
254
|
+
if (/^tsconfig(?:\.[\w-]+)?\.json$/.test(base))
|
|
255
|
+
return true;
|
|
256
|
+
if (/^(?:\.eslintrc(?:\.[\w-]+)?|eslint\.config\.[cm]?[jt]s)$/.test(base))
|
|
257
|
+
return true;
|
|
258
|
+
if (/^(?:biome|\.golangci|\.rubocop|phpstan|psalm)\.(?:jsonc?|ya?ml|neon|xml|toml)$/.test(base)) {
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
if (/^(?:pyproject\.toml|setup\.cfg|tox\.ini|pytest\.ini|mypy\.ini|\.flake8)$/.test(base)) {
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
if (/^conftest\.py$/.test(base))
|
|
265
|
+
return true;
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Markers that silence or skip a check rather than satisfy it. Matched only
|
|
270
|
+
* against text the model ADDED, so pre-existing suppressions in a file never
|
|
271
|
+
* trip the gate.
|
|
272
|
+
*
|
|
273
|
+
* Deliberately limited to unambiguous intent (an explicit suppression pragma, a
|
|
274
|
+
* skipped or narrowed test). Judgement calls that are ordinary in real test code
|
|
275
|
+
* — `as any`, a loosened assertion — are NOT matched: at one extra model turn
|
|
276
|
+
* per false positive, a noisy signal costs more than the rare miss.
|
|
277
|
+
*/
|
|
278
|
+
const SUPPRESSION_MARKERS = [
|
|
279
|
+
{ re: /@ts-(?:ignore|expect-error|nocheck)\b/, what: "TypeScript error suppression" },
|
|
280
|
+
{ re: /eslint-disable(?:-next-line|-line)?\b/, what: "ESLint rule suppression" },
|
|
281
|
+
{ re: /#\s*type:\s*ignore\b/, what: "mypy type-ignore" },
|
|
282
|
+
{ re: /#\s*noqa\b/, what: "flake8/ruff noqa" },
|
|
283
|
+
{ re: /#\s*(?:pylint|mypy|ruff):\s*disable\b/, what: "Python linter suppression" },
|
|
284
|
+
{ re: /#\[allow\(/, what: "Rust allow attribute" },
|
|
285
|
+
{ re: /\/\/\s*nolint\b/, what: "Go nolint directive" },
|
|
286
|
+
{ re: /@SuppressWarnings\b/, what: "Java warning suppression" },
|
|
287
|
+
{
|
|
288
|
+
re: /\b(?:it|test|describe|context)\s*\.\s*(?:skip|todo)\s*\(/,
|
|
289
|
+
what: "skipped test",
|
|
290
|
+
},
|
|
291
|
+
{ re: /\b(?:xit|xdescribe|xtest)\s*\(/, what: "skipped test" },
|
|
292
|
+
{
|
|
293
|
+
re: /\b(?:it|test|describe|context)\s*\.\s*only\s*\(/,
|
|
294
|
+
what: "test run narrowed to .only",
|
|
295
|
+
},
|
|
296
|
+
{ re: /@pytest\.mark\.(?:skip|xfail)\b/, what: "skipped pytest case" },
|
|
297
|
+
{ re: /\bt\.Skip\s*\(/, what: "skipped Go test" },
|
|
298
|
+
{ re: /#\[ignore\]/, what: "ignored Rust test" },
|
|
299
|
+
];
|
|
300
|
+
/** The `+` lines of a unified diff, with the marker stripped. */
|
|
301
|
+
export function extractAddedLines(diff) {
|
|
302
|
+
return diff
|
|
303
|
+
.split("\n")
|
|
304
|
+
.filter((line) => line.startsWith("+") && !line.startsWith("+++"))
|
|
305
|
+
.map((line) => line.slice(1))
|
|
306
|
+
.join("\n");
|
|
307
|
+
}
|
|
308
|
+
/** Suppression/skip markers present in newly added text, de-duplicated. */
|
|
309
|
+
export function detectCheckWeakening(addedText) {
|
|
310
|
+
const found = new Set();
|
|
311
|
+
for (const { re, what } of SUPPRESSION_MARKERS) {
|
|
312
|
+
if (re.test(addedText))
|
|
313
|
+
found.add(what);
|
|
314
|
+
}
|
|
315
|
+
return [...found];
|
|
316
|
+
}
|
|
317
|
+
export function buildTamperDisclosureMessage(suspects) {
|
|
318
|
+
return {
|
|
319
|
+
role: "user",
|
|
320
|
+
provenance: { source: "runtime", kind: "completion_gate", visibility: "hidden" },
|
|
321
|
+
content: "Verification gate: a check passed in this run, but this run also changed what the " +
|
|
322
|
+
"checks themselves assert:\n" +
|
|
323
|
+
suspects.map(({ filePath, reason }) => `- ${filePath} — ${reason}`).join("\n") +
|
|
324
|
+
"\nA check that was itself edited does not prove the code works. If these edits were " +
|
|
325
|
+
"legitimate (a new test, a test corrected against agreed behaviour, a suppression the " +
|
|
326
|
+
"user asked for), say so plainly in your final response and state why the fix stands " +
|
|
327
|
+
"without them. If instead the check was weakened, skipped, narrowed or silenced to get " +
|
|
328
|
+
"a green result, revert that now and fix the underlying code. This is the only time you " +
|
|
329
|
+
"will be asked — do not describe the change as verified without addressing this.",
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
export function buildVerificationFollowUpMessage(files) {
|
|
333
|
+
return {
|
|
334
|
+
role: "user",
|
|
335
|
+
provenance: { source: "runtime", kind: "completion_gate", visibility: "hidden" },
|
|
336
|
+
content: "Verification gate: you changed code in this run, but no test, typecheck, lint or build " +
|
|
337
|
+
"command has completed since the last edit:\n" +
|
|
338
|
+
files.map((filePath) => `- ${filePath}`).join("\n") +
|
|
339
|
+
"\nRun the project's verification now (its test command, or the closest equivalent) and " +
|
|
340
|
+
"address any failures. Do not describe the change as tested or working without having run it. " +
|
|
341
|
+
"This is the only time you will be asked: if you cannot run it, say plainly in your final " +
|
|
342
|
+
"response which of these changes went unverified and why, so the user can check them.",
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Bookkeeping for "code was edited, nothing proved it since". Callers record
|
|
347
|
+
* successful edit/write mutations on code files and completed foreground
|
|
348
|
+
* verification commands, in occurrence order; the gate is owed whenever the
|
|
349
|
+
* newest recorded event is a mutation.
|
|
350
|
+
*/
|
|
351
|
+
export class VerificationGate {
|
|
352
|
+
seq = 0;
|
|
353
|
+
lastMutationSeq = 0;
|
|
354
|
+
lastVerificationSeq = 0;
|
|
355
|
+
injections = 0;
|
|
356
|
+
tamperInjections = 0;
|
|
357
|
+
/** Code files mutated since the last verification — the gate's file list. */
|
|
358
|
+
mutatedFiles = new Set();
|
|
359
|
+
/**
|
|
360
|
+
* Mutations that changed what a check asserts. Keyed by path so repeated edits
|
|
361
|
+
* to one file disclose once. Deliberately NOT cleared by recordVerification():
|
|
362
|
+
* the whole point is that the passing check cannot clear the suspicion that it
|
|
363
|
+
* was the thing edited.
|
|
364
|
+
*/
|
|
365
|
+
suspects = new Map();
|
|
366
|
+
/**
|
|
367
|
+
* @param addedText Text the model ADDED in this mutation (the `+` lines of a
|
|
368
|
+
* diff, or a written file's full content). Scanned for suppression and skip
|
|
369
|
+
* markers; omit it and only the path check applies.
|
|
370
|
+
*/
|
|
371
|
+
recordMutation(filePath, addedText) {
|
|
372
|
+
this.lastMutationSeq = ++this.seq;
|
|
373
|
+
this.mutatedFiles.add(filePath);
|
|
374
|
+
const reasons = [];
|
|
375
|
+
if (isCheckOwnFile(filePath))
|
|
376
|
+
reasons.push("edits a test or check configuration");
|
|
377
|
+
if (addedText)
|
|
378
|
+
reasons.push(...detectCheckWeakening(addedText).map((what) => `adds ${what}`));
|
|
379
|
+
if (reasons.length === 0)
|
|
380
|
+
return;
|
|
381
|
+
// Keep the fullest reason seen for this file rather than the newest.
|
|
382
|
+
const existing = this.suspects.get(filePath);
|
|
383
|
+
const merged = [...new Set([...(existing?.split("; ") ?? []), ...reasons])].join("; ");
|
|
384
|
+
this.suspects.set(filePath, merged);
|
|
385
|
+
}
|
|
386
|
+
recordVerification() {
|
|
387
|
+
this.lastVerificationSeq = ++this.seq;
|
|
388
|
+
this.mutatedFiles.clear();
|
|
389
|
+
}
|
|
390
|
+
isOwed() {
|
|
391
|
+
return this.lastMutationSeq > this.lastVerificationSeq;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* True when a check passed after the run altered what the checks assert —
|
|
395
|
+
* the false-green shape. Requires a verification to have completed: with none,
|
|
396
|
+
* the standard gate already demands one, and demanding disclosure of an
|
|
397
|
+
* unproven fix on top of it is noise.
|
|
398
|
+
*/
|
|
399
|
+
isTamperOwed() {
|
|
400
|
+
return this.suspects.size > 0 && this.lastVerificationSeq > 0;
|
|
401
|
+
}
|
|
402
|
+
/** Suspect mutations recorded this run, sorted for stable output. */
|
|
403
|
+
tamperSuspects() {
|
|
404
|
+
return [...this.suspects]
|
|
405
|
+
.map(([filePath, reason]) => ({ filePath, reason }))
|
|
406
|
+
.sort((a, b) => a.filePath.localeCompare(b.filePath));
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Would a stop right now inject? Lets the session arm clients BEFORE the
|
|
410
|
+
* candidate final answer streams, so the draft the injection replaces is held
|
|
411
|
+
* rather than painted and then superseded.
|
|
412
|
+
*/
|
|
413
|
+
willInject() {
|
|
414
|
+
return ((this.isOwed() && this.injections < MAX_VERIFICATION_INJECTIONS) ||
|
|
415
|
+
(this.isTamperOwed() && this.tamperInjections < MAX_TAMPER_INJECTIONS));
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* The blocking message for the pre-stop hook, or null when nothing is owed
|
|
419
|
+
* or the single injection is spent. Still-owed on a later stop is deliberately
|
|
420
|
+
* silent: the demand already told the model to disclose what went unverified,
|
|
421
|
+
* and one more injection only costs the user another restated final answer.
|
|
422
|
+
*/
|
|
423
|
+
followUp() {
|
|
424
|
+
// "Nothing proved this" outranks "the proof may be rigged": with no check
|
|
425
|
+
// run at all there is not yet a false green to disclose.
|
|
426
|
+
if (this.isOwed() && this.injections < MAX_VERIFICATION_INJECTIONS) {
|
|
427
|
+
this.injections += 1;
|
|
428
|
+
return [buildVerificationFollowUpMessage([...this.mutatedFiles].sort())];
|
|
429
|
+
}
|
|
430
|
+
if (this.isTamperOwed() && this.tamperInjections < MAX_TAMPER_INJECTIONS) {
|
|
431
|
+
this.tamperInjections += 1;
|
|
432
|
+
return [buildTamperDisclosureMessage(this.tamperSuspects())];
|
|
433
|
+
}
|
|
434
|
+
return null;
|
|
435
|
+
}
|
|
436
|
+
reset() {
|
|
437
|
+
this.seq = 0;
|
|
438
|
+
this.lastMutationSeq = 0;
|
|
439
|
+
this.lastVerificationSeq = 0;
|
|
440
|
+
this.injections = 0;
|
|
441
|
+
this.tamperInjections = 0;
|
|
442
|
+
this.mutatedFiles.clear();
|
|
443
|
+
this.suspects.clear();
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
//# sourceMappingURL=verification-gate.js.map
|