instar 1.3.396 → 1.3.398

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 (33) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +41 -2
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/MeshRpc.d.ts +3 -0
  5. package/dist/core/MeshRpc.d.ts.map +1 -1
  6. package/dist/core/MeshRpc.js +1 -0
  7. package/dist/core/MeshRpc.js.map +1 -1
  8. package/dist/core/types.d.ts +10 -0
  9. package/dist/core/types.d.ts.map +1 -1
  10. package/dist/core/types.js.map +1 -1
  11. package/dist/monitoring/SessionReaper.d.ts +4 -0
  12. package/dist/monitoring/SessionReaper.d.ts.map +1 -1
  13. package/dist/monitoring/SessionReaper.js +8 -1
  14. package/dist/monitoring/SessionReaper.js.map +1 -1
  15. package/dist/server/AgentServer.d.ts +9 -0
  16. package/dist/server/AgentServer.d.ts.map +1 -1
  17. package/dist/server/AgentServer.js +6 -0
  18. package/dist/server/AgentServer.js.map +1 -1
  19. package/dist/server/StreamTicketStore.d.ts +54 -0
  20. package/dist/server/StreamTicketStore.d.ts.map +1 -0
  21. package/dist/server/StreamTicketStore.js +147 -0
  22. package/dist/server/StreamTicketStore.js.map +1 -0
  23. package/dist/server/WebSocketManager.d.ts +19 -0
  24. package/dist/server/WebSocketManager.d.ts.map +1 -1
  25. package/dist/server/WebSocketManager.js +72 -2
  26. package/dist/server/WebSocketManager.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/data/builtin-manifest.json +3 -3
  29. package/src/data/state-coherence-registry.json +13 -1
  30. package/upgrades/1.3.397.md +43 -0
  31. package/upgrades/1.3.398.md +30 -0
  32. package/upgrades/side-effects/dashboard-stream-phase2a-serving.md +69 -0
  33. package/upgrades/side-effects/reaper-transcript-projectdir.md +46 -0
@@ -29,6 +29,7 @@ import type { Server as HttpServer } from 'node:http';
29
29
  import type { SessionManager } from '../core/SessionManager.js';
30
30
  import type { StateManager } from '../core/StateManager.js';
31
31
  import type { HookEventReceiver } from '../monitoring/HookEventReceiver.js';
