@scotthuang/agent-knock-knock 0.12.11 → 0.12.13

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 (344) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +43 -30
  3. package/dist/src/approval-policy.d.ts +11 -2
  4. package/dist/src/approval-policy.js +33 -7
  5. package/dist/src/approval-policy.js.map +1 -1
  6. package/dist/src/callback-cli-adapter.d.ts +47 -0
  7. package/dist/src/callback-cli-adapter.js +156 -0
  8. package/dist/src/callback-cli-adapter.js.map +1 -0
  9. package/dist/src/callback-outbox-policy.d.ts +95 -0
  10. package/dist/src/callback-outbox-policy.js +149 -0
  11. package/dist/src/callback-outbox-policy.js.map +1 -0
  12. package/dist/src/callback-outbox-service.d.ts +247 -0
  13. package/dist/src/callback-outbox-service.js +1053 -0
  14. package/dist/src/callback-outbox-service.js.map +1 -0
  15. package/dist/src/callback-outbox-settlement.d.ts +54 -0
  16. package/dist/src/callback-outbox-settlement.js +241 -0
  17. package/dist/src/callback-outbox-settlement.js.map +1 -0
  18. package/dist/src/canonical-json.d.ts +1 -0
  19. package/dist/src/canonical-json.js +14 -0
  20. package/dist/src/canonical-json.js.map +1 -0
  21. package/dist/src/claude-lifecycle-compatibility.js +15 -0
  22. package/dist/src/claude-lifecycle-compatibility.js.map +1 -1
  23. package/dist/src/claude-local-transcript-provider.d.ts +82 -1
  24. package/dist/src/claude-local-transcript-provider.js +873 -23
  25. package/dist/src/claude-local-transcript-provider.js.map +1 -1
  26. package/dist/src/cli-command-runtime.d.ts +14 -0
  27. package/dist/src/cli-command-runtime.js +164 -0
  28. package/dist/src/cli-command-runtime.js.map +1 -0
  29. package/dist/src/cli-core.d.ts +4 -42
  30. package/dist/src/cli-core.js +958 -28684
  31. package/dist/src/cli-core.js.map +1 -1
  32. package/dist/src/cli-runtime-context.d.ts +57 -0
  33. package/dist/src/cli-runtime-context.js +118 -0
  34. package/dist/src/cli-runtime-context.js.map +1 -0
  35. package/dist/src/codex-lifecycle-compatibility.js +2 -1
  36. package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
  37. package/dist/src/codex-local-session-provider.d.ts +18 -0
  38. package/dist/src/codex-local-session-provider.js +67 -0
  39. package/dist/src/codex-local-session-provider.js.map +1 -1
  40. package/dist/src/codex-session-provider.js +1 -3
  41. package/dist/src/codex-session-provider.js.map +1 -1
  42. package/dist/src/conversation-trace.d.ts +30 -0
  43. package/dist/src/conversation-trace.js +185 -0
  44. package/dist/src/conversation-trace.js.map +1 -0
  45. package/dist/src/deferred-foreground-application-service.d.ts +84 -0
  46. package/dist/src/deferred-foreground-application-service.js +742 -0
  47. package/dist/src/deferred-foreground-application-service.js.map +1 -0
  48. package/dist/src/deferred-foreground-authority-cli-adapter.d.ts +78 -0
  49. package/dist/src/deferred-foreground-authority-cli-adapter.js +795 -0
  50. package/dist/src/deferred-foreground-authority-cli-adapter.js.map +1 -0
  51. package/dist/src/deferred-foreground-boundary.d.ts +61 -0
  52. package/dist/src/deferred-foreground-boundary.js +2 -0
  53. package/dist/src/deferred-foreground-boundary.js.map +1 -0
  54. package/dist/src/deferred-foreground-capability.d.ts +4 -0
  55. package/dist/src/deferred-foreground-capability.js +184 -0
  56. package/dist/src/deferred-foreground-capability.js.map +1 -0
  57. package/dist/src/deferred-foreground-preparation-cli-adapter.d.ts +53 -0
  58. package/dist/src/deferred-foreground-preparation-cli-adapter.js +210 -0
  59. package/dist/src/deferred-foreground-preparation-cli-adapter.js.map +1 -0
  60. package/dist/src/deferred-foreground-preparation-service.d.ts +72 -0
  61. package/dist/src/deferred-foreground-preparation-service.js +179 -0
  62. package/dist/src/deferred-foreground-preparation-service.js.map +1 -0
  63. package/dist/src/deferred-foreground-recovery-cli-adapter.d.ts +139 -0
  64. package/dist/src/deferred-foreground-recovery-cli-adapter.js +1125 -0
  65. package/dist/src/deferred-foreground-recovery-cli-adapter.js.map +1 -0
  66. package/dist/src/deferred-foreground-recovery-service.d.ts +48 -0
  67. package/dist/src/deferred-foreground-recovery-service.js +91 -0
  68. package/dist/src/deferred-foreground-recovery-service.js.map +1 -0
  69. package/dist/src/deferred-foreground-transfer-policy.d.ts +2 -0
  70. package/dist/src/deferred-foreground-transfer-policy.js +10 -0
  71. package/dist/src/deferred-foreground-transfer-policy.js.map +1 -0
  72. package/dist/src/deferred-foreground-transfer.js +46 -105
  73. package/dist/src/deferred-foreground-transfer.js.map +1 -1
  74. package/dist/src/doctor-capabilities.d.ts +9 -0
  75. package/dist/src/doctor-capabilities.js +22 -0
  76. package/dist/src/doctor-capabilities.js.map +1 -1
  77. package/dist/src/durable-json-file.d.ts +22 -0
  78. package/dist/src/durable-json-file.js +127 -0
  79. package/dist/src/durable-json-file.js.map +1 -0
  80. package/dist/src/file-lock-cli-adapter.d.ts +43 -0
  81. package/dist/src/file-lock-cli-adapter.js +150 -0
  82. package/dist/src/file-lock-cli-adapter.js.map +1 -0
  83. package/dist/src/herdr-terminal-control-provider.js +1 -3
  84. package/dist/src/herdr-terminal-control-provider.js.map +1 -1
  85. package/dist/src/install-doctor-command-adapter.d.ts +17 -0
  86. package/dist/src/install-doctor-command-adapter.js +225 -0
  87. package/dist/src/install-doctor-command-adapter.js.map +1 -0
  88. package/dist/src/live-lifecycle-evidence.js +76 -46
  89. package/dist/src/live-lifecycle-evidence.js.map +1 -1
  90. package/dist/src/live-lifecycle-smoke.js +74 -50
  91. package/dist/src/live-lifecycle-smoke.js.map +1 -1
  92. package/dist/src/managed-session.d.ts +2 -0
  93. package/dist/src/managed-session.js +24 -0
  94. package/dist/src/managed-session.js.map +1 -1
  95. package/dist/src/managed-turn-recovery-service.d.ts +86 -0
  96. package/dist/src/managed-turn-recovery-service.js +145 -0
  97. package/dist/src/managed-turn-recovery-service.js.map +1 -0
  98. package/dist/src/mutation-transaction.d.ts +48 -0
  99. package/dist/src/mutation-transaction.js +73 -0
  100. package/dist/src/mutation-transaction.js.map +1 -0
  101. package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +154 -0
  102. package/dist/src/native-thread-lifecycle-cli-adapter.js +786 -0
  103. package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -0
  104. package/dist/src/native-thread-lifecycle-ledger-cli-adapter.d.ts +25 -0
  105. package/dist/src/native-thread-lifecycle-ledger-cli-adapter.js +50 -0
  106. package/dist/src/native-thread-lifecycle-ledger-cli-adapter.js.map +1 -0
  107. package/dist/src/native-thread-lifecycle-query-service.d.ts +75 -0
  108. package/dist/src/native-thread-lifecycle-query-service.js +297 -0
  109. package/dist/src/native-thread-lifecycle-query-service.js.map +1 -0
  110. package/dist/src/native-thread-lifecycle-recovery-adapter.d.ts +45 -0
  111. package/dist/src/native-thread-lifecycle-recovery-adapter.js +154 -0
  112. package/dist/src/native-thread-lifecycle-recovery-adapter.js.map +1 -0
  113. package/dist/src/native-thread-lifecycle-recovery-service.d.ts +211 -0
  114. package/dist/src/native-thread-lifecycle-recovery-service.js +1093 -0
  115. package/dist/src/native-thread-lifecycle-recovery-service.js.map +1 -0
  116. package/dist/src/native-thread-resume-snapshot-policy.d.ts +73 -0
  117. package/dist/src/native-thread-resume-snapshot-policy.js +218 -0
  118. package/dist/src/native-thread-resume-snapshot-policy.js.map +1 -0
  119. package/dist/src/native-thread-resume-snapshot.d.ts +3 -61
  120. package/dist/src/native-thread-resume-snapshot.js +2 -143
  121. package/dist/src/native-thread-resume-snapshot.js.map +1 -1
  122. package/dist/src/native-thread-transition-application.d.ts +147 -0
  123. package/dist/src/native-thread-transition-application.js +974 -0
  124. package/dist/src/native-thread-transition-application.js.map +1 -0
  125. package/dist/src/native-thread-transition-policy.d.ts +127 -0
  126. package/dist/src/native-thread-transition-policy.js +154 -0
  127. package/dist/src/native-thread-transition-policy.js.map +1 -0
  128. package/dist/src/native-thread-transition-resource-adapter.d.ts +12 -0
  129. package/dist/src/native-thread-transition-resource-adapter.js +44 -0
  130. package/dist/src/native-thread-transition-resource-adapter.js.map +1 -0
  131. package/dist/src/native-thread-transition-settlement-service.d.ts +94 -0
  132. package/dist/src/native-thread-transition-settlement-service.js +134 -0
  133. package/dist/src/native-thread-transition-settlement-service.js.map +1 -0
  134. package/dist/src/native-thread-transition-verification-adapter.d.ts +62 -0
  135. package/dist/src/native-thread-transition-verification-adapter.js +451 -0
  136. package/dist/src/native-thread-transition-verification-adapter.js.map +1 -0
  137. package/dist/src/openclaw-callback-transport.d.ts +69 -0
  138. package/dist/src/openclaw-callback-transport.js +583 -0
  139. package/dist/src/openclaw-callback-transport.js.map +1 -0
  140. package/dist/src/openclaw-plugin-callback-adapter.d.ts +1 -0
  141. package/dist/src/openclaw-plugin-callback-adapter.js +423 -0
  142. package/dist/src/openclaw-plugin-callback-adapter.js.map +1 -0
  143. package/dist/src/openclaw-plugin-command-adapter.d.ts +16 -0
  144. package/dist/src/openclaw-plugin-command-adapter.js +1868 -0
  145. package/dist/src/openclaw-plugin-command-adapter.js.map +1 -0
  146. package/dist/src/openclaw-plugin-helpers.d.ts +27 -4
  147. package/dist/src/openclaw-plugin-helpers.js +356 -81
  148. package/dist/src/openclaw-plugin-helpers.js.map +1 -1
  149. package/dist/src/openclaw-plugin-schemas.d.ts +358 -0
  150. package/dist/src/openclaw-plugin-schemas.js +366 -0
  151. package/dist/src/openclaw-plugin-schemas.js.map +1 -0
  152. package/dist/src/openclaw-plugin-supervisor.d.ts +6 -0
  153. package/dist/src/openclaw-plugin-supervisor.js +123 -0
  154. package/dist/src/openclaw-plugin-supervisor.js.map +1 -0
  155. package/dist/src/openclaw-plugin.js +7 -2212
  156. package/dist/src/openclaw-plugin.js.map +1 -1
  157. package/dist/src/openclaw-private-authority-offers.d.ts +22 -0
  158. package/dist/src/openclaw-private-authority-offers.js +177 -0
  159. package/dist/src/openclaw-private-authority-offers.js.map +1 -0
  160. package/dist/src/protocol.d.ts +5 -0
  161. package/dist/src/protocol.js +59 -3
  162. package/dist/src/protocol.js.map +1 -1
  163. package/dist/src/session-store.d.ts +1 -0
  164. package/dist/src/session-store.js +84 -106
  165. package/dist/src/session-store.js.map +1 -1
  166. package/dist/src/store.d.ts +1 -0
  167. package/dist/src/store.js +5 -2
  168. package/dist/src/store.js.map +1 -1
  169. package/dist/src/terminal-acceptance-application-service.d.ts +65 -0
  170. package/dist/src/terminal-acceptance-application-service.js +63 -0
  171. package/dist/src/terminal-acceptance-application-service.js.map +1 -0
  172. package/dist/src/terminal-acceptance-cli-adapter.d.ts +210 -0
  173. package/dist/src/terminal-acceptance-cli-adapter.js +957 -0
  174. package/dist/src/terminal-acceptance-cli-adapter.js.map +1 -0
  175. package/dist/src/terminal-action-projection.d.ts +309 -0
  176. package/dist/src/terminal-action-projection.js +376 -0
  177. package/dist/src/terminal-action-projection.js.map +1 -0
  178. package/dist/src/terminal-agent-bridge.d.ts +3 -0
  179. package/dist/src/terminal-agent-bridge.js +29 -8
  180. package/dist/src/terminal-agent-bridge.js.map +1 -1
  181. package/dist/src/terminal-authority-policy.d.ts +141 -0
  182. package/dist/src/terminal-authority-policy.js +367 -0
  183. package/dist/src/terminal-authority-policy.js.map +1 -0
  184. package/dist/src/terminal-binding-authority.d.ts +118 -0
  185. package/dist/src/terminal-binding-authority.js +245 -0
  186. package/dist/src/terminal-binding-authority.js.map +1 -0
  187. package/dist/src/terminal-binding-reconciliation-service.d.ts +75 -0
  188. package/dist/src/terminal-binding-reconciliation-service.js +73 -0
  189. package/dist/src/terminal-binding-reconciliation-service.js.map +1 -0
  190. package/dist/src/terminal-command-cli-adapter.d.ts +380 -0
  191. package/dist/src/terminal-command-cli-adapter.js +3288 -0
  192. package/dist/src/terminal-command-cli-adapter.js.map +1 -0
  193. package/dist/src/terminal-control-ref.d.ts +4 -0
  194. package/dist/src/terminal-control-ref.js +11 -8
  195. package/dist/src/terminal-control-ref.js.map +1 -1
  196. package/dist/src/terminal-delegate-cli-adapter.d.ts +41 -0
  197. package/dist/src/terminal-delegate-cli-adapter.js +242 -0
  198. package/dist/src/terminal-delegate-cli-adapter.js.map +1 -0
  199. package/dist/src/terminal-dispatch-abort.d.ts +22 -0
  200. package/dist/src/terminal-dispatch-abort.js +30 -0
  201. package/dist/src/terminal-dispatch-abort.js.map +1 -0
  202. package/dist/src/terminal-dispatch-application.d.ts +115 -0
  203. package/dist/src/terminal-dispatch-application.js +478 -0
  204. package/dist/src/terminal-dispatch-application.js.map +1 -0
  205. package/dist/src/terminal-dispatch-capability.d.ts +63 -0
  206. package/dist/src/terminal-dispatch-capability.js +133 -0
  207. package/dist/src/terminal-dispatch-capability.js.map +1 -0
  208. package/dist/src/terminal-dispatch-completion-cli-adapter.d.ts +22 -0
  209. package/dist/src/terminal-dispatch-completion-cli-adapter.js +96 -0
  210. package/dist/src/terminal-dispatch-completion-cli-adapter.js.map +1 -0
  211. package/dist/src/terminal-dispatch-composition.d.ts +79 -0
  212. package/dist/src/terminal-dispatch-composition.js +2 -0
  213. package/dist/src/terminal-dispatch-composition.js.map +1 -0
  214. package/dist/src/terminal-dispatch-execution.d.ts +290 -0
  215. package/dist/src/terminal-dispatch-execution.js +916 -0
  216. package/dist/src/terminal-dispatch-execution.js.map +1 -0
  217. package/dist/src/terminal-dispatch-ledger-codec.d.ts +110 -0
  218. package/dist/src/terminal-dispatch-ledger-codec.js +399 -0
  219. package/dist/src/terminal-dispatch-ledger-codec.js.map +1 -0
  220. package/dist/src/terminal-dispatch-policy.d.ts +93 -0
  221. package/dist/src/terminal-dispatch-policy.js +122 -0
  222. package/dist/src/terminal-dispatch-policy.js.map +1 -0
  223. package/dist/src/terminal-dispatch-presenter.d.ts +65 -0
  224. package/dist/src/terminal-dispatch-presenter.js +258 -0
  225. package/dist/src/terminal-dispatch-presenter.js.map +1 -0
  226. package/dist/src/terminal-dispatch-receipt.d.ts +79 -0
  227. package/dist/src/terminal-dispatch-receipt.js +314 -0
  228. package/dist/src/terminal-dispatch-receipt.js.map +1 -0
  229. package/dist/src/terminal-dispatch-recovery-cli-adapter.d.ts +132 -0
  230. package/dist/src/terminal-dispatch-recovery-cli-adapter.js +1330 -0
  231. package/dist/src/terminal-dispatch-recovery-cli-adapter.js.map +1 -0
  232. package/dist/src/terminal-dispatch-recovery-service.d.ts +271 -0
  233. package/dist/src/terminal-dispatch-recovery-service.js +374 -0
  234. package/dist/src/terminal-dispatch-recovery-service.js.map +1 -0
  235. package/dist/src/terminal-dispatch-repository-cli-adapter.d.ts +35 -0
  236. package/dist/src/terminal-dispatch-repository-cli-adapter.js +483 -0
  237. package/dist/src/terminal-dispatch-repository-cli-adapter.js.map +1 -0
  238. package/dist/src/terminal-handoff-application-service.d.ts +7 -0
  239. package/dist/src/terminal-handoff-application-service.js +18 -0
  240. package/dist/src/terminal-handoff-application-service.js.map +1 -0
  241. package/dist/src/terminal-handoff-cli-adapter.d.ts +229 -0
  242. package/dist/src/terminal-handoff-cli-adapter.js +1389 -0
  243. package/dist/src/terminal-handoff-cli-adapter.js.map +1 -0
  244. package/dist/src/terminal-handoff-facts.d.ts +12 -0
  245. package/dist/src/terminal-handoff-facts.js +16 -0
  246. package/dist/src/terminal-handoff-facts.js.map +1 -0
  247. package/dist/src/terminal-identity-authority-cli-adapter.d.ts +318 -0
  248. package/dist/src/terminal-identity-authority-cli-adapter.js +1072 -0
  249. package/dist/src/terminal-identity-authority-cli-adapter.js.map +1 -0
  250. package/dist/src/terminal-identity-authority-service.d.ts +48 -0
  251. package/dist/src/terminal-identity-authority-service.js +45 -0
  252. package/dist/src/terminal-identity-authority-service.js.map +1 -0
  253. package/dist/src/terminal-list-cli-adapter.d.ts +274 -0
  254. package/dist/src/terminal-list-cli-adapter.js +2444 -0
  255. package/dist/src/terminal-list-cli-adapter.js.map +1 -0
  256. package/dist/src/terminal-list-renderer.d.ts +34 -0
  257. package/dist/src/terminal-list-renderer.js +643 -0
  258. package/dist/src/terminal-list-renderer.js.map +1 -0
  259. package/dist/src/terminal-maintenance-cli-adapter.d.ts +102 -0
  260. package/dist/src/terminal-maintenance-cli-adapter.js +1059 -0
  261. package/dist/src/terminal-maintenance-cli-adapter.js.map +1 -0
  262. package/dist/src/terminal-monitor-application-service.d.ts +275 -0
  263. package/dist/src/terminal-monitor-application-service.js +982 -0
  264. package/dist/src/terminal-monitor-application-service.js.map +1 -0
  265. package/dist/src/terminal-monitor-cli-adapter.d.ts +130 -0
  266. package/dist/src/terminal-monitor-cli-adapter.js +442 -0
  267. package/dist/src/terminal-monitor-cli-adapter.js.map +1 -0
  268. package/dist/src/terminal-monitor-decision-policy.d.ts +98 -0
  269. package/dist/src/terminal-monitor-decision-policy.js +246 -0
  270. package/dist/src/terminal-monitor-decision-policy.js.map +1 -0
  271. package/dist/src/terminal-monitor-launch-plan.d.ts +45 -0
  272. package/dist/src/terminal-monitor-launch-plan.js +94 -0
  273. package/dist/src/terminal-monitor-launch-plan.js.map +1 -0
  274. package/dist/src/terminal-monitor-ownership-policy.d.ts +31 -0
  275. package/dist/src/terminal-monitor-ownership-policy.js +64 -0
  276. package/dist/src/terminal-monitor-ownership-policy.js.map +1 -0
  277. package/dist/src/terminal-monitor-poll-policy.d.ts +48 -0
  278. package/dist/src/terminal-monitor-poll-policy.js +67 -0
  279. package/dist/src/terminal-monitor-poll-policy.js.map +1 -0
  280. package/dist/src/terminal-monitor-reconciliation-eligibility.d.ts +53 -0
  281. package/dist/src/terminal-monitor-reconciliation-eligibility.js +114 -0
  282. package/dist/src/terminal-monitor-reconciliation-eligibility.js.map +1 -0
  283. package/dist/src/terminal-monitor-state-cli-adapter.d.ts +106 -0
  284. package/dist/src/terminal-monitor-state-cli-adapter.js +1492 -0
  285. package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -0
  286. package/dist/src/terminal-monitor-state-reconciliation-service.d.ts +87 -0
  287. package/dist/src/terminal-monitor-state-reconciliation-service.js +106 -0
  288. package/dist/src/terminal-monitor-state-reconciliation-service.js.map +1 -0
  289. package/dist/src/terminal-monitor-supervision-cli-adapter.d.ts +122 -0
  290. package/dist/src/terminal-monitor-supervision-cli-adapter.js +685 -0
  291. package/dist/src/terminal-monitor-supervision-cli-adapter.js.map +1 -0
  292. package/dist/src/terminal-process-facts.d.ts +2 -0
  293. package/dist/src/terminal-process-facts.js +19 -0
  294. package/dist/src/terminal-process-facts.js.map +1 -0
  295. package/dist/src/terminal-process-source.d.ts +6 -4
  296. package/dist/src/terminal-process-source.js +25 -20
  297. package/dist/src/terminal-process-source.js.map +1 -1
  298. package/dist/src/terminal-runtime-cli-adapter.d.ts +80 -0
  299. package/dist/src/terminal-runtime-cli-adapter.js +488 -0
  300. package/dist/src/terminal-runtime-cli-adapter.js.map +1 -0
  301. package/dist/src/terminal-scoped-approval-authority.d.ts +62 -0
  302. package/dist/src/terminal-scoped-approval-authority.js +281 -0
  303. package/dist/src/terminal-scoped-approval-authority.js.map +1 -0
  304. package/dist/src/terminal-selector-projection-service.d.ts +26 -0
  305. package/dist/src/terminal-selector-projection-service.js +81 -0
  306. package/dist/src/terminal-selector-projection-service.js.map +1 -0
  307. package/dist/src/terminal-status-cli-adapter.d.ts +126 -0
  308. package/dist/src/terminal-status-cli-adapter.js +577 -0
  309. package/dist/src/terminal-status-cli-adapter.js.map +1 -0
  310. package/dist/src/terminal-status-facts.d.ts +56 -0
  311. package/dist/src/terminal-status-facts.js +199 -0
  312. package/dist/src/terminal-status-facts.js.map +1 -0
  313. package/dist/src/terminal-submission-acceptance.d.ts +62 -145
  314. package/dist/src/terminal-submission-acceptance.js +555 -222
  315. package/dist/src/terminal-submission-acceptance.js.map +1 -1
  316. package/dist/src/terminal-submission-facts.d.ts +123 -0
  317. package/dist/src/terminal-submission-facts.js +205 -0
  318. package/dist/src/terminal-submission-facts.js.map +1 -0
  319. package/dist/src/terminal-turn-binding-authority-cli-adapter.d.ts +14 -0
  320. package/dist/src/terminal-turn-binding-authority-cli-adapter.js +90 -0
  321. package/dist/src/terminal-turn-binding-authority-cli-adapter.js.map +1 -0
  322. package/dist/src/terminal-watch-callback-cli-adapter.d.ts +20 -0
  323. package/dist/src/terminal-watch-callback-cli-adapter.js +55 -0
  324. package/dist/src/terminal-watch-callback-cli-adapter.js.map +1 -0
  325. package/dist/src/terminal-watch-cli-adapter.d.ts +64 -0
  326. package/dist/src/terminal-watch-cli-adapter.js +508 -0
  327. package/dist/src/terminal-watch-cli-adapter.js.map +1 -0
  328. package/dist/src/terminal-watch-service.d.ts +97 -0
  329. package/dist/src/terminal-watch-service.js +714 -0
  330. package/dist/src/terminal-watch-service.js.map +1 -0
  331. package/dist/src/terminal-watch-store.d.ts +149 -0
  332. package/dist/src/terminal-watch-store.js +861 -0
  333. package/dist/src/terminal-watch-store.js.map +1 -0
  334. package/dist/src/value-guards.d.ts +4 -0
  335. package/dist/src/value-guards.js +12 -0
  336. package/dist/src/value-guards.js.map +1 -0
  337. package/dist/src/verified-dead-agent-policy.d.ts +192 -0
  338. package/dist/src/verified-dead-agent-policy.js +262 -0
  339. package/dist/src/verified-dead-agent-policy.js.map +1 -0
  340. package/docs/quickstart-herdr.md +8 -0
  341. package/docs/quickstart-tmux.md +33 -6
  342. package/openclaw.plugin.json +11 -3
  343. package/package.json +3 -1
  344. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +58 -40
