@scotthuang/agent-knock-knock 0.13.18 → 0.14.1

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 (289) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/CONTRIBUTING.md +212 -0
  3. package/README.md +106 -166
  4. package/connectors/deepseek-harness/LICENSE +21 -0
  5. package/connectors/deepseek-harness/README.md +406 -0
  6. package/connectors/pi/LICENSE +21 -0
  7. package/connectors/pi/README.md +446 -0
  8. package/dist/src/backend-public-progress.d.ts +38 -0
  9. package/dist/src/backend-public-progress.js +106 -0
  10. package/dist/src/backend-public-progress.js.map +1 -0
  11. package/dist/src/backend-recovery-semantic.d.ts +16 -0
  12. package/dist/src/backend-recovery-semantic.js +113 -0
  13. package/dist/src/backend-recovery-semantic.js.map +1 -0
  14. package/dist/src/backend-task-recovery.d.ts +103 -0
  15. package/dist/src/backend-task-recovery.js +143 -0
  16. package/dist/src/backend-task-recovery.js.map +1 -0
  17. package/dist/src/callback-transport.d.ts +8 -0
  18. package/dist/src/callback-transport.js +14 -0
  19. package/dist/src/callback-transport.js.map +1 -1
  20. package/dist/src/cli-core.js +20 -10
  21. package/dist/src/cli-core.js.map +1 -1
  22. package/dist/src/cli-runtime-context.d.ts +5 -0
  23. package/dist/src/cli-runtime-context.js.map +1 -1
  24. package/dist/src/codex-app-server-read-client.d.ts +3 -0
  25. package/dist/src/codex-app-server-read-client.js.map +1 -1
  26. package/dist/src/codex-native-cli-adapter.d.ts +6 -0
  27. package/dist/src/codex-native-cli-adapter.js +303 -0
  28. package/dist/src/codex-native-cli-adapter.js.map +1 -0
  29. package/dist/src/codex-native-client-interactions.d.ts +6 -0
  30. package/dist/src/codex-native-client-interactions.js +124 -0
  31. package/dist/src/codex-native-client-interactions.js.map +1 -0
  32. package/dist/src/codex-native-client-rpc.d.ts +21 -0
  33. package/dist/src/codex-native-client-rpc.js +137 -0
  34. package/dist/src/codex-native-client-rpc.js.map +1 -0
  35. package/dist/src/codex-native-client.d.ts +42 -0
  36. package/dist/src/codex-native-client.js +331 -0
  37. package/dist/src/codex-native-client.js.map +1 -0
  38. package/dist/src/codex-native-identity.d.ts +6 -0
  39. package/dist/src/codex-native-identity.js +42 -0
  40. package/dist/src/codex-native-identity.js.map +1 -0
  41. package/dist/src/codex-native-monitor.d.ts +4 -0
  42. package/dist/src/codex-native-monitor.js +92 -0
  43. package/dist/src/codex-native-monitor.js.map +1 -0
  44. package/dist/src/codex-native-outbox.d.ts +16 -0
  45. package/dist/src/codex-native-outbox.js +120 -0
  46. package/dist/src/codex-native-outbox.js.map +1 -0
  47. package/dist/src/codex-native-public-projection.d.ts +545 -0
  48. package/dist/src/codex-native-public-projection.js +182 -0
  49. package/dist/src/codex-native-public-projection.js.map +1 -0
  50. package/dist/src/codex-native-record-store.d.ts +27 -0
  51. package/dist/src/codex-native-record-store.js +111 -0
  52. package/dist/src/codex-native-record-store.js.map +1 -0
  53. package/dist/src/codex-native-response-service.d.ts +69 -0
  54. package/dist/src/codex-native-response-service.js +244 -0
  55. package/dist/src/codex-native-response-service.js.map +1 -0
  56. package/dist/src/codex-native-runtime.d.ts +46 -0
  57. package/dist/src/codex-native-runtime.js +112 -0
  58. package/dist/src/codex-native-runtime.js.map +1 -0
  59. package/dist/src/codex-native-semantic.d.ts +17 -0
  60. package/dist/src/codex-native-semantic.js +175 -0
  61. package/dist/src/codex-native-semantic.js.map +1 -0
  62. package/dist/src/codex-native-snapshot.d.ts +19 -0
  63. package/dist/src/codex-native-snapshot.js +160 -0
  64. package/dist/src/codex-native-snapshot.js.map +1 -0
  65. package/dist/src/codex-native-state-store.d.ts +61 -0
  66. package/dist/src/codex-native-state-store.js +132 -0
  67. package/dist/src/codex-native-state-store.js.map +1 -0
  68. package/dist/src/codex-native-task-service.d.ts +71 -0
  69. package/dist/src/codex-native-task-service.js +503 -0
  70. package/dist/src/codex-native-task-service.js.map +1 -0
  71. package/dist/src/codex-native-types.d.ts +92 -0
  72. package/dist/src/codex-native-types.js +15 -0
  73. package/dist/src/codex-native-types.js.map +1 -0
  74. package/dist/src/conversation-list.d.ts +12 -0
  75. package/dist/src/conversation-list.js +30 -0
  76. package/dist/src/conversation-list.js.map +1 -0
  77. package/dist/src/conversation-route-dispatch.d.ts +13 -0
  78. package/dist/src/conversation-route-dispatch.js +66 -0
  79. package/dist/src/conversation-route-dispatch.js.map +1 -0
  80. package/dist/src/conversation-route-legacy.d.ts +18 -0
  81. package/dist/src/conversation-route-legacy.js +54 -0
  82. package/dist/src/conversation-route-legacy.js.map +1 -0
  83. package/dist/src/conversation-route-store.d.ts +51 -0
  84. package/dist/src/conversation-route-store.js +126 -0
  85. package/dist/src/conversation-route-store.js.map +1 -0
  86. package/dist/src/conversation-routing-cli-adapter.d.ts +12 -0
  87. package/dist/src/conversation-routing-cli-adapter.js +211 -0
  88. package/dist/src/conversation-routing-cli-adapter.js.map +1 -0
  89. package/dist/src/conversation-routing-commands.d.ts +11 -0
  90. package/dist/src/conversation-routing-commands.js +85 -0
  91. package/dist/src/conversation-routing-commands.js.map +1 -0
  92. package/dist/src/conversation-routing-home.d.ts +26 -0
  93. package/dist/src/conversation-routing-home.js +105 -0
  94. package/dist/src/conversation-routing-home.js.map +1 -0
  95. package/dist/src/conversation-routing-identity.d.ts +40 -0
  96. package/dist/src/conversation-routing-identity.js +174 -0
  97. package/dist/src/conversation-routing-identity.js.map +1 -0
  98. package/dist/src/conversation-runtime-route-store.d.ts +11 -0
  99. package/dist/src/conversation-runtime-route-store.js +118 -0
  100. package/dist/src/conversation-runtime-route-store.js.map +1 -0
  101. package/dist/src/desktop-async-interactions.d.ts +15 -0
  102. package/dist/src/desktop-async-interactions.js +88 -0
  103. package/dist/src/desktop-async-interactions.js.map +1 -0
  104. package/dist/src/desktop-async-state.d.ts +5 -0
  105. package/dist/src/desktop-async-state.js +53 -0
  106. package/dist/src/desktop-async-state.js.map +1 -0
  107. package/dist/src/desktop-cli-adapter.d.ts +7 -0
  108. package/dist/src/desktop-cli-adapter.js +343 -0
  109. package/dist/src/desktop-cli-adapter.js.map +1 -0
  110. package/dist/src/desktop-cli-controls.d.ts +9 -0
  111. package/dist/src/desktop-cli-controls.js +45 -0
  112. package/dist/src/desktop-cli-controls.js.map +1 -0
  113. package/dist/src/desktop-command-presentation.d.ts +2 -0
  114. package/dist/src/desktop-command-presentation.js +31 -0
  115. package/dist/src/desktop-command-presentation.js.map +1 -0
  116. package/dist/src/desktop-control-semantic.d.ts +8 -0
  117. package/dist/src/desktop-control-semantic.js +68 -0
  118. package/dist/src/desktop-control-semantic.js.map +1 -0
  119. package/dist/src/desktop-identity.d.ts +5 -0
  120. package/dist/src/desktop-identity.js +40 -0
  121. package/dist/src/desktop-identity.js.map +1 -0
  122. package/dist/src/desktop-interaction-projection.d.ts +57 -0
  123. package/dist/src/desktop-interaction-projection.js +196 -0
  124. package/dist/src/desktop-interaction-projection.js.map +1 -0
  125. package/dist/src/desktop-interaction-state.d.ts +3 -0
  126. package/dist/src/desktop-interaction-state.js +48 -0
  127. package/dist/src/desktop-interaction-state.js.map +1 -0
  128. package/dist/src/desktop-ipc-async-answer.d.ts +9 -0
  129. package/dist/src/desktop-ipc-async-answer.js +71 -0
  130. package/dist/src/desktop-ipc-async-answer.js.map +1 -0
  131. package/dist/src/desktop-ipc-client.d.ts +47 -0
  132. package/dist/src/desktop-ipc-client.js +400 -0
  133. package/dist/src/desktop-ipc-client.js.map +1 -0
  134. package/dist/src/desktop-ipc-native-operations.d.ts +11 -0
  135. package/dist/src/desktop-ipc-native-operations.js +126 -0
  136. package/dist/src/desktop-ipc-native-operations.js.map +1 -0
  137. package/dist/src/desktop-ipc-transport.d.ts +13 -0
  138. package/dist/src/desktop-ipc-transport.js +123 -0
  139. package/dist/src/desktop-ipc-transport.js.map +1 -0
  140. package/dist/src/desktop-list.d.ts +25 -0
  141. package/dist/src/desktop-list.js +55 -0
  142. package/dist/src/desktop-list.js.map +1 -0
  143. package/dist/src/desktop-metadata-reader.d.ts +30 -0
  144. package/dist/src/desktop-metadata-reader.js +182 -0
  145. package/dist/src/desktop-metadata-reader.js.map +1 -0
  146. package/dist/src/desktop-monitor.d.ts +4 -0
  147. package/dist/src/desktop-monitor.js +101 -0
  148. package/dist/src/desktop-monitor.js.map +1 -0
  149. package/dist/src/desktop-public-projection.d.ts +6 -0
  150. package/dist/src/desktop-public-projection.js +134 -0
  151. package/dist/src/desktop-public-projection.js.map +1 -0
  152. package/dist/src/desktop-request-interactions.d.ts +14 -0
  153. package/dist/src/desktop-request-interactions.js +144 -0
  154. package/dist/src/desktop-request-interactions.js.map +1 -0
  155. package/dist/src/desktop-response-dispatch.d.ts +14 -0
  156. package/dist/src/desktop-response-dispatch.js +19 -0
  157. package/dist/src/desktop-response-dispatch.js.map +1 -0
  158. package/dist/src/desktop-response-evidence.d.ts +4 -0
  159. package/dist/src/desktop-response-evidence.js +19 -0
  160. package/dist/src/desktop-response-evidence.js.map +1 -0
  161. package/dist/src/desktop-response-service.d.ts +11 -0
  162. package/dist/src/desktop-response-service.js +188 -0
  163. package/dist/src/desktop-response-service.js.map +1 -0
  164. package/dist/src/desktop-response-store.d.ts +35 -0
  165. package/dist/src/desktop-response-store.js +58 -0
  166. package/dist/src/desktop-response-store.js.map +1 -0
  167. package/dist/src/desktop-response-types.d.ts +20 -0
  168. package/dist/src/desktop-response-types.js +2 -0
  169. package/dist/src/desktop-response-types.js.map +1 -0
  170. package/dist/src/desktop-response-value.d.ts +6 -0
  171. package/dist/src/desktop-response-value.js +31 -0
  172. package/dist/src/desktop-response-value.js.map +1 -0
  173. package/dist/src/desktop-runtime.d.ts +153 -0
  174. package/dist/src/desktop-runtime.js +88 -0
  175. package/dist/src/desktop-runtime.js.map +1 -0
  176. package/dist/src/desktop-semantic.d.ts +21 -0
  177. package/dist/src/desktop-semantic.js +140 -0
  178. package/dist/src/desktop-semantic.js.map +1 -0
  179. package/dist/src/desktop-session-catalog.d.ts +68 -0
  180. package/dist/src/desktop-session-catalog.js +225 -0
  181. package/dist/src/desktop-session-catalog.js.map +1 -0
  182. package/dist/src/desktop-session-controls.d.ts +145 -0
  183. package/dist/src/desktop-session-controls.js +176 -0
  184. package/dist/src/desktop-session-controls.js.map +1 -0
  185. package/dist/src/desktop-sidebar-metadata.d.ts +27 -0
  186. package/dist/src/desktop-sidebar-metadata.js +83 -0
  187. package/dist/src/desktop-sidebar-metadata.js.map +1 -0
  188. package/dist/src/desktop-sidebar-projects.d.ts +10 -0
  189. package/dist/src/desktop-sidebar-projects.js +31 -0
  190. package/dist/src/desktop-sidebar-projects.js.map +1 -0
  191. package/dist/src/desktop-sidebar-selection.d.ts +28 -0
  192. package/dist/src/desktop-sidebar-selection.js +85 -0
  193. package/dist/src/desktop-sidebar-selection.js.map +1 -0
  194. package/dist/src/desktop-snapshot-details.d.ts +4 -0
  195. package/dist/src/desktop-snapshot-details.js +116 -0
  196. package/dist/src/desktop-snapshot-details.js.map +1 -0
  197. package/dist/src/desktop-snapshot.d.ts +11 -0
  198. package/dist/src/desktop-snapshot.js +281 -0
  199. package/dist/src/desktop-snapshot.js.map +1 -0
  200. package/dist/src/desktop-state-store.d.ts +72 -0
  201. package/dist/src/desktop-state-store.js +269 -0
  202. package/dist/src/desktop-state-store.js.map +1 -0
  203. package/dist/src/desktop-task-interactions.d.ts +10 -0
  204. package/dist/src/desktop-task-interactions.js +93 -0
  205. package/dist/src/desktop-task-interactions.js.map +1 -0
  206. package/dist/src/desktop-task-recovery.d.ts +38 -0
  207. package/dist/src/desktop-task-recovery.js +172 -0
  208. package/dist/src/desktop-task-recovery.js.map +1 -0
  209. package/dist/src/desktop-task-service.d.ts +54 -0
  210. package/dist/src/desktop-task-service.js +442 -0
  211. package/dist/src/desktop-task-service.js.map +1 -0
  212. package/dist/src/desktop-types.d.ts +283 -0
  213. package/dist/src/desktop-types.js +13 -0
  214. package/dist/src/desktop-types.js.map +1 -0
  215. package/dist/src/host-monitor-reconciliation.js +36 -4
  216. package/dist/src/host-monitor-reconciliation.js.map +1 -1
  217. package/dist/src/host-profile-runtime.js +7 -3
  218. package/dist/src/host-profile-runtime.js.map +1 -1
  219. package/dist/src/local-codex-cli-adapter.d.ts +7 -0
  220. package/dist/src/local-codex-cli-adapter.js +13 -0
  221. package/dist/src/local-codex-cli-adapter.js.map +1 -0
  222. package/dist/src/monitor-deadline-policy.d.ts +8 -0
  223. package/dist/src/monitor-deadline-policy.js +16 -0
  224. package/dist/src/monitor-deadline-policy.js.map +1 -0
  225. package/dist/src/openclaw-callback-transport.js +2 -1
  226. package/dist/src/openclaw-callback-transport.js.map +1 -1
  227. package/dist/src/semantic-conversation-target.d.ts +4 -0
  228. package/dist/src/semantic-conversation-target.js +20 -0
  229. package/dist/src/semantic-conversation-target.js.map +1 -0
  230. package/dist/src/semantic-permission-control.js +47 -9
  231. package/dist/src/semantic-permission-control.js.map +1 -1
  232. package/dist/src/semantic-private-authority-offers.d.ts +1 -1
  233. package/dist/src/semantic-private-authority-offers.js +3 -1
  234. package/dist/src/semantic-private-authority-offers.js.map +1 -1
  235. package/dist/src/semantic-tool-command-helpers.d.ts +6 -0
  236. package/dist/src/semantic-tool-command-helpers.js +199 -78
  237. package/dist/src/semantic-tool-command-helpers.js.map +1 -1
  238. package/dist/src/semantic-tool-descriptions.d.ts +2 -1
  239. package/dist/src/semantic-tool-descriptions.js +84 -35
  240. package/dist/src/semantic-tool-descriptions.js.map +1 -1
  241. package/dist/src/semantic-tool-list-projection.js +66 -2
  242. package/dist/src/semantic-tool-list-projection.js.map +1 -1
  243. package/dist/src/semantic-tool-presentation.js +76 -7
  244. package/dist/src/semantic-tool-presentation.js.map +1 -1
  245. package/dist/src/semantic-tool-runtime.js +129 -29
  246. package/dist/src/semantic-tool-runtime.js.map +1 -1
  247. package/dist/src/semantic-tool-schemas.d.ts +410 -27
  248. package/dist/src/semantic-tool-schemas.js +176 -88
  249. package/dist/src/semantic-tool-schemas.js.map +1 -1
  250. package/dist/src/terminal-action-contracts.js +10 -6
  251. package/dist/src/terminal-action-contracts.js.map +1 -1
  252. package/dist/src/terminal-command-cli-adapter.js +4 -4
  253. package/dist/src/terminal-command-cli-adapter.js.map +1 -1
  254. package/dist/src/terminal-command-dispatch-preparation.js +2 -1
  255. package/dist/src/terminal-command-dispatch-preparation.js.map +1 -1
  256. package/dist/src/terminal-list-cli-adapter.d.ts +1 -0
  257. package/dist/src/terminal-list-cli-adapter.js +6 -3
  258. package/dist/src/terminal-list-cli-adapter.js.map +1 -1
  259. package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
  260. package/dist/src/terminal-monitor-launch-plan.js +3 -2
  261. package/dist/src/terminal-monitor-launch-plan.js.map +1 -1
  262. package/dist/src/terminal-monitor-supervision-cli-adapter.js +2 -2
  263. package/dist/src/terminal-monitor-supervision-cli-adapter.js.map +1 -1
  264. package/dist/src/terminal-submission-retry-reconciliation.js +2 -2
  265. package/dist/src/terminal-submission-retry-reconciliation.js.map +1 -1
  266. package/dist/src/terminal-user-send-intent.d.ts +2 -0
  267. package/dist/src/terminal-user-send-intent.js +11 -3
  268. package/dist/src/terminal-user-send-intent.js.map +1 -1
  269. package/dist/src/terminal-watch-cli-adapter.js +4 -4
  270. package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
  271. package/docs/architecture/current-architecture.md +313 -0
  272. package/docs/architecture/interactive-terminal-response.md +276 -0
  273. package/docs/architecture/issue-126-final-report.md +248 -0
  274. package/docs/architecture/orchestration-refactor-history.md +2987 -0
  275. package/docs/architecture/orchestration-refactor.md +21 -0
  276. package/docs/backend-task-recovery.md +98 -0
  277. package/docs/bidirectional-agent-protocol.md +260 -0
  278. package/docs/codex-cli-native-compatibility.md +246 -0
  279. package/docs/codex-desktop-compatibility.md +414 -0
  280. package/docs/openclaw-operations.md +281 -0
  281. package/docs/openclaw-session-turn-delivery-requirement.md +45 -0
  282. package/docs/operator-guide.md +572 -0
  283. package/docs/storage-and-logging.md +91 -0
  284. package/docs/test-performance-issue-108.md +80 -0
  285. package/docs/test-performance-issue-120.md +226 -0
  286. package/docs/testing.md +628 -0
  287. package/openclaw.plugin.json +8 -4
  288. package/package.json +6 -13
  289. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +66 -15
