greprag 5.43.0 → 5.43.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.
@@ -35,15 +35,6 @@ export declare const FATAL_EXIT_CODE = 64;
35
35
  * so it respawns; SIGINT/SIGTERM skip these and return via the
36
36
  * normal abort path. */
37
37
  export declare function installLastResortHandlers(): void;
38
- /** Resolve once `file`'s mtime has been UNCHANGED for `quietMs` (the build is
39
- * done writing), or after `maxWaitMs` regardless (never wedge the supervisor
40
- * on a watch loop). A stat failure (file mid-rename) counts as "still
41
- * changing". Exported for tests. */
42
- export declare function waitForStableMtime(file: string, opts?: {
43
- pollMs?: number;
44
- quietMs?: number;
45
- maxWaitMs?: number;
46
- }): Promise<void>;
47
38
  /** Parent supervisor. Spawns the watch loop as a Node child, forwards
48
39
  * stdio so Monitor sees each printed line as a notification verbatim,
49
40
  * and respawns on any non-clean exit. */
@@ -26,46 +26,11 @@
26
26
  * module-eval time), so it is safe.
27
27
  *
28
28
  * adr: adr/monitor-resilience.md */
29
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
30
- if (k2 === undefined) k2 = k;
31
- var desc = Object.getOwnPropertyDescriptor(m, k);
32
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
33
- desc = { enumerable: true, get: function() { return m[k]; } };
34
- }
35
- Object.defineProperty(o, k2, desc);
36
- }) : (function(o, m, k, k2) {
37
- if (k2 === undefined) k2 = k;
38
- o[k2] = m[k];
39
- }));
40
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
41
- Object.defineProperty(o, "default", { enumerable: true, value: v });
42
- }) : function(o, v) {
43
- o["default"] = v;
44
- });
45
- var __importStar = (this && this.__importStar) || (function () {
46
- var ownKeys = function(o) {
47
- ownKeys = Object.getOwnPropertyNames || function (o) {
48
- var ar = [];
49
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
50
- return ar;
51
- };
52
- return ownKeys(o);
53
- };
54
- return function (mod) {
55
- if (mod && mod.__esModule) return mod;
56
- var result = {};
57
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
58
- __setModuleDefault(result, mod);
59
- return result;
60
- };
61
- })();
62
29
  Object.defineProperty(exports, "__esModule", { value: true });
63
30
  exports.FATAL_EXIT_CODE = exports.SUPERVISE_ENV = void 0;
64
31
  exports.installLastResortHandlers = installLastResortHandlers;
65
- exports.waitForStableMtime = waitForStableMtime;
66
32
  exports.runSupervisor = runSupervisor;
67
- const fs = __importStar(require("fs"));
68
- const proc_1 = require("../proc");
33
+ const child_process_1 = require("child_process");
69
34
  const inbox_watch_1 = require("./inbox-watch");
70
35
  const watcher_registry_1 = require("./watcher-registry");
71
36
  const LOG_PREFIX = '[greprag inbox watch]';
@@ -102,21 +67,6 @@ const SUPERVISOR_BACKOFF_FACTOR = 2;
102
67
  // 60s of uninterrupted child life resets the backoff so a long-lived
103
68
  // child that finally dies retries fast, not slowly.
104
69
  const SUPERVISOR_HEALTHY_RESET_MS = 60_000;
105
- // The --monitor-pid monitor-task liveness probe (ff681bb, 2026-06-10) was
106
- // reverted 2026-06-11: /proc/$$/winpid stamped the transient arm-line bash, not
107
- // the persistent Monitor task, so the probe false-killed live watchers
108
- // (terminal stop, no respawn) → "constantly dying". The pipe binding
109
- // (bindToConsumer) + --owner-pid reaper remain the supervision layers.
110
- // adr: adr/monitor-resilience.md
111
- // Rebuild settle (2026-06-10): `npm run build` swaps dist/ under every running
112
- // watcher; the child crashes (a lazy `require` loads a half-written module) and
113
- // an immediate respawn loads a partially-emitted entry file → a crash-loop wave
114
- // per rebuild, fleet-wide. When the entry script's mtime has changed since the
115
- // child was spawned, wait for the build to go quiet before respawning, and
116
- // reset the backoff — a rebuild is a restart condition, not a crash storm.
117
- const REBUILD_SETTLE_POLL_MS = 500;
118
- const REBUILD_SETTLE_QUIET_MS = 1_500;
119
- const REBUILD_SETTLE_MAX_WAIT_MS = 30_000;
120
70
  // Exit code the child uses for "fatal, do not respawn" conditions —
