@scotthuang/agent-knock-knock 0.12.11 → 0.12.12

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 (322) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +5 -5
  3. package/dist/src/callback-cli-adapter.d.ts +47 -0
  4. package/dist/src/callback-cli-adapter.js +156 -0
  5. package/dist/src/callback-cli-adapter.js.map +1 -0
  6. package/dist/src/callback-outbox-policy.d.ts +95 -0
  7. package/dist/src/callback-outbox-policy.js +149 -0
  8. package/dist/src/callback-outbox-policy.js.map +1 -0
  9. package/dist/src/callback-outbox-service.d.ts +247 -0
  10. package/dist/src/callback-outbox-service.js +1053 -0
  11. package/dist/src/callback-outbox-service.js.map +1 -0
  12. package/dist/src/callback-outbox-settlement.d.ts +54 -0
  13. package/dist/src/callback-outbox-settlement.js +241 -0
  14. package/dist/src/callback-outbox-settlement.js.map +1 -0
  15. package/dist/src/canonical-json.d.ts +1 -0
  16. package/dist/src/canonical-json.js +14 -0
  17. package/dist/src/canonical-json.js.map +1 -0
  18. package/dist/src/claude-lifecycle-compatibility.js +15 -0
  19. package/dist/src/claude-lifecycle-compatibility.js.map +1 -1
  20. package/dist/src/claude-local-transcript-provider.d.ts +1 -1
  21. package/dist/src/claude-local-transcript-provider.js +19 -5
  22. package/dist/src/claude-local-transcript-provider.js.map +1 -1
  23. package/dist/src/cli-command-runtime.d.ts +14 -0
  24. package/dist/src/cli-command-runtime.js +164 -0
  25. package/dist/src/cli-command-runtime.js.map +1 -0
  26. package/dist/src/cli-core.d.ts +4 -42
  27. package/dist/src/cli-core.js +906 -28717
  28. package/dist/src/cli-core.js.map +1 -1
  29. package/dist/src/cli-runtime-context.d.ts +57 -0
  30. package/dist/src/cli-runtime-context.js +118 -0
  31. package/dist/src/cli-runtime-context.js.map +1 -0
  32. package/dist/src/codex-lifecycle-compatibility.js +2 -1
  33. package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
  34. package/dist/src/codex-local-session-provider.d.ts +18 -0
  35. package/dist/src/codex-local-session-provider.js +67 -0
  36. package/dist/src/codex-local-session-provider.js.map +1 -1
  37. package/dist/src/codex-session-provider.js +1 -3
  38. package/dist/src/codex-session-provider.js.map +1 -1
  39. package/dist/src/conversation-trace.d.ts +30 -0
  40. package/dist/src/conversation-trace.js +185 -0
  41. package/dist/src/conversation-trace.js.map +1 -0
  42. package/dist/src/deferred-foreground-application-service.d.ts +84 -0
  43. package/dist/src/deferred-foreground-application-service.js +742 -0
  44. package/dist/src/deferred-foreground-application-service.js.map +1 -0
  45. package/dist/src/deferred-foreground-authority-cli-adapter.d.ts +78 -0
  46. package/dist/src/deferred-foreground-authority-cli-adapter.js +724 -0
  47. package/dist/src/deferred-foreground-authority-cli-adapter.js.map +1 -0
  48. package/dist/src/deferred-foreground-boundary.d.ts +61 -0
  49. package/dist/src/deferred-foreground-boundary.js +2 -0
  50. package/dist/src/deferred-foreground-boundary.js.map +1 -0
  51. package/dist/src/deferred-foreground-capability.d.ts +4 -0
  52. package/dist/src/deferred-foreground-capability.js +184 -0
  53. package/dist/src/deferred-foreground-capability.js.map +1 -0
  54. package/dist/src/deferred-foreground-preparation-cli-adapter.d.ts +53 -0
  55. package/dist/src/deferred-foreground-preparation-cli-adapter.js +210 -0
  56. package/dist/src/deferred-foreground-preparation-cli-adapter.js.map +1 -0
  57. package/dist/src/deferred-foreground-preparation-service.d.ts +72 -0
  58. package/dist/src/deferred-foreground-preparation-service.js +179 -0
  59. package/dist/src/deferred-foreground-preparation-service.js.map +1 -0
  60. package/dist/src/deferred-foreground-recovery-cli-adapter.d.ts +139 -0
  61. package/dist/src/deferred-foreground-recovery-cli-adapter.js +1125 -0
  62. package/dist/src/deferred-foreground-recovery-cli-adapter.js.map +1 -0
  63. package/dist/src/deferred-foreground-recovery-service.d.ts +48 -0
  64. package/dist/src/deferred-foreground-recovery-service.js +91 -0
  65. package/dist/src/deferred-foreground-recovery-service.js.map +1 -0
  66. package/dist/src/deferred-foreground-transfer-policy.d.ts +2 -0
  67. package/dist/src/deferred-foreground-transfer-policy.js +10 -0
  68. package/dist/src/deferred-foreground-transfer-policy.js.map +1 -0
  69. package/dist/src/deferred-foreground-transfer.js +43 -101
  70. package/dist/src/deferred-foreground-transfer.js.map +1 -1
  71. package/dist/src/doctor-capabilities.d.ts +9 -0
  72. package/dist/src/doctor-capabilities.js +22 -0
  73. package/dist/src/doctor-capabilities.js.map +1 -1
  74. package/dist/src/durable-json-file.d.ts +22 -0
  75. package/dist/src/durable-json-file.js +127 -0
  76. package/dist/src/durable-json-file.js.map +1 -0
  77. package/dist/src/file-lock-cli-adapter.d.ts +43 -0
  78. package/dist/src/file-lock-cli-adapter.js +150 -0
  79. package/dist/src/file-lock-cli-adapter.js.map +1 -0
  80. package/dist/src/herdr-terminal-control-provider.js +1 -3
  81. package/dist/src/herdr-terminal-control-provider.js.map +1 -1
  82. package/dist/src/install-doctor-command-adapter.d.ts +17 -0
  83. package/dist/src/install-doctor-command-adapter.js +225 -0
  84. package/dist/src/install-doctor-command-adapter.js.map +1 -0
  85. package/dist/src/live-lifecycle-evidence.js +76 -46
  86. package/dist/src/live-lifecycle-evidence.js.map +1 -1
  87. package/dist/src/live-lifecycle-smoke.js +74 -50
  88. package/dist/src/live-lifecycle-smoke.js.map +1 -1
  89. package/dist/src/managed-session.d.ts +2 -0
  90. package/dist/src/managed-session.js +24 -0
  91. package/dist/src/managed-session.js.map +1 -1
  92. package/dist/src/managed-turn-recovery-service.d.ts +86 -0
  93. package/dist/src/managed-turn-recovery-service.js +145 -0
  94. package/dist/src/managed-turn-recovery-service.js.map +1 -0
  95. package/dist/src/mutation-transaction.d.ts +48 -0
  96. package/dist/src/mutation-transaction.js +73 -0
  97. package/dist/src/mutation-transaction.js.map +1 -0
  98. package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +154 -0
  99. package/dist/src/native-thread-lifecycle-cli-adapter.js +786 -0
  100. package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -0
  101. package/dist/src/native-thread-lifecycle-ledger-cli-adapter.d.ts +25 -0
  102. package/dist/src/native-thread-lifecycle-ledger-cli-adapter.js +50 -0
  103. package/dist/src/native-thread-lifecycle-ledger-cli-adapter.js.map +1 -0
  104. package/dist/src/native-thread-lifecycle-query-service.d.ts +75 -0
  105. package/dist/src/native-thread-lifecycle-query-service.js +297 -0
  106. package/dist/src/native-thread-lifecycle-query-service.js.map +1 -0
  107. package/dist/src/native-thread-lifecycle-recovery-adapter.d.ts +45 -0
  108. package/dist/src/native-thread-lifecycle-recovery-adapter.js +154 -0
  109. package/dist/src/native-thread-lifecycle-recovery-adapter.js.map +1 -0
  110. package/dist/src/native-thread-lifecycle-recovery-service.d.ts +211 -0
  111. package/dist/src/native-thread-lifecycle-recovery-service.js +1093 -0
  112. package/dist/src/native-thread-lifecycle-recovery-service.js.map +1 -0
  113. package/dist/src/native-thread-resume-snapshot-policy.d.ts +73 -0
  114. package/dist/src/native-thread-resume-snapshot-policy.js +218 -0
  115. package/dist/src/native-thread-resume-snapshot-policy.js.map +1 -0
  116. package/dist/src/native-thread-resume-snapshot.d.ts +3 -61
  117. package/dist/src/native-thread-resume-snapshot.js +2 -143
  118. package/dist/src/native-thread-resume-snapshot.js.map +1 -1
  119. package/dist/src/native-thread-transition-application.d.ts +147 -0
  120. package/dist/src/native-thread-transition-application.js +974 -0
  121. package/dist/src/native-thread-transition-application.js.map +1 -0
  122. package/dist/src/native-thread-transition-policy.d.ts +127 -0
  123. package/dist/src/native-thread-transition-policy.js +154 -0
  124. package/dist/src/native-thread-transition-policy.js.map +1 -0
  125. package/dist/src/native-thread-transition-resource-adapter.d.ts +12 -0
  126. package/dist/src/native-thread-transition-resource-adapter.js +44 -0
  127. package/dist/src/native-thread-transition-resource-adapter.js.map +1 -0
  128. package/dist/src/native-thread-transition-settlement-service.d.ts +94 -0
  129. package/dist/src/native-thread-transition-settlement-service.js +134 -0
  130. package/dist/src/native-thread-transition-settlement-service.js.map +1 -0
  131. package/dist/src/native-thread-transition-verification-adapter.d.ts +62 -0
  132. package/dist/src/native-thread-transition-verification-adapter.js +451 -0
  133. package/dist/src/native-thread-transition-verification-adapter.js.map +1 -0
  134. package/dist/src/openclaw-callback-transport.d.ts +64 -0
  135. package/dist/src/openclaw-callback-transport.js +583 -0
  136. package/dist/src/openclaw-callback-transport.js.map +1 -0
  137. package/dist/src/openclaw-plugin-callback-adapter.d.ts +1 -0
  138. package/dist/src/openclaw-plugin-callback-adapter.js +341 -0
  139. package/dist/src/openclaw-plugin-callback-adapter.js.map +1 -0
  140. package/dist/src/openclaw-plugin-command-adapter.d.ts +16 -0
  141. package/dist/src/openclaw-plugin-command-adapter.js +1427 -0
  142. package/dist/src/openclaw-plugin-command-adapter.js.map +1 -0
  143. package/dist/src/openclaw-plugin-helpers.js +48 -38
  144. package/dist/src/openclaw-plugin-helpers.js.map +1 -1
  145. package/dist/src/openclaw-plugin-schemas.d.ts +382 -0
  146. package/dist/src/openclaw-plugin-schemas.js +394 -0
  147. package/dist/src/openclaw-plugin-schemas.js.map +1 -0
  148. package/dist/src/openclaw-plugin-supervisor.d.ts +6 -0
  149. package/dist/src/openclaw-plugin-supervisor.js +85 -0
  150. package/dist/src/openclaw-plugin-supervisor.js.map +1 -0
  151. package/dist/src/openclaw-plugin.js +7 -2212
  152. package/dist/src/openclaw-plugin.js.map +1 -1
  153. package/dist/src/protocol.d.ts +5 -0
  154. package/dist/src/protocol.js +59 -3
  155. package/dist/src/protocol.js.map +1 -1
  156. package/dist/src/session-store.d.ts +1 -0
  157. package/dist/src/session-store.js +84 -106
  158. package/dist/src/session-store.js.map +1 -1
  159. package/dist/src/store.js +2 -1
  160. package/dist/src/store.js.map +1 -1
  161. package/dist/src/terminal-acceptance-application-service.d.ts +65 -0
  162. package/dist/src/terminal-acceptance-application-service.js +63 -0
  163. package/dist/src/terminal-acceptance-application-service.js.map +1 -0
  164. package/dist/src/terminal-acceptance-cli-adapter.d.ts +210 -0
  165. package/dist/src/terminal-acceptance-cli-adapter.js +957 -0
  166. package/dist/src/terminal-acceptance-cli-adapter.js.map +1 -0
  167. package/dist/src/terminal-action-projection.d.ts +291 -0
  168. package/dist/src/terminal-action-projection.js +353 -0
  169. package/dist/src/terminal-action-projection.js.map +1 -0
  170. package/dist/src/terminal-agent-bridge.d.ts +3 -0
  171. package/dist/src/terminal-agent-bridge.js +29 -8
  172. package/dist/src/terminal-agent-bridge.js.map +1 -1
  173. package/dist/src/terminal-authority-policy.d.ts +141 -0
  174. package/dist/src/terminal-authority-policy.js +367 -0
  175. package/dist/src/terminal-authority-policy.js.map +1 -0
  176. package/dist/src/terminal-binding-authority.d.ts +118 -0
  177. package/dist/src/terminal-binding-authority.js +245 -0
  178. package/dist/src/terminal-binding-authority.js.map +1 -0
  179. package/dist/src/terminal-binding-reconciliation-service.d.ts +75 -0
  180. package/dist/src/terminal-binding-reconciliation-service.js +73 -0
  181. package/dist/src/terminal-binding-reconciliation-service.js.map +1 -0
  182. package/dist/src/terminal-command-cli-adapter.d.ts +375 -0
  183. package/dist/src/terminal-command-cli-adapter.js +3128 -0
  184. package/dist/src/terminal-command-cli-adapter.js.map +1 -0
  185. package/dist/src/terminal-control-ref.d.ts +4 -0
  186. package/dist/src/terminal-control-ref.js +11 -8
  187. package/dist/src/terminal-control-ref.js.map +1 -1
  188. package/dist/src/terminal-delegate-cli-adapter.d.ts +41 -0
  189. package/dist/src/terminal-delegate-cli-adapter.js +242 -0
  190. package/dist/src/terminal-delegate-cli-adapter.js.map +1 -0
  191. package/dist/src/terminal-dispatch-abort.d.ts +22 -0
  192. package/dist/src/terminal-dispatch-abort.js +30 -0
  193. package/dist/src/terminal-dispatch-abort.js.map +1 -0
  194. package/dist/src/terminal-dispatch-application.d.ts +115 -0
  195. package/dist/src/terminal-dispatch-application.js +478 -0
  196. package/dist/src/terminal-dispatch-application.js.map +1 -0
  197. package/dist/src/terminal-dispatch-capability.d.ts +63 -0
  198. package/dist/src/terminal-dispatch-capability.js +133 -0
  199. package/dist/src/terminal-dispatch-capability.js.map +1 -0
  200. package/dist/src/terminal-dispatch-completion-cli-adapter.d.ts +22 -0
  201. package/dist/src/terminal-dispatch-completion-cli-adapter.js +96 -0
  202. package/dist/src/terminal-dispatch-completion-cli-adapter.js.map +1 -0
  203. package/dist/src/terminal-dispatch-composition.d.ts +79 -0
  204. package/dist/src/terminal-dispatch-composition.js +2 -0
  205. package/dist/src/terminal-dispatch-composition.js.map +1 -0
  206. package/dist/src/terminal-dispatch-execution.d.ts +290 -0
  207. package/dist/src/terminal-dispatch-execution.js +916 -0
  208. package/dist/src/terminal-dispatch-execution.js.map +1 -0
  209. package/dist/src/terminal-dispatch-ledger-codec.d.ts +110 -0
  210. package/dist/src/terminal-dispatch-ledger-codec.js +399 -0
  211. package/dist/src/terminal-dispatch-ledger-codec.js.map +1 -0
  212. package/dist/src/terminal-dispatch-policy.d.ts +93 -0
  213. package/dist/src/terminal-dispatch-policy.js +122 -0
  214. package/dist/src/terminal-dispatch-policy.js.map +1 -0
  215. package/dist/src/terminal-dispatch-presenter.d.ts +65 -0
  216. package/dist/src/terminal-dispatch-presenter.js +258 -0
  217. package/dist/src/terminal-dispatch-presenter.js.map +1 -0
  218. package/dist/src/terminal-dispatch-receipt.d.ts +79 -0
  219. package/dist/src/terminal-dispatch-receipt.js +314 -0
  220. package/dist/src/terminal-dispatch-receipt.js.map +1 -0
  221. package/dist/src/terminal-dispatch-recovery-cli-adapter.d.ts +132 -0
  222. package/dist/src/terminal-dispatch-recovery-cli-adapter.js +1330 -0
  223. package/dist/src/terminal-dispatch-recovery-cli-adapter.js.map +1 -0
  224. package/dist/src/terminal-dispatch-recovery-service.d.ts +271 -0
  225. package/dist/src/terminal-dispatch-recovery-service.js +374 -0
  226. package/dist/src/terminal-dispatch-recovery-service.js.map +1 -0
  227. package/dist/src/terminal-dispatch-repository-cli-adapter.d.ts +35 -0
  228. package/dist/src/terminal-dispatch-repository-cli-adapter.js +257 -0
  229. package/dist/src/terminal-dispatch-repository-cli-adapter.js.map +1 -0
  230. package/dist/src/terminal-handoff-application-service.d.ts +7 -0
  231. package/dist/src/terminal-handoff-application-service.js +18 -0
  232. package/dist/src/terminal-handoff-application-service.js.map +1 -0
  233. package/dist/src/terminal-handoff-cli-adapter.d.ts +229 -0
  234. package/dist/src/terminal-handoff-cli-adapter.js +1389 -0
  235. package/dist/src/terminal-handoff-cli-adapter.js.map +1 -0
  236. package/dist/src/terminal-handoff-facts.d.ts +12 -0
  237. package/dist/src/terminal-handoff-facts.js +16 -0
  238. package/dist/src/terminal-handoff-facts.js.map +1 -0
  239. package/dist/src/terminal-identity-authority-cli-adapter.d.ts +318 -0
  240. package/dist/src/terminal-identity-authority-cli-adapter.js +1072 -0
  241. package/dist/src/terminal-identity-authority-cli-adapter.js.map +1 -0
  242. package/dist/src/terminal-identity-authority-service.d.ts +48 -0
  243. package/dist/src/terminal-identity-authority-service.js +45 -0
  244. package/dist/src/terminal-identity-authority-service.js.map +1 -0
  245. package/dist/src/terminal-list-cli-adapter.d.ts +250 -0
  246. package/dist/src/terminal-list-cli-adapter.js +2226 -0
  247. package/dist/src/terminal-list-cli-adapter.js.map +1 -0
  248. package/dist/src/terminal-list-renderer.d.ts +32 -0
  249. package/dist/src/terminal-list-renderer.js +568 -0
  250. package/dist/src/terminal-list-renderer.js.map +1 -0
  251. package/dist/src/terminal-maintenance-cli-adapter.d.ts +102 -0
  252. package/dist/src/terminal-maintenance-cli-adapter.js +1059 -0
  253. package/dist/src/terminal-maintenance-cli-adapter.js.map +1 -0
  254. package/dist/src/terminal-monitor-application-service.d.ts +275 -0
  255. package/dist/src/terminal-monitor-application-service.js +982 -0
  256. package/dist/src/terminal-monitor-application-service.js.map +1 -0
  257. package/dist/src/terminal-monitor-cli-adapter.d.ts +130 -0
  258. package/dist/src/terminal-monitor-cli-adapter.js +442 -0
  259. package/dist/src/terminal-monitor-cli-adapter.js.map +1 -0
  260. package/dist/src/terminal-monitor-decision-policy.d.ts +98 -0
  261. package/dist/src/terminal-monitor-decision-policy.js +246 -0
  262. package/dist/src/terminal-monitor-decision-policy.js.map +1 -0
  263. package/dist/src/terminal-monitor-launch-plan.d.ts +45 -0
  264. package/dist/src/terminal-monitor-launch-plan.js +94 -0
  265. package/dist/src/terminal-monitor-launch-plan.js.map +1 -0
  266. package/dist/src/terminal-monitor-ownership-policy.d.ts +31 -0
  267. package/dist/src/terminal-monitor-ownership-policy.js +64 -0
  268. package/dist/src/terminal-monitor-ownership-policy.js.map +1 -0
  269. package/dist/src/terminal-monitor-poll-policy.d.ts +48 -0
  270. package/dist/src/terminal-monitor-poll-policy.js +67 -0
  271. package/dist/src/terminal-monitor-poll-policy.js.map +1 -0
  272. package/dist/src/terminal-monitor-reconciliation-eligibility.d.ts +53 -0
  273. package/dist/src/terminal-monitor-reconciliation-eligibility.js +114 -0
  274. package/dist/src/terminal-monitor-reconciliation-eligibility.js.map +1 -0
  275. package/dist/src/terminal-monitor-state-cli-adapter.d.ts +106 -0
  276. package/dist/src/terminal-monitor-state-cli-adapter.js +1501 -0
  277. package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -0
  278. package/dist/src/terminal-monitor-state-reconciliation-service.d.ts +87 -0
  279. package/dist/src/terminal-monitor-state-reconciliation-service.js +106 -0
  280. package/dist/src/terminal-monitor-state-reconciliation-service.js.map +1 -0
  281. package/dist/src/terminal-monitor-supervision-cli-adapter.d.ts +122 -0
  282. package/dist/src/terminal-monitor-supervision-cli-adapter.js +685 -0
  283. package/dist/src/terminal-monitor-supervision-cli-adapter.js.map +1 -0
  284. package/dist/src/terminal-process-facts.d.ts +2 -0
  285. package/dist/src/terminal-process-facts.js +19 -0
  286. package/dist/src/terminal-process-facts.js.map +1 -0
  287. package/dist/src/terminal-process-source.d.ts +6 -4
  288. package/dist/src/terminal-process-source.js +25 -20
  289. package/dist/src/terminal-process-source.js.map +1 -1
  290. package/dist/src/terminal-runtime-cli-adapter.d.ts +80 -0
  291. package/dist/src/terminal-runtime-cli-adapter.js +488 -0
  292. package/dist/src/terminal-runtime-cli-adapter.js.map +1 -0
  293. package/dist/src/terminal-scoped-approval-authority.d.ts +62 -0
  294. package/dist/src/terminal-scoped-approval-authority.js +281 -0
  295. package/dist/src/terminal-scoped-approval-authority.js.map +1 -0
  296. package/dist/src/terminal-selector-projection-service.d.ts +26 -0
  297. package/dist/src/terminal-selector-projection-service.js +81 -0
  298. package/dist/src/terminal-selector-projection-service.js.map +1 -0
  299. package/dist/src/terminal-status-cli-adapter.d.ts +116 -0
  300. package/dist/src/terminal-status-cli-adapter.js +495 -0
  301. package/dist/src/terminal-status-cli-adapter.js.map +1 -0
  302. package/dist/src/terminal-status-facts.d.ts +56 -0
  303. package/dist/src/terminal-status-facts.js +199 -0
  304. package/dist/src/terminal-status-facts.js.map +1 -0
  305. package/dist/src/terminal-submission-acceptance.d.ts +6 -148
  306. package/dist/src/terminal-submission-acceptance.js +2 -229
  307. package/dist/src/terminal-submission-acceptance.js.map +1 -1
  308. package/dist/src/terminal-submission-facts.d.ts +123 -0
  309. package/dist/src/terminal-submission-facts.js +205 -0
  310. package/dist/src/terminal-submission-facts.js.map +1 -0
  311. package/dist/src/terminal-turn-binding-authority-cli-adapter.d.ts +14 -0
  312. package/dist/src/terminal-turn-binding-authority-cli-adapter.js +90 -0
  313. package/dist/src/terminal-turn-binding-authority-cli-adapter.js.map +1 -0
  314. package/dist/src/value-guards.d.ts +4 -0
  315. package/dist/src/value-guards.js +12 -0
  316. package/dist/src/value-guards.js.map +1 -0
  317. package/dist/src/verified-dead-agent-policy.d.ts +192 -0
  318. package/dist/src/verified-dead-agent-policy.js +262 -0
  319. package/dist/src/verified-dead-agent-policy.js.map +1 -0
  320. package/docs/quickstart-tmux.md +1 -1
  321. package/package.json +3 -1
  322. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-guards.js","sourceRoot":"","sources":["../../src/value-guards.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACzD,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,192 @@
