@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.
- package/dist/adapters/openclaw.d.ts +55 -1
- package/dist/adapters/openclaw.d.ts.map +1 -1
- package/dist/adapters/openclaw.js +278 -45
- package/dist/adapters/openclaw.js.map +1 -1
- package/dist/adb-reverse.d.ts +26 -3
- package/dist/adb-reverse.d.ts.map +1 -1
- package/dist/adb-reverse.js +26 -5
- package/dist/adb-reverse.js.map +1 -1
- package/dist/apme/adapters/codex-turn-manager.js +6 -1
- package/dist/apme/adapters/codex-turn-manager.js.map +1 -1
- package/dist/apme/adapters/openclaw-hook.d.ts +45 -1
- package/dist/apme/adapters/openclaw-hook.d.ts.map +1 -1
- package/dist/apme/adapters/openclaw-hook.js +84 -4
- package/dist/apme/adapters/openclaw-hook.js.map +1 -1
- package/dist/apme/claude-transcript-reader.d.ts +76 -0
- package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
- package/dist/apme/claude-transcript-reader.js +152 -1
- package/dist/apme/claude-transcript-reader.js.map +1 -1
- package/dist/apme/collector.d.ts +63 -5
- package/dist/apme/collector.d.ts.map +1 -1
- package/dist/apme/collector.js +147 -10
- package/dist/apme/collector.js.map +1 -1
- package/dist/apme/store.d.ts +23 -1
- package/dist/apme/store.d.ts.map +1 -1
- package/dist/apme/store.js +81 -2
- package/dist/apme/store.js.map +1 -1
- package/dist/apme/types.d.ts +1 -1
- package/dist/apme/types.d.ts.map +1 -1
- package/dist/apme/types.js.map +1 -1
- package/dist/auth.d.ts +37 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +23 -0
- package/dist/auth.js.map +1 -1
- package/dist/bridge-core.d.ts.map +1 -1
- package/dist/bridge-core.js +6 -1
- package/dist/bridge-core.js.map +1 -1
- package/dist/claude-interrupt-marker.d.ts +31 -0
- package/dist/claude-interrupt-marker.d.ts.map +1 -0
- package/dist/claude-interrupt-marker.js +58 -0
- package/dist/claude-interrupt-marker.js.map +1 -0
- package/dist/claude-turn-watchdog.d.ts +93 -0
- package/dist/claude-turn-watchdog.d.ts.map +1 -0
- package/dist/claude-turn-watchdog.js +173 -0
- package/dist/claude-turn-watchdog.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +399 -115
- package/dist/cli.js.map +1 -1
- package/dist/codex-hook-silence.d.ts +52 -0
- package/dist/codex-hook-silence.d.ts.map +1 -0
- package/dist/codex-hook-silence.js +80 -0
- package/dist/codex-hook-silence.js.map +1 -0
- package/dist/daemon-port.d.ts +90 -0
- package/dist/daemon-port.d.ts.map +1 -0
- package/dist/daemon-port.js +119 -0
- package/dist/daemon-port.js.map +1 -0
- package/dist/daemon-server.d.ts +14 -1
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +297 -69
- package/dist/daemon-server.js.map +1 -1
- package/dist/daemon-settings.d.ts +46 -0
- package/dist/daemon-settings.d.ts.map +1 -0
- package/dist/daemon-settings.js +85 -0
- package/dist/daemon-settings.js.map +1 -0
- package/dist/daemon-takeover.d.ts +75 -0
- package/dist/daemon-takeover.d.ts.map +1 -0
- package/dist/daemon-takeover.js +137 -0
- package/dist/daemon-takeover.js.map +1 -0
- package/dist/daemon.js +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -12
- package/dist/index.js.map +1 -1
- package/dist/kiro-diagnostics.d.ts +90 -0
- package/dist/kiro-diagnostics.d.ts.map +1 -0
- package/dist/kiro-diagnostics.js +278 -0
- package/dist/kiro-diagnostics.js.map +1 -0
- package/dist/kiro-session.d.ts +113 -0
- package/dist/kiro-session.d.ts.map +1 -0
- package/dist/kiro-session.js +688 -0
- package/dist/kiro-session.js.map +1 -0
- package/dist/kiro-timeline-feed.d.ts +45 -0
- package/dist/kiro-timeline-feed.d.ts.map +1 -0
- package/dist/kiro-timeline-feed.js +116 -0
- package/dist/kiro-timeline-feed.js.map +1 -0
- package/dist/kiro-transcript-timeline.d.ts +57 -0
- package/dist/kiro-transcript-timeline.d.ts.map +1 -0
- package/dist/kiro-transcript-timeline.js +183 -0
- package/dist/kiro-transcript-timeline.js.map +1 -0
- package/dist/linux-service.d.ts +2 -1
- package/dist/linux-service.d.ts.map +1 -1
- package/dist/linux-service.js +8 -3
- package/dist/linux-service.js.map +1 -1
- package/dist/mdns-discover.d.ts +27 -0
- package/dist/mdns-discover.d.ts.map +1 -1
- package/dist/mdns-discover.js +60 -7
- package/dist/mdns-discover.js.map +1 -1
- package/dist/mdns.d.ts.map +1 -1
- package/dist/mdns.js +16 -3
- package/dist/mdns.js.map +1 -1
- package/dist/modules/adb-module.d.ts.map +1 -1
- package/dist/modules/adb-module.js +5 -2
- package/dist/modules/adb-module.js.map +1 -1
- package/dist/modules/index.d.ts +2 -1
- package/dist/modules/index.d.ts.map +1 -1
- package/dist/modules/index.js +1 -0
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/types.d.ts +34 -9
- package/dist/modules/types.d.ts.map +1 -1
- package/dist/modules/types.js +34 -1
- package/dist/modules/types.js.map +1 -1
- package/dist/network-posture.d.ts +67 -0
- package/dist/network-posture.d.ts.map +1 -0
- package/dist/network-posture.js +100 -0
- package/dist/network-posture.js.map +1 -0
- package/dist/observed-steering.d.ts +14 -0
- package/dist/observed-steering.d.ts.map +1 -1
- package/dist/observed-steering.js +18 -0
- package/dist/observed-steering.js.map +1 -1
- package/dist/observed-turn-watchdogs.d.ts +84 -0
- package/dist/observed-turn-watchdogs.d.ts.map +1 -0
- package/dist/observed-turn-watchdogs.js +134 -0
- package/dist/observed-turn-watchdogs.js.map +1 -0
- package/dist/openclaw-session.d.ts +10 -0
- package/dist/openclaw-session.d.ts.map +1 -1
- package/dist/openclaw-session.js +12 -0
- package/dist/openclaw-session.js.map +1 -1
- package/dist/passive-observer.d.ts +19 -0
- package/dist/passive-observer.d.ts.map +1 -1
- package/dist/passive-observer.js +208 -24
- package/dist/passive-observer.js.map +1 -1
- package/dist/pixoo/micro-glyphs.d.ts +1 -1
- package/dist/pixoo/micro-glyphs.d.ts.map +1 -1
- package/dist/pixoo/micro-glyphs.js +2 -0
- package/dist/pixoo/micro-glyphs.js.map +1 -1
- package/dist/pixoo/official-dot-glyphs.generated.d.ts +1 -1
- package/dist/pixoo/official-dot-glyphs.generated.d.ts.map +1 -1
- package/dist/pixoo/official-dot-glyphs.generated.js +47 -0
- package/dist/pixoo/official-dot-glyphs.generated.js.map +1 -1
- package/dist/pixoo/pixoo-discover.d.ts +8 -1
- package/dist/pixoo/pixoo-discover.d.ts.map +1 -1
- package/dist/pixoo/pixoo-discover.js +15 -8
- package/dist/pixoo/pixoo-discover.js.map +1 -1
- package/dist/pixoo/pixoo-renderer.d.ts +4 -2
- package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
- package/dist/pixoo/pixoo-renderer.js +105 -36
- package/dist/pixoo/pixoo-renderer.js.map +1 -1
- package/dist/pixoo/pixoo-settings.d.ts +19 -2
- package/dist/pixoo/pixoo-settings.d.ts.map +1 -1
- package/dist/pixoo/pixoo-settings.js +22 -4
- package/dist/pixoo/pixoo-settings.js.map +1 -1
- package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
- package/dist/pixoo/pixoo-sprites.js +2 -0
- package/dist/pixoo/pixoo-sprites.js.map +1 -1
- package/dist/session-aggregator.d.ts +9 -1
- package/dist/session-aggregator.d.ts.map +1 -1
- package/dist/session-aggregator.js +1 -1
- package/dist/session-aggregator.js.map +1 -1
- package/dist/session-registry.d.ts +71 -3
- package/dist/session-registry.d.ts.map +1 -1
- package/dist/session-registry.js +126 -19
- package/dist/session-registry.js.map +1 -1
- package/dist/state-machine.d.ts +38 -1
- package/dist/state-machine.d.ts.map +1 -1
- package/dist/state-machine.js +112 -8
- package/dist/state-machine.js.map +1 -1
- package/dist/subagent-timeline.d.ts +38 -7
- package/dist/subagent-timeline.d.ts.map +1 -1
- package/dist/subagent-timeline.js +154 -23
- package/dist/subagent-timeline.js.map +1 -1
- package/dist/timeline-store.d.ts.map +1 -1
- package/dist/timeline-store.js +26 -1
- package/dist/timeline-store.js.map +1 -1
- package/dist/tui/renderer.d.ts.map +1 -1
- package/dist/tui/renderer.js +13 -1
- package/dist/tui/renderer.js.map +1 -1
- package/dist/tui/terrarium.d.ts.map +1 -1
- package/dist/tui/terrarium.js +10 -5
- package/dist/tui/terrarium.js.map +1 -1
- package/dist/utils/redact-secrets.d.ts +3 -0
- package/dist/utils/redact-secrets.d.ts.map +1 -0
- package/dist/utils/redact-secrets.js +29 -0
- package/dist/utils/redact-secrets.js.map +1 -0
- package/dist/version-check.d.ts +8 -0
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +27 -0
- package/dist/version-check.js.map +1 -1
- package/dist/windows-service.d.ts +2 -1
- package/dist/windows-service.d.ts.map +1 -1
- package/dist/windows-service.js +6 -3
- package/dist/windows-service.js.map +1 -1
- package/package.json +3 -3
package/dist/state-machine.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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.
|
|
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
|
-
//
|
|
442
|
-
|
|
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 (
|
|
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
|
-
*
|
|
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
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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:
|
|
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
|
|
106
|
-
const active =
|
|
158
|
+
const census = this.censusFor(hook.sessionId);
|
|
159
|
+
const active = census.active.get(id);
|
|
107
160
|
if (active)
|
|
108
|
-
|
|
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 ${
|
|
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
|
|
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
|
|
151
|
-
|
|
152
|
-
|
|
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
|
}
|