@@ -0,0 +1,113 @@
1
+ import { resolveMonitorHardTimeoutMinutes } from "./monitor-deadline-policy.js";
2
+ import { pushOptional, requiredControllerSessionKey, requiredString } from "./semantic-tool-arguments.js";
3
+ import { isRecord, nonBlankString } from "./value-guards.js";
4
+ const commands = new Set(["renew", "close", "recover", "retry-callback"]);
5
+ const backendIdentity = /^(?:desktop|codex-cli):/u;
6
+ const backendWatchPrefix = /^(?:desktop-watch|codex-cli-watch):/u;
7
+ const backendWatch = /^(?:desktop-watch|codex-cli-watch):[A-Za-z0-9_-]{8,128}$/u;
8
+ export function isBackendTaskWatchId(value) {
9
+ return typeof value === "string" && backendWatch.test(value);
10
+ }
11
+ export function normalizeBackendStatusTarget(params) {
12
+ if (typeof params.turn_id !== "string" || !backendWatchPrefix.test(params.turn_id.trim()))
13
+ return params;
14
+ if (Object.hasOwn(params, "watch_id") || Object.hasOwn(params, "conversation_id"))
15
+ throw new Error("status accepts exactly one of turn_id, conversation_id, or watch_id");
16
+ if (!backendWatch.test(params.turn_id))
17
+ throw new Error("status requires an exact backend Watch ID");
18
+ const { turn_id, ...rest } = params;
19
+ return { ...rest, watch_id: turn_id };
20
+ }
21
+ /** Backend maintenance is anchored to one persisted task, never the thread's current task. */
22
+ export function backendRecoveryTarget(params, command) {
23
+ const targets = ["watch_id", "turn_id", "conversation_id"].filter(key => Object.hasOwn(params, key));
24
+ if (targets.length !== 1)
25
+ throw new Error(`${command} accepts exactly one of watch_id, turn_id or conversation_id`);
26
+ const field = targets[0];
27
+ const id = requiredString(params[field], field);
28
+ if (backendIdentity.test(id.trim()) || field === "conversation_id" && backendWatchPrefix.test(id.trim())) {
29
+ throw new Error(`${command} requires the exact backend watch_id or send-produced turn_id; conversation_id cannot select a backend task`);
30
+ }
31
+ if (backendWatchPrefix.test(id.trim()) || field === "watch_id" || command === "recover") {
32
+ if (!backendWatch.test(id))
33
+ throw new Error(`${command} requires an exact backend Watch ID`);
34
+ return id;
35
+ }
36
+ return undefined;
37
+ }
38
+ export function backendRecoveryToolArgs(command, params, context, options = {}) {
39
+ const id = backendRecoveryTarget(params, command);
40
+ if (!id) {
41
+ if (Object.hasOwn(params, "notification_id"))
42
+ throw new Error("notification_id is supported only for backend callback recovery");
43
+ return undefined;
44
+ }
45
+ const fields = command === "renew" ? ["minutes"] : command === "close" ? ["reason"] : command === "retry-callback" ? ["notification_id"] : [];
46
+ const allowed = new Set(["watch_id", "turn_id", ...fields]);
47
+ const extra = Object.keys(params).filter(key => !allowed.has(key));
48
+ if (extra.length)
49
+ throw new Error(`Unsupported backend ${command} parameters: ${extra.join(", ")}`);
50
+ const args = [command, "--watch", id, "--openclaw-session", requiredControllerSessionKey(context.sessionKey)];
51
+ pushOptional(args, "--store-dir", options.storeDir);
52
+ pushOptional(args, "--codex-home", options.codexHome);
53
+ if (command === "renew") {
54
+ const supplied = params.minutes ?? options.defaultMinutes;
55
+ if (supplied !== undefined && (typeof supplied !== "number" || !Number.isFinite(supplied) || supplied <= 0)) {
56
+ throw new Error("minutes must be a positive number");
57
+ }
58
+ args.push("--minutes", String(resolveMonitorHardTimeoutMinutes(params.minutes, options.defaultMinutes)));
59
+ }
60
+ if (Object.hasOwn(params, "reason"))
61
+ args.push("--reason", requiredString(params.reason, "reason"));
62
+ if (Object.hasOwn(params, "notification_id"))
63
+ args.push("--notification-id", requiredString(params.notification_id, "notification_id"));
64
+ return args;
65
+ }
66
+ /** Run before conversation routing, which must never reinterpret a backend recovery target. */
67
+ export function assertBackendRecoveryCliTarget(command, options) {
68
+ if (!command || !commands.has(command))
69
+ return;
70
+ const fields = ["watch", "turn", "conversation", "conversationId", "terminal", "session"];
71
+ const targets = fields.filter(key => Object.hasOwn(options, key));
72
+ const hasBackend = targets.some(key => typeof options[key] === "string" &&
73
+ (backendIdentity.test(options[key].trim()) || backendWatchPrefix.test(options[key].trim())));
74
+ if (command !== "recover" && !hasBackend && !Object.hasOwn(options, "watch")) {
75
+ if (Object.hasOwn(options, "notificationId"))
76
+ throw new Error("--notification-id is supported only for backend callback recovery");
77
+ return;
78
+ }
79
+ if (targets.length !== 1 || !["watch", "turn"].includes(targets[0]) || !backendWatch.test(String(options[targets[0]]))) {
80
+ throw new Error(`${command} requires exactly one --watch or --turn containing an exact backend Watch ID`);
81
+ }
82
+ requiredControllerSessionKey(options.openclawSession);
83
+ const fences = Object.keys(options).filter(key => /^expected/u.test(key));
84
+ if (fences.length)
85
+ throw new Error(`Backend ${command} does not accept terminal recovery fences: ${fences.join(", ")}`);
86
+ if (command !== "retry-callback" && Object.hasOwn(options, "notificationId")) {
87
+ throw new Error("--notification-id is supported only by retry-callback");
88
+ }
89
+ if (Object.hasOwn(options, "notificationId"))
90
+ requiredString(options.notificationId, "notification-id");
91
+ }
92
+ /** Report observed delivery state without turning a retry attempt into a delivery receipt. */
93
+ export function formatBackendRecoveryCommandResult(result, command) {
94
+ if (!isRecord(result) || !backendWatch.test(String(result.watch_id)))
95
+ return undefined;
96
+ const fields = ["watch_id", "turn_id", "task_kind", "native_turn_id", "status", "management_state", "observation_state", "closed_at", "unwatched_at", "hard_timeout_at", "deadline_at"];
97
+ const lines = fields.flatMap(field => {
98
+ const value = nonBlankString(result[field]);
99
+ return value ? [`${field}: ${value}`] : [];
100
+ });
101
+ if (Array.isArray(result.callback_notifications)) {
102
+ for (const notification of result.callback_notifications) {
103
+ if (!isRecord(notification))
104
+ continue;
105
+ const id = nonBlankString(notification.notification_id) ?? nonBlankString(notification.id);
106
+ const status = nonBlankString(notification.status);
107
+ if (id && status)
108
+ lines.push(`callback ${id}: ${status}`);
109
+ }
110
+ }
111
+ return [`AKK backend ${command}.`, ...lines].join("\n");
112
+ }
113
+ //# sourceMappingURL=backend-recovery-semantic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-recovery-semantic.js","sourceRoot":"","sources":["../../src/backend-recovery-semantic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import type { CallbackAttemptOutcome } from "./callback-transport.js";
2
+ /** Additive fields keep existing v1 backend records readable. Management and observation are separate. */
3
+ export interface BackendRecoveryFields {
4
+ closed_at?: string;
5
+ close_reason?: string;
6
+ unwatched_at?: string;
7
+ renewed_at?: string;
8
+ renewal_count?: number;
9
+ recovered_at?: string;
10
+ }
11
+ export interface BackendRetryFields {
12
+ /** Highest cumulative attempt explicitly authorized by a manual retry. */
13
+ retry_budget_until?: number;
14
+ retry_requested_at?: string;
15
+ }
16
+ export interface BackendRecoveryNotification extends BackendRetryFields {
17
+ id: string;
18
+ status: string;
19
+ attempts: number;
20
+ retry_at?: string;
21
+ outcome?: CallbackAttemptOutcome;
22
+ }
23
+ export interface BackendRecoveryTask extends BackendRecoveryFields {
24
+ id: string;
25
+ kind: "send" | "watch";
26
+ status: string;
27
+ controller_session: string;
28
+ deadline_at: string;
29
+ notifications: BackendRecoveryNotification[];
30
+ }
31
+ export declare class BackendRecoveryError extends Error {
32
+ readonly code: string;
33
+ constructor(code: string, message: string);
34
+ }
35
+ export declare function assertBackendRecoveryOwner(task: BackendRecoveryTask, input: {
36
+ controllerSession: string;
37
+ }): void;
38
+ export declare function backendObservationStopped(task: BackendRecoveryFields & {
39
+ status: string;
40
+ }): boolean;
41
+ export declare function assertBackendRecoveryFields(task: BackendRecoveryTask): void;
42
+ export declare function assertBackendRecoveryUpdate(previous: BackendRecoveryTask, next: BackendRecoveryTask): void;
43
+ export declare function backendRenewalDeadline(task: BackendRecoveryTask, now: Date, timeoutMs?: number): string;
44
+ export declare function suppressBackendNotifications(task: BackendRecoveryTask, code: string): void;
45
+ export declare function closeBackendManagement(task: BackendRecoveryTask, input: {
46
+ controllerSession: string;
47
+ reason?: string;
48
+ }, now: Date): void;
49
+ export declare function stopBackendObservation(task: BackendRecoveryTask, now: Date): void;
50
+ export declare function isBackendCallbackRetryable(task: BackendRecoveryTask, note: BackendRecoveryNotification): boolean;
51
+ export declare function prepareBackendCallbackRetry(task: BackendRecoveryTask, input: {
52
+ controllerSession: string;
53
+ notificationId?: string;
54
+ }, now: Date): string;
55
+ export declare function backendCallbackMaxAttempts(note: BackendRetryFields, defaultMax: number): number;
56
+ export declare function backendTaskRecoveryProjection(task: BackendRecoveryTask): {
57
+ task_kind: "send" | "watch";
58
+ turn_id?: string | undefined;
59
+ management_state: string;
60
+ observation_state: string;
61
+ deadline_at: string;
62
+ renewal_count: number;
63
+ closed_at: string | undefined;
64
+ close_reason: string | undefined;
65
+ unwatched_at: string | undefined;
66
+ renewed_at: string | undefined;
67
+ recovered_at: string | undefined;
68
+ callback_in_flight: boolean;
69
+ retryable_callback_ids: string[];
70
+ recovery_actions: {
71
+ recover?: {
72
+ tool: string;
73
+ input: {
74
+ watch_id: string;
75
+ };
76
+ } | undefined;
77
+ renew?: {
78
+ tool: string;
79
+ input: {
80
+ watch_id: string;
81
+ };
82
+ } | undefined;
83
+ unwatch?: {
84
+ tool: string;
85
+ input: {
86
+ watch_id: string;
87
+ };
88
+ } | undefined;
89
+ close?: {
90
+ tool: string;
91
+ input: {
92
+ turn_id: string;
93
+ };
94
+ } | undefined;
95
+ retry_callback?: {
96
+ tool: string;
97
+ input: {
98
+ watch_id: string;
99
+ notification_id: string;
100
+ };
101
+ } | undefined;
102
+ };
103
+ };
@@ -0,0 +1,143 @@
1
+ import { resolveMonitorHardTimeoutMs } from "./monitor-deadline-policy.js";
2
+ export class BackendRecoveryError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(message);
6
+ this.code = code;
7
+ this.name = "BackendRecoveryError";
8
+ }
9
+ }
10
+ export function assertBackendRecoveryOwner(task, input) {
11
+ if (!input.controllerSession?.trim() || input.controllerSession !== task.controller_session) {
12
+ throw new BackendRecoveryError("backend_controller_mismatch", "Only the owning controller can recover this exact task");
13
+ }
14
+ }
15
+ export function backendObservationStopped(task) {
16
+ return Boolean(task.closed_at || task.unwatched_at || task.status === "cancelled");
17
+ }
18
+ export function assertBackendRecoveryFields(task) {
19
+ assertRecoveryTimes(task);
20
+ if (task.closed_at && task.kind !== "send")
21
+ throw new Error("Only a managed send can be closed");
22
+ if (task.close_reason !== undefined && (!task.closed_at || typeof task.close_reason !== "string" || !task.close_reason.trim()))
23
+ throw new Error("Invalid backend close reason");
24
+ if (task.renewal_count !== undefined && (!Number.isSafeInteger(task.renewal_count) || task.renewal_count < 0))
25
+ throw new Error("Invalid backend renewal count");
26
+ if (Boolean(task.renewed_at) !== Boolean(task.renewal_count))
27
+ throw new Error("Backend renewal must include its time and generation");
28
+ for (const note of task.notifications)
29
+ assertRetryFields(note);
30
+ }
31
+ function assertRecoveryTimes(task) {
32
+ for (const field of ["closed_at", "unwatched_at", "renewed_at", "recovered_at"]) {
33
+ if (task[field] !== undefined && (typeof task[field] !== "string" || !Number.isFinite(Date.parse(task[field])))) {
34
+ throw new Error(`Invalid backend recovery ${field}`);
35
+ }
36
+ }
37
+ }
38
+ function assertRetryFields(note) {
39
+ if (note.retry_budget_until !== undefined && (!Number.isSafeInteger(note.retry_budget_until) || note.retry_budget_until < 1))
40
+ throw new Error("Invalid backend callback retry budget");
41
+ if (note.retry_requested_at !== undefined && (typeof note.retry_requested_at !== "string" || !Number.isFinite(Date.parse(note.retry_requested_at))))
42
+ throw new Error("Invalid backend callback retry time");
43
+ }
44
+ export function assertBackendRecoveryUpdate(previous, next) {
45
+ if (previous.closed_at && (next.closed_at !== previous.closed_at || next.close_reason !== previous.close_reason))
46
+ throw new Error("Closed backend management cannot be reopened");
47
+ const before = previous.renewal_count ?? 0;
48
+ const after = next.renewal_count ?? 0;
49
+ if (after !== before && after !== before + 1)
50
+ throw new Error("Backend renewal generation must advance once");
51
+ if (previous.deadline_at !== next.deadline_at && (after !== before + 1 ||
52
+ Date.parse(next.deadline_at) < Date.parse(previous.deadline_at) || !next.renewed_at || next.closed_at)) {
53
+ throw new Error("Backend deadline change requires an explicit monotonic renewal");
54
+ }
55
+ if (previous.unwatched_at && !next.unwatched_at && after !== before + 1)
56
+ throw new Error("Only renewal can resume stopped observation");
57
+ assertNotificationHistory(previous.notifications, next.notifications);
58
+ }
59
+ function assertNotificationHistory(previous, next) {
60
+ for (const old of previous) {
61
+ const current = next.find(note => note.id === old.id);
62
+ if (!current || current.attempts < old.attempts || (current.retry_budget_until ?? 0) < (old.retry_budget_until ?? 0))
63
+ throw new Error("Backend callback history cannot be reset");
64
+ }
65
+ }
66
+ export function backendRenewalDeadline(task, now, timeoutMs = resolveMonitorHardTimeoutMs()) {
67
+ if (task.closed_at)
68
+ throw new BackendRecoveryError("backend_task_closed", "Closed management cannot be renewed");
69
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 7 * 24 * 3_600_000) {
70
+ throw new BackendRecoveryError("invalid_argument", "Renewal must be between one millisecond and seven days");
71
+ }
72
+ return new Date(Math.max(Date.parse(task.deadline_at), now.getTime() + timeoutMs)).toISOString();
73
+ }
74
+ export function suppressBackendNotifications(task, code) {
75
+ for (const note of task.notifications)
76
+ if (["ready", "retry_wait"].includes(note.status)) {
77
+ note.status = "failed";
78
+ note.outcome = { disposition: "permanent_failure", error_code: code };
79
+ delete note.retry_at;
80
+ }
81
+ }
82
+ export function closeBackendManagement(task, input, now) {
83
+ assertBackendRecoveryOwner(task, input);
84
+ if (task.kind !== "send")
85
+ throw new BackendRecoveryError("backend_watch_not_managed", "Close requires a managed send; use Unwatch to stop an observation-only Watch");
86
+ if (task.closed_at)
87
+ return;
88
+ task.closed_at = now.toISOString();
89
+ if (input.reason?.trim())
90
+ task.close_reason = input.reason.trim();
91
+ suppressBackendNotifications(task, "backend_management_closed");
92
+ }
93
+ export function stopBackendObservation(task, now) {
94
+ task.unwatched_at ??= now.toISOString();
95
+ suppressBackendNotifications(task, "backend_watch_stopped");
96
+ }
97
+ export function isBackendCallbackRetryable(task, note) {
98
+ return !backendObservationStopped(task) && ["failed", "retry_wait"].includes(note.status) && note.outcome?.disposition === "retryable_failure";
99
+ }
100
+ export function prepareBackendCallbackRetry(task, input, now) {
101
+ assertBackendRecoveryOwner(task, input);
102
+ if (backendObservationStopped(task))
103
+ throw new BackendRecoveryError("backend_observation_stopped", "Stopped or closed observation cannot retry callbacks");
104
+ const selected = input.notificationId
105
+ ? task.notifications.filter(note => note.id === input.notificationId)
106
+ : task.notifications.filter(note => isBackendCallbackRetryable(task, note));
107
+ if (selected.length !== 1 || !isBackendCallbackRetryable(task, selected[0]))
108
+ throw new BackendRecoveryError("backend_callback_not_retryable", "Select exactly one known retryable callback; accepted, uncertain, in-flight and obsolete notifications cannot be replayed");
109
+ const note = selected[0];
110
+ note.retry_budget_until = Math.max(note.retry_budget_until ?? 0, note.attempts + 1);
111
+ note.retry_requested_at = now.toISOString();
112
+ note.status = "ready";
113
+ delete note.retry_at;
114
+ return note.id;
115
+ }
116
+ export function backendCallbackMaxAttempts(note, defaultMax) {
117
+ return Math.max(defaultMax, note.retry_budget_until ?? 0);
118
+ }
119
+ export function backendTaskRecoveryProjection(task) {
120
+ const stopped = backendObservationStopped(task);
121
+ const settled = ["completed", "failed", "interrupted"].includes(task.status);
122
+ const input = { watch_id: task.id };
123
+ const retryable = task.notifications.filter(note => isBackendCallbackRetryable(task, note));
124
+ return {
125
+ task_kind: task.kind,
126
+ ...(task.kind === "send" ? { turn_id: task.id } : {}),
127
+ management_state: task.kind === "watch" ? "unmanaged" : task.closed_at ? "closed" : "managed",
128
+ observation_state: stopped ? "stopped" : task.status === "timed_out" ? "expired" : settled ? "settled" : "watching",
129
+ deadline_at: task.deadline_at, renewal_count: task.renewal_count ?? 0,
130
+ closed_at: task.closed_at, close_reason: task.close_reason, unwatched_at: task.unwatched_at,
131
+ renewed_at: task.renewed_at, recovered_at: task.recovered_at,
132
+ callback_in_flight: task.notifications.some(note => note.status === "leased"),
133
+ retryable_callback_ids: retryable.map(note => note.id),
134
+ recovery_actions: {
135
+ ...(!task.closed_at ? { recover: { tool: "agent_knock_knock_recover", input } } : {}),
136
+ ...(!task.closed_at && !settled ? { renew: { tool: "agent_knock_knock_renew", input } } : {}),
137
+ ...(!stopped ? { unwatch: { tool: "agent_knock_knock_unwatch", input } } : {}),
138
+ ...(task.kind === "send" && !task.closed_at ? { close: { tool: "agent_knock_knock_close", input: { turn_id: task.id } } } : {}),
139
+ ...(retryable.length === 1 ? { retry_callback: { tool: "agent_knock_knock_retry_callback", input: { ...input, notification_id: retryable[0].id } } } : {})
140
+ }
141
+ };
142
+ }
143
+ //# sourceMappingURL=backend-task-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-task-recovery.js","sourceRoot":"","sources":["../../src/backend-task-recovery.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,14 @@ export type CallbackEnvelopeSourceV1 = {
29
29
  kind: "terminal_watch";