32
+ import type { StreamTicketStore } from './StreamTicketStore.js';
32
33
  export declare class WebSocketManager {
33
34
  private wss;
34
35
  private clients;
@@ -41,6 +42,12 @@ export declare class WebSocketManager {
41
42
  private authToken?;
42
43
  private registryPath?;
43
44
  private hookEventReceiver?;
45
+ /** Pool Dashboard Streaming (serving side): consumes one-time tickets on the
46
+ * /pool-stream upgrade. Absent → /pool-stream is refused (feature dark). */
47
+ private streamTicketStore?;
48
+ /** Serving-side gate: may a PEER machine send input/key to a local session?
49
+ * Default false (security: keystroke forwarding is a lateral-movement vector). */
50
+ private poolStreamAllowRemoteInput;
44
51
  constructor(options: {
45
52
  server: HttpServer;
46
53
  sessionManager: SessionManager;
@@ -48,9 +55,21 @@ export declare class WebSocketManager {
48
55
  authToken?: string;
49
56
  instarDir?: string;
50
57
  hookEventReceiver?: HookEventReceiver;
58
+ streamTicketStore?: StreamTicketStore;
59
+ poolStreamAllowRemoteInput?: boolean;
51
60
  });
52
61
  private authenticate;
53
62
  private verifyToken;
63
+ /** §2.1: a session name must be tmux-safe before it ever reaches send-keys. */
64
+ private isValidSessionName;
65
+ /**
66
+ * Gate a write (input/key) before it reaches tmux. Returns true if allowed.
67
+ * On rejection it sends the honest error frame and returns false.
68
+ * - invalid name → invalid-session (§2.1 injection guard);
69
+ * - PEER client + remote input disabled → input-not-allowed (§2.3 default-off);
70
+ * - session not running locally → session-not-found (never relay to tmux blind).
71
+ */
72
+ private gateWrite;
54
73
  private handleMessage;
55
74
  /**
56
75
  * Stream terminal output to subscribed clients.
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocketManager.d.ts","sourceRoot":"","sources":["../../src/server/WebSocketManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAmB,MAAM,WAAW,CAAC;AAIvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAQ5E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,wBAAwB,CAA+C;IAC/E,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,iBAAiB,CAAC,CAAoB;gBAElC,OAAO,EAAE;QACnB,MAAM,EAAE,UAAU,CAAC;QACnB,cAAc,EAAE,cAAc,CAAC;QAC/B,KAAK,EAAE,YAAY,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;KACvC;IA2FD,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IA+ErB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAyCtB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,eAAe;IAKvB;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAqBpD;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB,CAAuD;IAC/E,eAAe,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAOzE,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,QAAQ,IAAI,IAAI;CAWjB"}
1
+ {"version":3,"file":"WebSocketManager.d.ts","sourceRoot":"","sources":["../../src/server/WebSocketManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAmB,MAAM,WAAW,CAAC;AAIvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAiBhE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,wBAAwB,CAA+C;IAC/E,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C;iFAC6E;IAC7E,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C;uFACmF;IACnF,OAAO,CAAC,0BAA0B,CAAS;gBAE/B,OAAO,EAAE;QACnB,MAAM,EAAE,UAAU,CAAC;QACnB,cAAc,EAAE,cAAc,CAAC;QAC/B,KAAK,EAAE,YAAY,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QACtC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QACtC,0BAA0B,CAAC,EAAE,OAAO,CAAC;KACtC;IAuHD,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,WAAW;IAOnB,+EAA+E;IAC/E,OAAO,CAAC,kBAAkB;IAI1B;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,aAAa;IAsFrB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAyCtB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,eAAe;IAKvB;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAqBpD;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB,CAAuD;IAC/E,eAAe,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAOzE,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,QAAQ,IAAI,IAAI;CAWjB"}
@@ -29,6 +29,8 @@ import { WebSocketServer, WebSocket } from 'ws';
29
29
  import { createHash, timingSafeEqual } from 'node:crypto';
30
30
  import fs from 'node:fs';
31
31
  import path from 'node:path';
32
+ /** Pool Dashboard Streaming §2.1: only tmux-safe session names ever reach tmux. */
33
+ const SAFE_SESSION_NAME = /^[A-Za-z0-9_.:@-]+$/;
32
34
  export class WebSocketManager {
33
35
  wss;
34
36
  clients = new Map();
@@ -41,11 +43,19 @@ export class WebSocketManager {
41
43
  authToken;
42
44
  registryPath;
43
45
  hookEventReceiver;
46
+ /** Pool Dashboard Streaming (serving side): consumes one-time tickets on the
47
+ * /pool-stream upgrade. Absent → /pool-stream is refused (feature dark). */
48
+ streamTicketStore;
49
+ /** Serving-side gate: may a PEER machine send input/key to a local session?
50
+ * Default false (security: keystroke forwarding is a lateral-movement vector). */
51
+ poolStreamAllowRemoteInput = false;
44
52
  constructor(options) {
45
53
  this.sessionManager = options.sessionManager;
46
54
  this.state = options.state;
47
55
  this.authToken = options.authToken;
48
56
  this.hookEventReceiver = options.hookEventReceiver;
57
+ this.streamTicketStore = options.streamTicketStore;
58
+ this.poolStreamAllowRemoteInput = options.poolStreamAllowRemoteInput ?? false;
49
59
  if (options.instarDir) {
50
60
  this.registryPath = path.join(options.instarDir, 'topic-session-registry.json');
51
61
  }
@@ -54,8 +64,31 @@ export class WebSocketManager {
54
64
  });
55
65
  // Handle upgrade manually for auth
56
66
  options.server.on('upgrade', (request, socket, head) => {
57
- // Only handle /ws path
58
67
  const url = new URL(request.url || '/', `http://${request.headers.host || 'localhost'}`);
68
+ // ── /pool-stream: a PEER machine streaming a remote session (§2.3) ──
69
+ // Authenticated by a single-use bearer ticket minted over the machine-
70
+ // authed `pool-stream-ticket` mesh verb; identity comes from the ticket's
71
+ // mint record, never an unverified upgrade claim.
72
+ if (url.pathname === '/pool-stream') {
73
+ if (!this.streamTicketStore) {
74
+ socket.write('HTTP/1.1 503 Service Unavailable\r\n\r\n');
75
+ socket.destroy();
76
+ return;
77
+ }
78
+ const ticket = url.searchParams.get('ticket') || request.headers['x-pool-stream-ticket'] || '';
79
+ const res = this.streamTicketStore.consume(ticket);
80
+ if (!res.ok) {
81
+ socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
82
+ socket.destroy();
83
+ return;
84
+ }
85
+ const peerMachineId = res.forMachineId;
86
+ this.wss.handleUpgrade(request, socket, head, (ws) => {
87
+ this.wss.emit('connection', ws, request, { isPeer: true, peerMachineId });
88
+ });
89
+ return;
90
+ }
91
+ // ── /ws: a local browser dashboard ──
59
92
  if (url.pathname !== '/ws') {
60
93
  socket.destroy();
61
94
  return;
@@ -70,11 +103,12 @@ export class WebSocketManager {
70
103
  this.wss.emit('connection', ws, request);
71
104
  });
72
105
  });
73
- this.wss.on('connection', (ws) => {
106
+ this.wss.on('connection', (ws, _request, peerCtx) => {
74
107
  const client = {
75
108
  ws,
76
109
  subscriptions: new Set(),
77
110
  isAlive: true,
111
+ ...(peerCtx?.isPeer ? { isPeer: true, peerMachineId: peerCtx.peerMachineId } : {}),
78
112
  };
79
113
  this.clients.set(ws, client);
80
114
  // Send initial session list
@@ -142,6 +176,33 @@ export class WebSocketManager {
142
176
  const hb = createHash('sha256').update(this.authToken).digest();
143
177
  return timingSafeEqual(ha, hb);
144
178
  }
179
+ /** §2.1: a session name must be tmux-safe before it ever reaches send-keys. */
180
+ isValidSessionName(session) {
181
+ return SAFE_SESSION_NAME.test(session);
182
+ }
183
+ /**
184
+ * Gate a write (input/key) before it reaches tmux. Returns true if allowed.
185
+ * On rejection it sends the honest error frame and returns false.
186
+ * - invalid name → invalid-session (§2.1 injection guard);
187
+ * - PEER client + remote input disabled → input-not-allowed (§2.3 default-off);
188
+ * - session not running locally → session-not-found (never relay to tmux blind).
189
+ */
190
+ gateWrite(client, session) {
191
+ if (!this.isValidSessionName(session)) {
192
+ this.send(client.ws, { type: 'error', code: 'invalid-session', session });
193
+ return false;
194
+ }
195
+ if (client.isPeer && !this.poolStreamAllowRemoteInput) {
196
+ this.send(client.ws, { type: 'error', code: 'input-not-allowed', session });
197
+ return false;
198
+ }
199
+ const exists = this.sessionManager.listRunningSessions().some((s) => s.tmuxSession === session);
200
+ if (!exists) {
201
+ this.send(client.ws, { type: 'error', code: 'session-not-found', session });
202
+ return false;
203
+ }
204
+ return true;
205
+ }
145
206
  handleMessage(client, msg) {
146
207
  switch (msg.type) {
147
208
  case 'subscribe': {
@@ -150,6 +211,11 @@ export class WebSocketManager {
150
211
  this.send(client.ws, { type: 'error', message: 'Missing session name' });
151
212
  return;
152
213
  }
214
+ // §2.1: never let a crafted session name reach tmux (target injection).
215
+ if (!this.isValidSessionName(session)) {
216
+ this.send(client.ws, { type: 'error', code: 'invalid-session', session });
217
+ return;
218
+ }
153
219
  client.subscriptions.add(session);
154
220
  // Send current output immediately — use large capture for initial load
155
221
  const output = this.sessionManager.captureOutput(session, 2000);
@@ -174,6 +240,8 @@ export class WebSocketManager {
174
240
  this.send(client.ws, { type: 'error', message: 'Missing session or text' });
175
241
  return;
176
242
  }
243
+ if (!this.gateWrite(client, session))
244
+ return;
177
245
  const success = this.sessionManager.sendInput(session, text);
178
246
  this.send(client.ws, { type: 'input_ack', session, success });
179
247
  break;
@@ -185,6 +253,8 @@ export class WebSocketManager {
185
253
  this.send(client.ws, { type: 'error', message: 'Missing session or key' });
186
254
  return;
187
255
  }
256
+ if (!this.gateWrite(client, session))
257
+ return;
188
258
  const success = this.sessionManager.sendKey(session, key);
189
259
  this.send(client.ws, { type: 'input_ack', session, success });
190
260
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocketManager.js","sourceRoot":"","sources":["../../src/server/WebSocketManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebSocketManager.js","sourceRoot":"","sources":["../../src/server/WebSocketManager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.396",
3
+ "version": "1.3.398",
4
4
  "description": "Coherence infrastructure for self-evolving AI agents — on the Claude Code or Codex subscription you already have.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-06-07T06:08:26.779Z",
5
- "instarVersion": "1.3.396",
4
+ "generatedAt": "2026-06-07T07:05:27.302Z",
5
+ "instarVersion": "1.3.398",
6
6
  "entryCount": 199,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -1506,7 +1506,7 @@
1506
1506
  "type": "subsystem",
1507
1507
  "domain": "server",
1508
1508
  "sourcePath": "src/server/AgentServer.ts",
1509
- "contentHash": "fd430ec1928c24390016a239a8dc013cbb0c02c5156caf4dd7e3e8e987a77e8d",
1509
+ "contentHash": "278ffe790119f908b0ffcdb5129a52597bdc54b262a82fee7cd32c5f9b40d325",
1510
1510
  "since": "2025-01-01"
1511
1511
  },
1512
1512
  "subsystem:session-manager": {
@@ -959,6 +959,18 @@
959
959
  "state/session-monitor-ctx-notified.json"
960
960
  ],
961
961
  "grandfathered": false
962
+ },
963
+ {
964
+ "category": "stream-tickets",
965
+ "description": "Pool Dashboard Streaming single-use bearer tickets (POOL-DASHBOARD-STREAM-SPEC \u00a72.3). Minted by the pool-stream-ticket mesh verb, consumed once on the /pool-stream WS upgrade. Persisted so a captured ticket cannot replay across a serving-machine restart (consumed-set survives). Machine-local; single-writer (the store's own funnel); TTL-bounded + GC'd.",
966
+ "scope": "machine-local",
967
+ "freshness": "live",
968
+ "conflictShape": "single-writer",
969
+ "transport": "none",
970
+ "paths": [
971
+ "state/stream-tickets.json"
972
+ ],
973
+ "grandfathered": false
962
974
  }
963
975
  ]
964
- }
976
+ }
@@ -0,0 +1,43 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ The idle-session reaper verifies idleness by reading a session's transcript, but the
9
+ probe was called with an empty project directory (`projectDir: ''`), so it looked at
10
+ `~/.claude/projects//<id>.jsonl` — a path that never exists — and EVERY session came
11
+ back "transcript-unresolved." That made the reaper structurally unable to prove any
12
+ session idle, so it kept everything (the residual blocker after #952/#955/#958). Fix:
13
+ pass the agent's real session-launch cwd (`config.projectDir`) so the transcript
14
+ resolves.
15
+
16
+ New optional `transcriptProjectDir()` dep on `SessionReaper` (wired to
17
+ `config.projectDir`); StaleSessionBackstop probe fixed the same way.
18
+
19
+ ## What to Tell Your User
20
+
21
+ Nothing required — internal reaper wiring; the reaper stays opt-in. For operators
22
+ enabling it: the reaper can now actually read transcripts to confirm a session is idle
23
+ before reaping (it previously couldn't, and kept everything).
24
+
25
+ ## Summary of New Capabilities
26
+
27
+ - `SessionReaperDeps.transcriptProjectDir()` — supplies the agent's launch cwd so the
28
+ fallback probe resolves the real transcript path. Absent ⇒ '' ⇒ unresolved ⇒ KEEP
29
+ (safe default preserved).
30
+
31
+ ## Evidence
32
+
33
+ `tests/unit/session-reaper.test.ts` (hermetic, HOME-overridden): fallback probe resolves
34
+ a real transcript when `transcriptProjectDir` is wired (→ reap-eligible), stays
35
+ `transcript-unresolved` (KEEP) when absent. 37/37 green. `tsc --noEmit` clean.
36
+
37
+ ## Scope (honest)
38
+
39
+ Keystone of the resource chain (#952 → #955 → #958 → this): the prior unblocks only take
40
+ effect once the reaper can verify idle, which this enables. Does NOT flip the reaper live
41
+ (still dry-run, validated by observation). Does NOT address the transcript pile-up it
42
+ surfaced (echo: 151,814 files / 5.9 GB across 132 project dirs) — a separate retention
43
+ follow-up.
@@ -0,0 +1,30 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ The machine that owns a session can now serve its live terminal stream to a peer machine, securely. A peer requests a single-use bearer ticket over the existing machine-authed mesh channel (`pool-stream-ticket` verb); the serving machine mints it via the new StreamTicketStore (60s TTL, single-use, persisted so a captured ticket can't replay across a restart). The peer opens a `/pool-stream` WebSocket carrying that ticket; the serving machine consumes it once and treats the peer as a streaming client. Remote keystroke input is OFF by default (per-machine opt-in); session names are validated (tmux-safe charset + must be running) before anything reaches the shell.
9
+
10
+ This is the serving (has-the-session) half. The requesting half (the dashboard auto-opening these connections) and the on-screen UI are phases 2b and 3.
11
+
12
+ ## What to Tell Your User
13
+
14
+ Nothing changes on screen yet — this is the secure plumbing the click-to-stream feature will use. Default posture: other machines can watch, not type, unless you opt in.
15
+
16
+ - audience: agent-only
17
+ - maturity: preview
18
+
19
+ ## Summary of New Capabilities
20
+
21
+ - `StreamTicketStore` — single-use, TTL-bounded, restart-replay-proof stream tickets.
22
+ - `pool-stream-ticket` mesh verb — mints a ticket for an authenticated peer.
23
+ - `/pool-stream` WebSocket serving endpoint — ticket-gated; peer streams a session.
24
+ - Serving-side guards: `dashboard.poolStream.allowRemoteInput` (default false); session-name validation (`^[A-Za-z0-9_.:@-]+$` + must-be-running) before tmux.
25
+
26
+ ## Evidence
27
+
28
+ - `tests/unit/StreamTicketStore.test.ts` (11): single-use, expiry, wrong-machine, bearer mode, replay-across-restart, corrupt-fail-closed, GC.
29
+ - `tests/e2e/pool-stream-serving-alive.test.ts` (6, real http server + real ws): valid ticket streams; bad ticket → 401; single-use enforced; input gated off by default; input accepted when on; tmux-unsafe name refused.
30
+ - `tests/unit/WebSocketManager.test.ts` updated for the new existence-before-input guard. tsc clean; state registry + MeshRpc RBAC updated.
@@ -0,0 +1,69 @@
1
+ # Side-Effects Review — Pool dashboard streaming phase 2a (serving endpoint)
2
+
3
+ **Version / slug:** `dashboard-stream-phase2a-serving`
4
+ **Date:** `2026-06-07`
5
+ **Author:** `echo`
6
+ **Second-pass reviewer:** `not required`
7
+
8
+ ## Summary of the change
9
+
10
+ Serving side of cross-machine streaming: StreamTicketStore (single-use ticket),
11
+ `pool-stream-ticket` mesh verb (mint), `/pool-stream` WS endpoint (ticket-gated
12
+ peer streaming reusing the existing WSManager client path), serving-side input
13
+ gate (allowRemoteInput default-off) + session-name validation.
14
+
15
+ ## Decision-point inventory
16
+
17
+ (1) Ticket auth vs signed-headers-at-upgrade → ticket (bounded, single-use,
18
+ restart-replay-proof). (2) Remote input default → OFF (lateral-movement). (3)
19
+ Session-name handling → strict charset + must-be-running before tmux.
20
+
21
+ ## 1. Over-block
22
+
23
+ Remote input is refused by default (input-not-allowed) — intended; watching is
24
+ unaffected. A session-name that isn't tmux-safe OR isn't running is refused
25
+ (invalid-session / session-not-found) — correct, never relay blind.
26
+
27
+ ## 2. Under-block
28
+
29
+ The minted ticket is a bearer credential: anyone holding it (within 60s,
30
+ once) can open the stream. Mitigated: minted only to an authenticated peer
31
+ (mesh verb), single-use, short TTL, optional wrong-machine defense-in-depth. A
32
+ peer that can watch a session sees its output (disclosure accepted for
33
+ same-operator peers, per spec §2.3).
34
+
35
+ ## 3. Level-of-abstraction fit
36
+
37
+ The peer reuses the existing WSManager client/handleMessage path (one streaming
38
+ implementation, not a fork); only the upgrade (ticket consume) and the
39
+ write-gate differ. Ticket minting rides the existing mesh dispatcher (no new
40
+ auth surface). Store persistence matches the PendingPullLedger idiom.
41
+
42
+ ## 4. Signal vs authority compliance
43
+
44
+ **Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
45
+
46
+ The new authority (ticket consume, input gate, name validation) is structural
47
+ and fail-closed: no ticket → 503/401; bad name → refused; peer input off →
48
+ refused. Identity comes from the mint record / mesh-auth, never an unverified
49
+ upgrade claim.
50
+
51
+ ## 5. Interactions
52
+
53
+ - WebSocketManager local (/ws) path: unchanged except the new existence-before-
54
+ input guard (a real improvement; the two existing input/key tests updated to
55
+ register the session).
56
+ - MeshRpc RBAC: pool-stream-ticket joins the read/observe class (mint discloses
57
+ nothing; ticket+gate are the controls).
58
+ - StreamTicketStore persistence: new durable category `stream-tickets`
59
+ registered in state-coherence-registry.
60
+ - Config: `dashboard.poolStream.allowRemoteInput` (absent = false = safe, so no
61
+ migrateConfig needed — absence is correct).
62
+ - Phases 2b (requesting side) + 3 (UI) consume this; not wired to the dashboard
63
+ UI yet.
64
+
65
+ ## 6. External surfaces
66
+
67
+ New WS path `/pool-stream` (ticket-gated) + new mesh verb `pool-stream-ticket`.
68
+ No new HTTP route, no Telegram, no notifications. One new durable state file
69
+ (stream-tickets.json, names+expiry only — no secrets).
@@ -0,0 +1,46 @@
1
+ # Side-Effects Review - Reaper transcript-resolution fix (projectDir)
2
+
3
+ **Version / slug:** `reaper-transcript-projectdir`
4
+ **Date:** `2026-06-06`
5
+ **Author:** `echo`
6
+ **Second-pass reviewer:** `not required (Tier 1)`
7
+
8
+ ## Summary of the change
9
+
10
+ The SessionReaper transcript probe (and the StaleSessionBackstop probe) were called with `projectDir: ''`, so `resolveFrameworkTranscriptPath` built `~/.claude/projects//<sessionId>.jsonl` — an empty-encoded dir that never exists → every transcript read as `resolved:false` → keptBy `transcript-unresolved` for EVERY session → the reaper could never prove a session idle (kept everything). Fix: pass the agent's session-launch cwd (`config.projectDir`), which Claude Code encodes into the transcript path. Adds a `transcriptProjectDir?: () => string` dep to `SessionReaperDeps` (wired to `config.projectDir` in server.ts) used by the fallback `probe()`; fixes the StaleSessionBackstop probe to use `config.projectDir` directly.
11
+
12
+ ## Decision-point inventory
13
+
14
+ - `SessionReaper.probe()` fallback: `projectDir` now `this.deps.transcriptProjectDir?.() ?? ''` (was `''`).
15
+ - `SessionReaperDeps.transcriptProjectDir?` (new, optional) — wired in server.ts to `() => config.projectDir`.
16
+ - `server.ts` StaleSessionBackstop `snapshot()`: `projectDir: config.projectDir` (was `''`).
17
+
18
+ ## 1. Behavior change / gating
19
+
20
+ No gate/flow change. This only lets the reaper RESOLVE the transcript so its existing idle-proof (transcript-growth + positive-idle) can run. It changes the reaper from "structurally unable to verify idle (keeps all)" to "can verify idle." The reaper is opt-in + dry-run-first; nothing it kills changes without an operator enabling it, and the safe default (unresolved → KEEP) is preserved whenever projectDir is absent/wrong.
21
+
22
+ ## 2. Over/under-signal
23
+
24
+ The risk is UNDER-keeping (reaping something it shouldn't) only if the WRONG projectDir resolved to a DIFFERENT session's transcript — impossible, because the path also includes the unique `<claudeSessionId>` filename; a wrong projectDir yields a non-existent path → unresolved → KEEP. So the change can only resolve the correct transcript or fail safe. Prior UNDER-signal (never reaps) is the bug being fixed.
25
+
26
+ ## 3. Blast radius
27
+
28
+ Two probe call-sites; reuses the existing `resolveFrameworkTranscriptPath`. No new I/O beyond the stat that was already attempted (just at the right path now). No API route, no persistent state, no migration. `transcriptProjectDir` is optional → absent in any caller that doesn't wire it → '' → unresolved → KEEP (old safe behavior).
29
+
30
+ ## 4. Failure modes
31
+
32
+ A wrong/empty projectDir → non-existent path → `resolved:false` → `transcript-unresolved` → KEEP (the conservative default, never reap). `probeTranscript` already swallows stat errors to `resolved:false`. The dep is optional so existing constructions (and the unit harness) compile and run unchanged.
33
+
34
+ ## 5. Migration parity
35
+
36
+ No agent-installed file changes; internal reaper wiring. The dep is wired in server.ts at construction from the already-present `config.projectDir` — every existing agent gets the corrected probe on its next server start, no `PostUpdateMigrator` entry needed. The reaper remains opt-in (enabled:false default) so behavior only changes for operators who enable it.
37
+
38
+ ## 6. Scope honesty (what this is NOT)
39
+
40
+ - Keystone of the resource chain (#952 → #955 → #958 → this): WITHOUT this the reaper can never verify idle, so the prior three unblocks couldn't take effect. WITH it, the dry-run can finally show genuinely-idle sessions as reap-eligible.
41
+ - Does NOT address the transcript pile-up it surfaced (echo: 151,814 files / 5.9 GB across 132 project dirs) — that is a separate retention/pruning task, flagged for follow-up.
42
+ - Does NOT flip the reaper live — still dry-run on echo, validated by observation first.
43
+
44
+ ## 7. Causal autopsy
45
+
46
+ Origin: **latent**. The `projectDir: ''` probe argument has been wrong since the probe was introduced — a standalone pre-existing bug, independent of any prior PR. It went unhit only because the reaper's earlier KEEP-guards (open-commitment, then active-process) short-circuited before the transcript check ever ran; the #955/#958 fixes peeled those layers and made the reaper REACH the transcript probe, which is when the latent `''` bug surfaced as the universal `transcript-unresolved`. The transcripts always existed at the correct (non-empty) path; the probe simply never pointed there.