@harness-nexus/cli 0.1.0-alpha.3 → 0.1.0-alpha.4

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.
@@ -4,6 +4,14 @@ export type PermissionOutcome = {
4
4
  } | {
5
5
  outcome: 'cancelled';
6
6
  };
7
+ /**
8
+ * A JSON-RPC request id, echoed VERBATIM when answering an agent-initiated
9
+ * request. Adapters disagree on the shape: the Zed wrappers count ints, but
10
+ * codex-acp sends UUIDs — so a `Number()` coercion turns its id into NaN and
11
+ * the encoded reply carries `"id":null`, which the agent cannot match (the
12
+ * permission then waits forever and the turn hangs).
13
+ */
14
+ export type JsonRpcId = string | number | null;
7
15
  export interface AcpAgentInfo {
8
16
  name?: string | undefined;
9
17
  version?: string | undefined;
@@ -29,8 +37,18 @@ export interface AcpSessionCaps {
29
37
  * ("opening a history session shows an empty pane").
30
38
  */
31
39
  export declare function deriveSessionCaps(result: unknown): AcpSessionCaps;
40
+ /**
41
+ * 9 W9 B — prompt-content capabilities from the initialize result. `image`
42
+ * gates the composer's attach affordance; dsh derives it per model route so
43
+ * a live channel may legitimately advertise false.
44
+ */
45
+ export declare function derivePromptCaps(result: unknown): {
46
+ image: boolean;
47
+ };
32
48
  export declare class AcpAgentConnection {
33
49
  private proc;
50
+ /** The detached leader's pid — which is also its process-group id. */
51
+ readonly pgid: number | null;
34
52
  private nextId;
35
53
  private pending;
36
54
  private stderrTail;
@@ -38,25 +56,41 @@ export declare class AcpAgentConnection {
38
56
  private onPermission;
39
57
  private exited;
40
58
  private constructor();
41
- /** Spawn + `initialize` handshake + `initialized` notification. */
59
+ /**
60
+ * Spawn + `initialize` handshake + `initialized` notification.
61
+ *
62
+ * 9 W11 A — `onSpawned` fires synchronously right after the detached spawn
63
+ * (BEFORE initialize) so the caller can ledger the process group while the
64
+ * hard-death window is still open; a throwing callback kills the spawn and
65
+ * fails the start (an unledgered adapter is worse than a closed channel).
66
+ */
42
67
  static start(command: string, args: string[], opts: {
43
68
  cwd: string;
44
69
  env?: NodeJS.ProcessEnv | undefined;
45
70
  initializeTimeoutMs?: number;
71
+ onSpawned?: (pgid: number) => void;
46
72
  }): Promise<{
47
73
  conn: AcpAgentConnection;
48
74
  agentInfo: AcpAgentInfo;
49
75
  sessionCaps: AcpSessionCaps;
76
+ promptCaps: {
77
+ image: boolean;
78
+ };
50
79
  }>;
51
80
  /** JSON-RPC request with a timeout; rejects on error/exit. */
52
81
  request(method: string, params: unknown, timeoutMs: number): Promise<unknown>;
53
82
  notify(method: string, params: unknown): void;
54
83
  /** Answer the agent's `session/request_permission` (optionId verbatim). */
55
- respondPermission(jsonrpcId: number, outcome: PermissionOutcome): void;
84
+ respondPermission(jsonrpcId: JsonRpcId, outcome: PermissionOutcome): void;
56
85
  setNotificationHandler(handler: (method: string, params: Record<string, unknown>) => void): void;
57
- setPermissionHandler(handler: (jsonrpcId: number, params: Record<string, unknown>) => void): void;
86
+ setPermissionHandler(handler: (jsonrpcId: JsonRpcId, params: Record<string, unknown>) => void): void;
58
87
  /** Fires when the subprocess exits on its own (crash/quit) — not on kill(). */
59
88
  onExit(handler: () => void): void;
89
+ /**
90
+ * Whether the process GROUP still exists (the audit's backstop — a session
91
+ * whose group died without the exit event reaching teardown).
92
+ */
93
+ isGroupAlive(): boolean;
60
94
  /**
61
95
  * SIGTERM the whole process GROUP, then SIGKILL it after `graceMs`.
62
96
  * Idempotent. The group signal is the point: the direct child (npm/npx)
@@ -1 +1 @@
1
- {"version":3,"file":"agent-connection.d.ts","sourceRoot":"","sources":["../../../src/daemon/acp/agent-connection.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,iBAAiB,GAC3B;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,IAAI,EAAE,OAAO,CAAC;IACd,uEAAuE;IACvE,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAcjE;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,cAAc,CAA4E;IAClG,OAAO,CAAC,YAAY,CACb;IACP,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAwBP,mEAAmE;WACtD,KAAK,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,GACvF,OAAO,CAAC;QACT,IAAI,EAAE,kBAAkB,CAAC;QACzB,SAAS,EAAE,YAAY,CAAC;QACxB,WAAW,EAAE,cAAc,CAAC;KAC7B,CAAC;IAsCF,8DAA8D;IAC9D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB7E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAI7C,2EAA2E;IAC3E,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAItE,sBAAsB,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAIhG,oBAAoB,CAClB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GACpE,IAAI;IAIP,+EAA+E;IAC/E,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC;;;;;;;OAOG;IACH,IAAI,CAAC,OAAO,SAAO,GAAG,IAAI;IAoB1B,OAAO,CAAC,UAAU;IA4ClB,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,gBAAgB;CAGzB"}
1
+ {"version":3,"file":"agent-connection.d.ts","sourceRoot":"","sources":["../../../src/daemon/acp/agent-connection.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,iBAAiB,GAC3B;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,IAAI,EAAE,OAAO,CAAC;IACd,uEAAuE;IACvE,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAcjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,CAKpE;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAAe;IAC3B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,cAAc,CAA4E;IAClG,OAAO,CAAC,YAAY,CACb;IACP,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAyBP;;;;;;;OAOG;WACU,KAAK,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;QACpC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KACpC,GACA,OAAO,CAAC;QACT,IAAI,EAAE,kBAAkB,CAAC;QACzB,SAAS,EAAE,YAAY,CAAC;QACxB,WAAW,EAAE,cAAc,CAAC;QAC5B,UAAU,EAAE;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;KAChC,CAAC;IAyDF,8DAA8D;IAC9D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB7E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAI7C,2EAA2E;IAC3E,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIzE,sBAAsB,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAIhG,oBAAoB,CAClB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GACvE,IAAI;IAIP,+EAA+E;IAC/E,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC;;;OAGG;IACH,YAAY,IAAI,OAAO;IAIvB;;;;;;;OAOG;IACH,IAAI,CAAC,OAAO,SAAO,GAAG,IAAI;IAoB1B,OAAO,CAAC,UAAU;IA+ClB,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,gBAAgB;CAGzB"}
@@ -1,5 +1,6 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  import { createInterface } from 'node:readline';
3
+ import { groupIsAlive } from '../adapter-ledger.js';
3
4
  /**
4
5
  * Advertised caps decide the resume dialect (9 W7): prefer `session/load`
5
6
  * (replay for free), fall back to `session/resume`. `loadSession` is the
@@ -22,8 +23,19 @@ export function deriveSessionCaps(result) {
22
23
  list: caps['list'] !== undefined,
23
24
  };
24
25
  }
26
+ /**
27
+ * 9 W9 B — prompt-content capabilities from the initialize result. `image`
28
+ * gates the composer's attach affordance; dsh derives it per model route so
29
+ * a live channel may legitimately advertise false.
30
+ */
31
+ export function derivePromptCaps(result) {
32
+ const r = (result ?? {});
33
+ return { image: r.agentCapabilities?.promptCapabilities?.image === true };
34
+ }
25
35
  export class AcpAgentConnection {
26
36
  proc;
37
+ /** The detached leader's pid — which is also its process-group id. */
38
+ pgid;
27
39
  nextId = 1;
28
40
  pending = new Map();
29
41
  stderrTail = [];
@@ -32,6 +44,7 @@ export class AcpAgentConnection {
32
44
  exited = false;
33
45
  constructor(proc) {
34
46
  this.proc = proc;
47
+ this.pgid = proc.pid ?? null;
35
48
  const rl = createInterface({ input: proc.stdout });
36
49
  rl.on('line', (line) => this.handleLine(line));
37
50
  proc.stderr?.on('data', (chunk) => {
@@ -54,7 +67,14 @@ export class AcpAgentConnection {
54
67
  this.pending.clear();
55
68
  });
56
69
  }
57
- /** Spawn + `initialize` handshake + `initialized` notification. */
70
+ /**
71
+ * Spawn + `initialize` handshake + `initialized` notification.
72
+ *
73
+ * 9 W11 A — `onSpawned` fires synchronously right after the detached spawn
74
+ * (BEFORE initialize) so the caller can ledger the process group while the
75
+ * hard-death window is still open; a throwing callback kills the spawn and
76
+ * fails the start (an unledgered adapter is worse than a closed channel).
77
+ */
58
78
  static async start(command, args, opts) {
59
79
  const initializeTimeoutMs = opts.initializeTimeoutMs ?? 20000;
60
80
  let proc;
@@ -77,12 +97,33 @@ export class AcpAgentConnection {
77
97
  proc.on('error', (e) => {
78
98
  conn.failAll(new Error(`ACP adapter '${command}' failed: ${errText(e)}`));
79
99
  });
80
- const result = (await conn.request('initialize', { protocolVersion: 1, clientCapabilities: {} }, initializeTimeoutMs));
100
+ if (opts.onSpawned !== undefined && proc.pid !== undefined) {
101
+ try {
102
+ opts.onSpawned(proc.pid);
103
+ }
104
+ catch (e) {
105
+ conn.kill();
106
+ throw new Error(`failed to ledger ACP adapter '${command}': ${errText(e)}`);
107
+ }
108
+ }
109
+ let result;
110
+ try {
111
+ result = (await conn.request('initialize', { protocolVersion: 1, clientCapabilities: {} }, initializeTimeoutMs));
112
+ }
113
+ catch (e) {
114
+ // The caller never receives this connection (start has not returned),
115
+ // so no one else would kill it — a timed-out/failed initialize must
116
+ // not leak the spawned group. This closes the pre-W11 leak where a
117
+ // hung initialize left a live adapter behind a dead channel.
118
+ conn.kill();
119
+ throw e;
120
+ }
81
121
  conn.notify('initialized', {});
82
122
  return {
83
123
  conn,
84
124
  agentInfo: result?.agentInfo ?? {},
85
125
  sessionCaps: deriveSessionCaps(result),
126
+ promptCaps: derivePromptCaps(result),
86
127
  };
87
128
  }
88
129
  /** JSON-RPC request with a timeout; rejects on error/exit. */
@@ -121,6 +162,13 @@ export class AcpAgentConnection {
121
162
  onExit(handler) {
122
163
  this.proc.on('exit', handler);
123
164
  }
165
+ /**
166
+ * Whether the process GROUP still exists (the audit's backstop — a session
167
+ * whose group died without the exit event reaching teardown).
168
+ */
169
+ isGroupAlive() {
170
+ return this.pgid !== null && groupIsAlive(this.pgid);
171
+ }
124
172
  /**
125
173
  * SIGTERM the whole process GROUP, then SIGKILL it after `graceMs`.
126
174
  * Idempotent. The group signal is the point: the direct child (npm/npx)
@@ -163,7 +211,7 @@ export class AcpAgentConnection {
163
211
  return; // agents log noise on stdout sometimes; skip non-JSON lines
164
212
  }
165
213
  if (msg.method === 'session/request_permission' && msg.id !== undefined) {
166
- this.onPermission?.(Number(msg.id), msg.params ?? {});
214
+ this.onPermission?.(msg.id, msg.params ?? {});
167
215
  return;
168
216
  }
169
217
  if (msg.method !== undefined) {
@@ -179,9 +227,12 @@ export class AcpAgentConnection {
179
227
  this.pending.delete(Number(msg.id));
180
228
  clearTimeout(pending.timer);
181
229
  if (msg.error !== undefined) {
182
- // Error `data` (e.g. dsh's `details: "no adapter registered for …"`)
183
- // rides along the callers key retry/surface logic off it.
184
- const details = msg.error.data?.details;
230
+ // Error `data` rides along the callers key retry/surface logic off
231
+ // it. The detail FIELD differs per adapter dialect: dsh uses
232
+ // `data.details`, codex-acp uses `data.message` (its top-level
233
+ // message is a useless "Internal error").
234
+ const data = msg.error.data;
235
+ const details = [data?.message, data?.details].filter(Boolean).join(': ');
185
236
  pending.reject(new Error(`${msg.error.message ?? 'ACP request failed'}${details ? `: ${details}` : ''}`));
186
237
  }
187
238
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-connection.js","sourceRoot":"","sources":["../../../src/daemon/acp/agent-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAmChD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAGtB,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,mBAAmB,IAAI,EAAE,CAAC;IAC5D,OAAO;QACL,IAAI,EACF,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS;YAC1B,CAAC,CAAC,WAAW,KAAK,IAAI;YACtB,CAAC,CAAC,iBAAiB,EAAE,WAAW,KAAK,IAAI;QAC3C,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS;QACpC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,kBAAkB;IACrB,IAAI,CAAe;IACnB,MAAM,GAAG,CAAC,CAAC;IACX,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC5C,UAAU,GAAa,EAAE,CAAC;IAC1B,cAAc,GAAuE,IAAI,CAAC;IAC1F,YAAY,GAClB,IAAI,CAAC;IACC,MAAM,GAAG,KAAK,CAAC;IAEvB,YAAoB,IAAkB;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAO,EAAE,CAAC,CAAC;QACpD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,2DAA2D;YAC3D,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAClC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE;wBAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBAC3D,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACrF,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mEAAmE;IACnE,MAAM,CAAC,KAAK,CAAC,KAAK,CAChB,OAAe,EACf,IAAc,EACd,IAAwF;QAMxF,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC;QAC9D,IAAI,IAAkB,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;gBAC1B,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;gBAC5C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,gEAAgE;gBAChE,gEAAgE;gBAChE,qEAAqE;gBACrE,iEAAiE;gBACjE,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,gBAAgB,OAAO,aAAa,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAChC,YAAY,EACZ,EAAE,eAAe,EAAE,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAC9C,mBAAmB,CACpB,CAIA,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC/B,OAAO;YACL,IAAI;YACJ,SAAS,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE;YAClC,WAAW,EAAE,iBAAiB,CAAC,MAAM,CAAC;SACvC,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,OAAO,CAAC,MAAc,EAAE,MAAe,EAAE,SAAiB;QACxD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,MAAM,qBAAqB,SAAS,IAAI,CAAC,CAAC,CAAC;YAC9E,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;gBACnB,OAAO;gBACP,MAAM;gBACN,KAAK,EAAE,KAAkC;aAC1C,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,MAAe;QACpC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,2EAA2E;IAC3E,iBAAiB,CAAC,SAAiB,EAAE,OAA0B;QAC7D,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,sBAAsB,CAAC,OAAkE;QACvF,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAED,oBAAoB,CAClB,OAAqE;QAErE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,CAAC;IAED,+EAA+E;IAC/E,MAAM,CAAC,OAAmB;QACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,OAAO,GAAG,IAAI;QACjB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO;QACpD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,MAAM,QAAQ,GAAG,CAAC,GAAmB,EAAQ,EAAE;YAC7C,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO;YAC9B,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,mCAAmC;YAC9D,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACjE,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mCAAmC;QAC9D,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,EAAE;YAAE,OAAO;QAC3B,IAAI,GAMH,CAAC;QACF,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,4DAA4D;QACtE,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,4BAA4B,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YACxE,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC5C,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,CAAC,mEAAmE;QAC7E,CAAC;QACD,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC5B,qEAAqE;gBACrE,4DAA4D;gBAC5D,MAAM,OAAO,GAAI,GAAG,CAAC,KAAyC,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC7E,OAAO,CAAC,MAAM,CACZ,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,oBAAoB,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC1F,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,OAAgB;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACpD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAEO,OAAO,CAAC,GAAU;QACxB,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAEO,gBAAgB;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,CAAC;CACF;AAED,SAAS,OAAO,CAAC,CAAU;IACzB,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"agent-connection.js","sourceRoot":"","sources":["../../../src/daemon/acp/agent-connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Adapter process ledger (Phase 9 W11 A) — the daemon's crash-proof account
3
+ * of every adapter process GROUP it created. One JSON file per live adapter
4
+ * under `~/.hnx/adapters/<wireSessionId>.json`:
5
+ *
6
+ * { pgid, target, command, wireSessionId, nativeSessionId?, startedAt }
7
+ *
8
+ * Invariants:
9
+ * - The entry is written INSIDE `AcpAgentConnection.start`, right after the
10
+ * detached spawn and BEFORE initialize — a hard death during establishment
11
+ * still leaves a sweepable record (Principle: a crash may orphan a
12
+ * process, never an UNACCOUNTED one).
13
+ * - Kill paths never unlink: files are removed ONLY by the periodic audit
14
+ * (group gone) or the boot sweep. Removing at teardown would lose
15
+ * accounting if the daemon hard-dies inside the SIGTERM→SIGKILL grace —
16
+ * leaving the file lets the next boot's sweep finish the reap instead.
17
+ * - No secrets: the command name only (credentials live in the target's
18
+ * native config, never in adapter argv/env).
19
+ * - One daemon per (user, home): a second daemon's boot sweep would reap the
20
+ * first one's live adapters. Concurrent daemons on one home are already
21
+ * unsupported (shared ~/.hnx/config.json, double job dispatch).
22
+ */
23
+ export interface AdapterLedgerEntry {
24
+ /** The process-group id (the detached leader's pid). */
25
+ pgid: number;
26
+ target: string;
27
+ command: string;
28
+ wireSessionId: string;
29
+ nativeSessionId?: string;
30
+ startedAt: number;
31
+ }
32
+ export declare function adapterLedgerDir(home: string): string;
33
+ export declare function writeAdapterLedgerEntry(home: string, entry: AdapterLedgerEntry): void;
34
+ /** All valid entries (malformed files are skipped here, not deleted). */
35
+ export declare function readAdapterLedger(home: string): AdapterLedgerEntry[];
36
+ /**
37
+ * Whether the process GROUP still exists. EPERM (the group exists but is
38
+ * owned by someone else — pid reuse made it foreign) counts as NOT ours:
39
+ * every caller treats a false answer as "drop the file without signaling",
40
+ * so a foreign process is never killed on our word alone.
41
+ */
42
+ export declare function groupIsAlive(pgid: number): boolean;
43
+ /** SIGTERM the group, then SIGKILL after `graceMs` (unref'd — mirrors conn.kill). */
44
+ export declare function killProcessGroup(pgid: number, graceMs?: number): void;
45
+ /**
46
+ * Boot sweep — run ONCE at daemon start, before anything here can spawn a
47
+ * new adapter: every still-alive pgid in the ledger is a leftover from a
48
+ * previous instance's hard death (SIGKILL/OOM skip every teardown path; the
49
+ * detached groups survive it). Kills live groups, deletes every file.
50
+ * Returns what happened so the caller can log it.
51
+ */
52
+ export declare function sweepAdapterLedger(home: string): {
53
+ reaped: number;
54
+ dropped: number;
55
+ };
56
+ /**
57
+ * Periodic audit — the ONLY runtime remover of ledger files: an entry whose
58
+ * group is gone (the adapter exited, or a teardown's kill completed) is
59
+ * deleted; live entries stay. Returns how many files were dropped.
60
+ */
61
+ export declare function auditAdapterLedger(home: string): number;
62
+ //# sourceMappingURL=adapter-ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-ledger.d.ts","sourceRoot":"","sources":["../../src/daemon/adapter-ledger.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAcrF;AAyBD,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAepE;AAiCD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,IAAI,CAWnE;AAsCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAcpF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASvD"}
@@ -0,0 +1,207 @@
1
+ import { mkdirSync, readdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ /** Wire session ids are server-generated base64url-ish tokens. */
4
+ const WIRE_ID = /^[A-Za-z0-9_-]{1,128}$/;
5
+ /** Sanity bound — a daemon owns at most CHAT_MAX_SESSIONS_PER_MACHINE of these. */
6
+ const MAX_FILES = 256;
7
+ export function adapterLedgerDir(home) {
8
+ return join(home, '.hnx', 'adapters');
9
+ }
10
+ export function writeAdapterLedgerEntry(home, entry) {
11
+ if (!WIRE_ID.test(entry.wireSessionId)) {
12
+ throw new Error('refusing adapter ledger write: unsafe wire session id');
13
+ }
14
+ if (!Number.isInteger(entry.pgid) || entry.pgid <= 0) {
15
+ throw new Error(`refusing adapter ledger write: invalid pgid ${String(entry.pgid)}`);
16
+ }
17
+ const dir = adapterLedgerDir(home);
18
+ mkdirSync(dir, { recursive: true });
19
+ const file = join(dir, `${entry.wireSessionId}.json`);
20
+ const tmp = `${file}.tmp`;
21
+ writeFileSync(tmp, `${JSON.stringify(entry)}\n`, 'utf8');
22
+ // Atomic swap — a crash mid-write can never half-replace an entry.
23
+ renameSync(tmp, file);
24
+ }
25
+ /** Parse one ledger file; null = malformed (not an entry we ever wrote). */
26
+ function parseEntry(file) {
27
+ let parsed;
28
+ try {
29
+ parsed = JSON.parse(readFileSync(file, 'utf8'));
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ if (typeof parsed['pgid'] === 'number' &&
35
+ Number.isInteger(parsed['pgid']) &&
36
+ parsed['pgid'] > 0 &&
37
+ typeof parsed['target'] === 'string' &&
38
+ typeof parsed['command'] === 'string' &&
39
+ typeof parsed['wireSessionId'] === 'string' &&
40
+ WIRE_ID.test(parsed['wireSessionId']) &&
41
+ typeof parsed['startedAt'] === 'number') {
42
+ return parsed;
43
+ }
44
+ return null;
45
+ }
46
+ /** All valid entries (malformed files are skipped here, not deleted). */
47
+ export function readAdapterLedger(home) {
48
+ const dir = adapterLedgerDir(home);
49
+ let names;
50
+ try {
51
+ names = readdirSync(dir);
52
+ }
53
+ catch {
54
+ return []; // no ledger dir yet — nothing was ever spawned here
55
+ }
56
+ const out = [];
57
+ for (const name of names.slice(0, MAX_FILES)) {
58
+ if (!name.endsWith('.json'))
59
+ continue;
60
+ const entry = parseEntry(join(dir, name));
61
+ if (entry !== null)
62
+ out.push(entry);
63
+ }
64
+ return out;
65
+ }
66
+ /**
67
+ * Whether the process GROUP has at least one LIVE (non-zombie) member.
68
+ * `kill(-pgid, 0)` alone cannot tell: a ZOMBIE stays answerable forever,
69
+ * and on machines whose PID 1 does not reap (a bare docker CMD, nohup under
70
+ * a plain shell) orphaned grandchildren zombify and would pin their ledger
71
+ * entry past every audit. Linux /proc walk; where /proc is absent the
72
+ * kill() answer stands (conservative).
73
+ */
74
+ function groupHasLiveMember(pgid) {
75
+ let names;
76
+ try {
77
+ names = readdirSync('/proc');
78
+ }
79
+ catch {
80
+ return true;
81
+ }
82
+ for (const name of names) {
83
+ if (!/^[0-9]+$/.test(name))
84
+ continue;
85
+ let stat;
86
+ try {
87
+ stat = readFileSync(`/proc/${name}/stat`, 'utf8');
88
+ }
89
+ catch {
90
+ continue; // raced an exit — the next call re-reads
91
+ }
92
+ // Fields after `(comm)`: state ppid pgrp … (comm may contain spaces).
93
+ const fields = stat.slice(stat.lastIndexOf(')') + 2).split(' ');
94
+ if (fields.length < 3)
95
+ continue;
96
+ if (Number.parseInt(fields[2], 10) === pgid && fields[0] !== 'Z')
97
+ return true;
98
+ }
99
+ return false;
100
+ }
101
+ /**
102
+ * Whether the process GROUP still exists. EPERM (the group exists but is
103
+ * owned by someone else — pid reuse made it foreign) counts as NOT ours:
104
+ * every caller treats a false answer as "drop the file without signaling",
105
+ * so a foreign process is never killed on our word alone.
106
+ */
107
+ export function groupIsAlive(pgid) {
108
+ try {
109
+ process.kill(-pgid, 0);
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ return groupHasLiveMember(pgid);
115
+ }
116
+ /** SIGTERM the group, then SIGKILL after `graceMs` (unref'd — mirrors conn.kill). */
117
+ export function killProcessGroup(pgid, graceMs = 3000) {
118
+ const sig = (s) => {
119
+ try {
120
+ process.kill(-pgid, s);
121
+ }
122
+ catch {
123
+ // group already gone
124
+ }
125
+ };
126
+ const t = setTimeout(() => sig('SIGKILL'), graceMs);
127
+ t.unref();
128
+ sig('SIGTERM');
129
+ }
130
+ function unlinkQuiet(home, wireSessionId) {
131
+ try {
132
+ unlinkSync(join(adapterLedgerDir(home), `${wireSessionId}.json`));
133
+ }
134
+ catch {
135
+ // already gone
136
+ }
137
+ }
138
+ /**
139
+ * Housekeeping shared by the sweep and the audit: junk files — a torn write,
140
+ * hand-dropped garbage, or a `.json.tmp` stranded by a hard death between
141
+ * the tmp write and the rename — must not accumulate.
142
+ */
143
+ function dropJunkFiles(home) {
144
+ const dir = adapterLedgerDir(home);
145
+ let names;
146
+ try {
147
+ names = readdirSync(dir);
148
+ }
149
+ catch {
150
+ return 0;
151
+ }
152
+ let removed = 0;
153
+ for (const name of names.slice(0, MAX_FILES)) {
154
+ const isTmp = name.endsWith('.json.tmp');
155
+ if (!isTmp && !name.endsWith('.json'))
156
+ continue;
157
+ if (!isTmp && parseEntry(join(dir, name)) !== null)
158
+ continue;
159
+ try {
160
+ unlinkSync(join(dir, name));
161
+ removed++;
162
+ }
163
+ catch {
164
+ // racing writer — the next pass retries
165
+ }
166
+ }
167
+ return removed;
168
+ }
169
+ /**
170
+ * Boot sweep — run ONCE at daemon start, before anything here can spawn a
171
+ * new adapter: every still-alive pgid in the ledger is a leftover from a
172
+ * previous instance's hard death (SIGKILL/OOM skip every teardown path; the
173
+ * detached groups survive it). Kills live groups, deletes every file.
174
+ * Returns what happened so the caller can log it.
175
+ */
176
+ export function sweepAdapterLedger(home) {
177
+ let reaped = 0;
178
+ let dropped = 0;
179
+ for (const entry of readAdapterLedger(home)) {
180
+ if (groupIsAlive(entry.pgid)) {
181
+ killProcessGroup(entry.pgid);
182
+ reaped++;
183
+ }
184
+ else {
185
+ dropped++;
186
+ }
187
+ unlinkQuiet(home, entry.wireSessionId);
188
+ }
189
+ dropJunkFiles(home);
190
+ return { reaped, dropped };
191
+ }
192
+ /**
193
+ * Periodic audit — the ONLY runtime remover of ledger files: an entry whose
194
+ * group is gone (the adapter exited, or a teardown's kill completed) is
195
+ * deleted; live entries stay. Returns how many files were dropped.
196
+ */
197
+ export function auditAdapterLedger(home) {
198
+ let dropped = 0;
199
+ for (const entry of readAdapterLedger(home)) {
200
+ if (!groupIsAlive(entry.pgid)) {
201
+ unlinkQuiet(home, entry.wireSessionId);
202
+ dropped++;
203
+ }
204
+ }
205
+ return dropped + dropJunkFiles(home);
206
+ }
207
+ //# sourceMappingURL=adapter-ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-ledger.js","sourceRoot":"","sources":["../../src/daemon/adapter-ledger.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Socket } from 'socket.io-client';
2
- import { type AcpToolCallView, type ChatStreamEvent } from '@harness-nexus/shared';
2
+ import { type AcpToolCallView, type ChatStreamEvent, type SessionConfigOption, type SessionModeState } from '@harness-nexus/shared';
3
3
  export interface ChatHandlersOptions {
4
4
  /** Env source for `HN_ACP_COMMAND_<TARGET>` overrides (defaults to process.env). */
5
5
  env?: NodeJS.ProcessEnv;
@@ -7,9 +7,32 @@ export interface ChatHandlersOptions {
7
7
  spawnEnv?: NodeJS.ProcessEnv;
8
8
  /** Overridable for tests (transcript lookup on dsh resume). */
9
9
  homeDir?: string;
10
+ /**
11
+ * 9 W11 A — adapter-ledger audit cadence in ms (default 60s). The audit is
12
+ * the only runtime remover of ledger files; 0 disables it (tests that
13
+ * assert file lifetimes drive `auditAdapterLedger` directly).
14
+ */
15
+ auditIntervalMs?: number;
10
16
  }
11
17
  export declare function attachChatHandlers(socket: Socket, opts?: ChatHandlersOptions): void;
12
18
  type UnknownRecord = Record<string, unknown>;
19
+ /**
20
+ * 9 W9 A — validate an adapter's `configOptions` array down to the
21
+ * platform's bounded view: only `type:'select'` rows survive (the three
22
+ * shipped adapters expose mode/model/effort as selects; boolean options from
23
+ * future adapters are dropped rather than half-surfaced). Null = nothing
24
+ * usable in the payload.
25
+ */
26
+ export declare function takeConfigOptions(raw: unknown): SessionConfigOption[] | null;
27
+ /**
28
+ * 9 W9 A — the session-config slice of an establishment response
29
+ * (`session/new` / `load` / `resume`): `modes` + `configOptions`, each
30
+ * independently validated. Null = the adapter advertised nothing usable.
31
+ */
32
+ export declare function takeSessionConfig(result: unknown): {
33
+ modes?: SessionModeState;
34
+ options: SessionConfigOption[];
35
+ } | null;
13
36
  /** Map one ACP `session/update` params object; null = drop (user echo). */
14
37
  export declare function mapAcpUpdate(params: UnknownRecord): ChatStreamEvent | null;
15
38
  /** Extract display text from an ACP ContentBlock chunk. */
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/daemon/chat.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAUL,KAAK,eAAe,EACpB,KAAK,eAAe,EAGrB,MAAM,uBAAuB,CAAC;AAiI/B,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC7B,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,IAAI,CAkcvF;AA+OD,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7C,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,eAAe,GAAG,IAAI,CA6C1E;AAED,2DAA2D;AAC3D,wBAAgB,MAAM,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,CAgBpD;AAaD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,cAAc,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,CAK5F"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/daemon/chat.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAeL,KAAK,eAAe,EACpB,KAAK,eAAe,EAGpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAsJ/B,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC7B,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,IAAI,CAoqBvF;AAwQD,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,EAAE,GAAG,IAAI,CAW5E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,GACd;IAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,mBAAmB,EAAE,CAAA;CAAE,GAAG,IAAI,CASrE;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,eAAe,GAAG,IAAI,CAmE1E;AAED,2DAA2D;AAC3D,wBAAgB,MAAM,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,CAgBpD;AAaD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,cAAc,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,CAK5F"}