tailii-host 0.3.0 → 0.5.0

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 (75) hide show
  1. package/README.md +1 -0
  2. package/dist/approval/hook.js +10 -0
  3. package/dist/approval/hook.js.map +1 -1
  4. package/dist/backend/herdr.d.ts +48 -4
  5. package/dist/backend/herdr.js +130 -15
  6. package/dist/backend/herdr.js.map +1 -1
  7. package/dist/backend/tmux.d.ts +1 -1
  8. package/dist/backend/tmux.js +11 -2
  9. package/dist/backend/tmux.js.map +1 -1
  10. package/dist/chat/subagentTailer.d.ts +41 -0
  11. package/dist/chat/subagentTailer.js +306 -26
  12. package/dist/chat/subagentTailer.js.map +1 -1
  13. package/dist/chat/transcriptTailer.d.ts +9 -0
  14. package/dist/chat/transcriptTailer.js +55 -1
  15. package/dist/chat/transcriptTailer.js.map +1 -1
  16. package/dist/cli.js +10 -1
  17. package/dist/cli.js.map +1 -1
  18. package/dist/codex/codexAppServer.js +20 -0
  19. package/dist/codex/codexAppServer.js.map +1 -1
  20. package/dist/commands/doctor.d.ts +2 -6
  21. package/dist/commands/doctor.js +2 -29
  22. package/dist/commands/doctor.js.map +1 -1
  23. package/dist/commands/launch.d.ts +2 -0
  24. package/dist/commands/launch.js +5 -0
  25. package/dist/commands/launch.js.map +1 -1
  26. package/dist/commands/selfUpdate.d.ts +71 -0
  27. package/dist/commands/selfUpdate.js +536 -0
  28. package/dist/commands/selfUpdate.js.map +1 -0
  29. package/dist/engine/engine.js +41 -22
  30. package/dist/engine/engine.js.map +1 -1
  31. package/dist/engine/handlers/index.js +2 -0
  32. package/dist/engine/handlers/index.js.map +1 -1
  33. package/dist/engine/handlers/selfUpdate.d.ts +2 -0
  34. package/dist/engine/handlers/selfUpdate.js +52 -0
  35. package/dist/engine/handlers/selfUpdate.js.map +1 -0
  36. package/dist/engine/handlers/session.js +5 -3
  37. package/dist/engine/handlers/session.js.map +1 -1
  38. package/dist/engine/handlers/workspace.js +38 -1
  39. package/dist/engine/handlers/workspace.js.map +1 -1
  40. package/dist/hub/effortDialog.d.ts +20 -0
  41. package/dist/hub/effortDialog.js +40 -0
  42. package/dist/hub/effortDialog.js.map +1 -0
  43. package/dist/hub/hubDaemon.js +12 -1
  44. package/dist/hub/hubDaemon.js.map +1 -1
  45. package/dist/hub/questionInjection.js +2 -1
  46. package/dist/hub/questionInjection.js.map +1 -1
  47. package/dist/hub/reaper.d.ts +5 -0
  48. package/dist/hub/reaper.js +25 -7
  49. package/dist/hub/reaper.js.map +1 -1
  50. package/dist/hub/sessionHub.js +83 -11
  51. package/dist/hub/sessionHub.js.map +1 -1
  52. package/dist/protocol/decode.js +54 -1
  53. package/dist/protocol/decode.js.map +1 -1
  54. package/dist/protocol/encode.js +2 -0
  55. package/dist/protocol/encode.js.map +1 -1
  56. package/dist/protocol/messages.d.ts +60 -1
  57. package/dist/services/fileService.d.ts +19 -1
  58. package/dist/services/fileService.js +126 -0
  59. package/dist/services/fileService.js.map +1 -1
  60. package/dist/services/keychainMirror.d.ts +9 -0
  61. package/dist/services/keychainMirror.js +64 -0
  62. package/dist/services/keychainMirror.js.map +1 -0
  63. package/dist/services/officialApps.d.ts +3 -0
  64. package/dist/services/officialApps.js +28 -7
  65. package/dist/services/officialApps.js.map +1 -1
  66. package/dist/services/planUsageFetcher.d.ts +18 -2
  67. package/dist/services/planUsageFetcher.js +75 -16
  68. package/dist/services/planUsageFetcher.js.map +1 -1
  69. package/dist/shared/cliVersions.d.ts +14 -0
  70. package/dist/shared/cliVersions.js +38 -0
  71. package/dist/shared/cliVersions.js.map +1 -0
  72. package/dist/shared/lineWriter.d.ts +7 -0
  73. package/dist/shared/lineWriter.js +26 -0
  74. package/dist/shared/lineWriter.js.map +1 -1
  75. package/package.json +3 -3