30
30
  watch_id: string;
31
31
  terminal_id: string;
32
+ } | {
33
+ kind: "desktop_watch";
34
+ watch_id: string;
35
+ desktop_id: string;
36
+ } | {
37
+ kind: "codex_native_watch";
38
+ watch_id: string;
39
+ native_id: string;
32
40
  };
33
41
  export interface CallbackEnvelopeEventV1 {
34
42
  id: string;
@@ -203,6 +203,20 @@ function parseEnvelopeSource(value) {
203
203
  terminal_id: requiredRouteString(value.terminal_id, "source.terminal_id")
204
204
  };
205
205
  }
206
+ if (value.kind === "desktop_watch") {
207
+ return {
208
+ kind: "desktop_watch",
209
+ watch_id: requiredRouteString(value.watch_id, "source.watch_id"),
210
+ desktop_id: requiredRouteString(value.desktop_id, "source.desktop_id")
211
+ };
212
+ }
213
+ if (value.kind === "codex_native_watch") {
214
+ return {
215
+ kind: "codex_native_watch",
216
+ watch_id: requiredRouteString(value.watch_id, "source.watch_id"),
217
+ native_id: requiredRouteString(value.native_id, "source.native_id")
218
+ };
219
+ }
206
220
  throw new Error(`unsupported callback envelope source ${JSON.stringify(value.kind)}`);
