@lucascouts/claude-agent-tui 0.5.1 → 0.5.2
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/dist/acp-agent.d.ts.map +1 -1
- package/dist/acp-agent.js +4 -1
- package/dist/gate/settings-writer.d.ts +20 -3
- package/dist/gate/settings-writer.d.ts.map +1 -1
- package/dist/gate/settings-writer.js +13 -7
- package/dist/permissions/gate-wiring.d.ts +13 -1
- package/dist/permissions/gate-wiring.d.ts.map +1 -1
- package/dist/permissions/gate-wiring.js +158 -40
- package/dist/permissions/hook-server.d.ts +15 -0
- package/dist/permissions/hook-server.d.ts.map +1 -1
- package/dist/permissions/hook-server.js +30 -1
- package/dist/permissions/request-permission.d.ts +9 -0
- package/dist/permissions/request-permission.d.ts.map +1 -1
- package/dist/permissions/request-permission.js +20 -5
- package/dist/tools.d.ts +10 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +6 -5
- package/package.json +1 -1
package/dist/acp-agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"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"}
|
package/dist/acp-agent.js
CHANGED
|
@@ -1880,7 +1880,10 @@ export class ClaudeAcpAgent {
|
|
|
1880
1880
|
parentId: entry.parentId,
|
|
1881
1881
|
subagentLabel: deriveSubagentLabel(s?.lastMessages ?? [], entry.parentId) ?? "subagent",
|
|
1882
1882
|
};
|
|
1883
|
-
}
|
|
1883
|
+
},
|
|
1884
|
+
// FIX(watchdog-permission): re-arm the end-of-turn watchdog while a permission dialog is open,
|
|
1885
|
+
// so a slow human decision (JSONL silent meanwhile) is not mistaken for a dead turn.
|
|
1886
|
+
() => this.sessions[startedSessionId]?.turnDetector?.noteActivity());
|
|
1884
1887
|
boundGate.bindPty(started.pty);
|
|
1885
1888
|
started.pty.onExit(() => void boundGate.teardown());
|
|
1886
1889
|
}
|
|
@@ -19,18 +19,33 @@ export interface PreToolUseGroup {
|
|
|
19
19
|
/** Present (and `true`) only on the FORK's own group — never on a user's group. */
|
|
20
20
|
[FORK_HOOK_MARKER_KEY]?: true;
|
|
21
21
|
}
|
|
22
|
+
/** Story 055 (R1.3) — options for {@link buildHookEntry}: a per-session token plus the hook timeout. */
|
|
23
|
+
export interface BuildHookOptions {
|
|
24
|
+
/**
|
|
25
|
+
* Per-session crypto-random secret appended to the hook URL AFTER {@link FORK_HOOK_MARKER_PATH}
|
|
26
|
+
* (e.g. `…/__fork-acp-gate__/<token>`). The hook-server rejects any PreToolUse POST that does not
|
|
27
|
+
* present it — the compensating control for the relaxed JSONL anti-forgery (decide() now seeds the
|
|
28
|
+
* correlator from the hook payload). Appending AFTER the marker keeps {@link isForkHookGroup} /
|
|
29
|
+
* {@link restore} matching on the marker substring, so teardown still recognizes the tokenized URL.
|
|
30
|
+
*/
|
|
31
|
+
token?: string;
|
|
32
|
+
/** Hook timeout in SECONDS (default {@link DEFAULT_HOOK_TIMEOUT_SECONDS}). */
|
|
33
|
+
timeout?: number;
|
|
34
|
+
}
|
|
22
35
|
/**
|
|
23
36
|
* Build the fork's `PreToolUse` `type:http` hook group, pointing at the 127.0.0.1 TCP-loopback
|
|
24
37
|
* endpoint for the dynamically allocated free port (R1 / R2.3). The URL carries the fork-owned
|
|
25
|
-
* sentinel path ({@link FORK_HOOK_MARKER_PATH}) so teardown can surgically remove ONLY this group
|
|
38
|
+
* sentinel path ({@link FORK_HOOK_MARKER_PATH}) so teardown can surgically remove ONLY this group;
|
|
39
|
+
* when a {@link BuildHookOptions.token} is given (story 055 / R1.3) it is appended AFTER that marker.
|
|
26
40
|
*
|
|
27
41
|
* @param port the verified-free port from {@link import("./port.js").findFreePort} — a positive integer.
|
|
28
|
-
* @param
|
|
42
|
+
* @param optsOrTimeout either a {@link BuildHookOptions} (token + timeout) OR, for backward
|
|
43
|
+
* compatibility, the hook timeout in SECONDS as a bare number (default {@link DEFAULT_HOOK_TIMEOUT_SECONDS}).
|
|
29
44
|
* @returns the `{ matcher, hooks:[{type:"http",…}], __forkAcpGate:true }` group.
|
|
30
45
|
* @throws {Error} if `port` is not a positive integer (a bad port would produce a malformed/ungated
|
|
31
46
|
* hook — fail loud rather than silently emit a hook claude ignores).
|
|
32
47
|
*/
|
|
33
|
-
export declare function buildHookEntry(port: number,
|
|
48
|
+
export declare function buildHookEntry(port: number, optsOrTimeout?: number | BuildHookOptions): PreToolUseGroup;
|
|
34
49
|
/** True iff `group` is the FORK's own injected hook group (sentinel key OR sentinel URL path). */
|
|
35
50
|
export declare function isForkHookGroup(group: unknown): boolean;
|
|
36
51
|
/** Minimal structural view of a settings document's hooks block (only what the merge touches). */
|
|
@@ -107,6 +122,8 @@ export declare function injectHook(opts: {
|
|
|
107
122
|
settingsPath: string;
|
|
108
123
|
port: number;
|
|
109
124
|
timeout?: number;
|
|
125
|
+
/** Story 055 (R1.3) — per-session token bound into the hook URL after {@link FORK_HOOK_MARKER_PATH}. */
|
|
126
|
+
token?: string;
|
|
110
127
|
}): Promise<Backup>;
|
|
111
128
|
/**
|
|
112
129
|
* Teardown: remove the fork's injected hook, leaving ZERO residue (R4.2, R4.3).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-writer.d.ts","sourceRoot":"","sources":["../../src/gate/settings-writer.ts"],"names":[],"mappings":"AA6BA,qGAAqG;AACrG,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAE1D,oGAAoG;AACpG,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAEpD,qGAAqG;AACrG,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,qGAAqG;AACrG,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,uGAAuG;AACvG,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uGAAuG;AACvG,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mFAAmF;IACnF,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC;CAC/B;AAED
|
|
1
|
+
{"version":3,"file":"settings-writer.d.ts","sourceRoot":"","sources":["../../src/gate/settings-writer.ts"],"names":[],"mappings":"AA6BA,qGAAqG;AACrG,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAE1D,oGAAoG;AACpG,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAEpD,qGAAqG;AACrG,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,qGAAqG;AACrG,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,uGAAuG;AACvG,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uGAAuG;AACvG,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mFAAmF;IACnF,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC;CAC/B;AAED,wGAAwG;AACxG,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,MAAM,GAAG,gBAA+C,GACtE,eAAe,CAuBjB;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAuBvD;AAED,kGAAkG;AAClG,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;QACvB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,eAAe,GAAG,YAAY,CAsB1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAiB7D;AAYD;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,uGAAuG;AACvG,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;CAC7B;AA2DD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wGAAwG;IACxG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwClB;AAWD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkEpE"}
|
|
@@ -36,25 +36,31 @@ export const FORK_HOOK_MATCHER = "*";
|
|
|
36
36
|
/**
|
|
37
37
|
* Build the fork's `PreToolUse` `type:http` hook group, pointing at the 127.0.0.1 TCP-loopback
|
|
38
38
|
* endpoint for the dynamically allocated free port (R1 / R2.3). The URL carries the fork-owned
|
|
39
|
-
* sentinel path ({@link FORK_HOOK_MARKER_PATH}) so teardown can surgically remove ONLY this group
|
|
39
|
+
* sentinel path ({@link FORK_HOOK_MARKER_PATH}) so teardown can surgically remove ONLY this group;
|
|
40
|
+
* when a {@link BuildHookOptions.token} is given (story 055 / R1.3) it is appended AFTER that marker.
|
|
40
41
|
*
|
|
41
42
|
* @param port the verified-free port from {@link import("./port.js").findFreePort} — a positive integer.
|
|
42
|
-
* @param
|
|
43
|
+
* @param optsOrTimeout either a {@link BuildHookOptions} (token + timeout) OR, for backward
|
|
44
|
+
* compatibility, the hook timeout in SECONDS as a bare number (default {@link DEFAULT_HOOK_TIMEOUT_SECONDS}).
|
|
43
45
|
* @returns the `{ matcher, hooks:[{type:"http",…}], __forkAcpGate:true }` group.
|
|
44
46
|
* @throws {Error} if `port` is not a positive integer (a bad port would produce a malformed/ungated
|
|
45
47
|
* hook — fail loud rather than silently emit a hook claude ignores).
|
|
46
48
|
*/
|
|
47
|
-
export function buildHookEntry(port,
|
|
49
|
+
export function buildHookEntry(port, optsOrTimeout = DEFAULT_HOOK_TIMEOUT_SECONDS) {
|
|
48
50
|
if (!Number.isInteger(port) || port <= 0 || port > 65535) {
|
|
49
51
|
throw new Error(`buildHookEntry: port must be a positive integer in 1..65535, got ${String(port)} — refusing ` +
|
|
50
52
|
`to build a malformed hook (claude would ignore it and the tool would run ungated).`);
|
|
51
53
|
}
|
|
54
|
+
const opts = typeof optsOrTimeout === "number" ? { timeout: optsOrTimeout } : optsOrTimeout;
|
|
55
|
+
const timeout = opts.timeout ?? DEFAULT_HOOK_TIMEOUT_SECONDS;
|
|
56
|
+
// R1.3: the token rides AFTER the marker path so isForkHookGroup/restore still match the marker.
|
|
57
|
+
const tokenSuffix = opts.token ? `/${opts.token}` : "";
|
|
52
58
|
return {
|
|
53
59
|
matcher: FORK_HOOK_MATCHER,
|
|
54
60
|
hooks: [
|
|
55
61
|
{
|
|
56
62
|
type: "http",
|
|
57
|
-
url: `http://127.0.0.1:${port}${FORK_HOOK_MARKER_PATH}`,
|
|
63
|
+
url: `http://127.0.0.1:${port}${FORK_HOOK_MARKER_PATH}${tokenSuffix}`,
|
|
58
64
|
timeout,
|
|
59
65
|
},
|
|
60
66
|
],
|
|
@@ -224,12 +230,12 @@ async function readPriorBytes(settingsPath) {
|
|
|
224
230
|
* deleted) before rejecting, so a failed inject never leaves a file claude could read half-written.
|
|
225
231
|
*/
|
|
226
232
|
export async function injectHook(opts) {
|
|
227
|
-
const { settingsPath, port, timeout } = opts;
|
|
233
|
+
const { settingsPath, port, timeout, token } = opts;
|
|
228
234
|
// 1) Snapshot the prior state (bytes or absence) — captured BEFORE any mutation (R4.1).
|
|
229
235
|
const priorBytes = await readPriorBytes(settingsPath);
|
|
230
236
|
const backup = { settingsPath, existed: priorBytes !== null, priorBytes };
|
|
231
|
-
// 2) Compute the merged object from the prior (parsed tolerantly) + the fork hook.
|
|
232
|
-
const group = buildHookEntry(port, timeout);
|
|
237
|
+
// 2) Compute the merged object from the prior (parsed tolerantly) + the fork hook (R1.3: tokenized).
|
|
238
|
+
const group = buildHookEntry(port, { token, timeout });
|
|
233
239
|
let prior = null;
|
|
234
240
|
if (priorBytes !== null) {
|
|
235
241
|
const text = priorBytes.toString("utf8").trim();
|
|
@@ -34,6 +34,13 @@ export declare const DEFAULT_CORRELATION_POLL_MS = 50;
|
|
|
34
34
|
* fail-closed timeout deny. Tracked separately from the poll interval (the poll is 10-50ms; nudging on
|
|
35
35
|
* every poll would hammer the pump) — a nudge fires only once ~250ms has elapsed since the last one. */
|
|
36
36
|
export declare const DEFAULT_CORRELATION_RENUDGE_MS = 250;
|
|
37
|
+
/**
|
|
38
|
+
* FIX(watchdog-permission): while a permission dialog is pending the claude is BLOCKED and writes
|
|
39
|
+
* nothing to the JSONL, so the end-of-turn watchdog (120s of silence) would mistake a long human
|
|
40
|
+
* decision for a dead turn. Re-arm it every this-many ms via the bound `noteActivity` for as long as
|
|
41
|
+
* the dialog is open. Must stay well under TURN_STALL_WATCHDOG_MS (120_000).
|
|
42
|
+
*/
|
|
43
|
+
export declare const DEFAULT_PERMISSION_HEARTBEAT_MS = 30000;
|
|
37
44
|
/** Default window for the native prompt to APPEAR after an allow decision (#52822 sweep, ms).
|
|
38
45
|
* If no marker renders within it, allow-suppression held (the 2.1.161 case) — nothing to clear. */
|
|
39
46
|
export declare const DEFAULT_PROMPT_APPEAR_MS = 1500;
|
|
@@ -99,6 +106,9 @@ export type ResolveSubagentRelay = (innerToolUseId: string) => SubagentRelay | u
|
|
|
99
106
|
export interface SessionGate {
|
|
100
107
|
/** The verified-free loopback port the hook server bound (== the port in the scratch hook URL). */
|
|
101
108
|
port: number;
|
|
109
|
+
/** Story 055 (R1.3) — the per-session secret token bound into the hook URL after the marker path.
|
|
110
|
+
* The hook-server rejects any PreToolUse POST that does not present `${marker}/<token>`. */
|
|
111
|
+
readonly token: string;
|
|
102
112
|
/** Absolute path of the per-session scratch settings file (hand to the spawn as `--settings`). */
|
|
103
113
|
settingsPath: string;
|
|
104
114
|
/** The per-session `tool_use.id` correlation map. The live pump REGISTERS every JSONL `tool_use`
|
|
@@ -116,7 +126,9 @@ export interface SessionGate {
|
|
|
116
126
|
* relay a KNOWN subagent tool's dialog under its parent Task id (R1/R2), or to fail LOUD (R4) on
|
|
117
127
|
* an orphan / uncorrelatable subagent. A main-chain tool (no resolver entry) is unchanged (U1).
|
|
118
128
|
*/
|
|
119
|
-
bindSession(sessionId: string, nudge?: () => void, resolveSubagentRelay?: ResolveSubagentRelay
|
|
129
|
+
bindSession(sessionId: string, nudge?: () => void, resolveSubagentRelay?: ResolveSubagentRelay,
|
|
130
|
+
/** FIX(watchdog-permission) — re-arms the end-of-turn watchdog while a permission dialog is open. */
|
|
131
|
+
noteActivity?: () => void): void;
|
|
120
132
|
/** Bind the live PTY: stores the raw writer for the allow keystroke and (when the PTY exposes
|
|
121
133
|
* `onData`) attaches the recent-output tap feeding the native-prompt probe. */
|
|
122
134
|
bindPty(pty: GatePty): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-wiring.d.ts","sourceRoot":"","sources":["../../src/permissions/gate-wiring.ts"],"names":[],"mappings":"AAqCA,OAAO,EAEL,iBAAiB,EACjB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAErF;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,EAAE,SAAS,MAAM,EAO7D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,6BAAwB,CAAC;AAQ5D;8BAC8B;AAC9B,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAM3D;AAED;;;+EAG+E;AAC/E,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAChD,2DAA2D;AAC3D,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C;;;;yGAIyG;AACzG,eAAO,MAAM,8BAA8B,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"gate-wiring.d.ts","sourceRoot":"","sources":["../../src/permissions/gate-wiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
// OFFLINE: this module spawns NO claude and bills nothing; the http server binds 127.0.0.1 only.
|
|
31
31
|
import * as os from "node:os";
|
|
32
32
|
import * as path from "node:path";
|
|
33
|
-
import { randomUUID } from "node:crypto";
|
|
33
|
+
import { randomBytes, randomUUID } from "node:crypto";
|
|
34
34
|
import { findFreePort } from "../gate/port.js";
|
|
35
35
|
import { injectHook, restore } from "../gate/settings-writer.js";
|
|
36
36
|
import { startHookServer } from "./hook-server.js";
|
|
@@ -86,6 +86,13 @@ export const DEFAULT_CORRELATION_POLL_MS = 50;
|
|
|
86
86
|
* fail-closed timeout deny. Tracked separately from the poll interval (the poll is 10-50ms; nudging on
|
|
87
87
|
* every poll would hammer the pump) — a nudge fires only once ~250ms has elapsed since the last one. */
|
|
88
88
|
export const DEFAULT_CORRELATION_RENUDGE_MS = 250;
|
|
89
|
+
/**
|
|
90
|
+
* FIX(watchdog-permission): while a permission dialog is pending the claude is BLOCKED and writes
|
|
91
|
+
* nothing to the JSONL, so the end-of-turn watchdog (120s of silence) would mistake a long human
|
|
92
|
+
* decision for a dead turn. Re-arm it every this-many ms via the bound `noteActivity` for as long as
|
|
93
|
+
* the dialog is open. Must stay well under TURN_STALL_WATCHDOG_MS (120_000).
|
|
94
|
+
*/
|
|
95
|
+
export const DEFAULT_PERMISSION_HEARTBEAT_MS = 30_000;
|
|
89
96
|
/** Default window for the native prompt to APPEAR after an allow decision (#52822 sweep, ms).
|
|
90
97
|
* If no marker renders within it, allow-suppression held (the 2.1.161 case) — nothing to clear. */
|
|
91
98
|
export const DEFAULT_PROMPT_APPEAR_MS = 1500;
|
|
@@ -112,6 +119,8 @@ class SessionGateImpl {
|
|
|
112
119
|
constructor(opts) {
|
|
113
120
|
this.opts = opts;
|
|
114
121
|
this.port = 0;
|
|
122
|
+
/** Story 055 (R1.3) — set in {@link start} to a crypto-random per-session secret. */
|
|
123
|
+
this.token = "";
|
|
115
124
|
this.settingsPath = "";
|
|
116
125
|
this.correlator = new ToolUseCorrelator();
|
|
117
126
|
/** Rolling tail of recent PTY output + absolute count of chars ever appended (probe offsets). */
|
|
@@ -141,14 +150,46 @@ class SessionGateImpl {
|
|
|
141
150
|
this.permissionQueue = run.then(() => undefined, () => undefined);
|
|
142
151
|
return run;
|
|
143
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* FIX(watchdog-permission): start a heartbeat that re-arms the end-of-turn watchdog (via the bound
|
|
155
|
+
* `noteActivity`) every {@link DEFAULT_PERMISSION_HEARTBEAT_MS} while a permission dialog is open, so
|
|
156
|
+
* the human decision time is never counted as transcript silence. Self-reschedules through the
|
|
157
|
+
* injectable `schedule` (testable). Returns a stop fn; safe/no-op when `noteActivity` is unset.
|
|
158
|
+
*/
|
|
159
|
+
startPermissionHeartbeat() {
|
|
160
|
+
const note = this.noteActivity;
|
|
161
|
+
if (!note)
|
|
162
|
+
return () => { };
|
|
163
|
+
let stopped = false;
|
|
164
|
+
const tick = () => {
|
|
165
|
+
if (stopped || this.torndown)
|
|
166
|
+
return;
|
|
167
|
+
try {
|
|
168
|
+
note();
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// heartbeat is best-effort liveness; a failure never affects the decision
|
|
172
|
+
}
|
|
173
|
+
this.schedule(tick, DEFAULT_PERMISSION_HEARTBEAT_MS);
|
|
174
|
+
};
|
|
175
|
+
this.schedule(tick, DEFAULT_PERMISSION_HEARTBEAT_MS);
|
|
176
|
+
return () => {
|
|
177
|
+
stopped = true;
|
|
178
|
+
};
|
|
179
|
+
}
|
|
144
180
|
/** Start the hook server, then write the scratch settings (server first, so the URL the settings
|
|
145
181
|
* point at is live before claude can ever read them; settings BEFORE the spawn is the caller's
|
|
146
182
|
* ordering contract — blocker c). */
|
|
147
183
|
async start() {
|
|
148
184
|
const findPort = this.opts.findPort ?? findFreePort;
|
|
149
185
|
this.port = await findPort();
|
|
186
|
+
// Story 055 (R1.3): a per-session crypto-random secret bound into the hook URL (after the marker
|
|
187
|
+
// path). The hook-server rejects any PreToolUse POST that does not present it — the compensating
|
|
188
|
+
// control for the relaxed JSONL anti-forgery (decide() now seeds the correlator from the payload).
|
|
189
|
+
this.token = randomBytes(24).toString("hex");
|
|
150
190
|
this.server = await startHookServer({
|
|
151
191
|
port: this.port,
|
|
192
|
+
token: this.token,
|
|
152
193
|
deciderTimeoutMs: this.opts.deciderTimeoutMs,
|
|
153
194
|
onWarn: (m) => this.warn(m),
|
|
154
195
|
onToolCall: (call) => this.decide(call),
|
|
@@ -159,6 +200,7 @@ class SessionGateImpl {
|
|
|
159
200
|
this.backup = await injectHook({
|
|
160
201
|
settingsPath: this.settingsPath,
|
|
161
202
|
port: this.port,
|
|
203
|
+
token: this.token,
|
|
162
204
|
timeout: this.opts.hookTimeoutSeconds,
|
|
163
205
|
});
|
|
164
206
|
}
|
|
@@ -169,10 +211,11 @@ class SessionGateImpl {
|
|
|
169
211
|
throw err;
|
|
170
212
|
}
|
|
171
213
|
}
|
|
172
|
-
bindSession(sessionId, nudge, resolveSubagentRelay) {
|
|
214
|
+
bindSession(sessionId, nudge, resolveSubagentRelay, noteActivity) {
|
|
173
215
|
this.sessionId = sessionId;
|
|
174
216
|
this.nudge = nudge;
|
|
175
217
|
this.resolveSubagentRelay = resolveSubagentRelay;
|
|
218
|
+
this.noteActivity = noteActivity;
|
|
176
219
|
}
|
|
177
220
|
bindPty(pty) {
|
|
178
221
|
this.pty = pty;
|
|
@@ -220,31 +263,45 @@ class SessionGateImpl {
|
|
|
220
263
|
`was bound to an ACP session — denying (cannot raise session/request_permission).`);
|
|
221
264
|
return "deny";
|
|
222
265
|
}
|
|
266
|
+
// FIX(gate-deadlock): the claude flushes the `tool_use` JSONL line only AFTER the hook decision,
|
|
267
|
+
// so correlating against the JSONL deadlocks — the line never reaches the pump during the wait
|
|
268
|
+
// (proven live 2026-06-25: total=9 frozen for 5s, the id only registered post-deny). Seed the
|
|
269
|
+
// correlator from the hook payload, the AUTHORITATIVE tool_use.id source, so the gate decides on
|
|
270
|
+
// the payload (the JSONL stays best-effort enrichment). Mirrors the ACP original's permission
|
|
271
|
+
// callback, which decided directly on the SDK-supplied tool id without a transcript round-trip.
|
|
272
|
+
this.correlator.ensureRegistered(call.toolUseId);
|
|
223
273
|
await this.waitForCorrelation(call.toolUseId);
|
|
224
|
-
// === Story 054 (§9 subagent relay) — AFTER the correlation wait, BEFORE the ACP prompt.
|
|
225
|
-
//
|
|
226
|
-
//
|
|
227
|
-
//
|
|
228
|
-
// requestPermission call below is byte-identical to today
|
|
229
|
-
//
|
|
230
|
-
//
|
|
231
|
-
//
|
|
232
|
-
//
|
|
233
|
-
|
|
274
|
+
// === Story 054/055 (§9 subagent relay) — AFTER the correlation wait, BEFORE the ACP prompt. =====
|
|
275
|
+
// R2.2 — the dialog LABEL is sourced from the payload's `agent_type` (carried by parsePayload,
|
|
276
|
+
// story 055/2.1): transcript-independent and known NOW, so a subagent tool is always attributed
|
|
277
|
+
// even when its parent Task id is not (yet) resolvable. A main-chain payload has no agent_type →
|
|
278
|
+
// `subagentLabel` stays undefined and the requestPermission call below is byte-identical to today
|
|
279
|
+
// (U1: bare tool name, dialog under the inner id).
|
|
280
|
+
//
|
|
281
|
+
// R2.3 — parent-Task GROUPING is BEST-EFFORT. The hook payload carries NO parent id; the only
|
|
282
|
+
// source is the session's sidechainParentMap, read lazily via the bound resolver and populated by
|
|
283
|
+
// the (transcript-lagging) pump. WHEN it resolves a non-null parent, the dialog attaches under that
|
|
284
|
+
// parent Task id Zed already rendered. For a subagent whose row has NOT landed yet, give the pump a
|
|
285
|
+
// brief re-nudged window to register it mid-wait (the join is pump-fed, like the inner correlation);
|
|
286
|
+
// on expiry we relay the LABELLED dialog under the INNER id. An orphan (parentId === null) or an
|
|
287
|
+
// unresolved subagent is therefore PROMPTED (labelled), NEVER silently denied — this REPLACES the
|
|
288
|
+
// story-054 orphan/uncorrelated visible deny. The only deny here is requestPermission's own
|
|
289
|
+
// fail-closed (transport error / cancelled / duplicate id), propagated unchanged.
|
|
290
|
+
let subagentLabel = call.agentType;
|
|
291
|
+
let relay = this.resolveSubagentRelay?.(call.toolUseId);
|
|
292
|
+
if (!relay && call.agentType !== undefined) {
|
|
293
|
+
// A subagent tool (agent_type present) whose parent row may still be in flight: best-effort wait.
|
|
294
|
+
relay = await this.waitForSubagentParent(call.toolUseId);
|
|
295
|
+
}
|
|
234
296
|
let dialogToolCallId;
|
|
235
|
-
let subagentLabel;
|
|
236
297
|
if (relay) {
|
|
237
|
-
//
|
|
238
|
-
//
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
: "never correlated in the JSONL within the wait window"} — denying (R4 visible deny).`);
|
|
244
|
-
return "deny";
|
|
298
|
+
// Prefer the payload label; fall back to the resolver's best-effort label (a pre-055 caller / a
|
|
299
|
+
// subagent payload that somehow omitted agent_type).
|
|
300
|
+
subagentLabel = call.agentType ?? relay.subagentLabel;
|
|
301
|
+
// Group ONLY under a real, resolvable parent; an orphan (null) falls through to the inner-id relay.
|
|
302
|
+
if (relay.parentId !== null) {
|
|
303
|
+
dialogToolCallId = relay.parentId;
|
|
245
304
|
}
|
|
246
|
-
dialogToolCallId = relay.parentId;
|
|
247
|
-
subagentLabel = relay.subagentLabel;
|
|
248
305
|
}
|
|
249
306
|
// === Story 054 (R5) — SERIALIZE only the raise+inject critical section. ========================
|
|
250
307
|
// dialogToolCallId/subagentLabel were computed above in the CONCURRENT prelude, so each enqueued
|
|
@@ -253,24 +310,33 @@ class SessionGateImpl {
|
|
|
253
310
|
// requestPermission + armAllowSweep one at a time — no native-prompt keystroke crossing on the
|
|
254
311
|
// shared PTY. A single sequential main-chain tool is a no-op through the queue (U1).
|
|
255
312
|
return this.enqueuePermission(async () => {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
313
|
+
// FIX(watchdog-permission): the claude is blocked on this response with the JSONL silent, so
|
|
314
|
+
// re-arm the end-of-turn watchdog for as long as the dialog is open (a slow human decision is
|
|
315
|
+
// NOT a dead turn). Always cleared in `finally`, on success or throw.
|
|
316
|
+
const stopHeartbeat = this.startPermissionHeartbeat();
|
|
317
|
+
try {
|
|
318
|
+
const decision = await requestPermission({
|
|
319
|
+
client: this.opts.client,
|
|
320
|
+
sessionId,
|
|
321
|
+
toolCall: {
|
|
322
|
+
toolUseId: call.toolUseId,
|
|
323
|
+
toolName: call.toolName,
|
|
324
|
+
toolInput: call.toolInput,
|
|
325
|
+
},
|
|
326
|
+
correlator: this.correlator,
|
|
327
|
+
onWarn: (m) => this.warn(m),
|
|
328
|
+
dialogToolCallId,
|
|
329
|
+
subagentLabel,
|
|
330
|
+
});
|
|
331
|
+
if (decision === "allow") {
|
|
332
|
+
// Return the allow body FIRST (claude is blocked on this response); sweep out of band.
|
|
333
|
+
this.armAllowSweep(call);
|
|
334
|
+
}
|
|
335
|
+
return decision;
|
|
336
|
+
}
|
|
337
|
+
finally {
|
|
338
|
+
stopHeartbeat();
|
|
272
339
|
}
|
|
273
|
-
return decision;
|
|
274
340
|
});
|
|
275
341
|
}
|
|
276
342
|
/** Bounded poll until the pump has registered `toolUseId` as a clean single JSONL match. On
|
|
@@ -318,6 +384,58 @@ class SessionGateImpl {
|
|
|
318
384
|
this.schedule(poll, pollMs);
|
|
319
385
|
});
|
|
320
386
|
}
|
|
387
|
+
/**
|
|
388
|
+
* Story 055 (R2.3) — BEST-EFFORT parent grouping for a subagent inner tool. The `agent_id → parent
|
|
389
|
+
* tool_use.id` join lives only in the (transcript-lagging) pump-fed `sidechainParentMap`, so the
|
|
390
|
+
* parent may not be registered at decide()-time. Poll the lazy resolver, re-nudging the pump on the
|
|
391
|
+
* same {@link DEFAULT_CORRELATION_RENUDGE_MS} cadence so a sidechain row landing MID-WAIT is caught,
|
|
392
|
+
* and resolve with the relay AS SOON AS it appears. On expiry resolve `undefined` — the caller then
|
|
393
|
+
* relays the LABELLED dialog under the inner id (never a deny). Bounded by the same correlation
|
|
394
|
+
* window since the join is pump-fed exactly like the inner correlation; a torn-down gate resolves
|
|
395
|
+
* `undefined` immediately. Only ever called for a subagent payload (agent_type present), so a
|
|
396
|
+
* main-chain tool never incurs this wait.
|
|
397
|
+
*/
|
|
398
|
+
waitForSubagentParent(innerToolUseId) {
|
|
399
|
+
const resolveNow = () => this.resolveSubagentRelay?.(innerToolUseId);
|
|
400
|
+
const immediate = resolveNow();
|
|
401
|
+
if (immediate)
|
|
402
|
+
return Promise.resolve(immediate);
|
|
403
|
+
const waitMs = this.opts.correlationWaitMs ?? DEFAULT_CORRELATION_WAIT_MS;
|
|
404
|
+
const pollMs = this.opts.correlationPollMs ?? DEFAULT_CORRELATION_POLL_MS;
|
|
405
|
+
const renudgeMs = this.opts.correlationRenudgeMs ?? DEFAULT_CORRELATION_RENUDGE_MS;
|
|
406
|
+
return new Promise((resolve) => {
|
|
407
|
+
let elapsed = 0;
|
|
408
|
+
let sinceNudge = 0;
|
|
409
|
+
const poll = () => {
|
|
410
|
+
if (this.torndown) {
|
|
411
|
+
resolve(undefined);
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
const r = resolveNow();
|
|
415
|
+
if (r) {
|
|
416
|
+
resolve(r);
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
elapsed += pollMs;
|
|
420
|
+
sinceNudge += pollMs;
|
|
421
|
+
if (sinceNudge >= renudgeMs) {
|
|
422
|
+
sinceNudge = 0;
|
|
423
|
+
try {
|
|
424
|
+
this.nudge?.();
|
|
425
|
+
}
|
|
426
|
+
catch {
|
|
427
|
+
// best-effort: a nudge failure only widens the grouping window; never rejects or decides
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
if (elapsed >= waitMs) {
|
|
431
|
+
resolve(undefined); // best-effort expiry — relay under the inner id (labelled), not a deny
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
this.schedule(poll, pollMs);
|
|
435
|
+
};
|
|
436
|
+
this.schedule(poll, pollMs);
|
|
437
|
+
});
|
|
438
|
+
}
|
|
321
439
|
/**
|
|
322
440
|
* #52822 sweep (allow path, best-effort by design): wait a bounded window for the native TUI
|
|
323
441
|
* prompt to APPEAR in the post-decision PTY output; if it never renders, allow-suppression held
|
|
@@ -10,6 +10,9 @@ export interface PreToolUsePayload {
|
|
|
10
10
|
tool_name?: string;
|
|
11
11
|
tool_input?: unknown;
|
|
12
12
|
tool_use_id?: string;
|
|
13
|
+
/** Story 055 (R2.1) — present ONLY on a subagent-internal tool: the subagent's own id and type. */
|
|
14
|
+
agent_id?: string;
|
|
15
|
+
agent_type?: string;
|
|
13
16
|
}
|
|
14
17
|
/** The normalized tool call forwarded to the decider (camelCase, the shape request-permission uses). */
|
|
15
18
|
export interface ForwardedToolCall {
|
|
@@ -18,6 +21,11 @@ export interface ForwardedToolCall {
|
|
|
18
21
|
toolUseId: string;
|
|
19
22
|
sessionId?: string;
|
|
20
23
|
permissionMode?: string;
|
|
24
|
+
/** Story 055 (R2.1) — the subagent's own id (`agent_id`); undefined for a main-chain tool. */
|
|
25
|
+
agentId?: string;
|
|
26
|
+
/** Story 055 (R2.1/R2.2) — the subagent's type (`agent_type`); the dialog label source. Undefined
|
|
27
|
+
* for a main-chain tool. There is NO parent tool_use.id in the payload (grouping is best-effort). */
|
|
28
|
+
agentType?: string;
|
|
21
29
|
}
|
|
22
30
|
/** The decider the server forwards each tool call to; returns the enforced `'allow'`/`'deny'`. */
|
|
23
31
|
export type ToolCallDecider = (call: ForwardedToolCall) => Promise<"allow" | "deny"> | "allow" | "deny";
|
|
@@ -46,6 +54,13 @@ export interface StartHookServerOptions {
|
|
|
46
54
|
createHttpServer?: () => Server;
|
|
47
55
|
/** Optional diagnostics sink for fail-closed events (defaults to no-op). */
|
|
48
56
|
onWarn?: (message: string) => void;
|
|
57
|
+
/**
|
|
58
|
+
* Story 055 (R1.3) — per-session secret token. WHEN set, a POST whose request path is not exactly
|
|
59
|
+
* `${FORK_HOOK_MARKER_PATH}/<token>` FAILS CLOSED (deny) WITHOUT invoking the decider — the
|
|
60
|
+
* compensating control for the relaxed JSONL anti-forgery. WHEN undefined, no token is enforced
|
|
61
|
+
* (the pre-055 behavior, used by the unit tests that construct the server directly).
|
|
62
|
+
*/
|
|
63
|
+
token?: string;
|
|
49
64
|
}
|
|
50
65
|
/** Default decider timeout (ms) — long enough for an async Zed decision relay, short of a hang. */
|
|
51
66
|
export declare const DEFAULT_DECIDER_TIMEOUT_MS = 600000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-server.d.ts","sourceRoot":"","sources":["../../src/permissions/hook-server.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"hook-server.d.ts","sourceRoot":"","sources":["../../src/permissions/hook-server.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAMjG;sGACsG;AACtG,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wGAAwG;AACxG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;0GACsG;IACtG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kGAAkG;AAClG,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,iBAAiB,KACpB,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAC3C,qCAAqC;IACrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IAChC,4EAA4E;IAC5E,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mGAAmG;AACnG,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAsBlD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CA6BlE;AAiCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CA8GjF"}
|
|
@@ -18,7 +18,9 @@
|
|
|
18
18
|
// user's real config — that wiring is the engine-integration concern; this module is the standalone
|
|
19
19
|
// server seam.
|
|
20
20
|
import { createServer } from "node:http";
|
|
21
|
+
import { appendFileSync } from "node:fs";
|
|
21
22
|
import { LOOPBACK_HOST } from "../gate/port.js";
|
|
23
|
+
import { FORK_HOOK_MARKER_PATH } from "../gate/settings-writer.js";
|
|
22
24
|
import { allowDecision, denyDecision } from "./deny.js";
|
|
23
25
|
/** Default decider timeout (ms) — long enough for an async Zed decision relay, short of a hang. */
|
|
24
26
|
export const DEFAULT_DECIDER_TIMEOUT_MS = 600_000;
|
|
@@ -70,6 +72,10 @@ export function parsePayload(raw) {
|
|
|
70
72
|
toolUseId,
|
|
71
73
|
sessionId: typeof parsed.session_id === "string" ? parsed.session_id : undefined,
|
|
72
74
|
permissionMode: typeof parsed.permission_mode === "string" ? parsed.permission_mode : undefined,
|
|
75
|
+
// R2.1 — carry the subagent attribution the §9 payload already ships (today they are dropped). A
|
|
76
|
+
// main-chain payload omits them → both stay undefined.
|
|
77
|
+
agentId: typeof parsed.agent_id === "string" ? parsed.agent_id : undefined,
|
|
78
|
+
agentType: typeof parsed.agent_type === "string" ? parsed.agent_type : undefined,
|
|
73
79
|
};
|
|
74
80
|
}
|
|
75
81
|
/** Run the decider with a timeout; on timeout or throw, resolve `'deny'` (fail closed). */
|
|
@@ -110,7 +116,7 @@ async function decideWithTimeout(decider, call, timeoutMs, onWarn) {
|
|
|
110
116
|
* fails fast rather than spawning claude with an ungated hook URL).
|
|
111
117
|
*/
|
|
112
118
|
export function startHookServer(opts) {
|
|
113
|
-
const { port, deciderTimeoutMs = DEFAULT_DECIDER_TIMEOUT_MS, createHttpServer = createServer, onWarn, } = opts;
|
|
119
|
+
const { port, deciderTimeoutMs = DEFAULT_DECIDER_TIMEOUT_MS, createHttpServer = createServer, onWarn, token, } = opts;
|
|
114
120
|
let decider = opts.onToolCall;
|
|
115
121
|
const server = createHttpServer();
|
|
116
122
|
server.on("request", (req, res) => {
|
|
@@ -119,6 +125,29 @@ export function startHookServer(opts) {
|
|
|
119
125
|
let call = null;
|
|
120
126
|
try {
|
|
121
127
|
const raw = await readBody(req);
|
|
128
|
+
// DIAGNOSTIC (env-gated, off by default): capture EVERY raw PreToolUse POST the fork's
|
|
129
|
+
// hook-server receives — including the subagent-attributed fields (agent_id/agent_type) that
|
|
130
|
+
// parsePayload drops — so a live run can verify whether subagent-internal tools POST at all.
|
|
131
|
+
if (process.env.FORK_HOOK_LOG_RAW) {
|
|
132
|
+
try {
|
|
133
|
+
appendFileSync(process.env.FORK_HOOK_LOG_RAW, raw + "\n");
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// best-effort diagnostic — never let logging fail the request
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// R1.3 (story 055): validate the per-session token from the request path BEFORE the decider.
|
|
140
|
+
// A POST that does not present `${FORK_HOOK_MARKER_PATH}/<token>` is denied without ever
|
|
141
|
+
// reaching the decider — the forge-resistance that compensates the payload-seeded correlation.
|
|
142
|
+
if (token !== undefined) {
|
|
143
|
+
const urlPath = (req.url ?? "").split("?")[0];
|
|
144
|
+
if (urlPath !== `${FORK_HOOK_MARKER_PATH}/${token}`) {
|
|
145
|
+
onWarn?.(`[gate §9] FAIL CLOSED: PreToolUse POST presented a missing/incorrect per-session token ` +
|
|
146
|
+
`(url path "${urlPath}") — denying WITHOUT invoking the decider.`);
|
|
147
|
+
writeDecision(res, denyDecision({ toolName: "(unauthorized)", toolUseId: "(unauthorized)" }));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
122
151
|
call = parsePayload(raw);
|
|
123
152
|
if (call === null) {
|
|
124
153
|
onWarn?.(`[gate §9] FAIL CLOSED: unparseable or identity-less PreToolUse payload — denying.`);
|
|
@@ -70,6 +70,15 @@ export declare class ToolUseCorrelator {
|
|
|
70
70
|
* observation marks it duplicate. Returns true on the FIRST registration, false on a duplicate.
|
|
71
71
|
*/
|
|
72
72
|
register(toolUseId: string): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* FIX(gate-deadlock): seed the correlator from the AUTHORITATIVE PreToolUse hook payload when the
|
|
75
|
+
* JSONL has not observed the id yet. The claude buffers the `tool_use` line and only flushes it to
|
|
76
|
+
* the transcript AFTER the hook decision, so waiting on the JSONL deadlocks (the line never arrives
|
|
77
|
+
* during the wait). Idempotent and safe: marks count=1 ONLY when unseen (0) — it never pushes an
|
|
78
|
+
* already-clean (1) id to duplicate (2), nor touches a genuine duplicate (>1). The pump's later
|
|
79
|
+
* observation of the same id (post-decision) is harmless: the id is already consumed by then.
|
|
80
|
+
*/
|
|
81
|
+
ensureRegistered(toolUseId: string): void;
|
|
73
82
|
/** True iff `toolUseId` was observed EXACTLY once in the JSONL and has not yet been consumed. */
|
|
74
83
|
isCleanMatch(toolUseId: string): boolean;
|
|
75
84
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-permission.d.ts","sourceRoot":"","sources":["../../src/permissions/request-permission.ts"],"names":[],"mappings":"AAoBA,yEAAyE;AACzE,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,eAAe,CAAC;AAEnG,oGAAoG;AACpG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAED,6FAA6F;AAC7F,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,yDAAyD;AACzD,MAAM,MAAM,wBAAwB,GAChC;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,GACxB;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C,8DAA8D;AAC9D,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,wBAAwB,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACtF;AAED,iGAAiG;AACjG,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wFAAwF;AACxF,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,gFAAgF;AAChF,wBAAgB,sBAAsB,IAAI,gBAAgB,EAAE,CAK3D;AAED;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAC5B,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,qGAAqG;IACrG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAE9C;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAMpC,iGAAiG;IACjG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;OAKG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;CAS9C;AAED,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,sFAAsF;IACtF,UAAU,EAAE,iBAAiB,CAAC;IAC9B,sGAAsG;IACtG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;oGACgG;IAChG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"request-permission.d.ts","sourceRoot":"","sources":["../../src/permissions/request-permission.ts"],"names":[],"mappings":"AAoBA,yEAAyE;AACzE,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,eAAe,CAAC;AAEnG,oGAAoG;AACpG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAED,6FAA6F;AAC7F,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,yDAAyD;AACzD,MAAM,MAAM,wBAAwB,GAChC;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,GACxB;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C,8DAA8D;AAC9D,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,wBAAwB,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACtF;AAED,iGAAiG;AACjG,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wFAAwF;AACxF,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,gFAAgF;AAChF,wBAAgB,sBAAsB,IAAI,gBAAgB,EAAE,CAK3D;AAED;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAC5B,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,qGAAqG;IACrG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAE9C;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAMpC;;;;;;;OAOG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIzC,iGAAiG;IACjG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;OAKG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;CAS9C;AAED,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,sFAAsF;IACtF,UAAU,EAAE,iBAAiB,CAAC;IAC9B,sGAAsG;IACtG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;oGACgG;IAChG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CA0DjG"}
|
|
@@ -52,6 +52,18 @@ export class ToolUseCorrelator {
|
|
|
52
52
|
this.seen.set(toolUseId, count + 1);
|
|
53
53
|
return count === 0;
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* FIX(gate-deadlock): seed the correlator from the AUTHORITATIVE PreToolUse hook payload when the
|
|
57
|
+
* JSONL has not observed the id yet. The claude buffers the `tool_use` line and only flushes it to
|
|
58
|
+
* the transcript AFTER the hook decision, so waiting on the JSONL deadlocks (the line never arrives
|
|
59
|
+
* during the wait). Idempotent and safe: marks count=1 ONLY when unseen (0) — it never pushes an
|
|
60
|
+
* already-clean (1) id to duplicate (2), nor touches a genuine duplicate (>1). The pump's later
|
|
61
|
+
* observation of the same id (post-decision) is harmless: the id is already consumed by then.
|
|
62
|
+
*/
|
|
63
|
+
ensureRegistered(toolUseId) {
|
|
64
|
+
if ((this.seen.get(toolUseId) ?? 0) === 0)
|
|
65
|
+
this.seen.set(toolUseId, 1);
|
|
66
|
+
}
|
|
55
67
|
/** True iff `toolUseId` was observed EXACTLY once in the JSONL and has not yet been consumed. */
|
|
56
68
|
isCleanMatch(toolUseId) {
|
|
57
69
|
return this.seen.get(toolUseId) === 1 && !this.consumed.has(toolUseId);
|
|
@@ -96,12 +108,15 @@ export async function requestPermission(opts) {
|
|
|
96
108
|
result = await client.requestPermission({
|
|
97
109
|
sessionId,
|
|
98
110
|
toolCall: {
|
|
99
|
-
// Story 054: a subagent inner tool relays under the PARENT Task id Zed already rendered
|
|
100
|
-
// (dialogToolCallId)
|
|
101
|
-
//
|
|
111
|
+
// Story 054/055: a subagent inner tool relays under the PARENT Task id Zed already rendered
|
|
112
|
+
// (dialogToolCallId) WHEN the parent is resolvable; otherwise it keeps the inner id. Story 055
|
|
113
|
+
// (R2.2) DECOUPLES the attributed title from dialogToolCallId: the title is labelled whenever
|
|
114
|
+
// `subagentLabel` is set (sourced from the payload's agent_type), so a fast subagent whose
|
|
115
|
+
// parent has not yet been resolved still renders `<tool> · from the <agent_type> agent` under
|
|
116
|
+
// the inner id. A main-chain call (no subagentLabel) stays byte-identical: bare tool name.
|
|
102
117
|
toolCallId: dialogToolCallId ?? toolCall.toolUseId,
|
|
103
|
-
title:
|
|
104
|
-
? `${toolCall.toolName} · from the ${subagentLabel
|
|
118
|
+
title: subagentLabel !== undefined
|
|
119
|
+
? `${toolCall.toolName} · from the ${subagentLabel} agent`
|
|
105
120
|
: toolCall.toolName,
|
|
106
121
|
rawInput: toolCall.toolInput,
|
|
107
122
|
},
|
package/dist/tools.d.ts
CHANGED
|
@@ -50,8 +50,16 @@ export declare function toDisplayPath(filePath: string, cwd?: string): string;
|
|
|
50
50
|
export declare function toolCallIdFor(toolUseId: string, sessionId: string, options?: {
|
|
51
51
|
namespaced?: boolean;
|
|
52
52
|
}): string;
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
/** Minimal shape of a raw JSONL `tool_use` block consumed by the tool mappers. */
|
|
54
|
+
interface RawToolUse {
|
|
55
|
+
name: string;
|
|
56
|
+
id: string;
|
|
57
|
+
input?: unknown;
|
|
58
|
+
}
|
|
59
|
+
export declare function toolInfoFromToolUse(toolUse: RawToolUse, supportsTerminalOutput?: boolean, cwd?: string): ToolInfo;
|
|
60
|
+
export declare function toolUpdateFromToolResult(toolResult: ToolResultBlockParam | BetaToolResultBlockParam | BetaWebSearchToolResultBlockParam | BetaWebFetchToolResultBlockParam | WebSearchToolResultBlockParam | BetaCodeExecutionToolResultBlockParam | BetaBashCodeExecutionToolResultBlockParam | BetaTextEditorCodeExecutionToolResultBlockParam | BetaRequestMCPToolResultBlockParam | BetaToolSearchToolResultBlockParam, toolUse: {
|
|
61
|
+
name?: string;
|
|
62
|
+
} | undefined, supportsTerminalOutput?: boolean): ToolUpdate;
|
|
55
63
|
export type ClaudePlanEntry = {
|
|
56
64
|
content: string;
|
|
57
65
|
status: "pending" | "in_progress" | "completed";
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACT,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAQL,eAAe,EACf,gBAAgB,EAChB,eAAe,EAIhB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAGL,oBAAoB,EAEpB,6BAA6B,EAE9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,yCAAyC,EAGzC,qCAAqC,EAGrC,kCAAkC,EAGlC,+CAA+C,EAI/C,wBAAwB,EACxB,kCAAkC,EAIlC,gCAAgC,EAEhC,iCAAiC,EAClC,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AA0BxC,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE;QACN,aAAa,CAAC,EAAE;YACd,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,eAAe,CAAC,EAAE;YAChB,WAAW,EAAE,MAAM,CAAC;YACpB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,aAAa,CAAC,EAAE;YACd,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;SACvB,CAAC;KACH,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/usage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,iFAAiF;AACjF,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,aAAa,EAAE;IAAE,aAAa,EAAE,cAAc,CAAA;CAAE,CAAC,CAAC;AAEhG,yFAAyF;AACzF,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,YAAiB,GACzB,uBAAuB,GAAG,SAAS,CAUrC;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,wFAAwF;IACxF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,gBAAqB,GAC7B,uBAAuB,EAAE,CAI3B"}
|
package/dist/usage.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
// Story 025 / Group 3 (R3.1, R3.2) — the optional
|
|
2
|
-
//
|
|
1
|
+
// Story 025 / Group 3 (R3.1, R3.2) — the optional UNSTABLE `usage_update` mapping.
|
|
2
|
+
// `usage_update` exists ONLY in the @agentclientprotocol/sdk 0.22.1 schema and is
|
|
3
3
|
// best-effort per §1; it maps the JSONL message-event `usage.{input,output}_tokens` into the
|
|
4
|
-
// SDK's { sessionUpdate:"usage_update", size, used } shape.
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// SDK's { sessionUpdate:"usage_update", size, used } shape. Story 042 FLIPPED the default to ON
|
|
5
|
+
// (story 039 confirmed the user's Zed ACCEPTS+RENDERS it by code); only the explicit opt-out
|
|
6
|
+
// USAGE_UPDATE=0/false disables it (see usage-env.ts). A rejected emission is still suppressed by
|
|
7
|
+
// the pump's per-session reject latch (Task 5.1, R8).
|
|
7
8
|
//
|
|
8
9
|
// Kept a self-contained module (cf. diff-source.ts) imported by the acp-agent pump; it does
|
|
9
10
|
// NOT go through lib.ts (the frozen upstream export surface).
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.5.
|
|
6
|
+
"version": "0.5.2",
|
|
7
7
|
"description": "Run the official Claude Code TUI in Zed's agent panel on your Claude Pro/Max subscription — an ACP-over-PTY bridge created for Anthropic's billing split (paused June 15; see README).",
|
|
8
8
|
"main": "dist/lib.js",
|
|
9
9
|
"types": "dist/lib.d.ts",
|