tailii-host 0.5.0 → 0.6.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 (78) hide show
  1. package/dist/approval/hook.js +1 -1
  2. package/dist/approval/hook.js.map +1 -1
  3. package/dist/backend/herdr.d.ts +19 -0
  4. package/dist/backend/herdr.js +70 -13
  5. package/dist/backend/herdr.js.map +1 -1
  6. package/dist/backend/sessionBackend.d.ts +12 -0
  7. package/dist/backend/sessionBackend.js +6 -0
  8. package/dist/backend/sessionBackend.js.map +1 -1
  9. package/dist/backend/tmux.d.ts +152 -2
  10. package/dist/backend/tmux.js +477 -12
  11. package/dist/backend/tmux.js.map +1 -1
  12. package/dist/chat/chatTailController.d.ts +3 -1
  13. package/dist/chat/chatTailController.js +3 -0
  14. package/dist/chat/chatTailController.js.map +1 -1
  15. package/dist/chat/subagentTailer.d.ts +10 -0
  16. package/dist/chat/subagentTailer.js +215 -51
  17. package/dist/chat/subagentTailer.js.map +1 -1
  18. package/dist/chat/subagentTranscript.js +51 -5
  19. package/dist/chat/subagentTranscript.js.map +1 -1
  20. package/dist/chat/transcriptTailer.d.ts +28 -1
  21. package/dist/chat/transcriptTailer.js +115 -2
  22. package/dist/chat/transcriptTailer.js.map +1 -1
  23. package/dist/codex/codexNativeTurnController.js +20 -4
  24. package/dist/codex/codexNativeTurnController.js.map +1 -1
  25. package/dist/codex/codexRolloutTailer.d.ts +1 -0
  26. package/dist/codex/codexRolloutTailer.js +7 -0
  27. package/dist/codex/codexRolloutTailer.js.map +1 -1
  28. package/dist/codex/codexSystemNotice.d.ts +16 -0
  29. package/dist/codex/codexSystemNotice.js +195 -0
  30. package/dist/codex/codexSystemNotice.js.map +1 -0
  31. package/dist/engine/handlers/accountUsage.d.ts +17 -0
  32. package/dist/engine/handlers/accountUsage.js +40 -6
  33. package/dist/engine/handlers/accountUsage.js.map +1 -1
  34. package/dist/engine/handlers/mode.js +42 -1
  35. package/dist/engine/handlers/mode.js.map +1 -1
  36. package/dist/engine/handlers/usage.js +4 -1
  37. package/dist/engine/handlers/usage.js.map +1 -1
  38. package/dist/hub/engineRelaySocket.d.ts +3 -0
  39. package/dist/hub/engineRelaySocket.js +2 -1
  40. package/dist/hub/engineRelaySocket.js.map +1 -1
  41. package/dist/hub/hubDaemon.js +8 -2
  42. package/dist/hub/hubDaemon.js.map +1 -1
  43. package/dist/hub/hubProtocol.js +8 -2
  44. package/dist/hub/hubProtocol.js.map +1 -1
  45. package/dist/hub/panePreviewPump.d.ts +27 -0
  46. package/dist/hub/panePreviewPump.js +62 -1
  47. package/dist/hub/panePreviewPump.js.map +1 -1
  48. package/dist/hub/sessionHub.d.ts +48 -1
  49. package/dist/hub/sessionHub.js +165 -14
  50. package/dist/hub/sessionHub.js.map +1 -1
  51. package/dist/protocol/decode.js +14 -0
  52. package/dist/protocol/decode.js.map +1 -1
  53. package/dist/protocol/messages.d.ts +28 -0
  54. package/dist/services/accountIdentity.js +3 -1
  55. package/dist/services/accountIdentity.js.map +1 -1
  56. package/dist/services/officialApps.d.ts +9 -0
  57. package/dist/services/officialApps.js +56 -23
  58. package/dist/services/officialApps.js.map +1 -1
  59. package/dist/services/planUsageFetcher.d.ts +35 -3
  60. package/dist/services/planUsageFetcher.js +34 -6
  61. package/dist/services/planUsageFetcher.js.map +1 -1
  62. package/dist/sessions/claudeSessionStore.js +30 -0
  63. package/dist/sessions/claudeSessionStore.js.map +1 -1
  64. package/dist/sessions/heartbeat.d.ts +7 -1
  65. package/dist/sessions/heartbeat.js +3 -1
  66. package/dist/sessions/heartbeat.js.map +1 -1
  67. package/dist/sessions/sessionSearch.js +23 -5
  68. package/dist/sessions/sessionSearch.js.map +1 -1
  69. package/dist/shared/crossSession.d.ts +15 -0
  70. package/dist/shared/crossSession.js +75 -0
  71. package/dist/shared/crossSession.js.map +1 -0
  72. package/dist/shared/harnessReminder.d.ts +32 -0
  73. package/dist/shared/harnessReminder.js +124 -0
  74. package/dist/shared/harnessReminder.js.map +1 -0
  75. package/dist/shared/systemNotice.d.ts +30 -0
  76. package/dist/shared/systemNotice.js +209 -0
  77. package/dist/shared/systemNotice.js.map +1 -0
  78. package/package.json +3 -3
