@agentdeck/bridge 1.0.19 → 1.0.21

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 (192) hide show
  1. package/dist/adapters/openclaw.d.ts +55 -1
  2. package/dist/adapters/openclaw.d.ts.map +1 -1
  3. package/dist/adapters/openclaw.js +278 -45
  4. package/dist/adapters/openclaw.js.map +1 -1
  5. package/dist/adb-reverse.d.ts +26 -3
  6. package/dist/adb-reverse.d.ts.map +1 -1
  7. package/dist/adb-reverse.js +26 -5
  8. package/dist/adb-reverse.js.map +1 -1
  9. package/dist/apme/adapters/codex-turn-manager.js +6 -1
  10. package/dist/apme/adapters/codex-turn-manager.js.map +1 -1
  11. package/dist/apme/adapters/openclaw-hook.d.ts +45 -1
  12. package/dist/apme/adapters/openclaw-hook.d.ts.map +1 -1
  13. package/dist/apme/adapters/openclaw-hook.js +84 -4
  14. package/dist/apme/adapters/openclaw-hook.js.map +1 -1
  15. package/dist/apme/claude-transcript-reader.d.ts +76 -0
  16. package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
  17. package/dist/apme/claude-transcript-reader.js +152 -1
  18. package/dist/apme/claude-transcript-reader.js.map +1 -1
  19. package/dist/apme/collector.d.ts +63 -5
  20. package/dist/apme/collector.d.ts.map +1 -1
  21. package/dist/apme/collector.js +147 -10
  22. package/dist/apme/collector.js.map +1 -1
  23. package/dist/apme/store.d.ts +23 -1
  24. package/dist/apme/store.d.ts.map +1 -1
  25. package/dist/apme/store.js +81 -2
  26. package/dist/apme/store.js.map +1 -1
  27. package/dist/apme/types.d.ts +1 -1
  28. package/dist/apme/types.d.ts.map +1 -1
  29. package/dist/apme/types.js.map +1 -1
  30. package/dist/auth.d.ts +37 -0
  31. package/dist/auth.d.ts.map +1 -1
  32. package/dist/auth.js +23 -0
  33. package/dist/auth.js.map +1 -1
  34. package/dist/bridge-core.d.ts.map +1 -1
  35. package/dist/bridge-core.js +6 -1
  36. package/dist/bridge-core.js.map +1 -1
  37. package/dist/claude-interrupt-marker.d.ts +31 -0
  38. package/dist/claude-interrupt-marker.d.ts.map +1 -0
  39. package/dist/claude-interrupt-marker.js +58 -0
  40. package/dist/claude-interrupt-marker.js.map +1 -0
  41. package/dist/claude-turn-watchdog.d.ts +93 -0
  42. package/dist/claude-turn-watchdog.d.ts.map +1 -0
  43. package/dist/claude-turn-watchdog.js +173 -0
  44. package/dist/claude-turn-watchdog.js.map +1 -0
  45. package/dist/cli.d.ts +6 -0
  46. package/dist/cli.d.ts.map +1 -1
  47. package/dist/cli.js +399 -115
  48. package/dist/cli.js.map +1 -1
  49. package/dist/codex-hook-silence.d.ts +52 -0
  50. package/dist/codex-hook-silence.d.ts.map +1 -0
  51. package/dist/codex-hook-silence.js +80 -0
  52. package/dist/codex-hook-silence.js.map +1 -0
  53. package/dist/daemon-port.d.ts +90 -0
  54. package/dist/daemon-port.d.ts.map +1 -0
  55. package/dist/daemon-port.js +119 -0
  56. package/dist/daemon-port.js.map +1 -0
  57. package/dist/daemon-server.d.ts +14 -1
  58. package/dist/daemon-server.d.ts.map +1 -1
  59. package/dist/daemon-server.js +297 -69
  60. package/dist/daemon-server.js.map +1 -1
  61. package/dist/daemon-settings.d.ts +46 -0
  62. package/dist/daemon-settings.d.ts.map +1 -0
  63. package/dist/daemon-settings.js +85 -0
  64. package/dist/daemon-settings.js.map +1 -0
  65. package/dist/daemon-takeover.d.ts +75 -0
  66. package/dist/daemon-takeover.d.ts.map +1 -0
  67. package/dist/daemon-takeover.js +137 -0
  68. package/dist/daemon-takeover.js.map +1 -0
  69. package/dist/daemon.js +1 -1
  70. package/dist/index.d.ts +4 -1
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +90 -12
  73. package/dist/index.js.map +1 -1
  74. package/dist/kiro-diagnostics.d.ts +90 -0
  75. package/dist/kiro-diagnostics.d.ts.map +1 -0
  76. package/dist/kiro-diagnostics.js +278 -0
  77. package/dist/kiro-diagnostics.js.map +1 -0
  78. package/dist/kiro-session.d.ts +113 -0
  79. package/dist/kiro-session.d.ts.map +1 -0
  80. package/dist/kiro-session.js +688 -0
  81. package/dist/kiro-session.js.map +1 -0
  82. package/dist/kiro-timeline-feed.d.ts +45 -0
  83. package/dist/kiro-timeline-feed.d.ts.map +1 -0
  84. package/dist/kiro-timeline-feed.js +116 -0
  85. package/dist/kiro-timeline-feed.js.map +1 -0
  86. package/dist/kiro-transcript-timeline.d.ts +57 -0
  87. package/dist/kiro-transcript-timeline.d.ts.map +1 -0
  88. package/dist/kiro-transcript-timeline.js +183 -0
  89. package/dist/kiro-transcript-timeline.js.map +1 -0
  90. package/dist/linux-service.d.ts +2 -1
  91. package/dist/linux-service.d.ts.map +1 -1
  92. package/dist/linux-service.js +8 -3
  93. package/dist/linux-service.js.map +1 -1
  94. package/dist/mdns-discover.d.ts +27 -0
  95. package/dist/mdns-discover.d.ts.map +1 -1
  96. package/dist/mdns-discover.js +60 -7
  97. package/dist/mdns-discover.js.map +1 -1
  98. package/dist/mdns.d.ts.map +1 -1
  99. package/dist/mdns.js +16 -3
  100. package/dist/mdns.js.map +1 -1
  101. package/dist/modules/adb-module.d.ts.map +1 -1
  102. package/dist/modules/adb-module.js +5 -2
  103. package/dist/modules/adb-module.js.map +1 -1
  104. package/dist/modules/index.d.ts +2 -1
  105. package/dist/modules/index.d.ts.map +1 -1
  106. package/dist/modules/index.js +1 -0
  107. package/dist/modules/index.js.map +1 -1
  108. package/dist/modules/types.d.ts +34 -9
  109. package/dist/modules/types.d.ts.map +1 -1
  110. package/dist/modules/types.js +34 -1
  111. package/dist/modules/types.js.map +1 -1
  112. package/dist/network-posture.d.ts +67 -0
  113. package/dist/network-posture.d.ts.map +1 -0
  114. package/dist/network-posture.js +100 -0
  115. package/dist/network-posture.js.map +1 -0
  116. package/dist/observed-steering.d.ts +14 -0
  117. package/dist/observed-steering.d.ts.map +1 -1
  118. package/dist/observed-steering.js +18 -0
  119. package/dist/observed-steering.js.map +1 -1
  120. package/dist/observed-turn-watchdogs.d.ts +84 -0
  121. package/dist/observed-turn-watchdogs.d.ts.map +1 -0
  122. package/dist/observed-turn-watchdogs.js +134 -0
  123. package/dist/observed-turn-watchdogs.js.map +1 -0
  124. package/dist/openclaw-session.d.ts +10 -0
  125. package/dist/openclaw-session.d.ts.map +1 -1
  126. package/dist/openclaw-session.js +12 -0
  127. package/dist/openclaw-session.js.map +1 -1
  128. package/dist/passive-observer.d.ts +19 -0
  129. package/dist/passive-observer.d.ts.map +1 -1
  130. package/dist/passive-observer.js +208 -24
  131. package/dist/passive-observer.js.map +1 -1
  132. package/dist/pixoo/micro-glyphs.d.ts +1 -1
  133. package/dist/pixoo/micro-glyphs.d.ts.map +1 -1
  134. package/dist/pixoo/micro-glyphs.js +2 -0
  135. package/dist/pixoo/micro-glyphs.js.map +1 -1
  136. package/dist/pixoo/official-dot-glyphs.generated.d.ts +1 -1
  137. package/dist/pixoo/official-dot-glyphs.generated.d.ts.map +1 -1
  138. package/dist/pixoo/official-dot-glyphs.generated.js +47 -0
  139. package/dist/pixoo/official-dot-glyphs.generated.js.map +1 -1
  140. package/dist/pixoo/pixoo-discover.d.ts +8 -1
  141. package/dist/pixoo/pixoo-discover.d.ts.map +1 -1
  142. package/dist/pixoo/pixoo-discover.js +15 -8
  143. package/dist/pixoo/pixoo-discover.js.map +1 -1
  144. package/dist/pixoo/pixoo-renderer.d.ts +4 -2
  145. package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
  146. package/dist/pixoo/pixoo-renderer.js +105 -36
  147. package/dist/pixoo/pixoo-renderer.js.map +1 -1
  148. package/dist/pixoo/pixoo-settings.d.ts +19 -2
  149. package/dist/pixoo/pixoo-settings.d.ts.map +1 -1
  150. package/dist/pixoo/pixoo-settings.js +22 -4
  151. package/dist/pixoo/pixoo-settings.js.map +1 -1
  152. package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
  153. package/dist/pixoo/pixoo-sprites.js +2 -0
  154. package/dist/pixoo/pixoo-sprites.js.map +1 -1
  155. package/dist/session-aggregator.d.ts +9 -1
  156. package/dist/session-aggregator.d.ts.map +1 -1
  157. package/dist/session-aggregator.js +1 -1
  158. package/dist/session-aggregator.js.map +1 -1
  159. package/dist/session-registry.d.ts +71 -3
  160. package/dist/session-registry.d.ts.map +1 -1
  161. package/dist/session-registry.js +126 -19
  162. package/dist/session-registry.js.map +1 -1
  163. package/dist/state-machine.d.ts +38 -1
  164. package/dist/state-machine.d.ts.map +1 -1
  165. package/dist/state-machine.js +112 -8
  166. package/dist/state-machine.js.map +1 -1
  167. package/dist/subagent-timeline.d.ts +38 -7
  168. package/dist/subagent-timeline.d.ts.map +1 -1
  169. package/dist/subagent-timeline.js +154 -23
  170. package/dist/subagent-timeline.js.map +1 -1
  171. package/dist/timeline-store.d.ts.map +1 -1
  172. package/dist/timeline-store.js +26 -1
  173. package/dist/timeline-store.js.map +1 -1
  174. package/dist/tui/renderer.d.ts.map +1 -1
  175. package/dist/tui/renderer.js +13 -1
  176. package/dist/tui/renderer.js.map +1 -1
  177. package/dist/tui/terrarium.d.ts.map +1 -1
  178. package/dist/tui/terrarium.js +10 -5
  179. package/dist/tui/terrarium.js.map +1 -1
  180. package/dist/utils/redact-secrets.d.ts +3 -0
  181. package/dist/utils/redact-secrets.d.ts.map +1 -0
  182. package/dist/utils/redact-secrets.js +29 -0
  183. package/dist/utils/redact-secrets.js.map +1 -0
  184. package/dist/version-check.d.ts +8 -0
  185. package/dist/version-check.d.ts.map +1 -1
  186. package/dist/version-check.js +27 -0
  187. package/dist/version-check.js.map +1 -1
  188. package/dist/windows-service.d.ts +2 -1
  189. package/dist/windows-service.d.ts.map +1 -1
  190. package/dist/windows-service.js +6 -3
  191. package/dist/windows-service.js.map +1 -1
  192. package/package.json +3 -3
