@scotthuang/agent-knock-knock 0.13.13 → 0.13.15

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 (102) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +4 -4
  3. package/dist/src/claude-lifecycle-compatibility.js +25 -4
  4. package/dist/src/claude-lifecycle-compatibility.js.map +1 -1
  5. package/dist/src/claude-local-transcript-provider.js +12 -19
  6. package/dist/src/claude-local-transcript-provider.js.map +1 -1
  7. package/dist/src/claude-terminal-agent-adapter.js +27 -11
  8. package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
  9. package/dist/src/claude-transcript-record-order.d.ts +17 -0
  10. package/dist/src/claude-transcript-record-order.js +81 -0
  11. package/dist/src/claude-transcript-record-order.js.map +1 -0
  12. package/dist/src/codex-app-server-interaction-client.js +4 -3
  13. package/dist/src/codex-app-server-interaction-client.js.map +1 -1
  14. package/dist/src/codex-app-server-read-client.d.ts +19 -1
  15. package/dist/src/codex-app-server-read-client.js +81 -34
  16. package/dist/src/codex-app-server-read-client.js.map +1 -1
  17. package/dist/src/codex-async-question-adapter.js +4 -2
  18. package/dist/src/codex-async-question-adapter.js.map +1 -1
  19. package/dist/src/codex-fullscreen-composer-proof.d.ts +3 -1
  20. package/dist/src/codex-fullscreen-composer-proof.js +113 -17
  21. package/dist/src/codex-fullscreen-composer-proof.js.map +1 -1
  22. package/dist/src/codex-lifecycle-compatibility.d.ts +13 -1
  23. package/dist/src/codex-lifecycle-compatibility.js +37 -2
  24. package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
  25. package/dist/src/codex-paginated-async-answer.js +21 -11
  26. package/dist/src/codex-paginated-async-answer.js.map +1 -1
  27. package/dist/src/codex-paginated-async-response.js +3 -2
  28. package/dist/src/codex-paginated-async-response.js.map +1 -1
  29. package/dist/src/codex-paginated-observation.d.ts +1 -0
  30. package/dist/src/codex-paginated-observation.js +15 -3
  31. package/dist/src/codex-paginated-observation.js.map +1 -1
  32. package/dist/src/codex-paginated-questionnaire-runtime.js +2 -1
  33. package/dist/src/codex-paginated-questionnaire-runtime.js.map +1 -1
  34. package/dist/src/codex-paginated-task.d.ts +8 -3
  35. package/dist/src/codex-paginated-task.js +44 -16
  36. package/dist/src/codex-paginated-task.js.map +1 -1
  37. package/dist/src/codex-paginated-thread-binding.d.ts +9 -0
  38. package/dist/src/codex-paginated-thread-binding.js +66 -27
  39. package/dist/src/codex-paginated-thread-binding.js.map +1 -1
  40. package/dist/src/codex-paginated-thread-facts.d.ts +4 -2
  41. package/dist/src/codex-paginated-watch.d.ts +1 -1
  42. package/dist/src/codex-paginated-watch.js +24 -5
  43. package/dist/src/codex-paginated-watch.js.map +1 -1
  44. package/dist/src/codex-status-history-navigation.d.ts +17 -0
  45. package/dist/src/codex-status-history-navigation.js +261 -0
  46. package/dist/src/codex-status-history-navigation.js.map +1 -0
  47. package/dist/src/codex-terminal-agent-adapter.d.ts +2 -0
  48. package/dist/src/codex-terminal-agent-adapter.js +35 -17
  49. package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
  50. package/dist/src/herdr-terminal-control-provider.d.ts +2 -0
  51. package/dist/src/herdr-terminal-control-provider.js +35 -8
  52. package/dist/src/herdr-terminal-control-provider.js.map +1 -1
  53. package/dist/src/semantic-tool-schemas.js +1 -1
  54. package/dist/src/semantic-tool-schemas.js.map +1 -1
  55. package/dist/src/store.d.ts +1 -1
  56. package/dist/src/store.js +2 -2
  57. package/dist/src/store.js.map +1 -1
  58. package/dist/src/terminal-agent-bridge.d.ts +2 -1
  59. package/dist/src/terminal-agent-bridge.js +80 -10
  60. package/dist/src/terminal-agent-bridge.js.map +1 -1
  61. package/dist/src/terminal-composer-classifier.js +8 -2
  62. package/dist/src/terminal-composer-classifier.js.map +1 -1
  63. package/dist/src/terminal-control-provider.d.ts +4 -0
  64. package/dist/src/terminal-control-provider.js +57 -6
  65. package/dist/src/terminal-control-provider.js.map +1 -1
  66. package/dist/src/terminal-human-explicit-send-cli-adapter.js +11 -0
  67. package/dist/src/terminal-human-explicit-send-cli-adapter.js.map +1 -1
  68. package/dist/src/terminal-model-control-profile.d.ts +3 -1
  69. package/dist/src/terminal-model-control-profile.js +45 -2
  70. package/dist/src/terminal-model-control-profile.js.map +1 -1
  71. package/dist/src/terminal-native-inspection-bridge.js +53 -22
  72. package/dist/src/terminal-native-inspection-bridge.js.map +1 -1
  73. package/dist/src/terminal-questionnaire-adapter.js +24 -4
  74. package/dist/src/terminal-questionnaire-adapter.js.map +1 -1
  75. package/dist/src/terminal-runtime-cli-adapter.js +3 -3
  76. package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
  77. package/dist/src/terminal-send-watch-policy.js +9 -11
  78. package/dist/src/terminal-send-watch-policy.js.map +1 -1
  79. package/dist/src/terminal-watch-cli-adapter.d.ts +5 -10
  80. package/dist/src/terminal-watch-cli-adapter.js +51 -32
  81. package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
  82. package/dist/src/terminal-watch-codec.js +11 -2
  83. package/dist/src/terminal-watch-codec.js.map +1 -1
  84. package/dist/src/terminal-watch-interaction-runtime.js +3 -1
  85. package/dist/src/terminal-watch-interaction-runtime.js.map +1 -1
  86. package/dist/src/terminal-watch-record.d.ts +8 -1
  87. package/dist/src/terminal-watch-record.js +16 -2
  88. package/dist/src/terminal-watch-record.js.map +1 -1
  89. package/dist/src/terminal-watch-send-activity.d.ts +28 -0
  90. package/dist/src/terminal-watch-send-activity.js +65 -0
  91. package/dist/src/terminal-watch-send-activity.js.map +1 -0
  92. package/dist/src/terminal-watch-service.d.ts +5 -0
  93. package/dist/src/terminal-watch-service.js +53 -6
  94. package/dist/src/terminal-watch-service.js.map +1 -1
  95. package/docs/callback-compatibility.md +84 -0
  96. package/docs/claude-2.1.285-compatibility.md +133 -0
  97. package/docs/codex-0.159.0-compatibility.md +82 -0
  98. package/docs/codex-0.159.2-compatibility.md +226 -0
  99. package/docs/quickstart-herdr.md +2 -2
  100. package/docs/quickstart-tmux.md +3 -3
  101. package/package.json +5 -2
  102. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +18 -18
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.13.15 - 2026-10-02
4
+
5
+ - Attempt Codex exact callback observation through validated runtime UI and paginated read contracts on newer versions; preserve exact task identity across compatible backend upgrades.
6
+ - Automatically attach a notification-only terminal-activity Watch when exact Codex or Claude Send preparation is unavailable and physical identity remains safe.
7
+ - Preserve strict native answer permissions and refuse uncertain probe input; include sanitized backend-version and operation diagnostics in read errors.
8
+ - Use store writer protocol 9 with backward-readable anchors, leaving existing private Watch records intact.
9
+
10
+ ## 0.13.14 - 2026-10-01
11
+
12
+ ### Changed
13
+
14
+ - Support Codex CLI 0.159.2 and the reviewed 0.159.0 foreground/0.159.2 shared-backend pair. Bind the physical and backend versions separately for paginated Send, Watch, native questions, and answer receipts; reject unreviewed pairs and backend drift.
15
+ - Add exact Claude Code 2.1.285 lifecycle, native status, question, and model-control profiles while retaining earlier version checks.
16
+
17
+ ### Fixed
18
+
19
+ - Recover clipped Codex `/status` cards through bounded native history navigation, requiring a complete card, unique captured overlap, and restoration before using its thread identity. Correct locale-free tmux viewport parsing, Herdr visible-screen reads, and native style checks.
20
+ - Continue read-only confirmation of a single Codex async answer for up to 15 seconds after dispatch, including a timed-out RPC, without repeating the answer.
21
+ - Recognize Claude's named-session Composer and Bash ask-rule prompt, and read transcript attachments written before their parent records without changing conversation order or weakening identity checks.
22
+
3
23
  ## 0.13.13 - 2026-09-30