121
71
  // 4xx HTTP responses, missing API key, missing anchor. Anything else
122
72
  // (signal, code 1, code 2, exception) is a crash and gets respawned.
@@ -166,39 +116,6 @@ function ownerPidFromArgv(argv) {
166
116
  }
167
117
  return undefined;
168
118
  }
169
- /** Entry-script mtime, or null when unstatable (deleted mid-rebuild, exotic
170
- * launcher). Null disables the rebuild-settle branch — fail-open. */
171
- function entryMtimeMs(entry) {
172
- try {
173
- return fs.statSync(entry).mtimeMs;
174
- }
175
- catch {
176
- return null;
177
- }
178
- }
179
- /** Resolve once `file`'s mtime has been UNCHANGED for `quietMs` (the build is
180
- * done writing), or after `maxWaitMs` regardless (never wedge the supervisor
181
- * on a watch loop). A stat failure (file mid-rename) counts as "still
182
- * changing". Exported for tests. */
183
- async function waitForStableMtime(file, opts) {
184
- const pollMs = opts?.pollMs ?? REBUILD_SETTLE_POLL_MS;
185
- const quietMs = opts?.quietMs ?? REBUILD_SETTLE_QUIET_MS;
186
- const maxWaitMs = opts?.maxWaitMs ?? REBUILD_SETTLE_MAX_WAIT_MS;
187
- const deadline = Date.now() + maxWaitMs;
188
- let last = null;
189
- let stableSince = Date.now();
190
- while (Date.now() < deadline) {
191
- const m = entryMtimeMs(file);
192
- if (m === null || m !== last) {
193
- last = m;
194
- stableSince = Date.now();
195
- }
196
- else if (Date.now() - stableSince >= quietMs) {
197
- return;
198
- }
199
- await new Promise((r) => setTimeout(r, pollMs));
200
- }
201
- }
202
119
  /** Fire one short, best-effort liveness request. Never throws; never blocks
203
120
  * longer than `timeoutMs` (so a dead network can't hang the heartbeat or stall
204
121
  * exit). adr: docs/registry-freshness-design.md */
