instar 1.3.231 → 1.3.233

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.
Files changed (53) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +100 -5
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  5. package/dist/config/ConfigDefaults.js +24 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  8. package/dist/core/PostUpdateMigrator.js +15 -0
  9. package/dist/core/PostUpdateMigrator.js.map +1 -1
  10. package/dist/core/types.d.ts +34 -0
  11. package/dist/core/types.d.ts.map +1 -1
  12. package/dist/core/types.js.map +1 -1
  13. package/dist/monitoring/CorrectionCaptureBacklog.d.ts +85 -0
  14. package/dist/monitoring/CorrectionCaptureBacklog.d.ts.map +1 -0
  15. package/dist/monitoring/CorrectionCaptureBacklog.js +290 -0
  16. package/dist/monitoring/CorrectionCaptureBacklog.js.map +1 -0
  17. package/dist/monitoring/CorrectionCaptureLoop.d.ts +73 -3
  18. package/dist/monitoring/CorrectionCaptureLoop.d.ts.map +1 -1
  19. package/dist/monitoring/CorrectionCaptureLoop.js +172 -2
  20. package/dist/monitoring/CorrectionCaptureLoop.js.map +1 -1
  21. package/dist/monitoring/McpProcessReaper.d.ts +135 -0
  22. package/dist/monitoring/McpProcessReaper.d.ts.map +1 -0
  23. package/dist/monitoring/McpProcessReaper.js +229 -0
  24. package/dist/monitoring/McpProcessReaper.js.map +1 -0
  25. package/dist/monitoring/mcpProcessReaperDeps.d.ts +22 -0
  26. package/dist/monitoring/mcpProcessReaperDeps.d.ts.map +1 -0
  27. package/dist/monitoring/mcpProcessReaperDeps.js +125 -0
  28. package/dist/monitoring/mcpProcessReaperDeps.js.map +1 -0
  29. package/dist/monitoring/mcpProcessSignatures.d.ts +38 -0
  30. package/dist/monitoring/mcpProcessSignatures.d.ts.map +1 -0
  31. package/dist/monitoring/mcpProcessSignatures.js +55 -0
  32. package/dist/monitoring/mcpProcessSignatures.js.map +1 -0
  33. package/dist/scaffold/templates.d.ts.map +1 -1
  34. package/dist/scaffold/templates.js +1 -0
  35. package/dist/scaffold/templates.js.map +1 -1
  36. package/dist/server/AgentServer.d.ts +3 -0
  37. package/dist/server/AgentServer.d.ts.map +1 -1
  38. package/dist/server/AgentServer.js +1 -0
  39. package/dist/server/AgentServer.js.map +1 -1
  40. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  41. package/dist/server/CapabilityIndex.js +1 -0
  42. package/dist/server/CapabilityIndex.js.map +1 -1
  43. package/dist/server/routes.d.ts +3 -0
  44. package/dist/server/routes.d.ts.map +1 -1
  45. package/dist/server/routes.js +13 -0
  46. package/dist/server/routes.js.map +1 -1
  47. package/package.json +1 -1
  48. package/src/data/builtin-manifest.json +64 -64
  49. package/src/scaffold/templates.ts +1 -0
  50. package/upgrades/1.3.232.md +47 -0
  51. package/upgrades/1.3.233.md +36 -0
  52. package/upgrades/side-effects/correction-capture-backlog.md +137 -0
  53. package/upgrades/side-effects/mcp-process-reaper.md +58 -0
