greprag 5.43.1 → 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.
@@ -166,6 +166,21 @@ async function runSupervisor() {
166
166
  const onSigterm = () => forward('SIGTERM');
167
167
  process.on('SIGINT', onSigint);
168
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);
169
184
  // Re-invoke the same JS entrypoint via the Node binary we're running
170
185
  // under. Skips the bash/sh npm shim on respawn — the shim's fork
171
186
  // pressure is paid once at initial invocation, not once per restart.
@@ -267,7 +282,9 @@ async function runSupervisor() {
267
282
  // missing anchor. Respawning would loop forever.
268
283
  if (exit.err === null && exit.code === exports.FATAL_EXIT_CODE) {
269
284
  terminalReason = 'fatal(no-respawn: bad key/4xx/anchor)';
270
- 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;
271
288
  break;
272
289
  }
273
290
  // Child signaled "my consumer is gone" — the Monitor task's stdout/stderr
@@ -299,12 +316,14 @@ async function runSupervisor() {
299
316
  if (heartbeat)
300
317
  clearInterval(heartbeat);
301
318
  if (session)
302
- (0, watcher_registry_1.removeWatcherPidfile)(session);
319
+ (0, watcher_registry_1.removeWatcherEntry)(session, process.pid);
303
320
  if (leaseEnabled) {
304
321
  await bestEffortFetch(deregisterUrl(cfg.apiUrl, session), cfg.apiKey, 'DELETE', GOODBYE_TIMEOUT_MS);
305
322
  }
306
323
  process.off('SIGINT', onSigint);
307
324
  process.off('SIGTERM', onSigterm);
325
+ process.off('uncaughtException', onUncaught);
326
+ process.off('unhandledRejection', onRejection);
308
327
  }
309
328
  /** Sleep that polls a shutdown predicate every 100ms so the supervisor
310
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":"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"}
@@ -1,65 +1,73 @@
1
- /** Local watcher process registry + severed-ancestry 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. **severed-ancestry reap** — `reapOrphanWatchers` snapshots the process
20
- * table and kills any `inbox watch` process whose ancestry no longer
21
- * reaches a live `claude.exe`. Backstop for the case EPIPE can't catch (a
22
- * consumer hard-killed without closing the pipe). SAFE BY CONSTRUCTION: the
23
- * kill set is intersected with "cmdline contains `inbox watch`", so it can
24
- * only ever terminate greprag watchers never claude.exe, an editor, or an
25
- * unrelated node server. A bug can at worst kill a watcher that then
26
- * re-arms; it can never touch the operator's work.
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.)
27
19
  *
28
- * 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;
29
35
  export interface WatcherPidRecord {
30
36
  short: string;
31
37
  pid: number;
32
38
  startedAt: number;
33
39
  ownerPid?: number;
34
40
  }
35
- /** Write the watcher pidfile (supervisor PID), keyed by the 8-hex session short.
36
- * `ownerPid` (the owning claude.exe) is recorded so the reaper can test liveness
37
- * without enumerating the process table. Best-effort: a failed write only means
38
- * `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 */
39
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). */
40
47
  export declare function removeWatcherPidfile(short: string): void;
41
- /** Append-only diagnostic audit log at ~/.greprag/watchers/audit.log. ALWAYS ON
42
- * (not env-gated) so a watcher killed by a SIBLING session's SessionStart reap
43
- * leaves a trail its own Monitor output file is gone by the time we'd read it,
44
- * and the reaper is a different process than the watcher. Behaviour-neutral:
45
- * pure observation, never gates a kill or an arm. Cheap (a few lines per
46
- * 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 */
47
61
  export declare function watcherAuditLog(event: string): void;
48
- /** Local-first arm check: is there a live watcher PROCESS for this session on
49
- * THIS machine? This is ground truth for "armed" — the consumer (the Monitor
50
- * task) is local, so a live local pidfile means a live, consumed watcher.
51
- * Replaces the server `isSessionArmed` check, which counts orphans (consumer
52
- * dead, socket still open) as armed and so both (a) suppresses re-arm when the
53
- * real watcher is gone and (b) lets re-arm stack new watchers on undead
54
- * 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. */
55
66
  export declare function isLocallyArmed(short: string): boolean;
56
- /** The local source of truth: every session whose watcher process is alive on
57
- * THIS machine right now. Reads the pidfile registry and confirms each PID with
58
- * the OS (`pidAlive`), sweeping any dead-PID leftover as it goes. This is the
59
- * answer the desk-line returns when the cloud asks "what's truly active?" it
60
- * is computed on demand from ground truth, never a cached/replicated list, so it
61
- * cannot go stale the way the cloud `/attached` registry does. adr:
62
- * 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 */
63
71
  export declare function listLocalLiveWatchers(): WatcherPidRecord[];
64
72
  export interface ProcRow {
65
73
  pid: number;
@@ -67,35 +75,47 @@ export interface ProcRow {
67
75
  name: string;
68
76
  cmd: string;
69
77
  }
70
- /** Resolve the owning claude.exe PID for the CURRENT process by walking its
71
- * parent chain in a fresh snapshot. MUST be called from a hook a direct, live
72
- * descendant of the session's claude.exe whose chain is intact NOT from the
73
- * watcher, whose launcher shell collapses within seconds of arming (proven
74
- * 2026-06-05: a supervisor's ancestry to claude.exe is already severed at arm
75
- * time). The hook stamps the result into the watch command (`--owner-pid`) so
76
- * the reaper can later ask "is that exact claude.exe still alive?" instead of
77
- * re-walking a chain that no longer exists. Returns null if no claude.exe
78
- * ancestor is found (caller omits the flag → reaper falls back to ancestry).
79
- * 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 */
80
82
  export declare function resolveClaudeOwnerPid(cacheShort?: string): number | null;
81
- /** Decide whether a watcher candidate is a severed orphan, and why. Under the
82
- * REAP_BY_OWNER flag, prefers the stamped owner PID (robust); falls back to the
83
- * ancestry walk for legacy watchers with no `--owner-pid`. Off-flag: pure
84
- * ancestry walk (unchanged behaviour). adr: adr/monitor-resilience.md */
85
- export declare function severedVerdict(w: ProcRow, byPid: Map<number, ProcRow>): {
86
- severed: boolean;
87
- 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 guarantee no death judgment, just a count + a floor. */
87
+ export declare function capSurplusVerdict(entries: WatcherPidRecord[], K: number): {
88
+ keep: WatcherPidRecord[];
89
+ kill: WatcherPidRecord[];
88
90
  };
89
91
  export interface ReapResult {
90
92
  scanned: number;
91
93
  orphans: number;
92
94
  killed: number[];
93
95
  }
94
- /** Kill every `inbox watch` process whose ancestry no longer reaches a live
95
- * claude.exe (severed = orphan), plus sweep dead-PID pidfiles. Returns a
96
- * summary. Best-effort and bounded: a snapshot failure yields a zero result;
97
- * the kill set is guaranteed (by `WATCHER_CMD_RE`) to contain only greprag
98
- * watchers. Intended to run at SessionStart, before this session arms at that
99
- * moment every live watcher belongs to a PRIOR incarnation, so reaping is the
100
- * common path, not the exception. */
101
- 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;