@@ -249,6 +166,21 @@ async function runSupervisor() {
249
166
  const onSigterm = () => forward('SIGTERM');
250
167
  process.on('SIGINT', onSigint);
251
168
  process.on('SIGTERM', onSigterm);
169
+ // Supervisor self-protection (2026-06-13). A stray throw in the supervisor's OWN
170
+ // code (the heartbeat, the spawn path, the exit promise) used to crash it
171
+ // uncaught — and Monitor `persistent:true` does NOT restart a dead command
172
+ // (verified live), so the watcher simply vanished until the next turn re-armed
173
+ // it. Exit NON-ZERO on any uncaught error so the bash relauncher
174
+ // (`armMonitorCommand`) relaunches a fresh supervisor — turn-free recovery, the
175
+ // missing rung for supervisor death. adr: adr/monitor-resilience.md
176
+ const onFatalError = (label) => (err) => {
177
+ console.error(`${LOG_PREFIX} supervisor ${label}: ${(err && err.message) || String(err)}`);
178
+ process.exit(1); // non-zero (not 0/64) → the relauncher relaunches us
179
+ };
180
+ const onUncaught = onFatalError('uncaughtException');
181
+ const onRejection = onFatalError('unhandledRejection');
182
+ process.on('uncaughtException', onUncaught);
183
+ process.on('unhandledRejection', onRejection);
252
184
  // Re-invoke the same JS entrypoint via the Node binary we're running
253
185
  // under. Skips the bash/sh npm shim on respawn — the shim's fork
254
186
  // pressure is paid once at initial invocation, not once per restart.
@@ -294,16 +226,11 @@ async function runSupervisor() {
294
226
  if (typeof heartbeat.unref === 'function')
295
227
  heartbeat.unref();
296
228
  }
297
- // Entry-script mtime at the moment each child is (re)spawned — the rebuild
298
- // detector's baseline. Null when unstatable (branch disabled, fail-open).
299
- const entryScript = process.argv[1];
300
- let spawnedMtime = null;
301
229
  while (!shutdownRequested) {
302
230
  const startedAt = Date.now();
303
- spawnedMtime = entryMtimeMs(entryScript);
304
231
  let spawnErr = null;
305
232
  try {
306
- currentChild = (0, proc_1.safeSpawn)(process.execPath, childArgs, {
233
+ currentChild = (0, child_process_1.spawn)(process.execPath, childArgs, {
307
234
  env: childEnv,
308
235
  stdio: 'inherit',
309
236
  // detached:false keeps the child in our process group so
@@ -355,7 +282,9 @@ async function runSupervisor() {
355
282
  // missing anchor. Respawning would loop forever.
356
283
  if (exit.err === null && exit.code === exports.FATAL_EXIT_CODE) {
357
284
  terminalReason = 'fatal(no-respawn: bad key/4xx/anchor)';
358
- process.exitCode = 1;
285
+ // Exit 64 (FATAL_EXIT_CODE), not 1, so the bash relauncher BREAKS on a
286
+ // known-bad config instead of relaunching it forever. adr: adr/monitor-resilience.md
287
+ process.exitCode = exports.FATAL_EXIT_CODE;
359
288
  break;
360
289
  }
361
290
  // Child signaled "my consumer is gone" — the Monitor task's stdout/stderr
@@ -368,19 +297,6 @@ async function runSupervisor() {
368
297
  terminalReason = 'consumer-gone(pipe-broke)';
369
298
  break;
370
299
  }
371
- // Rebuild settle: if dist/ was swapped under this child (its entry mtime
372
- // changed since spawn), this death is a rebuild casualty, not a crash. Wait
373
- // for the build to go quiet, reset the backoff, and respawn fresh — without
374
- // this, the respawn loads a half-written entry file and the backoff
375
- // escalates through a wave of bogus "crashes" on every `npm run build`.
376
- const mtimeNow = entryMtimeMs(entryScript);
377
- if (mtimeNow !== null && spawnedMtime !== null && mtimeNow !== spawnedMtime) {
378
- console.error(`${LOG_PREFIX} supervisor: dist updated underneath (rebuild) — waiting for the build to settle, then restarting fresh`);
379
- (0, watcher_registry_1.watcherAuditLog)(`rebuild-settle session=${session ?? 'tenant'} (entry mtime changed under live child — respawning after quiet period)`);
380
- await waitForStableMtime(entryScript);
381
- backoff = SUPERVISOR_BACKOFF_INITIAL_MS;
382
- continue;
383
- }
384
300
  if (liveMs >= SUPERVISOR_HEALTHY_RESET_MS)
385
301
  backoff = SUPERVISOR_BACKOFF_INITIAL_MS;
386
302
  const reason = exit.err
@@ -400,12 +316,14 @@ async function runSupervisor() {
400
316
  if (heartbeat)
401
317
  clearInterval(heartbeat);
402
318
  if (session)
403
- (0, watcher_registry_1.removeWatcherPidfile)(session);
319
+ (0, watcher_registry_1.removeWatcherEntry)(session, process.pid);
404
320
  if (leaseEnabled) {
405
321
  await bestEffortFetch(deregisterUrl(cfg.apiUrl, session), cfg.apiKey, 'DELETE', GOODBYE_TIMEOUT_MS);
406
322
  }
407
323
  process.off('SIGINT', onSigint);
408
324
  process.off('SIGTERM', onSigterm);
325
+ process.off('uncaughtException', onUncaught);
326
+ process.off('unhandledRejection', onRejection);
409
327
  }
410
328
  /** Sleep that polls a shutdown predicate every 100ms so the supervisor
411
329
  * wakes promptly on signal-driven shutdown without needing a shared
@@ -1 +1 @@
1
- {"version":3,"file":"inbox-watch-supervisor.js","sourceRoot":"","sources":["../../src/commands/inbox-watch-supervisor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbox-watch-supervisor.js","sourceRoot":"","sources":["../../src/commands/inbox-watch-supervisor.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;qCA0BqC;;;AA0DrC,8DAWC;AA0DD,sCAoLC;AAjTD,iDAAoD;AACpD,+CAAgF;AAChF,yDAA8G;AAE9G,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAE3C,6EAA6E;AAC7E,yCAAyC;AACzC,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,WAAW;AACX,4EAA4E;AAC5E,8EAA8E;AAC9E,iFAAiF;AACjF,oEAAoE;AACpE,4EAA4E;AAC5E,6EAA6E;AAC7E,+EAA+E;AAC/E,8EAA8E;AAC9E,6CAA6C;AAE7C,gFAAgF;AAChF,oBAAoB;AACpB,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACpC,6EAA6E;AAC7E,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,oEAAoE;AACpE,iEAAiE;AACjE,qCAAqC;AACxB,QAAA,aAAa,GAAG,qBAAqB,CAAC;AAEnD,2DAA2D;AAC3D,+DAA+D;AAC/D,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAC1C,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,qEAAqE;AACrE,oDAAoD;AACpD,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAE3C,oEAAoE;AACpE,qEAAqE;AACrE,qEAAqE;AACrE,kEAAkE;AACrD,QAAA,eAAe,GAAG,EAAE,CAAC;AAElC;;;;;;yBAMyB;AACzB,SAAgB,yBAAyB;IACvC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,uBAAuB,GAAG,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,CAAC,MAAM,IAAK,MAAgB,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QACpE,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,wBAAwB,GAAG,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;8CAG8C;AAC9C,SAAS,eAAe,CAAC,IAAc;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;8EAE8E;AAC9E,SAAS,gBAAgB,CAAC,IAAc;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;oDAEoD;AACpD,KAAK,UAAU,eAAe,CAC5B,GAAW,EAAE,MAAc,EAAE,MAAc,EAAE,SAAiB;IAE9D,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,EAAE;YACf,MAAM;YACN,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;YAC9C,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAc,EAAE,OAAe;IAClD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC;AACnG,CAAC;AACD,SAAS,aAAa,CAAC,MAAc,EAAE,OAAe;IACpD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1F,CAAC;AAED;;0CAE0C;AACnC,KAAK,UAAU,aAAa;IACjC,IAAI,OAAO,GAAG,6BAA6B,CAAC;IAC5C,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,YAAY,GAAwB,IAAI,CAAC;IAE7C,oEAAoE;IACpE,oEAAoE;IACpE,oEAAoE;IACpE,kEAAkE;IAClE,MAAM,OAAO,GAAG,CAAC,GAAmB,EAAQ,EAAE;QAC5C,iBAAiB,GAAG,IAAI,CAAC;QACzB,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACzC,IAAI,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC;IACF,MAAM,QAAQ,GAAI,GAAS,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,GAAS,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAG,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAEjC,iFAAiF;IACjF,0EAA0E;IAC1E,2EAA2E;IAC3E,+EAA+E;IAC/E,iEAAiE;IACjE,gFAAgF;IAChF,oEAAoE;IACpE,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,GAAY,EAAQ,EAAE;QAC7D,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,eAAe,KAAK,KAAK,CAAC,GAAG,IAAK,GAAa,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAG,qDAAqD;IAC1E,CAAC,CAAC;IACF,MAAM,UAAU,GAAI,YAAY,CAAC,mBAAmB,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IAE9C,qEAAqE;IACrE,iEAAiE;IACjE,qEAAqE;IACrE,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,qBAAa,CAAC,EAAE,GAAG,EAAE,CAAC;IAE1D,yEAAyE;IACzE,+EAA+E;IAC/E,6EAA6E;IAC7E,gFAAgF;IAChF,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,IAAA,uBAAS,GAAE,CAAC;IACxB,MAAM,YAAY,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAE/C,6EAA6E;IAC7E,mEAAmE;IACnE,0EAA0E;IAC1E,+EAA+E;IAC/E,yDAAyD;IACzD,IAAI,OAAO,IAAI,IAAA,iCAAc,EAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAA,kCAAe,EAAC,oBAAoB,OAAO,yCAAyC,CAAC,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,YAAY,OAAO,sDAAsD,CAAC,CAAC;QACtG,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,gFAAgF;IAChF,yEAAyE;IACzE,8EAA8E;IAC9E,yFAAyF;IACzF,IAAI,OAAO;QAAE,IAAA,sCAAmB,EAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,IAAA,kCAAe,EAAC,eAAe,OAAO,IAAI,QAAQ,SAAS,OAAO,CAAC,IAAI,gFAAgF,CAAC,CAAC;IACzJ,+EAA+E;IAC/E,gFAAgF;IAChF,+EAA+E;IAC/E,mFAAmF;IACnF,IAAI,cAAc,GAAG,iCAAiC,CAAC;IACvD,IAAI,SAAS,GAA0C,IAAI,CAAC;IAC5D,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,KAAK,eAAe,CAClB,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,OAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,qBAAqB,CAC7E,CAAC;QACJ,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;QACP,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC7C,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU;YAAE,SAAS,CAAC,KAAK,EAAE,CAAC;IAC/D,CAAC;IAED,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,QAAQ,GAAiB,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,YAAY,GAAG,IAAA,qBAAK,EAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE;gBAChD,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,SAAS;gBAChB,yDAAyD;gBACzD,6DAA6D;gBAC7D,+CAA+C;aAChD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,GAAG,GAAY,CAAC;YACxB,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,IAAI,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC;YACzE,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,8BAA8B,MAAM,gBAAgB,IAAA,yBAAW,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACvG,MAAM,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC;YAC7D,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,yBAAyB,EAAE,yBAAyB,CAAC,CAAC;YACnF,SAAS;QACX,CAAC;QAGD,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,MAAM,GAAG,CAAC,CAAO,EAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,QAAQ,GAAG,IAAI,CAAC;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,CAAC,CAAC,CAAC;YACtF,YAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAClF,YAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACtC,YAAY,GAAG,IAAI,CAAC;QAEpB,IAAI,iBAAiB,EAAE,CAAC;YAAC,cAAc,GAAG,oBAAoB,CAAC;YAAC,MAAM;QAAC,CAAC;QAExE,2DAA2D;QAC3D,iEAAiE;QACjE,uDAAuD;QACvD,8DAA8D;QAC9D,uCAAuC;QACvC,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAAC,cAAc,GAAG,qBAAqB,CAAC;YAAC,MAAM;QAAC,CAAC;QAEpH,2DAA2D;QAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAAC,cAAc,GAAG,UAAU,IAAI,CAAC,MAAM,GAAG,CAAC;YAAC,MAAM;QAAC,CAAC;QAEhH,6DAA6D;QAC7D,iDAAiD;QACjD,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,uBAAe,EAAE,CAAC;YACvD,cAAc,GAAG,uCAAuC,CAAC;YACzD,uEAAuE;YACvE,qFAAqF;YACrF,OAAO,CAAC,QAAQ,GAAG,uBAAe,CAAC;YACnC,MAAM;QACR,CAAC;QAED,0EAA0E;QAC1E,uEAAuE;QACvE,0EAA0E;QAC1E,uEAAuE;QACvE,0EAA0E;QAC1E,4DAA4D;QAC5D,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,qCAAuB,EAAE,CAAC;YAAC,cAAc,GAAG,2BAA2B,CAAC;YAAC,MAAM;QAAC,CAAC;QAExH,IAAI,MAAM,IAAI,2BAA2B;YAAE,OAAO,GAAG,6BAA6B,CAAC;QAEnF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG;YACrB,CAAC,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YACpC,CAAC,CAAC,IAAI,CAAC,MAAM;gBACX,CAAC,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE;gBACzB,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CACX,GAAG,UAAU,4BAA4B,MAAM,WAAW,IAAA,yBAAW,EAAC,MAAM,CAAC,oBAAoB,IAAA,yBAAW,EAAC,OAAO,CAAC,EAAE,CACxH,CAAC;QACF,MAAM,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAC7D,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,yBAAyB,EAAE,yBAAyB,CAAC,CAAC;IACrF,CAAC;IAED,8EAA8E;IAC9E,gFAAgF;IAChF,6EAA6E;IAC7E,yEAAyE;IACzE,IAAA,kCAAe,EAAC,gBAAgB,OAAO,IAAI,QAAQ,WAAW,cAAc,EAAE,CAAC,CAAC;IAChF,IAAI,SAAS;QAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,OAAO;QAAE,IAAA,qCAAkB,EAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,eAAe,CACnB,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,OAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,CAC9E,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAG,QAAQ,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC;AAED;;2EAE2E;AAC3E,SAAS,oBAAoB,CAAC,EAAU,EAAE,MAAqB;IAC7D,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,IAAI,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAAC,OAAO,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC9D,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,66 +1,73 @@
1
- /** Local watcher process registry + owner-pid orphan reaper.
1
+ /** Local watcher process registry + COUNT-CAP (the post-saga model).
2
2
  *
3
- * The architectural correction the whole monitor-resilience saga circled but
4
- * never landed (see adr/monitor-resilience.md 2026-05-28 "severed-ancestry =
5
- * the disarm signal" + the 2026-06-04 entry): a watcher's liveness lives at the
6
- * LOCAL process layer, not in a cloud registry. The consumer of a watcher is
7
- * the Claude Code Monitor task on THIS machine; the server can't see whether
8
- * anyone is still consuming the stream, so a server lease counts an orphan
9
- * (consumer dead, process still respawning) as "armed". Two local signals fix
10
- * that:
3
+ * THE LESSON (adr/monitor-resilience.md, "⭐ The watcher in one pass"): a
4
+ * functional watcher and an orphaned-but-alive one are EXTERNALLY
5
+ * INDISTINGUISHABLE same command line, same live PID. Only the watcher itself
6
+ * can tell, via its own stdout pipe (EPIPE). So every external reaper that
7
+ * *judged* orphan-ness (ancestry, owner-pid, monitor-pid) was guessing, and the
8
+ * guesses false-killed live watchers the 548-kill saga in one line.
11
9
  *
12
- * 1. **pidfile** (`~/.greprag/watchers/<short>.json`) written by the
13
- * supervisor on start, removed on terminal exit. `isLocallyArmed` reads it
14
- * to gate re-arming with zero cloud dependency and zero ghost-lease lag.
15
- * Paired with EPIPE-terminal in the watcher (a watcher whose consumer pipe
16
- * breaks exits and removes its own pidfile), a live pidfile means a live,
17
- * *consumed* watcher.
10
+ * This module no longer judges. Two reliable facts replace the one unknowable
11
+ * one:
18
12
  *
19
- * 2. **owner-pid reap** — `reapOrphanWatchers` kills any `inbox watch` process
20
- * whose stamped `--owner-pid` names a `claude.exe` that is no longer alive.
21
- * Backstop for the case EPIPE can't catch (a consumer hard-killed without
22
- * closing the pipe). A watcher with NO `--owner-pid` is KEPT, never killed:
23
- * the old ancestry-walk fallback PROVED to false-kill live backgrounded
24
- * watchers (2026-06-05a / 2026-06-13) and was retired. SAFE BY CONSTRUCTION:
25
- * the kill set is intersected with "cmdline contains `inbox watch`", so it
26
- * can only ever terminate greprag watchers — never claude.exe, an editor, or
27
- * an unrelated node server.
13
+ * 1. **pidfile registry** — `~/.greprag/watchers/<short>.json` is a LIST of every
14
+ * supervisor armed for that session (`{short,pid,startedAt,ownerPid}`). A
15
+ * supervisor appends on arm and removes its own entry on terminal exit; a
16
+ * hard kill leaves a dead entry that the alive-filter sweeps. `isLocallyArmed`
17
+ * = "any entry alive". (Multiple live supervisors per session is normal under
18
+ * the June-8 spray; the count-cap bounds them.)
28
19
  *
29
- * adr: adr/monitor-resilience.md */
20
+ * 2. **count-cap** — `reapOrphanWatchers` keeps the K freshest LIVE watchers per
21
+ * session and kills only the surplus, NEVER below K. No death-detection → no
22
+ * false-kill; a floor of K → it can never reap to zero, so the bug that broke
23
+ * liveness every time is structurally impossible. "Freshest" is a *bias*
24
+ * toward the just-armed functional one, not a guarantee — and that's fine:
25
+ * EPIPE kills a wrongly-kept orphan in ~30s and the supervisor respawns. It is
26
+ * **snapshot-free** (per-session file reads + `pidAlive()` syscalls), so the
27
+ * 06-05b conhost-OOM engine — a `powershell Get-CimInstance` per SessionStart —
28
+ * is gone from the cleanup path entirely.
29
+ *
30
+ * EPIPE-terminal (in the watcher) + the supervisor's programmatic respawn do the
31
+ * real liveness work; the count-cap only bounds the pile. adr: adr/monitor-resilience.md */
32
+ /** Default per-session watcher floor: keep this many freshest live watchers, reap
33
+ * only the surplus above it, never below it. K=2 = the live one + one margin. */
34
+ export declare const DEFAULT_WATCHER_CAP = 2;
30
35
  export interface WatcherPidRecord {
31
36
  short: string;
32
37
  pid: number;
33
38
  startedAt: number;
34
39
  ownerPid?: number;
35
40
  }
36
- /** Write the watcher pidfile (supervisor PID), keyed by the 8-hex session short.
37
- * `ownerPid` (the owning claude.exe) is recorded so the reaper can test liveness
38
- * without enumerating the process table. Best-effort: a failed write only means
39
- * `isLocallyArmed` falls back to re-arming, never a crash. */
41
+ /** APPEND this supervisor's entry to the session's list (pruning dead entries as
42
+ * it goes). Best-effort. adr: adr/monitor-resilience.md */
40
43
  export declare function writeWatcherPidfile(short: string, pid: number, ownerPid?: number): void;
44
+ /** Remove THIS supervisor's entry (called on a supervisor's terminal exit). */
45
+ export declare function removeWatcherEntry(short: string, pid: number): void;
46
+ /** Remove a session's whole pidfile (legacy / full sweep). */
41
47
  export declare function removeWatcherPidfile(short: string): void;
42
- /** Append-only diagnostic audit log at ~/.greprag/watchers/audit.log. ALWAYS ON
43
- * (not env-gated) so a watcher killed by a SIBLING session's SessionStart reap
44
- * leaves a trail its own Monitor output file is gone by the time we'd read it,
45
- * and the reaper is a different process than the watcher. Behaviour-neutral:
46
- * pure observation, never gates a kill or an arm. Cheap (a few lines per
47
- * SessionStart + per watcher arm/exit). adr: adr/monitor-resilience.md */
48
+ /** The session→owner record at `~/.greprag/watchers/<short>.owner`: the CURRENT
49
+ * claude.exe PID for a session, refreshed on every SessionStart (so a restart
50
+ * re-resolves it within seconds), plus a `deadSince` stamp the GC uses to reap an
51
+ * owner only after it has stayed dead past the grace window — NOT a frozen
52
+ * arm-time PID, which was the owner-pid reaper's fatal flaw. adr: adr/monitor-resilience.md */
53
+ export interface SessionOwner {
54
+ pid: number;
55
+ ts: number;
56
+ deadSince?: number;
57
+ }
58
+ /** Append-only diagnostic audit log at ~/.greprag/watchers/audit.log. ALWAYS ON so
59
+ * every arm / terminal exit / cap-kill leaves a trail. Behaviour-neutral: pure
60
+ * observation, never gates a kill or an arm. adr: adr/monitor-resilience.md */
48
61
  export declare function watcherAuditLog(event: string): void;
49
- /** Local-first arm check: is there a live watcher PROCESS for this session on
50
- * THIS machine? This is ground truth for "armed" — the consumer (the Monitor
51
- * task) is local, so a live local pidfile means a live, consumed watcher.
52
- * Replaces the server `isSessionArmed` check, which counts orphans (consumer
53
- * dead, socket still open) as armed and so both (a) suppresses re-arm when the
54
- * real watcher is gone and (b) lets re-arm stack new watchers on undead
55
- * orphans. A dead-PID pidfile is swept here so the next turn re-arms. */
62
+ /** Local-first arm check: does this session have ANY live watcher process on THIS
63
+ * machine? Ground truth for "armed" — the consumer (the Monitor task) is local,
64
+ * so a live local entry means a live, consumed watcher. Sweeps dead entries as it
65
+ * reads, so a hard-killed watcher doesn't read as armed. */
56
66
  export declare function isLocallyArmed(short: string): boolean;
57
- /** The local source of truth: every session whose watcher process is alive on
58
- * THIS machine right now. Reads the pidfile registry and confirms each PID with
59
- * the OS (`pidAlive`), sweeping any dead-PID leftover as it goes. This is the
60
- * answer the desk-line returns when the cloud asks "what's truly active?" it
61
- * is computed on demand from ground truth, never a cached/replicated list, so it
62
- * cannot go stale the way the cloud `/attached` registry does. adr:
63
- * adr/monitor-resilience.md */
67
+ /** Every session whose watcher process is alive on THIS machine right now —
68
+ * computed on demand from the pidfile registry + OS liveness, sweeping dead
69
+ * entries. Most-recently-armed first. This is what the desk-line returns when the
70
+ * cloud asks "what's truly active?". adr: adr/monitor-resilience.md */
64
71
  export declare function listLocalLiveWatchers(): WatcherPidRecord[];
65
72
  export interface ProcRow {
66
73
  pid: number;
@@ -68,54 +75,47 @@ export interface ProcRow {
68
75
  name: string;
69
76
  cmd: string;
70
77
  }
71
- /** Resolve the owning claude.exe PID for the CURRENT process by walking its
72
- * parent chain in a fresh snapshot. MUST be called from a hook a direct, live
73
- * descendant of the session's claude.exe whose chain is intact NOT from the
74
- * watcher, whose launcher shell collapses within seconds of arming (proven
75
- * 2026-06-05: a supervisor's ancestry to claude.exe is already severed at arm
76
- * time). The hook stamps the result into the watch command (`--owner-pid`) so
77
- * the reaper can later ask "is that exact claude.exe still alive?" instead of
78
- * re-walking a chain that no longer exists. Returns null if no claude.exe
79
- * ancestor is found (caller omits the flag → the watcher is flagless → the reaper
80
- * KEEPS it, since the ancestry fallback that used to reap it was a false-kill).
81
- * adr: adr/monitor-resilience.md */
78
+ /** Resolve the owning claude.exe PID for the CURRENT process by walking its parent
79
+ * chain. MUST be called from a hook (a live descendant of claude.exe). Stamped
80
+ * into the arm command (`--owner-pid`) for audit continuity. Cache hit skips the
81
+ * snapshot. Returns null if no claude.exe ancestor. adr: adr/monitor-resilience.md */
82
82
  export declare function resolveClaudeOwnerPid(cacheShort?: string): number | null;
83
- /** Decide whether a watcher candidate is a severed orphan, and why. The ONLY
84
- * reap signal is the stamped owner PID: a watcher is severed iff its
85
- * `--owner-pid` names a claude.exe that is no longer alive. A watcher with NO
86
- * `--owner-pid` is KEPT never ancestry-walked.
87
- *
88
- * Why the ancestry fallback was retired (2026-06-13): the walk "is a live
89
- * claude.exe still my ancestor?" PROVED to false-kill LIVE backgrounded watchers
90
- * (adr 2026-06-05a) — a Monitor-armed watcher's launcher shell exits by design,
91
- * so within seconds of a healthy arm its chain to claude.exe is already severed,
92
- * indistinguishable from a real orphan. It was the dominant false-kill on
93
- * flagless watchers, and flagless is not rare: the bare arm form is taught by the
94
- * skill docs AND emitted by the hook itself whenever resolveClaudeOwnerPid
95
- * returns null on a snapshot miss (so `--owner-pid` cannot be guaranteed at the
96
- * arm site). The only safe verdict for a flagless watcher is therefore KEEP.
97
- * Genuine death of a flagless watcher is still caught at the right layer: its
98
- * consumer pipe breaks on session reload/end → EPIPE-terminal (consumer-gone)
99
- * tears it down, and `sweepDeadPidfiles` collects a dead-PID pidfile. The
100
- * residual — a flagless watcher orphaned by a TaskStop while claude.exe stays
101
- * alive (no pipe break, no owner to die) — is one idle process, the exact blind
102
- * spot the 2026-06-11 revert already knowingly left open. This also retires the
103
- * GREPRAG_REAP_BY_OWNER escape hatch, whose only effect was to re-enable the
104
- * proven-bad pure-ancestry walk. adr: adr/monitor-resilience.md */
105
- export declare function severedVerdict(w: ProcRow, byPid: Map<number, ProcRow>): {
106
- severed: boolean;
107
- reason: string;
83
+ /** Pure verdict (testable): given a session's LIVE entries, keep the K freshest
84
+ * (by startedAt), return the older surplus to kill. Never kills when count ≤ K;
85
+ * never kills more than count K; never the K freshest. This is the entire
86
+ * liveness-safety guaranteeno death judgment, just a count + a floor. */
87
+ export declare function capSurplusVerdict(entries: WatcherPidRecord[], K: number): {
88
+ keep: WatcherPidRecord[];
89
+ kill: WatcherPidRecord[];
108
90
  };
109
91
  export interface ReapResult {
110
92
  scanned: number;
111
93
  orphans: number;
112
94
  killed: number[];
113
95
  }
114
- /** Kill every `inbox watch` process whose stamped `--owner-pid` names a dead
115
- * claude.exe (= orphan), plus sweep dead-PID pidfiles. Flagless watchers are
116
- * kept (see severedVerdict). Returns a summary. Best-effort and bounded: a
117
- * snapshot failure yields a zero result; the kill set is guaranteed (by
118
- * `WATCHER_CMD_RE`) to contain only greprag watchers. Intended to run at
119
- * SessionStart, before this session arms — at that moment a watcher with a dead
120
- * owner belongs to a PRIOR incarnation, so reaping it is correct. */
121
- export declare function reapOrphanWatchers(): ReapResult;
96
+ /** Count-cap every session: keep the K freshest LIVE watchers, kill only the
97
+ * surplus. NO death-detection, NO process snapshot — per-session file reads +
98
+ * `pidAlive()`, and a `taskkill` only when there is genuine surplus. Run at
99
+ * SessionStart (via the recap hook) and exposed as `greprag inbox reap`. The name
100
+ * is retained for its callers; the behaviour is "cap", not "judge orphans".
101
+ * adr: adr/monitor-resilience.md */
102
+ export declare function reapOrphanWatchers(K?: number): ReapResult;
103
+ /** Minutes a session's owner must stay CONTINUOUSLY dead before its watchers are
104
+ * GC'd. Must exceed the worst-case claude.exe restart→SessionStart window (which
105
+ * is seconds), so a restart can never be mistaken for a death. */
106
+ export declare const GC_GRACE_MS: number;
107
+ /** Pure GC decision (testable): given a session's owner record and whether its PID
108
+ * is alive right now, decide keep / start-the-grace-clock / reap. */
109
+ export declare function gcVerdict(owner: {
110
+ ts: number;
111
+ deadSince?: number;
112
+ } | null, ownerAlive: boolean, now: number, graceMs: number): 'keep' | 'mark-dead' | 'reap';
113
+ export interface GcResult {
114
+ reaped: string[];
115
+ killed: number[];
116
+ }
117
+ /** Reap every watcher of a session whose owning claude.exe has stayed dead past the
118
+ * grace window. Run at SessionStart, AFTER refreshing THIS session's own owner
119
+ * (so it is never its own victim). No process snapshot — owner-file reads +
120
+ * pidAlive() syscalls. adr: adr/monitor-resilience.md */
121
+ export declare function gcDeadSessions(graceMs?: number): GcResult;