1
+ import type { ExecutorKind } from "./executors.js";
2
+ import type { TerminalControlEvidence, TerminalControlRef } from "./terminal-control-ref.js";
3
+ export type VerifiedDeadTerminalAgentProcessProof = {
4
+ kind: "exact_pid_absent_from_complete_process_inventory";
5
+ agent: ExecutorKind;
6
+ pid: number;
7
+ process_uuid: string;
8
+ process_birth?: string;
9
+ conversation_id: string;
10
+ session_id: string;
11
+ turn_id: string;
12
+ terminal_control: TerminalControlRef;
13
+ terminal_endpoint: TerminalControlEvidence;
14
+ binding_id: string;
15
+ binding_generation: number;
16
+ message_id: string;
17
+ observed_at: string;
18
+ };
19
+ export type BoundTerminalAgentProcessObservation = {
20
+ status: "alive";
21
+ pid: number;
22
+ } | {
23
+ status: "verified_dead";
24
+ proof: VerifiedDeadTerminalAgentProcessProof;
25
+ } | {
26
+ status: "unverifiable";
27
+ reason: string;
28
+ };
29
+ export type VerifiedDeadAgentAuthorityDecision = {
30
+ status: "absent";
31
+ } | {
32
+ status: "valid";
33
+ proof: VerifiedDeadTerminalAgentProcessProof;
34
+ evidenceId: string;
35
+ recordedAt: string;
36
+ } | {
37
+ status: "invalid";
38
+ reason: string;
39
+ };
40
+ export type VerifiedDeadAgentAuthorityContext = {
41
+ terminalControl: TerminalControlRef;
42
+ conversation: {
43
+ agent: ExecutorKind;
44
+ conversationId: string;
45
+ sessionId: string;
46
+ turnId: string;
47
+ bindingId?: string;
48
+ bindingGeneration: number;
49
+ };
50
+ session?: {
51
+ status: string;
52
+ agent: ExecutorKind;
53
+ workspaceMatchesConversation: boolean;
54
+ binding?: {
55
+ terminalControl: TerminalControlRef;
56
+ pid: number;
57
+ processUuid?: string;
58
+ processBirth?: string;
59
+ bindingId: string;
60
+ generation: number;
61
+ };
62
+ };
63
+ takeover?: {
64
+ pid: number;
65
+ processUuid?: string;
66
+ processBirth?: string;
67
+ bindingId?: string;
68
+ bindingGeneration: number;
69
+ messageId?: string;
70
+ };
71
+ submission?: {
72
+ status?: string;
73
+ sessionId?: string;
74
+ turnId?: string;
75
+ messageId?: string;
76
+ bindingId?: string;
77
+ bindingGeneration: number;
78
+ };
79
+ };
80
+ export type VerifiedDeadAgentProcessDecision = {
81
+ status: "absent";
82
+ } | {
83
+ status: "invalid";
84
+ reason: string;
85
+ } | {
86
+ status: "alive";
87
+ pid: number;
88
+ } | {
89
+ status: "unverifiable";
90
+ reason: string;
91
+ } | {
92
+ status: "verified_dead";
93
+ proof: VerifiedDeadTerminalAgentProcessProof;
94
+ source: "persisted" | "observation";
95
+ };
96
+ export type VerifiedDeadAgentProcessInput = {
97
+ persistedAuthority: VerifiedDeadAgentAuthorityDecision;
98
+ observation?: BoundTerminalAgentProcessObservation;
99
+ };
100
+ type PersistedVerifiedDeadAgentProcessDecision = Extract<VerifiedDeadAgentProcessDecision, {
101
+ status: "absent" | "invalid" | "verified_dead";
102
+ }>;
103
+ type ObservedVerifiedDeadAgentProcessDecision = Exclude<VerifiedDeadAgentProcessDecision, {
104
+ status: "absent";
105
+ }>;
106
+ type FreshVerifiedDeadAgentProcessDecision = Exclude<ObservedVerifiedDeadAgentProcessDecision, {
107
+ status: "invalid";
108
+ }>;
109
+ export type AcceptedTurnDeadAgentStallInput = {
110
+ conversationStatus: string;
111
+ terminalBridge: boolean;
112
+ messageId?: string;
113
+ submissionStatus?: string;
114
+ submissionMessageId?: string;
115
+ deferredTransferId?: string;
116
+ deferredTransferStatus?: string;
117
+ };
118
+ export type AcceptedTurnDeadAgentStallDecision = {
119
+ status: "applicable";
120
+ } | {
121
+ status: "not_applicable";
122
+ } | {
123
+ status: "requires_deferred_transfer";
124
+ transferId: string;
125
+ };
126
+ export type VerifiedDeadAgentCompletionObservation<T> = {
127
+ status: "present";
128
+ completion: T;
129
+ } | {
130
+ status: "absent";
131
+ } | {
132
+ status: "unverifiable";
133
+ reason: string;
134
+ };
135
+ export type VerifiedDeadAgentCompletionDecision<T> = {
136
+ action: "complete";
137
+ completion: T;
138
+ } | {
139
+ action: "stall";
140
+ completionObservation: "absent" | "unverifiable";
141
+ resultReason: "bound_agent_process_verified_dead" | "bound_agent_process_verified_dead_completion_unverifiable";
142
+ };
143
+ type EventRecord = Readonly<Record<string, unknown>>;
144
+ type VerifiedDeadAgentEventSelection = {
145
+ status: "absent";
146
+ } | {
147
+ status: "candidate";
148
+ proof: VerifiedDeadTerminalAgentProcessProof;
149
+ evidenceId: string;
150
+ recordedAt: string;
151
+ } | {
152
+ status: "invalid";
153
+ reason: string;
154
+ };
155
+ export declare function isVerifiedDeadAgentProcessDisposition(disposition: unknown): boolean;
156
+ export declare function verifiedDeadTerminalAgentProcessEvidenceId(proof: VerifiedDeadTerminalAgentProcessProof): string;
157
+ export declare function validateStoredVerifiedDeadAgentAuthority({ disposition, context }: {
158
+ disposition: unknown;
159
+ context: VerifiedDeadAgentAuthorityContext;
160
+ }): VerifiedDeadAgentAuthorityDecision;
161
+ export declare function selectVerifiedDeadAgentEvent({ events, conversationId }: {
162
+ events: readonly EventRecord[];
163
+ conversationId: string;
164
+ }): VerifiedDeadAgentEventSelection;
165
+ export declare function validateVerifiedDeadAgentEventAuthority({ candidate, context }: {
166
+ candidate: Extract<VerifiedDeadAgentEventSelection, {
167
+ status: "candidate";
168
+ }>;
169
+ context: VerifiedDeadAgentAuthorityContext;
170
+ }): VerifiedDeadAgentAuthorityDecision;
171
+ export declare function reconcileVerifiedDeadAgentAuthority({ stored, event }: {
172
+ stored: VerifiedDeadAgentAuthorityDecision;
173
+ event: VerifiedDeadAgentAuthorityDecision;
174
+ }): VerifiedDeadAgentAuthorityDecision;
175
+ export declare function decideVerifiedDeadAgentProcess(input: {
176
+ persistedAuthority: VerifiedDeadAgentAuthorityDecision;
177
+ observation?: undefined;
178
+ }): PersistedVerifiedDeadAgentProcessDecision;
179
+ export declare function decideVerifiedDeadAgentProcess(input: {
180
+ persistedAuthority: {
181
+ status: "absent";
182
+ };
183
+ observation: BoundTerminalAgentProcessObservation;
184
+ }): FreshVerifiedDeadAgentProcessDecision;
185
+ export declare function decideVerifiedDeadAgentProcess(input: {
186
+ persistedAuthority: VerifiedDeadAgentAuthorityDecision;
187
+ observation: BoundTerminalAgentProcessObservation;
188
+ }): ObservedVerifiedDeadAgentProcessDecision;
189
+ export declare function decideVerifiedDeadAgentProcess(input: VerifiedDeadAgentProcessInput): VerifiedDeadAgentProcessDecision;
190
+ export declare function decideAcceptedTurnDeadAgentStall(input: AcceptedTurnDeadAgentStallInput): AcceptedTurnDeadAgentStallDecision;
191
+ export declare function decideVerifiedDeadAgentCompletion<T>(observation: VerifiedDeadAgentCompletionObservation<T>): VerifiedDeadAgentCompletionDecision<T>;
192
+ export {};
@@ -0,0 +1,262 @@
1
+ import { createHash } from "node:crypto";
2
+ import { sameTerminalControlIncarnation, terminalControlEvidenceMatches, terminalEndpointFromControlRef, terminalEndpointIdentityKey } from "./terminal-control-ref.js";
3
+ import { canonicalJson } from "./canonical-json.js";
4
+ import { isRecord, nonBlankString as stringValue } from "./value-guards.js";
5
+ export function isVerifiedDeadAgentProcessDisposition(disposition) {
6
+ return isRecord(disposition) && disposition.status === "verified_dead";
7
+ }
8
+ export function verifiedDeadTerminalAgentProcessEvidenceId(proof) {
9
+ return createHash("sha256")
10
+ .update(canonicalJson({
11
+ kind: proof.kind,
12
+ agent: proof.agent,
13
+ pid: proof.pid,
14
+ process_uuid: proof.process_uuid,
15
+ process_birth: proof.process_birth ?? null,
16
+ conversation_id: proof.conversation_id,
17
+ session_id: proof.session_id,
18
+ turn_id: proof.turn_id,
19
+ terminal_endpoint: proof.terminal_endpoint,
20
+ binding_id: proof.binding_id,
21
+ binding_generation: proof.binding_generation,
22
+ message_id: proof.message_id
23
+ }))
24
+ .digest("hex");
25
+ }
26
+ export function validateStoredVerifiedDeadAgentAuthority({ disposition, context }) {
27
+ if (!isVerifiedDeadAgentProcessDisposition(disposition)) {
28
+ return { status: "absent" };
29
+ }
30
+ const proof = isRecord(disposition) && isRecord(disposition.proof)
31
+ ? disposition.proof
32
+ : undefined;
33
+ const evidenceId = isRecord(disposition)
34
+ ? stringValue(disposition.evidence_id)
35
+ : undefined;
36
+ const recordedAt = isRecord(disposition)
37
+ ? stringValue(disposition.recorded_at)
38
+ : undefined;
39
+ return validateVerifiedDeadAgentEvidence({
40
+ proof,
41
+ evidenceId,
42
+ recordedAt,
43
+ context
44
+ });
45
+ }
46
+ export function selectVerifiedDeadAgentEvent({ events, conversationId }) {
47
+ const candidates = events.filter((event) => event.event === "terminal_agent_process_verified_dead" &&
48
+ event.conversation_id === conversationId);
49
+ if (candidates.length === 0) {
50
+ return { status: "absent" };
51
+ }
52
+ if (candidates.length !== 1) {
53
+ return {
54
+ status: "invalid",
55
+ reason: "the process-death event history is ambiguous"
56
+ };
57
+ }
58
+ const event = candidates[0];
59
+ const proof = isRecord(event.proof)
60
+ ? event.proof
61
+ : undefined;
62
+ const evidenceId = stringValue(event.evidence_id);
63
+ const recordedAt = stringValue(event.ts);
64
+ if (!proof ||
65
+ !evidenceId ||
66
+ !recordedAt ||
67
+ proof.observed_at !== recordedAt ||
68
+ verifiedDeadTerminalAgentProcessEvidenceId(proof) !== evidenceId) {
69
+ return {
70
+ status: "invalid",
71
+ reason: "the process-death event proof is malformed"
72
+ };
73
+ }
74
+ return {
75
+ status: "candidate",
76
+ proof,
77
+ evidenceId,
78
+ recordedAt
79
+ };
80
+ }
81
+ export function validateVerifiedDeadAgentEventAuthority({ candidate, context }) {
82
+ return validateVerifiedDeadAgentEvidence({
83
+ proof: candidate.proof,
84
+ evidenceId: candidate.evidenceId,
85
+ recordedAt: candidate.recordedAt,
86
+ context
87
+ });
88
+ }
89
+ export function reconcileVerifiedDeadAgentAuthority({ stored, event }) {
90
+ if (stored.status === "invalid") {
91
+ return stored;
92
+ }
93
+ if (stored.status === "absent") {
94
+ return event;
95
+ }
96
+ if (event.status !== "valid" ||
97
+ event.evidenceId !== stored.evidenceId ||
98
+ canonicalJson(event.proof) !== canonicalJson(stored.proof)) {
99
+ return {
100
+ status: "invalid",
101
+ reason: "the persisted process-death disposition has no exact append-only event"
102
+ };
103
+ }
104
+ return stored;
105
+ }
106
+ export function decideVerifiedDeadAgentProcess({ persistedAuthority, observation }) {
107
+ if (persistedAuthority.status === "invalid") {
108
+ return persistedAuthority;
109
+ }
110
+ if (persistedAuthority.status === "valid") {
111
+ return {
112
+ status: "verified_dead",
113
+ proof: persistedAuthority.proof,
114
+ source: "persisted"
115
+ };
116
+ }
117
+ if (!observation) {
118
+ return { status: "absent" };
119
+ }
120
+ if (observation.status === "verified_dead") {
121
+ return {
122
+ status: "verified_dead",
123
+ proof: observation.proof,
124
+ source: "observation"
125
+ };
126
+ }
127
+ return observation;
128
+ }
129
+ export function decideAcceptedTurnDeadAgentStall(input) {
130
+ if (input.conversationStatus !== "waiting_for_agent" ||
131
+ input.terminalBridge !== true ||
132
+ !input.messageId ||
133
+ input.submissionStatus !== "agent_accepted" ||
134
+ input.submissionMessageId !== input.messageId) {
135
+ return { status: "not_applicable" };
136
+ }
137
+ if (!input.deferredTransferId) {
138
+ return { status: "applicable" };
139
+ }
140
+ if (input.deferredTransferStatus === undefined) {
141
+ return {
142
+ status: "requires_deferred_transfer",
143
+ transferId: input.deferredTransferId
144
+ };
145
+ }
146
+ return input.deferredTransferStatus === "resolved"
147
+ ? { status: "applicable" }
148
+ : { status: "not_applicable" };
149
+ }
150
+ export function decideVerifiedDeadAgentCompletion(observation) {
151
+ if (observation.status === "present") {
152
+ return { action: "complete", completion: observation.completion };
153
+ }
154
+ return observation.status === "unverifiable"
155
+ ? {
156
+ action: "stall",
157
+ completionObservation: "unverifiable",
158
+ resultReason: "bound_agent_process_verified_dead_completion_unverifiable"
159
+ }
160
+ : {
161
+ action: "stall",
162
+ completionObservation: "absent",
163
+ resultReason: "bound_agent_process_verified_dead"
164
+ };
165
+ }
166
+ function validateVerifiedDeadAgentEvidence({ proof, evidenceId, recordedAt, context }) {
167
+ const candidate = isRecord(proof)
168
+ ? proof
169
+ : undefined;
170
+ const session = context.session;
171
+ const binding = session?.binding;
172
+ const takeover = context.takeover;
173
+ const submission = context.submission;
174
+ if (!candidate ||
175
+ candidate.kind !==
176
+ "exact_pid_absent_from_complete_process_inventory" ||
177
+ !session ||
178
+ session.status !== "bound" ||
179
+ !binding ||
180
+ candidate.agent !== session.agent ||
181
+ session.agent !== context.conversation.agent ||
182
+ !session.workspaceMatchesConversation ||
183
+ candidate.pid !== takeover?.pid ||
184
+ candidate.pid !== binding.pid ||
185
+ candidate.process_uuid !== takeover?.processUuid ||
186
+ candidate.process_uuid !== binding.processUuid ||
187
+ (candidate.process_birth ?? undefined) !==
188
+ (takeover?.processBirth ?? undefined) ||
189
+ (candidate.process_birth ?? undefined) !==
190
+ (binding.processBirth ?? undefined) ||
191
+ candidate.conversation_id !== context.conversation.conversationId ||
192
+ candidate.session_id !== context.conversation.sessionId ||
193
+ candidate.turn_id !== context.conversation.turnId ||
194
+ candidate.binding_id !== context.conversation.bindingId ||
195
+ candidate.binding_id !== binding.bindingId ||
196
+ candidate.binding_generation !==
197
+ context.conversation.bindingGeneration ||
198
+ candidate.binding_generation !== binding.generation ||
199
+ !terminalControlsShareIncarnation(binding.terminalControl, context.terminalControl) ||
200
+ candidate.binding_id !== takeover?.bindingId ||
201
+ candidate.binding_generation !== takeover?.bindingGeneration ||
202
+ candidate.message_id !== takeover?.messageId ||
203
+ candidate.message_id !== submission?.messageId ||
204
+ submission?.status !== "agent_accepted" ||
205
+ submission.sessionId !== candidate.session_id ||
206
+ submission.turnId !== candidate.turn_id ||
207
+ submission.bindingId !== candidate.binding_id ||
208
+ submission.bindingGeneration !== candidate.binding_generation ||
209
+ !isRecord(candidate.terminal_control) ||
210
+ !terminalControlsShareIncarnation(candidate.terminal_control, context.terminalControl) ||
211
+ !terminalControlEvidenceMatches(candidate.terminal_endpoint, context.terminalControl, { requireProcessAnchor: true }) ||
212
+ Number(candidate.terminal_endpoint.process_anchor_pid) !==
213
+ terminalEndpointFromControlRef(context.terminalControl).processAnchorPid ||
214
+ validTimestampMs(candidate.observed_at) === undefined ||
215
+ !recordedAt ||
216
+ validTimestampMs(recordedAt) === undefined ||
217
+ recordedAt !== candidate.observed_at ||
218
+ !evidenceId ||
219
+ evidenceId !== verifiedDeadTerminalAgentProcessEvidenceId(candidate)) {
220
+ return {
221
+ status: "invalid",
222
+ reason: "the persisted process-death proof no longer matches the exact Turn, Session, terminal, or submission binding"
223
+ };
224
+ }
225
+ return {
226
+ status: "valid",
227
+ proof: candidate,
228
+ evidenceId,
229
+ recordedAt
230
+ };
231
+ }
232
+ function terminalControlsShareIncarnation(left, right) {
233
+ if (!terminalControlIncarnationSelectorKey(left) ||
234
+ !terminalControlIncarnationSelectorKey(right)) {
235
+ return false;
236
+ }
237
+ return sameTerminalControlIncarnation(left, right);
238
+ }
239
+ function terminalControlIncarnationSelectorKey(value) {
240
+ if (!isRecord(value)) {
241
+ return undefined;
242
+ }
243
+ try {
244
+ const endpoint = terminalEndpointFromControlRef(value);
245
+ const processAnchorPid = Number(endpoint.processAnchorPid);
246
+ if (!Number.isSafeInteger(processAnchorPid) || processAnchorPid <= 1) {
247
+ return undefined;
248
+ }
249
+ return JSON.stringify({
250
+ identity: terminalEndpointIdentityKey(endpoint),
251
+ process_anchor_pid: processAnchorPid
252
+ });
253
+ }
254
+ catch {
255
+ return undefined;
256
+ }
257
+ }
258
+ function validTimestampMs(value) {
259
+ const parsed = Date.parse(String(value ?? ""));
260
+ return Number.isFinite(parsed) ? parsed : undefined;
261
+ }
262
+ //# sourceMappingURL=verified-dead-agent-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verified-dead-agent-policy.js","sourceRoot":"","sources":["../../src/verified-dead-agent-policy.ts"],"names":[],"mappings":"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"}
@@ -89,7 +89,7 @@ Starting a new native context, clearing it, or resuming an older native thread i
89
89
 