@@ -34,6 +34,9 @@ function truncateToolInput(s) {
34
34
  const line = s.split('\n')[0];
35
35
  return line.length > 120 ? line.slice(0, 119) + '\u2026' : line;
36
36
  }
37
+ /** Grace period during which hook tool activity may not dismiss a freshly
38
+ * drawn AWAITING_* prompt — see recoverProcessingFromToolActivity(). */
39
+ export const AWAITING_TOOL_DISMISS_GRACE_MS = 1500;
37
40
  const TERMINAL_UI_EVENTS = new Set([
38
41
  'permission_prompt',
39
42
  'option_prompt',
@@ -67,9 +70,21 @@ export class StateMachine extends EventEmitter {
67
70
  lastValidSuggestedPrompt = null;
68
71
  usageTracker;
69
72
  stuckTimer = null;
70
- constructor(usageTracker) {
73
+ awaitingEnteredAt = 0;
74
+ /** Best-effort count of tool calls started but not yet finished this turn
75
+ * (PreToolUse++ / PostToolUse--). Used to tell "the gated tool ran" from
76
+ * "a parallel sibling finished while the prompt is still open". Reset at
77
+ * turn boundaries so a dropped hook cannot skew it forever. */
78
+ inFlightTools = 0;
79
+ /** False for the daemon hub's global machine: it multiplexes EVERY observed
80
+ * session's hooks, so an unrelated session's tool activity must never
81
+ * dismiss an AWAITING prompt (e.g. a held OpenClaw approval) or reopen
82
+ * IDLE. Session bridges own exactly one agent and keep this true. */
83
+ toolActivityRecovery;
84
+ constructor(usageTracker, opts) {
71
85
  super();
72
86
  this.usageTracker = usageTracker;
87
+ this.toolActivityRecovery = opts?.toolActivityRecovery ?? true;
73
88
  }
74
89
  handleHookEvent(eventName, data) {
75
90
  debug('SM', `hookEvent: ${eventName} (current: ${this.state})`);
@@ -81,6 +96,7 @@ export class StateMachine extends EventEmitter {
81
96
  case 'UserPromptSubmit':
82
97
  this.suggestedPrompt = null;
83
98
  this.lastValidSuggestedPrompt = null;
99
+ this.inFlightTools = 0;
84
100
  this.transition(State.PROCESSING, 'user_prompt_submit', 'hook');
85
101
  break;
86
102
  case 'PreToolUse': {
@@ -89,6 +105,11 @@ export class StateMachine extends EventEmitter {
89
105
  this.currentTool = toolName;
90
106
  this.toolInput = formatToolInput(toolName, toolInputData);
91
107
  this.toolProgress = `Using ${toolName}`;
108
+ this.inFlightTools++;
109
+ // Tool activity proves the turn is running: recovers AWAITING_* after a
110
+ // keyboard-answered prompt and IDLE after a dropped user_prompt_submit.
111
+ // A no-op from PROCESSING (transition table rejects it).
112
+ this.recoverProcessingFromToolActivity('start');
92
113
  this.emitSnapshot();
93
114
  break;
94
115
  }
@@ -97,6 +118,8 @@ export class StateMachine extends EventEmitter {
97
118
  this.currentTool = null;
98
119
  this.toolInput = null;
99
120
  this.toolProgress = null;
121
+ this.inFlightTools = Math.max(0, this.inFlightTools - 1);
122
+ this.recoverProcessingFromToolActivity('end');
100
123
  this.emitSnapshot();
101
124
  break;
102
125
  }
@@ -108,6 +131,7 @@ export class StateMachine extends EventEmitter {
108
131
  this.question = null;
109
132
  this.navigable = false;
110
133
  this.cursorIndex = 0;
134
+ this.inFlightTools = 0;
111
135
  this.transition(State.IDLE, 'stop', 'hook');
112
136
  break;
113
137
  case 'SessionEnd':
@@ -137,6 +161,7 @@ export class StateMachine extends EventEmitter {
137
161
  case 'codex_user_prompt_submit':
138
162
  this.suggestedPrompt = null;
139
163
  this.lastValidSuggestedPrompt = null;
164
+ this.inFlightTools = 0;
140
165
  this.transition(State.PROCESSING, 'user_prompt_submit', 'hook');
141
166
  break;
142
167
  case 'codex_tool_start': {
@@ -145,6 +170,9 @@ export class StateMachine extends EventEmitter {
145
170
  this.currentTool = toolName;
146
171
  this.toolInput = formatToolInput(toolName, toolInputData);
147
172
  this.toolProgress = toolName ? `Using ${toolName}` : null;
173
+ this.inFlightTools++;
174
+ // Same recovery contract as Claude PreToolUse (see above).
175
+ this.recoverProcessingFromToolActivity('start');
148
176
  this.emitSnapshot();
149
177
  break;
150
178
  }
@@ -153,6 +181,8 @@ export class StateMachine extends EventEmitter {
153
181
  this.currentTool = null;
154
182
  this.toolInput = null;
155
183
  this.toolProgress = null;
184
+ this.inFlightTools = Math.max(0, this.inFlightTools - 1);
185
+ this.recoverProcessingFromToolActivity('end');
156
186
  this.emitSnapshot();
157
187
  break;
158
188
  }
@@ -164,6 +194,7 @@ export class StateMachine extends EventEmitter {
164
194
  this.question = null;
165
195
  this.navigable = false;
166
196
  this.cursorIndex = 0;
197
+ this.inFlightTools = 0;
167
198
  this.transition(State.IDLE, 'stop', 'hook');
168
199
  break;
169
200
  case 'codex_turn_complete':
@@ -177,6 +208,7 @@ export class StateMachine extends EventEmitter {
177
208
  this.question = null;
178
209
  this.navigable = false;
179
210
  this.cursorIndex = 0;
211
+ this.inFlightTools = 0;
180
212
  this.transition(State.IDLE, 'stop', 'hook');
181
213
  break;
182
214
  default:
@@ -191,7 +223,16 @@ export class StateMachine extends EventEmitter {
191
223
  this.question = data?.question || null;
192
224
  this.navigable = data?.navigable ?? false;
193
225
  this.cursorIndex = data?.cursorIndex ?? 0;
194
- this.transition(State.AWAITING_PERMISSION, 'permission_prompt', 'pty');
226
+ if (this.state === State.AWAITING_PERMISSION) {
227
+ // Re-detected (redraw or a NEW same-kind prompt): refresh the
228
+ // dismissal grace so a follow-up prompt never inherits an expired
229
+ // window, and rebroadcast the updated fields.
230
+ this.awaitingEnteredAt = Date.now();
231
+ this.emitSnapshot();
232
+ }
233
+ else {
234
+ this.transition(State.AWAITING_PERMISSION, 'permission_prompt', 'pty');
235
+ }
195
236
  break;
196
237
  }
197
238
  case 'option_prompt': {
@@ -201,8 +242,10 @@ export class StateMachine extends EventEmitter {
201
242
  this.cursorIndex = data?.cursorIndex ?? 0;
202
243
  if (this.state === State.AWAITING_OPTION) {
203
244
  // Already in AWAITING_OPTION — just update options and re-emit snapshot
204
- // (debounced chunks may re-parse with more complete data)
245
+ // (debounced chunks may re-parse with more complete data). Refresh the
246
+ // dismissal grace: this may be a NEW prompt of the same kind.
205
247
  debug('SM', `option_prompt update: ${this.options.length} options, nav=${this.navigable}, cursor=${this.cursorIndex}`);
248
+ this.awaitingEnteredAt = Date.now();
206
249
  this.emitSnapshot();
207
250
  }
208
251
  else {
@@ -212,7 +255,13 @@ export class StateMachine extends EventEmitter {
212
255
  }
213
256
  case 'diff_prompt': {
214
257
  this.options = data?.options || [];
215
- this.transition(State.AWAITING_DIFF, 'diff_ui_detected', 'pty');
258
+ if (this.state === State.AWAITING_DIFF) {
259
+ this.awaitingEnteredAt = Date.now();
260
+ this.emitSnapshot();
261
+ }
262
+ else {
263
+ this.transition(State.AWAITING_DIFF, 'diff_ui_detected', 'pty');
264
+ }
216
265
  break;
217
266
  }
218
267
  case 'suggested_prompt': {
@@ -428,6 +477,46 @@ export class StateMachine extends EventEmitter {
428
477
  break;
429
478
  }
430
479
  }
480
+ /** Tool activity (PreToolUse/PostToolUse and Codex equivalents) is dismissal
481
+ * evidence for AWAITING_* / recovery evidence for IDLE, with three guards:
482
+ *
483
+ * - Disabled entirely on the daemon hub's global machine
484
+ * (`toolActivityRecovery: false`) — it multiplexes every observed
485
+ * session, so "some session used a tool" proves nothing about the prompt
486
+ * or turn this machine is displaying.
487
+ * - AWAITING_*: a short grace after the prompt was drawn (a parallel tool
488
+ * or a late hook curl can land while a fresh prompt is genuinely open),
489
+ * and a tool END only counts when no other tool is still in flight —
490
+ * while the gated tool's own PreToolUse is outstanding, a sibling
491
+ * finishing is not evidence the prompt was answered. A tool START from
492
+ * awaiting is always evidence (batch PreToolUse all fire before the
493
+ * prompt is drawn, so a new start means the turn resumed).
494
+ * - IDLE: only a tool START recovers a dropped user_prompt_submit. A
495
+ * straggler tool-END curl landing after Stop must not reopen a finished
496
+ * session (nothing would ever re-close it).
497
+ *
498
+ * A dismissal skipped by any guard is retried by the next hook — a
499
+ * keyboard-answered prompt always produces later tool activity or a stop. */
500
+ recoverProcessingFromToolActivity(kind) {
501
+ if (!this.toolActivityRecovery)
502
+ return;
503
+ const inAwaiting = this.state === State.AWAITING_PERMISSION ||
504
+ this.state === State.AWAITING_OPTION ||
505
+ this.state === State.AWAITING_DIFF;
506
+ if (this.state === State.IDLE && kind !== 'start')
507
+ return;
508
+ if (inAwaiting) {
509
+ if (Date.now() - this.awaitingEnteredAt < AWAITING_TOOL_DISMISS_GRACE_MS) {
510
+ debug('SM', 'tool_activity within awaiting grace — keeping prompt');
511
+ return;
512
+ }
513
+ if (kind === 'end' && this.inFlightTools > 0) {
514
+ debug('SM', `sibling tool ended with ${this.inFlightTools} still in flight — keeping prompt`);
515
+ return;
516
+ }
517
+ }
518
+ this.transition(State.PROCESSING, 'tool_activity', 'hook');
519
+ }
431
520
  transition(to, trigger, source) {
432
521
  const valid = transitions.some((t) => (t.from === this.state || t.from === '*') &&
433
522
  t.to === to &&
@@ -438,19 +527,34 @@ export class StateMachine extends EventEmitter {
438
527
  }
439
528
  const prev = this.state;
440
529
  this.state = to;
441
- // Reset cursor authority when leaving AWAITING states
442
- if (prev === State.AWAITING_OPTION ||
530
+ // Leaving AWAITING_*: the prompt on screen is gone, so the prompt fields
531
+ // must not outlive it — a stale answerable question on a device would
532
+ // inject keystrokes into a running turn. Cleared here (not per-caller) so
533
+ // every exit path agrees.
534
+ if ((prev === State.AWAITING_OPTION ||
443
535
  prev === State.AWAITING_PERMISSION ||
444
- prev === State.AWAITING_DIFF) {
536
+ prev === State.AWAITING_DIFF) &&
537
+ to !== prev) {
538
+ this.options = [];
539
+ this.question = null;
540
+ this.navigable = false;
541
+ this.cursorIndex = 0;
445
542
  this.cursorAuthority = 'pty';
446
543
  }
544
+ if (to !== prev &&
545
+ (to === State.AWAITING_OPTION ||
546
+ to === State.AWAITING_PERMISSION ||
547
+ to === State.AWAITING_DIFF)) {
548
+ this.awaitingEnteredAt = Date.now();
549
+ }
447
550
  // Manage stuck-state timer. PROCESSING recovers after STUCK_TIMEOUT_MS
448
551
  // (Claude seems hung). AWAITING_* get NO wall-clock backstop: an unanswered
449
552
  // permission/option/diff prompt is a genuine, indefinitely-valid wait — the
450
553
  // user may be away for hours. A blind timer can't tell "away" from "parser
451
554
  // missed the recovery", so it wrongly forced a real prompt to IDLE and made
452
555
  // the session's creature vanish from the dashboard. Awaiting only leaves via
453
- // a real signal (spinner_start / idle_detected / user response / stop), and
556
+ // a real signal (hook tool_activity / stop / user_prompt_submit, parser
557
+ // spinner_start / idle_detected where still emitted, or a user response);
454
558
  // a truly-dead session is reaped by liveness (PID death / /health grace),
455
559
  // not by this timer.
456
560
  this.resetStuckTimer();
@@ -1 +1 @@
1
- {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../src/state-machine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../src/state-machine.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type TimelineEntry } from '@agentdeck/shared';
1
+ import { type SubagentSummary, type TimelineEntry } from '@agentdeck/shared';
2
2
  export interface SubagentTimelineHook {
3
3
  eventName: string;
4
4
  payload: Record<string, unknown>;
@@ -12,22 +12,53 @@ export interface SubagentTimelineResult {
12
12
  * parent session's state, approval, steering, or APME pipelines.
13
13
  */
14
14
  childOnly: boolean;
15
+ /**
16
+ * The parent session whose child census changed, if it did. The caller
17
+ * rebroadcasts `sessions_list` for it — a child starting or stopping is the
18
+ * only signal that a parent's `subagents` block moved, and nothing else in
19
+ * the hook path would notice.
20
+ */
21
+ censusChangedFor?: string;
15
22
  }
16
- type TimelineEmitter = (entry: TimelineEntry) => void;
23
+ type TimelineEmitter = (entry: TimelineEntry, upsert?: boolean) => void;
17
24
  export declare function isSubagentOnlyHook(eventName: string, payload: Record<string, unknown>): boolean;
18
25
  /**
19
- * Read-only lifecycle reducer for Claude Code/Codex child agents.
26
+ * Lifecycle reducer for Claude Code/Codex child agents, and the source of
27
+ * truth for the parent's `subagents` census.
28
+ *
29
+ * Two outputs, deliberately separate:
20
30
  *
21
- * It intentionally emits only existing Timeline row types. This keeps old
22
- * macOS/iOS/Android/Node/ESP32 clients compatible and prevents child activity
23
- * from appearing as a controllable SessionInfo entry.
31
+ * - **timeline rows**, which stay within the existing entry types so older
32
+ * macOS/iOS/Android/Node/ESP32 clients keep rendering them; and
33
+ * - **`summary()`**, the live count the daemon stamps onto `sessions_list`.
34
+ *
35
+ * The census is kept HERE rather than derived from the rows it emits, because
36
+ * the rows are lossy on purpose — dedup folds a burst into one entry and the
37
+ * 200-cap sheds tool rows first. A census read back out of them counts zero in
38
+ * precisely the fan-out it exists to describe.
24
39
  */
25
40
  export declare class SubagentTimelineTracker {
26
41
  private readonly emit;
27
42
  private readonly now;
28
- private readonly active;
43
+ private readonly sessions;
44
+ private burstSeq;
29
45
  constructor(emit: TimelineEmitter, now?: () => number);
30
46
  handle(hook: SubagentTimelineHook): SubagentTimelineResult;
47
+ /**
48
+ * The parent's live census, or `null` when this session has never had a
49
+ * child. Never fold "no children ever" into `active: 0` here — the caller
50
+ * omits the wire field for the former and emits an explicit zero for the
51
+ * latter, which is what stops a drained fan-out from latching on clients
52
+ * that merge retain-on-absent.
53
+ */
54
+ summary(sessionId: string): SubagentSummary | null;
55
+ /** Every session with a census, keyed as the tracker saw it (bare uuid). */
56
+ summaries(): Map<string, SubagentSummary>;
57
+ private burstRaw;
58
+ private censusFor;
59
+ /** Expire children whose stop never arrived, so a lost hook cannot pin a
60
+ * parent at "running" forever. The census row itself survives: a session
61
+ * that once had children keeps reporting an explicit zero. */
31
62
  private sweep;
32
63
  }
33
64
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-timeline.d.ts","sourceRoot":"","sources":["../src/subagent-timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAsCtD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAYT;AA8BD;;;;;;GAMG;AACH,qBAAa,uBAAuB;IAIhC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAGzC,IAAI,EAAE,eAAe,EACrB,GAAG,GAAE,MAAM,MAAiB;IAG/C,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,sBAAsB;IA0E1D,OAAO,CAAC,KAAK;CAMd"}
1
+ {"version":3,"file":"subagent-timeline.d.ts","sourceRoot":"","sources":["../src/subagent-timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAmExE,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAYT;AAiDD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,uBAAuB;IAKhC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAK;gBAGF,IAAI,EAAE,eAAe,EACrB,GAAG,GAAE,MAAM,MAAiB;IAG/C,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,sBAAsB;IA2G1D;;;;;;OAMG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAYlD,4EAA4E;IAC5E,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;IAUzC,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,SAAS;IAiBjB;;mEAE+D;IAC/D,OAAO,CAAC,KAAK;CAad"}
@@ -1,5 +1,16 @@
1
- import { extractTopicHintWithKind, promptSnippetFallback, stripUnsafeText, } from '@agentdeck/shared';
1
+ import { extractTopicHintWithKind, formatDurationSec, promptSnippetFallback, stripUnsafeText, } from '@agentdeck/shared';
2
2
  const ACTIVE_TTL_MS = 6 * 60 * 60 * 1000;
3
+ /**
4
+ * How long a dispatch stays "the same fan-out" for row-folding purposes.
5
+ *
6
+ * One row per child would be honest and unreadable: a 200-entry buffer shared
7
+ * by every session cannot absorb 8 starts + 8 stops per wave without evicting
8
+ * the turns they belong to. So starts fold into a single upserted row carrying
9
+ * the count (the `task_start` one-row-per-task pattern), while stops stay
10
+ * individual — a completion carries a summary and a duration, which is the part
11
+ * a reader actually reads.
12
+ */
13
+ const BURST_WINDOW_MS = 10_000;
3
14
  function nonEmptyString(value) {
4
15
  if (typeof value !== 'string')
5
16
  return null;
@@ -44,6 +55,21 @@ function agentLabel(payload) {
44
55
  ?? 'Subagent';
45
56
  return cap(raw.replace(/^general-purpose$/i, 'General'), 28);
46
57
  }
58
+ /**
59
+ * A short, stable handle for one child.
60
+ *
61
+ * Twelve children of one workflow all report `agent_type: "workflow-subagent"`,
62
+ * so the type alone names none of them — every row read as the same row, and a
63
+ * reader had no way to tell "one of twelve finished" from "the work finished".
64
+ * The suffix is the child's own `agent_id`, which is the only thing that
65
+ * differs.
66
+ */
67
+ function childHandle(label, agentId) {
68
+ if (!agentId)
69
+ return label;
70
+ const short = agentId.replace(/[^A-Za-z0-9]/g, '').slice(-4).toLowerCase();
71
+ return short ? `${label}#${short}` : label;
72
+ }
47
73
  function completionSummary(payload) {
48
74
  const response = nonEmptyString(payload.last_assistant_message)
49
75
  ?? nonEmptyString(payload.task_subject)
@@ -60,19 +86,32 @@ function completionSummary(payload) {
60
86
  if (fallback)
61
87
  return { text: fallback, summaryKind: 'none' };
62
88
  }
63
- return { text: 'Completed', summaryKind: 'none' };
89
+ // NOT "Completed". That string is what a child that reported nothing used to
90
+ // look like, and next to a session whose other eleven children were still
91
+ // running it read as "the work is done" — the single most misleading row on
92
+ // the strip. Say what actually happened: it ended, and it said nothing.
93
+ return { text: 'ended · no summary', summaryKind: 'none' };
64
94
  }
65
95
  /**
66
- * Read-only lifecycle reducer for Claude Code/Codex child agents.
96
+ * Lifecycle reducer for Claude Code/Codex child agents, and the source of
97
+ * truth for the parent's `subagents` census.
98
+ *
99
+ * Two outputs, deliberately separate:
100
+ *
101
+ * - **timeline rows**, which stay within the existing entry types so older
102
+ * macOS/iOS/Android/Node/ESP32 clients keep rendering them; and
103
+ * - **`summary()`**, the live count the daemon stamps onto `sessions_list`.
67
104
  *
68
- * It intentionally emits only existing Timeline row types. This keeps old
69
- * macOS/iOS/Android/Node/ESP32 clients compatible and prevents child activity
70
- * from appearing as a controllable SessionInfo entry.
105
+ * The census is kept HERE rather than derived from the rows it emits, because
106
+ * the rows are lossy on purpose — dedup folds a burst into one entry and the
107
+ * 200-cap sheds tool rows first. A census read back out of them counts zero in
108
+ * precisely the fan-out it exists to describe.
71
109
  */
72
110
  export class SubagentTimelineTracker {
73
111
  emit;
74
112
  now;
75
- active = new Map();
113
+ sessions = new Map();
114
+ burstSeq = 0;
76
115
  constructor(emit, now = Date.now) {
77
116
  this.emit = emit;
78
117
  this.now = now;
@@ -84,43 +123,72 @@ export class SubagentTimelineTracker {
84
123
  this.sweep();
85
124
  if (event === 'subagent_start') {
86
125
  const id = agentId ?? nonEmptyString(hook.payload.task_id) ?? `anonymous:${this.now()}`;
87
- const key = `${hook.sessionId}:${id}`;
88
126
  const startedAt = this.now();
89
127
  const label = agentLabel(hook.payload);
90
- this.active.set(key, { startedAt, label });
128
+ const census = this.censusFor(hook.sessionId);
129
+ // Open a burst, or join the one still open.
130
+ if (census.burstId == null || startedAt - census.burstStartedAt > BURST_WINDOW_MS) {
131
+ census.burstId = `burst:${hook.sessionId}:${++this.burstSeq}`;
132
+ census.burstStartedAt = startedAt;
133
+ census.burstCount = 0;
134
+ census.burstLabels = [];
135
+ }
136
+ census.burstCount += 1;
137
+ if (!census.burstLabels.includes(label))
138
+ census.burstLabels.push(label);
139
+ census.active.set(id, { startedAt, label, burstId: census.burstId });
140
+ census.peak = Math.max(census.peak, census.active.size);
91
141
  this.emit({
92
- ts: startedAt,
142
+ // Anchor the row at the burst's first child so a growing fan-out
143
+ // updates in place instead of walking down the strip.
144
+ ts: census.burstStartedAt,
93
145
  type: 'tool_exec',
94
- raw: `Subagent ${label} · Started`,
146
+ raw: this.burstRaw(census),
95
147
  sessionId: hook.sessionId,
96
148
  agentType: hook.agentType,
97
149
  projectName: hook.projectName,
98
- startedAt,
150
+ startedAt: census.burstStartedAt,
151
+ subagentId: census.burstId,
99
152
  summaryKind: 'progress',
100
- });
101
- return { childOnly: true };
153
+ }, true);
154
+ return { childOnly: true, censusChangedFor: hook.sessionId };
102
155
  }
103
156
  if (event === 'subagent_stop') {
104
157
  const id = agentId ?? nonEmptyString(hook.payload.task_id) ?? '';
105
- const key = `${hook.sessionId}:${id}`;
106
- const active = this.active.get(key);
158
+ const census = this.censusFor(hook.sessionId);
159
+ const active = census.active.get(id);
107
160
  if (active)
108
- this.active.delete(key);
161
+ census.active.delete(id);
109
162
  const endedAt = this.now();
110
163
  const label = active?.label ?? agentLabel(hook.payload);
111
164
  const summary = completionSummary(hook.payload);
165
+ const elapsedSec = active ? Math.round((endedAt - active.startedAt) / 1000) : null;
166
+ census.completed += 1;
167
+ census.lastCompletedAt = endedAt;
168
+ // A wave that has fully drained resets the wave-scoped counters, so the
169
+ // next fan-out reports its own width rather than a running total.
170
+ if (census.active.size === 0) {
171
+ census.burstId = null;
172
+ census.burstCount = 0;
173
+ census.burstLabels = [];
174
+ }
175
+ const handle = childHandle(label, agentId);
176
+ const duration = elapsedSec != null && elapsedSec > 0
177
+ ? ` · ${formatDurationSec(elapsedSec)}`
178
+ : '';
112
179
  this.emit({
113
180
  ts: endedAt,
114
181
  type: 'tool_resolved',
115
- raw: `Subagent ${label} · ${summary.text}`,
182
+ raw: `Subagent ${handle}${duration} · ${summary.text}`,
116
183
  sessionId: hook.sessionId,
117
184
  agentType: hook.agentType,
118
185
  projectName: hook.projectName,
119
- startedAt: active?.startedAt,
186
+ ...(active ? { startedAt: active.startedAt } : {}),
120
187
  endedAt,
188
+ subagentId: `child:${hook.sessionId}:${id}`,
121
189
  summaryKind: summary.summaryKind,
122
190
  });
123
- return { childOnly: true };
191
+ return { childOnly: true, censusChangedFor: hook.sessionId };
124
192
  }
125
193
  if (event === 'task_completed') {
126
194
  const endedAt = this.now();
@@ -145,11 +213,74 @@ export class SubagentTimelineTracker {
145
213
  }
146
214
  return { childOnly: false };
147
215
  }
216
+ /**
217
+ * The parent's live census, or `null` when this session has never had a
218
+ * child. Never fold "no children ever" into `active: 0` here — the caller
219
+ * omits the wire field for the former and emits an explicit zero for the
220
+ * latter, which is what stops a drained fan-out from latching on clients
221
+ * that merge retain-on-absent.
222
+ */
223
+ summary(sessionId) {
224
+ this.sweep();
225
+ const census = this.sessions.get(sessionId);
226
+ if (!census)
227
+ return null;
228
+ return {
229
+ active: census.active.size,
230
+ peak: census.peak,
231
+ completed: census.completed,
232
+ ...(census.lastCompletedAt == null ? {} : { lastCompletedAt: census.lastCompletedAt }),
233
+ };
234
+ }
235
+ /** Every session with a census, keyed as the tracker saw it (bare uuid). */
236
+ summaries() {
237
+ this.sweep();
238
+ const out = new Map();
239
+ for (const sessionId of this.sessions.keys()) {
240
+ const summary = this.summary(sessionId);
241
+ if (summary)
242
+ out.set(sessionId, summary);
243
+ }
244
+ return out;
245
+ }
246
+ burstRaw(census) {
247
+ const names = census.burstLabels.slice(0, 2).join(', ')
248
+ + (census.burstLabels.length > 2 ? ` +${census.burstLabels.length - 2}` : '');
249
+ return census.burstCount > 1
250
+ ? `Subagent ×${census.burstCount} dispatched · ${names}`
251
+ : `Subagent ${names} · dispatched`;
252
+ }
253
+ censusFor(sessionId) {
254
+ let census = this.sessions.get(sessionId);
255
+ if (!census) {
256
+ census = {
257
+ active: new Map(),
258
+ peak: 0,
259
+ completed: 0,
260
+ burstId: null,
261
+ burstStartedAt: 0,
262
+ burstCount: 0,
263
+ burstLabels: [],
264
+ };
265
+ this.sessions.set(sessionId, census);
266
+ }
267
+ return census;
268
+ }
269
+ /** Expire children whose stop never arrived, so a lost hook cannot pin a
270
+ * parent at "running" forever. The census row itself survives: a session
271
+ * that once had children keeps reporting an explicit zero. */
148
272
  sweep() {
149
273
  const cutoff = this.now() - ACTIVE_TTL_MS;
150
- for (const [key, value] of this.active) {
151
- if (value.startedAt < cutoff)
152
- this.active.delete(key);
274
+ for (const census of this.sessions.values()) {
275
+ for (const [key, value] of census.active) {
276
+ if (value.startedAt < cutoff)
277
+ census.active.delete(key);
278
+ }
279
+ if (census.active.size === 0 && census.burstId != null) {
280
+ census.burstId = null;
281
+ census.burstCount = 0;
282
+ census.burstLabels = [];
283
+ }
153
284
  }
154
285
  }
155
286
  }