@@ -51,6 +51,9 @@ export class ChatTailController {
51
51
  if (options.onCodexTurnLifecycle !== undefined) {
52
52
  this.codexTailer.setTurnLifecycleObserver(options.onCodexTurnLifecycle);
53
53
  }
54
+ if (options.onClaudeTurnLifecycle !== undefined) {
55
+ this.tailer.setTurnLifecycleObserver(options.onClaudeTurnLifecycle);
56
+ }
54
57
  }
55
58
  /** 全文取得要求向けに、現在の subagent transcript パスを解決する。 */
56
59
  subagentTranscriptPath(nodeId) {
@@ -1 +1 @@
1
- {"version":3,"file":"chatTailController.js","sourceRoot":"","sources":["../../src/chat/chatTailController.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,0CAA0C;AAC1C,wCAAwC;AACxC,qEAAqE;AACrE,kEAAkE;AAClE,8CAA8C;AAE9C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,GAEnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAKtE,oEAAoE;AACpE,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAAa;IACnB,MAAM,CAAmB;IACzB,cAAc,CAAiB;IAC/B,YAAY,CAAS;IACtC,gEAAgE;IAC/C,YAAY,CAAsB;IACnD,4DAA4D;IAC3C,eAAe,CAAe;IAC/C,yCAAyC;IACxB,KAAK,CAAY;IAClC,2DAA2D;IACnD,SAAS,CAAY;IAC7B,0DAA0D;IACzC,WAAW,CAAqB;IAEzC,eAAe,GAA2B,IAAI,CAAC;IAC/C,WAAW,GAAyB,IAAI,CAAC;IACzC,mBAAmB,GAAyB,IAAI,CAAC;IACzD,yDAAyD;IACjD,UAAU,GAAkB,IAAI,CAAC;IACjC,gBAAgB,GAAkB,IAAI,CAAC;IACvC,kBAAkB,GAAkB,IAAI,CAAC;IACjD,wDAAwD;IAChD,mBAAmB,GAAkB,IAAI,CAAC;IAElD,YAAY,OAUX;QACC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,cAAc,EAAE,CAAC;QACrE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,WAAW;YACd,OAAO,CAAC,WAAW,IAAI,IAAI,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,IAAI,OAAO,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,sBAAsB,CAAC,MAAc;QACnC,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,2CAA2C;IAC3C,kBAAkB,CAAC,MAAc;QAC/B,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACxE,OAAO,2BAA2B,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACzD,4CAA4C;QAC5C,OAAO,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACH,IAAI,CACF,GAAW,EACX,kBAAiC,EACjC,WAAW,GAAkB,IAAI,EACjC,KAAK,GAAc,IAAI,CAAC,KAAK;QAE7B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,kBAAkB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QACD,wDAAwD;QACxD,mDAAmD;QACnD,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACrC,kBAAkB,CAAC,IAAI,CACrB,YAAY,GAAG,cAAc,kBAAkB,IAAI,KAAK,QAAQ,GAAG,cAAc,SAAS,EAAE,CAC7F,CAAC;QAEF,MAAM,WAAW,GAAG,gBAAgB,CAAC,YAAY,CAAC,GAAG,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;QACxF,IAAI,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClG,kBAAkB,CAAC,IAAI,CAAC,oDAAoD,WAAW,GAAG,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC;QACtC,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;QAEvC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QAC/E,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;YAC7B,kBAAkB,CAAC,IAAI,CACrB,6BAA6B,GAAG,cAAc,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CACnG,CAAC;YACF,kDAAkD;YAClD,oDAAoD;YACpD,qDAAqD;YACrD,8CAA8C;YAC9C,sDAAsD;YACtD,uBAAuB;YACvB,qDAAqD;YACrD,kDAAkD;YAClD,sCAAsC;YACtC,sDAAsD;YACtD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;YAC7C,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,CAAC,gBAAgB,CACjD,GAAG,EACH,kBAAkB,EAClB,WAAW,EACX,EAAE,CAAC,MAAM,CACV,EAAE,CAAC;oBACF,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACtB,kBAAkB,CAAC,IAAI,CAAC,2BAA2B,KAAK,GAAG,CAAC,CAAC;wBAC7D,MAAM;oBACR,CAAC;oBACD,oEAAoE;oBACpE,yDAAyD;oBACzD,iEAAiE;oBACjE,kDAAkD;oBAClD,4CAA4C;oBAC5C,IAAI,OAAO,CAAC,IAAI,KAAK,iBAAiB,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;wBAC9E,SAAS;oBACX,CAAC;oBACD,KAAK,IAAI,CAAC,CAAC;oBACX,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,KAAK,CAAC;wBAAE,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC;oBAC1F,IAAI,CAAC;wBACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACtB,+CAA+C;wBAC/C,+BAA+B;wBAC/B,iEAAiE;wBACjE,IAAI,YAAY,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;4BACvF,MAAM,KAAK,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;4BACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gCACzC,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,aAAa,CAChD,KAAK,CAAC,CAAC,CAAE,EACT,OAAO,OAAO,CAAC,QAAQ,IAAI,CAAC,EAAE,CAC/B,CAAC;gCACF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oCACvB,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;oCAClC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gCAC1B,CAAC;4BACH,CAAC;wBACH,CAAC;wBACD,qDAAqD;wBACrD,oDAAoD;wBACpD,8DAA8D;wBAC9D,4CAA4C;wBAC5C,wDAAwD;wBACxD,IAAI,YAAY,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;4BAC9D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;4BACpE,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gCAC3D,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,aAAa,CAChD,QAAQ,EACR,QAAQ,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,CAC9B,CAAC;gCACF,IAAI,SAAS,KAAK,IAAI;oCAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;4BAClD,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mDAAmD,MAAM,CAAC,KAAK,CAAC,IAAI,CACrE,CAAC;wBACF,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,kBAAkB,CAAC,IAAI,CAAC,8BAA8B,KAAK,GAAG,CAAC,CAAC;YAClE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,IAAI,CAAC,mBAAmB,GAAG,CAAC,KAAK,IAAI,EAAE;YACrC,IAAI,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,cAAc,CAAC,gBAAgB,CACzD,GAAG,EACH,kBAAkB,EAClB,WAAW,EACX,EAAE,CAAC,MAAM,CACV,EAAE,CAAC;oBACF,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO;wBAAE,MAAM;oBAC7B,IAAI,eAAe,EAAE,GAAG,CAAC;wBAAE,SAAS;oBACpC,IAAI,CAAC;wBACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACxB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,kBAAkB,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qDAAqD,MAAM,CAAC,KAAK,CAAC,IAAI,CACvE,CAAC;wBACF,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,kBAAkB,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED;;;;OAIG;IACK,SAAS,CACf,GAAW,EACX,kBAAiC,EACjC,WAA0B;QAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACnF,IAAI,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClG,kBAAkB,CAAC,IAAI,CAAC,oDAAoD,WAAW,GAAG,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC;QACtC,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;QACvC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAEhC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QACrC,kBAAkB,CAAC,IAAI,CACrB,iBAAiB,GAAG,cAAc,kBAAkB,IAAI,KAAK,cAAc,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,WAAW,IAAI,KAAK,EAAE,CACjK,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;YAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,WAAW,CAAC,YAAY,CAClD,GAAG,EACH,WAAW,EACX,EAAE,CAAC,MAAM,EACT,kBAAkB,CACnB,EAAE,CAAC;oBACF,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO;wBAAE,MAAM;oBAC7B,KAAK,IAAI,CAAC,CAAC;oBACX,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,KAAK,CAAC;wBAAE,kBAAkB,CAAC,IAAI,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;oBAChG,IAAI,CAAC;wBACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACxB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,kBAAkB,CAAC,IAAI,CAAC,0BAA0B,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAC7E,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,kBAAkB,CAAC,IAAI,CAAC,oCAAoC,KAAK,GAAG,CAAC,CAAC;YACxE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,mDAAmD;IAC3C,MAAM,CAAU,gBAAgB,GAAG,IAAI,GAAG,CAAC;QACjD,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK;KAC1E,CAAC,CAAC;IAEH;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAY;QACtC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACnD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACnD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,+DAA+D;QAC/D,+CAA+C;QAC/C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAC/B,0DAA0D,CAC3D,EAAE,CAAC;YACF,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,QAAyC;QAC5D,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtD,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAED,gEAAgE;IAChE,qBAAqB;QACnB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC1C,mEAAmE;QACnE,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAC5C,OAAO,gBAAgB,CAAC,YAAY,CAClC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,kBAAkB,CACxB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,uBAAuB;QACrB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED;;;;;;OAMG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;;;;;OAQG;IACH,aAAa,CAAC,IAAyE;QACrF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;YAAE,OAAO;QACvD,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAC/B,uDAAuD;YACvD,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3D,kBAAkB,CAAC,IAAI,CAAC,oCAAoC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxE,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzF,kBAAkB,CAAC,IAAI,CAAC,iDAAiD,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;YACjG,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI;QACF,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,qDAAqD;IACrD,MAAM,CAAC,IAAI,CAAC,OAAe;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;YAC/C,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC;QACrG,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"chatTailController.js","sourceRoot":"","sources":["../../src/chat/chatTailController.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,15 @@ export interface SubagentTailerOptions {
14
14
  * コマンド側の猶予より長めに取る。
15
15
  */
16
16
  agentOrphanGraceMs?: number;
17
+ /**
18
+ * 最終行が「終端 stop_reason の無い text のみ assistant 行」= 暫定的な最終レポート形
19
+ * のときの静止猶予(ms)。既定 600s(agentOrphanGraceMs より短くは効かない)。
20
+ * サブエージェント transcript では、message 途中の text 行(後続の tool_use を生成中、
21
+ * 無音は実測最長 135s)が stop_reason null で書かれる一方、最終レポート行の 6〜30%
22
+ * (全体 11.7%)も null のまま(2.1.187〜2.1.234 まで版を問わず残る恒常的少数派)。null の
23
+ * 行はどちらとも取れないので、長い猶予でだけ settle する(互換シムではなく恒久的に必要)。
24
+ */
25
+ tentativeFinalGraceMs?: number;
17
26
  /** output ファイルを開いているプロセスの有無(null=判定不能)。テスト差し替え用。 */
18
27
  probeOutputOpen?: (filePath: string) => Promise<boolean | null>;
19
28
  /**
@@ -38,6 +47,7 @@ export declare class SubagentTailer {
38
47
  private readonly orphanGraceMs;
39
48
  private readonly orphanProbeIntervalMs;
40
49
  private readonly agentOrphanGraceMs;
50
+ private readonly tentativeFinalGraceMs;
41
51
  private readonly probeOutputOpen;
42
52
  private readonly probeSessionAlive;
43
53
  private readonly sessionStaleMs;
@@ -7,6 +7,7 @@ import { execFile } from "node:child_process";
7
7
  import * as fs from "node:fs";
8
8
  import * as path from "node:path";
9
9
  import { PROTOCOL_V2 } from "../protocol.js";
10
+ import { injectedReminderBodies } from "../shared/harnessReminder.js";
10
11
  import { abortableSleep } from "../shared/sleep.js";
11
12
  import { extractToolActivities, TranscriptTailer } from "./transcriptTailer.js";
12
13
  /** サブエージェント meta/jsonl と親 transcript の tool_result を監視する。 */
@@ -16,6 +17,7 @@ export class SubagentTailer {
16
17
  orphanGraceMs;
17
18
  orphanProbeIntervalMs;
18
19
  agentOrphanGraceMs;
20
+ tentativeFinalGraceMs;
19
21
  probeOutputOpen;
20
22
  probeSessionAlive;
21
23
  sessionStaleMs;
@@ -27,6 +29,7 @@ export class SubagentTailer {
27
29
  this.orphanGraceMs = options.orphanGraceMs ?? 60_000;
28
30
  this.orphanProbeIntervalMs = options.orphanProbeIntervalMs ?? 30_000;
29
31
  this.agentOrphanGraceMs = options.agentOrphanGraceMs ?? 120_000;
32
+ this.tentativeFinalGraceMs = Math.max(this.agentOrphanGraceMs, options.tentativeFinalGraceMs ?? 600_000);
30
33
  this.probeOutputOpen = options.probeOutputOpen ?? defaultProbeOutputOpen;
31
34
  this.sessionStaleMs = options.sessionStaleMs ?? 6 * 60 * 60 * 1000;
32
35
  this.probeSessionAlive = options.probeSessionAlive
@@ -72,8 +75,8 @@ export class SubagentTailer {
72
75
  // 通知が握り潰された背景コマンドの孤児判定(taskId → 終了扱いにした ts)。
73
76
  const bgOrphanTsByTaskId = new Map();
74
77
  const bgFirstSeenMsByTaskId = new Map();
75
- // 通知が配達されえない背景エージェントの孤児判定(nodeId → settle 扱いにした ts)。
76
- const agentOrphanTsByNodeId = new Map();
78
+ // 通知が配達されえない背景エージェントの孤児判定(nodeId → settle 扱いにした ts/status)。
79
+ const agentOrphanByNodeId = new Map();
77
80
  // 死亡セッションの一括 sweep マーク。生存へ転じたら全破棄して回復できるよう、
78
81
  // 通常の孤児 settle とは別に持つ。
79
82
  const deadSweepByNodeId = new Map();
@@ -106,6 +109,8 @@ export class SubagentTailer {
106
109
  node.currentActivity = null;
107
110
  node.lastJsonlTimestampMs = null;
108
111
  node.finalReportMarker = null;
112
+ node.finalDefinite = false;
113
+ node.apiErrorMarker = false;
109
114
  }
110
115
  }
111
116
  if (node !== null)
@@ -155,21 +160,42 @@ export class SubagentTailer {
155
160
  status: "completed",
156
161
  exitCode: null,
157
162
  ts: hit.ts ?? lineTs,
163
+ stopAck: true,
158
164
  });
159
165
  }
160
166
  }
161
- const notification = extractTaskNotification(line);
162
- if (notification !== null) {
167
+ for (const notification of extractTaskNotifications(line)) {
168
+ // 同じ task-id の通知は enqueue ログと配達行(user / attachment / assistant 注入形)の
169
+ // 複数行に現れ、再開→再停止で複数回起こる。ファイル横断の集約と同じく最新 ts の
170
+ // 記録を採る(= 最後に起きた完了イベント)。TaskStop の ack は明示停止として常に優先。
171
+ const existing = read.state.notificationByTaskId.get(notification.taskId);
172
+ if (existing?.stopAck === true)
173
+ continue;
174
+ const ts = notification.ts ?? lineTs;
175
+ if (existing !== undefined && (existing.ts ?? 0) > (ts ?? 0))
176
+ continue;
177
+ // enqueue(完了時点の正確な ts)を、同じ完了イベントの遅い配達 ts で前進させない。
178
+ // 配達は停止境界までずれ込むため、その間の再開(自 transcript の追記)を「通知より
179
+ // 古い」と誤認して running のエージェントを completed に塗ってしまう。再完了は新しい
180
+ // enqueue が先に書かれるので latest-wins のまま拾える。
181
+ if (existing !== undefined && existing.enqueue === true && !notification.enqueue
182
+ && existing.status === notification.status && existing.exitCode === notification.exitCode) {
183
+ continue;
184
+ }
163
185
  read.state.notificationByTaskId.set(notification.taskId, {
164
186
  status: notification.status,
165
187
  exitCode: notification.exitCode,
166
- ts: notification.ts ?? lineTs,
188
+ ts,
189
+ ...(notification.enqueue ? { enqueue: true } : {}),
167
190
  });
168
191
  }
169
192
  if (node !== null) {
170
- const marker = finalReportMarker(line);
171
- if (marker !== null)
172
- node.finalReportMarker = marker;
193
+ const shape = messageShape(line);
194
+ if (shape !== null) {
195
+ node.finalReportMarker = shape.final;
196
+ node.finalDefinite = shape.definite;
197
+ node.apiErrorMarker = shape.apiError;
198
+ }
173
199
  const activity = latestActivitySummary(line);
174
200
  if (activity !== null)
175
201
  node.currentActivity = activity;
@@ -191,7 +217,17 @@ export class SubagentTailer {
191
217
  resultByToolUseId.set(id, result);
192
218
  for (const [id, notification] of state.notificationByTaskId) {
193
219
  const existing = notificationByTaskId.get(id);
194
- if (existing === undefined || (notification.ts ?? 0) >= (existing.ts ?? 0)) {
220
+ if (existing?.stopAck === true && notification.stopAck !== true)
221
+ continue;
222
+ // per-file と同じ規則: enqueue の正確な ts を、同じ完了イベントの遅い配達 ts で
223
+ // 前進させない。
224
+ if (existing?.enqueue === true && notification.enqueue !== true
225
+ && notification.stopAck !== true
226
+ && existing.status === notification.status && existing.exitCode === notification.exitCode) {
227
+ continue;
228
+ }
229
+ if (existing === undefined || notification.stopAck === true
230
+ || (notification.ts ?? 0) >= (existing.ts ?? 0)) {
195
231
  notificationByTaskId.set(id, notification);
196
232
  }
197
233
  }
@@ -223,7 +259,8 @@ export class SubagentTailer {
223
259
  };
224
260
  }
225
261
  // バックグラウンド実行(または結果未着): task-notification が終了信号。
226
- // 通知後に自分の transcript が伸びたら resume とみなし running へ戻す。
262
+ // 通知後に自分の transcript が伸びたら resume とみなし running へ戻す
263
+ // (再通知か、通知済み継続の settle(下記 notifiedContinuation)で再び終端する)。
227
264
  const notification = notificationByTaskId.get(node.nodeId) ?? null;
228
265
  const resumedAfter = notification !== null && notification.ts !== null
229
266
  && (node.lastJsonlTimestampMs ?? 0) > notification.ts;
@@ -237,15 +274,15 @@ export class SubagentTailer {
237
274
  if (node.meta.stoppedByUser) {
238
275
  return { status: "completed", ts: node.lastJsonlTimestampMs ?? mtimeMs(node.metaPath) };
239
276
  }
240
- // 通知が配達されえず孤児 settle 済みなら completed。settle 後に transcript が
277
+ // 通知が配達されえず孤児 settle 済みなら終端。settle 後に transcript が
241
278
  // 伸びたら resume とみなしマークを破棄して running へ戻す(孤児検知で再評価される)。
242
- const orphanTs = agentOrphanTsByNodeId.get(node.nodeId);
243
- if (orphanTs !== undefined) {
244
- if ((node.lastJsonlTimestampMs ?? 0) > orphanTs) {
245
- agentOrphanTsByNodeId.delete(node.nodeId);
279
+ const orphan = agentOrphanByNodeId.get(node.nodeId);
280
+ if (orphan !== undefined) {
281
+ if ((node.lastJsonlTimestampMs ?? 0) > orphan.ts) {
282
+ agentOrphanByNodeId.delete(node.nodeId);
246
283
  }
247
284
  else {
248
- return { status: "completed", ts: orphanTs };
285
+ return { status: orphan.status, ts: orphan.ts };
249
286
  }
250
287
  }
251
288
  // 死亡セッションの sweep マーク。transcript が伸びたら破棄(誤判定からの回復)。
@@ -279,7 +316,8 @@ export class SubagentTailer {
279
316
  // 終端した起動元」に根ざした木だけ。条件:
280
317
  // - 背景起動(forked-skill、または async 起動 ack 済み)だが有効な完了信号がない
281
318
  // - 最後の message 行が「text のみの assistant」(最終レポート済み。再開注入の
282
- // user 行でマーカーが倒れるため、再開直後の長考中は候補にならない)
319
+ // user 行や生成途中の thinking 行でマーカーが倒れるため、再開直後の長考中・
320
+ // 長い最終レポートのストリーミング中は候補にならない)
283
321
  // - transcript が agentOrphanGraceMs 以上静止(transcript 時刻起点なので
284
322
  // tail 張り直し直後でも古い孤児は即 settle できる)
285
323
  // - 直下に running かつ非候補の子(エージェント/背景コマンド)がいない(fixpoint。
@@ -287,10 +325,19 @@ export class SubagentTailer {
287
325
  // - 起動元が終端済み、または「終端済みに根ざして承認された候補」(承認は終端
288
326
  // アンカーからの伝播のみ。候補同士の相互承認では settle しないので、壊れた
289
327
  // meta の循環参照でも誤 settle しない)
328
+ // - 例外=「通知済み継続」: 完了通知が一度出た後に自 transcript が伸びたノードは、
329
+ // 起動元が root でも settle する。ハーネスは 1 回の走行につき最初の停止でしか
330
+ // 通知しないため、停止境界で自分の背景タスク通知([SYSTEM NOTIFICATION])を
331
+ // 受け取って続行した走行の 2 度目の停止には通知が来ない(実測: 通知後 3 分続行し
332
+ // 最終レポートで停止 → 20 時間「実行中」残留)。通知済み = 起動元へ完了が届いた
333
+ // 後なので、SendMessage 待機中の「未通知の生存エージェント」保護とは衝突しない。
334
+ // coordinator 再開(SendMessage)なら再通知が数秒で届き、そちらの ts が優先される。
290
335
  const agentStatusById = new Map();
291
336
  for (const node of tracked.values())
292
337
  agentStatusById.set(node.nodeId, resolveAgentStatus(node).status);
293
338
  const lastActivityMs = (node) => node.lastJsonlTimestampMs ?? mtimeMs(node.jsonlPath ?? node.metaPath);
339
+ // 最終レポートの形で止まっていれば完了、API エラーで途絶えていれば error。
340
+ const settledStatus = (node) => node.finalReportMarker === true && !node.apiErrorMarker ? "completed" : "error";
294
341
  if (sessionAlive === false) {
295
342
  for (const node of tracked.values()) {
296
343
  if (agentStatusById.get(node.nodeId) !== "running")
@@ -300,11 +347,8 @@ export class SubagentTailer {
300
347
  const lastTs = lastActivityMs(node);
301
348
  if (lastTs <= 0 || nowMs - lastTs < this.agentOrphanGraceMs)
302
349
  continue;
303
- deadSweepByNodeId.set(node.nodeId, {
304
- ts: lastTs,
305
- // 最終レポートの形で止まっていれば完了、tool_use のまま止まっていれば中断(error)。
306
- status: node.finalReportMarker === true ? "completed" : "error",
307
- });
350
+ // tool_use のまま止まっていれば中断(error)。
351
+ deadSweepByNodeId.set(node.nodeId, { ts: lastTs, status: settledStatus(node) });
308
352
  }
309
353
  }
310
354
  else {
@@ -313,6 +357,7 @@ export class SubagentTailer {
313
357
  if (deadSweepByNodeId.size > 0)
314
358
  deadSweepByNodeId.clear();
315
359
  const settleCandidates = new Set();
360
+ const notifiedContinuations = new Set();
316
361
  for (const node of tracked.values()) {
317
362
  if (agentStatusById.get(node.nodeId) !== "running")
318
363
  continue;
@@ -326,9 +371,15 @@ export class SubagentTailer {
326
371
  continue;
327
372
  if (node.lastJsonlTimestampMs === null)
328
373
  continue;
329
- if (nowMs - node.lastJsonlTimestampMs < this.agentOrphanGraceMs)
374
+ // stop_reason 無しの暫定的な最終行は「続きの tool_use を生成中」でもあり得るので長い猶予。
375
+ const graceMs = node.finalDefinite ? this.agentOrphanGraceMs : this.tentativeFinalGraceMs;
376
+ if (nowMs - node.lastJsonlTimestampMs < graceMs)
330
377
  continue;
331
378
  settleCandidates.add(node.nodeId);
379
+ const notification = notificationByTaskId.get(node.nodeId) ?? null;
380
+ if (notification !== null && notification.ts !== null && node.lastJsonlTimestampMs > notification.ts) {
381
+ notifiedContinuations.add(node.nodeId);
382
+ }
332
383
  }
333
384
  for (;;) {
334
385
  const blockedOwners = new Set();
@@ -365,6 +416,12 @@ export class SubagentTailer {
365
416
  const node = tracked.get(id);
366
417
  if (node === undefined)
367
418
  continue;
419
+ // 通知済み継続は起動元を問わず承認(起動元へは完了が届いている)。
420
+ if (notifiedContinuations.has(id)) {
421
+ approved.add(id);
422
+ changed = true;
423
+ continue;
424
+ }
368
425
  const ownerId = ownerOf(node);
369
426
  if (ownerId === undefined || ownerId === "root")
370
427
  continue;
@@ -381,7 +438,7 @@ export class SubagentTailer {
381
438
  const node = tracked.get(id);
382
439
  if (node === undefined)
383
440
  continue;
384
- agentOrphanTsByNodeId.set(id, lastActivityMs(node));
441
+ agentOrphanByNodeId.set(id, { ts: lastActivityMs(node), status: settledStatus(node) });
385
442
  }
386
443
  }
387
444
  for (const node of tracked.values()) {
@@ -516,6 +573,8 @@ function discoverMetaFiles(dir, tracked, refreshMetas) {
516
573
  firstJsonlTimestampMs: null,
517
574
  lastJsonlTimestampMs: null,
518
575
  finalReportMarker: null,
576
+ finalDefinite: false,
577
+ apiErrorMarker: false,
519
578
  currentActivity: null,
520
579
  lastKey: null,
521
580
  });
@@ -730,37 +789,128 @@ function extractBackgroundSpawns(line) {
730
789
  return out;
731
790
  }
732
791
  /**
733
- * 親 transcript の `<task-notification>` 行(user メッセージの文字列 content)を解析する。
734
- * バックグラウンドのエージェント/コマンド共通の完了信号で、task-id はエージェントの
735
- * nodeId またはコマンドの taskId に一致する。
792
+ * `<task-notification>` ブロックを運ぶ行の本文と出所(enqueue = 完了時点の正確な ts を
793
+ * 持つ)を返す。配達形は 4 つ:
794
+ * - user 行(文字列 content): 起動元がターン境界で受け取った通知(ts ≈ 完了時刻)
795
+ * - attachment(queued_command) 行: 起動元がターン中だったとき、次の tool_result 境界で
796
+ * 配達された通知(prompt に本文。user 行としては残らない。ts は enqueue 時刻)
797
+ * - queue-operation 行(content): ハーネスのキュー操作ログ。`enqueue` は完了時点で
798
+ * 配達より先に書かれる最速の信号。`remove` は配達後(実測で最大 268s 後)に書かれる
799
+ * ログなので読まない — その ts を通知時刻に採ると、配達遅延の間に起きた再開
800
+ * (SendMessage)を「通知より古い行」と誤認して completed に塗ってしまう。
801
+ * - assistant 行の text ブロック末尾(`<system-reminder>` 包み。Claude Code 2.1.251〜の
802
+ * 停止境界注入): 通知が user 行に残らない配達形。行頭形ブロックの中身だけを返す
803
+ * (引用・fence 内には反応しない。ts は assistant 行 ≈ 配達時刻)。
736
804
  */
737
- function extractTaskNotification(line) {
738
- const content = messageContent(line);
739
- if (typeof content !== "string" || !content.includes("<task-notification>"))
740
- return null;
741
- const taskId = /<task-id>([^<]+)<\/task-id>/.exec(content)?.[1];
742
- if (taskId === undefined)
805
+ function notificationText(line) {
806
+ try {
807
+ const obj = JSON.parse(line);
808
+ if (obj["type"] === "attachment") {
809
+ const attachment = typeof obj["attachment"] === "object" && obj["attachment"] !== null
810
+ ? obj["attachment"]
811
+ : null;
812
+ if (attachment?.["type"] !== "queued_command")
813
+ return null;
814
+ return typeof attachment["prompt"] === "string" ? { text: attachment["prompt"], enqueue: false } : null;
815
+ }
816
+ if (obj["type"] === "queue-operation") {
817
+ if (obj["operation"] !== "enqueue")
818
+ return null;
819
+ return typeof obj["content"] === "string" ? { text: obj["content"], enqueue: true } : null;
820
+ }
821
+ const message = obj["message"];
822
+ if (typeof message === "object" && message !== null) {
823
+ const content = message["content"];
824
+ if (typeof content === "string")
825
+ return { text: content, enqueue: false };
826
+ // 停止境界の背景通知注入(Claude Code 2.1.251〜): 通知が user 行に残らず、直前の
827
+ // assistant text ブロック末尾へ <system-reminder> として追記される。行頭形ブロックの
828
+ // 中身だけを通知本文として読む(表示側の除去と同じ門番なので、モデルが本文や fence
829
+ // 内で引用した <task-notification> には反応しない)。
830
+ if (obj["type"] === "assistant" && Array.isArray(content)) {
831
+ const joined = content
832
+ .flatMap((block) => {
833
+ if (typeof block !== "object" || block === null)
834
+ return [];
835
+ const rec = block;
836
+ return rec["type"] === "text" && typeof rec["text"] === "string" ? [rec["text"]] : [];
837
+ })
838
+ .join("\n");
839
+ if (!joined.includes("<task-notification>"))
840
+ return null;
841
+ const bodies = injectedReminderBodies(joined);
842
+ return bodies.length > 0 ? { text: bodies.join("\n"), enqueue: false } : null;
843
+ }
844
+ return null;
845
+ }
846
+ return typeof obj["content"] === "string" ? { text: obj["content"], enqueue: false } : null;
847
+ }
848
+ catch {
743
849
  return null;
744
- const status = /<status>([^<]+)<\/status>/.exec(content)?.[1] ?? "completed";
745
- const summary = /<summary>([^<]*)<\/summary>/.exec(content)?.[1] ?? "";
746
- const exitCode = /exit code (\d+)/.exec(summary)?.[1];
747
- return {
748
- taskId,
749
- status,
750
- exitCode: exitCode === undefined ? null : Number(exitCode),
751
- ts: timestampMs(line),
752
- };
850
+ }
851
+ }
852
+ /**
853
+ * 行に含まれる `<task-notification>` を全て解析する(1 行に複数ブロックが束ねられる:
854
+ * 同時に終わった背景コマンド 2 件が 1 つの [SYSTEM NOTIFICATION] で届く等)。
855
+ * バックグラウンドのエージェント/コマンド共通の完了信号で、task-id はエージェントの
856
+ * nodeId またはコマンドの taskId に一致する。同じ封筒は完了以外にも使われる
857
+ * (Monitor の進捗 `<event>`、背景コマンドの「対話入力待ちらしい」ヒント)。それらは
858
+ * `<status>` を持たないので、`<status>` のないブロックは完了信号として扱わない。
859
+ */
860
+ function extractTaskNotifications(line) {
861
+ const carried = notificationText(line);
862
+ if (carried === null || !carried.text.includes("<task-notification>"))
863
+ return [];
864
+ const content = carried.text;
865
+ const ts = timestampMs(line);
866
+ const out = [];
867
+ const blockPattern = /<task-notification>([\s\S]*?)(?:<\/task-notification>|$)/g;
868
+ for (const match of content.matchAll(blockPattern)) {
869
+ const block = match[1] ?? "";
870
+ const taskId = /<task-id>([^<]+)<\/task-id>/.exec(block)?.[1];
871
+ if (taskId === undefined)
872
+ continue;
873
+ const status = /<status>([^<]+)<\/status>/.exec(block)?.[1];
874
+ if (status === undefined)
875
+ continue;
876
+ const summary = /<summary>([^<]*)<\/summary>/.exec(block)?.[1] ?? "";
877
+ const exitCode = /exit code (\d+)/.exec(summary)?.[1];
878
+ out.push({
879
+ taskId,
880
+ status,
881
+ exitCode: exitCode === undefined ? null : Number(exitCode),
882
+ ts,
883
+ enqueue: carried.enqueue,
884
+ });
885
+ }
886
+ return out;
753
887
  }
888
+ /** message の生成完了を示す stop_reason(これ以外は「続きがある」か「不明」)。 */
889
+ const TERMINAL_STOP_REASONS = new Set(["end_turn", "stop_sequence", "max_tokens", "refusal"]);
890
+ /** 続きのブロック/ターンが確定している stop_reason(text のみ行でも最終レポートではない)。 */
891
+ const CONTINUING_STOP_REASONS = new Set(["tool_use", "pause_turn"]);
754
892
  /**
755
893
  * message 行の「最終レポートらしさ」を返す:
756
- * true = text のみの assistant 行(サブエージェントはこの形で停止する)
757
- * false = それ以外の message 行(user 行・tool_use を含む assistant 行)
758
- * null = message を持たない行(summary 等。判定を変えない)
759
- * true のまま transcript が静止していればエージェントは停止済み。再開注入
894
+ * final=true = text のみの assistant 行(サブエージェントはこの形で停止する)
895
+ * final=false = それ以外の message 行(user 行・tool_use を含む assistant 行・
896
+ * 生成途中の thinking のみの assistant 行・stop_reason が「続きあり」の text 行)
897
+ * null = message を持たない行(summary 等。判定を変えない)
898
+ * final のまま transcript が静止していればエージェントは停止済み。再開注入
760
899
  * (task-notification / SendMessage)は user 行として届き false へ倒れるため、
761
900
  * 再開直後の長考中を「最終レポート済み」と誤認しない。
901
+ * claude は content ブロックを 1 行ずつ書く(実データ: サブエージェント側 assistant 2.4 万行中
902
+ * 複数ブロックは 1 行、main 側 4.0 万行中 0)。
903
+ * thinking ブロックの行は後続の text/tool_use をまだ生成中の印(最終行になるのは中断時だけ)
904
+ * なので final=false。text 行の stop_reason は:
905
+ * - 終端(end_turn 等)→ definite(生成完了確定。確定形の猶予)
906
+ * - tool_use / pause_turn → 続きの tool_use/ターンが確定 → final=false(message 途中の text 行を
907
+ * main 側 writer はこの形で書く: main transcript で 3,685 行、サブエージェント側は 10 行。
908
+ * 99.9% が同一 message の tool_use 行に続かれ、最終行になった例は両側とも 0)
909
+ * - null / 欠落 / 未知 → 暫定(サブエージェント側 writer は message 途中の text 行を null で
910
+ * 書く(無音の最長は実測 135s、>120s は 0.4%)。一方で null のまま書かれた最終レポートも
911
+ * 版を問わず 6〜30%(全体 11.7%)あり判別不能)→ 呼び出し側が長い猶予で扱う
762
912
  */
763
- function finalReportMarker(line) {
913
+ function messageShape(line) {
764
914
  try {
765
915
  const obj = JSON.parse(line);
766
916
  const message = obj["message"];
@@ -770,14 +920,28 @@ function finalReportMarker(line) {
770
920
  const content = rec["content"];
771
921
  if (content === undefined || content === null)
772
922
  return null;
923
+ const notFinal = { final: false, definite: false, apiError: false };
773
924
  if (rec["role"] !== "assistant")
774
- return false;
925
+ return notFinal;
926
+ const apiError = obj["isApiErrorMessage"] === true;
927
+ const stopReason = typeof rec["stop_reason"] === "string" ? rec["stop_reason"] : null;
928
+ if (stopReason !== null && CONTINUING_STOP_REASONS.has(stopReason))
929
+ return notFinal;
930
+ const definite = stopReason !== null && TERMINAL_STOP_REASONS.has(stopReason);
775
931
  if (typeof content === "string")
776
- return true;
932
+ return { final: true, definite, apiError };
777
933
  if (!Array.isArray(content))
778
934
  return null;
779
- return !content.some((block) => typeof block === "object" && block !== null
780
- && block["type"] === "tool_use");
935
+ const types = content.map((block) => typeof block === "object" && block !== null
936
+ ? block["type"]
937
+ : undefined);
938
+ if (types.includes("tool_use"))
939
+ return notFinal;
940
+ const thinkingOnly = types.length > 0
941
+ && types.every((type) => type === "thinking" || type === "redacted_thinking");
942
+ if (thinkingOnly)
943
+ return notFinal;
944
+ return { final: true, definite, apiError };
781
945
  }
782
946
  catch {
783
947
  return null;