@dsiloed/silo-link 1.19.16 → 1.19.17

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.
package/README.md CHANGED
@@ -100,6 +100,9 @@ All four of `--host`, `--tenant`, `--user-sub`, `--jwt` are required when `--non
100
100
  | `claude_auto_respawn` | Auto-respawn on idle/exit | `false` |
101
101
  | `claude_idle_timeout_ms` | Idle threshold before respawn | `30000` |
102
102
  | `claude_session_prompt` | Default prompt for spawned sessions | `Register with SiloLink...` |
103
+ | `stale_inbound_grace_ms` | On an inbound message, never recycle a session younger than this (a fresh pane may take minutes to register) | `600000` (10 min) |
104
+ | `report_back_idle_ms` | After a `final:true` report with no further work, complete the session (`state: idle_timeout`) and kill the pane; `0` disables | `120000` (2 min) |
105
+ | `poll_idle_complete_ms` | **Opt-in.** End a session parked in `remote_poll` with zero work calls for this long; `0` = disabled | `0` |
103
106
 
104
107
  **Example config file (after running `silolink config`):**
105
108
 
@@ -228,9 +231,10 @@ tmux attach -t silolink-claude-1774363497579
228
231
 
229
232
  | Tool | Description | Blocking |
230
233
  |------|-------------|----------|
231
- | `remote_register` | Register session, create/attach conversation | No |
234
+ | `remote_register` | Register session, create/attach conversation (binds to the launched conversation) | No |
232
235
  | `remote_load_context` | Load prior conversation history for session continuity | No |
233
- | `remote_notify` | Fire-and-forget message | No |
236
+ | `remote_notify` | Fire-and-forget message (accepts `final?`) | No |
237
+ | `remote_post` | Post to ANY conversation by id (accepts `final?`) | No |
234
238
  | `remote_ask` | Post question, wait for reply | Yes |
235
239
  | `remote_poll` | Non-blocking check for next message (**recommended**) | No |
236
240
  | `remote_check_messages` | Non-blocking check for ALL pending messages | No |
@@ -252,6 +256,14 @@ Output: { session_id, conversation_id, conversation_url }
252
256
 
253
257
  When `conversation_id` is provided, attaches to that existing conversation (used by auto-launcher).
254
258
 
259
+ For a session the daemon launched, the MCP transport is already bound to the
260
+ **launched** conversation (via the per-launch `X-SiloLink-Launch` header), so
261
+ `remote_register` adopts that conversation regardless of the `conversation_id`
262
+ you pass. If the two disagree, the launch binding wins and the tool result
263
+ returns a `conversation_mismatch` warning naming the conversation you were
264
+ actually registered against. See
265
+ [docs/session-reliability.md](docs/session-reliability.md).
266
+
255
267
  ### remote_load_context
256
268
 
257
269
  ```
@@ -275,10 +287,16 @@ Non-blocking. Safer than `remote_wait_for_command` — can't lose messages on ca
275
287
  ### remote_notify
276
288
 
277
289
  ```
278
- Input: { message: "Build completed successfully" }
290
+ Input: { message: "Build completed successfully", final?: false }
279
291
  Output: { success: true, message_id }
280
292
  ```
281
293
 
294
+ Pass `final: true` on your **last** completion report for a dispatch (and only
295
+ then). The post is tagged `silolink_report { agent_session_id, kind: completion }`
296
+ so the dispatcher can tell completion from progress, and it arms the daemon's
297
+ idle-completion path (`report_back_idle_ms`) to gracefully end the session once
298
+ no further work arrives. `remote_post` takes the same `final?` flag.
299
+
282
300
  ### remote_ask
283
301
 
