@prestyj/cli 5.28.1 → 5.29.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/assets/motion/bin/contact-sheet.mjs +9 -3
- package/assets/motion/bin/cues.mjs +337 -0
- package/assets/motion/bin/library.mjs +53 -10
- package/assets/motion/bin/motion-blur.mjs +943 -0
- package/assets/motion/bin/motion-check.mjs +354 -3
- package/assets/motion/bin/music-fit.mjs +436 -0
- package/assets/motion/bin/pdf-extract.mjs +22 -10
- package/assets/motion/bin/reference-study.mjs +346 -0
- package/assets/motion/bin/score-synth.mjs +1052 -93
- package/assets/motion/library/README.md +50 -14
- package/assets/motion/library/kit/moves.js +1981 -0
- package/assets/motion/library/library.json +232 -0
- package/assets/motion/library/pieces/camera-rig/meta.json +13 -0
- package/assets/motion/library/pieces/camera-rig/piece.html +153 -0
- package/assets/motion/library/pieces/camera-rig/preview.jpg +0 -0
- package/assets/motion/library/pieces/chain-knock/meta.json +13 -0
- package/assets/motion/library/pieces/chain-knock/piece.html +195 -0
- package/assets/motion/library/pieces/chain-knock/preview.jpg +0 -0
- package/assets/motion/library/pieces/gather-to-logo/meta.json +13 -0
- package/assets/motion/library/pieces/gather-to-logo/piece.html +159 -0
- package/assets/motion/library/pieces/gather-to-logo/preview.jpg +0 -0
- package/assets/motion/library/pieces/morph-carry/meta.json +13 -0
- package/assets/motion/library/pieces/morph-carry/piece.html +173 -0
- package/assets/motion/library/pieces/morph-carry/preview.jpg +0 -0
- package/assets/motion/library/pieces/one-shape-journey/meta.json +13 -0
- package/assets/motion/library/pieces/one-shape-journey/piece.html +195 -0
- package/assets/motion/library/pieces/one-shape-journey/preview.jpg +0 -0
- package/assets/motion/library/pieces/open-from-subject/meta.json +13 -0
- package/assets/motion/library/pieces/open-from-subject/piece.html +168 -0
- package/assets/motion/library/pieces/open-from-subject/preview.jpg +0 -0
- package/assets/motion/library/pieces/request-to-result/meta.json +13 -0
- package/assets/motion/library/pieces/request-to-result/piece.html +212 -0
- package/assets/motion/library/pieces/request-to-result/preview.jpg +0 -0
- package/assets/motion/library/pieces/scale-dive/meta.json +13 -0
- package/assets/motion/library/pieces/scale-dive/piece.html +321 -0
- package/assets/motion/library/pieces/scale-dive/preview.jpg +0 -0
- package/assets/motion/library/pieces/screen-replica-steps/meta.json +13 -0
- package/assets/motion/library/pieces/screen-replica-steps/piece.html +366 -0
- package/assets/motion/library/pieces/screen-replica-steps/preview.jpg +0 -0
- package/assets/motion/library/pieces/zoom-into-card/meta.json +13 -0
- package/assets/motion/library/pieces/zoom-into-card/piece.html +179 -0
- package/assets/motion/library/pieces/zoom-into-card/preview.jpg +0 -0
- package/assets/motion/library/sheets/diagram.jpg +0 -0
- package/assets/motion/library/sheets/frame.jpg +0 -0
- package/assets/motion/library/sheets/transition.jpg +0 -0
- package/assets/motion/library/sheets/ui.jpg +0 -0
- package/assets/motion/references/build-sheet.md +206 -0
- package/assets/motion/references/runtime/determinism-rules.md +1 -1
- package/assets/motion/references/runtime/gsap-easing-and-stagger.md +29 -29
- package/assets/motion/references/runtime/inputs-and-assets.md +7 -12
- package/assets/motion/references/runtime/lint-validate-inspect.md +3 -3
- package/assets/motion/references/runtime/minimal-composition.md +1 -1
- package/assets/motion/references/runtime/preview-render.md +3 -3
- package/assets/motion/skills/app-walkthrough/SKILL.md +66 -0
- package/assets/motion/skills/before-after/SKILL.md +53 -0
- package/assets/motion/skills/brand-kit/SKILL.md +3 -3
- package/assets/motion/skills/dev-tool-video/SKILL.md +57 -0
- package/assets/motion/skills/launch-video/SKILL.md +62 -0
- package/assets/motion/skills/match-reference/SKILL.md +58 -0
- package/assets/motion/skills/motion/SKILL.md +78 -85
- package/assets/motion/skills/source-ingest/SKILL.md +17 -6
- package/assets/motion/skills/website-video/SKILL.md +59 -0
- package/assets/skills/bulletproof/SKILL.md +36 -11
- package/assets/skills/bulletproof/references/agent-surface.md +19 -9
- package/assets/skills/bulletproof/references/audit-protocol.md +20 -5
- package/assets/skills/bulletproof/references/platform-playbooks.md +5 -4
- package/assets/skills/bulletproof/references/provenance.md +26 -1
- package/assets/skills/bulletproof/references/secure-defaults.md +6 -5
- package/assets/skills/bulletproof/references/supply-chain.md +21 -17
- package/assets/skills/bulletproof/references/threat-landscape.md +28 -26
- package/assets/skills/bulletproof/references/verification.md +2 -0
- package/assets/skills/clarify/SKILL.md +25 -16
- package/assets/skills/code-review/SKILL.md +71 -13
- package/assets/skills/code-review/references/agent-diffs.md +27 -0
- package/assets/skills/code-review/references/tests.md +19 -0
- package/assets/skills/compliance-guard/SKILL.md +20 -5
- package/assets/skills/compliance-guard/references/artifacts.md +1 -1
- package/assets/skills/compliance-guard/references/eu-uk.md +16 -16
- package/assets/skills/compliance-guard/references/lawsuit-vectors.md +5 -5
- package/assets/skills/compliance-guard/references/provenance.md +41 -2
- package/assets/skills/compliance-guard/references/sector-gates.md +3 -3
- package/assets/skills/compliance-guard/references/security-baseline.md +2 -2
- package/assets/skills/compliance-guard/references/trigger-map.md +5 -5
- package/assets/skills/compliance-guard/references/us.md +27 -21
- package/assets/skills/durable/SKILL.md +87 -79
- package/assets/skills/durable/references/agent-db-safety.md +69 -0
- package/assets/skills/durable/references/backups-and-runtime.md +19 -12
- package/assets/skills/durable/references/migrations-and-schema.md +13 -6
- package/assets/skills/evidence-led-ui/SKILL.md +69 -127
- package/assets/skills/evidence-led-ui/references/anti-defaults.md +107 -208
- package/assets/skills/evidence-led-ui/references/direction.md +124 -0
- package/assets/skills/evidence-led-ui/references/production-contract.md +8 -0
- package/assets/skills/evidence-led-ui/references/provenance.md +24 -1
- package/assets/skills/lean/SKILL.md +90 -71
- package/assets/skills/lean/references/memory-and-processes.md +3 -2
- package/assets/skills/lean/references/playbooks.md +37 -12
- package/assets/skills/refactoring/SKILL.md +24 -3
- package/assets/skills/refactoring/references/agent-pitfalls.md +4 -1
- package/assets/skills/refactoring/references/legacy.md +21 -0
- package/assets/skills/root-cause/SKILL.md +20 -10
- package/assets/skills/shared-language/SKILL.md +16 -14
- package/assets/skills/tdd/SKILL.md +27 -15
- package/dist/app-sidecar.js +203 -47
- package/dist/app-sidecar.js.map +1 -1
- package/dist/cli.js +17 -26
- package/dist/cli.js.map +1 -1
- package/dist/core/acceptance-checks.d.ts +48 -0
- package/dist/core/acceptance-checks.js +144 -0
- package/dist/core/acceptance-checks.js.map +1 -0
- package/dist/core/agent-session.d.ts +106 -72
- package/dist/core/agent-session.js +539 -399
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.d.ts +6 -5
- package/dist/core/agents.js.map +1 -1
- package/dist/core/ask-user.d.ts +90 -8
- package/dist/core/ask-user.js +124 -13
- package/dist/core/ask-user.js.map +1 -1
- package/dist/core/bundled-agents.js +1 -3
- package/dist/core/bundled-agents.js.map +1 -1
- package/dist/core/cache-diagnostics.d.ts +68 -0
- package/dist/core/cache-diagnostics.js +196 -0
- package/dist/core/cache-diagnostics.js.map +1 -0
- package/dist/core/cache-expiry.d.ts +87 -0
- package/dist/core/cache-expiry.js +111 -0
- package/dist/core/cache-expiry.js.map +1 -0
- package/dist/core/compaction/compactor.js +78 -48
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/plan-step-policy.d.ts +46 -0
- package/dist/core/compaction/plan-step-policy.js +57 -0
- package/dist/core/compaction/plan-step-policy.js.map +1 -0
- package/dist/core/destructive-git-guard.d.ts +90 -0
- package/dist/core/destructive-git-guard.js +871 -0
- package/dist/core/destructive-git-guard.js.map +1 -0
- package/dist/core/event-bus.d.ts +3 -0
- package/dist/core/event-bus.js +5 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/injection-detect.d.ts +38 -0
- package/dist/core/injection-detect.js +232 -0
- package/dist/core/injection-detect.js.map +1 -0
- package/dist/core/keep-awake.d.ts +88 -0
- package/dist/core/keep-awake.js +251 -0
- package/dist/core/keep-awake.js.map +1 -0
- package/dist/core/mcp/client.d.ts +72 -0
- package/dist/core/mcp/client.js +264 -41
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/content.js +6 -2
- package/dist/core/mcp/content.js.map +1 -1
- package/dist/core/mcp/store.d.ts +6 -1
- package/dist/core/mcp/store.js +12 -1
- package/dist/core/mcp/store.js.map +1 -1
- package/dist/core/mcp/types.d.ts +18 -0
- package/dist/core/model-unavailable.d.ts +14 -0
- package/dist/core/model-unavailable.js +23 -0
- package/dist/core/model-unavailable.js.map +1 -0
- package/dist/core/node-debugger.d.ts +148 -0
- package/dist/core/node-debugger.js +642 -0
- package/dist/core/node-debugger.js.map +1 -0
- package/dist/core/package-threats.d.ts +18 -0
- package/dist/core/package-threats.js +168 -0
- package/dist/core/package-threats.js.map +1 -0
- package/dist/core/persistent-shell.d.ts +58 -6
- package/dist/core/persistent-shell.js +331 -49
- package/dist/core/persistent-shell.js.map +1 -1
- package/dist/core/process-manager.d.ts +14 -0
- package/dist/core/process-manager.js +61 -0
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/progress/git-xp.js +8 -14
- package/dist/core/progress/git-xp.js.map +1 -1
- package/dist/core/session-history.d.ts +12 -0
- package/dist/core/session-history.js +27 -0
- package/dist/core/session-history.js.map +1 -1
- package/dist/core/session-manager.d.ts +13 -1
- package/dist/core/session-manager.js +38 -18
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-summary-index.d.ts +37 -0
- package/dist/core/session-summary-index.js +172 -0
- package/dist/core/session-summary-index.js.map +1 -0
- package/dist/core/settings-manager.d.ts +2 -0
- package/dist/core/settings-manager.js +10 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/shell-threats-popular-packages.d.ts +11 -0
- package/dist/core/shell-threats-popular-packages.js +675 -0
- package/dist/core/shell-threats-popular-packages.js.map +1 -0
- package/dist/core/shell-threats.d.ts +8 -0
- package/dist/core/shell-threats.js +186 -0
- package/dist/core/shell-threats.js.map +1 -0
- package/dist/core/skills.js +3 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/stream-rules.d.ts +30 -0
- package/dist/core/stream-rules.js +151 -0
- package/dist/core/stream-rules.js.map +1 -0
- package/dist/core/subagent-manager.d.ts +20 -5
- package/dist/core/subagent-manager.js +22 -8
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-receipt.d.ts +54 -0
- package/dist/core/subagent-receipt.js +276 -0
- package/dist/core/subagent-receipt.js.map +1 -0
- package/dist/core/subagent-turn-record.d.ts +2 -0
- package/dist/core/subagent-turn-record.js.map +1 -1
- package/dist/core/test-impact.d.ts +73 -0
- package/dist/core/test-impact.js +467 -0
- package/dist/core/test-impact.js.map +1 -0
- package/dist/core/thinking-level.d.ts +1 -1
- package/dist/core/thinking-level.js +1 -1
- package/dist/core/thinking-level.js.map +1 -1
- package/dist/core/verification-gate.d.ts +2 -0
- package/dist/core/verification-gate.js +4 -0
- package/dist/core/verification-gate.js.map +1 -1
- package/dist/core/verification-snapshot.js +3 -5
- package/dist/core/verification-snapshot.js.map +1 -1
- package/dist/core/workspace-guard.d.ts +18 -7
- package/dist/core/workspace-guard.js +227 -60
- package/dist/core/workspace-guard.js.map +1 -1
- package/dist/interactive.js +2 -1
- package/dist/interactive.js.map +1 -1
- package/dist/modes/subagent-worker-mode.js +34 -6
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/motion-agent/motion-agent.d.ts +6 -2
- package/dist/motion-agent/motion-agent.js +5 -7
- package/dist/motion-agent/motion-agent.js.map +1 -1
- package/dist/motion-agent/motion-prompt.d.ts +1 -1
- package/dist/motion-agent/motion-prompt.js +14 -19
- package/dist/motion-agent/motion-prompt.js.map +1 -1
- package/dist/motion-agent/motion-review.d.ts +10 -3
- package/dist/motion-agent/motion-review.js +15 -7
- package/dist/motion-agent/motion-review.js.map +1 -1
- package/dist/motion-agent/motion-studio-context.js +1 -1
- package/dist/motion-agent/motion-studio-context.js.map +1 -1
- package/dist/system-prompt.js +3 -1
- package/dist/system-prompt.js.map +1 -1
- package/dist/test-support/keep-alive.d.ts +14 -0
- package/dist/test-support/keep-alive.js +17 -0
- package/dist/test-support/keep-alive.js.map +1 -0
- package/dist/tools/ask-user.js +3 -3
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/bash-read-evidence.d.ts +10 -0
- package/dist/tools/bash-read-evidence.js +133 -0
- package/dist/tools/bash-read-evidence.js.map +1 -0
- package/dist/tools/bash.d.ts +10 -1
- package/dist/tools/bash.js +115 -7
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/debug.d.ts +54 -0
- package/dist/tools/debug.js +233 -0
- package/dist/tools/debug.js.map +1 -0
- package/dist/tools/edit.js +12 -4
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/goals.d.ts +1 -1
- package/dist/tools/index.d.ts +19 -2
- package/dist/tools/index.js +47 -7
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/prompt-hints.js +2 -0
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read-tracker.d.ts +5 -0
- package/dist/tools/read-tracker.js +19 -9
- package/dist/tools/read-tracker.js.map +1 -1
- package/dist/tools/read.js +3 -2
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/skill.js +5 -0
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/subagent-control.js +44 -8
- package/dist/tools/subagent-control.js.map +1 -1
- package/dist/tools/subagent-shared.d.ts +29 -8
- package/dist/tools/subagent-shared.js +45 -14
- package/dist/tools/subagent-shared.js.map +1 -1
- package/dist/tools/subagent.d.ts +8 -2
- package/dist/tools/subagent.js +28 -10
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/task-output.js +3 -2
- package/dist/tools/task-output.js.map +1 -1
- package/dist/tools/task-send.d.ts +1 -1
- package/dist/tools/task-send.js +15 -1
- package/dist/tools/task-send.js.map +1 -1
- package/dist/tools/tool-tiers.d.ts +2 -2
- package/dist/tools/tool-tiers.js +3 -2
- package/dist/tools/tool-tiers.js.map +1 -1
- package/dist/tools/truncate.d.ts +21 -0
- package/dist/tools/truncate.js +187 -0
- package/dist/tools/truncate.js.map +1 -1
- package/dist/tools/ui-adopt.js +2 -0
- package/dist/tools/ui-adopt.js.map +1 -1
- package/dist/ui/App.d.ts +0 -4
- package/dist/ui/App.js +5 -28
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +1 -0
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +1 -8
- package/dist/ui/hooks/useAgentLoop.js +1 -119
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/render.d.ts +0 -4
- package/dist/ui/render.js +0 -2
- package/dist/ui/render.js.map +1 -1
- package/dist/utils/git.d.ts +77 -0
- package/dist/utils/git.js +285 -21
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/github-ci.js +2 -1
- package/dist/utils/github-ci.js.map +1 -1
- package/dist/utils/github.js +11 -9
- package/dist/utils/github.js.map +1 -1
- package/dist/utils/image.d.ts +14 -0
- package/dist/utils/image.js +16 -0
- package/dist/utils/image.js.map +1 -1
- package/dist/utils/process.d.ts +20 -0
- package/dist/utils/process.js +98 -0
- package/dist/utils/process.js.map +1 -1
- package/package.json +5 -5
- package/assets/motion/references/motion-language.md +0 -128
- package/assets/motion/skills/video-qa/SKILL.md +0 -89
- package/dist/core/ideal-review-subagent.d.ts +0 -56
- package/dist/core/ideal-review-subagent.js +0 -112
- package/dist/core/ideal-review-subagent.js.map +0 -1
- package/dist/core/ideal-review.d.ts +0 -82
- package/dist/core/ideal-review.js +0 -242
- package/dist/core/ideal-review.js.map +0 -1
- package/dist/motion-agent/motion-check-tool.d.ts +0 -35
- package/dist/motion-agent/motion-check-tool.js +0 -514
- package/dist/motion-agent/motion-check-tool.js.map +0 -1
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
1
|
import { createHash } from "node:crypto";
|
|
3
2
|
import fs from "node:fs/promises";
|
|
4
3
|
import { constants } from "node:fs";
|
|
5
4
|
import path from "node:path";
|
|
6
|
-
import {
|
|
7
|
-
const exec = promisify(execFile);
|
|
5
|
+
import { runBackgroundGit } from "../utils/git.js";
|
|
8
6
|
const MAX_FILES = 10_000;
|
|
9
7
|
const MAX_BYTES = 128 * 1024 * 1024;
|
|
10
8
|
const MAX_MS = 5000;
|
|
@@ -17,9 +15,9 @@ const MAX_MS = 5000;
|
|
|
17
15
|
export async function captureVerificationSnapshot(cwd, editedFiles = []) {
|
|
18
16
|
const deadline = Date.now() + MAX_MS;
|
|
19
17
|
try {
|
|
20
|
-
const git = async (args) => (await
|
|
18
|
+
const git = async (args) => (await runBackgroundGit(args, {
|
|
21
19
|
cwd,
|
|
22
|
-
|
|
20
|
+
timeoutMs: Math.max(1, deadline - Date.now()),
|
|
23
21
|
maxBuffer: 2 * 1024 * 1024,
|
|
24
22
|
})).stdout;
|
|
25
23
|
const root = await fs.realpath((await git(["rev-parse", "--show-toplevel"])).trim());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-snapshot.js","sourceRoot":"","sources":["../../src/core/verification-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"verification-snapshot.js","sourceRoot":"","sources":["../../src/core/verification-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* allow-listed roots are blocked with an instructive tool error unless the
|
|
6
6
|
* user opted in via the `allowOutsideWorkspaceWrites` setting. The bash tool
|
|
7
7
|
* additionally refuses a tiny set of unambiguous filesystem disasters
|
|
8
|
-
* (recursive
|
|
9
|
-
* root, and mirror force-pushes) until the user
|
|
8
|
+
* (recursive removal of /, ~, $HOME, the workspace root or anything that
|
|
9
|
+
* contains them, a bare drive root, and mirror force-pushes) until the user
|
|
10
|
+
* explicitly confirms.
|
|
10
11
|
*
|
|
11
12
|
* Deliberately narrow: ordinary `rm -rf node_modules`, `git reset --hard`,
|
|
12
13
|
* etc. stay instructional (ask-first at the prompt level), exactly as today.
|
|
@@ -33,13 +34,23 @@ export interface WriteGuardResult {
|
|
|
33
34
|
*/
|
|
34
35
|
export declare function resolveWriteGuard(cwd: string, resolvedPath: string, settings?: WriteGuardSettings): WriteGuardResult;
|
|
35
36
|
/**
|
|
36
|
-
* Match only the unambiguous disasters
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
37
|
+
* Match only the unambiguous disasters, wherever they sit in the command —
|
|
38
|
+
* after `;`/`&&`/`||`/pipes, inside `if`/`for`/`while`/`{ }`/`( )`, behind
|
|
39
|
+
* wrappers (`sudo`, `env`, `timeout`, `nohup`, `nice`, `exec`, `time`,
|
|
40
|
+
* `xargs`, …), inside `bash -c`/`eval`/`pwsh -c`, and after a `cd`:
|
|
41
|
+
* - recursive `rm` (any flag spelling, any path form of the command) of a
|
|
42
|
+
* filesystem root, `~`/`$HOME`, the workspace root, a directory containing
|
|
43
|
+
* either, or the whole contents of one (`/*`, `cd ~ && rm -rf *`)
|
|
44
|
+
* - the same through PowerShell `Remove-Item -Recurse` and cmd `rd /s`
|
|
45
|
+
* - `find` deleting from root/home, or from the workspace with no filter
|
|
40
46
|
* - `git push --force --mirror` (mirror force-push rewrites every ref)
|
|
41
47
|
*
|
|
42
48
|
* Returns an error string telling the model to get explicit user confirmation,
|
|
43
|
-
* or null when the command is not catastrophic.
|
|
49
|
+
* or null when the command is not catastrophic. Pure: nothing is executed.
|
|
50
|
+
*
|
|
51
|
+
* Backslashes are read both ways: as bash escapes, and literally, as cmd.exe
|
|
52
|
+
* and PowerShell (the Windows fallbacks) read them, where `C:\Users\me` is a
|
|
53
|
+
* path rather than `C:Usersme`. Either reading hitting a protected directory
|
|
54
|
+
* blocks the command.
|
|
44
55
|
*/
|
|
45
56
|
export declare function isCatastrophicCommand(command: string, cwd: string): string | null;
|
|
@@ -2,6 +2,7 @@ import { realpathSync } from "node:fs";
|
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { getAppPaths } from "../config.js";
|
|
5
|
+
import { commandName, expandShellPath, walkShell, } from "./destructive-git-guard.js";
|
|
5
6
|
import { getTempRoots } from "./temp-paths.js";
|
|
6
7
|
/** True when `target` is `root` or contained within it. */
|
|
7
8
|
function isWithin(root, target) {
|
|
@@ -87,81 +88,247 @@ export function resolveWriteGuard(cwd, resolvedPath, settings) {
|
|
|
87
88
|
};
|
|
88
89
|
}
|
|
89
90
|
// ── Catastrophic command guard ─────────────────────────────
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
91
|
+
const CONFIRM_NOTE = "This command is irreversible and destroys data far beyond the workspace. " +
|
|
92
|
+
"Get explicit user confirmation first, then re-run it quoting the user's words " +
|
|
93
|
+
"authorizing it.";
|
|
94
|
+
/** Commands the guard inspects. `echo`/`printf` feed `… | xargs rm`. */
|
|
95
|
+
const INSPECTED = new Set([
|
|
96
|
+
"rm",
|
|
97
|
+
"rd",
|
|
98
|
+
"rmdir",
|
|
99
|
+
"del",
|
|
100
|
+
"erase",
|
|
101
|
+
"remove-item",
|
|
102
|
+
"ri",
|
|
103
|
+
"find",
|
|
104
|
+
"git",
|
|
105
|
+
"echo",
|
|
106
|
+
"printf",
|
|
107
|
+
]);
|
|
108
|
+
/** The directory a whole-contents glob empties: `X/*`, `X/.*` → X; `*`, `.*` → `.`. */
|
|
109
|
+
function globParent(target) {
|
|
110
|
+
if (target === "*" || target === ".*")
|
|
111
|
+
return ".";
|
|
112
|
+
const match = /^(.*)[\\/]\.?\*$/.exec(target);
|
|
113
|
+
if (!match)
|
|
114
|
+
return target;
|
|
115
|
+
return match[1] === "" ? "/" : (match[1] ?? target);
|
|
99
116
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (
|
|
117
|
+
function resolveTarget(target, runCwd) {
|
|
118
|
+
return path.resolve(runCwd, expandShellPath(target, runCwd));
|
|
119
|
+
}
|
|
120
|
+
/** A filesystem root (`/`, `C:\`), including a bare drive spec as written. */
|
|
121
|
+
function isRoot(target, resolved) {
|
|
122
|
+
return /^[A-Za-z]:[\\/]?$/.test(target) || resolved === path.parse(resolved).root;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Recursive removal of `rawTarget` is never acceptable without confirmation
|
|
126
|
+
* when it is a filesystem root, the home directory, the workspace root, or a
|
|
127
|
+
* directory containing either of the last two. `runCwd` is where the command
|
|
128
|
+
* runs (after any `cd`); `workspace` is the session's project root.
|
|
129
|
+
*/
|
|
130
|
+
function isCatastrophicRemovalTarget(rawTarget, runCwd, workspace) {
|
|
131
|
+
const target = globParent(rawTarget);
|
|
132
|
+
const resolved = resolveTarget(target, runCwd);
|
|
133
|
+
if (isRoot(target, resolved))
|
|
117
134
|
return true;
|
|
118
|
-
return
|
|
135
|
+
return [os.homedir(), workspace].some((protectedDir) => isWithin(resolved, path.resolve(protectedDir)));
|
|
136
|
+
}
|
|
137
|
+
/** `rm`: recursive flag in any spelling (`-r`, `-R`, `-rf`, `--recursive`, `-Recurse`) and operands. */
|
|
138
|
+
function parseRm(args) {
|
|
139
|
+
let recursive = false;
|
|
140
|
+
const targets = [];
|
|
141
|
+
let options = true;
|
|
142
|
+
for (const arg of args) {
|
|
143
|
+
if (options && arg === "--") {
|
|
144
|
+
options = false;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (options && arg.startsWith("--") && arg.length > 2) {
|
|
148
|
+
if ("--recursive".startsWith(arg) && arg.length >= 3)
|
|
149
|
+
recursive = true;
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (options && /^-[A-Za-z]+$/.test(arg)) {
|
|
153
|
+
if (/[rR]/.test(arg))
|
|
154
|
+
recursive = true;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
targets.push(arg);
|
|
158
|
+
}
|
|
159
|
+
return { recursive, targets };
|
|
160
|
+
}
|
|
161
|
+
const PS_PATH_PARAMS = /^-(?:path|literalpath|lp|pspath)$/i;
|
|
162
|
+
const PS_VALUE_PARAMS = /^-(?:filter|include|exclude|credential|stream)$/i;
|
|
163
|
+
const PS_RECURSE = /^-r(?:e(?:c(?:u(?:r(?:s(?:e)?)?)?)?)?)?$/i;
|
|
164
|
+
/** PowerShell `Remove-Item` (alias `ri`): `-Recurse` plus `-Path`/positional targets. */
|
|
165
|
+
function parseRemoveItem(args) {
|
|
166
|
+
const targets = [];
|
|
167
|
+
let recursive = false;
|
|
168
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
169
|
+
const arg = args[i] ?? "";
|
|
170
|
+
if (PS_RECURSE.test(arg))
|
|
171
|
+
recursive = true;
|
|
172
|
+
else if (PS_PATH_PARAMS.test(arg)) {
|
|
173
|
+
if (args[i + 1] !== undefined)
|
|
174
|
+
targets.push(args[i + 1] ?? "");
|
|
175
|
+
i += 1;
|
|
176
|
+
}
|
|
177
|
+
else if (PS_VALUE_PARAMS.test(arg))
|
|
178
|
+
i += 1;
|
|
179
|
+
else if (!arg.startsWith("-"))
|
|
180
|
+
targets.push(arg);
|
|
181
|
+
}
|
|
182
|
+
return { recursive, targets };
|
|
183
|
+
}
|
|
184
|
+
/** cmd.exe `rd /s`, `rmdir /s`, `del /s`, `erase /s`. */
|
|
185
|
+
function parseCmdRemove(args) {
|
|
186
|
+
return {
|
|
187
|
+
recursive: args.some((a) => /^\/s$/i.test(a)),
|
|
188
|
+
targets: args.filter((a) => !/^\/[A-Za-z]$/.test(a)),
|
|
189
|
+
};
|
|
119
190
|
}
|
|
191
|
+
/** find predicates that do not narrow which files match. */
|
|
192
|
+
const FIND_NON_FILTERS = new Set([
|
|
193
|
+
"-delete",
|
|
194
|
+
"-depth",
|
|
195
|
+
"-d",
|
|
196
|
+
"-mindepth",
|
|
197
|
+
"-maxdepth",
|
|
198
|
+
"-xdev",
|
|
199
|
+
"-mount",
|
|
200
|
+
"-print",
|
|
201
|
+
"-print0",
|
|
202
|
+
"-follow",
|
|
203
|
+
"-noleaf",
|
|
204
|
+
"-ignore_readdir_race",
|
|
205
|
+
]);
|
|
206
|
+
const FIND_EXEC = /^-(?:exec|execdir|ok|okdir)$/;
|
|
207
|
+
const DELETERS = new Set(["rm", "rmdir", "unlink", "shred"]);
|
|
120
208
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
|
|
209
|
+
* `find START… -delete` or `-exec rm …`. Blocks when a start is a root, home,
|
|
210
|
+
* or contains home — always; and when it is (or contains) the workspace with
|
|
211
|
+
* no narrowing test (`find . -name '*.log' -delete` is ordinary cleanup).
|
|
212
|
+
*/
|
|
213
|
+
function checkFind(call, workspace) {
|
|
214
|
+
const { args } = call;
|
|
215
|
+
let i = 0;
|
|
216
|
+
while (i < args.length && /^-(?:[HLP]|O\d)$/.test(args[i] ?? ""))
|
|
217
|
+
i += 1;
|
|
218
|
+
const starts = [];
|
|
219
|
+
while (i < args.length && !/^[-(!]/.test(args[i] ?? "")) {
|
|
220
|
+
starts.push(args[i] ?? "");
|
|
221
|
+
i += 1;
|
|
222
|
+
}
|
|
223
|
+
let deletes = false;
|
|
224
|
+
let filtered = false;
|
|
225
|
+
const rest = args.slice(i);
|
|
226
|
+
for (let j = 0; j < rest.length; j += 1) {
|
|
227
|
+
const arg = rest[j] ?? "";
|
|
228
|
+
if (arg === "-delete")
|
|
229
|
+
deletes = true;
|
|
230
|
+
if (FIND_EXEC.test(arg)) {
|
|
231
|
+
if (DELETERS.has(commandName(rest[j + 1] ?? "")))
|
|
232
|
+
deletes = true;
|
|
233
|
+
// Skip the exec'd command up to its `;` / `+` terminator.
|
|
234
|
+
while (j + 1 < rest.length && rest[j + 1] !== ";" && rest[j + 1] !== "+")
|
|
235
|
+
j += 1;
|
|
236
|
+
j += 1;
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
if ((arg.startsWith("-") && !FIND_NON_FILTERS.has(arg)) || arg === "!" || arg === "(")
|
|
240
|
+
filtered = true;
|
|
241
|
+
}
|
|
242
|
+
if (!deletes)
|
|
243
|
+
return null;
|
|
244
|
+
for (const start of starts.length > 0 ? starts : ["."]) {
|
|
245
|
+
const resolved = resolveTarget(start, call.cwd);
|
|
246
|
+
const severe = isRoot(start, resolved) || isWithin(resolved, path.resolve(os.homedir()));
|
|
247
|
+
const wipesWorkspace = !filtered && isWithin(resolved, path.resolve(workspace));
|
|
248
|
+
if (severe || wipesWorkspace) {
|
|
249
|
+
return `Refusing to run: find deletes everything under ${start}. ${CONFIRM_NOTE}`;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
/** `git push --force --mirror` (either order; `-f` counts as `--force`). */
|
|
255
|
+
function isMirrorForcePush(args) {
|
|
256
|
+
const push = args.indexOf("push");
|
|
257
|
+
if (push === -1)
|
|
258
|
+
return false;
|
|
259
|
+
const rest = args.slice(push + 1);
|
|
260
|
+
return (rest.includes("--mirror") &&
|
|
261
|
+
(rest.includes("--force") || rest.some((a) => /^-[A-Za-z]*f[A-Za-z]*$/.test(a))));
|
|
262
|
+
}
|
|
263
|
+
/** Operands an `echo`/`printf` would hand to a following `| xargs`. */
|
|
264
|
+
function echoedOperands(call) {
|
|
265
|
+
if (!call || (call.name !== "echo" && call.name !== "printf"))
|
|
266
|
+
return [];
|
|
267
|
+
return call.args.filter((a) => !/^-[neE]+$/.test(a));
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Match only the unambiguous disasters, wherever they sit in the command —
|
|
271
|
+
* after `;`/`&&`/`||`/pipes, inside `if`/`for`/`while`/`{ }`/`( )`, behind
|
|
272
|
+
* wrappers (`sudo`, `env`, `timeout`, `nohup`, `nice`, `exec`, `time`,
|
|
273
|
+
* `xargs`, …), inside `bash -c`/`eval`/`pwsh -c`, and after a `cd`:
|
|
274
|
+
* - recursive `rm` (any flag spelling, any path form of the command) of a
|
|
275
|
+
* filesystem root, `~`/`$HOME`, the workspace root, a directory containing
|
|
276
|
+
* either, or the whole contents of one (`/*`, `cd ~ && rm -rf *`)
|
|
277
|
+
* - the same through PowerShell `Remove-Item -Recurse` and cmd `rd /s`
|
|
278
|
+
* - `find` deleting from root/home, or from the workspace with no filter
|
|
125
279
|
* - `git push --force --mirror` (mirror force-push rewrites every ref)
|
|
126
280
|
*
|
|
127
281
|
* Returns an error string telling the model to get explicit user confirmation,
|
|
128
|
-
* or null when the command is not catastrophic.
|
|
282
|
+
* or null when the command is not catastrophic. Pure: nothing is executed.
|
|
283
|
+
*
|
|
284
|
+
* Backslashes are read both ways: as bash escapes, and literally, as cmd.exe
|
|
285
|
+
* and PowerShell (the Windows fallbacks) read them, where `C:\Users\me` is a
|
|
286
|
+
* path rather than `C:Usersme`. Either reading hitting a protected directory
|
|
287
|
+
* blocks the command.
|
|
129
288
|
*/
|
|
130
289
|
export function isCatastrophicCommand(command, cwd) {
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
290
|
+
const readings = command.includes("\\") ? [command, command.replaceAll("\\", "\\\\")] : [command];
|
|
291
|
+
for (const reading of readings) {
|
|
292
|
+
const blocked = checkCalls(walkShell(reading, cwd, (name) => INSPECTED.has(name.toLowerCase())), cwd);
|
|
293
|
+
if (blocked)
|
|
294
|
+
return blocked;
|
|
295
|
+
}
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
function checkCalls(calls, cwd) {
|
|
299
|
+
for (const [index, call] of calls.entries()) {
|
|
300
|
+
const name = call.name.toLowerCase();
|
|
301
|
+
if (name === "git") {
|
|
302
|
+
if (isMirrorForcePush(call.args)) {
|
|
303
|
+
return `Refusing to run: mirror force-push rewrites every ref on the remote. ${CONFIRM_NOTE}`;
|
|
146
304
|
}
|
|
305
|
+
continue;
|
|
147
306
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
307
|
+
if (name === "find") {
|
|
308
|
+
const blocked = checkFind(call, cwd);
|
|
309
|
+
if (blocked)
|
|
310
|
+
return blocked;
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
const parsed = name === "rm"
|
|
314
|
+
? parseRm(call.args)
|
|
315
|
+
: name === "remove-item" || name === "ri"
|
|
316
|
+
? parseRemoveItem(call.args)
|
|
317
|
+
: name === "rd" || name === "rmdir" || name === "del" || name === "erase"
|
|
318
|
+
? parseCmdRemove(call.args)
|
|
319
|
+
: null;
|
|
320
|
+
if (!parsed?.recursive)
|
|
321
|
+
continue;
|
|
322
|
+
// `echo ~ | xargs rm -rf`: the operands arrive on stdin from the echo.
|
|
323
|
+
const targets = call.viaXargs && parsed.targets.length === 0
|
|
324
|
+
? echoedOperands(calls[index - 1])
|
|
325
|
+
: parsed.targets;
|
|
153
326
|
for (const target of targets) {
|
|
154
|
-
if (isCatastrophicRemovalTarget(target, cwd)) {
|
|
155
|
-
return `Refusing to run: recursive removal of ${
|
|
327
|
+
if (isCatastrophicRemovalTarget(target, call.cwd, cwd)) {
|
|
328
|
+
return `Refusing to run: recursive removal of ${target}. ${CONFIRM_NOTE}`;
|
|
156
329
|
}
|
|
157
330
|
}
|
|
158
331
|
}
|
|
159
|
-
// git push --force --mirror (in either order; -f counts as --force)
|
|
160
|
-
if (/(?:^|[;&|]\s*)git\s+push\b/.test(command) &&
|
|
161
|
-
/\s--mirror\b/.test(command) &&
|
|
162
|
-
/\s(?:--force\b|-f\b)/.test(command)) {
|
|
163
|
-
return `Refusing to run: mirror force-push rewrites every ref on the remote. ${confirmNote}`;
|
|
164
|
-
}
|
|
165
332
|
return null;
|
|
166
333
|
}
|
|
167
334
|
//# sourceMappingURL=workspace-guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-guard.js","sourceRoot":"","sources":["../../src/core/workspace-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace-guard.js","sourceRoot":"","sources":["../../src/core/workspace-guard.ts"],"names":[],"mappings":"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"}
|
package/dist/interactive.js
CHANGED
|
@@ -32,7 +32,7 @@ export async function runInteractive(config) {
|
|
|
32
32
|
projectDir: cwd,
|
|
33
33
|
});
|
|
34
34
|
const goalModeRef = { current: "off" };
|
|
35
|
-
const { tools, processManager, lspManager } = await createTools(cwd, {
|
|
35
|
+
const { tools, processManager, lspManager, debugManager } = await createTools(cwd, {
|
|
36
36
|
skills,
|
|
37
37
|
provider,
|
|
38
38
|
model,
|
|
@@ -44,6 +44,7 @@ export async function runInteractive(config) {
|
|
|
44
44
|
process.on("exit", () => {
|
|
45
45
|
processManager.shutdownAll();
|
|
46
46
|
lspManager?.shutdownAll();
|
|
47
|
+
debugManager?.shutdown();
|
|
47
48
|
});
|
|
48
49
|
// Initialize messages and session
|
|
49
50
|
const messages = [];
|
package/dist/interactive.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,cAAc,GAEf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAiB;IACpD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAExC,0BAA0B;IAC1B,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;IACpC,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE5D,kDAAkD;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IAEzB,0FAA0F;IAC1F,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QAClC,eAAe,EAAE,KAAK,CAAC,SAAS;QAChC,UAAU,EAAE,GAAG;KAChB,CAAC,CAAC;IACH,MAAM,WAAW,GAA0B,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9D,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { createInterface } from "node:readline";
|
|
2
2
|
import { AgentSession } from "../core/agent-session.js";
|
|
3
|
-
import { isModelUnavailableError } from "../
|
|
4
|
-
import { boundSubAgentOutput, promptSubAgent, SUB_AGENT_MAX_TURN_EXTENSIONS, SUB_AGENT_TIMEOUT_MS, SUB_AGENT_TIMEOUT_RECOVERY_MS, } from "../tools/subagent-shared.js";
|
|
3
|
+
import { isModelUnavailableError } from "../core/model-unavailable.js";
|
|
4
|
+
import { boundSubAgentOutput, promptSubAgent, SUB_AGENT_MAX_TURN_EXTENSIONS, SUB_AGENT_TIMEOUT_MS, SUB_AGENT_TIMEOUT_RECOVERY_MS, subAgentThinkingLevel, } from "../tools/subagent-shared.js";
|
|
5
5
|
import { writeTurnRecord } from "../core/subagent-turn-record.js";
|
|
6
|
+
import { ReceiptRecorder } from "../core/subagent-receipt.js";
|
|
7
|
+
import { formatCheckResults, parseAcceptanceChecks, summarizeCheckResults, verifyAcceptanceChecks, } from "../core/acceptance-checks.js";
|
|
6
8
|
const TIMEOUT_RECOVERY_PROMPT = `Your execution time limit was reached and the active operation was stopped.
|
|
7
9
|
You have one final 60-second recovery turn. Do not call any tools. Immediately return the best concise answer you can from the evidence already in this conversation, in the format your task asked for. Clearly state what remains incomplete or unverified.`;
|
|
8
10
|
/**
|
|
@@ -103,6 +105,10 @@ export async function runSubagentWorkerMode() {
|
|
|
103
105
|
let recoveryOutput = "";
|
|
104
106
|
let recoveringAfterTimeout = false;
|
|
105
107
|
let producedToolCall = false;
|
|
108
|
+
// Engine-side record of this turn's tool calls → the turn's receipt.
|
|
109
|
+
const receipt = new ReceiptRecorder();
|
|
110
|
+
// The parent's acceptance checks for the current turn, decided at its end.
|
|
111
|
+
let turnChecks = [];
|
|
106
112
|
// This worker's LIFETIME totals — one initialize = one agent_id = one
|
|
107
113
|
// worker lifetime, so the durable turn record carries authoritative
|
|
108
114
|
// cumulative numbers an adopting parent can trust.
|
|
@@ -137,8 +143,15 @@ export async function runSubagentWorkerMode() {
|
|
|
137
143
|
});
|
|
138
144
|
for (const event of forwarded) {
|
|
139
145
|
activeSession.eventBus.on(event, (payload) => {
|
|
140
|
-
if (event === "tool_call_start")
|
|
146
|
+
if (event === "tool_call_start") {
|
|
141
147
|
producedToolCall = true;
|
|
148
|
+
const start = payload;
|
|
149
|
+
receipt.start(start.toolCallId, start.name, start.args);
|
|
150
|
+
}
|
|
151
|
+
else if (event === "tool_call_end") {
|
|
152
|
+
const end = payload;
|
|
153
|
+
receipt.end(end.toolCallId, end.result, end.isError);
|
|
154
|
+
}
|
|
142
155
|
if (event === "turn_end") {
|
|
143
156
|
turnCount++;
|
|
144
157
|
const usage = payload
|
|
@@ -166,7 +179,7 @@ export async function runSubagentWorkerMode() {
|
|
|
166
179
|
await next.initialize();
|
|
167
180
|
return next;
|
|
168
181
|
};
|
|
169
|
-
const runTurn = (task) => {
|
|
182
|
+
const runTurn = (task, checks) => {
|
|
170
183
|
if (!session)
|
|
171
184
|
throw new Error("Worker is not initialized");
|
|
172
185
|
if (state === "running")
|
|
@@ -175,6 +188,8 @@ export async function runSubagentWorkerMode() {
|
|
|
175
188
|
recoveryOutput = "";
|
|
176
189
|
recoveringAfterTimeout = false;
|
|
177
190
|
producedToolCall = false;
|
|
191
|
+
receipt.reset();
|
|
192
|
+
turnChecks = checks;
|
|
178
193
|
abortReason = undefined;
|
|
179
194
|
controller = new AbortController();
|
|
180
195
|
session.setSignal(controller.signal);
|
|
@@ -206,6 +221,9 @@ export async function runSubagentWorkerMode() {
|
|
|
206
221
|
...initializeOptions,
|
|
207
222
|
model: fallbackModel,
|
|
208
223
|
fallbackModel: undefined,
|
|
224
|
+
// The lowest rung of the PARENT model — the pinned model's rung
|
|
225
|
+
// may not exist on it.
|
|
226
|
+
thinkingLevel: subAgentThinkingLevel(initializeOptions.provider, fallbackModel),
|
|
209
227
|
};
|
|
210
228
|
session = await createSession(initializeOptions);
|
|
211
229
|
loopError = await promptSubAgent(session, task);
|
|
@@ -268,10 +286,20 @@ export async function runSubagentWorkerMode() {
|
|
|
268
286
|
* parent must never observe a terminal frame with no record behind it.
|
|
269
287
|
* Awaited inside the turn, so anything that waits for the turn (shutdown,
|
|
270
288
|
* stdin closing) also waits for the record. */
|
|
271
|
-
const completeTurn = async (
|
|
289
|
+
const completeTurn = async (turn) => {
|
|
290
|
+
const cwd = initializeOptions?.cwd ?? process.cwd();
|
|
291
|
+
const checkResults = verifyAcceptanceChecks(turnChecks, receipt.snapshot(), cwd);
|
|
292
|
+
const checksBlock = formatCheckResults(checkResults);
|
|
293
|
+
const receiptText = receipt.render(typeof turn.output === "string" ? turn.output : "", cwd);
|
|
294
|
+
const frame = {
|
|
295
|
+
...turn,
|
|
296
|
+
receipt: checksBlock ? `${receiptText}\n${checksBlock}` : receiptText,
|
|
297
|
+
...(checkResults.length > 0 && { acceptance: summarizeCheckResults(checkResults) }),
|
|
298
|
+
};
|
|
272
299
|
await writeTurnRecord(initializeOptions?.childSessionPath, {
|
|
273
300
|
status: frame.status ?? "failed",
|
|
274
301
|
output: typeof frame.output === "string" ? frame.output : undefined,
|
|
302
|
+
receipt: frame.receipt,
|
|
275
303
|
error: typeof frame.error === "string" ? frame.error : undefined,
|
|
276
304
|
model: typeof frame.model === "string" ? frame.model : undefined,
|
|
277
305
|
turn_count: turnCount,
|
|
@@ -307,7 +335,7 @@ export async function runSubagentWorkerMode() {
|
|
|
307
335
|
if (state === "running")
|
|
308
336
|
throw new Error("Worker already has an active turn");
|
|
309
337
|
acknowledge(command.request_id, { status: "running" });
|
|
310
|
-
runTurn(command.task);
|
|
338
|
+
runTurn(command.task, parseAcceptanceChecks(command.checks));
|
|
311
339
|
return;
|
|
312
340
|
case "queue_message": {
|
|
313
341
|
if (!session || state !== "running")
|