@scotthuang/agent-knock-knock 0.13.18 → 0.14.0

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 (270) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/CONTRIBUTING.md +212 -0
  3. package/README.md +105 -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-recovery-semantic.d.ts +16 -0
  9. package/dist/src/backend-recovery-semantic.js +113 -0
  10. package/dist/src/backend-recovery-semantic.js.map +1 -0
  11. package/dist/src/backend-task-recovery.d.ts +103 -0
  12. package/dist/src/backend-task-recovery.js +142 -0
  13. package/dist/src/backend-task-recovery.js.map +1 -0
  14. package/dist/src/callback-transport.d.ts +8 -0
  15. package/dist/src/callback-transport.js +14 -0
  16. package/dist/src/callback-transport.js.map +1 -1
  17. package/dist/src/cli-core.js +18 -8
  18. package/dist/src/cli-core.js.map +1 -1
  19. package/dist/src/cli-runtime-context.d.ts +5 -0
  20. package/dist/src/cli-runtime-context.js.map +1 -1
  21. package/dist/src/codex-native-cli-adapter.d.ts +6 -0
  22. package/dist/src/codex-native-cli-adapter.js +273 -0
  23. package/dist/src/codex-native-cli-adapter.js.map +1 -0
  24. package/dist/src/codex-native-client-interactions.d.ts +6 -0
  25. package/dist/src/codex-native-client-interactions.js +124 -0
  26. package/dist/src/codex-native-client-interactions.js.map +1 -0
  27. package/dist/src/codex-native-client-rpc.d.ts +21 -0
  28. package/dist/src/codex-native-client-rpc.js +137 -0
  29. package/dist/src/codex-native-client-rpc.js.map +1 -0
  30. package/dist/src/codex-native-client.d.ts +42 -0
  31. package/dist/src/codex-native-client.js +326 -0
  32. package/dist/src/codex-native-client.js.map +1 -0
  33. package/dist/src/codex-native-identity.d.ts +6 -0
  34. package/dist/src/codex-native-identity.js +42 -0
  35. package/dist/src/codex-native-identity.js.map +1 -0
  36. package/dist/src/codex-native-monitor.d.ts +4 -0
  37. package/dist/src/codex-native-monitor.js +92 -0
  38. package/dist/src/codex-native-monitor.js.map +1 -0
  39. package/dist/src/codex-native-outbox.d.ts +16 -0
  40. package/dist/src/codex-native-outbox.js +120 -0
  41. package/dist/src/codex-native-outbox.js.map +1 -0
  42. package/dist/src/codex-native-public-projection.d.ts +545 -0
  43. package/dist/src/codex-native-public-projection.js +182 -0
  44. package/dist/src/codex-native-public-projection.js.map +1 -0
  45. package/dist/src/codex-native-record-store.d.ts +27 -0
  46. package/dist/src/codex-native-record-store.js +111 -0
  47. package/dist/src/codex-native-record-store.js.map +1 -0
  48. package/dist/src/codex-native-response-service.d.ts +69 -0
  49. package/dist/src/codex-native-response-service.js +244 -0
  50. package/dist/src/codex-native-response-service.js.map +1 -0
  51. package/dist/src/codex-native-runtime.d.ts +46 -0
  52. package/dist/src/codex-native-runtime.js +112 -0
  53. package/dist/src/codex-native-runtime.js.map +1 -0
  54. package/dist/src/codex-native-semantic.d.ts +17 -0
  55. package/dist/src/codex-native-semantic.js +175 -0
  56. package/dist/src/codex-native-semantic.js.map +1 -0
  57. package/dist/src/codex-native-snapshot.d.ts +19 -0
  58. package/dist/src/codex-native-snapshot.js +160 -0
  59. package/dist/src/codex-native-snapshot.js.map +1 -0
  60. package/dist/src/codex-native-state-store.d.ts +61 -0
  61. package/dist/src/codex-native-state-store.js +132 -0
  62. package/dist/src/codex-native-state-store.js.map +1 -0
  63. package/dist/src/codex-native-task-service.d.ts +71 -0
  64. package/dist/src/codex-native-task-service.js +502 -0
  65. package/dist/src/codex-native-task-service.js.map +1 -0
  66. package/dist/src/codex-native-types.d.ts +92 -0
  67. package/dist/src/codex-native-types.js +15 -0
  68. package/dist/src/codex-native-types.js.map +1 -0
  69. package/dist/src/conversation-list.d.ts +12 -0
  70. package/dist/src/conversation-list.js +30 -0
  71. package/dist/src/conversation-list.js.map +1 -0
  72. package/dist/src/conversation-route-dispatch.d.ts +13 -0
  73. package/dist/src/conversation-route-dispatch.js +66 -0
  74. package/dist/src/conversation-route-dispatch.js.map +1 -0
  75. package/dist/src/conversation-route-legacy.d.ts +18 -0
  76. package/dist/src/conversation-route-legacy.js +54 -0
  77. package/dist/src/conversation-route-legacy.js.map +1 -0
  78. package/dist/src/conversation-route-store.d.ts +51 -0
  79. package/dist/src/conversation-route-store.js +126 -0
  80. package/dist/src/conversation-route-store.js.map +1 -0
  81. package/dist/src/conversation-routing-cli-adapter.d.ts +12 -0
  82. package/dist/src/conversation-routing-cli-adapter.js +211 -0
  83. package/dist/src/conversation-routing-cli-adapter.js.map +1 -0
  84. package/dist/src/conversation-routing-commands.d.ts +11 -0
  85. package/dist/src/conversation-routing-commands.js +85 -0
  86. package/dist/src/conversation-routing-commands.js.map +1 -0
  87. package/dist/src/conversation-routing-home.d.ts +26 -0
  88. package/dist/src/conversation-routing-home.js +105 -0
  89. package/dist/src/conversation-routing-home.js.map +1 -0
  90. package/dist/src/conversation-routing-identity.d.ts +40 -0
  91. package/dist/src/conversation-routing-identity.js +174 -0
  92. package/dist/src/conversation-routing-identity.js.map +1 -0
  93. package/dist/src/conversation-runtime-route-store.d.ts +11 -0
  94. package/dist/src/conversation-runtime-route-store.js +118 -0
  95. package/dist/src/conversation-runtime-route-store.js.map +1 -0
  96. package/dist/src/desktop-async-interactions.d.ts +15 -0
  97. package/dist/src/desktop-async-interactions.js +88 -0
  98. package/dist/src/desktop-async-interactions.js.map +1 -0
  99. package/dist/src/desktop-async-state.d.ts +5 -0
  100. package/dist/src/desktop-async-state.js +53 -0
  101. package/dist/src/desktop-async-state.js.map +1 -0
  102. package/dist/src/desktop-cli-adapter.d.ts +7 -0
  103. package/dist/src/desktop-cli-adapter.js +322 -0
  104. package/dist/src/desktop-cli-adapter.js.map +1 -0
  105. package/dist/src/desktop-cli-controls.d.ts +9 -0
  106. package/dist/src/desktop-cli-controls.js +45 -0
  107. package/dist/src/desktop-cli-controls.js.map +1 -0
  108. package/dist/src/desktop-command-presentation.d.ts +2 -0
  109. package/dist/src/desktop-command-presentation.js +31 -0
  110. package/dist/src/desktop-command-presentation.js.map +1 -0
  111. package/dist/src/desktop-control-semantic.d.ts +8 -0
  112. package/dist/src/desktop-control-semantic.js +68 -0
  113. package/dist/src/desktop-control-semantic.js.map +1 -0
  114. package/dist/src/desktop-identity.d.ts +5 -0
  115. package/dist/src/desktop-identity.js +40 -0
  116. package/dist/src/desktop-identity.js.map +1 -0
  117. package/dist/src/desktop-interaction-projection.d.ts +57 -0
  118. package/dist/src/desktop-interaction-projection.js +196 -0
  119. package/dist/src/desktop-interaction-projection.js.map +1 -0
  120. package/dist/src/desktop-interaction-state.d.ts +3 -0
  121. package/dist/src/desktop-interaction-state.js +48 -0
  122. package/dist/src/desktop-interaction-state.js.map +1 -0
  123. package/dist/src/desktop-ipc-async-answer.d.ts +9 -0
  124. package/dist/src/desktop-ipc-async-answer.js +71 -0
  125. package/dist/src/desktop-ipc-async-answer.js.map +1 -0
  126. package/dist/src/desktop-ipc-client.d.ts +47 -0
  127. package/dist/src/desktop-ipc-client.js +400 -0
  128. package/dist/src/desktop-ipc-client.js.map +1 -0
  129. package/dist/src/desktop-ipc-native-operations.d.ts +11 -0
  130. package/dist/src/desktop-ipc-native-operations.js +126 -0
  131. package/dist/src/desktop-ipc-native-operations.js.map +1 -0
  132. package/dist/src/desktop-ipc-transport.d.ts +13 -0
  133. package/dist/src/desktop-ipc-transport.js +123 -0
  134. package/dist/src/desktop-ipc-transport.js.map +1 -0
  135. package/dist/src/desktop-list.d.ts +25 -0
  136. package/dist/src/desktop-list.js +55 -0
  137. package/dist/src/desktop-list.js.map +1 -0
  138. package/dist/src/desktop-metadata-reader.d.ts +30 -0
  139. package/dist/src/desktop-metadata-reader.js +182 -0
  140. package/dist/src/desktop-metadata-reader.js.map +1 -0
  141. package/dist/src/desktop-monitor.d.ts +4 -0
  142. package/dist/src/desktop-monitor.js +101 -0
  143. package/dist/src/desktop-monitor.js.map +1 -0
  144. package/dist/src/desktop-public-projection.d.ts +6 -0
  145. package/dist/src/desktop-public-projection.js +134 -0
  146. package/dist/src/desktop-public-projection.js.map +1 -0
  147. package/dist/src/desktop-request-interactions.d.ts +14 -0
  148. package/dist/src/desktop-request-interactions.js +144 -0
  149. package/dist/src/desktop-request-interactions.js.map +1 -0
  150. package/dist/src/desktop-response-dispatch.d.ts +14 -0
  151. package/dist/src/desktop-response-dispatch.js +19 -0
  152. package/dist/src/desktop-response-dispatch.js.map +1 -0
  153. package/dist/src/desktop-response-evidence.d.ts +4 -0
  154. package/dist/src/desktop-response-evidence.js +19 -0
  155. package/dist/src/desktop-response-evidence.js.map +1 -0
  156. package/dist/src/desktop-response-service.d.ts +11 -0
  157. package/dist/src/desktop-response-service.js +188 -0
  158. package/dist/src/desktop-response-service.js.map +1 -0
  159. package/dist/src/desktop-response-store.d.ts +35 -0
  160. package/dist/src/desktop-response-store.js +58 -0
  161. package/dist/src/desktop-response-store.js.map +1 -0
  162. package/dist/src/desktop-response-types.d.ts +20 -0
  163. package/dist/src/desktop-response-types.js +2 -0
  164. package/dist/src/desktop-response-types.js.map +1 -0
  165. package/dist/src/desktop-response-value.d.ts +6 -0
  166. package/dist/src/desktop-response-value.js +31 -0
  167. package/dist/src/desktop-response-value.js.map +1 -0
  168. package/dist/src/desktop-runtime.d.ts +153 -0
  169. package/dist/src/desktop-runtime.js +88 -0
  170. package/dist/src/desktop-runtime.js.map +1 -0
  171. package/dist/src/desktop-semantic.d.ts +21 -0
  172. package/dist/src/desktop-semantic.js +140 -0
  173. package/dist/src/desktop-semantic.js.map +1 -0
  174. package/dist/src/desktop-session-catalog.d.ts +68 -0
  175. package/dist/src/desktop-session-catalog.js +225 -0
  176. package/dist/src/desktop-session-catalog.js.map +1 -0
  177. package/dist/src/desktop-session-controls.d.ts +145 -0
  178. package/dist/src/desktop-session-controls.js +176 -0
  179. package/dist/src/desktop-session-controls.js.map +1 -0
  180. package/dist/src/desktop-sidebar-metadata.d.ts +27 -0
  181. package/dist/src/desktop-sidebar-metadata.js +83 -0
  182. package/dist/src/desktop-sidebar-metadata.js.map +1 -0
  183. package/dist/src/desktop-sidebar-projects.d.ts +10 -0
  184. package/dist/src/desktop-sidebar-projects.js +31 -0
  185. package/dist/src/desktop-sidebar-projects.js.map +1 -0
  186. package/dist/src/desktop-sidebar-selection.d.ts +28 -0
  187. package/dist/src/desktop-sidebar-selection.js +85 -0
  188. package/dist/src/desktop-sidebar-selection.js.map +1 -0
  189. package/dist/src/desktop-snapshot-details.d.ts +4 -0
  190. package/dist/src/desktop-snapshot-details.js +116 -0
  191. package/dist/src/desktop-snapshot-details.js.map +1 -0
  192. package/dist/src/desktop-snapshot.d.ts +11 -0
  193. package/dist/src/desktop-snapshot.js +276 -0
  194. package/dist/src/desktop-snapshot.js.map +1 -0
  195. package/dist/src/desktop-state-store.d.ts +72 -0
  196. package/dist/src/desktop-state-store.js +269 -0
  197. package/dist/src/desktop-state-store.js.map +1 -0
  198. package/dist/src/desktop-task-interactions.d.ts +10 -0
  199. package/dist/src/desktop-task-interactions.js +93 -0
  200. package/dist/src/desktop-task-interactions.js.map +1 -0
  201. package/dist/src/desktop-task-recovery.d.ts +38 -0
  202. package/dist/src/desktop-task-recovery.js +171 -0
  203. package/dist/src/desktop-task-recovery.js.map +1 -0
  204. package/dist/src/desktop-task-service.d.ts +54 -0
  205. package/dist/src/desktop-task-service.js +441 -0
  206. package/dist/src/desktop-task-service.js.map +1 -0
  207. package/dist/src/desktop-types.d.ts +281 -0
  208. package/dist/src/desktop-types.js +13 -0
  209. package/dist/src/desktop-types.js.map +1 -0
  210. package/dist/src/host-monitor-reconciliation.js +36 -4
  211. package/dist/src/host-monitor-reconciliation.js.map +1 -1
  212. package/dist/src/host-profile-runtime.js +7 -3
  213. package/dist/src/host-profile-runtime.js.map +1 -1
  214. package/dist/src/local-codex-cli-adapter.d.ts +7 -0
  215. package/dist/src/local-codex-cli-adapter.js +13 -0
  216. package/dist/src/local-codex-cli-adapter.js.map +1 -0
  217. package/dist/src/openclaw-callback-transport.js +2 -1
  218. package/dist/src/openclaw-callback-transport.js.map +1 -1
  219. package/dist/src/semantic-conversation-target.d.ts +4 -0
  220. package/dist/src/semantic-conversation-target.js +20 -0
  221. package/dist/src/semantic-conversation-target.js.map +1 -0
  222. package/dist/src/semantic-permission-control.js +47 -9
  223. package/dist/src/semantic-permission-control.js.map +1 -1
  224. package/dist/src/semantic-private-authority-offers.d.ts +1 -1
  225. package/dist/src/semantic-private-authority-offers.js +3 -1
  226. package/dist/src/semantic-private-authority-offers.js.map +1 -1
  227. package/dist/src/semantic-tool-command-helpers.d.ts +6 -0
  228. package/dist/src/semantic-tool-command-helpers.js +199 -78
  229. package/dist/src/semantic-tool-command-helpers.js.map +1 -1
  230. package/dist/src/semantic-tool-descriptions.d.ts +2 -1
  231. package/dist/src/semantic-tool-descriptions.js +81 -35
  232. package/dist/src/semantic-tool-descriptions.js.map +1 -1
  233. package/dist/src/semantic-tool-list-projection.js +66 -2
  234. package/dist/src/semantic-tool-list-projection.js.map +1 -1
  235. package/dist/src/semantic-tool-presentation.js +76 -7
  236. package/dist/src/semantic-tool-presentation.js.map +1 -1
  237. package/dist/src/semantic-tool-runtime.js +129 -29
  238. package/dist/src/semantic-tool-runtime.js.map +1 -1
  239. package/dist/src/semantic-tool-schemas.d.ts +410 -27
  240. package/dist/src/semantic-tool-schemas.js +176 -88
  241. package/dist/src/semantic-tool-schemas.js.map +1 -1
  242. package/dist/src/terminal-action-contracts.js +10 -6
  243. package/dist/src/terminal-action-contracts.js.map +1 -1
  244. package/dist/src/terminal-list-cli-adapter.d.ts +1 -0
  245. package/dist/src/terminal-list-cli-adapter.js +6 -3
  246. package/dist/src/terminal-list-cli-adapter.js.map +1 -1
  247. package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
  248. package/dist/src/terminal-permission-control-list-projection.d.ts +1 -1
  249. package/dist/src/terminal-user-send-intent.d.ts +2 -0
  250. package/dist/src/terminal-user-send-intent.js +11 -3
  251. package/dist/src/terminal-user-send-intent.js.map +1 -1
  252. package/docs/architecture/current-architecture.md +313 -0
  253. package/docs/architecture/interactive-terminal-response.md +276 -0
  254. package/docs/architecture/issue-126-final-report.md +248 -0
  255. package/docs/architecture/orchestration-refactor-history.md +2987 -0
  256. package/docs/architecture/orchestration-refactor.md +21 -0
  257. package/docs/backend-task-recovery.md +89 -0
  258. package/docs/bidirectional-agent-protocol.md +260 -0
  259. package/docs/codex-cli-native-compatibility.md +246 -0
  260. package/docs/codex-desktop-compatibility.md +414 -0
  261. package/docs/openclaw-operations.md +281 -0
  262. package/docs/openclaw-session-turn-delivery-requirement.md +45 -0
  263. package/docs/operator-guide.md +543 -0
  264. package/docs/storage-and-logging.md +91 -0
  265. package/docs/test-performance-issue-108.md +80 -0
  266. package/docs/test-performance-issue-120.md +226 -0
  267. package/docs/testing.md +628 -0
  268. package/openclaw.plugin.json +7 -3
  269. package/package.json +6 -13
  270. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +66 -15
