@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,643 @@
1
+ import { sessionShortRef } from "./session-selector.js";
2
+ import { managedSessionBindingToken } from "./managed-session.js";
3
+ import { isActiveConversationStatus, isWaitingForAgentStatus } from "./protocol.js";
4
+ import { isRecord, nonBlankString as stringValue } from "./value-guards.js";
5
+ const TERMINAL_WATCH_ACTION_USE = "Monitor this human-started external task and notify OpenClaw when it " +
6
+ "needs attention or finishes, instead of polling. Do not use Terminal " +
7
+ "Watch for an AKK-managed Turn. Call agent_knock_knock_watch with this " +
8
+ "exact terminal_id; AKK refreshes and revalidates current observation " +
9
+ "authority internally.";
10
+ const NO_AVAILABLE_LIST_ACTION_FACTS = {
11
+ terminalBridgeReady: false,
12
+ managedApprovalPending: false,
13
+ renewEligible: false,
14
+ retryCallbackEligible: false
15
+ };
16
+ export function renderManagedTurnListEntry(task, { terminalBridge = false, approvalState, actionFacts = NO_AVAILABLE_LIST_ACTION_FACTS } = {}) {
17
+ const sessionId = stringValue(task.session_id) ??
18
+ stringValue(task.conversation_id);
19
+ const turnId = stringValue(task.turn_id) ??
20
+ stringValue(task.conversation_id) ??
21
+ String(task.id ?? "");
22
+ const entry = {
23
+ ...task,
24
+ session_id: sessionId,
25
+ turn_id: turnId,
26
+ id: turnId,
27
+ short_ref: sessionShortRef(turnId),
28
+ source: "managed_turn",
29
+ ...(approvalState ? { approval_state: approvalState } : {}),
30
+ commands: {
31
+ respond: task.status === "waiting_for_openclaw",
32
+ cancel: isWaitingForAgentStatus(task.status),
33
+ close: task.status !== "closed",
34
+ status: true,
35
+ approve: terminalBridge && isActiveConversationStatus(task.status)
36
+ }
37
+ };
38
+ const availableActions = renderAvailableListActions(entry, actionFacts);
39
+ const { commands: _commands, ...publicEntry } = entry;
40
+ return {
41
+ ...publicEntry,
42
+ available_actions: availableActions
43
+ };
44
+ }
45
+ export function listActionContracts() {
46
+ return {
47
+ version: 18,
48
+ instructions: [
49
+ "Treat terminals[] as the primary resource and use only actions present in available_actions, except the snapshot-bound terminals[].handoff_decision.choices.take_over_current.action and an exact terminals[].blocking_turns[].recovery_action. Either nested action requires explicit user confirmation; after it succeeds, refresh list before any follow-current send.",
50
+ "The session_exact scope uses session_id only when it is prefilled by the listed send action. A rollout-backed managed Codex pane instead uses the terminal_follow_current scope with its exact terminal_id because even one materialized rollout does not prove the current TUI foreground thread. AKK derives and revalidates current terminal authority internally. A turn id is never an ordinary send target.",
51
+ "A user-explicit raw terminal selector, or a uniquely delegated raw send with no selector, is only a discovery choice. If that terminal already has one rollout-backed managed Codex source, AKK captures fresh candidate authority under the terminal and Store locks and still uses the same v3 follow-current transfer; it never degrades to sole-root strict continuation. Unmanaged first attach retains its existing behavior.",
52
+ "Read-only native-thread listing targets an exact terminal_id. Native-thread new/resume mutations use terminal_id and, for resume, one complete native_thread_id; AKK resolves and revalidates current lifecycle authority internally. They never create a Turn.",
53
+ "Native inspection is a separate terminal action: use only its closed inspection enum and current exact terminal_id. AKK resolves current lifecycle authority internally, and AKK status does not execute a native slash command.",
54
+ "Terminal Watch observes one exact human-started active task without sending terminal input or creating an AKK Session or Turn. Start it only from terminals[].available_actions.watch, pass that action's exact terminal_id, and use watch_id for later status or unwatch operations. AKK refreshes and revalidates current observation authority internally.",
55
+ "A verified, idle human native-thread switch may expose a terminal-scoped send; that action atomically adopts the live context before creating its Turn. A conclusively ended Codex rollout may expose the same snapshot-bound operation only after AKK proves zero current rollout and an exact empty composer; it detaches the ended Session and creates an isolated virgin Session. A status-card-only zero-rollout source or any otherwise eligible quiescent rollout-backed source with a complete nonempty pinned open-rollout inventory may also expose this exact action. One materialized rollout does not prove the current Codex TUI foreground thread, and a /clear resume hint is diagnostic only. AKK freezes any released predecessor Turn history, submits the ordinary task once, and binds a separate provisional Session only after one post-anchor rollout uniquely accepts that exact request. The accepted UUID may equal or differ from the predecessor without merging their Session lineages, and narrow panes do not require /status. Until that promotion commits, strict session_id send, respond, approve, cancel, native lifecycle, and native_inspect remain unavailable, and the provisional binding has no callback authority. If dispatch, acceptance, or post-submit binding is uncertain, do not retry automatically. An explicitly closed uncertain Turn may authorize only a future candidate send when its exact resolved close ledger, append-only uncertain receipt, frozen predecessor history, and complete current rollout inventory prove that the old bound rollout is absent and every candidate is unclaimed; close never forges the lost callback, and uncertain submissions cannot be renewed. Other binding conflicts remain fail-closed and may expose only exact low-level reconcile_binding recovery.",
56
+ "List resumable threads before resume; use only a complete native_thread_id and the action returned for that candidate.",
57
+ "Structured follow-current actions use only the exact terminal_id prefilled by that terminal row. Human slash commands may use an explicitly named discovery selector. AKK resolves and revalidates current action authority internally; never infer or guess a target.",
58
+ "Use respond only for an in-flight turn that is explicitly waiting for OpenClaw.",
59
+ "Manual approval binds the exact prompt the user reviewed. After explicit confirmation, call only the currently advertised approve action; AKK keeps the prompt authority private and recaptures the exact terminal, process, request, and prompt before sending a decision key. A prompt without complete exact evidence is not approvable.",
60
+ "Managed controls target turn_id. A raw terminal may be controlled only through its own list-prefilled conversation_id action. When a Codex managed prompt has no usable AKK Turn owner, list may expose one manual terminal-scoped approve action after exact observation. It does not mutate the Turn or Session binding, has no durable dispatch receipt, and is never eligible for automatic approval. If its result is interrupted, refresh status and inspect the live prompt instead of retrying blindly.",
61
+ "Start with the action's prefilled arguments, supply every missing_required field, and consult the top-level action's optional fields only when needed.",
62
+ "Authoritative full IDs are prefilled; short_ref is for display and human input.",
63
+ "Availability is a snapshot. AKK revalidates process, provider-owned terminal identity, workspace, activity, approval, and recovery state before side effects."
64
+ ],
65
+ field_semantics: {
66
+ process_state: {
67
+ terminals: "physical_terminal_process_liveness",
68
+ authoritative_for_tool_calls: false
69
+ },
70
+ status: {
71
+ managed_turns: "managed_turn_lifecycle",
72
+ authoritative_for_tool_calls: false
73
+ },
74
+ activity_state: {
75
+ terminals: "terminal_screen_activity_classification",
76
+ authoritative_for_tool_calls: false
77
+ },
78
+ managed: {
79
+ current_turn: "the authoritative dispatch-ledger owner, never inferred from history",
80
+ recent_turn: "the latest visible non-owning turn in the current managed session",
81
+ session_id: "the continuing agent context; it is an ordinary-send target only when the listed send action explicitly prefills it, and rollout-backed Codex uses the listed follow-current terminal action instead",
82
+ binding_id: "the immutable terminal-binding generation currently authorized for this Session",
83
+ history: "older turns, present only with --all"
84
+ },
85
+ available_actions: {
86
+ meaning: "currently_safe_actions",
87
+ authoritative_for_tool_calls: true
88
+ },
89
+ native_agent_identity_observation: {
90
+ meaning: "the latest bounded native identity probe; verified_absent is distinct from an unavailable resolver",
91
+ authoritative_for_tool_calls: false
92
+ },
93
+ management_conflict: {
94
+ verified_empty_native_session: "a previously bound Codex rollout is conclusively closed; only the exact snapshot-bound send in available_actions may detach it and create an isolated virgin Session"
95
+ },
96
+ handoff_state: {
97
+ meaning: "why a conflict-scoped follow-current send is available or blocked",
98
+ verified_empty_native_session_adoptable: "the exact current terminal snapshot permits the listed conflict send; availability is revalidated before terminal input"
99
+ },
100
+ handoff_decision: {
101
+ meaning: "an explicit human choice required before superseding an active source Turn",
102
+ authoritative_action_path: "terminals[].handoff_decision.choices.take_over_current.action",
103
+ requires_explicit_user_confirmation: true,
104
+ after_success: "refresh list before using a follow-current send action"
105
+ },
106
+ blocking_turns: {
107
+ meaning: "terminal-incarnation-wide collateral unresolved managed Turns that suppress send, lifecycle, and native-inspection actions; an active human-handoff source Turn is never listed here and remains governed only by handoff_decision",
108
+ authoritative_action_path: "terminals[].blocking_turns[].recovery_action",
109
+ requires_explicit_user_confirmation: true,
110
+ after_success: "refresh list before using any terminal action"
111
+ }
112
+ },
113
+ actions: {
114
+ send: {
115
+ tool: "agent_knock_knock_send",
116
+ target_argument: "session_id",
117
+ initial_attach_target_argument: "terminal_id",
118
+ managed_scopes: {
119
+ session_exact: {
120
+ target_arguments: ["session_id"],
121
+ follows_current_terminal: false
122
+ },
123
+ terminal_follow_current: {
124
+ target_arguments: ["terminal_id"],
125
+ follows_current_terminal: true
126
+ }
127
+ },
128
+ initial_attach_scope: "A structured call uses the terminal_id prefilled by an unmanaged raw-terminal row's available send action, or omits the target only when exactly one eligible raw pane exists. Human slash commands may preserve a discovery selector explicitly named by the user. For an already managed rollout-backed Codex pane, an explicit or unique raw delegation internally captures fresh v3 candidate authority under lock; it never becomes a strict Session continuation.",
129
+ required: ["request"],
130
+ optional: [
131
+ "session_id",
132
+ "terminal_id",
133
+ "type",
134
+ "idleTimeoutMinutes",
135
+ "agentTimeoutMinutes",
136
+ "agentHardTimeoutMinutes"
137
+ ],
138
+ unsupported: ["timeoutSeconds"],
139
+ status_card_only_deferred_scope: "A zero-Turn Codex status-card binding has no rollout; only its listed follow-current send creates an isolated provisional Session and binds it after exact request acceptance. Until promotion commits, strict managed controls, native lifecycle, native_inspect, and callback authority remain unavailable; an uncertain dispatch, acceptance, or post-submit binding must not be retried automatically.",
140
+ candidate_rollout_deferred_scope: "A quiescent rollout-backed Codex source uses a listed follow-current send whenever AKK can pin a complete nonempty candidate inventory. Inventory status resolved means only that one rollout is materialized; it does not prove the current TUI foreground thread. Released predecessor Turn history stays read-only while a separate provisional Session sends once and waits for one unique post-anchor request acceptance. A /clear resume hint is diagnostic only and is not routing authority. Same-UUID and different-UUID results keep separate Session lineages; zero, multiple, drifted, or uncertain acceptance is never retried blindly. Explicit close can abandon an uncertain receipt for future-send liveness only while the exact resolved close ledger, append-only receipt, frozen history, absent old rollout, and unclaimed candidate set remain authoritative; it never synthesizes callback delivery.",
141
+ ordinary_use: "Create a new managed Turn through the exact action listed for the pane. An explicit session_id never follows the pane and is unavailable for rollout-backed Codex Sessions; their listed follow-current action binds only the unique exact rollout that accepts the submitted request. A user-explicit or uniquely delegated raw send receives the same fresh under-lock candidate authority when it resolves to an already managed rollout-backed Codex source. A live terminal selector can also attach an unmanaged pane, adopt one verified human-selected native context, detach a verified-empty Codex source, or replace an eligible status-card/candidate-rollout source."
142
+ },
143
+ watch: {
144
+ tool: "agent_knock_knock_watch",
145
+ target_argument: "terminal_id",
146
+ required: ["terminal_id"],
147
+ optional: ["hardTimeoutMinutes"],
148
+ creates_turn: false,
149
+ creates_session: false,
150
+ sends_terminal_input: false,
151
+ candidate_source: "terminals[].available_actions.watch",
152
+ scope: "Observe only the exact supported human-started task already active in this terminal. It never adopts the task as AKK work or blocks later human terminal use."
153
+ },
154
+ unwatch: {
155
+ tool: "agent_knock_knock_unwatch",
156
+ target_argument: "watch_id",
157
+ required: ["watch_id"],
158
+ creates_turn: false,
159
+ creates_session: false,
160
+ sends_terminal_input: false,
161
+ requires_user_intent: true
162
+ },
163
+ new_thread: {
164
+ tool: "agent_knock_knock_new_thread",
165
+ target_argument: "terminal_id",
166
+ required: ["terminal_id"],
167
+ creates_turn: false,
168
+ creates_session: true,
169
+ requires_user_intent: true
170
+ },
171
+ list_resumable_threads: {
172
+ tool: "agent_knock_knock_list_resumable_threads",
173
+ target_argument: "terminal_id",
174
+ required: ["terminal_id"],
175
+ side_effect_free: true
176
+ },
177
+ native_inspect: {
178
+ tool: "agent_knock_knock_native_inspect",
179
+ target_argument: "terminal_id",
180
+ required: ["terminal_id", "inspection"],
181
+ supported_inspections: ["status"],
182
+ creates_turn: false,
183
+ creates_session: false,
184
+ mutates_store: false,
185
+ sends_terminal_input: true,
186
+ candidate_source: "terminals[].available_actions.native_inspect"
187
+ },
188
+ resume_thread: {
189
+ tool: "agent_knock_knock_resume_thread",
190
+ target_argument: "terminal_id",
191
+ required: [
192
+ "terminal_id",
193
+ "native_thread_id"
194
+ ],
195
+ creates_turn: false,
196
+ requires_user_intent: true,
197
+ candidate_source: "list_resumable_threads"
198
+ },
199
+ reconcile_binding: {
200
+ tool: "agent_knock_knock_reconcile_binding",
201
+ target_argument: "terminal_id",
202
+ required: [
203
+ "terminal_id",
204
+ "conflicting_session_id"
205
+ ],
206
+ creates_turn: false,
207
+ sends_terminal_input: false,
208
+ requires_user_intent: true,
209
+ effect: "Detach one exactly listed conflicting Session binding without adopting the live replacement thread."
210
+ },
211
+ respond: {
212
+ tool: "agent_knock_knock_respond",
213
+ target_argument: "turn_id",
214
+ required: ["turn_id", "request"],
215
+ ordinary_use: "Answer an agent question inside the explicitly selected in-flight turn without creating another turn."
216
+ },
217
+ status: {
218
+ tool: "agent_knock_knock_status",
219
+ target_arguments: {
220
+ exactly_one_of: ["turn_id", "conversation_id", "watch_id"]
221
+ },
222
+ managed_target_argument: "turn_id",
223
+ watch_target_argument: "watch_id",
224
+ watch_scope: "Use only the authoritative watch_id prefilled by a current Terminal Watch row.",
225
+ compatibility_target_argument: "conversation_id",
226
+ compatibility_scope: "A deprecated legacy Turn alias, or only the exact selector prefilled by an unmanaged raw-terminal row's available status action; never construct, guess, or reuse it.",
227
+ required: [],
228
+ optional: ["idleTimeoutMinutes", "trace"]
229
+ },
230
+ approve: {
231
+ tool: "agent_knock_knock_approve",
232
+ target_arguments: {
233
+ exactly_one_of: ["turn_id", "terminal_id"]
234
+ },
235
+ managed_target_argument: "turn_id",
236
+ terminal_target_argument: "terminal_id",
237
+ required: [],
238
+ optional: [],
239
+ terminal_scoped_scope: "Only the latest list-prefilled Codex terminal_id action may approve a managed current prompt without a usable Turn owner. It remains human-confirmed, uses private server-bound reviewed-prompt authority, revalidates exact terminal/process/Session/dispatch/prompt state before keys, never mutates managed state, has no durable dispatch receipt, cannot be auto-approved, and must not be blindly retried after an interrupted result.",
240
+ approval_authority: "private_server_bound_reviewed_prompt",
241
+ missing_prompt_region_evidence: "not_approvable",
242
+ requires_explicit_user_confirmation: true,
243
+ requires_fresh_status: true
244
+ },
245
+ cancel: {
246
+ tool: "agent_knock_knock_cancel",
247
+ target_argument: "turn_id",
248
+ compatibility_target_argument: "conversation_id",
249
+ compatibility_scope: "A deprecated legacy Turn alias, or only the exact selector prefilled by an unmanaged raw-terminal row's available cancellation action; never construct, guess, or reuse it.",
250
+ required: ["turn_id"],
251
+ optional: ["idleTimeoutMinutes"],
252
+ requires_user_intent: true
253
+ },
254
+ renew: {
255
+ tool: "agent_knock_knock_renew",
256
+ target_argument: "turn_id",
257
+ compatibility_target_argument: "conversation_id",
258
+ compatibility_scope: "Deprecated legacy Turn alias only; unmanaged raw-terminal rows never advertise renew.",
259
+ required: ["turn_id"],
260
+ optional: ["minutes"]
261
+ },
262
+ retry_callback: {
263
+ tool: "agent_knock_knock_retry_callback",
264
+ target_argument: "turn_id",
265
+ compatibility_target_argument: "conversation_id",
266
+ compatibility_scope: "Deprecated legacy Turn alias only; unmanaged raw-terminal rows never advertise callback retry.",
267
+ required: ["turn_id"]
268
+ },
269
+ close: {
270
+ tool: "agent_knock_knock_close",
271
+ target_argument: "turn_id",
272
+ compatibility_target_argument: "conversation_id",
273
+ compatibility_scope: "A deprecated legacy Turn alias, or only the exact selector prefilled by an unmanaged raw-terminal row's orphan-close action; never construct, guess, or reuse it.",
274
+ required: ["turn_id"],
275
+ optional: [
276
+ "reason",
277
+ "expected_message_id",
278
+ "expected_transition_id"
279
+ ],
280
+ requires_explicit_user_confirmation: true,
281
+ handoff_scope: "Use only the complete nested action from terminals[].handoff_decision.choices.take_over_current after explicit confirmation. AKK binds and revalidates the current handoff decision privately."
282
+ }
283
+ }
284
+ };
285
+ }
286
+ export function renderAvailableListActions(entry, facts = NO_AVAILABLE_LIST_ACTION_FACTS) {
287
+ const id = stringValue(entry.id ?? entry.conversation_id);
288
+ if (!id) {
289
+ return {};
290
+ }
291
+ const commands = isRecord(entry.commands) ? entry.commands : {};
292
+ const managed = entry.source === "managed_turn";
293
+ const targetArguments = managed
294
+ ? { turn_id: id }
295
+ : { conversation_id: id };
296
+ const actions = {
297
+ status: {
298
+ tool: "agent_knock_knock_status",
299
+ arguments: targetArguments
300
+ }
301
+ };
302
+ const terminalControlled = entry.source === "terminal";
303
+ const approvalState = isRecord(entry.approval_state)
304
+ ? entry.approval_state
305
+ : {};
306
+ const managedApprovalPending = facts.managedApprovalPending;
307
+ const terminalBridgeReady = managed && facts.terminalBridgeReady;
308
+ if (terminalControlled &&
309
+ commands.send === true &&
310
+ entry.activity_state === "idle" &&
311
+ approvalState.blocked !== true) {
312
+ actions.send = {
313
+ tool: "agent_knock_knock_send",
314
+ arguments: { selector: id },
315
+ missing_required: ["request"]
316
+ };
317
+ }
318
+ const lifecycleBindingToken = stringValue(entry.lifecycle_binding_token);
319
+ appendTerminalWatchAction({
320
+ actions,
321
+ commands,
322
+ entry,
323
+ id,
324
+ lifecycleBindingToken,
325
+ terminalControlled
326
+ });
327
+ if (terminalControlled &&
328
+ commands.new_thread === true &&
329
+ entry.activity_state === "idle" &&
330
+ approvalState.blocked !== true &&
331
+ lifecycleBindingToken) {
332
+ actions.new_thread = {
333
+ tool: "agent_knock_knock_new_thread",
334
+ arguments: {
335
+ terminal_id: id,
336
+ expected_binding_token: lifecycleBindingToken
337
+ },
338
+ requires_user_intent: true
339
+ };
340
+ }
341
+ if (terminalControlled &&
342
+ commands.list_resumable_threads === true) {
343
+ actions.list_resumable_threads = {
344
+ tool: "agent_knock_knock_list_resumable_threads",
345
+ arguments: { terminal_id: id }
346
+ };
347
+ }
348
+ if (terminalControlled &&
349
+ commands.native_inspect === true &&
350
+ entry.activity_state === "idle" &&
351
+ approvalState.blocked !== true &&
352
+ lifecycleBindingToken) {
353
+ actions.native_inspect = {
354
+ tool: "agent_knock_knock_native_inspect",
355
+ arguments: {
356
+ terminal_id: id,
357
+ inspection: "status",
358
+ expected_binding_token: lifecycleBindingToken
359
+ }
360
+ };
361
+ }
362
+ if (managed &&
363
+ commands.respond === true &&
364
+ terminalBridgeReady &&
365
+ entry.status === "waiting_for_openclaw" &&
366
+ !managedApprovalPending &&
367
+ approvalState.blocked !== true) {
368
+ actions.respond = {
369
+ tool: "agent_knock_knock_respond",
370
+ arguments: { turn_id: id },
371
+ missing_required: ["request"]
372
+ };
373
+ }
374
+ const approvalFingerprint = stringValue(approvalState.fingerprint);
375
+ const managedApprovalEligible = terminalBridgeReady &&
376
+ entry.status === "waiting_for_openclaw" &&
377
+ (entry.agent !== "claude" ||
378
+ approvalState.decision_mode === "keys");
379
+ if (commands.approve === true &&
380
+ approvalState.approvable === true &&
381
+ approvalFingerprint &&
382
+ ((terminalControlled &&
383
+ entry.agent === "codex") ||
384
+ managedApprovalEligible)) {
385
+ actions.approve = {
386
+ tool: "agent_knock_knock_approve",
387
+ arguments: targetArguments,
388
+ missing_required: ["expected_approval_fingerprint"],
389
+ before_call: {
390
+ tool: "agent_knock_knock_status",
391
+ arguments: targetArguments,
392
+ use: "After explicit user confirmation, copy the latest terminal_status.approval_state.fingerprint into expected_approval_fingerprint."
393
+ },
394
+ requires_explicit_user_confirmation: true,
395
+ requires_fresh_status: true
396
+ };
397
+ }
398
+ const cancelAction = renderCancelListAction(entry, facts, targetArguments, approvalState);
399
+ if (cancelAction) {
400
+ actions.cancel = cancelAction;
401
+ }
402
+ if (managed && facts.renewEligible) {
403
+ actions.renew = {
404
+ tool: "agent_knock_knock_renew",
405
+ arguments: targetArguments
406
+ };
407
+ }
408
+ if (managed && facts.retryCallbackEligible) {
409
+ actions.retry_callback = {
410
+ tool: "agent_knock_knock_retry_callback",
411
+ arguments: targetArguments
412
+ };
413
+ }
414
+ if (commands.close === true) {
415
+ const orphanedDispatch = isRecord(entry.orphaned_terminal_dispatch)
416
+ ? entry.orphaned_terminal_dispatch
417
+ : undefined;
418
+ const expectedMessageId = stringValue(orphanedDispatch?.message_id);
419
+ const expectedTransitionId = stringValue(orphanedDispatch?.transition_id);
420
+ actions.close = {
421
+ tool: "agent_knock_knock_close",
422
+ arguments: {
423
+ ...(managed ? { turn_id: id } : { conversation_id: id }),
424
+ ...(expectedMessageId
425
+ ? { expected_message_id: expectedMessageId }
426
+ : {}),
427
+ ...(expectedTransitionId
428
+ ? { expected_transition_id: expectedTransitionId }
429
+ : {})
430
+ },
431
+ requires_explicit_user_confirmation: true
432
+ };
433
+ }
434
+ return actions;
435
+ }
436
+ function appendTerminalWatchAction(input) {
437
+ if (!input.terminalControlled ||
438
+ input.commands.watch !== true ||
439
+ !["working", "awaiting_approval"].includes(String(input.entry.activity_state ?? "")) ||
440
+ !input.lifecycleBindingToken) {
441
+ return;
442
+ }
443
+ input.actions.watch = {
444
+ tool: "agent_knock_knock_watch",
445
+ arguments: {
446
+ terminal_id: input.id
447
+ },
448
+ requires_user_intent: true,
449
+ use: TERMINAL_WATCH_ACTION_USE
450
+ };
451
+ }
452
+ export function terminalWatchDiscoveryHint(terminalId) {
453
+ return {
454
+ kind: "terminal_watch_discovery",
455
+ terminal_id: terminalId,
456
+ command: `/akk watch ${terminalId}`,
457
+ available_action_required: true,
458
+ instruction: "Refresh agent_knock_knock_list and use only this terminal's current " +
459
+ "available_actions.watch. Terminal Watch is only for human-started " +
460
+ "external work, never an AKK-managed Turn."
461
+ };
462
+ }
463
+ export function exactTerminalWatchAction(entry, terminalId) {
464
+ if (!isRecord(entry) || !isRecord(entry.available_actions)) {
465
+ return undefined;
466
+ }
467
+ const watch = isRecord(entry.available_actions.watch)
468
+ ? entry.available_actions.watch
469
+ : undefined;
470
+ const args = isRecord(watch?.arguments) ? watch.arguments : undefined;
471
+ return watch?.tool === "agent_knock_knock_watch" &&
472
+ watch.requires_user_intent === true &&
473
+ args?.terminal_id === terminalId &&
474
+ Object.keys(args).length === 1
475
+ ? watch
476
+ : undefined;
477
+ }
478
+ const CURRENT_TURN_ACTIONS = [
479
+ "status", "respond", "approve", "cancel", "renew", "retry_callback"
480
+ ];
481
+ export function currentTerminalActions(currentTurn) {
482
+ if (!currentTurn || !isRecord(currentTurn.available_actions)) {
483
+ return {};
484
+ }
485
+ const actions = {};
486
+ for (const action of CURRENT_TURN_ACTIONS) {
487
+ if (isRecord(currentTurn.available_actions[action])) {
488
+ actions[action] = currentTurn.available_actions[action];
489
+ }
490
+ }
491
+ return actions;
492
+ }
493
+ export function safeTerminalActionsDuringConflict(rawActions) {
494
+ const actions = {};
495
+ for (const action of ["status", "close"]) {
496
+ if (isRecord(rawActions[action])) {
497
+ actions[action] = rawActions[action];
498
+ }
499
+ }
500
+ return actions;
501
+ }
502
+ export function sendActionForManagedSession(action, sessionId) {
503
+ const { selector: _selector, ...existingArguments } = isRecord(action.arguments)
504
+ ? action.arguments
505
+ : {};
506
+ return {
507
+ ...action,
508
+ arguments: {
509
+ ...existingArguments,
510
+ session_id: sessionId
511
+ }
512
+ };
513
+ }
514
+ export function actionsForManagedSessionBinding(actions, session) {
515
+ const token = managedSessionBindingToken(session);
516
+ const next = { ...actions };
517
+ for (const actionName of ["new_thread", "resume_thread", "native_inspect"]) {
518
+ const action = isRecord(next[actionName]) ? next[actionName] : undefined;
519
+ if (!action) {
520
+ continue;
521
+ }
522
+ next[actionName] = {
523
+ ...action,
524
+ arguments: {
525
+ ...(isRecord(action.arguments) ? action.arguments : {}),
526
+ expected_binding_token: token
527
+ }
528
+ };
529
+ }
530
+ return next;
531
+ }
532
+ export function safeUnavailableManagedTurnActions(actionsValue) {
533
+ const actions = {};
534
+ for (const action of ["status", "retry_callback", "close"]) {
535
+ if (isRecord(actionsValue[action])) {
536
+ actions[action] = actionsValue[action];
537
+ }
538
+ }
539
+ return actions;
540
+ }
541
+ export function renderHistoricalManagedTurn(managedTurn) {
542
+ const availableActions = isRecord(managedTurn.available_actions)
543
+ ? managedTurn.available_actions
544
+ : {};
545
+ return {
546
+ ...managedTurn,
547
+ available_actions: safeUnavailableManagedTurnActions(availableActions)
548
+ };
549
+ }
550
+ export function renderCurrentManagedTurn(managedTurn, facts) {
551
+ if (!facts.rawApproval || !facts.isCodex)
552
+ return managedTurn;
553
+ const approve = retargetConversationAction(facts.rawApproval, facts.ownerId);
554
+ const terminalApprovalState = facts.terminalApprovalState?.();
555
+ return {
556
+ ...managedTurn,
557
+ ...(terminalApprovalState
558
+ ? { approval_state: terminalApprovalState }
559
+ : {}),
560
+ available_actions: {
561
+ ...(isRecord(managedTurn.available_actions)
562
+ ? managedTurn.available_actions
563
+ : {}),
564
+ approve
565
+ }
566
+ };
567
+ }
568
+ export function readOnlyListActions(actionsValue) {
569
+ return isRecord(actionsValue.status)
570
+ ? { status: actionsValue.status }
571
+ : {};
572
+ }
573
+ export function readOnlyManagedTurn(managedTurn) {
574
+ return {
575
+ ...managedTurn,
576
+ available_actions: readOnlyListActions(isRecord(managedTurn.available_actions)
577
+ ? managedTurn.available_actions
578
+ : {})
579
+ };
580
+ }
581
+ export function withoutGenericHandoffSourceClose(managedTurn, blockingHandoffTurnIds) {
582
+ const conversationId = stringValue(managedTurn.conversation_id);
583
+ if (!conversationId || !blockingHandoffTurnIds.has(conversationId)) {
584
+ return managedTurn;
585
+ }
586
+ const availableActions = isRecord(managedTurn.available_actions)
587
+ ? managedTurn.available_actions
588
+ : {};
589
+ const { close: _genericClose, ...safeActions } = availableActions;
590
+ return {
591
+ ...managedTurn,
592
+ available_actions: safeActions
593
+ };
594
+ }
595
+ export function retargetConversationAction(action, conversationId) {
596
+ const beforeCall = isRecord(action.before_call)
597
+ ? action.before_call
598
+ : undefined;
599
+ return {
600
+ ...action,
601
+ arguments: {
602
+ ...(isRecord(action.arguments) ? action.arguments : {}),
603
+ turn_id: conversationId,
604
+ conversation_id: undefined
605
+ },
606
+ ...(beforeCall
607
+ ? {
608
+ before_call: {
609
+ ...beforeCall,
610
+ arguments: {
611
+ ...(isRecord(beforeCall.arguments)
612
+ ? beforeCall.arguments
613
+ : {}),
614
+ turn_id: conversationId,
615
+ conversation_id: undefined
616
+ }
617
+ }
618
+ }
619
+ : {})
620
+ };
621
+ }
622
+ function renderCancelListAction(entry, facts, targetArguments, approvalState) {
623
+ const rawCancellable = entry.source === "terminal" &&
624
+ isRecord(entry.commands) &&
625
+ entry.commands.cancel === true &&
626
+ (entry.activity_state === "working" ||
627
+ (approvalState.blocked === true &&
628
+ approvalState.approvable === true));
629
+ const managedCancellable = entry.source === "managed_turn" &&
630
+ facts.terminalBridgeReady &&
631
+ ["waiting_for_agent", "waiting_for_openclaw"].includes(String(entry.status)) &&
632
+ !(facts.managedApprovalPending &&
633
+ approvalState.approvable !== true);
634
+ if (!rawCancellable && !managedCancellable) {
635
+ return undefined;
636
+ }
637
+ return {
638
+ tool: "agent_knock_knock_cancel",
639
+ arguments: targetArguments,
640
+ requires_user_intent: true
641
+ };
642
+ }
643
+ //# sourceMappingURL=terminal-list-renderer.js.map