90
90
  Omitting the resume selection lists exact verified candidates. You may use the complete UUID, the deterministic number or collision-safe `@short-id` from that same displayed snapshot, or its opaque snapshot handle. Numbers and short IDs are valid only for the latest list shown in the same OpenClaw session; handles, too, expire after five minutes and any relevant terminal, process, workspace, binding, or candidate change. `previous` / `刚才那个` works only when the list advertises a single verified source from the current Session's latest committed lifecycle transition; AKK never treats “previous” as “newest”. These display selectors are resolved back to the complete UUID and exact saved tokens before the native Resume path runs. A successful switch creates or activates an AKK Session but creates no Turn, so send the next request separately. There is no background binding poll: after an old coding-agent process exits, the next lifecycle listing can expose its sole historical Session as resumable, and resume safely detaches that stale binding before terminal input. Unsupported, busy, ambiguous, stale, expired, active-elsewhere, or unverifiable transitions stop without falling back to raw `/clear`, `/new`, `/resume`, `/status`, Codex `/fork`, `/side`, or `/btw`, or Claude `/branch` text.
91
91
 
92
- AKK Turn status and the coding agent's native status are separate. `/akk status` and `agent_knock_knock_status` inspect AKK-managed state and a bounded current screen; they never type `/status`. For native status, start from `/akk list` and use only an advertised `native_inspect` action through `agent_knock_knock_native_inspect`, preserving its exact `terminal_id`, `inspection="status"`, and `expected_binding_token`. Supported profiles are Codex 0.146.0/0.146.1/0.147.0 and Claude Code 2.1.218/2.1.226. Claude's modal Status panel is parsed and dismissed before the action proves the original idle composer. The action creates no Session, Turn, receipt, monitor, or callback. `/usage`, `/cost`, `/stats`, `/usage-credits`, `/model`, `/compact`, and arbitrary slash commands remain unavailable. Bare Codex `/usage` is not read-only automation: it opens a menu whose later Enter can select an account-side usage-limit reset.
92
+ AKK Turn status and the coding agent's native status are separate. `/akk status` and `agent_knock_knock_status` inspect AKK-managed state and a bounded current screen; they never type `/status`. For native status, start from `/akk list` and use only an advertised `native_inspect` action through `agent_knock_knock_native_inspect`, preserving its exact `terminal_id`, `inspection="status"`, and `expected_binding_token`. Supported profiles are Codex 0.146.0/0.146.1/0.147.0/0.148.0 and Claude Code 2.1.218/2.1.226/2.1.237. Claude's modal Status panel is parsed and dismissed before the action proves the original idle composer. The action creates no Session, Turn, receipt, monitor, or callback. `/usage`, `/cost`, `/stats`, `/usage-credits`, `/model`, `/compact`, and arbitrary slash commands remain unavailable. Bare Codex `/usage` is not read-only automation: it opens a menu whose later Enter can select an account-side usage-limit reset.
93
93
 