@@ -0,0 +1,175 @@
1
+ import { isCodexNativeConversationId, isCodexNativeWatchId, parseCodexNativeConversationId } from "./codex-native-identity.js";
2
+ import { numberString, pushOptional, requiredString, requiredTerminalInteractionIdentifier } from "./semantic-tool-arguments.js";
3
+ import { resolvePluginStoreDir } from "./semantic-tool-command-helpers.js";
4
+ import { isRecord } from "./value-guards.js";
5
+ import { parseTerminalConversationId } from "./terminal-agent-adapter.js";
6
+ import { TERMINAL_INTERACTION_LIMITS } from "./terminal-interaction-protocol.js";
7
+ /** A dispatched response is distinct from a subsequently verified native effect. */
8
+ export function isNativeInteractionResponseError(value) {
9
+ return isRecord(value) && value.source === "codex_cli" &&
10
+ ["not_sent", "uncertain", "reserved"].includes(String(value.state));
11
+ }
12
+ /** Native targets carry the backend/thread identity, never terminal UI authority. */
13
+ export function nativeConversationTarget(params) {
14
+ if (!Object.hasOwn(params, "conversation_id"))
15
+ return undefined;
16
+ const id = requiredString(params.conversation_id, "conversation_id");
17
+ if (!isCodexNativeConversationId(id))
18
+ return undefined;
19
+ parseCodexNativeConversationId(id);
20
+ if (["terminal_id", "session_id", "turn_id", "watch_id"].some(key => Object.hasOwn(params, key))) {
21
+ throw new Error("Codex CLI conversation_id cannot be combined with another target");
22
+ }
23
+ return id;
24
+ }
25
+ /** Terminal aliases stay selectors; the CLI router proves the backend identity before dispatch. */
26
+ export function routedCodexTerminalTarget(params) {
27
+ const id = params.conversation_id ?? params.terminal_id;
28
+ if (typeof id !== "string" || parseTerminalConversationId(id)?.agent !== "codex")
29
+ return undefined;
30
+ const keys = ["conversation_id", "terminal_id", "session_id", "turn_id", "watch_id"];
31
+ if (keys.filter(key => Object.hasOwn(params, key)).length !== 1) {
32
+ throw new Error("Codex terminal conversation accepts exactly one target");
33
+ }
34
+ return id;
35
+ }
36
+ export function routedCodexTerminalControlArgs(params, config, context, action) {
37
+ const id = routedCodexTerminalTarget(params);
38
+ if (!id)
39
+ return undefined;
40
+ const fields = action === "set-permissions" ? ["mode"] : action === "status" ? ["inspection"] : [];
41
+ onlyParameters(params, ["conversation_id", "terminal_id", ...fields]);
42
+ const args = scopedArgs(action === "status" ? "native-inspect" : action === "permissions" ? "permission-options" : action, ["--terminal", id], config, context);
43
+ if (action === "status")
44
+ args.push("--inspection", "status");
45
+ if (action === "set-permissions") {
46
+ if (!["read-only", "default", "full-access"].includes(String(params.mode)))
47
+ return undefined;
48
+ args.push("--mode", String(params.mode));
49
+ }
50
+ return args;
51
+ }
52
+ export function validatedNativeWatchId(value) {
53
+ if (typeof value !== "string" || !value.startsWith("codex-cli-watch:"))
54
+ return undefined;
55
+ if (!isCodexNativeWatchId(value)) {
56
+ throw new Error("Invalid Codex CLI Watch ID");
57
+ }
58
+ return value;
59
+ }
60
+ function nativeSubject(params) {
61
+ const conversationId = nativeConversationTarget(params);
62
+ if (conversationId)
63
+ return ["--conversation", conversationId];
64
+ const terminalId = routedCodexTerminalTarget(params);
65
+ if (terminalId && Object.hasOwn(params, "interaction_id")) {
66
+ if (!/^codex-native-interaction:[0-9a-f]{64}$/u.test(String(params.interaction_id))) {
67
+ throw new Error("A terminal conversation interaction requires its exact backend interaction_id; use the displayed Turn or Watch for terminal UI responses");
68
+ }
69
+ return ["--conversation", terminalId];
70
+ }
71
+ const watchId = validatedNativeWatchId(params.watch_id);
72
+ if (!watchId)
73
+ return undefined;
74
+ if (["terminal_id", "session_id", "turn_id", "conversation_id"].some(key => Object.hasOwn(params, key))) {
75
+ throw new Error("Codex CLI watch_id cannot be combined with another target");
76
+ }
77
+ return ["--watch", watchId];
78
+ }
79
+ function scopedArgs(command, target, config, context) {
80
+ const args = [command, ...target, "--openclaw-session", requiredString(context.sessionKey, "controller session")];
81
+ pushOptional(args, "--store-dir", resolvePluginStoreDir(config));
82
+ pushOptional(args, "--codex-home", config.codexHome);
83
+ return args;
84
+ }
85
+ function onlyParameters(params, names) {
86
+ const extra = Object.keys(params).filter(key => !names.includes(key));
87
+ if (extra.length)
88
+ throw new Error(`Unexpected Codex CLI parameters: ${extra.join(", ")}`);
89
+ }
90
+ export function nativeSendToolArgs(params, config, context, messageId) {
91
+ const id = nativeConversationTarget(params);
92
+ if (!id)
93
+ return undefined;
94
+ onlyParameters(params, ["conversation_id", "request", "type", "agentHardTimeoutMinutes"]);
95
+ if (params.type !== undefined && params.type !== "task")
96
+ throw new Error("Codex CLI Send accepts tasks only");
97
+ const args = scopedArgs("send", ["--conversation", id], config, context);
98
+ args.push("--message", requiredString(params.request, "request"), "--background", "--message-id", requiredString(messageId, "stable Codex CLI tool call identity"));
99
+ pushOptional(args, "--openclaw-bin", config.openclawBin);
100
+ pushOptional(args, "--agent-hard-timeout-minutes", numberString(params.agentHardTimeoutMinutes) ?? numberString(config.agentHardTimeoutMinutes));
101
+ return args;
102
+ }
103
+ export function nativePermissionToolArgs(params, config, context, action) {
104
+ const id = nativeConversationTarget(params);
105
+ if (!id)
106
+ return undefined;
107
+ onlyParameters(params, action === "set-permissions" ? ["conversation_id", "mode"] : action === "status" ? ["conversation_id", "inspection"] : ["conversation_id"]);
108
+ const args = scopedArgs(action === "set-permissions" ? action : "native-inspect", ["--conversation", id], config, context);
109
+ if (action === "set-permissions") {
110
+ if (!["read-only", "default", "full-access"].includes(String(params.mode)))
111
+ throw new Error("mode must be read-only, default, or full-access");
112
+ args.push("--mode", String(params.mode));
113
+ }
114
+ else
115
+ args.push("--action", action);
116
+ return args;
117
+ }
118
+ export function nativeApprovalToolArgs(params, config, context) {
119
+ const target = nativeSubject(params);
120
+ if (!target)
121
+ return undefined;
122
+ onlyParameters(params, ["conversation_id", "terminal_id", "watch_id", "interaction_id", "decision"]);
123
+ const decision = params.decision ?? "approve_once";
124
+ if (decision !== "approve_once" && decision !== "reject")
125
+ throw new Error("decision must be approve_once or reject");
126
+ return [...scopedArgs("approve", target, config, context), "--interaction",
127
+ requiredTerminalInteractionIdentifier(params.interaction_id, "interaction_id"), "--decision", decision];
128
+ }
129
+ export function nativeInteractionToolArgs(params, config, context) {
130
+ const target = nativeSubject(params);
131
+ if (!target)
132
+ return undefined;
133
+ onlyParameters(params, ["conversation_id", "terminal_id", "watch_id", "interaction_id", "answers", "delivery_mode"]);
134
+ const interactionId = requiredTerminalInteractionIdentifier(params.interaction_id, "interaction_id");
135
+ if (params.delivery_mode !== undefined && params.delivery_mode !== "steer_current_turn") {
136
+ throw new Error("Codex CLI async answers support steer_current_turn only");
137
+ }
138
+ validateNativeAnswers(params.answers);
139
+ const response = { interaction_id: interactionId, answers: params.answers,
140
+ ...(params.delivery_mode === undefined ? {} : { delivery_mode: params.delivery_mode }) };
141
+ return [...scopedArgs("respond-interaction", target, config, context), "--interaction", interactionId,
142
+ "--response-json", JSON.stringify(response)];
143
+ }
144
+ function validateNativeAnswers(answers) {
145
+ if (!Array.isArray(answers) || !answers.length || answers.length > 16) {
146
+ throw new Error("answers must contain current typed question answers");
147
+ }
148
+ const seen = new Set();
149
+ for (const answer of answers) {
150
+ if (!isRecord(answer))
151
+ throw new Error("Invalid typed question answer");
152
+ const questionId = requiredTerminalInteractionIdentifier(answer.question_id, "question_id");
153
+ if (seen.has(questionId))
154
+ throw new Error("Duplicate question_id");
155
+ seen.add(questionId);
156
+ const kind = answer.response_kind;
157
+ const field = kind === "single_select" ? "selected_option_ids" : kind === "free_text" ? "text" : kind === "confirm" ? "confirm" : undefined;
158
+ if (!field)
159
+ throw new Error("Unsupported response_kind");
160
+ onlyParameters(answer, ["question_id", "response_kind", field]);
161
+ if (field === "selected_option_ids") {
162
+ if (!Array.isArray(answer[field]) || answer[field].length !== 1)
163
+ throw new Error("single_select requires exactly one option_id");
164
+ requiredTerminalInteractionIdentifier(answer[field][0], "option_id");
165
+ }
166
+ else if (field === "text") {
167
+ const text = requiredString(answer.text, "text");
168
+ if (text.length > TERMINAL_INTERACTION_LIMITS.maxTextAnswerLength || /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f]/u.test(text))
169
+ throw new Error("Invalid free_text answer");
170
+ }
171
+ else if (typeof answer.confirm !== "boolean")
172
+ throw new Error("confirm requires a boolean");
173
+ }
174
+ }
175
+ //# sourceMappingURL=codex-native-semantic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-native-semantic.js","sourceRoot":"","sources":["../../src/codex-native-semantic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type CodexNativeThread, type CodexNativeTurn, type NativeInteraction, type CodexNativePermissions } from "./codex-native-types.js";
2
+ import type { CodexAppServerThreadItem } from "./codex-app-server-read-client.js";
3
+ export declare function nativeRecord(value: unknown): Record<string, unknown>;
4
+ export declare function nativeId(value: unknown, limit?: number): string;
5
+ export declare function nativeInvalid(message: string): never;
6
+ export declare function parseNativeThread(value: unknown, expectedId: string): CodexNativeThread;
7
+ /** Metadata describes the thread's origin, not the currently running frontend version. */
8
+ export declare function isMainCodexCliThread(thread: CodexNativeThread): boolean;
9
+ export declare function parseNativeItem(value: unknown): CodexAppServerThreadItem;
10
+ export declare function parseNativeTurn(value: unknown): CodexNativeTurn;
11
+ export declare function nativePage<T>(value: unknown, parse: (entry: unknown) => T): {
12
+ data: T[];
13
+ nextCursor: string | null;
14
+ };
15
+ export declare function nativeInteractionId(identity: unknown): string;
16
+ export declare function nativeAsyncInteractions(threadId: string, turn: CodexNativeTurn): NativeInteraction[];
17
+ export declare function nativeUserMessageText(item: CodexAppServerThreadItem): string | null;
18
+ export declare function findNativeSubmission(turns: CodexNativeTurn[], clientUserMessageId: string, text: string): CodexNativeTurn | null;
19
+ export declare function parseNativePermissions(value: unknown): CodexNativePermissions;
@@ -0,0 +1,160 @@
1
+ import path from "node:path";
2
+ import { createHash } from "node:crypto";
3
+ import { CodexNativeError } from "./codex-native-types.js";
4
+ export function nativeRecord(value) {
5
+ if (!value || typeof value !== "object" || Array.isArray(value))
6
+ nativeInvalid("Invalid Codex native object");
7
+ return value;
8
+ }
9
+ export function nativeId(value, limit = 512) {
10
+ if (typeof value !== "string" || !value.length || value.length > limit || /[\u0000-\u001f\u007f]/u.test(value)) {
11
+ nativeInvalid("Invalid Codex native identifier");
12
+ }
13
+ return value;
14
+ }
15
+ export function nativeInvalid(message) { throw new CodexNativeError("invalid_response", message); }
16
+ export function parseNativeThread(value, expectedId) {
17
+ const thread = nativeRecord(value);
18
+ if (thread.id !== expectedId)
19
+ nativeInvalid("Codex returned a different thread");
20
+ nativeId(thread.sessionId);
21
+ if (typeof thread.cwd !== "string" || !path.isAbsolute(thread.cwd)
22
+ || !["legacy", "paginated"].includes(String(thread.historyMode)) || typeof thread.cliVersion !== "string"
23
+ || (thread.originator !== null && typeof thread.originator !== "string") || !Array.isArray(thread.turns)) {
24
+ nativeInvalid("Invalid Codex native thread metadata");
25
+ }
26
+ const status = nativeRecord(thread.status);
27
+ if (!["idle", "active", "notLoaded", "systemError"].includes(String(status.type))
28
+ || (status.type === "active" && (!Array.isArray(status.activeFlags) || status.activeFlags.some(f => typeof f !== "string")))) {
29
+ nativeInvalid("Invalid Codex native thread status");
30
+ }
31
+ return thread;
32
+ }
33
+ /** Metadata describes the thread's origin, not the currently running frontend version. */
34
+ export function isMainCodexCliThread(thread) {
35
+ if (thread.parentThreadId != null || thread.canAcceptDirectInput === false)
36
+ return false;
37
+ if (thread.source && typeof thread.source === "object")
38
+ return false;
39
+ if (thread.threadSource != null && thread.threadSource !== "user")
40
+ return false;
41
+ return thread.originator === "codex-tui" || (thread.source === "cli" && thread.originator !== "codex-desktop");
42
+ }
43
+ export function parseNativeItem(value) {
44
+ const item = nativeRecord(value);
45
+ nativeId(item.id);
46
+ nativeId(item.type);
47
+ if (item.type === "userMessage") {
48
+ if (!Array.isArray(item.content))
49
+ nativeInvalid("Invalid native user message");
50
+ for (const part of item.content) {
51
+ const p = nativeRecord(part);
52
+ nativeId(p.type);
53
+ if (p.type === "text" && typeof p.text !== "string")
54
+ nativeInvalid("Invalid native user text");
55
+ }
56
+ if (item.clientId != null)
57
+ nativeId(item.clientId);
58
+ }
59
+ if (item.type === "agentMessage") {
60
+ if (typeof item.text !== "string")
61
+ nativeInvalid("Invalid native agent text");
62
+ if (item.delivery != null && item.delivery !== "async")
63
+ nativeInvalid("Unknown native message delivery");
64
+ if (item.questions != null) {
65
+ if (!Array.isArray(item.questions) || item.questions.length > 64)
66
+ nativeInvalid("Invalid native question list");
67
+ for (const raw of item.questions) {
68
+ const q = nativeRecord(raw);
69
+ if (typeof q.title !== "string" || (q.options !== null
70
+ && (!Array.isArray(q.options) || q.options.some(o => typeof o !== "string"))))
71
+ nativeInvalid("Invalid native question");
72
+ }
73
+ }
74
+ }
75
+ return item;
76
+ }
77
+ export function parseNativeTurn(value) {
78
+ const turn = nativeRecord(value);
79
+ const id = nativeId(turn.id);
80
+ if (!["inProgress", "completed", "failed", "interrupted"].includes(String(turn.status))
81
+ || !Array.isArray(turn.items) || !["notLoaded", "summary", "full"].includes(String(turn.itemsView))) {
82
+ nativeInvalid("Invalid native turn");
83
+ }
84
+ const items = turn.items.map(parseNativeItem);
85
+ if (new Set(items.map(i => i.id)).size !== items.length)
86
+ nativeInvalid("Duplicate native item identity");
87
+ const error = turn.error == null ? undefined : nativeRecord(turn.error).message;
88
+ if (error !== undefined && typeof error !== "string")
89
+ nativeInvalid("Invalid native turn error");
90
+ return { id, status: turn.status, items,
91
+ itemsComplete: turn.itemsView === "full", ...(typeof error === "string" ? { error } : {}) };
92
+ }
93
+ export function nativePage(value, parse) {
94
+ const page = nativeRecord(value);
95
+ if (!Array.isArray(page.data) || page.data.length > 100)
96
+ nativeInvalid("Invalid bounded native page");
97
+ return { data: page.data.map(parse), nextCursor: page.nextCursor === null ? null : nativeId(page.nextCursor, 4096) };
98
+ }
99
+ export function nativeInteractionId(identity) {
100
+ return "codex-native-interaction:" + createHash("sha256").update(JSON.stringify(identity)).digest("hex");
101
+ }
102
+ export function nativeAsyncInteractions(threadId, turn) {
103
+ if (!turn.itemsComplete || turn.status !== "inProgress")
104
+ return [];
105
+ const answered = new Set();
106
+ for (const item of turn.items) {
107
+ let text = nativeUserMessageText(item)?.trim();
108
+ if (text?.startsWith("# Context from my IDE setup:\n")) {
109
+ const marker = "\n## My request for Codex:\n", index = text.lastIndexOf(marker);
110
+ if (index < 0)
111
+ continue;
112
+ text = text.slice(index + marker.length).trim();
113
+ }
114
+ const match = text && /^<send_user_message_question_reply>\s*([\s\S]*?)\s*<\/send_user_message_question_reply>$/u.exec(text);
115
+ if (!match)
116
+ continue;
117
+ try {
118
+ const raw = JSON.parse(match[1]);
119
+ const replies = Array.isArray(raw) ? raw : [raw];
120
+ for (const reply of replies) {
121
+ const r = nativeRecord(reply);
122
+ if (typeof r.questionItemId === "string" && typeof r.answer === "string")
123
+ answered.add(r.questionItemId);
124
+ }
125
+ }
126
+ catch { /* A normal user message is not an answer receipt. */ }
127
+ }
128
+ return turn.items.flatMap(item => item.type === "agentMessage" && item.delivery === "async"
129
+ ? (item.questions ?? []).flatMap((q, index) => {
130
+ const questionId = JSON.stringify(["request_user_input_async", item.id, index]);
131
+ if (answered.has(questionId) || answered.has(item.id))
132
+ return [];
133
+ return [{ id: nativeInteractionId([threadId, turn.id, item.id, questionId, q.title, q.options]),
134
+ kind: "async_question", threadId, turnId: turn.id, itemId: item.id,
135
+ method: "request_user_input_async", questions: [{ id: questionId, title: q.title, options: q.options ?? [], isOther: true }] }];
136
+ }) : []);
137
+ }
138
+ export function nativeUserMessageText(item) {
139
+ return item.type === "userMessage" && item.content?.length === 1 && item.content[0].type === "text"
140
+ && typeof item.content[0].text === "string" ? item.content[0].text : null;
141
+ }
142
+ export function findNativeSubmission(turns, clientUserMessageId, text) {
143
+ const matches = turns.filter(t => t.itemsComplete && t.items.some(i => i.type === "userMessage"
144
+ && i.clientId === clientUserMessageId && nativeUserMessageText(i) === text));
145
+ return matches.length === 1 ? matches[0] : null;
146
+ }
147
+ export function parseNativePermissions(value) {
148
+ const raw = nativeRecord(value);
149
+ const sandbox = nativeRecord(raw.sandbox ?? raw.sandboxPolicy);
150
+ const profileId = raw.activePermissionProfile == null ? null : nativeId(nativeRecord(raw.activePermissionProfile).id);
151
+ if (typeof raw.approvalsReviewer !== "string" || (typeof raw.approvalPolicy !== "string"
152
+ && (!raw.approvalPolicy || typeof raw.approvalPolicy !== "object")))
153
+ nativeInvalid("Invalid native permission settings");
154
+ const policy = raw.approvalPolicy;
155
+ const preset = profileId === ":danger-full-access" && sandbox.type === "dangerFullAccess" && policy === "never" ? "full-access"
156
+ : profileId === ":workspace" && sandbox.type === "workspaceWrite" && policy === "on-request" ? "default"
157
+ : profileId === ":read-only" && sandbox.type === "readOnly" && policy === "on-request" ? "read-only" : "custom";
158
+ return { preset, profileId, sandbox, approvalPolicy: policy, approvalsReviewer: raw.approvalsReviewer };
159
+ }
160
+ //# sourceMappingURL=codex-native-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-native-snapshot.js","sourceRoot":"","sources":["../../src/codex-native-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAC8B,MAAM,yBAAyB,CAAC;AAGvF,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,aAAa,CAAC,6BAA6B,CAAC,CAAC;IAC9G,OAAO,KAAgC,CAAC;AAC1C,CAAC;AACD,MAAM,UAAU,QAAQ,CAAC,KAAc,EAAE,KAAK,GAAG,GAAG;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/G,aAAa,CAAC,iCAAiC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,OAAe,IAAW,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAElH,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,UAAkB;IAClE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,EAAE,KAAK,UAAU;QAAE,aAAa,CAAC,mCAAmC,CAAC,CAAC;IACjF,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3B,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC;WAC7D,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;WACtG,CAAC,MAAM,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3G,aAAa,CAAC,sCAAsC,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;WAC5E,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/H,aAAa,CAAC,oCAAoC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAsC,CAAC;AAChD,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,oBAAoB,CAAC,MAAyB;IAC5D,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI,IAAI,MAAM,CAAC,oBAAoB,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACzF,IAAI,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAChF,OAAO,MAAM,CAAC,UAAU,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,UAAU,KAAK,eAAe,CAAC,CAAC;AACjH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,aAAa,CAAC,6BAA6B,CAAC,CAAC;QAC/E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAAE,aAAa,CAAC,0BAA0B,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACjC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,aAAa,CAAC,2BAA2B,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;YAAE,aAAa,CAAC,iCAAiC,CAAC,CAAC;QACzG,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE;gBAAE,aAAa,CAAC,8BAA8B,CAAC,CAAC;YAChH,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI;uBACjD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;oBAAE,aAAa,CAAC,yBAAyB,CAAC,CAAC;YAC5H,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAA2C,CAAC;AACrD,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;WAClF,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACtG,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9C,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;QAAE,aAAa,CAAC,gCAAgC,CAAC,CAAC;IACzG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;IAChF,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,aAAa,CAAC,2BAA2B,CAAC,CAAC;IACjG,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAmC,EAAE,KAAK;QAClE,aAAa,EAAE,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAChG,CAAC;AACD,MAAM,UAAU,UAAU,CAAI,KAAc,EAAE,KAA4B;IACxE,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG;QAAE,aAAa,CAAC,6BAA6B,CAAC,CAAC;IACtG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;AACvH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAiB;IACnD,OAAO,2BAA2B,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3G,CAAC;AACD,MAAM,UAAU,uBAAuB,CAAC,QAAgB,EAAE,IAAqB;IAC7E,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY;QAAE,OAAO,EAAE,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QAC/C,IAAI,IAAI,EAAE,UAAU,CAAC,gCAAgC,CAAC,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,8BAA8B,EAAE,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAChF,IAAI,KAAK,GAAG,CAAC;gBAAE,SAAS;YACxB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,IAAI,2FAA2F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7H,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5F,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,OAAO,CAAC,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;oBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAC3G,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,qDAAqD,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;QACzF,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,0BAA0B,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAChF,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO,EAAE,CAAC;YACjE,OAAO,CAAC,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC7F,IAAI,EAAE,gBAAyB,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;oBAC3E,MAAM,EAAE,0BAA0B,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACpI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AACD,MAAM,UAAU,qBAAqB,CAAC,IAA8B;IAClE,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM;WAC9F,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,KAAwB,EAAE,mBAA2B,EAAE,IAAY;IACtG,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa;WAC1F,CAAC,CAAC,QAAQ,KAAK,mBAAmB,IAAI,qBAAqB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAAC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAChG,MAAM,SAAS,GAAG,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;IACtH,IAAI,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ,IAAI,CAAC,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ;WACnF,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC;QAAE,aAAa,CAAC,oCAAoC,CAAC,CAAC;IAC3H,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC;IAClC,MAAM,MAAM,GAAG,SAAS,KAAK,qBAAqB,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa;QAC7H,CAAC,CAAC,SAAS,KAAK,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB,IAAI,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS;YACxG,CAAC,CAAC,SAAS,KAAK,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;AAC1G,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { type BackendRecoveryFields, type BackendRetryFields } from "./backend-task-recovery.js";
2
+ import { type CallbackAttemptOutcome, type CallbackEnvelopeV1, type CallbackRouteV1 } from "./callback-transport.js";
3
+ export { isCodexNativeWatchId } from "./codex-native-identity.js";
4
+ import { type NativeRecordRepository } from "./codex-native-record-store.js";
5
+ import type { CodexNativeIdentity, NativeInteraction } from "./codex-native-types.js";
6
+ export type CodexNativeTaskStatus = "awaiting_acceptance" | "watching" | "completed" | "failed" | "interrupted" | "timed_out" | "cancelled";
7
+ export interface CodexNativeSendIntent {
8
+ message_id: string;
9
+ client_user_message_id: string;
10
+ text: string;
11
+ baseline_turn_ids: string[];
12
+ state: "reserved" | "uncertain" | "accepted" | "not_sent";
13
+ dispatched_at: string;
14
+ receipt_turn_id?: string;
15
+ error_code?: string;
16
+ }
17
+ export interface CodexNativeNotification extends BackendRetryFields {
18
+ id: string;
19
+ envelope: CallbackEnvelopeV1;
20
+ status: "ready" | "leased" | "retry_wait" | "accepted" | "failed" | "uncertain";
21
+ attempts: number;
22
+ attempt_id?: string;
23
+ lease_expires_at?: string;
24
+ retry_at?: string;
25
+ outcome?: CallbackAttemptOutcome;
26
+ }
27
+ /** Connection-local request IDs are deliberately absent from persisted interaction authority. */
28
+ export type PersistedNativeInteraction = Omit<NativeInteraction, "requestId">;
29
+ export interface CodexNativeTaskRecord extends BackendRecoveryFields {
30
+ schema: "agent-knock-knock/codex-native-task";
31
+ version: 1;
32
+ revision: number;
33
+ id: string;
34
+ watch_id: string;
35
+ native_id: string;
36
+ target: CodexNativeIdentity;
37
+ controller_session: string;
38
+ kind: "send" | "watch";
39
+ status: CodexNativeTaskStatus;
40
+ created_at: string;
41
+ updated_at: string;
42
+ deadline_at: string;
43
+ native_turn_id?: string;
44
+ send_intent?: CodexNativeSendIntent;
45
+ callback_route?: CallbackRouteV1;
46
+ observed_at?: string;
47
+ observation_error?: string;
48
+ pending_interactions: PersistedNativeInteraction[];
49
+ final_text?: string;
50
+ notifications: CodexNativeNotification[];
51
+ }
52
+ export type CodexNativeStateRepository = NativeRecordRepository<CodexNativeTaskRecord>;
53
+ export declare const nonblank: (value: unknown) => value is string;
54
+ export declare const validTime: (value: unknown) => value is string;
55
+ export declare function assertNativeIdentity(nativeId: string, target: CodexNativeIdentity): void;
56
+ export declare function persistNativeInteraction(value: NativeInteraction): PersistedNativeInteraction;
57
+ export declare function assertPersistedNativeInteraction(value: PersistedNativeInteraction, target: CodexNativeIdentity, turnId?: string): void;
58
+ export declare function assertCodexNativeTaskRecord(value: unknown): asserts value is CodexNativeTaskRecord;
59
+ export declare function createCodexNativeStateStore(storeDir: string, locks: {
60
+ acquire(lockPath: string): () => void;
61
+ }): CodexNativeStateRepository;
@@ -0,0 +1,132 @@
1
+ import { assertBackendRecoveryFields, assertBackendRecoveryUpdate } from "./backend-task-recovery.js";
2
+ import { isDeepStrictEqual } from "node:util";
3
+ import { createCallbackEnvelope, parseCallbackAttemptOutcome, parseCallbackRoute } from "./callback-transport.js";
4
+ import { isCodexNativeWatchId, parseCodexNativeConversationId } from "./codex-native-identity.js";
5
+ export { isCodexNativeWatchId } from "./codex-native-identity.js";
6
+ import { createNativeRecordRepository } from "./codex-native-record-store.js";
7
+ export const nonblank = (value) => typeof value === "string" && value.trim().length > 0;
8
+ export const validTime = (value) => typeof value === "string" && Number.isFinite(Date.parse(value));
9
+ export function assertNativeIdentity(nativeId, target) {
10
+ if (!isDeepStrictEqual(parseCodexNativeConversationId(nativeId), target))
11
+ throw new Error("Codex native conversation does not match its target");
12
+ }
13
+ export function persistNativeInteraction(value) {
14
+ const { requestId: _requestId, ...persistent } = value;
15
+ return structuredClone(persistent);
16
+ }
17
+ export function assertPersistedNativeInteraction(value, target, turnId) {
18
+ if (!value || !nonblank(value.id) || !nonblank(value.itemId) || !nonblank(value.method) ||
19
+ value.threadId !== target.threadId || !nonblank(value.turnId) || turnId && value.turnId !== turnId ||
20
+ !["command_approval", "file_approval", "blocking_question", "async_question"].includes(value.kind) ||
21
+ Object.hasOwn(value, "requestId") || !Array.isArray(value.questions) || value.questions.some(q => !nonblank(q.id) || !nonblank(q.title) || !Array.isArray(q.options) || q.options.some(o => typeof o !== "string"))) {
22
+ throw new Error("Invalid persisted Codex native interaction");
23
+ }
24
+ if (value.changes !== undefined && (!Array.isArray(value.changes) || value.changes.some(change => !change || !nonblank(change.path) || change.kind !== undefined && typeof change.kind !== "string" ||
25
+ change.diff !== undefined && typeof change.diff !== "string" || change.diffTruncated !== undefined && typeof change.diffTruncated !== "boolean"))) {
26
+ throw new Error("Invalid persisted native file approval changes");
27
+ }
28
+ }
29
+ function assertTaskSchema(r) {
30
+ if (!r || typeof r !== "object" || r.schema !== "agent-knock-knock/codex-native-task" || r.version !== 1 ||
31
+ !Number.isSafeInteger(r.revision) || r.revision < 1 || !isCodexNativeWatchId(r.id) || r.watch_id !== r.id ||
32
+ !nonblank(r.controller_session) || !["send", "watch"].includes(r.kind) ||
33
+ !["awaiting_acceptance", "watching", "completed", "failed", "interrupted", "timed_out", "cancelled"].includes(r.status) ||
34
+ !validTime(r.created_at) || !validTime(r.updated_at) || !validTime(r.deadline_at) ||
35
+ !Array.isArray(r.pending_interactions) || !Array.isArray(r.notifications))
36
+ throw new Error("Invalid Codex native task record");
37
+ }
38
+ function assertTaskAnchor(r) {
39
+ assertNativeIdentity(r.native_id, r.target);
40
+ if (r.native_turn_id !== undefined && !nonblank(r.native_turn_id) ||
41
+ ["watching", "completed", "interrupted"].includes(r.status) && !r.native_turn_id)
42
+ throw new Error("Codex native task requires exact turn anchor");
43
+ }
44
+ function assertTaskIntent(r) {
45
+ if (r.kind !== "send") {
46
+ if (r.send_intent || !r.native_turn_id)
47
+ throw new Error("Invalid Codex native Watch anchor");
48
+ return;
49
+ }
50
+ const i = r.send_intent;
51
+ if (!i || !nonblank(i.message_id) || !nonblank(i.client_user_message_id) || !nonblank(i.text) ||
52
+ !Array.isArray(i.baseline_turn_ids) || i.baseline_turn_ids.some(id => !nonblank(id)) ||
53
+ !validTime(i.dispatched_at) || !["reserved", "uncertain", "accepted", "not_sent"].includes(i.state) ||
54
+ i.receipt_turn_id !== undefined && !nonblank(i.receipt_turn_id) ||
55
+ (i.state === "accepted") !== Boolean(r.native_turn_id))
56
+ throw new Error("Invalid Codex native send intent");
57
+ }
58
+ function assertTaskInteractions(r) {
59
+ const interactionIds = new Set();
60
+ for (const i of r.pending_interactions) {
61
+ assertPersistedNativeInteraction(i, r.target, r.native_turn_id);
62
+ if (interactionIds.has(i.id))
63
+ throw new Error("Duplicate native interaction");
64
+ interactionIds.add(i.id);
65
+ }
66
+ }
67
+ function assertTaskNotifications(r) {
68
+ if (r.callback_route && parseCallbackRoute(r.callback_route).controller_session_id !== r.controller_session) {
69
+ throw new Error("Codex native callback controller mismatch");
70
+ }
71
+ const notificationIds = new Set();
72
+ for (const n of r.notifications) {
73
+ if (!n || !nonblank(n.id) || notificationIds.has(n.id) || !r.callback_route ||
74
+ !["ready", "leased", "retry_wait", "accepted", "failed", "uncertain"].includes(n.status) ||
75
+ !Number.isSafeInteger(n.attempts) || n.attempts < 0)
76
+ throw new Error("Invalid Codex native notification");
77
+ notificationIds.add(n.id);
78
+ const envelope = createCallbackEnvelope({ route: r.callback_route, source: n.envelope.source, event: n.envelope.event });
79
+ if (!isDeepStrictEqual(envelope, n.envelope) || envelope.source.kind !== "codex_native_watch" ||
80
+ envelope.source.watch_id !== r.id || envelope.source.native_id !== r.native_id || envelope.event.id !== n.id) {
81
+ throw new Error("Codex native callback identity mismatch");
82
+ }
83
+ assertNotificationDelivery(n);
84
+ }
85
+ }
86
+ function assertNotificationDelivery(n) {
87
+ if (n.outcome)
88
+ parseCallbackAttemptOutcome(n.outcome);
89
+ if (n.retry_budget_until !== undefined && (!Number.isSafeInteger(n.retry_budget_until) || n.retry_budget_until < 1))
90
+ throw new Error("Invalid native callback retry budget");
91
+ if (n.status === "leased" && (!nonblank(n.attempt_id) || !validTime(n.lease_expires_at)))
92
+ throw new Error("Invalid native callback lease");
93
+ if (n.status === "retry_wait" && (!validTime(n.retry_at) || n.outcome?.disposition !== "retryable_failure"))
94
+ throw new Error("Invalid native callback retry");
95
+ }
96
+ export function assertCodexNativeTaskRecord(value) {
97
+ const record = value;
98
+ assertTaskSchema(record);
99
+ assertBackendRecoveryFields(record);
100
+ assertTaskAnchor(record);
101
+ assertTaskIntent(record);
102
+ assertTaskInteractions(record);
103
+ assertTaskNotifications(record);
104
+ }
105
+ export function createCodexNativeStateStore(storeDir, locks) {
106
+ return createNativeRecordRepository({ storeDir, directory: "codex-native-tasks", prefix: "codex-cli-watch:",
107
+ acquire: locks.acquire, assert: assertCodexNativeTaskRecord,
108
+ assertUpdate: (previous, next) => {
109
+ for (const key of ["id", "watch_id", "native_id", "target", "controller_session", "kind", "created_at", "callback_route"]) {
110
+ if (!isDeepStrictEqual(previous[key], next[key]))
111
+ throw new Error(`Codex native immutable ${key} changed`);
112
+ }
113
+ assertBackendRecoveryUpdate(previous, next);
114
+ for (const before of previous.notifications) {
115
+ const after = next.notifications.find(note => note.id === before.id);
116
+ if (!after || !isDeepStrictEqual(before.envelope, after.envelope) || after.attempts < before.attempts ||
117
+ (after.retry_budget_until ?? 0) < (before.retry_budget_until ?? 0))
118
+ throw new Error("Codex native notification identity or attempts cannot change");
119
+ }
120
+ if (previous.native_turn_id && next.native_turn_id !== previous.native_turn_id)
121
+ throw new Error("Codex native exact turn anchor cannot change");
122
+ if (previous.send_intent) {
123
+ for (const key of ["message_id", "client_user_message_id", "text", "baseline_turn_ids", "dispatched_at"]) {
124
+ if (!isDeepStrictEqual(previous.send_intent[key], next.send_intent?.[key]))
125
+ throw new Error("Codex native send intent cannot change");
126
+ }
127
+ if (previous.send_intent.receipt_turn_id && previous.send_intent.receipt_turn_id !== next.send_intent?.receipt_turn_id)
128
+ throw new Error("Codex native receipt cannot change");
129
+ }
130
+ } });
131
+ }
132
+ //# sourceMappingURL=codex-native-state-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-native-state-store.js","sourceRoot":"","sources":["../../src/codex-native-state-store.ts"],"names":[],"mappings":"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"}