4
24
 
5
25
  ### Changed
package/README.md CHANGED
@@ -76,11 +76,11 @@ Open a Web conversation and enter `/akk list`. The connector gives every convers
76
76
 
77
77
  Suppose several Codex or Claude Code jobs are already running in tmux or Herdr:
78
78
 
79
- Codex CLI 0.158.0/0.159.0 supports exact paginated task Watches for ordinary terminal
79
+ Codex CLI 0.158.0/0.159.0/0.159.2 supports exact paginated task Watches for ordinary terminal
80
80
  Send, native question responses, and durable completion callbacks. The adapter
81
81
  checks the foreground thread and server version before attaching; uncertain
82
- answers are never automatically replayed. See the [0.158.0/0.159.0 compatibility
83
- review](docs/codex-0.159.0-compatibility.md) for managed-session and already-open
82
+ answers are never automatically replayed. See the [0.158.0/0.159.0/0.159.2 compatibility
83
+ review](docs/codex-0.159.2-compatibility.md) for managed-session and already-open
84
84
  question boundaries. Codex 0.157.x retains its [partial compatibility](docs/codex-0.157.1-compatibility.md).
85
85
 
86
86
  - **Watch without babysitting.** `/akk watch <terminal>` observes work already in progress and sends a callback when it finishes, needs approval, or becomes blocked. You can leave the terminal and continue from your phone or another chat client.