94
94
  ## Optional: Enable natural-language routing
95
95
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scotthuang/agent-knock-knock",
3
- "version": "0.12.11",
3
+ "version": "0.12.12",
4
4
  "description": "Control local Codex and Claude Code from OpenClaw through shared tmux or Herdr terminals, with seamless human-agent handoff.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -73,6 +73,8 @@
73
73
  "build": "npm run clean && tsc -p tsconfig.json",
74
74
  "prepack": "npm run build",
75
75
  "typecheck": "tsc -p tsconfig.json --noEmit",
76
+ "validate:architecture": "node scripts/validate-architecture.js",
77
+ "validate:refactor-evidence": "node scripts/validate-refactor-evidence.js",
76
78
  "test": "npm run test:full",
77
79
  "test:fast": "npm run build && node scripts/run-test-tier.js fast",
78
80
  "test:integration": "npm run build && node scripts/run-test-tier.js integration",
@@ -81,7 +81,7 @@ Do not treat ordinary send as native clear, new-session, fork, branch, side thre
81
81
  For native status inspection:
82
82
 
83
83
  1. Use only a current `available_actions.native_inspect` entry. Its structured arguments are authoritative and complete; never construct or reuse them.
84
- 2. Supported exact profiles are Codex 0.146.0/0.146.1/0.147.0 and Claude Code 2.1.218/2.1.226 `inspection="status"`. Claude success includes parsing and safely dismissing the newly opened Status panel. The tool does not accept `/status` text or any arbitrary command string. `/usage`, `/cost`, `/stats`, `/usage-credits`, `/model`, `/compact`, and unsupported versions remain unavailable. Never automate bare Codex `/usage`: it opens an interactive menu whose later Enter can select an account-side usage-limit reset.
84
+ 2. Supported exact profiles are Codex 0.146.0/0.146.1/0.147.0/0.148.0 and Claude Code 2.1.218/2.1.226/2.1.237 `inspection="status"`. Claude success includes parsing and safely dismissing the newly opened Status panel. The tool does not accept `/status` text or any arbitrary command string. `/usage`, `/cost`, `/stats`, `/usage-credits`, `/model`, `/compact`, and unsupported versions remain unavailable. Never automate bare Codex `/usage`: it opens an interactive menu whose later Enter can select an account-side usage-limit reset.
85
85
  3. Treat this as terminal input even though the native command is read-only. AKK requires an idle empty composer, fresh binding token, exact PID/process/pane/cwd/version identity, and no conflicting Turn, transition, dispatch, approval, or owner.
86
86
  4. Codex `/status` requires an exact viewport of at least 80 columns so the full Session UUID can be proven. That pre-UUID gate applies to native inspection, lifecycle, and strict Session operations that must know the UUID before terminal input. An otherwise eligible terminal-scoped ordinary task may send once and bind from exact native acceptance afterward, so it does not run `/status` or fail merely because the pane is narrow.
87
87
  5. The result is valid only when AKK proves one fresh bounded native status result and the pane returns to idle. On an uncertain or unproven submission, do not retry, send Enter, clear the composer, or bypass AKK with raw terminal input.