agy-worker-mcp 0.3.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/CHANGELOG.md +141 -0
- package/LICENSE +21 -0
- package/README.md +309 -0
- package/commands/agy-ceiling.md +31 -0
- package/dist/broker/blockers.d.ts +86 -0
- package/dist/broker/blockers.d.ts.map +1 -0
- package/dist/broker/blockers.js +390 -0
- package/dist/broker/blockers.js.map +1 -0
- package/dist/broker/outcome.d.ts +85 -0
- package/dist/broker/outcome.d.ts.map +1 -0
- package/dist/broker/outcome.js +147 -0
- package/dist/broker/outcome.js.map +1 -0
- package/dist/broker/reconcile.d.ts +74 -0
- package/dist/broker/reconcile.d.ts.map +1 -0
- package/dist/broker/reconcile.js +415 -0
- package/dist/broker/reconcile.js.map +1 -0
- package/dist/broker/result.d.ts +88 -0
- package/dist/broker/result.d.ts.map +1 -0
- package/dist/broker/result.js +234 -0
- package/dist/broker/result.js.map +1 -0
- package/dist/broker/verify.d.ts +52 -0
- package/dist/broker/verify.d.ts.map +1 -0
- package/dist/broker/verify.js +174 -0
- package/dist/broker/verify.js.map +1 -0
- package/dist/contract/errors.d.ts +119 -0
- package/dist/contract/errors.d.ts.map +1 -0
- package/dist/contract/errors.js +99 -0
- package/dist/contract/errors.js.map +1 -0
- package/dist/contract/index.d.ts +10 -0
- package/dist/contract/index.d.ts.map +1 -0
- package/dist/contract/index.js +10 -0
- package/dist/contract/index.js.map +1 -0
- package/dist/contract/paths.d.ts +139 -0
- package/dist/contract/paths.d.ts.map +1 -0
- package/dist/contract/paths.js +359 -0
- package/dist/contract/paths.js.map +1 -0
- package/dist/contract/schema.sql +64 -0
- package/dist/contract/types.d.ts +1113 -0
- package/dist/contract/types.d.ts.map +1 -0
- package/dist/contract/types.js +114 -0
- package/dist/contract/types.js.map +1 -0
- package/dist/events/cursor.d.ts +65 -0
- package/dist/events/cursor.d.ts.map +1 -0
- package/dist/events/cursor.js +286 -0
- package/dist/events/cursor.js.map +1 -0
- package/dist/events/detect.d.ts +58 -0
- package/dist/events/detect.d.ts.map +1 -0
- package/dist/events/detect.js +183 -0
- package/dist/events/detect.js.map +1 -0
- package/dist/events/normalize.d.ts +30 -0
- package/dist/events/normalize.d.ts.map +1 -0
- package/dist/events/normalize.js +158 -0
- package/dist/events/normalize.js.map +1 -0
- package/dist/events/parse.d.ts +41 -0
- package/dist/events/parse.d.ts.map +1 -0
- package/dist/events/parse.js +89 -0
- package/dist/events/parse.js.map +1 -0
- package/dist/gate/bind.d.ts +28 -0
- package/dist/gate/bind.d.ts.map +1 -0
- package/dist/gate/bind.js +154 -0
- package/dist/gate/bind.js.map +1 -0
- package/dist/gate/gate.d.ts +139 -0
- package/dist/gate/gate.d.ts.map +1 -0
- package/dist/gate/gate.js +488 -0
- package/dist/gate/gate.js.map +1 -0
- package/dist/gate/hooks-file.d.ts +55 -0
- package/dist/gate/hooks-file.d.ts.map +1 -0
- package/dist/gate/hooks-file.js +104 -0
- package/dist/gate/hooks-file.js.map +1 -0
- package/dist/gate.d.ts +3 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +20 -0
- package/dist/gate.js.map +1 -0
- package/dist/policy/ceiling-review.d.ts +22 -0
- package/dist/policy/ceiling-review.d.ts.map +1 -0
- package/dist/policy/ceiling-review.js +170 -0
- package/dist/policy/ceiling-review.js.map +1 -0
- package/dist/policy/ceiling.d.ts +128 -0
- package/dist/policy/ceiling.d.ts.map +1 -0
- package/dist/policy/ceiling.js +273 -0
- package/dist/policy/ceiling.js.map +1 -0
- package/dist/policy/containment.d.ts +100 -0
- package/dist/policy/containment.d.ts.map +1 -0
- package/dist/policy/containment.js +1071 -0
- package/dist/policy/containment.js.map +1 -0
- package/dist/policy/hard-deny.d.ts +28 -0
- package/dist/policy/hard-deny.d.ts.map +1 -0
- package/dist/policy/hard-deny.js +78 -0
- package/dist/policy/hard-deny.js.map +1 -0
- package/dist/policy/profiles.d.ts +82 -0
- package/dist/policy/profiles.d.ts.map +1 -0
- package/dist/policy/profiles.js +317 -0
- package/dist/policy/profiles.js.map +1 -0
- package/dist/policy/rules.d.ts +138 -0
- package/dist/policy/rules.d.ts.map +1 -0
- package/dist/policy/rules.js +1180 -0
- package/dist/policy/rules.js.map +1 -0
- package/dist/policy/seatbelt.d.ts +32 -0
- package/dist/policy/seatbelt.d.ts.map +1 -0
- package/dist/policy/seatbelt.js +59 -0
- package/dist/policy/seatbelt.js.map +1 -0
- package/dist/policy/tools.d.ts +36 -0
- package/dist/policy/tools.d.ts.map +1 -0
- package/dist/policy/tools.js +94 -0
- package/dist/policy/tools.js.map +1 -0
- package/dist/runner/gate-watchdog.d.ts +93 -0
- package/dist/runner/gate-watchdog.d.ts.map +1 -0
- package/dist/runner/gate-watchdog.js +153 -0
- package/dist/runner/gate-watchdog.js.map +1 -0
- package/dist/runner/idle.d.ts +51 -0
- package/dist/runner/idle.d.ts.map +1 -0
- package/dist/runner/idle.js +81 -0
- package/dist/runner/idle.js.map +1 -0
- package/dist/runner/inbox.d.ts +56 -0
- package/dist/runner/inbox.d.ts.map +1 -0
- package/dist/runner/inbox.js +134 -0
- package/dist/runner/inbox.js.map +1 -0
- package/dist/runner/reap.d.ts +65 -0
- package/dist/runner/reap.d.ts.map +1 -0
- package/dist/runner/reap.js +168 -0
- package/dist/runner/reap.js.map +1 -0
- package/dist/runner/runner.d.ts +51 -0
- package/dist/runner/runner.d.ts.map +1 -0
- package/dist/runner/runner.js +289 -0
- package/dist/runner/runner.js.map +1 -0
- package/dist/runner/spawn.d.ts +98 -0
- package/dist/runner/spawn.d.ts.map +1 -0
- package/dist/runner/spawn.js +230 -0
- package/dist/runner/spawn.js.map +1 -0
- package/dist/runner/verify.d.ts +24 -0
- package/dist/runner/verify.d.ts.map +1 -0
- package/dist/runner/verify.js +108 -0
- package/dist/runner/verify.js.map +1 -0
- package/dist/runner.d.ts +3 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +15 -0
- package/dist/runner.js.map +1 -0
- package/dist/server/context.d.ts +41 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +59 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/instructions.d.ts +13 -0
- package/dist/server/instructions.d.ts.map +1 -0
- package/dist/server/instructions.js +121 -0
- package/dist/server/instructions.js.map +1 -0
- package/dist/server/server.d.ts +20 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +55 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/tools/cancel.d.ts +24 -0
- package/dist/server/tools/cancel.d.ts.map +1 -0
- package/dist/server/tools/cancel.js +59 -0
- package/dist/server/tools/cancel.js.map +1 -0
- package/dist/server/tools/capabilities.d.ts +36 -0
- package/dist/server/tools/capabilities.d.ts.map +1 -0
- package/dist/server/tools/capabilities.js +116 -0
- package/dist/server/tools/capabilities.js.map +1 -0
- package/dist/server/tools/ceiling.d.ts +31 -0
- package/dist/server/tools/ceiling.d.ts.map +1 -0
- package/dist/server/tools/ceiling.js +121 -0
- package/dist/server/tools/ceiling.js.map +1 -0
- package/dist/server/tools/index.d.ts +38 -0
- package/dist/server/tools/index.d.ts.map +1 -0
- package/dist/server/tools/index.js +115 -0
- package/dist/server/tools/index.js.map +1 -0
- package/dist/server/tools/listJobs.d.ts +30 -0
- package/dist/server/tools/listJobs.d.ts.map +1 -0
- package/dist/server/tools/listJobs.js +37 -0
- package/dist/server/tools/listJobs.js.map +1 -0
- package/dist/server/tools/logs.d.ts +31 -0
- package/dist/server/tools/logs.d.ts.map +1 -0
- package/dist/server/tools/logs.js +96 -0
- package/dist/server/tools/logs.js.map +1 -0
- package/dist/server/tools/result.d.ts +32 -0
- package/dist/server/tools/result.d.ts.map +1 -0
- package/dist/server/tools/result.js +95 -0
- package/dist/server/tools/result.js.map +1 -0
- package/dist/server/tools/send.d.ts +37 -0
- package/dist/server/tools/send.d.ts.map +1 -0
- package/dist/server/tools/send.js +71 -0
- package/dist/server/tools/send.js.map +1 -0
- package/dist/server/tools/sessions.d.ts +28 -0
- package/dist/server/tools/sessions.d.ts.map +1 -0
- package/dist/server/tools/sessions.js +54 -0
- package/dist/server/tools/sessions.js.map +1 -0
- package/dist/server/tools/start.d.ts +107 -0
- package/dist/server/tools/start.d.ts.map +1 -0
- package/dist/server/tools/start.js +482 -0
- package/dist/server/tools/start.js.map +1 -0
- package/dist/server/tools/wait.d.ts +29 -0
- package/dist/server/tools/wait.d.ts.map +1 -0
- package/dist/server/tools/wait.js +120 -0
- package/dist/server/tools/wait.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +17 -0
- package/dist/server.js.map +1 -0
- package/dist/setup/install.d.ts +52 -0
- package/dist/setup/install.d.ts.map +1 -0
- package/dist/setup/install.js +108 -0
- package/dist/setup/install.js.map +1 -0
- package/dist/setup.d.ts +3 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +24 -0
- package/dist/setup.js.map +1 -0
- package/dist/store/db.d.ts +49 -0
- package/dist/store/db.d.ts.map +1 -0
- package/dist/store/db.js +101 -0
- package/dist/store/db.js.map +1 -0
- package/dist/store/jobs.d.ts +45 -0
- package/dist/store/jobs.d.ts.map +1 -0
- package/dist/store/jobs.js +150 -0
- package/dist/store/jobs.js.map +1 -0
- package/dist/store/locks.d.ts +60 -0
- package/dist/store/locks.d.ts.map +1 -0
- package/dist/store/locks.js +172 -0
- package/dist/store/locks.js.map +1 -0
- package/dist/store/sessions.d.ts +37 -0
- package/dist/store/sessions.d.ts.map +1 -0
- package/dist/store/sessions.js +117 -0
- package/dist/store/sessions.js.map +1 -0
- package/dist/trace/digest.d.ts +77 -0
- package/dist/trace/digest.d.ts.map +1 -0
- package/dist/trace/digest.js +481 -0
- package/dist/trace/digest.js.map +1 -0
- package/package.json +68 -0
- package/skills/agy-ceiling/SKILL.md +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/policy/rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Our own macOS seatbelt profile (0.3.0 PR6; measured in M9).
|
|
3
|
+
*
|
|
4
|
+
* Why not agy's sandbox: measured on agy 1.1.24 (M7), it refuses every shell
|
|
5
|
+
* write inside the workspace, so "runs, but contained" was never on offer —
|
|
6
|
+
* only "does not run". `sandbox-exec` with a profile of our own gives the
|
|
7
|
+
* missing middle: the gate keeps judging intent (which command, which rule),
|
|
8
|
+
* the kernel keeps the command's *effects* inside `write_roots`, including
|
|
9
|
+
* writes made through an allowed interpreter (`python3 -c "open(...)"`) that
|
|
10
|
+
* a string classifier cannot see.
|
|
11
|
+
*
|
|
12
|
+
* How it is applied: M9 showed the PreToolUse hook's `overwrite.CommandLine`
|
|
13
|
+
* is honoured (the executed command changes; the model and the event stream
|
|
14
|
+
* still see the original). So the gate rewrites an allowed `run_command` to
|
|
15
|
+
* `sandbox-exec -p '<profile>' /bin/sh -c '<original>'` and sets
|
|
16
|
+
* `BypassSandbox: true` so agy's own profile stays out of the way.
|
|
17
|
+
*
|
|
18
|
+
* Scope is deliberately narrow: **file writes only**. Reads are the gate's and
|
|
19
|
+
* `read_roots`' business; network stays open unless the ceiling's exceptions
|
|
20
|
+
* say otherwise (a later step). `(allow default)` first, then deny all writes,
|
|
21
|
+
* then re-allow the roots — that ordering is what `sandbox-exec` evaluates
|
|
22
|
+
* last-match-wins on.
|
|
23
|
+
*/
|
|
24
|
+
/** Write roots every command needs even when the workspace is the only real one. */
|
|
25
|
+
export declare function seatbeltImplicitWriteRoots(): string[];
|
|
26
|
+
/** The profile text for `sandbox-exec -p`. Pure: same roots, same text. */
|
|
27
|
+
export declare function seatbeltProfile(writeRoots: readonly string[]): string;
|
|
28
|
+
/** The rewritten `CommandLine` the gate hands back for an allowed command under seatbelt. */
|
|
29
|
+
export declare function seatbeltCommandLine(commandLine: string, writeRoots: readonly string[]): string;
|
|
30
|
+
/** `sandbox-exec` is macOS only; the policy resolver refuses seatbelt elsewhere. */
|
|
31
|
+
export declare function seatbeltAvailable(platform?: NodeJS.Platform): boolean;
|
|
32
|
+
//# sourceMappingURL=seatbelt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seatbelt.d.ts","sourceRoot":"","sources":["../../src/policy/seatbelt.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,oFAAoF;AACpF,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAQrD;AAMD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAMrE;AAMD,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE9F;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,OAAO,CAEvF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { realpathSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
/**
|
|
4
|
+
* Our own macOS seatbelt profile (0.3.0 PR6; measured in M9).
|
|
5
|
+
*
|
|
6
|
+
* Why not agy's sandbox: measured on agy 1.1.24 (M7), it refuses every shell
|
|
7
|
+
* write inside the workspace, so "runs, but contained" was never on offer —
|
|
8
|
+
* only "does not run". `sandbox-exec` with a profile of our own gives the
|
|
9
|
+
* missing middle: the gate keeps judging intent (which command, which rule),
|
|
10
|
+
* the kernel keeps the command's *effects* inside `write_roots`, including
|
|
11
|
+
* writes made through an allowed interpreter (`python3 -c "open(...)"`) that
|
|
12
|
+
* a string classifier cannot see.
|
|
13
|
+
*
|
|
14
|
+
* How it is applied: M9 showed the PreToolUse hook's `overwrite.CommandLine`
|
|
15
|
+
* is honoured (the executed command changes; the model and the event stream
|
|
16
|
+
* still see the original). So the gate rewrites an allowed `run_command` to
|
|
17
|
+
* `sandbox-exec -p '<profile>' /bin/sh -c '<original>'` and sets
|
|
18
|
+
* `BypassSandbox: true` so agy's own profile stays out of the way.
|
|
19
|
+
*
|
|
20
|
+
* Scope is deliberately narrow: **file writes only**. Reads are the gate's and
|
|
21
|
+
* `read_roots`' business; network stays open unless the ceiling's exceptions
|
|
22
|
+
* say otherwise (a later step). `(allow default)` first, then deny all writes,
|
|
23
|
+
* then re-allow the roots — that ordering is what `sandbox-exec` evaluates
|
|
24
|
+
* last-match-wins on.
|
|
25
|
+
*/
|
|
26
|
+
/** Write roots every command needs even when the workspace is the only real one. */
|
|
27
|
+
export function seatbeltImplicitWriteRoots() {
|
|
28
|
+
const roots = ['/dev', '/private/tmp', '/private/var/folders'];
|
|
29
|
+
try {
|
|
30
|
+
roots.push(realpathSync(tmpdir()));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// tmpdir() unresolvable: the two /private entries cover macOS defaults.
|
|
34
|
+
}
|
|
35
|
+
return Array.from(new Set(roots));
|
|
36
|
+
}
|
|
37
|
+
function sbString(s) {
|
|
38
|
+
return `"${s.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
39
|
+
}
|
|
40
|
+
/** The profile text for `sandbox-exec -p`. Pure: same roots, same text. */
|
|
41
|
+
export function seatbeltProfile(writeRoots) {
|
|
42
|
+
const lines = ['(version 1)', '(allow default)', '(deny file-write*)'];
|
|
43
|
+
for (const root of writeRoots) {
|
|
44
|
+
lines.push(`(allow file-write* (subpath ${sbString(root)}))`);
|
|
45
|
+
}
|
|
46
|
+
return lines.join('\n');
|
|
47
|
+
}
|
|
48
|
+
function shQuote(s) {
|
|
49
|
+
return `'${s.replace(/'/g, `'\\''`)}'`;
|
|
50
|
+
}
|
|
51
|
+
/** The rewritten `CommandLine` the gate hands back for an allowed command under seatbelt. */
|
|
52
|
+
export function seatbeltCommandLine(commandLine, writeRoots) {
|
|
53
|
+
return `sandbox-exec -p ${shQuote(seatbeltProfile(writeRoots))} /bin/sh -c ${shQuote(commandLine)}`;
|
|
54
|
+
}
|
|
55
|
+
/** `sandbox-exec` is macOS only; the policy resolver refuses seatbelt elsewhere. */
|
|
56
|
+
export function seatbeltAvailable(platform = process.platform) {
|
|
57
|
+
return platform === 'darwin';
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=seatbelt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seatbelt.js","sourceRoot":"","sources":["../../src/policy/seatbelt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEhC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,oFAAoF;AACpF,MAAM,UAAU,0BAA0B;IACxC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,sBAAsB,CAAC,CAAA;IAC9D,IAAI,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAA;AAC7D,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAAC,UAA6B;IAC3D,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,CAAA;IACtE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,+BAA+B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAA;AACxC,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,UAA6B;IACpF,OAAO,mBAAmB,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,eAAe,OAAO,CAAC,WAAW,CAAC,EAAE,CAAA;AACrG,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAAC,WAA4B,OAAO,CAAC,QAAQ;IAC5E,OAAO,QAAQ,KAAK,QAAQ,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { RuleSubject } from './rules.js';
|
|
2
|
+
/**
|
|
3
|
+
* What a hook payload's tool call actually is, for the gate's `decide()`.
|
|
4
|
+
*
|
|
5
|
+
* Table transcribed from measurements M1 (the 7 tools
|
|
6
|
+
* a model actually calls, verbatim argument names) and M2 (the 4 subagent
|
|
7
|
+
* tools, which run under a *different* `conversationId` the gate can never
|
|
8
|
+
* bind).
|
|
9
|
+
*
|
|
10
|
+
* `manage_task` and `schedule` are `control`: they only ever touch
|
|
11
|
+
* conversation-scoped task bookkeeping (§`status`/`send_input`, M1) or
|
|
12
|
+
* agy's own task-scheduling helper without touching
|
|
13
|
+
* files or running commands. Nothing a rule list or containment root could
|
|
14
|
+
* meaningfully constrain, so they are always allowed rather than falling
|
|
15
|
+
* through `unsupported` and denying the one tool a background command or
|
|
16
|
+
* timeout retry needs.
|
|
17
|
+
*/
|
|
18
|
+
export type ToolClass = {
|
|
19
|
+
kind: 'subject';
|
|
20
|
+
subject: RuleSubject;
|
|
21
|
+
read: string[];
|
|
22
|
+
write: string[];
|
|
23
|
+
} | {
|
|
24
|
+
kind: 'control';
|
|
25
|
+
} | {
|
|
26
|
+
kind: 'unsupported';
|
|
27
|
+
reason: string;
|
|
28
|
+
subagent: boolean;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Classify one hook payload's tool call. Never throws: a missing or
|
|
32
|
+
* non-string required argument is `unsupported`, not a crash — the gate must
|
|
33
|
+
* still emit a decision (`gate.ts`'s one absolute rule).
|
|
34
|
+
*/
|
|
35
|
+
export declare function classifyToolCall(name: string, args: Record<string, unknown>, workspace: string): ToolClass;
|
|
36
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/policy/tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAG7C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAA;AA0D9D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,EAAE,MAAM,GAChB,SAAS,CAiCX"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { isAbsolute, join } from 'node:path';
|
|
2
|
+
import { canonicalize } from '../contract/paths.js';
|
|
3
|
+
import { redirectionTargets } from './containment.js';
|
|
4
|
+
/** M2: these run their own tool calls under a fresh `conversationId` the gate cannot bind. */
|
|
5
|
+
const SUBAGENT_TOOLS = new Set(['define_subagent', 'invoke_subagent', 'manage_subagents', 'browser_subagent']);
|
|
6
|
+
const SUBAGENT_REASON = 'Subagent tool denied. Subagents run under a separate conversationId, so policies bound to this job cannot govern their tool calls (M2). Do not define or invoke subagents; perform the required work directly within this conversation.';
|
|
7
|
+
const GENERIC_UNSUPPORTED_REASON = 'This tool is not supported by agy-worker policy. Only the 7 observed tools (run_command, view_file, list_dir, find_by_name, grep_search, write_to_file, replace_file_content) along with manage_task and schedule can be classified by policy.';
|
|
8
|
+
function stringArg(args, key) {
|
|
9
|
+
const v = args[key];
|
|
10
|
+
return typeof v === 'string' && v.length > 0 ? v : null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Resolve a tool argument path against the call's own `Cwd` (present on every
|
|
14
|
+
* hook payload, not just `run_command`'s — measured, M1) when it is relative,
|
|
15
|
+
* falling back to `workspace`. Every path M1 actually captured was absolute
|
|
16
|
+
* already; this only covers the possibility, not an observed case.
|
|
17
|
+
*/
|
|
18
|
+
function resolveArgPath(value, args, workspace) {
|
|
19
|
+
if (isAbsolute(value))
|
|
20
|
+
return canonicalize(value);
|
|
21
|
+
const cwd = stringArg(args, 'Cwd') ?? workspace;
|
|
22
|
+
return canonicalize(join(cwd, value));
|
|
23
|
+
}
|
|
24
|
+
function unsupported(reason, subagent = false) {
|
|
25
|
+
return { kind: 'unsupported', reason, subagent };
|
|
26
|
+
}
|
|
27
|
+
function readOnlySubject(args, workspace, field) {
|
|
28
|
+
const raw = stringArg(args, field);
|
|
29
|
+
if (raw === null)
|
|
30
|
+
return unsupported(GENERIC_UNSUPPORTED_REASON);
|
|
31
|
+
const resolved = resolveArgPath(raw, args, workspace);
|
|
32
|
+
return { kind: 'subject', subject: { verb: 'read_file', value: resolved }, read: [resolved], write: [] };
|
|
33
|
+
}
|
|
34
|
+
function writeOnlySubject(args, workspace, field) {
|
|
35
|
+
const raw = stringArg(args, field);
|
|
36
|
+
if (raw === null)
|
|
37
|
+
return unsupported(GENERIC_UNSUPPORTED_REASON);
|
|
38
|
+
const resolved = resolveArgPath(raw, args, workspace);
|
|
39
|
+
return { kind: 'subject', subject: { verb: 'write_file', value: resolved }, read: [], write: [resolved] };
|
|
40
|
+
}
|
|
41
|
+
function readWriteSubject(args, workspace, field) {
|
|
42
|
+
const raw = stringArg(args, field);
|
|
43
|
+
if (raw === null)
|
|
44
|
+
return unsupported(GENERIC_UNSUPPORTED_REASON);
|
|
45
|
+
const resolved = resolveArgPath(raw, args, workspace);
|
|
46
|
+
return {
|
|
47
|
+
kind: 'subject',
|
|
48
|
+
subject: { verb: 'write_file', value: resolved },
|
|
49
|
+
read: [resolved],
|
|
50
|
+
write: [resolved],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Classify one hook payload's tool call. Never throws: a missing or
|
|
55
|
+
* non-string required argument is `unsupported`, not a crash — the gate must
|
|
56
|
+
* still emit a decision (`gate.ts`'s one absolute rule).
|
|
57
|
+
*/
|
|
58
|
+
export function classifyToolCall(name, args, workspace) {
|
|
59
|
+
switch (name) {
|
|
60
|
+
case 'run_command': {
|
|
61
|
+
const commandLine = stringArg(args, 'CommandLine');
|
|
62
|
+
if (commandLine === null)
|
|
63
|
+
return unsupported(GENERIC_UNSUPPORTED_REASON);
|
|
64
|
+
const cwd = canonicalize(stringArg(args, 'Cwd') ?? workspace);
|
|
65
|
+
const writeTargets = redirectionTargets(commandLine, workspace).map((t) => canonicalize(t));
|
|
66
|
+
return {
|
|
67
|
+
kind: 'subject',
|
|
68
|
+
subject: { verb: 'command', value: commandLine },
|
|
69
|
+
read: [cwd],
|
|
70
|
+
write: [cwd, ...writeTargets],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
case 'view_file':
|
|
74
|
+
return readOnlySubject(args, workspace, 'AbsolutePath');
|
|
75
|
+
case 'list_dir':
|
|
76
|
+
return readOnlySubject(args, workspace, 'DirectoryPath');
|
|
77
|
+
case 'find_by_name':
|
|
78
|
+
return readOnlySubject(args, workspace, 'SearchDirectory');
|
|
79
|
+
case 'grep_search':
|
|
80
|
+
return readOnlySubject(args, workspace, 'SearchPath');
|
|
81
|
+
case 'write_to_file':
|
|
82
|
+
return writeOnlySubject(args, workspace, 'TargetFile');
|
|
83
|
+
case 'replace_file_content':
|
|
84
|
+
return readWriteSubject(args, workspace, 'TargetFile');
|
|
85
|
+
case 'manage_task':
|
|
86
|
+
case 'schedule':
|
|
87
|
+
return { kind: 'control' };
|
|
88
|
+
default:
|
|
89
|
+
if (SUBAGENT_TOOLS.has(name))
|
|
90
|
+
return unsupported(SUBAGENT_REASON, true);
|
|
91
|
+
return unsupported(GENERIC_UNSUPPORTED_REASON, false);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/policy/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime confirmation that our PreToolUse gate actually loaded for this job
|
|
3
|
+
* (I4).
|
|
4
|
+
*
|
|
5
|
+
* Nothing agy emits on stdout/stdin says whether `<workspace>/.agents/hooks.json`
|
|
6
|
+
* loaded — the only place that fact appears is agy's own internal log file
|
|
7
|
+
* (`~/.gemini/antigravity-cli/log/cli-*.log`, M5), which is not attributable to a
|
|
8
|
+
* specific job once two jobs run concurrently. So this watches for the one
|
|
9
|
+
* self-contained signal we do control: `jobs/<id>/gate-log.jsonl`, which our own
|
|
10
|
+
* gate appends to on every verdict it makes (`src/gate/gate.ts`'s `logDecision`,
|
|
11
|
+
* right after `emit` writes the decision to stdout — so a running gate's line
|
|
12
|
+
* lands only a few ticks after agy has already read that decision).
|
|
13
|
+
*
|
|
14
|
+
* Trigger, not a flat timer (redesigned after a real flake): a fixed delay after
|
|
15
|
+
* the first tool step goes ACTIVE raced real hook-spawn latency under heavy
|
|
16
|
+
* parallel test load and produced false "missing" kills on a perfectly healthy
|
|
17
|
+
* gate. `decide()`'s step order (`src/gate/gate.ts`) is: PreToolUse hooks run
|
|
18
|
+
* and gate the tool call *before* agy lets it execute, so with hooks loaded the
|
|
19
|
+
* tool cannot reach a terminal state (`DONE`/`ERROR`) before our gate has
|
|
20
|
+
* already appended its line — the gate-log write can only trail the terminal
|
|
21
|
+
* event by the width of one `appendJsonLine` call, never longer. So the
|
|
22
|
+
* deterministic signal is: the first tool step reaching `DONE`/`ERROR` with
|
|
23
|
+
* `gate-log.jsonl` still empty. A short grace period (`graceMs`, default 1s)
|
|
24
|
+
* absorbs exactly that append-vs-event race and nothing more.
|
|
25
|
+
*
|
|
26
|
+
* A hard cap (`capMs`, default 60s) is kept only as a backstop for a first tool
|
|
27
|
+
* step that stays `ACTIVE` a long time (a genuinely slow first command) with
|
|
28
|
+
* hooks missing: a working gate would already have logged within milliseconds
|
|
29
|
+
* of that `ACTIVE` transition (it runs *before* the tool starts), so an empty
|
|
30
|
+
* gate-log after `capMs` is itself sufficient evidence even without a terminal
|
|
31
|
+
* event yet — this bounds how long a hooks-missing job can run fully unguarded
|
|
32
|
+
* when its first tool call happens to be slow.
|
|
33
|
+
*
|
|
34
|
+
* `ensureGateHook` (`src/gate/hooks-file.ts`) writes our hooks.json key first in
|
|
35
|
+
* the object so our gate is the first PreToolUse group agy evaluates and
|
|
36
|
+
* therefore always runs, even when another group would deny and short-circuit
|
|
37
|
+
* agy's own sequential evaluation (M6). The one case this cannot cover is a
|
|
38
|
+
* hook installed *outside* any file we own — e.g. a user's global
|
|
39
|
+
* `~/.gemini/config/hooks.json` — that denies ahead of ours; agy never reaches
|
|
40
|
+
* our group for that call, gate-log.jsonl never gets a line, and this watchdog
|
|
41
|
+
* (correctly, if bluntly) reports the job as `process_error` "gate never
|
|
42
|
+
* fired". That residual case is accepted, not handled: it is safe (fail
|
|
43
|
+
* closed), just imprecise about *why*.
|
|
44
|
+
*
|
|
45
|
+
* Same tailing approach as `idle.ts`: poll `events.ndjson` from a byte cursor,
|
|
46
|
+
* parse only complete lines, never hold the file open between polls.
|
|
47
|
+
*/
|
|
48
|
+
export interface GateWatchdogOptions {
|
|
49
|
+
/** `jobs/<id>/events.ndjson` — where the first tool step becomes visible. */
|
|
50
|
+
eventsPath: string;
|
|
51
|
+
/** `jobs/<id>/gate-log.jsonl` — non-empty the instant our gate has run once. */
|
|
52
|
+
gateLogPath: string;
|
|
53
|
+
/**
|
|
54
|
+
* Grace period after the first tool step reaches `DONE`/`ERROR` before
|
|
55
|
+
* declaring the gate missing, absorbing the gate-log append trailing the
|
|
56
|
+
* terminal event by a beat. Default 1000ms.
|
|
57
|
+
*/
|
|
58
|
+
graceMs?: number;
|
|
59
|
+
/**
|
|
60
|
+
* Hard-cap backstop from the first tool step going `ACTIVE`, for a slow first
|
|
61
|
+
* command that never reaches a terminal state. Default 60000ms.
|
|
62
|
+
*/
|
|
63
|
+
capMs?: number;
|
|
64
|
+
pollMs?: number;
|
|
65
|
+
/** Fired at most once: the gate confirmed itself, at any point. */
|
|
66
|
+
onConfirmed: () => void;
|
|
67
|
+
/** Fired at most once: grace or cap elapsed with nothing in gate-log.jsonl. */
|
|
68
|
+
onMissing: () => void;
|
|
69
|
+
}
|
|
70
|
+
export interface GateWatchdog {
|
|
71
|
+
/** Stop polling and cancel any pending timer. Idempotent, safe after resolution. */
|
|
72
|
+
stop(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Call once the agy process is known to have exited, in place of (or right
|
|
75
|
+
* before) `stop()`. Does one last synchronous check instead of relying on
|
|
76
|
+
* the next poll tick or a pending timer, both of which a job that exits very
|
|
77
|
+
* quickly can race: a happy job that finishes in under one `pollMs` would
|
|
78
|
+
* otherwise leave `gate_confirmed` stuck at `null` even though the gate
|
|
79
|
+
* plainly ran, and a broken-hooks job that happens to run to completion
|
|
80
|
+
* before its grace/cap timer fires would leave it `null` instead of `false`
|
|
81
|
+
* even though nothing further can ever write to `gate-log.jsonl` once the
|
|
82
|
+
* process is gone. Idempotent, safe after resolution or `stop()`.
|
|
83
|
+
*/
|
|
84
|
+
finalize(): void;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Start the watchdog. Resolves at most once, via exactly one of `onConfirmed` /
|
|
88
|
+
* `onMissing` — or never, if the job ends before any tool step ever runs (a job
|
|
89
|
+
* with no tool calls has nothing for the gate to confirm, so `gate_confirmed`
|
|
90
|
+
* stays `null`, which the runner's caller must default it to).
|
|
91
|
+
*/
|
|
92
|
+
export declare function startGateWatchdog(opts: GateWatchdogOptions): GateWatchdog;
|
|
93
|
+
//# sourceMappingURL=gate-watchdog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-watchdog.d.ts","sourceRoot":"","sources":["../../src/runner/gate-watchdog.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,IAAI,IAAI,IAAI,CAAA;IACZ;;;;;;;;;;OAUG;IACH,QAAQ,IAAI,IAAI,CAAA;CACjB;AAKD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CA0IzE"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { fileSize } from '../contract/paths.js';
|
|
2
|
+
import { readLinesFrom } from '../events/cursor.js';
|
|
3
|
+
import { okEvents, parseEventLines } from '../events/parse.js';
|
|
4
|
+
const DEFAULT_GRACE_MS = 1000;
|
|
5
|
+
const DEFAULT_CAP_MS = 60_000;
|
|
6
|
+
/**
|
|
7
|
+
* Start the watchdog. Resolves at most once, via exactly one of `onConfirmed` /
|
|
8
|
+
* `onMissing` — or never, if the job ends before any tool step ever runs (a job
|
|
9
|
+
* with no tool calls has nothing for the gate to confirm, so `gate_confirmed`
|
|
10
|
+
* stays `null`, which the runner's caller must default it to).
|
|
11
|
+
*/
|
|
12
|
+
export function startGateWatchdog(opts) {
|
|
13
|
+
const graceMs = opts.graceMs ?? DEFAULT_GRACE_MS;
|
|
14
|
+
const capMs = opts.capMs ?? DEFAULT_CAP_MS;
|
|
15
|
+
const pollMs = opts.pollMs ?? 100;
|
|
16
|
+
let stopped = false;
|
|
17
|
+
let resolved = false;
|
|
18
|
+
/** Any tool step_update observed at all (ACTIVE or terminal). Drives the cap. */
|
|
19
|
+
let sawToolStep = false;
|
|
20
|
+
/** A tool step_update reaching DONE/ERROR observed. Drives the grace period. */
|
|
21
|
+
let sawTerminalToolStep = false;
|
|
22
|
+
let eventsOffset = 0;
|
|
23
|
+
let graceTimer = null;
|
|
24
|
+
let capTimer = null;
|
|
25
|
+
let pollTimer = null;
|
|
26
|
+
function gateLogHasLine() {
|
|
27
|
+
return fileSize(opts.gateLogPath) > 0;
|
|
28
|
+
}
|
|
29
|
+
function stopInternal() {
|
|
30
|
+
stopped = true;
|
|
31
|
+
if (graceTimer) {
|
|
32
|
+
clearTimeout(graceTimer);
|
|
33
|
+
graceTimer = null;
|
|
34
|
+
}
|
|
35
|
+
if (capTimer) {
|
|
36
|
+
clearTimeout(capTimer);
|
|
37
|
+
capTimer = null;
|
|
38
|
+
}
|
|
39
|
+
if (pollTimer) {
|
|
40
|
+
clearTimeout(pollTimer);
|
|
41
|
+
pollTimer = null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function confirm() {
|
|
45
|
+
if (resolved || stopped)
|
|
46
|
+
return;
|
|
47
|
+
resolved = true;
|
|
48
|
+
stopInternal();
|
|
49
|
+
opts.onConfirmed();
|
|
50
|
+
}
|
|
51
|
+
function declareMissing() {
|
|
52
|
+
if (resolved || stopped)
|
|
53
|
+
return;
|
|
54
|
+
resolved = true;
|
|
55
|
+
stopInternal();
|
|
56
|
+
opts.onMissing();
|
|
57
|
+
}
|
|
58
|
+
function armGrace() {
|
|
59
|
+
if (graceTimer !== null)
|
|
60
|
+
return;
|
|
61
|
+
graceTimer = setTimeout(() => {
|
|
62
|
+
graceTimer = null;
|
|
63
|
+
if (resolved || stopped)
|
|
64
|
+
return;
|
|
65
|
+
if (gateLogHasLine())
|
|
66
|
+
confirm();
|
|
67
|
+
else
|
|
68
|
+
declareMissing();
|
|
69
|
+
}, graceMs);
|
|
70
|
+
}
|
|
71
|
+
function armCap() {
|
|
72
|
+
if (capTimer !== null)
|
|
73
|
+
return;
|
|
74
|
+
capTimer = setTimeout(() => {
|
|
75
|
+
capTimer = null;
|
|
76
|
+
if (resolved || stopped)
|
|
77
|
+
return;
|
|
78
|
+
// Backstop only (see module comment): by now a working gate would
|
|
79
|
+
// already have logged, so an empty gate-log is itself the signal even
|
|
80
|
+
// without a terminal step yet.
|
|
81
|
+
if (gateLogHasLine())
|
|
82
|
+
confirm();
|
|
83
|
+
else
|
|
84
|
+
declareMissing();
|
|
85
|
+
}, capMs);
|
|
86
|
+
}
|
|
87
|
+
/** Advances `sawToolStep`/`sawTerminalToolStep`. Stops scanning once the terminal signal is in. */
|
|
88
|
+
function scanForToolStep() {
|
|
89
|
+
if (sawTerminalToolStep)
|
|
90
|
+
return;
|
|
91
|
+
const { lines, nextCursor } = readLinesFrom(opts.eventsPath, eventsOffset);
|
|
92
|
+
eventsOffset = nextCursor;
|
|
93
|
+
if (lines.length === 0)
|
|
94
|
+
return;
|
|
95
|
+
const events = okEvents(parseEventLines(lines, 0));
|
|
96
|
+
for (const e of events) {
|
|
97
|
+
if (e.event !== 'step_update' || e.step_update.step_type !== 'tool')
|
|
98
|
+
continue;
|
|
99
|
+
sawToolStep = true;
|
|
100
|
+
const state = e.step_update.state;
|
|
101
|
+
if (state === 'DONE' || state === 'ERROR') {
|
|
102
|
+
sawTerminalToolStep = true;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** Shared by `poll()` and `finalize()`: scan, then confirm/arm off the result. */
|
|
108
|
+
function checkAndMaybeResolve() {
|
|
109
|
+
scanForToolStep();
|
|
110
|
+
// Checked every time, not only once a timer fires: a line that appears
|
|
111
|
+
// before the terminal step (the common, healthy case — the gate runs
|
|
112
|
+
// *before* the tool executes) should confirm immediately rather than
|
|
113
|
+
// waiting out grace or cap.
|
|
114
|
+
if (gateLogHasLine()) {
|
|
115
|
+
confirm();
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (sawTerminalToolStep)
|
|
119
|
+
armGrace();
|
|
120
|
+
else if (sawToolStep)
|
|
121
|
+
armCap();
|
|
122
|
+
}
|
|
123
|
+
function poll() {
|
|
124
|
+
if (stopped || resolved)
|
|
125
|
+
return;
|
|
126
|
+
checkAndMaybeResolve();
|
|
127
|
+
if (!stopped)
|
|
128
|
+
pollTimer = setTimeout(poll, pollMs);
|
|
129
|
+
}
|
|
130
|
+
function finalize() {
|
|
131
|
+
if (resolved || stopped) {
|
|
132
|
+
stopInternal();
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
scanForToolStep();
|
|
136
|
+
if (gateLogHasLine()) {
|
|
137
|
+
confirm();
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (sawToolStep) {
|
|
141
|
+
// The process is already gone, so nothing will ever add a line now —
|
|
142
|
+
// no need to wait out grace/cap. `onMissing` still runs (it also kills
|
|
143
|
+
// the process group, which is a safe no-op on an already-empty group)
|
|
144
|
+
// so the runner's bookkeeping is identical either way.
|
|
145
|
+
declareMissing();
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
stopInternal();
|
|
149
|
+
}
|
|
150
|
+
pollTimer = setTimeout(poll, pollMs);
|
|
151
|
+
return { stop: stopInternal, finalize };
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=gate-watchdog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-watchdog.js","sourceRoot":"","sources":["../../src/runner/gate-watchdog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Writable } from 'node:stream';
|
|
2
|
+
/**
|
|
3
|
+
* Idle watchdog for `session_mode: 'session'` jobs.
|
|
4
|
+
*
|
|
5
|
+
* Without this, a session-mode job that finishes its one turn and never
|
|
6
|
+
* receives another `agy_send` just sits with stdin open until the hard
|
|
7
|
+
* `deadline_at` — measured live, that wasted the entire `--print-timeout`
|
|
8
|
+
* window for a job whose actual work was done in seconds.
|
|
9
|
+
* `reconcile` cannot fix this on its own: it only runs from a tool entry
|
|
10
|
+
* point, so nothing revisits an idle job until some client
|
|
11
|
+
* happens to call one. The watchdog runs *inside the runner*, which is
|
|
12
|
+
* already alive and unattended — the same reason the
|
|
13
|
+
* deadline watchdog in `runner.ts` is not reconcile-based either.
|
|
14
|
+
*
|
|
15
|
+
* Deliberately conservative about when a turn is "in flight" vs. idle: it
|
|
16
|
+
* only arms the idle deadline after actually observing a `result` event for
|
|
17
|
+
* every turn it has seen relayed, via `events.ndjson` — never merely because
|
|
18
|
+
* no new inbox line has appeared. Closing stdin while agy is still mid-turn
|
|
19
|
+
* is unmeasured territory (a *second* turn queues while a first is in flight,
|
|
20
|
+
* not what an EOF mid-turn does), so this
|
|
21
|
+
* never guesses at that: it waits for the turn's own `result` line before
|
|
22
|
+
* treating the process as idle at all.
|
|
23
|
+
*/
|
|
24
|
+
export interface IdleWatchdogOptions {
|
|
25
|
+
/** `jobs/<id>/events.ndjson` — the only place a completed turn is visible. */
|
|
26
|
+
eventsPath: string;
|
|
27
|
+
idleTimeoutMs: number;
|
|
28
|
+
/** agy's stdin. Ending it is what makes agy exit at EOF. */
|
|
29
|
+
stdin: Writable;
|
|
30
|
+
pollMs?: number;
|
|
31
|
+
/** Fired exactly once, the moment the watchdog closes stdin for inactivity. */
|
|
32
|
+
onIdleClose: () => void;
|
|
33
|
+
}
|
|
34
|
+
export interface IdleWatchdog {
|
|
35
|
+
/** Stop polling and cancel any pending idle deadline. Idempotent. */
|
|
36
|
+
stop(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Call whenever a turn is relayed to agy's stdin. Marks that turn "in
|
|
39
|
+
* flight" and cancels any pending idle deadline — the watchdog will not
|
|
40
|
+
* re-arm until it observes that turn's own `result` event.
|
|
41
|
+
*/
|
|
42
|
+
noteActivity(): void;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Start the watchdog. It never fires before at least one full turn/`result`
|
|
46
|
+
* cycle has been observed: `pendingTurns` starts at 0 and the idle deadline is
|
|
47
|
+
* only armed inside the branch that just decremented it back to 0, so a
|
|
48
|
+
* watchdog created the instant a job spawns cannot race turn 1's own relay.
|
|
49
|
+
*/
|
|
50
|
+
export declare function startIdleWatchdog(opts: IdleWatchdogOptions): IdleWatchdog;
|
|
51
|
+
//# sourceMappingURL=idle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle.d.ts","sourceRoot":"","sources":["../../src/runner/idle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAK3C;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,4DAA4D;IAC5D,KAAK,EAAE,QAAQ,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,IAAI,IAAI,IAAI,CAAA;IACZ;;;;OAIG;IACH,YAAY,IAAI,IAAI,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAwEzE"}
|