@@ -137,7 +137,7 @@ Skill SHA-256 digests; an older, missing, or drifted handshake fails closed
137
137
  instead of mounting a partial tool surface. Connector package versions remain
138
138
  independent of one another.
139
139
 
140
- In the current OpenClaw plugin and core Host Adapter, an idle Codex pane with ambiguous foreground rollout identity may advertise `identify_foreground`. That action issues one closed `/status` command to the exact pane. It does not mutate the AKK Store, but it does type into the visible terminal. Its 30-second result is diagnostic only and grants no later authority. The separate `identify_and_send` action keeps one terminal lock across the probe and one requested task, then relies on exact request acceptance—not the status card—for durable Session and Turn identity. List and Status never run this probe. Codex 0.158.0/0.159.0 exact Send and active-task Watch use a separate closed `/status` transaction to bind the foreground paginated thread; subsequent observation is read-only.
140
+ In the current OpenClaw plugin and core Host Adapter, an idle Codex pane with ambiguous foreground rollout identity may advertise `identify_foreground`. That action issues one closed `/status` command to the exact pane. It does not mutate the AKK Store, but it does type into the visible terminal. Its 30-second result is diagnostic only and grants no later authority. The separate `identify_and_send` action keeps one terminal lock across the probe and one requested task, then relies on exact request acceptance—not the status card—for durable Session and Turn identity. List and Status never run this probe. Codex 0.158.0/0.159.0/0.159.2 exact Send and active-task Watch use a separate closed `/status` transaction to bind the foreground paginated thread; subsequent observation is read-only.
141
141
 
142
142
  AKK is local-first: there is no hosted control plane or telemetry. It stores only the local state needed for routing, lifecycle recovery, callback delivery, and idempotency.
143
143
 
@@ -45,8 +45,8 @@ const CLAUDE_STATUS_PANEL_FIELDS_2_1_261 = Object.freeze([
45
45
  ...CLAUDE_STATUS_PANEL_FIELDS_2_1_251,
46
46
  "Organization policy"
47
47
  ]);