207
221
  }
208
222
  function parseEnvelopeEvent(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"callback-transport.js","sourceRoot":"","sources":["../../src/callback-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"callback-transport.js","sourceRoot":"","sources":["../../src/callback-transport.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ import { DEFAULT_MONITOR_HARD_TIMEOUT_MINUTES } from "./monitor-deadline-policy.js";
2
+ import { dispatchLocalCodexCli, localCodexListForCli } from "./local-codex-cli-adapter.js";
3
+ import { assertBackendRecoveryCliTarget } from "./backend-recovery-semantic.js";
4
+ import { executeConversationCommand } from "./conversation-routing-cli-adapter.js";
1
5
  import { randomUUID } from "node:crypto";
2
6
  import { spawn } from "node:child_process";
3
7
  import fs from "node:fs";
@@ -81,7 +85,6 @@ const resolveTerminalDispatchLedgerPaneIncarnation = terminalDispatchRepository.
81
85
  const terminalDispatchRecordMatchesControl = terminalDispatchRepository.matchesControl;
82
86
  const terminalDispatchRecordProcessAnchor = terminalDispatchRepository.processAnchor;
83
87
  const DEFAULT_AGENT_TIMEOUT_MINUTES = 60;
84
- const DEFAULT_AGENT_HARD_TIMEOUT_MINUTES = 720;
85
88
  const CLAUDE_SCREEN_APPROVAL_TTL_MS = 10 * 60 * 1000;
86
89
  const CALLBACK_ATTEMPT_LEASE_MS = 2 * 60 * 1000;
87
90
  const CALLBACK_RETRY_DELAYS_MS = [5000, 15000, 60000, 60000];
@@ -181,6 +184,7 @@ const STORE_MUTATION_COMMANDS = new Set([
181
184
  "approve",
182
185
  "cancel",
183
186
  "renew",
187
+ "recover",
184
188
  "reconcile-monitors",
185
189
  "reconcile-watches",
186
190
  "watch-terminal",
@@ -226,9 +230,15 @@ export function parseCliCommand(argv) {
226
230
  };
227
231
  }
228
232
  export async function executeCliCommand(commandName, options = {}, dependencies = {}) {
229
- return runCliCommandExecution(commandName, options, dependencies, () => dispatchCliCommand(commandName, applyTrustedHostProfileCliOptions(commandName, options, cliEnv(), cliCwd())));
233
+ return runCliCommandExecution(commandName, options, dependencies, () => {
234
+ const scopedOptions = applyTrustedHostProfileCliOptions(commandName, options, cliEnv(), cliCwd());
235
+ assertBackendRecoveryCliTarget(commandName, scopedOptions);
236
+ return executeConversationCommand(commandName, scopedOptions, (request, terminalId) => terminalListCliFacade.buildTerminalListGroup({ options: request, agentFilter: "codex", terminalId }).then(scan => scan.terminalControlled), dispatchCliCommand);
237
+ });
230
238
  }
231
239
  async function dispatchCliCommand(commandName, options) {
240
+ if (await dispatchLocalCodexCli(commandName, options))
241
+ return;
232
242
  if (commandName === "host-profile") {
233
243
  runHostProfileCommand(options);
234
244
  return;
@@ -245,9 +255,7 @@ async function dispatchCliCommand(commandName, options) {
245
255
  if (((commandName === "send" && !stringValue(options.turn)) ||
246
256
  commandName === "respond") &&
247
257
  typeof (options.message ?? options.request) === "string") {
248
- // This pure syntax fence must run before selector discovery. Native
249
- // lifecycle commands never need terminal, process, or Store observation.
250
- // runSend retains the same check at the execution boundary.
258
+ // Reject native slash input before terminal discovery; runSend repeats this fence.
251
259
  terminalSubmissionPayload(options.message ?? options.request);
252
260
  }
253
261
  if (!(commandName === "send" && options.turn)) {
@@ -787,6 +795,7 @@ const terminalListCliFacade = createTerminalListCliFacade({
787
795
  reconcileMonitors: (options, request) => terminalMonitorSupervisionCliFacade.reconcileMonitors(options, request)
788
796
  },
789
797
  discovery: {
798
+ localCodexList: localCodexListForCli,
790
799
  agentVersionForRunningProcess,
791
800
  codexLatentClearResumeObservation,
792
801
  codexManagedIdentityResolutionContext,
@@ -986,7 +995,7 @@ const terminalInteractionCliFacade = createTerminalInteractionCliAdapter({
986
995
  const terminalMaintenanceCliFacade = createTerminalMaintenanceCliFacade({
987
996
  runtime: {
988
997
  defaultAgentTimeoutMinutes: DEFAULT_AGENT_TIMEOUT_MINUTES,
989
- defaultAgentHardTimeoutMinutes: DEFAULT_AGENT_HARD_TIMEOUT_MINUTES,
998
+ defaultAgentHardTimeoutMinutes: DEFAULT_MONITOR_HARD_TIMEOUT_MINUTES,
990
999
  monitorLockVersion: terminalMonitorSupervisionCliFacade.monitorLockVersion,
991
1000
  loadConversation: loadConversationFromOptions,
992
1001
  storeDir: storeDirFromOptions,
@@ -1247,7 +1256,7 @@ function usage() {
1247
1256
  agent-knock-knock --help
1248
1257
  agent-knock-knock --version
1249
1258
  agent-knock-knock delegate --request <text> [--agent ${agentList}] [--workspace <path>] [--store-dir <dir>]
1250
- agent-knock-knock list [--store-dir <dir>] [--agent ${agentList}] [--status <status>] [--all] [--reconcile] [--no-approval-scan] [--terminal-debug]
1259
+ agent-knock-knock list [--store-dir <dir>] [--agent ${agentList}] [--status <status>] [--all] [--reconcile] [--no-approval-scan] [--terminal-debug] [--desktop-view sidebar|history] [--desktop-search <text>] [--desktop-project <id|path>] [--desktop-limit <1-100>] [--desktop-cursor <cursor>]
1251
1260
  agent-knock-knock watch-terminal --terminal <exact-terminal-id> --openclaw-session <session> [--hard-timeout-minutes <minutes>] [--store-dir <dir>] [--openclaw-bin <path>]
1252
1261
  agent-knock-knock watch-status --watch <terminal-watch-id> [--store-dir <dir>]
1253
1262
  agent-knock-knock unwatch-terminal --watch <terminal-watch-id> [--store-dir <dir>]
@@ -1271,9 +1280,10 @@ function usage() {
1271
1280
  agent-knock-knock respond-interaction (--turn <turn-id|selector> | --watch <watch-id>) --interaction <id> --response-json <json> --expected-interaction-fingerprint <fingerprint> --expected-interaction-expires-at <timestamp> # async_question defaults to advertised steer_current_turn (delivery_mode may select queue_next_turn); questionnaire forbids it; never use raw keys or menu indexes
1272
1281
  agent-knock-knock approve [--turn <turn-id|selector>] [--conversation <selector>] [--decision approve_once|reject] [--expected-terminal-token <token>] --expected-approval-fingerprint <fingerprint>
1273
1282
  agent-knock-knock cancel [--turn <turn-id|selector>] [--conversation <selector>]
1274
- agent-knock-knock renew [--turn <turn-id|selector>] [--conversation <selector>]
1275
- agent-knock-knock retry-callback [--turn <turn-id|selector>] [--conversation <selector>]
1276
- agent-knock-knock close [--turn <turn-id|selector>] [--conversation <selector>] [--reason <text>] [--expected-message-id <message-id> | --expected-transition-id <transition-id> | --expected-handoff-token <token>]
1283
+ agent-knock-knock renew (--watch <backend-watch-id> | --turn <turn-id|selector> | --conversation <legacy-selector>) [--minutes <positive-minutes>] [--openclaw-session <originating-controller>]
1284
+ agent-knock-knock recover (--watch <backend-watch-id> | --turn <backend-watch-id>) --openclaw-session <originating-controller>
1285
+ agent-knock-knock retry-callback (--watch <backend-watch-id> | --turn <turn-id|selector> | --conversation <legacy-selector>) [--notification-id <backend-notification-id>] [--openclaw-session <originating-controller>]
1286
+ agent-knock-knock close (--watch <backend-watch-id> | --turn <turn-id|selector> | --conversation <legacy-selector>) [--openclaw-session <originating-controller>] [--reason <text>] [--expected-message-id <message-id> | --expected-transition-id <transition-id> | --expected-handoff-token <token>] # recovery fences are terminal-only; passive backend Watches use unwatch-terminal
1277
1287
  agent-knock-knock install-openclaw [--verify] [--openclaw-bin <path>] [--skill-path <path>] [--skill-only] [--no-restart]
1278
1288
  agent-knock-knock doctor [--openclaw-bin <path>] [--tmux-bin <path>] [--herdr-bin <path>]
1279
1289
  agent-knock-knock host-profile example