@@ -118,10 +118,19 @@ function splitInputPrompt(bodyLines) {
118
118
  const text = body.join("\n").trim();
119
119
  return { prompt: sigil ?? "", text: isInputPlaceholder(text) ? "" : text };
120
120
  }
121
+ /**
122
+ * 発行するのは ls / capture-pane / send-keys / kill-session など即応するコマンドだけで、
123
+ * 正当に長引くものは無い。無期限に待つと、これを直列 await する engine の read loop
124
+ * (以後の全メッセージを読まなくなる)と hub の tick ループが同時に止まるため、
125
+ * 上限を切って「失敗」として返す(`gitService` の execFile と同じ規約)。
126
+ */
127
+ const TMUX_TIMEOUT_MS = 15_000;
121
128
  /** 実 tmux を絶対パスで起動する既定ランナー。tmux 非0 exit は throw せず結果で表現する。 */
122
- export function processTmuxCommandRunner(tmuxPath = DEFAULT_TMUX_PATH) {
129
+ export function processTmuxCommandRunner(tmuxPath = DEFAULT_TMUX_PATH, timeoutMs = TMUX_TIMEOUT_MS) {
123
130
  return (args) => new Promise((resolve, reject) => {
124
- execFile(tmuxPath, args, { maxBuffer: 16 * 1024 * 1024 }, (error, stdout, stderr) => {
131
+ execFile(tmuxPath, args, {
132
+ maxBuffer: 16 * 1024 * 1024, timeout: timeoutMs,
133
+ }, (error, stdout, stderr) => {
125
134
  if (error && typeof error.code === "string") {
126
135
  // 実行ファイル起動自体の失敗(ENOENT 等)のみ throw(Swift 版と同じ境界)。
127
136
  reject(error);
@@ -1 +1 @@
1
- {"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../src/backend/tmux.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../src/backend/tmux.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,28 @@ export interface SubagentTailerOptions {
8
8
  orphanGraceMs?: number;
9
9
  /** 孤児判定プローブの間隔(ms)。既定 30s。 */
10
10
  orphanProbeIntervalMs?: number;
11
+ /**
12
+ * エージェント孤児の settle に必要な「transcript 静止時間」(ms)。既定 120s。
13
+ * 大きな tool_use 入力のストリーミング中は transcript が無音になるため、
14
+ * コマンド側の猶予より長めに取る。
15
+ */
16
+ agentOrphanGraceMs?: number;
11
17
  /** output ファイルを開いているプロセスの有無(null=判定不能)。テスト差し替え用。 */
12
18
  probeOutputOpen?: (filePath: string) => Promise<boolean | null>;
19
+ /**
20
+ * セッション(claude プロセス)の生存判定。テスト・上位配線の差し替え用。
21
+ * true=生存確定 / false=死亡確定 / null=不明(生存扱い・安全側)。
22
+ * lastActivityMs はセッションの transcript 群が最後に更新された時刻(不明なら null)。
23
+ * 既定実装は defaultProbeSessionAlive を参照。
24
+ */
25
+ probeSessionAlive?: (sessionId: string, lastActivityMs: number | null) => Promise<boolean | null>;
26
+ /**
27
+ * 既定プローブが「argv 不一致 + transcript 静止」を死亡確定とみなす静止時間(ms)。
28
+ * 既定 6h。SendMessage 待機など「生きているが transcript が静かな」セッションを
29
+ * 誤って死亡扱いしないための余裕(実測の最長待機 ~3.8h より広い)。
30
+ * 誤判定しても transcript が伸びれば自動で running へ回復する。
31
+ */
32
+ sessionStaleMs?: number;
13
33
  }
14
34
  /** サブエージェント meta/jsonl と親 transcript の tool_result を監視する。 */
15
35
  export declare class SubagentTailer {
@@ -17,7 +37,10 @@ export declare class SubagentTailer {
17
37
  private readonly tailIndefinitely;
18
38
  private readonly orphanGraceMs;
19
39
  private readonly orphanProbeIntervalMs;
40
+ private readonly agentOrphanGraceMs;
20
41
  private readonly probeOutputOpen;
42
+ private readonly probeSessionAlive;
43
+ private readonly sessionStaleMs;
21
44
  private readonly jsonlPaths;
22
45
  private readonly outputPaths;
23
46
  constructor(options?: SubagentTailerOptions);
@@ -28,3 +51,21 @@ export declare class SubagentTailer {
28
51
  streamProjectDir(projectDir: string, preferredSessionId: string | null, newerThanMs?: number | null, signal?: AbortSignal): AsyncGenerator<ControlMessage, void, void>;
29
52
  streamSession(mainTranscript: string, signal?: AbortSignal): AsyncGenerator<ControlMessage, void, void>;
30
53
  }
54
+ /** プロセスプローブ用の execFile 差し替え口(テスト用)。 */
55
+ export type ProcessProbeExec = (cmd: string, args: string[], callback: (error: (Error & {
56
+ code?: unknown;
57
+ }) | null, stdout: string) => void) => void;
58
+ /**
59
+ * セッションの claude プロセス生存を判定する。
60
+ * 1) argv にセッション id を持つプロセスがいれば生存確定(Tailii が張る engine は
61
+ * `--session-id`/`--resume` で id を運ぶ)。
62
+ * 2) argv 不一致でも bare CLI(argv に id なし)の可能性が残るため、transcript が
63
+ * staleMs 以内に更新されていれば「不明」(生存扱い)。
64
+ * 3) argv 不一致 かつ transcript が staleMs 以上静止しているときだけ「死亡確定」。
65
+ * 生きているのに静かなだけのセッションを誤判定しても、transcript が伸びれば
66
+ * sweep マークは破棄され running へ回復する。
67
+ * プロセス名の照合(`lsof -c claude` 等)は使わない — macOS では CLI の comm が
68
+ * バージョン文字列(例 "2.1.226")になるなど環境・バージョンで壊れるため。
69
+ * プローブ不能(pgrep 不在・タイムアウト等)は常に「不明」= 生存扱いへ倒す。
70
+ */
71
+ export declare function defaultProbeSessionAlive(sessionId: string, lastActivityMs: number | null, staleMs: number, exec?: ProcessProbeExec): Promise<boolean | null>;
@@ -15,7 +15,10 @@ export class SubagentTailer {
15
15
  tailIndefinitely;
16
16
  orphanGraceMs;
17
17
  orphanProbeIntervalMs;
18
+ agentOrphanGraceMs;
18
19
  probeOutputOpen;
20
+ probeSessionAlive;
21
+ sessionStaleMs;
19
22
  jsonlPaths = new Map();
20
23
  outputPaths = new Map();
21
24
  constructor(options = {}) {
@@ -23,7 +26,11 @@ export class SubagentTailer {
23
26
  this.tailIndefinitely = options.tailIndefinitely ?? true;
24
27
  this.orphanGraceMs = options.orphanGraceMs ?? 60_000;
25
28
  this.orphanProbeIntervalMs = options.orphanProbeIntervalMs ?? 30_000;
29
+ this.agentOrphanGraceMs = options.agentOrphanGraceMs ?? 120_000;
26
30
  this.probeOutputOpen = options.probeOutputOpen ?? defaultProbeOutputOpen;
31
+ this.sessionStaleMs = options.sessionStaleMs ?? 6 * 60 * 60 * 1000;
32
+ this.probeSessionAlive = options.probeSessionAlive
33
+ ?? ((sessionId, lastActivityMs) => defaultProbeSessionAlive(sessionId, lastActivityMs, this.sessionStaleMs));
27
34
  }
28
35
  /** 現在 tail 中の nodeId から transcript 実体を引く。 */
29
36
  jsonlPath(nodeId) {
@@ -65,10 +72,25 @@ export class SubagentTailer {
65
72
  // 通知が握り潰された背景コマンドの孤児判定(taskId → 終了扱いにした ts)。
66
73
  const bgOrphanTsByTaskId = new Map();
67
74
  const bgFirstSeenMsByTaskId = new Map();
75
+ // 通知が配達されえない背景エージェントの孤児判定(nodeId → settle 扱いにした ts)。
76
+ const agentOrphanTsByNodeId = new Map();
77
+ // 死亡セッションの一括 sweep マーク。生存へ転じたら全破棄して回復できるよう、
78
+ // 通常の孤児 settle とは別に持つ。
79
+ const deadSweepByNodeId = new Map();
80
+ // セッション transcript 群の最終更新(生存プローブの補助情報)。
81
+ let lastActivityTsMs = null;
82
+ // セッション(claude プロセス)の生存。false のみが「死亡確定」。null は生存扱い(安全側)。
83
+ let sessionAlive = null;
84
+ let lastSessionProbeMs = 0;
68
85
  let lastOrphanProbeMs = 0;
69
86
  let aggregateDirty = true;
87
+ let lastMetaRefreshMs = 0;
70
88
  while (!signal?.aborted) {
71
- if (discoverMetaFiles(subagentsDir, tracked))
89
+ // meta の stat/再読込は毎 tick やると重い(ノード数×50ms)。1秒ごとに間引く。
90
+ const refreshMetas = Date.now() - lastMetaRefreshMs >= 1_000;
91
+ if (refreshMetas)
92
+ lastMetaRefreshMs = Date.now();
93
+ if (discoverMetaFiles(subagentsDir, tracked, refreshMetas))
72
94
  aggregateDirty = true;
73
95
  for (const node of tracked.values()) {
74
96
  if (node.jsonlPath !== null)
@@ -83,6 +105,7 @@ export class SubagentTailer {
83
105
  if (node !== null) {
84
106
  node.currentActivity = null;
85
107
  node.lastJsonlTimestampMs = null;
108
+ node.finalReportMarker = null;
86
109
  }
87
110
  }
88
111
  if (node !== null)
@@ -91,6 +114,9 @@ export class SubagentTailer {
91
114
  aggregateDirty = true;
92
115
  for (const line of read.lines) {
93
116
  const lineTs = timestampMs(line);
117
+ if (lineTs !== null && (lastActivityTsMs === null || lineTs > lastActivityTsMs)) {
118
+ lastActivityTsMs = lineTs;
119
+ }
94
120
  if (read.state.firstTimestampMs === null && lineTs !== null) {
95
121
  read.state.firstTimestampMs = lineTs;
96
122
  }
@@ -141,6 +167,9 @@ export class SubagentTailer {
141
167
  });
142
168
  }
143
169
  if (node !== null) {
170
+ const marker = finalReportMarker(line);
171
+ if (marker !== null)
172
+ node.finalReportMarker = marker;
144
173
  const activity = latestActivitySummary(line);
145
174
  if (activity !== null)
146
175
  node.currentActivity = activity;
@@ -171,34 +200,197 @@ export class SubagentTailer {
171
200
  }
172
201
  aggregateDirty = false;
173
202
  }
174
- for (const node of tracked.values()) {
175
- const result = resultByToolUseId.get(node.meta.toolUseId) ?? null;
176
- let status;
177
- let ts;
203
+ const ownerOf = (node) => {
204
+ // meta の直接リンクを優先(forked-skill の子は transcript 相関では解決できない)。
205
+ const pid = node.meta.parentAgentId;
206
+ if (pid !== null && tracked.has(pid))
207
+ return pid;
208
+ const correlated = node.meta.toolUseId === null
209
+ ? undefined
210
+ : ownerByToolUseId.get(node.meta.toolUseId);
211
+ // 深さ1は起動元が main(root)と確定できる(forked-skill 親もここに落ちる)。
212
+ return correlated ?? (node.meta.spawnDepth <= 1 ? "root" : undefined);
213
+ };
214
+ const resolveAgentStatus = (node) => {
215
+ const result = node.meta.toolUseId === null
216
+ ? null
217
+ : resultByToolUseId.get(node.meta.toolUseId) ?? null;
178
218
  if (result !== null && !result.asyncLaunch) {
179
219
  // 同期実行: 親 transcript の tool_result が終了信号。
180
- status = result.isError ? "error" : "completed";
181
- ts = result.ts ?? node.firstJsonlTimestampMs ?? mtimeMs(node.metaPath);
220
+ return {
221
+ status: result.isError ? "error" : "completed",
222
+ ts: result.ts ?? node.firstJsonlTimestampMs ?? mtimeMs(node.metaPath),
223
+ };
224
+ }
225
+ // バックグラウンド実行(または結果未着): task-notification が終了信号。
226
+ // 通知後に自分の transcript が伸びたら resume とみなし running へ戻す。
227
+ const notification = notificationByTaskId.get(node.nodeId) ?? null;
228
+ const resumedAfter = notification !== null && notification.ts !== null
229
+ && (node.lastJsonlTimestampMs ?? 0) > notification.ts;
230
+ if (notification !== null && !resumedAfter) {
231
+ return {
232
+ status: notification.status === "completed" ? "completed" : "error",
233
+ ts: notification.ts ?? node.lastJsonlTimestampMs ?? mtimeMs(node.metaPath),
234
+ };
235
+ }
236
+ // ユーザー停止済み(TaskStop 等)。通知は残らないため meta の刻印が終了信号。
237
+ if (node.meta.stoppedByUser) {
238
+ return { status: "completed", ts: node.lastJsonlTimestampMs ?? mtimeMs(node.metaPath) };
239
+ }
240
+ // 通知が配達されえず孤児 settle 済みなら completed。settle 後に transcript が
241
+ // 伸びたら resume とみなしマークを破棄して running へ戻す(孤児検知で再評価される)。
242
+ const orphanTs = agentOrphanTsByNodeId.get(node.nodeId);
243
+ if (orphanTs !== undefined) {
244
+ if ((node.lastJsonlTimestampMs ?? 0) > orphanTs) {
245
+ agentOrphanTsByNodeId.delete(node.nodeId);
246
+ }
247
+ else {
248
+ return { status: "completed", ts: orphanTs };
249
+ }
182
250
  }
183
- else {
184
- // バックグラウンド実行(または結果未着): task-notification が終了信号。
185
- // 通知後に自分の transcript が伸びたら resume とみなし running へ戻す。
186
- const notification = notificationByTaskId.get(node.nodeId) ?? null;
187
- const resumedAfter = notification !== null && notification.ts !== null
188
- && (node.lastJsonlTimestampMs ?? 0) > notification.ts;
189
- if (notification !== null && !resumedAfter) {
190
- status = notification.status === "completed" ? "completed" : "error";
191
- ts = notification.ts ?? node.lastJsonlTimestampMs ?? mtimeMs(node.metaPath);
251
+ // 死亡セッションの sweep マーク。transcript が伸びたら破棄(誤判定からの回復)。
252
+ const sweep = deadSweepByNodeId.get(node.nodeId);
253
+ if (sweep !== undefined) {
254
+ if ((node.lastJsonlTimestampMs ?? 0) > sweep.ts) {
255
+ deadSweepByNodeId.delete(node.nodeId);
192
256
  }
193
257
  else {
194
- status = "running";
195
- ts = node.firstJsonlTimestampMs ?? mtimeMs(node.metaPath);
258
+ return { status: sweep.status, ts: sweep.ts };
259
+ }
260
+ }
261
+ return { status: "running", ts: node.firstJsonlTimestampMs ?? mtimeMs(node.metaPath) };
262
+ };
263
+ const nowMs = Date.now();
264
+ if (nowMs - lastSessionProbeMs >= this.orphanProbeIntervalMs) {
265
+ lastSessionProbeMs = nowMs;
266
+ sessionAlive = await this.probeSessionAlive(sessionId, lastActivityTsMs);
267
+ }
268
+ // 孤児判定(エージェント): 背景エージェントの task-notification は「起動元の transcript に、
269
+ // 起動元が次に動くとき」に投函されるため、起動元が子より先に終端した・セッションが死んだ等で
270
+ // 配達が途絶えると二度と届かない。判定はセッション生存で二分する:
271
+ //
272
+ // [死亡確定 (sessionAlive === false)] このセッションの作業は何も動いていない。
273
+ // 静止時間が猶予を超えた running ノードを最終レポートの有無を問わず一括 settle する
274
+ // (中断で tool_use のまま止まった木・同期起動の孤児もここで解消する)。
275
+ //
276
+ // [生存または不明] root(main)起動のノードは settle しない — 生きている main への
277
+ // 通知配達は途絶えないし、SendMessage 待機中の生存エージェントを「完了」に
278
+ // してはならない。settle するのは「実信号(通知/同期結果/停止刻印/過去の settle)で
279
+ // 終端した起動元」に根ざした木だけ。条件:
280
+ // - 背景起動(forked-skill、または async 起動 ack 済み)だが有効な完了信号がない
281
+ // - 最後の message 行が「text のみの assistant」(最終レポート済み。再開注入の
282
+ // user 行でマーカーが倒れるため、再開直後の長考中は候補にならない)
283
+ // - transcript が agentOrphanGraceMs 以上静止(transcript 時刻起点なので
284
+ // tail 張り直し直後でも古い孤児は即 settle できる)
285
+ // - 直下に running かつ非候補の子(エージェント/背景コマンド)がいない(fixpoint。
286
+ // 子の通知で再開されうるため)
287
+ // - 起動元が終端済み、または「終端済みに根ざして承認された候補」(承認は終端
288
+ // アンカーからの伝播のみ。候補同士の相互承認では settle しないので、壊れた
289
+ // meta の循環参照でも誤 settle しない)
290
+ const agentStatusById = new Map();
291
+ for (const node of tracked.values())
292
+ agentStatusById.set(node.nodeId, resolveAgentStatus(node).status);
293
+ const lastActivityMs = (node) => node.lastJsonlTimestampMs ?? mtimeMs(node.jsonlPath ?? node.metaPath);
294
+ if (sessionAlive === false) {
295
+ for (const node of tracked.values()) {
296
+ if (agentStatusById.get(node.nodeId) !== "running")
297
+ continue;
298
+ if (deadSweepByNodeId.has(node.nodeId))
299
+ continue;
300
+ const lastTs = lastActivityMs(node);
301
+ if (lastTs <= 0 || nowMs - lastTs < this.agentOrphanGraceMs)
302
+ continue;
303
+ deadSweepByNodeId.set(node.nodeId, {
304
+ ts: lastTs,
305
+ // 最終レポートの形で止まっていれば完了、tool_use のまま止まっていれば中断(error)。
306
+ status: node.finalReportMarker === true ? "completed" : "error",
307
+ });
308
+ }
309
+ }
310
+ else {
311
+ // 生存(または不明)へ転じたら sweep 由来のマークは全破棄する。
312
+ // 死亡判定が誤りだった場合の回復経路(通常の孤児 settle は保持する)。
313
+ if (deadSweepByNodeId.size > 0)
314
+ deadSweepByNodeId.clear();
315
+ const settleCandidates = new Set();
316
+ for (const node of tracked.values()) {
317
+ if (agentStatusById.get(node.nodeId) !== "running")
318
+ continue;
319
+ const result = node.meta.toolUseId === null
320
+ ? null
321
+ : resultByToolUseId.get(node.meta.toolUseId) ?? null;
322
+ const backgroundLaunch = node.meta.toolUseId === null || (result !== null && result.asyncLaunch);
323
+ if (!backgroundLaunch)
324
+ continue;
325
+ if (node.finalReportMarker !== true)
326
+ continue;
327
+ if (node.lastJsonlTimestampMs === null)
328
+ continue;
329
+ if (nowMs - node.lastJsonlTimestampMs < this.agentOrphanGraceMs)
330
+ continue;
331
+ settleCandidates.add(node.nodeId);
332
+ }
333
+ for (;;) {
334
+ const blockedOwners = new Set();
335
+ for (const node of tracked.values()) {
336
+ if (agentStatusById.get(node.nodeId) !== "running")
337
+ continue;
338
+ if (settleCandidates.has(node.nodeId))
339
+ continue;
340
+ const owner = ownerOf(node);
341
+ if (owner !== undefined)
342
+ blockedOwners.add(owner);
343
+ }
344
+ for (const command of bgCommandByTaskId.values()) {
345
+ if (notificationByTaskId.has(command.taskId) || bgOrphanTsByTaskId.has(command.taskId))
346
+ continue;
347
+ blockedOwners.add(command.owner);
196
348
  }
349
+ let changed = false;
350
+ for (const id of settleCandidates) {
351
+ if (!blockedOwners.has(id))
352
+ continue;
353
+ settleCandidates.delete(id);
354
+ changed = true;
355
+ }
356
+ if (!changed)
357
+ break;
358
+ }
359
+ const approved = new Set();
360
+ for (;;) {
361
+ let changed = false;
362
+ for (const id of settleCandidates) {
363
+ if (approved.has(id))
364
+ continue;
365
+ const node = tracked.get(id);
366
+ if (node === undefined)
367
+ continue;
368
+ const ownerId = ownerOf(node);
369
+ if (ownerId === undefined || ownerId === "root")
370
+ continue;
371
+ const ownerStatus = agentStatusById.get(ownerId);
372
+ if (ownerStatus !== "completed" && ownerStatus !== "error" && !approved.has(ownerId))
373
+ continue;
374
+ approved.add(id);
375
+ changed = true;
376
+ }
377
+ if (!changed)
378
+ break;
379
+ }
380
+ for (const id of approved) {
381
+ const node = tracked.get(id);
382
+ if (node === undefined)
383
+ continue;
384
+ agentOrphanTsByNodeId.set(id, lastActivityMs(node));
197
385
  }
198
- const parentNodeId = ownerByToolUseId.get(node.meta.toolUseId) ?? fallbackParent(node.meta.spawnDepth);
386
+ }
387
+ for (const node of tracked.values()) {
388
+ const { status, ts } = resolveAgentStatus(node);
389
+ const parentNodeId = ownerOf(node) ?? fallbackParent(node.meta.spawnDepth);
199
390
  const messageNode = {
200
391
  nodeId: node.nodeId,
201
- toolUseId: node.meta.toolUseId,
392
+ // forked-skill エージェントに tool_use はない。ワイヤ上は必須 string のため空で送る。
393
+ toolUseId: node.meta.toolUseId ?? "",
202
394
  parentNodeId,
203
395
  agentType: node.meta.agentType,
204
396
  label: node.meta.description,
@@ -213,11 +405,10 @@ export class SubagentTailer {
213
405
  node.lastKey = key;
214
406
  yield { type: "subagent_node", v: PROTOCOL_V2, node: messageNode };
215
407
  }
216
- // 孤児判定: task-notification は起動元エージェントが先に終了すると届かないまま
217
- // 消えることがある(完了信号の消失)。output ファイルを開いているプロセスが
408
+ // 孤児判定(背景コマンド): task-notification は起動元エージェントが先に終了すると
409
+ // 届かないまま消えることがある(完了信号の消失)。output ファイルを開いているプロセスが
218
410
  // いなければ「終了済みなのに通知が来ない孤児」として完了へ落とす。
219
411
  // 実行中のコマンドはシェルが output の fd を保持し続けるため誤爆しない。
220
- const nowMs = Date.now();
221
412
  if (nowMs - lastOrphanProbeMs >= this.orphanProbeIntervalMs) {
222
413
  lastOrphanProbeMs = nowMs;
223
414
  for (const command of bgCommandByTaskId.values()) {
@@ -277,7 +468,7 @@ export class SubagentTailer {
277
468
  }
278
469
  }
279
470
  }
280
- function discoverMetaFiles(dir, tracked) {
471
+ function discoverMetaFiles(dir, tracked, refreshMetas) {
281
472
  let files;
282
473
  try {
283
474
  files = fs.readdirSync(dir);
@@ -298,6 +489,18 @@ function discoverMetaFiles(dir, tracked) {
298
489
  existing.jsonlPath = jsonlPath;
299
490
  changed = true;
300
491
  }
492
+ // stoppedByUser は停止時に後から書き込まれるため、mtime 変化で meta を読み直す。
493
+ if (refreshMetas) {
494
+ const metaMtime = mtimeMs(existing.metaPath);
495
+ if (metaMtime !== existing.metaMtimeMs) {
496
+ existing.metaMtimeMs = metaMtime;
497
+ const meta = readMeta(existing.metaPath);
498
+ if (meta !== null) {
499
+ existing.meta = meta;
500
+ changed = true;
501
+ }
502
+ }
503
+ }
301
504
  continue;
302
505
  }
303
506
  const metaPath = path.join(dir, file);
@@ -308,9 +511,11 @@ function discoverMetaFiles(dir, tracked) {
308
511
  nodeId,
309
512
  meta,
310
513
  metaPath,
514
+ metaMtimeMs: mtimeMs(metaPath),
311
515
  jsonlPath: siblingJsonl(metaPath),
312
516
  firstJsonlTimestampMs: null,
313
517
  lastJsonlTimestampMs: null,
518
+ finalReportMarker: null,
314
519
  currentActivity: null,
315
520
  lastKey: null,
316
521
  });
@@ -323,15 +528,16 @@ function readMeta(metaPath) {
323
528
  const parsed = JSON.parse(fs.readFileSync(metaPath, "utf8"));
324
529
  if (typeof parsed["agentType"] !== "string" ||
325
530
  typeof parsed["description"] !== "string" ||
326
- typeof parsed["toolUseId"] !== "string" ||
327
531
  typeof parsed["spawnDepth"] !== "number") {
328
532
  return null;
329
533
  }
330
534
  return {
331
535
  agentType: parsed["agentType"],
332
536
  description: parsed["description"],
333
- toolUseId: parsed["toolUseId"],
537
+ toolUseId: typeof parsed["toolUseId"] === "string" ? parsed["toolUseId"] : null,
334
538
  spawnDepth: parsed["spawnDepth"],
539
+ parentAgentId: typeof parsed["parentAgentId"] === "string" ? parsed["parentAgentId"] : null,
540
+ stoppedByUser: parsed["stoppedByUser"] === true,
335
541
  };
336
542
  }
337
543
  catch {
@@ -545,6 +751,38 @@ function extractTaskNotification(line) {
545
751
  ts: timestampMs(line),
546
752
  };
547
753
  }
754
+ /**
755
+ * message 行の「最終レポートらしさ」を返す:
756
+ * true = text のみの assistant 行(サブエージェントはこの形で停止する)
757
+ * false = それ以外の message 行(user 行・tool_use を含む assistant 行)
758
+ * null = message を持たない行(summary 等。判定を変えない)
759
+ * true のまま transcript が静止していればエージェントは停止済み。再開注入
760
+ * (task-notification / SendMessage)は user 行として届き false へ倒れるため、
761
+ * 再開直後の長考中を「最終レポート済み」と誤認しない。
762
+ */
763
+ function finalReportMarker(line) {
764
+ try {
765
+ const obj = JSON.parse(line);
766
+ const message = obj["message"];
767
+ if (typeof message !== "object" || message === null)
768
+ return null;
769
+ const rec = message;
770
+ const content = rec["content"];
771
+ if (content === undefined || content === null)
772
+ return null;
773
+ if (rec["role"] !== "assistant")
774
+ return false;
775
+ if (typeof content === "string")
776
+ return true;
777
+ if (!Array.isArray(content))
778
+ return null;
779
+ return !content.some((block) => typeof block === "object" && block !== null
780
+ && block["type"] === "tool_use");
781
+ }
782
+ catch {
783
+ return null;
784
+ }
785
+ }
548
786
  function latestActivitySummary(line) {
549
787
  const activities = extractToolActivities(messageContent(line));
550
788
  const latest = activities.at(-1);
@@ -649,6 +887,48 @@ function probeViaLsof(filePath) {
649
887
  });
650
888
  });
651
889
  }
890
+ const defaultProbeExec = (cmd, args, callback) => {
891
+ execFile(cmd, args, { timeout: 10_000 }, (error, stdout) => {
892
+ callback(error, stdout ?? "");
893
+ });
894
+ };
895
+ /**
896
+ * セッションの claude プロセス生存を判定する。
897
+ * 1) argv にセッション id を持つプロセスがいれば生存確定(Tailii が張る engine は
898
+ * `--session-id`/`--resume` で id を運ぶ)。
899
+ * 2) argv 不一致でも bare CLI(argv に id なし)の可能性が残るため、transcript が
900
+ * staleMs 以内に更新されていれば「不明」(生存扱い)。
901
+ * 3) argv 不一致 かつ transcript が staleMs 以上静止しているときだけ「死亡確定」。
902
+ * 生きているのに静かなだけのセッションを誤判定しても、transcript が伸びれば
903
+ * sweep マークは破棄され running へ回復する。
904
+ * プロセス名の照合(`lsof -c claude` 等)は使わない — macOS では CLI の comm が
905
+ * バージョン文字列(例 "2.1.226")になるなど環境・バージョンで壊れるため。
906
+ * プローブ不能(pgrep 不在・タイムアウト等)は常に「不明」= 生存扱いへ倒す。
907
+ */
908
+ export async function defaultProbeSessionAlive(sessionId, lastActivityMs, staleMs, exec = defaultProbeExec) {
909
+ const byArgv = await probeArgvAlive(sessionId, exec);
910
+ if (byArgv === true)
911
+ return true;
912
+ if (byArgv === null)
913
+ return null;
914
+ if (lastActivityMs === null)
915
+ return null;
916
+ return Date.now() - lastActivityMs >= staleMs ? false : null;
917
+ }
918
+ /** argv にセッション id を持つプロセスの有無。true / false / null(判定不能)。 */
919
+ function probeArgvAlive(sessionId, exec) {
920
+ return new Promise((resolve) => {
921
+ exec("pgrep", ["-f", sessionId], (error, stdout) => {
922
+ if (error === null) {
923
+ resolve(stdout.trim().length > 0);
924
+ return;
925
+ }
926
+ // exit 1 = 一致なし。それ以外(pgrep 不在・タイムアウト等)は判定不能。
927
+ const code = error.code;
928
+ resolve(code === 1 ? false : null);
929
+ });
930
+ });
931
+ }
652
932
  /** lsof が無い Linux 向けフォールバック。/proc/<pid>/fd を走査する。 */
653
933
  function probeViaProcFd(filePath) {
654
934
  let target;