284
302
  ```
@@ -437,6 +455,41 @@ Active SiloLink sessions appear in the Mission Control Agent Dashboard with:
437
455
  - Heartbeats on every tool call
438
456
  - Conversation link for quick navigation
439
457
 
458
+ ## Session Reliability & Health
459
+
460
+ The daemon keeps a launched worker bound to the conversation it was launched for,
461
+ judges the pane (not MCP silence) before recycling, ends parked workers so the
462
+ backend learns they're done, and reports its own health on every heartbeat. In
463
+ brief:
464
+
465
+ - **Launch↔transport binding** — each launch writes a per-launch MCP config
466
+ (`<cwd>/.silolink-mcp/conv<id>-<nonce>.json`, `0600`) carrying an
467
+ `X-SiloLink-Launch` header; `remote_register` adopts the **launched**
468
+ conversation and overrides a mismatched `conversation_id` with a clear warning.
469
+ - **Minted session id** — fresh Claude launches pass `--session-id <uuid>`
470
+ (never with `--resume`/`--continue`), so a shared cwd can't cross-attribute a
471
+ transcript.
472
+ - **Stale-on-inbound recycler** — recycles only a pane that exists, isn't
473
+ actively thinking, and is frozen ≥ 15 min; skips launch-pending sessions and
474
+ anything younger than `stale_inbound_grace_ms` (10 min).
475
+ - **Idle completion** — a `final:true` report followed by `report_back_idle_ms`
476
+ (2 min) of quiet completes the session (`state: idle_timeout`) then kills the
477
+ pane — but only if the pane isn't actively working. `poll_idle_complete_ms` is
478
+ opt-in (default 0).
479
+ - **Report markers** — `remote_notify`/`remote_post` accept `final?` and stamp
480
+ `silolink_report { agent_session_id, kind }` on the post.
481
+ - **Health heartbeat** — every heartbeat carries a redacted `health` block plus
482
+ an hourly `[HEALTH]` log line (credentials, JWT expiry, backend 403 streaks,
483
+ usage-ledger depth, updater/launch state).
484
+ - **403 handling** — a 3-streak of 403s on `report_usage`/`launch_context` is
485
+ terminal for retries (ledger kept, one probe every 30 min; recovers on the next
486
+ 2xx).
487
+ - **Auto-update integrity** — a hub `expected_integrity` pin is verified against
488
+ the `npm pack`ed tarball with `ssri` before installing (`--ignore-scripts`).
489
+
490
+ Full details, rationale, and the config keys are in
491
+ [docs/session-reliability.md](docs/session-reliability.md).
492
+
440
493
  ## Permissions
441
494
 
442
495
  SiloLink-spawned sessions run headlessly — no human at the keyboard. Permission prompts hang the pane, so the launcher pre-clears two gates so `--dangerously-skip-permissions` actually takes effect on every command (the flag alone is not enough on CC 2.x).
@@ -51,7 +51,7 @@ export interface AgentProcess {
51
51
  import type { LaunchBindingRegistry, LaunchLinkage } from './launch-binding.js';
52
52
  export interface WedgeVerdict {
53
53
  wedged: boolean;
54
- /** Human-readable why (logged by callers): 'no-pane' | 'pane-gone' | 'pane-active' | 'frozen-Nmin' … */
54
+ /** Human-readable why (logged by callers): 'no-pane' | 'pane-gone' | 'polling' | 'pane-active' | 'frozen-Nmin' … */
55
55
  reason: string;
56
56
  /** The tmux pane name at decision time (null when the launcher tracks none). */
57
57
  paneName: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-launcher.d.ts","sourceRoot":"","sources":["../../src/core/agent-launcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-launcher.d.ts","sourceRoot":"","sources":["../../src/core/agent-launcher.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import type { AgentLauncher, LaunchConfig, AgentProcess, WedgeVerdict } from './
7
7
  import type { UsageEntry } from './transcript-usage.js';
8
8
  import type { UsageLedger, UsageReconcileTarget, UsageReconcileOutcome } from './usage-ledger.js';
9
9
  import { type LaunchBindingRegistry, type LaunchLinkage } from './launch-binding.js';
10
+ import { type StraySnapshot } from './stray-processes.js';
10
11
  /** Per-launch identity handed to setupMcpConfig so the spawned CLI's MCP transport can be bound to its pane. */
11
12
  export interface LaunchIdentity {
12
13
  token: string;
@@ -179,7 +180,7 @@ export declare abstract class BaseTmuxLauncher implements AgentLauncher {
179
180
  /** Idle-kill threshold in ms; 0 disables. Override in subclass. */
180
181
  protected getIdleKillAfterMs(): number;
181
182
  protected getIdleKillHardCeilMs(): number;
182
- protected shouldSuppressIdleKill(tmuxName: string, idleMs: number): boolean;
183
+ protected shouldSuppressIdleKill(tmuxName: string, idleMs: number, session?: Pick<Session, 'lastPollAt'>): boolean;
183
184
  /**
184
185
  * Whether to paste the prompt in tmux bracketed-paste mode (`paste-buffer -p`).
185
186
  * Bracketed paste wraps the text so the target TUI treats it as literal pasted
@@ -259,6 +260,14 @@ export declare abstract class BaseTmuxLauncher implements AgentLauncher {
259
260
  protected static readonly HEARTBEAT_INTERVAL_MS: number;
260
261
  protected static readonly HEARTBEAT_ACTIVITY_GATE_MS: number;
261
262
  protected heartbeatNudge(): boolean;
263
+ /**
264
+ * The heartbeat line typed into a pane. A session that has already filed
265
+ * its final report is told to END, not to keep polling: the generic
266
+ * "call remote_poll" wording kept finished workers answering "Mid-task,
267
+ * continuing" for hours (Doug's video sessions, 2026-08-26). Everything
268
+ * else keeps the classic wording, which is what idle prod agents rely on.
269
+ */
270
+ static heartbeatMessage(finalReportFiled: boolean): string;
262
271
  isEnabled(): boolean;
263
272
  isAutoRespawnEnabled(): boolean;
264
273
  hasLiveProcess(): boolean;
@@ -349,6 +358,25 @@ export declare abstract class BaseTmuxLauncher implements AgentLauncher {
349
358
  protected tmuxNameForConversation(conversationId: number): string | null;
350
359
  killByConversation(conversationId: number, reason?: string): void;
351
360
  kill(): void;
361
+ /**
362
+ * Value of the SILOLINK_PANE env marker every process under a pane inherits:
363
+ * `<owner-env>:conv<id>`. Env-qualified because conversation ids are only
364
+ * unique per platform host — a DEV and a PROD daemon on one laptop can both
365
+ * own a "conv 3432".
366
+ */
367
+ protected paneMarker(conversationId: number): string;
368
+ /**
369
+ * Stray-process reaping (2026-08-26): killing a tmux session kills the shell
370
+ * and the CLI, but anything the CLI started detached (a backgrounded
371
+ * `ffmpeg`, `nohup node …`) is re-parented to init and lives on — one
372
+ * orphaned ffmpeg from a finished Doug video session pinned a core at 114%
373
+ * for 6h43m. Process lineage is gone by then, but the ENVIRONMENT is
374
+ * inherited: every pane is launched with SILOLINK_PANE=<env>:conv<id>, so
375
+ * survivors are findable by marker. Snapshot BEFORE the kill (so a relaunch
376
+ * of the same conversation seconds later is never in the set), sweep after.
377
+ */
378
+ protected snapshotStrays(conversationId: number): StraySnapshot | null;
379
+ protected reapStrays(snapshot: StraySnapshot | null, reason: string): void;
352
380
  /**
353
381
  * Capture the last ~200 lines of a tmux pane and log them. Called before
354
382
  * kill-session so the last output survives the kill. The `remain-on-exit on`
@@ -1 +1 @@
1
- {"version":3,"file":"base-tmux-launcher.d.ts","sourceRoot":"","sources":["../../src/core/base-tmux-launcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-tmux-launcher.d.ts","sourceRoot":"","sources":["../../src/core/base-tmux-launcher.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ import { join, dirname } from 'node:path';
6
6
  import { tmpdir, homedir } from 'node:os';
7
7
  import { LAUNCH_HEADER } from './launch-binding.js';
8
8
  import { healthMonitor } from './health-monitor.js';
9
+ import { isInPollLoop } from './idle-completion.js';
10
+ import { reapStrayProcesses, snapshotStrayProcesses } from './stray-processes.js';
9
11
  import { randomUUID } from 'node:crypto';
10
12
  /**
11
13
  * Abstract base class for tmux-based agent launchers.
@@ -294,8 +296,18 @@ export class BaseTmuxLauncher {
294
296
  // Spare it only while its pane shows genuine new output AND it is still
295
297
  // under the hard idle ceiling; past the ceiling a session making no MCP
296
298
  // progress is wedged and must be killed regardless of pane animation.
297
- shouldSuppressIdleKill(tmuxName, idleMs) {
298
- return idleMs < this.getIdleKillHardCeilMs() && this.isActivelyThinking(tmuxName);
299
+ //
300
+ // A session in its remote_poll loop is never spared: it has told us, via
301
+ // the poll tool itself, that it has nothing to do. Its pane churns anyway
302
+ // (tool-call counters, spinner, "still nothing — continuing to poll"), and
303
+ // that churn used to pass as "genuine new output" — every Doug video
304
+ // session on 2026-08-26 ran 4h past its threshold to the 8h hard ceiling.
305
+ shouldSuppressIdleKill(tmuxName, idleMs, session) {
306
+ if (idleMs >= this.getIdleKillHardCeilMs())
307
+ return false;
308
+ if (session && isInPollLoop(session))
309
+ return false;
310
+ return this.isActivelyThinking(tmuxName);
299
311
  }
300
312
  /**
301
313
  * Whether to paste the prompt in tmux bracketed-paste mode (`paste-buffer -p`).
@@ -512,13 +524,29 @@ export class BaseTmuxLauncher {
512
524
  return false;
513
525
  }
514
526
  this.lastHeartbeatAt = now;
515
- const message = 'Heartbeat check: if you are idle, call remote_poll to resume checking for messages. If you are mid-task, ignore this and keep going.';
516
- for (const [name] of this.tmuxSessions) {
517
- this.sendLineToPane(name, message);
527
+ let finalReported = 0;
528
+ for (const [name, info] of this.tmuxSessions) {
529
+ const session = info.conversationId ? this.sessionManager.getByConversationId(info.conversationId) : undefined;
530
+ const done = !!session?.finalReportAt;
531
+ if (done)
532
+ finalReported++;
533
+ this.sendLineToPane(name, BaseTmuxLauncher.heartbeatMessage(done));
518
534
  }
519
- console.log(`${this.getLogTag()} Heartbeat nudge sent to ${this.tmuxSessions.size} session(s)`);
535
+ console.log(`${this.getLogTag()} Heartbeat nudge sent to ${this.tmuxSessions.size} session(s)${finalReported ? ` (${finalReported} told to unregister — final report already filed)` : ''}`);
520
536
  return true;
521
537
  }
538
+ /**
539
+ * The heartbeat line typed into a pane. A session that has already filed
540
+ * its final report is told to END, not to keep polling: the generic
541
+ * "call remote_poll" wording kept finished workers answering "Mid-task,
542
+ * continuing" for hours (Doug's video sessions, 2026-08-26). Everything
543
+ * else keeps the classic wording, which is what idle prod agents rely on.
544
+ */
545
+ static heartbeatMessage(finalReportFiled) {
546
+ return finalReportFiled
547
+ ? 'Heartbeat check: you already posted your final report and no new work has arrived. Call remote_unregister now to end this session. Only if you are still mid-task, ignore this and keep going.'
548
+ : 'Heartbeat check: if you are idle, call remote_poll to resume checking for messages. If you are mid-task, ignore this and keep going.';
549
+ }
522
550
  isEnabled() { return this.enabled; }
523
551
  isAutoRespawnEnabled() { return this.enabled && this.isAutoRespawnConfigured(); }
524
552
  hasLiveProcess() { return this.tmuxSessions.size > 0; }
@@ -870,7 +898,9 @@ export class BaseTmuxLauncher {
870
898
  for (const [name, info] of this.tmuxSessions) {
871
899
  if (info.conversationId === conversationId) {
872
900
  this.capturePaneTail(name, reason); // also reports token usage (see capturePaneTail)
901
+ const strays = this.snapshotStrays(conversationId);
873
902
  spawn('tmux', ['kill-session', '-t', name], { stdio: 'ignore' });
903
+ this.reapStrays(strays, reason);
874
904
  this.tmuxSessions.delete(name);
875
905
  const wsId = this.tmuxSessionWorkspaces.get(name);
876
906
  if (wsId && this.workspaceManager) {
@@ -899,13 +929,15 @@ export class BaseTmuxLauncher {
899
929
  });
900
930
  }
901
931
  kill() {
902
- for (const [name] of this.tmuxSessions) {
932
+ for (const [name, info] of this.tmuxSessions) {
903
933
  this.capturePaneTail(name, 'kill-all');
904
934
  const wsSessionId = this.tmuxSessionWorkspaces.get(name);
905
935
  if (wsSessionId && this.workspaceManager) {
906
936
  this.workspaceManager.removeWorktree(wsSessionId);
907
937
  }
938
+ const strays = info.conversationId ? this.snapshotStrays(info.conversationId) : null;
908
939
  spawn('tmux', ['kill-session', '-t', name], { stdio: 'ignore' });
940
+ this.reapStrays(strays, 'kill-all');
909
941
  }
910
942
  this.tmuxSessions.clear();
911
943
  this.tmuxSessionWorkspaces.clear();
@@ -914,6 +946,44 @@ export class BaseTmuxLauncher {
914
946
  this.tmuxMonitorTimer = null;
915
947
  }
916
948
  }
949
+ /**
950
+ * Value of the SILOLINK_PANE env marker every process under a pane inherits:
951
+ * `<owner-env>:conv<id>`. Env-qualified because conversation ids are only
952
+ * unique per platform host — a DEV and a PROD daemon on one laptop can both
953
+ * own a "conv 3432".
954
+ */
955
+ paneMarker(conversationId) {
956
+ return `${this.ownerEnv()}:conv${conversationId}`;
957
+ }
958
+ /**
959
+ * Stray-process reaping (2026-08-26): killing a tmux session kills the shell
960
+ * and the CLI, but anything the CLI started detached (a backgrounded
961
+ * `ffmpeg`, `nohup node …`) is re-parented to init and lives on — one
962
+ * orphaned ffmpeg from a finished Doug video session pinned a core at 114%
963
+ * for 6h43m. Process lineage is gone by then, but the ENVIRONMENT is
964
+ * inherited: every pane is launched with SILOLINK_PANE=<env>:conv<id>, so
965
+ * survivors are findable by marker. Snapshot BEFORE the kill (so a relaunch
966
+ * of the same conversation seconds later is never in the set), sweep after.
967
+ */
968
+ snapshotStrays(conversationId) {
969
+ try {
970
+ return snapshotStrayProcesses(this.paneMarker(conversationId));
971
+ }
972
+ catch (err) {
973
+ console.warn(`${this.getLogTag()} stray-process snapshot failed for conv ${conversationId}: ${err}`);
974
+ return null;
975
+ }
976
+ }
977
+ reapStrays(snapshot, reason) {
978
+ if (!snapshot || snapshot.pids.length === 0)
979
+ return;
980
+ reapStrayProcesses(snapshot).then(result => {
981
+ if (result.killed.length === 0)
982
+ return;
983
+ console.warn(`${this.getLogTag()} reaped ${result.killed.length} stray process(es) left behind by ${snapshot.marker} (reason: ${reason}): ` +
984
+ result.killed.map(p => `${p.pid} ${p.command}`).join(' | '));
985
+ }).catch(err => console.warn(`${this.getLogTag()} stray-process sweep failed for ${snapshot.marker}: ${err}`));
986
+ }
917
987
  /**
918
988
  * Capture the last ~200 lines of a tmux pane and log them. Called before
919
989
  * kill-session so the last output survives the kill. The `remain-on-exit on`
@@ -1325,9 +1395,13 @@ export class BaseTmuxLauncher {
1325
1395
  // runs daemons AND has the hook installed. Uses an `env` prefix (not
1326
1396
  // getAgentEnv) because tmux doesn't propagate caller env to panes on an
1327
1397
  // already-running server.
1398
+ // SILOLINK_PANE=<env>:conv<id> is inherited by everything the CLI spawns,
1399
+ // detached or not — it is how stray subprocesses are found after the
1400
+ // pane is gone (see snapshotStrays).
1401
+ const paneEnv = conversationId ? [`SILOLINK_PANE=${this.paneMarker(conversationId)}`] : [];
1328
1402
  const tmuxArgs = [
1329
1403
  'new-session', '-d', '-s', tmuxSession, '-c', cwd, '-x', '200', '-y', '50',
1330
- 'env', 'SILOLINK_MANAGED=1', command, ...args,
1404
+ 'env', 'SILOLINK_MANAGED=1', ...paneEnv, command, ...args,
1331
1405
  ];
1332
1406
  const tmuxCreate = spawn('tmux', tmuxArgs, {
1333
1407
  stdio: 'ignore',
@@ -2024,7 +2098,7 @@ export class BaseTmuxLauncher {
2024
2098
  // NEW output. A pane frozen past FROZEN_THRESHOLD_MS is wedged and gets
2025
2099
  // killed despite any spinner animation.
2026
2100
  const tmuxName = this.tmuxNameForConversation(s.conversationId);
2027
- if (tmuxName && this.shouldSuppressIdleKill(tmuxName, now - s.lastActivity.getTime())) {
2101
+ if (tmuxName && this.shouldSuppressIdleKill(tmuxName, now - s.lastActivity.getTime(), s)) {
2028
2102
  console.log(`${this.getLogTag()} conv ${s.conversationId} past idle-kill threshold but pane shows active work — suppressing idle-kill`);
2029
2103
  continue;
2030
2104
  }
@@ -2239,6 +2313,11 @@ export class BaseTmuxLauncher {
2239
2313
  const idleMs = now - s.lastActivity.getTime();
2240
2314
  if (idleMs < BaseTmuxLauncher.WEDGED_SESSION_MS)
2241
2315
  continue;
2316
+ // An empty remote_poll does NOT advance lastActivity, so a healthy idle
2317
+ // poller looks MCP-silent here. Its poll loop is the liveness proof —
2318
+ // never a wedge, regardless of what its pane hash does.
2319
+ if (isInPollLoop(s, now))
2320
+ continue;
2242
2321
  const tmuxName = this.tmuxNameForConversation(s.conversationId);
2243
2322
  if (!tmuxName)
2244
2323
  continue; // no pane — the dead-pane reconcile owns it
@@ -2265,6 +2344,12 @@ export class BaseTmuxLauncher {
2265
2344
  if (this.capturePaneTailForProgress(paneName) === null) {
2266
2345
  return { wedged: false, reason: 'pane-gone', paneName };
2267
2346
  }
2347
+ // In its poll loop ⇒ alive AND idle. Reported as 'polling' rather than
2348
+ // 'pane-active' so idle-completion acts on it (a parked worker) while the
2349
+ // recycler still leaves it alone (not wedged).
2350
+ const session = this.sessionManager.getByConversationId(conversationId);
2351
+ if (session && isInPollLoop(session))
2352
+ return { wedged: false, reason: 'polling', paneName };
2268
2353
  if (this.isActivelyThinking(paneName))
2269
2354
  return { wedged: false, reason: 'pane-active', paneName };
2270
2355
  const prog = this.paneProgress.get(paneName);