48
- // Observed in Claude Code 2.1.282 /status. Keep this outside the verified
49
- // profile registry: only this bounded status-field difference has been checked.
48
+ // Observed in Claude Code 2.1.282 and 2.1.285 /status. The 2.1.282 runtime
49
+ // remains unverified: only its bounded status-field difference was checked.
50
50
  const CLAUDE_STATUS_PANEL_FIELDS_2_1_282 = Object.freeze([
51
51
  ...CLAUDE_STATUS_PANEL_FIELDS_2_1_261,
52
52
  "Auto mode server"
@@ -179,12 +179,33 @@ const CLAUDE_LIFECYCLE_PROFILES = Object.freeze({
179
179
  "2.1.266",
180
180
  "2.1.267"
181
181
  ])
182
+ }),
183
+ "2.1.285": Object.freeze({
184
+ lifecycleBehaviorProfile: "claude-code-2.1.285",
185
+ nativeInspectionBehaviorProfile: "claude-code-2.1.285-native-status",
186
+ nativeInspectionComposerStableMs: 80,
187
+ nativeInspectionComposerSettleTimeoutMs: 5_000,
188
+ nativeStatusPanelFields: CLAUDE_STATUS_PANEL_FIELDS_2_1_282,
189
+ nativeStatusPanelRequiredValues: Object.freeze({
190
+ "Session kind": "interactive"
191
+ }),
192
+ resumableSourceVersions: Object.freeze([
193
+ "2.1.218",
194
+ "2.1.226",
195
+ "2.1.237",
196
+ "2.1.251",
197
+ "2.1.259",
198
+ "2.1.263",
199
+ "2.1.266",
200
+ "2.1.267",
201
+ "2.1.285"
202
+ ])
182
203
  })
183
204
  });
184
205
  /**
185
206
  * Best-effort runtime protocol for complete x.y.z Claude Code versions
186
- * that AKK has not regression-tested yet. This deliberately reuses the newest
187
- * verified, bounded Status modal shape; a real TUI change therefore fails at
207
+ * that AKK has not regression-tested yet. This deliberately reuses the existing
208
+ * bounded Status modal shape; a real TUI change therefore fails at
188
209
  * observation instead of being blocked solely by its version number.
189
210
  */