@@ -1 +1 @@
1
- {"version":3,"file":"CorrectionCaptureLoop.js","sourceRoot":"","sources":["../../src/monitoring/CorrectionCaptureLoop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CorrectionCaptureLoop.js","sourceRoot":"","sources":["../../src/monitoring/CorrectionCaptureLoop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * McpProcessReaper — Option B of the MCP-leak fix (Codey's design in
3
+ * `.instar/apprenticeship/codey-task-mcp-leak-reaper.md`).
4
+ *
5
+ * The problem: a session spawns MCP-server children (Playwright, mcp-remote,
6
+ * instar stdio). Killing the session's main pid does NOT cascade to those
7
+ * children — they re-parent (to PID 1 / launchd) or are held by an npm-exec
8
+ * wrapper and survive for days. The fleet accumulated ~80 such leaked procs,
9
+ * up to 5 days old, as a persistent load floor. `OrphanProcessReaper` reaps the
10
+ * session-level CLI proc but not these MCP *descendants*.
11
+ *
12
+ * This is a descendant-aware SWEEP (a sibling reaper, NOT a change to the
13
+ * shared OrphanProcessReaper / ReapGuard path — zero blast radius on the
14
+ * working reaper). For each allow-listed MCP proc it resolves the owning tmux
15
+ * session by walking the ppid chain, and reaps ONLY when the proc is old AND
16
+ * its owning session is a dead/stale *instar* session or fully orphaned. It
17
+ * NEVER touches a proc under a live/tracked session, nor under an external
18
+ * (non-instar) tmux session.
19
+ *
20
+ * Ships DARK + DRY-RUN by default (kills processes — same posture as
21
+ * SessionReaper / AgentWorktreeReaper). Every decision is audited.
22
+ */
23
+ import { EventEmitter } from 'node:events';
24
+ import { matchMcpSignature, type McpProcessSignature } from './mcpProcessSignatures.js';
25
+ export interface McpProcessReaperConfig {
26
+ enabled: boolean;
27
+ dryRun: boolean;
28
+ /** A proc younger than this is always kept (a starting session's children). */
29
+ minAgeMs: number;
30
+ reapIntervalMs: number;
31
+ /** Bounded blast radius per pass. */
32
+ maxReapsPerPass: number;
33
+ /** Max ppid hops when resolving a proc's owning tmux session. */
34
+ maxAncestorHops: number;
35
+ }
36
+ export declare const DEFAULT_MCP_PROCESS_REAPER_CONFIG: McpProcessReaperConfig;
37
+ export interface McpProcessInfo {
38
+ pid: number;
39
+ ppid: number;
40
+ elapsedMs: number;
41
+ command: string;
42
+ signatureId: McpProcessSignature['id'];
43
+ }
44
+ export type McpVerdict = 'keep' | 'reap-eligible';
45
+ export interface McpEvaluation {
46
+ pid: number;
47
+ signatureId: McpProcessSignature['id'];
48
+ ageMs: number;
49
+ owningSession: string | null;
50
+ verdict: McpVerdict;
51
+ /** The gate that forced KEEP, or the reap rationale. */
52
+ reason: string;
53
+ }
54
+ /**
55
+ * All signal sources injected so the classifier is unit-testable without a
56
+ * real process table, tmux, or kill(2). Production wiring supplies ps/tmux/
57
+ * SessionManager-backed implementations.
58
+ */
59
+ export interface McpProcessReaperDeps {
60
+ /** Allow-listed MCP-server processes currently running (this uid). */
61
+ listMcpProcesses: () => McpProcessInfo[];
62
+ /** Full pid → ppid map of the process table (for ancestor resolution). */
63
+ getProcessTree: () => Map<number, number>;
64
+ /** tmux pane pid → session name. */
65
+ getTmuxPaneMap: () => Map<number, string>;
66
+ /** tmux session names that are genuinely live/tracked. SACRED — never reaped. */
67
+ getLiveSessions: () => Set<string>;
68
+ /** All instar-pattern tmux session names present (tracked or not). Used to
69
+ * tell a dead/stale *instar* session (reapable) from an external one (kept). */
70
+ getInstarSessions: () => Set<string>;
71
+ /** SIGTERM the proc. Only called when killsEnabled. */
72
+ killProcess: (pid: number) => void;
73
+ /** Append one audit entry (JSONL). Never throws into the reap loop. */
74
+ audit?: (entry: McpReapAuditEntry) => void;
75
+ now?: () => number;
76
+ }
77
+ export interface McpReapAuditEntry {
78
+ ts: number;
79
+ type: 'reaped' | 'would-reap' | 'kept';
80
+ pid: number;
81
+ signatureId: string;
82
+ ageMs: number;
83
+ owningSession: string | null;
84
+ reason: string;
85
+ dryRun: boolean;
86
+ }
87
+ /**
88
+ * Walk the ppid chain from `startPid` until a pid is a tmux pane pid. Returns
89
+ * the owning tmux session name, or null when no tmux ancestor is found within
90
+ * `maxHops` (i.e. the proc is orphaned / re-parented — its session is dead).
91
+ * Pure — cycle-safe via a visited set.
92
+ */
93
+ export declare function resolveOwningSession(startPid: number, tree: Map<number, number>, tmuxPaneMap: Map<number, string>, maxHops: number): string | null;
94
+ /**
95
+ * Pure per-proc classifier. KEEP unless the proc is old AND its owning session
96
+ * is a dead/stale instar session or fully orphaned. Order matters: the sacred
97
+ * gates (live session, external session) short-circuit before age is consulted.
98
+ */
99
+ export declare function classifyMcpProcess(proc: McpProcessInfo, owningSession: string | null, liveSessions: Set<string>, instarSessions: Set<string>, minAgeMs: number): McpEvaluation;
100
+ export declare class McpProcessReaper extends EventEmitter {
101
+ private readonly cfg;
102
+ private readonly deps;
103
+ private readonly now;
104
+ private timer?;
105
+ private running;
106
+ private lastPassAt;
107
+ private reapedLastPass;
108
+ constructor(deps: McpProcessReaperDeps, cfg?: Partial<McpProcessReaperConfig>);
109
+ start(): void;
110
+ stop(): void;
111
+ private get killsEnabled();
112
+ /** Resolve + classify one proc against the current process/tmux/session view. */
113
+ private evaluate;
114
+ /** One reap pass. Returns the per-proc evaluations + what was reaped. */
115
+ reap(): Promise<{
116
+ ts: number;
117
+ evaluations: McpEvaluation[];
118
+ reaped: number[];
119
+ dryRun: boolean;
120
+ }>;
121
+ private writeAudit;
122
+ /** Observability snapshot for GET /processes/mcp-reaper (no side effects). */
123
+ snapshot(): {
124
+ enabled: boolean;
125
+ dryRun: boolean;
126
+ minAgeMs: number;
127
+ lastPassAt: number;
128
+ reapedLastPass: number;
129
+ processes: McpEvaluation[];
130
+ reapEligible: number;
131
+ };
132
+ }
133
+ /** Re-export for production wiring that builds McpProcessInfo from a ps line. */
134
+ export { matchMcpSignature };
135
+ //# sourceMappingURL=McpProcessReaper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpProcessReaper.d.ts","sourceRoot":"","sources":["../../src/monitoring/McpProcessReaper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * McpProcessReaper — Option B of the MCP-leak fix (Codey's design in
3
+ * `.instar/apprenticeship/codey-task-mcp-leak-reaper.md`).
4
+ *
5
+ * The problem: a session spawns MCP-server children (Playwright, mcp-remote,
6
+ * instar stdio). Killing the session's main pid does NOT cascade to those
7
+ * children — they re-parent (to PID 1 / launchd) or are held by an npm-exec
8
+ * wrapper and survive for days. The fleet accumulated ~80 such leaked procs,
9
+ * up to 5 days old, as a persistent load floor. `OrphanProcessReaper` reaps the
10
+ * session-level CLI proc but not these MCP *descendants*.
11
+ *
12
+ * This is a descendant-aware SWEEP (a sibling reaper, NOT a change to the
13
+ * shared OrphanProcessReaper / ReapGuard path — zero blast radius on the
14
+ * working reaper). For each allow-listed MCP proc it resolves the owning tmux
15
+ * session by walking the ppid chain, and reaps ONLY when the proc is old AND
16
+ * its owning session is a dead/stale *instar* session or fully orphaned. It
17
+ * NEVER touches a proc under a live/tracked session, nor under an external
18
+ * (non-instar) tmux session.
19
+ *
20
+ * Ships DARK + DRY-RUN by default (kills processes — same posture as
21
+ * SessionReaper / AgentWorktreeReaper). Every decision is audited.
22
+ */
23
+ import { EventEmitter } from 'node:events';
24
+ import { matchMcpSignature } from './mcpProcessSignatures.js';
25
+ export const DEFAULT_MCP_PROCESS_REAPER_CONFIG = {
26
+ enabled: false,
27
+ dryRun: true,
28
+ // Conservative: the leaked procs are hours-to-days old; 2h floor means a
29
+ // legitimately busy short-lived MCP child is never a candidate.
30
+ minAgeMs: 2 * 3600 * 1000,
31
+ reapIntervalMs: 30 * 60 * 1000,
32
+ maxReapsPerPass: 25,
33
+ maxAncestorHops: 30,
34
+ };
35
+ /**
36
+ * Walk the ppid chain from `startPid` until a pid is a tmux pane pid. Returns
37
+ * the owning tmux session name, or null when no tmux ancestor is found within
38
+ * `maxHops` (i.e. the proc is orphaned / re-parented — its session is dead).
39
+ * Pure — cycle-safe via a visited set.
40
+ */
41
+ export function resolveOwningSession(startPid, tree, tmuxPaneMap, maxHops) {
42
+ let pid = startPid;
43
+ const seen = new Set();
44
+ for (let hop = 0; hop <= maxHops && pid !== undefined && pid > 1; hop++) {
45
+ if (seen.has(pid))
46
+ break; // cycle guard
47
+ seen.add(pid);
48
+ const session = tmuxPaneMap.get(pid);
49
+ if (session)
50
+ return session;
51
+ pid = tree.get(pid);
52
+ }
53
+ return null;
54
+ }
55
+ /**
56
+ * Pure per-proc classifier. KEEP unless the proc is old AND its owning session
57
+ * is a dead/stale instar session or fully orphaned. Order matters: the sacred
58
+ * gates (live session, external session) short-circuit before age is consulted.
59
+ */
60
+ export function classifyMcpProcess(proc, owningSession, liveSessions, instarSessions, minAgeMs) {
61
+ const base = {
62
+ pid: proc.pid,
63
+ signatureId: proc.signatureId,
64
+ ageMs: proc.elapsedMs,
65
+ owningSession,
66
+ };
67
+ const keep = (reason) => ({ ...base, verdict: 'keep', reason });
68
+ const reap = (reason) => ({ ...base, verdict: 'reap-eligible', reason });
69
+ if (owningSession !== null) {
70
+ // SACRED: a live/tracked session owns it — keep regardless of age. A long-
71
+ // running autonomous session legitimately owns old MCP servers.
72
+ if (liveSessions.has(owningSession))
73
+ return keep('session-live');
74
+ // An external (non-instar) tmux session — never touch the user's processes.
75
+ if (!instarSessions.has(owningSession))
76
+ return keep('external-session');
77
+ // A stale/dead *instar* session still lingering in tmux: reapable when old.
78
+ if (proc.elapsedMs < minAgeMs)
79
+ return keep('stale-instar-too-young');
80
+ return reap(`stale-instar-session:${owningSession}`);
81
+ }
82
+ // No tmux ancestor — the owning session is dead and this proc re-parented.
83
+ // This is the dominant leak shape. Reapable only when old.
84
+ if (proc.elapsedMs < minAgeMs)
85
+ return keep('orphan-too-young');
86
+ return reap('orphaned-no-session');
87
+ }
88
+ export class McpProcessReaper extends EventEmitter {
89
+ cfg;
90
+ deps;
91
+ now;
92
+ timer;
93
+ running = false;
94
+ lastPassAt = 0;
95
+ reapedLastPass = 0;
96
+ constructor(deps, cfg) {
97
+ super();
98
+ this.deps = deps;
99
+ this.cfg = { ...DEFAULT_MCP_PROCESS_REAPER_CONFIG, ...(cfg ?? {}) };
100
+ this.now = deps.now ?? (() => Date.now());
101
+ }
102
+ start() {
103
+ if (this.timer || !this.cfg.enabled)
104
+ return;
105
+ this.timer = setInterval(() => { void this.reap(); }, this.cfg.reapIntervalMs);
106
+ if (typeof this.timer.unref === 'function')
107
+ this.timer.unref();
108
+ }
109
+ stop() {
110
+ if (this.timer) {
111
+ clearInterval(this.timer);
112
+ this.timer = undefined;
113
+ }
114
+ }
115
+ get killsEnabled() {
116
+ return this.cfg.enabled && !this.cfg.dryRun;
117
+ }
118
+ /** Resolve + classify one proc against the current process/tmux/session view. */
119
+ evaluate(proc, tree, tmuxPaneMap, liveSessions, instarSessions) {
120
+ const owningSession = resolveOwningSession(proc.pid, tree, tmuxPaneMap, this.cfg.maxAncestorHops);
121
+ return classifyMcpProcess(proc, owningSession, liveSessions, instarSessions, this.cfg.minAgeMs);
122
+ }
123
+ /** One reap pass. Returns the per-proc evaluations + what was reaped. */
124
+ async reap() {
125
+ if (this.running)
126
+ return { ts: this.now(), evaluations: [], reaped: [], dryRun: !this.killsEnabled };
127
+ this.running = true;
128
+ const reaped = [];
129
+ const evaluations = [];
130
+ try {
131
+ let procs;
132
+ let tree;
133
+ let tmuxPaneMap;
134
+ let liveSessions;
135
+ let instarSessions;
136
+ try {
137
+ procs = this.deps.listMcpProcesses();
138
+ tree = this.deps.getProcessTree();
139
+ tmuxPaneMap = this.deps.getTmuxPaneMap();
140
+ liveSessions = this.deps.getLiveSessions();
141
+ instarSessions = this.deps.getInstarSessions();
142
+ }
143
+ catch (err) {
144
+ this.emit('error', err);
145
+ return { ts: this.now(), evaluations: [], reaped: [], dryRun: !this.killsEnabled };
146
+ }
147
+ for (const proc of procs) {
148
+ let evaln;
149
+ try {
150
+ evaln = this.evaluate(proc, tree, tmuxPaneMap, liveSessions, instarSessions);
151
+ }
152
+ catch {
153
+ // A signal threw — cannot reason about it, so KEEP. Never reap on a
154
+ // failed evaluation.
155
+ evaln = {
156
+ pid: proc.pid, signatureId: proc.signatureId, ageMs: proc.elapsedMs,
157
+ owningSession: null, verdict: 'keep', reason: 'eval-error',
158
+ };
159
+ }
160
+ evaluations.push(evaln);
161
+ if (evaln.verdict !== 'reap-eligible') {
162
+ this.writeAudit({ ts: this.now(), type: 'kept', pid: proc.pid, signatureId: proc.signatureId, ageMs: proc.elapsedMs, owningSession: evaln.owningSession, reason: evaln.reason, dryRun: !this.killsEnabled });
163
+ continue;
164
+ }
165
+ if (reaped.length >= this.cfg.maxReapsPerPass)
166
+ continue; // blast-radius cap
167
+ if (!this.killsEnabled) {
168
+ // Dry-run: classify + audit what we WOULD kill, kill nothing.
169
+ this.writeAudit({ ts: this.now(), type: 'would-reap', pid: proc.pid, signatureId: proc.signatureId, ageMs: proc.elapsedMs, owningSession: evaln.owningSession, reason: evaln.reason, dryRun: true });
170
+ continue;
171
+ }
172
+ try {
173
+ this.deps.killProcess(proc.pid);
174
+ reaped.push(proc.pid);
175
+ this.writeAudit({ ts: this.now(), type: 'reaped', pid: proc.pid, signatureId: proc.signatureId, ageMs: proc.elapsedMs, owningSession: evaln.owningSession, reason: evaln.reason, dryRun: false });
176
+ this.emit('reaped', proc);
177
+ }
178
+ catch (err) {
179
+ this.emit('error', err);
180
+ }
181
+ }
182
+ this.lastPassAt = this.now();
183
+ this.reapedLastPass = reaped.length;
184
+ this.emit('pass', { evaluations, reaped });
185
+ }
186
+ finally {
187
+ this.running = false;
188
+ }
189
+ return { ts: this.now(), evaluations, reaped, dryRun: !this.killsEnabled };
190
+ }
191
+ writeAudit(entry) {
192
+ try {
193
+ this.deps.audit?.(entry);
194
+ }
195
+ catch { /* audit must never break the loop */ }
196
+ }
197
+ /** Observability snapshot for GET /processes/mcp-reaper (no side effects). */
198
+ snapshot() {
199
+ let processes = [];
200
+ try {
201
+ const procs = this.deps.listMcpProcesses();
202
+ const tree = this.deps.getProcessTree();
203
+ const tmuxPaneMap = this.deps.getTmuxPaneMap();
204
+ const liveSessions = this.deps.getLiveSessions();
205
+ const instarSessions = this.deps.getInstarSessions();
206
+ processes = procs.map((proc) => {
207
+ try {
208
+ return this.evaluate(proc, tree, tmuxPaneMap, liveSessions, instarSessions);
209
+ }
210
+ catch {
211
+ return { pid: proc.pid, signatureId: proc.signatureId, ageMs: proc.elapsedMs, owningSession: null, verdict: 'keep', reason: 'eval-error' };
212
+ }
213
+ });
214
+ }
215
+ catch { /* listing failed — report empty, never crash the route */ }
216
+ return {
217
+ enabled: this.cfg.enabled,
218
+ dryRun: this.cfg.dryRun,
219
+ minAgeMs: this.cfg.minAgeMs,
220
+ lastPassAt: this.lastPassAt,
221
+ reapedLastPass: this.reapedLastPass,
222
+ processes,
223
+ reapEligible: processes.filter((p) => p.verdict === 'reap-eligible').length,
224
+ };
225
+ }
226
+ }
227
+ /** Re-export for production wiring that builds McpProcessInfo from a ps line. */
228
+ export { matchMcpSignature };
229
+ //# sourceMappingURL=McpProcessReaper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpProcessReaper.js","sourceRoot":"","sources":["../../src/monitoring/McpProcessReaper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * mcpProcessReaperDeps — production signal sources for {@link McpProcessReaper}.
3
+ *
4
+ * Kept out of the reaper class so the classifier stays unit-testable without a
5
+ * real process table, tmux, or kill(2). This factory supplies the ps/tmux/
6
+ * SessionManager/kill/audit implementations.
7
+ */
8
+ import type { McpProcessReaperDeps } from './McpProcessReaper.js';
9
+ interface SessionLister {
10
+ listRunningSessions: () => Array<{
11
+ tmuxSession: string;
12
+ }>;
13
+ listKnownTmuxSessions: () => Set<string>;
14
+ }
15
+ export declare function makeMcpProcessReaperDeps(opts: {
16
+ sessionManager: SessionLister;
17
+ tmuxPath: string;
18
+ auditPath: string;
19
+ now?: () => number;
20
+ }): McpProcessReaperDeps;
21
+ export {};
22
+ //# sourceMappingURL=mcpProcessReaperDeps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpProcessReaperDeps.d.ts","sourceRoot":"","sources":["../../src/monitoring/mcpProcessReaperDeps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EACV,oBAAoB,EAGrB,MAAM,uBAAuB,CAAC;AA4B/B,UAAU,aAAa;IACrB,mBAAmB,EAAE,MAAM,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,qBAAqB,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,cAAc,EAAE,aAAa,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,oBAAoB,CAoFvB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * mcpProcessReaperDeps — production signal sources for {@link McpProcessReaper}.
3
+ *
4
+ * Kept out of the reaper class so the classifier stays unit-testable without a
5
+ * real process table, tmux, or kill(2). This factory supplies the ps/tmux/
6
+ * SessionManager/kill/audit implementations.
7
+ */
8
+ import { execSync } from 'node:child_process';
9
+ import fs from 'node:fs';
10
+ import path from 'node:path';
11
+ import { mcpGrepAlternation, matchMcpSignature, } from './mcpProcessSignatures.js';
12
+ function shellExec(cmd, timeout = 8000) {
13
+ try {
14
+ return execSync(cmd, { encoding: 'utf8', timeout, stdio: ['ignore', 'pipe', 'ignore'] });
15
+ }
16
+ catch {
17
+ return '';
18
+ }
19
+ }
20
+ /** Parse an `etime` field (`[[dd-]hh:]mm:ss`) into milliseconds. */
21
+ function parseElapsedMs(etime) {
22
+ const s = etime.trim();
23
+ let days = 0;
24
+ let rest = s;
25
+ if (rest.includes('-')) {
26
+ const [d, r] = rest.split('-');
27
+ days = parseInt(d, 10) || 0;
28
+ rest = r;
29
+ }
30
+ const parts = rest.split(':').map((p) => parseInt(p, 10) || 0);
31
+ let h = 0, m = 0, sec = 0;
32
+ if (parts.length === 3)
33
+ [h, m, sec] = parts;
34
+ else if (parts.length === 2)
35
+ [m, sec] = parts;
36
+ else if (parts.length === 1)
37
+ [sec] = parts;
38
+ return (((days * 24 + h) * 60 + m) * 60 + sec) * 1000;
39
+ }
40
+ export function makeMcpProcessReaperDeps(opts) {
41
+ const { sessionManager, tmuxPath, auditPath } = opts;
42
+ return {
43
+ listMcpProcesses() {
44
+ const uid = process.getuid?.() ?? 0;
45
+ const out = shellExec(`ps -u ${uid} -o pid=,ppid=,etime=,command= 2>/dev/null | egrep -i '${mcpGrepAlternation()}' | grep -v egrep`).trim();
46
+ if (!out)
47
+ return [];
48
+ const procs = [];
49
+ for (const line of out.split('\n')) {
50
+ const m = line.trim().match(/^(\d+)\s+(\d+)\s+([\d:.-]+)\s+(.+)$/);
51
+ if (!m)
52
+ continue;
53
+ const command = m[4];
54
+ const sig = matchMcpSignature(command);
55
+ if (!sig)
56
+ continue; // second-stage precise match — never a broad node/npm hit
57
+ procs.push({
58
+ pid: parseInt(m[1], 10),
59
+ ppid: parseInt(m[2], 10),
60
+ elapsedMs: parseElapsedMs(m[3]),
61
+ command: command.slice(0, 300),
62
+ signatureId: sig.id,
63
+ });
64
+ }
65
+ return procs;
66
+ },
67
+ getProcessTree() {
68
+ const tree = new Map();
69
+ const out = shellExec(`ps -axo pid=,ppid= 2>/dev/null`).trim();
70
+ if (!out)
71
+ return tree;
72
+ for (const line of out.split('\n')) {
73
+ const m = line.trim().match(/^(\d+)\s+(\d+)$/);
74
+ if (m)
75
+ tree.set(parseInt(m[1], 10), parseInt(m[2], 10));
76
+ }
77
+ return tree;
78
+ },
79
+ getTmuxPaneMap() {
80
+ const map = new Map();
81
+ const out = shellExec(`${tmuxPath} list-panes -a -F "#{session_name}||#{pane_pid}" 2>/dev/null`).trim();
82
+ if (!out)
83
+ return map;
84
+ for (const line of out.split('\n')) {
85
+ const [session, pidStr] = line.split('||');
86
+ const pid = parseInt(pidStr, 10);
87
+ if (session && !isNaN(pid))
88
+ map.set(pid, session);
89
+ }
90
+ return map;
91
+ },
92
+ getLiveSessions() {
93
+ try {
94
+ return new Set(sessionManager.listRunningSessions().map((s) => s.tmuxSession).filter(Boolean));
95
+ }
96
+ catch {
97
+ return new Set();
98
+ }
99
+ },
100
+ getInstarSessions() {
101
+ try {
102
+ return sessionManager.listKnownTmuxSessions();
103
+ }
104
+ catch {
105
+ return new Set();
106
+ }
107
+ },
108
+ killProcess(pid) {
109
+ // SIGTERM (graceful). The proc's session is already dead/stale, so there is
110
+ // nothing to coordinate with — a clean terminate is sufficient.
111
+ process.kill(pid, 'SIGTERM');
112
+ },
113
+ audit(entry) {
114
+ try {
115
+ fs.mkdirSync(path.dirname(auditPath), { recursive: true });
116
+ fs.appendFileSync(auditPath, JSON.stringify(entry) + '\n');
117
+ }
118
+ catch {
119
+ // Audit must never break the reap loop.
120
+ }
121
+ },
122
+ now: opts.now,
123
+ };
124
+ }
125
+ //# sourceMappingURL=mcpProcessReaperDeps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpProcessReaperDeps.js","sourceRoot":"","sources":["../../src/monitoring/mcpProcessReaperDeps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * mcpProcessSignatures — the precise, allow-listed signatures for MCP-server
3
+ * processes that the {@link McpProcessReaper} is permitted to consider.
4
+ *
5
+ * These are NOT framework (claude/codex/gemini) processes — they are the
6
+ * long-lived MCP-server children a session spawns (Playwright, mcp-remote,
7
+ * instar's own stdio MCP) that survive their owning session's death and
8
+ * accumulate for days (see `.instar/apprenticeship/codey-task-mcp-leak-reaper.md`).
9
+ *
10
+ * The reaper matches ONLY these exact signatures — never a broad `node`/`npm`
11
+ * match — so an unrelated node process can never be a reap candidate. Each
12
+ * `psGrepNeedle` is bracket-escaped so the discovery `ps … | egrep` does not
13
+ * match its own argv.
14
+ */
15
+ export interface McpProcessSignature {
16
+ /** Stable id for audit trails + tests. */
17
+ readonly id: 'playwright-mcp' | 'mcp-remote' | 'instar-mcp-stdio';
18
+ /** Human-readable label. */
19
+ readonly label: string;
20
+ /**
21
+ * Substrings that must ALL appear in the process command for a match. A
22
+ * conjunction keeps the match tight (e.g. requires both `mcp-remote` AND
23
+ * the npm/exec shape rather than any line mentioning "mcp").
24
+ */
25
+ readonly commandIncludesAll: ReadonlyArray<string>;
26
+ /** Bracket-escaped needle for the first-stage `ps … | egrep` discovery. */
27
+ readonly psGrepNeedle: string;
28
+ }
29
+ export declare const MCP_PROCESS_SIGNATURES: ReadonlyArray<McpProcessSignature>;
30
+ /** The alternation passed to the discovery `egrep -i '<needle>'`. */
31
+ export declare function mcpGrepAlternation(): string;
32
+ /**
33
+ * Match a process command against the allow-list. Returns the matched
34
+ * signature, or null when the command is not a recognized MCP-server process.
35
+ * Pure — exported for unit tests of both the match and the non-match side.
36
+ */
37
+ export declare function matchMcpSignature(command: string, signatures?: ReadonlyArray<McpProcessSignature>): McpProcessSignature | null;
38
+ //# sourceMappingURL=mcpProcessSignatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpProcessSignatures.d.ts","sourceRoot":"","sources":["../../src/monitoring/mcpProcessSignatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,EAAE,gBAAgB,GAAG,YAAY,GAAG,kBAAkB,CAAC;IAClE,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACnD,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,mBAAmB,CAmBrE,CAAC;AAEF,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,aAAa,CAAC,mBAAmB,CAA0B,GACtE,mBAAmB,GAAG,IAAI,CAS5B"}