plumbbob 0.9.5 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +89 -87
- package/dist/cli-core.js +18 -8
- package/dist/cli.js +1 -1
- package/dist/lib/agents.js +26 -26
- package/dist/lib/buildlog.js +21 -11
- package/dist/lib/buildlogsync.js +8 -8
- package/dist/lib/check.js +14 -14
- package/dist/lib/commitbody.js +72 -0
- package/dist/lib/commitmsg.js +7 -7
- package/dist/lib/git.js +44 -15
- package/dist/lib/intent.js +20 -19
- package/dist/lib/latch.js +16 -16
- package/dist/lib/orient.js +36 -17
- package/dist/lib/reentry.js +3 -3
- package/dist/lib/settings.js +16 -16
- package/dist/lib/sidecar.js +70 -54
- package/dist/lib/templates.js +1 -1
- package/dist/verbs/abandon.js +122 -0
- package/dist/verbs/agent.js +25 -25
- package/dist/verbs/build.js +9 -9
- package/dist/verbs/check.js +6 -6
- package/dist/verbs/checkpoint.js +48 -47
- package/dist/verbs/doctor.js +35 -29
- package/dist/verbs/finish.js +27 -40
- package/dist/verbs/handoff.js +9 -8
- package/dist/verbs/init.js +9 -9
- package/dist/verbs/park.js +3 -3
- package/dist/verbs/recover.js +12 -12
- package/dist/verbs/revert.js +12 -12
- package/dist/verbs/spike.js +21 -21
- package/dist/verbs/start.js +49 -19
- package/dist/verbs/status.js +8 -8
- package/dist/verbs/turn.js +16 -16
- package/dist/verbs/use.js +4 -4
- package/node_modules/checkride/.claude-plugin/plugin.json +1 -1
- package/node_modules/checkride/CHANGELOG.md +401 -0
- package/node_modules/checkride/README.md +27 -9
- package/node_modules/checkride/dist/adapters.d.ts +12 -4
- package/node_modules/checkride/dist/adapters.d.ts.map +1 -1
- package/node_modules/checkride/dist/adapters.js +21 -1
- package/node_modules/checkride/dist/adapters.js.map +1 -1
- package/node_modules/checkride/dist/agent-setup/cursor.d.ts +9 -1
- package/node_modules/checkride/dist/agent-setup/cursor.d.ts.map +1 -1
- package/node_modules/checkride/dist/agent-setup/cursor.js +59 -1
- package/node_modules/checkride/dist/agent-setup/cursor.js.map +1 -1
- package/node_modules/checkride/dist/agent-setup/harness.d.ts +1 -1
- package/node_modules/checkride/dist/agent-setup/harness.d.ts.map +1 -1
- package/node_modules/checkride/dist/agent-setup/harness.js +10 -1
- package/node_modules/checkride/dist/agent-setup/harness.js.map +1 -1
- package/node_modules/checkride/dist/agent-setup/scripts.d.ts +23 -0
- package/node_modules/checkride/dist/agent-setup/scripts.d.ts.map +1 -1
- package/node_modules/checkride/dist/agent-setup/scripts.js +387 -82
- package/node_modules/checkride/dist/agent-setup/scripts.js.map +1 -1
- package/node_modules/checkride/dist/baseline/fallow.js +2 -2
- package/node_modules/checkride/dist/baseline/fingerprint.d.ts +14 -5
- package/node_modules/checkride/dist/baseline/fingerprint.d.ts.map +1 -1
- package/node_modules/checkride/dist/baseline/fingerprint.js +58 -5
- package/node_modules/checkride/dist/baseline/fingerprint.js.map +1 -1
- package/node_modules/checkride/dist/baseline/history.d.ts +98 -0
- package/node_modules/checkride/dist/baseline/history.d.ts.map +1 -0
- package/node_modules/checkride/dist/baseline/history.js +232 -0
- package/node_modules/checkride/dist/baseline/history.js.map +1 -0
- package/node_modules/checkride/dist/baseline/index.d.ts +4 -2
- package/node_modules/checkride/dist/baseline/index.d.ts.map +1 -1
- package/node_modules/checkride/dist/baseline/index.js +2 -1
- package/node_modules/checkride/dist/baseline/index.js.map +1 -1
- package/node_modules/checkride/dist/baseline/store.d.ts +30 -7
- package/node_modules/checkride/dist/baseline/store.d.ts.map +1 -1
- package/node_modules/checkride/dist/baseline/store.js +50 -16
- package/node_modules/checkride/dist/baseline/store.js.map +1 -1
- package/node_modules/checkride/dist/cli.d.ts +5 -1
- package/node_modules/checkride/dist/cli.d.ts.map +1 -1
- package/node_modules/checkride/dist/cli.js +98 -25
- package/node_modules/checkride/dist/cli.js.map +1 -1
- package/node_modules/checkride/dist/config.d.ts +33 -4
- package/node_modules/checkride/dist/config.d.ts.map +1 -1
- package/node_modules/checkride/dist/config.js +21 -6
- package/node_modules/checkride/dist/config.js.map +1 -1
- package/node_modules/checkride/dist/digest/digest.js +1 -1
- package/node_modules/checkride/dist/doctor.d.ts +2 -0
- package/node_modules/checkride/dist/doctor.d.ts.map +1 -1
- package/node_modules/checkride/dist/doctor.js +39 -1
- package/node_modules/checkride/dist/doctor.js.map +1 -1
- package/node_modules/checkride/dist/gate.d.ts +49 -4
- package/node_modules/checkride/dist/gate.d.ts.map +1 -1
- package/node_modules/checkride/dist/gate.js +143 -16
- package/node_modules/checkride/dist/gate.js.map +1 -1
- package/node_modules/checkride/dist/init.d.ts +8 -1
- package/node_modules/checkride/dist/init.d.ts.map +1 -1
- package/node_modules/checkride/dist/init.js +68 -7
- package/node_modules/checkride/dist/init.js.map +1 -1
- package/node_modules/checkride/dist/node-pin.d.ts +1 -1
- package/node_modules/checkride/dist/node-pin.js +1 -1
- package/node_modules/checkride/dist/orchestrator.d.ts +13 -0
- package/node_modules/checkride/dist/orchestrator.d.ts.map +1 -1
- package/node_modules/checkride/dist/orchestrator.js +118 -13
- package/node_modules/checkride/dist/orchestrator.js.map +1 -1
- package/node_modules/checkride/dist/pm/index.d.ts +1 -0
- package/node_modules/checkride/dist/pm/index.d.ts.map +1 -1
- package/node_modules/checkride/dist/pm/index.js.map +1 -1
- package/node_modules/checkride/dist/pm/launch.d.ts +23 -2
- package/node_modules/checkride/dist/pm/launch.d.ts.map +1 -1
- package/node_modules/checkride/dist/pm/launch.js +16 -0
- package/node_modules/checkride/dist/pm/launch.js.map +1 -1
- package/node_modules/checkride/dist/pm/translate.js +1 -1
- package/node_modules/checkride/dist/pm/translate.js.map +1 -1
- package/node_modules/checkride/dist/qa/mutation.d.ts +4 -4
- package/node_modules/checkride/dist/qa/mutation.js +4 -4
- package/node_modules/checkride/dist/recover.d.ts +48 -0
- package/node_modules/checkride/dist/recover.d.ts.map +1 -0
- package/node_modules/checkride/dist/recover.js +220 -0
- package/node_modules/checkride/dist/recover.js.map +1 -0
- package/node_modules/checkride/dist/smoke.d.ts +1 -1
- package/node_modules/checkride/dist/smoke.js +1 -1
- package/node_modules/checkride/dist/snippets.d.ts +1 -1
- package/node_modules/checkride/package.json +3 -2
- package/node_modules/checkride/schema/checkride.config.schema.json +9 -1
- package/node_modules/checkride/skills/check/SKILL.md +9 -1
- package/node_modules/checkride/templates/shared/styles/Repo/Drift.yml +41 -0
- package/node_modules/checkride/templates/shared/styles/Repo/Latin.yml +14 -0
- package/node_modules/checkride/templates/shared/styles/Repo/LyHyphen.yml +28 -0
- package/node_modules/checkride/templates/shared/styles/Repo/Minted.yml +33 -0
- package/node_modules/checkride/templates/shared/styles/Repo/ThereIs.yml +16 -0
- package/node_modules/checkride/templates/shared/styles/Repo/Weasel.yml +26 -0
- package/node_modules/checkride/templates/shared/vale.ini +34 -0
- package/package.json +13 -11
- package/skills/abandon/SKILL.md +20 -0
- package/skills/build/SKILL.md +69 -64
- package/skills/doctor/SKILL.md +11 -11
- package/skills/finish/SKILL.md +20 -19
- package/skills/harvest/SKILL.md +13 -12
- package/skills/park/SKILL.md +10 -10
- package/skills/plan/SKILL.md +63 -54
- package/skills/recover/SKILL.md +7 -7
- package/skills/refine/SKILL.md +18 -16
- package/skills/revert/SKILL.md +6 -6
- package/skills/spike/SKILL.md +9 -9
- package/skills/status/SKILL.md +5 -5
- package/skills/step/SKILL.md +17 -12
- package/skills/verify/SKILL.md +45 -40
- package/templates/build-log.md +7 -7
- package/templates/intent.md +49 -39
- package/templates/spike-report.md +10 -10
|
@@ -14,6 +14,14 @@
|
|
|
14
14
|
* - The events are lowercase and differently cut: `stop`, `afterFileEdit`
|
|
15
15
|
* (purpose-built, no matcher) and `preToolUse` (matched against Cursor's own
|
|
16
16
|
* tool names — `Shell`, `Read`, `Write`, `Grep`, `Delete`, `Task`, `MCP:*`).
|
|
17
|
+
* - Cursor cuts the shell out as its own pair of events, `beforeShellExecution`
|
|
18
|
+
* and `afterShellExecution`, whose matchers run against the **command string**
|
|
19
|
+
* rather than a tool name. Both guards take a second entry there to cover what
|
|
20
|
+
* the file tools never see; the gate does not, since it is not per-call.
|
|
21
|
+
*
|
|
22
|
+
* A hook name therefore maps to one *or more* entries, on different events. They
|
|
23
|
+
* share a name because they are one guard — `--remove-hook protect` takes out
|
|
24
|
+
* both — and share a script, since the script branches on `hook_event_name`.
|
|
17
25
|
*
|
|
18
26
|
* The gate entry carries three fields the Claude writer has no equivalent for —
|
|
19
27
|
* `timeout`, `loop_limit` and `failClosed` — because Cursor's defaults for all
|
|
@@ -29,7 +37,7 @@ import type { HookFile } from './files.js';
|
|
|
29
37
|
*/
|
|
30
38
|
export { CURSOR_HOOKS_FILE };
|
|
31
39
|
/** The Cursor hook events checkride writes under. */
|
|
32
|
-
type HookEvent = 'stop' | 'afterFileEdit' | 'preToolUse';
|
|
40
|
+
type HookEvent = 'stop' | 'afterFileEdit' | 'preToolUse' | 'beforeShellExecution' | 'afterShellExecution';
|
|
33
41
|
/**
|
|
34
42
|
* One Cursor hook entry. Unknown keys pass through untouched.
|
|
35
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/agent-setup/cursor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/agent-setup/cursor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAW7B,qDAAqD;AACrD,KAAK,SAAS,GAAG,MAAM,GAAG,eAAe,GAAG,YAAY,GAAG,sBAAsB,GAAG,qBAAqB,CAAC;AAE1G;;;;;GAKG;AACH,KAAK,UAAU,GAAG;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,iFAAiF;AACjF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5E,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAoL5B;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,WAAgB,EAAE,KAAK,GAAE,SAAS,MAAM,EAAe,GAAG,WAAW,CAK7G;AAgBD,6FAA6F;AAC7F,wBAAgB,iBAAiB,CAC/B,MAAM,GAAE,WAAgB,EACxB,KAAK,GAAE,SAAS,MAAM,EAAe,GACpC,WAAW,CAIb;AAYD,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAErF"}
|
|
@@ -14,6 +14,14 @@
|
|
|
14
14
|
* - The events are lowercase and differently cut: `stop`, `afterFileEdit`
|
|
15
15
|
* (purpose-built, no matcher) and `preToolUse` (matched against Cursor's own
|
|
16
16
|
* tool names — `Shell`, `Read`, `Write`, `Grep`, `Delete`, `Task`, `MCP:*`).
|
|
17
|
+
* - Cursor cuts the shell out as its own pair of events, `beforeShellExecution`
|
|
18
|
+
* and `afterShellExecution`, whose matchers run against the **command string**
|
|
19
|
+
* rather than a tool name. Both guards take a second entry there to cover what
|
|
20
|
+
* the file tools never see; the gate does not, since it is not per-call.
|
|
21
|
+
*
|
|
22
|
+
* A hook name therefore maps to one *or more* entries, on different events. They
|
|
23
|
+
* share a name because they are one guard — `--remove-hook protect` takes out
|
|
24
|
+
* both — and share a script, since the script branches on `hook_event_name`.
|
|
17
25
|
*
|
|
18
26
|
* The gate entry carries three fields the Claude writer has no equivalent for —
|
|
19
27
|
* `timeout`, `loop_limit` and `failClosed` — because Cursor's defaults for all
|
|
@@ -50,11 +58,38 @@ const SCHEMA_VERSION = 1;
|
|
|
50
58
|
*/
|
|
51
59
|
const run = (interpreter, file) => `${interpreter} "\${CURSOR_PROJECT_DIR:-.}/${file}"`;
|
|
52
60
|
/**
|
|
53
|
-
* Cursor's file-mutating tool names.
|
|
61
|
+
* Cursor's file-mutating tool names. Cursor has no separate `Edit` tool — `Write`
|
|
54
62
|
* covers both creating and modifying — and `Delete` can remove an accounting
|
|
55
63
|
* file just as effectively as a write can overwrite it.
|
|
56
64
|
*/
|
|
57
65
|
const EDIT_TOOLS = 'Write|Delete';
|
|
66
|
+
/**
|
|
67
|
+
* Commands `protect` bothers to parse: the ones that name an accounting path at
|
|
68
|
+
* all. `beforeShellExecution` matches its `matcher` against the **full command
|
|
69
|
+
* string**, and that is the whole reason a shell guard is affordable here.
|
|
70
|
+
*
|
|
71
|
+
* checkride's standing objection to matching a shell tool is that a guard firing
|
|
72
|
+
* on a wrong parse is worse than a known hole. Filtering first turns the blast
|
|
73
|
+
* radius from "every command the agent runs" into "commands that already mention
|
|
74
|
+
* `checkride.baseline.json` or `.check`" — and inside that set the script still
|
|
75
|
+
* denies only on demonstrated write intent. Reads land here too and are allowed;
|
|
76
|
+
* they have to be, because triage reads these files.
|
|
77
|
+
*/
|
|
78
|
+
const ACCOUNTING_PATHS = 'checkride\\.baseline\\.json|\\.check\\b';
|
|
79
|
+
/**
|
|
80
|
+
* Commands `dirty` reads as having written a file: a `>`/`>>` redirect, or one of
|
|
81
|
+
* the mutating verbs. The negative lookahead on `&` is load-bearing — without it
|
|
82
|
+
* the `2>&1` on the end of half the agent's commands marks every turn dirty and
|
|
83
|
+
* the gate stops skipping anything.
|
|
84
|
+
*
|
|
85
|
+
* Heuristic on purpose, and biased toward matching: a false positive costs one
|
|
86
|
+
* pipeline run on a turn that changed nothing, while a false negative is the
|
|
87
|
+
* status quo — a shell-written file that no gate ever sees. Only the first of
|
|
88
|
+
* those is recoverable by running the gate.
|
|
89
|
+
*/
|
|
90
|
+
const SHELL_WRITES = '>>?\\s*[^&\\s>]' +
|
|
91
|
+
'|(^|[\\s;&|(])(rm|mv|cp|tee|sed|truncate|dd|patch|install|shred|ln)(\\s|$)' +
|
|
92
|
+
'|(^|[\\s;&|(])git\\s+(apply|checkout|restore|stash|clean|reset|revert|switch|merge|rebase|pull|cherry-pick)(\\s|$)';
|
|
58
93
|
/**
|
|
59
94
|
* Cursor's defaults are tuned for observers; the gate is not one, so all three
|
|
60
95
|
* of its non-command fields are set against the default rather than with it:
|
|
@@ -91,6 +126,17 @@ function hookSpecs() {
|
|
|
91
126
|
sentinels: [DIRTY_SCRIPT_FILE],
|
|
92
127
|
command: run('sh', DIRTY_SCRIPT_FILE),
|
|
93
128
|
},
|
|
129
|
+
{
|
|
130
|
+
// The shell half of the edit marker. `afterFileEdit` sees only the file
|
|
131
|
+
// tools, so a turn that wrote through the shell alone used to skip the
|
|
132
|
+
// gate entirely. The matcher does all the deciding here — the script is
|
|
133
|
+
// the same unconditional `touch` either event reaches it through.
|
|
134
|
+
name: 'dirty',
|
|
135
|
+
event: 'afterShellExecution',
|
|
136
|
+
matcher: SHELL_WRITES,
|
|
137
|
+
sentinels: [DIRTY_SCRIPT_FILE],
|
|
138
|
+
command: run('sh', DIRTY_SCRIPT_FILE),
|
|
139
|
+
},
|
|
94
140
|
{
|
|
95
141
|
name: 'protect',
|
|
96
142
|
event: 'preToolUse',
|
|
@@ -98,6 +144,18 @@ function hookSpecs() {
|
|
|
98
144
|
sentinels: [PROTECT_SCRIPT_FILE],
|
|
99
145
|
command: run('node', PROTECT_SCRIPT_FILE),
|
|
100
146
|
},
|
|
147
|
+
{
|
|
148
|
+
// The shell half of the same guard. A tool-name matcher cannot see
|
|
149
|
+
// `echo … > checkride.baseline.json`, because that is a shell call and not
|
|
150
|
+
// a `Write`; `beforeShellExecution` is where it becomes visible. Same
|
|
151
|
+
// script, same fail-open default — see `protectScript` in `./scripts.ts`
|
|
152
|
+
// for why the parse behind it refuses to guess.
|
|
153
|
+
name: 'protect',
|
|
154
|
+
event: 'beforeShellExecution',
|
|
155
|
+
matcher: ACCOUNTING_PATHS,
|
|
156
|
+
sentinels: [PROTECT_SCRIPT_FILE],
|
|
157
|
+
command: run('node', PROTECT_SCRIPT_FILE),
|
|
158
|
+
},
|
|
101
159
|
];
|
|
102
160
|
}
|
|
103
161
|
/** True when an entry belongs to `spec` (matched by any of its sentinels). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agent-setup/cursor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agent-setup/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* what makes a new harness a description rather than a copy: a `HarnessSpec`
|
|
9
9
|
* plus a merge function, and nothing else.
|
|
10
10
|
*/
|
|
11
|
-
import type
|
|
11
|
+
import { type HarnessName } from '../gate.js';
|
|
12
12
|
import { type PackageManager } from '../pm/index.js';
|
|
13
13
|
import type { HookFile } from './files.js';
|
|
14
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/agent-setup/harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/agent-setup/harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAwB,KAAK,cAAc,EAAa,MAAM,gBAAgB,CAAC;AACtF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C;;;;GAIG;AACH,eAAO,MAAM,UAAU,uCAAwC,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;OASG;IACH,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C;;;;;OAKG;IACH,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,cAAc,KAAK,CAAC,CAAC;IAClF,sEAAsE;IACtE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EACtD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAyDrB"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* what makes a new harness a description rather than a copy: a `HarnessSpec`
|
|
9
9
|
* plus a merge function, and nothing else.
|
|
10
10
|
*/
|
|
11
|
+
import { gatePreflight } from '../gate.js';
|
|
11
12
|
import { detectPackageManager, runScript } from '../pm/index.js';
|
|
12
13
|
import { dropFile, putFile, putJson } from './files.js';
|
|
13
14
|
import { dirtyScript, gateScript, protectScript } from './scripts.js';
|
|
@@ -54,12 +55,20 @@ export async function writeHarnessHooks(cwd, spec, opts) {
|
|
|
54
55
|
const dryRun = opts.dryRun ?? false;
|
|
55
56
|
const gone = opts.remove ?? [];
|
|
56
57
|
const names = opts.hooks.filter((name) => !gone.includes(name));
|
|
58
|
+
// Read on every write, which is what makes the preflight the one seam that
|
|
59
|
+
// survives a refresh: `hooks add` rewrites the script and re-points the
|
|
60
|
+
// harness config, and re-derives this from the repo's own config each time.
|
|
61
|
+
const preflight = gatePreflight(cwd);
|
|
57
62
|
const bodies = {
|
|
58
63
|
// The gate guards on the edit marker only when the hook that sets it is
|
|
59
64
|
// written too; alone, the guard would disarm the gate entirely. Removing
|
|
60
65
|
// `dirty` therefore rewrites a surviving gate unguarded, which is why the
|
|
61
66
|
// config merge and the script bodies both read the post-removal selection.
|
|
62
|
-
gate: () => gateScript(pm, {
|
|
67
|
+
gate: () => gateScript(pm, {
|
|
68
|
+
harness: spec.name,
|
|
69
|
+
dirtyGuard: names.includes('dirty'),
|
|
70
|
+
...(preflight === null ? {} : { preflight }),
|
|
71
|
+
}),
|
|
63
72
|
dirty: dirtyScript,
|
|
64
73
|
protect: protectScript,
|
|
65
74
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/agent-setup/harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/agent-setup/harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,10 +25,17 @@ import { type PackageManager } from '../pm/index.js';
|
|
|
25
25
|
* makes the gate conditional on the edit marker, so pure-conversation turns
|
|
26
26
|
* don't pay for a full pipeline run. Without the marker hook the guard would
|
|
27
27
|
* disarm the gate entirely, so a `--hook gate` selection writes it unguarded.
|
|
28
|
+
*
|
|
29
|
+
* `preflight` is the repo's own script, from `gate.preflight` in
|
|
30
|
+
* checkride.config.json, baked in here rather than looked up at run time — see
|
|
31
|
+
* {@link preflight} and `../gate.ts` `gatePreflight`. It runs *before* the edit
|
|
32
|
+
* marker is consulted, because a repo that cannot run the gate at all wants to
|
|
33
|
+
* say so on every turn, not only on the ones that edited a file.
|
|
28
34
|
*/
|
|
29
35
|
export declare function gateScript(pm: PackageManager, opts: {
|
|
30
36
|
harness: HarnessName;
|
|
31
37
|
dirtyGuard?: boolean;
|
|
38
|
+
preflight?: string;
|
|
32
39
|
}): string;
|
|
33
40
|
/**
|
|
34
41
|
* The dirty script: mark that this turn edited a file. A stop hook fires on
|
|
@@ -48,11 +55,27 @@ export declare function dirtyScript(): string;
|
|
|
48
55
|
* matched — reads are never denied, because triage depends on reading `.check/`
|
|
49
56
|
* artifacts.
|
|
50
57
|
*
|
|
58
|
+
* Two Cursor events land here. `preToolUse` carries a file-tool call, whose
|
|
59
|
+
* target is read from {@link PATH_KEYS}. `beforeShellExecution` carries a
|
|
60
|
+
* command line, which is scanned for a write *to* an accounting path — the gap
|
|
61
|
+
* a tool-name matcher cannot close, since `echo … > checkride.baseline.json` is
|
|
62
|
+
* a shell call and not a `Write`.
|
|
63
|
+
*
|
|
64
|
+
* The command scan is deliberately timid, because a guard that fires on a wrong
|
|
65
|
+
* parse is worse than a known hole. It denies only on demonstrated write intent
|
|
66
|
+
* — a `>`/`>>` redirect target, or a positional argument of a known mutating
|
|
67
|
+
* verb — and anything it cannot read that way is allowed. `cat`, `grep`, `jq`
|
|
68
|
+
* and `cp … /tmp/x` over `.check/` all pass, which they must: triage reads those
|
|
69
|
+
* artifacts. The hook's own `matcher` narrows the input further, so a command
|
|
70
|
+
* that never names an accounting path is not parsed at all.
|
|
71
|
+
*
|
|
51
72
|
* **Cursor only.** Claude Code enforces the same paths through
|
|
52
73
|
* `permissions.deny`, which is checked below the hook layer and costs nothing
|
|
53
74
|
* per tool call, so it needs no script. Cursor has no documented equivalent —
|
|
54
75
|
* its config is hooks — so the script survives for the harness that still
|
|
55
76
|
* requires one. If Cursor grows a file-path deny list, this file goes away.
|
|
77
|
+
* (Claude Code's deny rules have the same shell-redirect hole and no script to
|
|
78
|
+
* close it with; that half of the gap is still open. See docs/cursor.md.)
|
|
56
79
|
*/
|
|
57
80
|
export declare function protectScript(): string;
|
|
58
81
|
//# sourceMappingURL=scripts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../src/agent-setup/scripts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../src/agent-setup/scripts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAgC,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAe,KAAK,cAAc,EAAa,MAAM,gBAAgB,CAAC;AA4T7E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACvE,MAAM,CAuBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAepC;AA6DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,aAAa,IAAI,MAAM,CA+ItC"}
|