190
211
  const CLAUDE_UNVERIFIED_LIFECYCLE_PROFILE = Object.freeze({
@@ -1 +1 @@
1
- {"version":3,"file":"claude-lifecycle-compatibility.js","sourceRoot":"","sources":["../../src/claude-lifecycle-compatibility.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-lifecycle-compatibility.js","sourceRoot":"","sources":["../../src/claude-lifecycle-compatibility.ts"],"names":[],"mappings":"AAUA,MAAM,kCAAkC,GAAG,MAAM,CAAC,MAAM,CAAC;IACvD,SAAS;IACT,cAAc;IACd,YAAY;IACZ,KAAK;IACL,YAAY;IACZ,oBAAoB;IACpB,OAAO;IACP,aAAa;IACb,iBAAiB;CAClB,CAAC,CAAC;AAEH,MAAM,kCAAkC,GAAG,MAAM,CAAC,MAAM,CAAC;IACvD,SAAS;IACT,cAAc;IACd,YAAY;IACZ,cAAc;IACd,KAAK;IACL,YAAY;IACZ,oBAAoB;IACpB,OAAO;IACP,aAAa;IACb,iBAAiB;CAClB,CAAC,CAAC;AAEH,MAAM,kCAAkC,GAAG,MAAM,CAAC,MAAM,CAAC;IACvD,SAAS;IACT,cAAc;IACd,YAAY;IACZ,cAAc;IACd,cAAc;IACd,KAAK;IACL,YAAY;IACZ,oBAAoB;IACpB,OAAO;IACP,aAAa;IACb,iBAAiB;IACjB,iBAAiB;IACjB,wBAAwB;IACxB,2BAA2B;CAC5B,CAAC,CAAC;AAEH,2EAA2E;AAC3E,6EAA6E;AAC7E,+EAA+E;AAC/E,yBAAyB;AACzB,MAAM,kCAAkC,GAAG,MAAM,CAAC,MAAM,CAAC;IACvD,GAAG,kCAAkC;IACrC,qBAAqB;CACtB,CAAC,CAAC;AAEH,2EAA2E;AAC3E,4EAA4E;AAC5E,MAAM,kCAAkC,GAAG,MAAM,CAAC,MAAM,CAAC;IACvD,GAAG,kCAAkC;IACrC,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAC1B,6CAA6C,CAAC;AAEhD,MAAM,CAAC,MAAM,4CAA4C,GACvD,mCAAmC,CAAC;AACtC,MAAM,CAAC,MAAM,oDAAoD,GAC/D,yCAAyC,CAAC;AAE5C,MAAM,yBAAyB,GAE3B,MAAM,CAAC,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,wBAAwB,EAAE,qBAAqB;QAC/C,+BAA+B,EAC7B,mCAAmC;QACrC,gCAAgC,EAAE,EAAE;QACpC,uCAAuC,EAAE,KAAK;QAC9C,uBAAuB,EAAE,kCAAkC;QAC3D,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;KACpD,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,wBAAwB,EAAE,qBAAqB;QAC/C,+BAA+B,EAC7B,mCAAmC;QACrC,gCAAgC,EAAE,EAAE;QACpC,uCAAuC,EAAE,KAAK;QAC9C,uBAAuB,EAAE,kCAAkC;QAC3D,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7C,cAAc,EAAE,aAAa;SAC9B,CAAC;QACF,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;KAC/D,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,wBAAwB,EAAE,qBAAqB;QAC/C,+BAA+B,EAC7B,mCAAmC;QACrC,gCAAgC,EAAE,EAAE;QACpC,uCAAuC,EAAE,KAAK;QAC9C,uBAAuB,EAAE,kCAAkC;QAC3D,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7C,cAAc,EAAE,aAAa;SAC9B,CAAC;QACF,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC;YACrC,SAAS;YACT,SAAS;YACT,SAAS;SACV,CAAC;KACH,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,wBAAwB,EAAE,qBAAqB;QAC/C,+BAA+B,EAC7B,mCAAmC;QACrC,gCAAgC,EAAE,EAAE;QACpC,uCAAuC,EAAE,KAAK;QAC9C,uBAAuB,EAAE,kCAAkC;QAC3D,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7C,cAAc,EAAE,aAAa;SAC9B,CAAC;QACF,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC;YACrC,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;SACV,CAAC;KACH,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,wBAAwB,EAAE,qBAAqB;QAC/C,+BAA+B,EAC7B,mCAAmC;QACrC,gCAAgC,EAAE,EAAE;QACpC,uCAAuC,EAAE,KAAK;QAC9C,uBAAuB,EAAE,kCAAkC;QAC3D,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7C,cAAc,EAAE,aAAa;SAC9B,CAAC;QACF,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC;YACrC,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;SACV,CAAC;KACH,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,wBAAwB,EAAE,qBAAqB;QAC/C,+BAA+B,EAC7B,mCAAmC;QACrC,gCAAgC,EAAE,EAAE;QACpC,uCAAuC,EAAE,KAAK;QAC9C,uBAAuB,EAAE,kCAAkC;QAC3D,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7C,cAAc,EAAE,aAAa;SAC9B,CAAC;QACF,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC;YACrC,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;SACV,CAAC;KACH,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,wBAAwB,EAAE,qBAAqB;QAC/C,+BAA+B,EAC7B,mCAAmC;QACrC,gCAAgC,EAAE,EAAE;QACpC,uCAAuC,EAAE,KAAK;QAC9C,uBAAuB,EAAE,kCAAkC;QAC3D,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7C,cAAc,EAAE,aAAa;SAC9B,CAAC;QACF,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC;YACrC,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;SACV,CAAC;KACH,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,wBAAwB,EAAE,qBAAqB;QAC/C,+BAA+B,EAC7B,mCAAmC;QACrC,gCAAgC,EAAE,EAAE;QACpC,uCAAuC,EAAE,KAAK;QAC9C,uBAAuB,EAAE,kCAAkC;QAC3D,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7C,cAAc,EAAE,aAAa;SAC9B,CAAC;QACF,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC;YACrC,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;SACV,CAAC;KACH,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,wBAAwB,EAAE,qBAAqB;QAC/C,+BAA+B,EAC7B,mCAAmC;QACrC,gCAAgC,EAAE,EAAE;QACpC,uCAAuC,EAAE,KAAK;QAC9C,uBAAuB,EAAE,kCAAkC;QAC3D,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7C,cAAc,EAAE,aAAa;SAC9B,CAAC;QACF,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC;YACrC,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;SACV,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,mCAAmC,GACD,MAAM,CAAC,MAAM,CAAC;IAClD,wBAAwB,EACtB,4CAA4C;IAC9C,+BAA+B,EAC7B,oDAAoD;IACtD,gCAAgC,EAAE,EAAE;IACpC,uCAAuC,EAAE,KAAK;IAC9C,uBAAuB,EAAE,kCAAkC;IAC3D,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC7C,cAAc,EAAE,aAAa;KAC9B,CAAC;IACF,wEAAwE;IACxE,yEAAyE;IACzE,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;CAC3C,CAAC,CAAC;AAEL,MAAM,2CAA2C,GACT,MAAM,CAAC,MAAM,CAAC;IAClD,GAAG,mCAAmC;IACtC,uBAAuB,EAAE,kCAAkC;CAC5D,CAAC,CAAC;AAEL,6EAA6E;AAC7E,+EAA+E;AAC/E,iFAAiF;AACjF,MAAM,CAAC,MAAM,gCAAgC,GAAG,SAAS,CAAC;AAE1D,MAAM,UAAU,mCAAmC,CACjD,YAAgC;IAEhC,OAAO,YAAY;QACjB,CAAC,CAAC,yBAAyB,CAAC,YAAY,CAAC;QACzC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,YAAgC;IAEhC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0CAA0C,CACxD,YAAgC;IAEhC,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,mCAAmC,CAAC,YAAY,CAAC;QACtD,CAAC,YAAY,KAAK,SAAS;YACzB,CAAC,CAAC,2CAA2C;YAC7C,CAAC,CAAC,mCAAmC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,YAAgC;IAEhC,IACE,CAAC,4BAA4B,CAAC,YAAY,CAAC;QAC3C,mCAAmC,CAAC,YAAY,CAAC,EACjD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,eAAe,YAAY,0CAA0C;QAC1E,uFAAuF,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,YAAgC;IAEhC,OAAO,mCAAmC,CAAC,YAAY,CAAC;QACtD,EAAE,wBAAwB,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,YAAgC;IAEhC,OAAO,mCAAmC,CAAC,YAAY,CAAC;QACtD,EAAE,+BAA+B,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,gCAAgC;IAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,mBAAuC,EACvC,kBAAsC;IAEtC,OAAO,4BAA4B,CAAC,mBAAmB,CAAC;QACtD,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,qCAAqC;IACnD,OAAO,CAAC,GAAG,IAAI,GAAG,CAChB,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC;aACrC,MAAM,CACL,mCAAmC,EACnC,2CAA2C,CAC5C;aACA,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,CACzD,CAAC,CAAC;AACL,CAAC"}
@@ -4,6 +4,7 @@ import os from "node:os";
4
4
  import path from "node:path";
5
5
  import { isClaudeAgentIdleState } from "./claude-terminal-agent-adapter.js";
6
6
  import { claudeLifecycleSourceVersionSupported, claudeRuntimeLifecycleCompatibilityProfile, DEFAULT_CLAUDE_LIFECYCLE_VERSION, } from "./claude-lifecycle-compatibility.js";
7
+ import { assertParentsPrecedeChildren, earliestClaudeTranscriptRecordOffset, initialClaudeTranscriptCheckpointRecords, orderClaudePrewrittenAttachments } from "./claude-transcript-record-order.js";
7
8
  import { redactString } from "./runtime-log.js";
8
9
  import { isRecord } from "./value-guards.js";
9
10
  import { validateTerminalSubmissionAcceptanceEvidence } from "./terminal-submission-facts.js";
@@ -465,7 +466,7 @@ export function captureClaudeHumanStartedActiveTaskAnchor(options) {
465
466
  throw new Error("Claude active-task transcript has an incomplete JSONL tail; retry");
466
467
  }
467
468
  const recordEntries = readBoundedCompleteJsonlTail(opened.fd, before.size, maxBytes);
468
- const records = recordEntries.map((entry) => entry.record);
469
+ const records = orderClaudePrewrittenAttachments(recordEntries.map((entry) => entry.record));
469
470
  const after = fs.fstatSync(opened.fd);
470
471
  if (!sameStableTranscriptFile(before, after)) {
471
472
  throw new Error("Claude active-task transcript changed while it was captured; retry");
@@ -517,7 +518,8 @@ export function captureClaudeHumanStartedActiveTaskAnchor(options) {
517
518
  })) {
518
519
  return undefined;
519
520
  }
520
- if (!pendingApprovalTurn(snapshot)) {
521
+ const activeTurn = pendingApprovalTurn(snapshot);
522
+ if (!activeTurn) {
521
523
  throw new Error("Claude active root prompt has no unique unfinished foreground chain");
522
524
  }
523
525
  const base = {
@@ -535,7 +537,7 @@ export function captureClaudeHumanStartedActiveTaskAnchor(options) {
535
537
  request_hash: requestHash,
536
538
  claude_version: claudeVersion,
537
539
  transcript_file_id: fileId,
538
- turn_start_offset_bytes: promptEntry.offsetBytes,
540
+ turn_start_offset_bytes: earliestClaudeTranscriptRecordOffset(recordEntries, activeTurn.descendants, promptEntry.offsetBytes),
539
541
  observed_end_offset_bytes: before.size
540
542
  };
541
543
  return {
@@ -604,7 +606,7 @@ export function observeClaudeHumanStartedActiveTask(options) {
604
606
  throw new Error("Claude active-task JSONL record exceeded the bounded local read limit");
605
607
  }
606
608
  const safeResumeOffsetBytes = resumeOffsetBytes + completeLength;
607
- const suffixRecords = readCompleteJsonlRecordEntries(opened.fd, resumeOffsetBytes, completeLength, { preReadBuffer: suffixBuffer.subarray(0, completeLength) }).map((entry) => entry.record);
609
+ const suffixRecords = orderClaudePrewrittenAttachments(readCompleteJsonlRecordEntries(opened.fd, resumeOffsetBytes, completeLength, { preReadBuffer: suffixBuffer.subarray(0, completeLength) }).map((entry) => entry.record));
608
610
  const after = fs.fstatSync(opened.fd);
609
611
  if (!sameStableTranscriptFile(before, after)) {
610
612
  assertObservableClaudeActiveTaskAgent(options.agentRows, anchor);
@@ -615,7 +617,9 @@ export function observeClaudeHumanStartedActiveTask(options) {
615
617
  checkpoint
616
618
  };
617
619
  }
618
- const advanced = advanceClaudeHumanStartedActiveTaskCheckpoint(anchor, checkpoint, suffixRecords, safeResumeOffsetBytes);
620
+ const advanced = advanceClaudeHumanStartedActiveTaskCheckpoint(anchor, checkpoint, checkpoint.record_count === 0
621
+ ? initialClaudeTranscriptCheckpointRecords(suffixRecords, anchor.prompt_uuid, hasTurnCompletionSignal)
622
+ : suffixRecords, safeResumeOffsetBytes);
619
623
  if (advanced.completion) {
620
624
  return { status: "completed", completion: advanced.completion };
621
625
  }
@@ -744,7 +748,7 @@ function isActiveClaudeAgentState(agent) {
744
748
  return agent.status === "working" ||
745
749
  agent.status === "busy" ||
746
750
  (agent.status === "waiting" &&
747
- ["dialog open", "permission prompt"].includes(agent.waitingFor ?? ""));
751
+ ["dialog open", "permission prompt", "input needed"].includes(agent.waitingFor ?? ""));
748
752
  }
749
753
  function isObservableClaudeAgentState(agent) {
750
754
  return isClaudeAgentIdleState(agent) || isActiveClaudeAgentState(agent);
@@ -2090,8 +2094,8 @@ function openRelativeTranscript(projectsRoot, relativePath) {
2090
2094
  }
2091
2095
  }
2092
2096
  function readCompleteJsonlRecords(fd, offset, length) {
2093
- return readCompleteJsonlRecordEntries(fd, offset, length)
2094
- .map((entry) => entry.record);
2097
+ return orderClaudePrewrittenAttachments(readCompleteJsonlRecordEntries(fd, offset, length)
2098
+ .map((entry) => entry.record));
2095
2099
  }
2096
2100
  function readBoundedCompleteJsonlTail(fd, endOffset, maxBytes) {
2097
2101
  const offset = Math.max(0, endOffset - maxBytes);
@@ -2170,17 +2174,6 @@ function descendantRecords(records, recordsByUuid, ancestorUuid, predicate) {
2170
2174
  return records.filter((record) => predicate(record) &&
2171
2175
  descendantChain(recordsByUuid, ancestorUuid, record) !== undefined);
2172
2176
  }
2173
- function assertParentsPrecedeChildren(records, recordsByUuid) {
2174
- const indexes = new Map(records.map((record, index) => [record, index]));
2175
- for (const record of records) {
2176
- const parentUuid = uuidValue(record.parentUuid);
2177
- const parent = parentUuid ? recordsByUuid.get(parentUuid) : undefined;
2178
- if (parent && (indexes.get(parent) ?? Number.POSITIVE_INFINITY) >=
2179
- (indexes.get(record) ?? Number.NEGATIVE_INFINITY)) {
2180
- throw new Error("Claude transcript parent UUID does not precede its child record");
2181
- }
2182
- }
2183
- }
2184
2177
  function descendantChain(recordsByUuid, ancestorUuid, descendant) {
2185
2178
  const reversed = [];
2186
2179
  let current = descendant;