@@ -0,0 +1,134 @@
1
+ import { managedSessionRevision, nativeThreadTransitionRevision } from "./managed-session.js";
2
+ import { decideNativeThreadTransitionFailure, reduceNativeThreadTransitionPhase } from "./native-thread-transition-policy.js";
3
+ export async function settleVerifiedNativeThreadTransition(request, scopes, resources, ports) {
4
+ const observed = await ports.verification(scopes, resources, request.verification);
5
+ const verifiedAt = ports.runtime.now();
6
+ const finalized = ports.effects.finalizeIdentity(observed, request.transition, verifiedAt);
7
+ let transition = reduceNativeThreadTransitionPhase(request.transition, {
8
+ type: "target_verified",
9
+ at: verifiedAt.toISOString(),
10
+ afterBinding: finalized.binding
11
+ });
12
+ transition = ports.persistence.saveTransition(scopes, resources, transition, { expectedRevision: nativeThreadTransitionRevision(transition) });
13
+ ports.runtime.crashAfterVerified();
14
+ await ports.effects.assertTargetOwnership(scopes, resources, transition);
15
+ if (ports.runtime.injectTargetConflict()) {
16
+ ports.persistence.saveSession(scopes, resources, {
17
+ schema: "agent-knock-knock/session",
18
+ version: 1,
19
+ session_id: transition.target_session_id,
20
+ agent: transition.agent,
21
+ workspace: ports.effects.targetConflictWorkspace(),
22
+ status: "detached",
23
+ binding: finalized.binding,
24
+ lineage: { created_by: "attach" },
25
+ created_at: verifiedAt.toISOString(),
26
+ updated_at: verifiedAt.toISOString(),
27
+ last_transition_id: "injected-target-conflict"
28
+ }, { expectedRevision: null });
29
+ }
30
+ const committedTarget = ports.persistence.commitVerified(scopes, resources, transition, verifiedAt.toISOString());
31
+ const committedAt = ports.runtime.now().toISOString();
32
+ transition = reduceNativeThreadTransitionPhase(transition, {
33
+ type: "commit_recorded",
34
+ at: committedAt
35
+ });
36
+ transition = ports.persistence.saveTransition(scopes, resources, transition, { expectedRevision: nativeThreadTransitionRevision(transition) });
37
+ ports.persistence.saveLedger(scopes, resources, transition, {
38
+ phase: "command_resolved",
39
+ at: committedAt,
40
+ binding: finalized.binding,
41
+ reason: "native thread transition committed"
42
+ }, {
43
+ expectedTransitionId: transition.transition_id,
44
+ expectedStatus: "submitted"
45
+ });
46
+ ports.present({
47
+ status: "committed",
48
+ transition,
49
+ identity: finalized.identity,
50
+ binding: finalized.binding,
51
+ committedTarget
52
+ });
53
+ }
54
+ export async function settleFailedNativeThreadTransition(request, error, scopes, resources, ports) {
55
+ const failedAt = ports.runtime.now().toISOString();
56
+ const message = error instanceof Error ? error.message : String(error);
57
+ const durable = ports.persistence.loadTransition(scopes, resources, request.transitionId);
58
+ const decision = decideNativeThreadTransitionFailure({
59
+ durableStatus: durable.status,
60
+ inputStarted: request.inputStarted,
61
+ errorProvesInputNotStarted: ports.runtime.errorProvesInputNotStarted(error)
62
+ });
63
+ if (decision.action === "report_committed_bookkeeping_failure") {
64
+ throw new Error(`native thread transition ${request.transitionId} committed, but final ` +
65
+ `bookkeeping failed: ${message}`);
66
+ }
67
+ if (decision.action === "require_verified_recovery") {
68
+ ports.persistence.saveLedger(scopes, resources, durable, {
69
+ phase: "uncertain_reason_error",
70
+ at: failedAt,
71
+ reason: "verified lifecycle commit was interrupted; recovery must revalidate before roll-forward",
72
+ error: ports.runtime.summarizeError(message)
73
+ }, { expectedTransitionId: request.transitionId });
74
+ ports.present({
75
+ status: "verified_recovery_required",
76
+ transitionId: request.transitionId,
77
+ reason: message
78
+ });
79
+ return;
80
+ }
81
+ if (decision.action === "abort_before_terminal_input") {
82
+ let aborted = reduceNativeThreadTransitionPhase(durable, {
83
+ type: "aborted_before_input",
84
+ at: failedAt,
85
+ error: message
86
+ });
87
+ aborted = ports.persistence.saveTransition(scopes, resources, aborted, { expectedRevision: nativeThreadTransitionRevision(durable) });
88
+ if (request.sourceBefore && request.sourceTransitioning) {
89
+ ports.persistence.saveSession(scopes, resources, {
90
+ ...request.sourceTransitioning,
91
+ status: request.sourceBefore.status,
92
+ last_transition_id: request.sourceBefore.last_transition_id,
93
+ updated_at: failedAt
94
+ }, {
95
+ expectedRevision: managedSessionRevision(request.sourceTransitioning)
96
+ });
97
+ }
98
+ ports.persistence.saveLedger(scopes, resources, aborted, {
99
+ phase: "resolved",
100
+ at: failedAt,
101
+ reason: "native thread transition aborted before terminal input"
102
+ }, { expectedTransitionId: request.transitionId });
103
+ throw error;
104
+ }
105
+ let uncertain = reduceNativeThreadTransitionPhase(durable, {
106
+ type: "outcome_uncertain",
107
+ at: failedAt,
108
+ error: message
109
+ });
110
+ uncertain = ports.persistence.saveTransition(scopes, resources, uncertain, { expectedRevision: nativeThreadTransitionRevision(durable) });
111
+ if (request.sourceBefore && request.sourceTransitioning) {
112
+ ports.persistence.saveSession(scopes, resources, {
113
+ ...request.sourceTransitioning,
114
+ status: "quarantined",
115
+ quarantine_reason: "native thread transition outcome is uncertain",
116
+ last_transition_id: request.transitionId,
117
+ updated_at: failedAt
118
+ }, {
119
+ expectedRevision: managedSessionRevision(request.sourceTransitioning)
120
+ });
121
+ }
122
+ ports.persistence.saveLedger(scopes, resources, uncertain, {
123
+ phase: "uncertain_error_reason",
124
+ at: failedAt,
125
+ error: ports.runtime.summarizeError(message),
126
+ reason: "native thread transition could not be verified"
127
+ }, { expectedTransitionId: request.transitionId });
128
+ ports.present({
129
+ status: "uncertain",
130
+ transitionId: request.transitionId,
131
+ reason: message
132
+ });
133
+ }
134
+ //# sourceMappingURL=native-thread-transition-settlement-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-thread-transition-settlement-service.js","sourceRoot":"","sources":["../../src/native-thread-transition-settlement-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { TerminalNativeIdentityFence, TerminalRuntimeIdentity, TerminalThreadLifecycleAgentRow, TerminalThreadLifecycleCapabilities, TerminalThreadLifecycleCandidateToken, TerminalThreadLifecycleOperation, TerminalThreadLifecyclePlan } from "./terminal-agent-adapter.js";
2
+ import { TerminalAgentBridge, type ResolvedTerminalConversation, type TerminalBridgeStatus } from "./terminal-agent-bridge.js";
3
+ import { terminalNativeIdentityFence as nativeThreadIdentityFence, terminalNativeIdentityMatchesFence as nativeThreadIdentityMatchesFence, type TerminalNativeIdentity } from "./terminal-binding-authority.js";
4
+ import { type ManagedSessionState, type NativeThreadTransition } from "./managed-session.js";
5
+ import type { NativeThreadVerificationRequest } from "./native-thread-transition-settlement-service.js";
6
+ export { nativeThreadIdentityFence, nativeThreadIdentityMatchesFence };
7
+ export type NativeThreadVerificationAdapterPorts = Readonly<{
8
+ createBridge: () => TerminalAgentBridge;
9
+ loadClaudeAgentRows: () => readonly TerminalThreadLifecycleAgentRow[];
10
+ runningVersion: () => string | undefined;
11
+ runtimeForIdentity: (identity: TerminalNativeIdentity) => TerminalRuntimeIdentity;
12
+ emptyRuntime: () => TerminalRuntimeIdentity;
13
+ physicalRuntime: () => TerminalRuntimeIdentity;
14
+ resolveIdentity: (preferredSessionId: string, allowedCompanionIdentity: TerminalNativeIdentityFence | undefined, allowedAdditionalIdentities: readonly TerminalNativeIdentityFence[]) => Promise<TerminalNativeIdentity | undefined>;
15
+ sleep: (milliseconds: number) => Promise<void>;
16
+ }>;
17
+ export type NativeThreadVerificationPreparationRequest = Readonly<{
18
+ operation: TerminalThreadLifecycleOperation;
19
+ expectedBindingToken: string;
20
+ bindingTokens: readonly string[];
21
+ capabilities: TerminalThreadLifecycleCapabilities;
22
+ beforeIdentity?: TerminalNativeIdentity;
23
+ physicalBeforeIdentity?: TerminalNativeIdentity;
24
+ allowedCompanionIdentity?: TerminalNativeIdentityFence;
25
+ allowedAdditionalIdentities?: readonly TerminalNativeIdentityFence[];
26
+ }>;
27
+ export type NativeThreadVerificationPreparationPorts = NativeThreadVerificationAdapterPorts & Readonly<{
28
+ plan: () => TerminalThreadLifecyclePlan | undefined;
29
+ assertReady: (status: TerminalBridgeStatus) => void;
30
+ revalidateSelectionSnapshot?: () => Promise<void>;
31
+ finalizeIdentity: (identity: TerminalNativeIdentity) => TerminalNativeIdentity;
32
+ }>;
33
+ export type PreparedNativeThreadVerification = Readonly<{
34
+ bridge: TerminalAgentBridge;
35
+ plan: TerminalThreadLifecyclePlan;
36
+ beforeIdentity: TerminalNativeIdentity;
37
+ beforeRuntime: TerminalRuntimeIdentity;
38
+ initialScreenDigest?: string;
39
+ }>;
40
+ export type NativeThreadCompanionSet = Readonly<{
41
+ primary?: TerminalNativeIdentityFence;
42
+ additional: TerminalNativeIdentityFence[];
43
+ }>;
44
+ export declare function nativeThreadRuntimeWithCompanionFences(runtime: TerminalRuntimeIdentity, companions: NativeThreadCompanionSet): TerminalRuntimeIdentity;
45
+ export declare function probeCodexCurrentThread(request: Readonly<{
46
+ terminal: ResolvedTerminalConversation;
47
+ currentIdentity?: TerminalNativeIdentity;
48
+ runtimeIdentity?: TerminalNativeIdentity;
49
+ runtimeOverride?: TerminalRuntimeIdentity;
50
+ }>, ports: NativeThreadVerificationAdapterPorts): Promise<TerminalNativeIdentity>;
51
+ export declare function prepareNativeThreadVerification(request: NativeThreadVerificationPreparationRequest, terminal: ResolvedTerminalConversation, ports: NativeThreadVerificationPreparationPorts): Promise<PreparedNativeThreadVerification>;
52
+ export declare function nativeThreadCandidateFileIdentity(token: TerminalThreadLifecycleCandidateToken | undefined): NativeThreadTransition["target_candidate_file_identity"];
53
+ export declare function assertResumedNativeThreadMatchesCandidate(identity: TerminalNativeIdentity, expected: NativeThreadTransition["target_candidate_file_identity"]): void;
54
+ export declare function knownNativeThreadCompanionSet(input: Readonly<{
55
+ terminal: Pick<ResolvedTerminalConversation, "conversationId" | "pid" | "terminalControl">;
56
+ transition: NativeThreadTransition;
57
+ managedSessions: readonly ManagedSessionState[];
58
+ }>, ports: Readonly<{
59
+ terminalAliasMatches: (storedTerminalId: unknown, storedControl: unknown, currentTerminalId: unknown, currentControl: unknown) => boolean;
60
+ workspaceMatches: (left: unknown, right: unknown) => boolean;
61
+ }>): NativeThreadCompanionSet;
62
+ export declare function verifyNativeThreadTransition(request: NativeThreadVerificationRequest, terminal: ResolvedTerminalConversation, ports: NativeThreadVerificationAdapterPorts): Promise<TerminalNativeIdentity>;
@@ -0,0 +1,451 @@
1
+ import path from "node:path";
2
+ import { isCompleteNativeRollout, terminalNativeIdentityFence as nativeThreadIdentityFence, terminalNativeIdentityMatchesFence as nativeThreadIdentityMatchesFence } from "./terminal-binding-authority.js";
3
+ import { isExactNativeThreadId } from "./managed-session.js";
4
+ import { classifyCodexLifecyclePostcondition, isFreshCodexPostProbeScreen } from "./native-thread-lifecycle-policy.js";
5
+ import { decideNativeThreadTransitionEligibility } from "./native-thread-transition-policy.js";
6
+ import { nonBlankString } from "./value-guards.js";
7
+ export { nativeThreadIdentityFence, nativeThreadIdentityMatchesFence };
8
+ export function nativeThreadRuntimeWithCompanionFences(runtime, companions) {
9
+ return {
10
+ ...runtime,
11
+ allowedPreMaterializationNativeIdentity: companions.primary,
12
+ allowedAdditionalNativeIdentities: [...companions.additional]
13
+ };
14
+ }
15
+ function codexBeforeRuntime(request, identity, ports) {
16
+ const exactPhysicalIdentity = request.physicalBeforeIdentity?.sessionId === identity?.sessionId
17
+ ? request.physicalBeforeIdentity
18
+ : undefined;
19
+ const runtime = exactPhysicalIdentity
20
+ ? ports.runtimeForIdentity(exactPhysicalIdentity)
21
+ : {
22
+ ...ports.emptyRuntime(),
23
+ ...(identity?.processUuid
24
+ ? { nativeProcessUuid: identity.processUuid }
25
+ : {}),
26
+ ...(identity?.processBirth
27
+ ? { nativeProcessBirth: identity.processBirth }
28
+ : {}),
29
+ expectedNativeSessionId: identity?.sessionId
30
+ };
31
+ return nativeThreadRuntimeWithCompanionFences(runtime, {
32
+ primary: request.allowedCompanionIdentity,
33
+ additional: [...(request.allowedAdditionalIdentities ?? [])]
34
+ });
35
+ }
36
+ function assertVerifiedClaudeBeforeObservation(request, terminal, ports) {
37
+ if (terminal.agent !== "claude")
38
+ return;
39
+ if (!terminal.terminalControl.currentPath) {
40
+ throw new Error("Claude lifecycle control requires an exact terminal working directory");
41
+ }
42
+ const observed = terminal.adapter.observeThreadLifecycle?.({
43
+ operation: request.operation,
44
+ phase: "before",
45
+ pid: terminal.pid,
46
+ processStartedAt: request.beforeIdentity?.processStartedAt,
47
+ cwd: terminal.terminalControl.currentPath,
48
+ agentRows: ports.loadClaudeAgentRows()
49
+ });
50
+ if (observed?.status !== "observed" ||
51
+ !isExactNativeThreadId(request.beforeIdentity?.sessionId) ||
52
+ observed.nativeThreadId !== request.beforeIdentity.sessionId.toLowerCase() ||
53
+ observed.idle !== true) {
54
+ throw new Error("Claude lifecycle control requires one exact idle interactive agents row " +
55
+ `for the current process incarnation${observed?.reason ? `: ${observed.reason}` : ""}`);
56
+ }
57
+ }
58
+ export async function probeCodexCurrentThread(request, ports) {
59
+ const { terminal } = request;
60
+ if (terminal.agent !== "codex") {
61
+ throw new Error("the current native thread identity is unavailable");
62
+ }
63
+ const bridge = ports.createBridge();
64
+ const probeRuntime = request.runtimeOverride ??
65
+ (request.runtimeIdentity
66
+ ? ports.runtimeForIdentity(request.runtimeIdentity)
67
+ : ports.emptyRuntime());
68
+ const agentVersion = ports.runningVersion();
69
+ if (!agentVersion) {
70
+ throw new Error("Codex /status requires the exact running version before terminal input");
71
+ }
72
+ const submission = await bridge.submitCodexStatusProbe(terminal.terminalControl, agentVersion, { runtime: probeRuntime });
73
+ let lastObservationReason = "no fresh idle Codex /status card was captured after the one Enter dispatch";
74
+ let sawIncompleteSessionUuid = false;
75
+ for (let attempt = 0; attempt < 50; attempt += 1) {
76
+ const status = await bridge.status(terminal.agent, terminal.terminalControl, {
77
+ runtime: probeRuntime,
78
+ scrollbackLines: submission.observationScrollbackLines
79
+ });
80
+ if (status.reachable &&
81
+ status.screen.digest !== submission.observationBaselineDigest) {
82
+ const observed = terminal.adapter.observeThreadLifecycle?.({
83
+ operation: { kind: "new_thread" },
84
+ phase: "before",
85
+ screen: status.screen.excerpt ?? ""
86
+ });
87
+ lastObservationReason = observed?.reason ?? lastObservationReason;
88
+ sawIncompleteSessionUuid ||= observed?.status === "missing" &&
89
+ /complete Session UUID/iu.test(observed.reason ?? "");
90
+ if (observed?.status === "observed" &&
91
+ observed.nativeThreadId &&
92
+ status.activity_state === "idle") {
93
+ return {
94
+ sessionId: observed.nativeThreadId,
95
+ processUuid: request.currentIdentity?.processUuid ??
96
+ request.runtimeIdentity?.processUuid,
97
+ processBirth: request.currentIdentity?.processBirth ??
98
+ request.runtimeIdentity?.processBirth,
99
+ rollout: request.currentIdentity?.sessionId === observed.nativeThreadId
100
+ ? request.currentIdentity.rollout
101
+ : undefined,
102
+ evidence: observed.evidence ?? "codex_status_card"
103
+ };
104
+ }
105
+ }
106
+ await ports.sleep(100);
107
+ }
108
+ throw new Error(sawIncompleteSessionUuid
109
+ ? "Codex /status Enter was dispatched exactly once, but the status card " +
110
+ "was truncated before the complete current Session UUID; widen or zoom " +
111
+ "the pane, refresh AKK list, and do not retry the probe automatically"
112
+ : "Codex /status Enter was dispatched exactly once, but no fresh exact " +
113
+ `current Session UUID was proven; do not retry automatically: ${lastObservationReason}`);
114
+ }
115
+ export async function prepareNativeThreadVerification(request, terminal, ports) {
116
+ const eligibility = decideNativeThreadTransitionEligibility({
117
+ operation: request.operation.kind,
118
+ bindingTokenMatches: request.bindingTokens.includes(request.expectedBindingToken),
119
+ capabilityStatus: request.capabilities.status,
120
+ newThreadSupported: request.capabilities.newThread,
121
+ resumeExactSupported: request.capabilities.resumeExact
122
+ });
123
+ if (eligibility.action === "reject") {
124
+ throw new Error(eligibility.reason === "binding_token_changed"
125
+ ? "terminal binding changed after it was listed; refresh AKK list and retry"
126
+ : request.capabilities.reason);
127
+ }
128
+ if (ports.revalidateSelectionSnapshot) {
129
+ await ports.revalidateSelectionSnapshot();
130
+ }
131
+ const plan = ports.plan();
132
+ if (!plan) {
133
+ throw new Error("the agent adapter did not produce a lifecycle plan");
134
+ }
135
+ const bridge = ports.createBridge();
136
+ let beforeIdentity = request.beforeIdentity;
137
+ let beforeRuntime = terminal.agent === "codex"
138
+ ? codexBeforeRuntime(request, beforeIdentity, ports)
139
+ : request.physicalBeforeIdentity
140
+ ? ports.runtimeForIdentity(request.physicalBeforeIdentity)
141
+ : ports.emptyRuntime();
142
+ const terminalStatus = await bridge.status(terminal.agent, terminal.terminalControl, { runtime: beforeRuntime });
143
+ ports.assertReady(terminalStatus);
144
+ assertVerifiedClaudeBeforeObservation(request, terminal, ports);
145
+ if (terminal.agent === "codex") {
146
+ const statusIdentity = await probeCodexCurrentThread({
147
+ terminal,
148
+ currentIdentity: beforeIdentity,
149
+ runtimeIdentity: request.physicalBeforeIdentity,
150
+ runtimeOverride: beforeRuntime
151
+ }, ports);
152
+ if (beforeIdentity &&
153
+ beforeIdentity.sessionId !== statusIdentity.sessionId) {
154
+ throw new Error("Codex /status disagrees with the open rollout identity before /clear");
155
+ }
156
+ beforeIdentity = {
157
+ ...beforeIdentity,
158
+ ...statusIdentity,
159
+ evidence: beforeIdentity
160
+ ? `${beforeIdentity.evidence}+codex_status_card`
161
+ : statusIdentity.evidence
162
+ };
163
+ beforeRuntime = codexBeforeRuntime(request, beforeIdentity, ports);
164
+ }
165
+ if (!isExactNativeThreadId(beforeIdentity?.sessionId)) {
166
+ throw new Error("native thread lifecycle requires an exact before-thread UUID");
167
+ }
168
+ return {
169
+ bridge,
170
+ plan,
171
+ beforeIdentity: ports.finalizeIdentity(beforeIdentity),
172
+ beforeRuntime,
173
+ initialScreenDigest: terminalStatus.screen.digest
174
+ };
175
+ }
176
+ function sameFilesystemDevice(left, right) {
177
+ try {
178
+ return BigInt(left) === BigInt(right);
179
+ }
180
+ catch {
181
+ return left === right;
182
+ }
183
+ }
184
+ export function nativeThreadCandidateFileIdentity(token) {
185
+ if (!token || token.agent !== "codex" || token.source !== "codex_rollout") {
186
+ return undefined;
187
+ }
188
+ return {
189
+ path: path.resolve(token.fileToken.path),
190
+ device: token.fileToken.device,
191
+ inode: token.fileToken.inode
192
+ };
193
+ }
194
+ export function assertResumedNativeThreadMatchesCandidate(identity, expected) {
195
+ if (!expected) {
196
+ throw new Error("Codex resume is missing its revalidated rollout token");
197
+ }
198
+ const rollout = identity.rollout;
199
+ if (!isCompleteNativeRollout(rollout) ||
200
+ !nonBlankString(expected.path) ||
201
+ !nonBlankString(expected.device) ||
202
+ !nonBlankString(expected.inode) ||
203
+ path.resolve(rollout.path) !== path.resolve(expected.path) ||
204
+ !sameFilesystemDevice(rollout.device, expected.device) ||
205
+ rollout.inode !== expected.inode) {
206
+ throw new Error("the resumed Codex rollout does not match the revalidated candidate file identity");
207
+ }
208
+ }
209
+ export function knownNativeThreadCompanionSet(input, ports) {
210
+ const { terminal, transition } = input;
211
+ const candidates = [];
212
+ if (transition.before_process_uuid &&
213
+ transition.before_process_birth &&
214
+ isCompleteNativeRollout(transition.before_process_rollout)) {
215
+ candidates.push({
216
+ sessionId: transition.before_native_thread_id,
217
+ processUuid: transition.before_process_uuid,
218
+ processBirth: transition.before_process_birth,
219
+ rollout: transition.before_process_rollout
220
+ });
221
+ }
222
+ const after = transition.after_binding;
223
+ if (after?.native_thread_id &&
224
+ after.native_process.process_uuid &&
225
+ after.native_process.process_birth &&
226
+ after.native_process.pid === terminal.pid &&
227
+ ports.terminalAliasMatches(after.terminal_id, after.terminal_control, terminal.conversationId, terminal.terminalControl) &&
228
+ after.native_process.process_uuid === transition.before_process_uuid &&
229
+ after.native_process.process_birth === transition.before_process_birth &&
230
+ isCompleteNativeRollout(after.native_process.rollout)) {
231
+ candidates.push({
232
+ sessionId: after.native_thread_id,
233
+ processUuid: after.native_process.process_uuid,
234
+ processBirth: after.native_process.process_birth,
235
+ rollout: after.native_process.rollout
236
+ });
237
+ }
238
+ for (const session of input.managedSessions) {
239
+ const binding = session.binding;
240
+ if (session.agent !== "codex" ||
241
+ session.status !== "detached" ||
242
+ !binding?.native_thread_id ||
243
+ !binding.native_process.process_uuid ||
244
+ !binding.native_process.process_birth ||
245
+ binding.native_process.pid !== terminal.pid ||
246
+ binding.native_process.process_uuid !== transition.before_process_uuid ||
247
+ binding.native_process.process_birth !== transition.before_process_birth ||
248
+ !ports.terminalAliasMatches(binding.terminal_id, binding.terminal_control, terminal.conversationId, terminal.terminalControl) ||
249
+ !ports.workspaceMatches(transition.workspace, session.workspace) ||
250
+ !isCompleteNativeRollout(binding.native_process.rollout)) {
251
+ continue;
252
+ }
253
+ candidates.push({
254
+ sessionId: binding.native_thread_id,
255
+ processUuid: binding.native_process.process_uuid,
256
+ processBirth: binding.native_process.process_birth,
257
+ rollout: binding.native_process.rollout
258
+ });
259
+ }
260
+ const seen = new Set();
261
+ const exact = candidates.filter((candidate) => {
262
+ const key = JSON.stringify(candidate);
263
+ if (seen.has(key))
264
+ return false;
265
+ seen.add(key);
266
+ return true;
267
+ });
268
+ return { primary: exact[0], additional: exact.slice(1) };
269
+ }
270
+ function beforeFences(request) {
271
+ const candidates = [
272
+ nativeThreadIdentityFence(request.physicalBeforeIdentity),
273
+ nativeThreadIdentityFence(request.beforeIdentity),
274
+ request.allowedCompanionIdentity,
275
+ ...(request.allowedAdditionalIdentities ?? [])
276
+ ];
277
+ const unique = [];
278
+ for (const candidate of candidates) {
279
+ if (candidate &&
280
+ !unique.some((value) => nativeThreadIdentityMatchesFence(value, candidate))) {
281
+ unique.push(candidate);
282
+ }
283
+ }
284
+ return unique;
285
+ }
286
+ function sameStableIdentity(left, right) {
287
+ return left?.sessionId === right.sessionId &&
288
+ left.processUuid === right.processUuid &&
289
+ left.processBirth === right.processBirth &&
290
+ left.rollout?.fd === right.rollout?.fd &&
291
+ left.rollout?.device === right.rollout?.device &&
292
+ left.rollout?.inode === right.rollout?.inode &&
293
+ left.rollout?.path === right.rollout?.path;
294
+ }
295
+ export async function verifyNativeThreadTransition(request, terminal, ports) {
296
+ const bridge = ports.createBridge();
297
+ const exactBeforeRoots = beforeFences(request);
298
+ let probeSent = false;
299
+ let postProbeBaselineDigest;
300
+ let observationScrollbackLines;
301
+ let stableIdentity;
302
+ let stableCount = 0;
303
+ for (let attempt = 0; attempt < 100; attempt += 1) {
304
+ let verifiedIdentity;
305
+ if (terminal.agent === "claude") {
306
+ try {
307
+ const parsed = terminal.adapter.observeThreadLifecycle?.({
308
+ operation: request.operation,
309
+ phase: "after",
310
+ pid: terminal.pid,
311
+ processStartedAt: request.beforeIdentity?.processStartedAt,
312
+ cwd: terminal.terminalControl.currentPath,
313
+ agentRows: ports.loadClaudeAgentRows(),
314
+ beforeNativeThreadId: request.beforeIdentity?.sessionId,
315
+ expectedNativeThreadId: request.operation.kind === "resume_thread"
316
+ ? request.operation.nativeThreadId
317
+ : undefined
318
+ });
319
+ if (parsed?.status === "verified" &&
320
+ parsed.nativeThreadId &&
321
+ parsed.idle === true &&
322
+ request.beforeIdentity?.processStartedAt !== undefined) {
323
+ const observed = {
324
+ sessionId: parsed.nativeThreadId,
325
+ processStartedAt: request.beforeIdentity.processStartedAt,
326
+ processUuid: `claude-pid:${terminal.pid}:started:` +
327
+ String(request.beforeIdentity.processStartedAt),
328
+ evidence: parsed.evidence ?? "claude_agents_exact_pid"
329
+ };
330
+ const status = await bridge.status(terminal.agent, terminal.terminalControl, { runtime: ports.runtimeForIdentity(observed) });
331
+ if (status.reachable && status.activity_state === "idle") {
332
+ verifiedIdentity = observed;
333
+ }
334
+ }
335
+ }
336
+ catch {
337
+ // Polling observations fail closed within the already-dispatched
338
+ // transition; observation errors never prove a matching identity.
339
+ }
340
+ }
341
+ else {
342
+ const afterProbe = request.plan.steps.find((step) => step.kind === "identity_probe_after");
343
+ if (!afterProbe ||
344
+ afterProbe.effect !== "read_only" ||
345
+ afterProbe.command !== "/status") {
346
+ throw new Error("the Codex lifecycle plan has no exact post-transition identity probe");
347
+ }
348
+ const agentVersion = ports.runningVersion();
349
+ if (!agentVersion) {
350
+ throw new Error("Codex lifecycle postcondition /status requires the exact running version before terminal input");
351
+ }
352
+ const physicalRuntime = ports.physicalRuntime();
353
+ const status = await bridge.status(terminal.agent, terminal.terminalControl, {
354
+ runtime: physicalRuntime,
355
+ ...(observationScrollbackLines === undefined
356
+ ? {}
357
+ : { scrollbackLines: observationScrollbackLines })
358
+ });
359
+ const screenDigest = status.screen.digest;
360
+ if (!probeSent &&
361
+ status.reachable &&
362
+ status.activity_state === "idle" &&
363
+ screenDigest !== undefined &&
364
+ screenDigest !== request.initialScreenDigest) {
365
+ const receipt = await bridge.submitCodexStatusProbe(terminal.terminalControl, agentVersion, { runtime: physicalRuntime });
366
+ postProbeBaselineDigest = receipt.observationBaselineDigest;
367
+ observationScrollbackLines = receipt.observationScrollbackLines;
368
+ probeSent = true;
369
+ }
370
+ else if (status.reachable &&
371
+ isFreshCodexPostProbeScreen({
372
+ probeSent,
373
+ screenDigest,
374
+ postProbeBaselineDigest
375
+ })) {
376
+ const parsed = terminal.adapter.observeThreadLifecycle?.({
377
+ operation: request.operation,
378
+ phase: "after",
379
+ screen: status.screen.excerpt ?? "",
380
+ beforeNativeThreadId: request.beforeIdentity?.sessionId,
381
+ expectedNativeThreadId: request.operation.kind === "resume_thread"
382
+ ? request.operation.nativeThreadId
383
+ : undefined
384
+ });
385
+ if (request.operation.kind === "new_thread" &&
386
+ parsed?.nativeThreadId &&
387
+ exactBeforeRoots.some((identity) => identity.sessionId === parsed.nativeThreadId)) {
388
+ throw new Error(`Codex /clear reported previously known native thread ` +
389
+ `${parsed.nativeThreadId} instead of a distinct new thread`);
390
+ }
391
+ const allowedBeforeRoots = parsed?.nativeThreadId
392
+ ? exactBeforeRoots.filter((identity) => identity.sessionId !== parsed.nativeThreadId)
393
+ : exactBeforeRoots;
394
+ let observed;
395
+ let observationSucceeded = false;
396
+ if (parsed?.nativeThreadId) {
397
+ observed = await ports.resolveIdentity(parsed.nativeThreadId, allowedBeforeRoots[0], allowedBeforeRoots.slice(1));
398
+ observationSucceeded = true;
399
+ }
400
+ const evidenceBefore = exactBeforeRoots.find((candidate) => nativeThreadIdentityMatchesFence(observed, candidate)) ?? request.beforeIdentity;
401
+ const evidence = parsed?.nativeThreadId
402
+ ? classifyCodexLifecyclePostcondition({
403
+ operation: request.operation.kind,
404
+ parsedNativeThreadId: parsed.nativeThreadId,
405
+ observationSucceeded,
406
+ observedIdentity: observed,
407
+ beforeIdentity: evidenceBefore
408
+ })
409
+ : "invalid";
410
+ if (parsed?.status === "verified" &&
411
+ parsed.nativeThreadId &&
412
+ evidence !== "invalid" &&
413
+ status.activity_state === "idle") {
414
+ verifiedIdentity = {
415
+ sessionId: parsed.nativeThreadId,
416
+ processUuid: evidence === "matching_after"
417
+ ? observed?.processUuid
418
+ : request.beforeIdentity?.processUuid,
419
+ processBirth: evidence === "matching_after"
420
+ ? observed?.processBirth
421
+ : request.beforeIdentity?.processBirth,
422
+ rollout: evidence === "matching_after"
423
+ ? observed?.rollout
424
+ : undefined,
425
+ evidence: parsed.evidence ?? "codex_status_card"
426
+ };
427
+ }
428
+ }
429
+ }
430
+ if (verifiedIdentity) {
431
+ if (sameStableIdentity(stableIdentity, verifiedIdentity)) {
432
+ stableCount += 1;
433
+ }
434
+ else {
435
+ stableIdentity = verifiedIdentity;
436
+ stableCount = 1;
437
+ }
438
+ if (stableCount >= 2)
439
+ return verifiedIdentity;
440
+ }
441
+ else {
442
+ stableIdentity = undefined;
443
+ stableCount = 0;
444
+ }
445
+ await ports.sleep(100);
446
+ }
447
+ throw new Error(request.operation.kind === "resume_thread"
448
+ ? `the terminal did not verify native thread ${request.operation.nativeThreadId}`
449
+ : "the terminal did not verify a distinct new native thread");
450
+ }
451
+ //# sourceMappingURL=native-thread-transition-verification-adapter.js.map