@scotthuang/agent-knock-knock 0.13.17 → 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 (291) hide show
  1. package/CHANGELOG.md +38 -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-async-question-adapter.js +14 -4
  22. package/dist/src/codex-async-question-adapter.js.map +1 -1
  23. package/dist/src/codex-lifecycle-compatibility.d.ts +1 -1
  24. package/dist/src/codex-lifecycle-compatibility.js +9 -3
  25. package/dist/src/codex-lifecycle-compatibility.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 +273 -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 +326 -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 +502 -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/codex-permission-surface.d.ts +1 -1
  75. package/dist/src/codex-permission-surface.js +1 -1
  76. package/dist/src/codex-permission-surface.js.map +1 -1
  77. package/dist/src/codex-terminal-agent-adapter.js +3 -1
  78. package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
  79. package/dist/src/conversation-list.d.ts +12 -0
  80. package/dist/src/conversation-list.js +30 -0
  81. package/dist/src/conversation-list.js.map +1 -0
  82. package/dist/src/conversation-route-dispatch.d.ts +13 -0
  83. package/dist/src/conversation-route-dispatch.js +66 -0
  84. package/dist/src/conversation-route-dispatch.js.map +1 -0
  85. package/dist/src/conversation-route-legacy.d.ts +18 -0
  86. package/dist/src/conversation-route-legacy.js +54 -0
  87. package/dist/src/conversation-route-legacy.js.map +1 -0
  88. package/dist/src/conversation-route-store.d.ts +51 -0
  89. package/dist/src/conversation-route-store.js +126 -0
  90. package/dist/src/conversation-route-store.js.map +1 -0
  91. package/dist/src/conversation-routing-cli-adapter.d.ts +12 -0
  92. package/dist/src/conversation-routing-cli-adapter.js +211 -0
  93. package/dist/src/conversation-routing-cli-adapter.js.map +1 -0
  94. package/dist/src/conversation-routing-commands.d.ts +11 -0
  95. package/dist/src/conversation-routing-commands.js +85 -0
  96. package/dist/src/conversation-routing-commands.js.map +1 -0
  97. package/dist/src/conversation-routing-home.d.ts +26 -0
  98. package/dist/src/conversation-routing-home.js +105 -0
  99. package/dist/src/conversation-routing-home.js.map +1 -0
  100. package/dist/src/conversation-routing-identity.d.ts +40 -0
  101. package/dist/src/conversation-routing-identity.js +174 -0
  102. package/dist/src/conversation-routing-identity.js.map +1 -0
  103. package/dist/src/conversation-runtime-route-store.d.ts +11 -0
  104. package/dist/src/conversation-runtime-route-store.js +118 -0
  105. package/dist/src/conversation-runtime-route-store.js.map +1 -0
  106. package/dist/src/desktop-async-interactions.d.ts +15 -0
  107. package/dist/src/desktop-async-interactions.js +88 -0
  108. package/dist/src/desktop-async-interactions.js.map +1 -0
  109. package/dist/src/desktop-async-state.d.ts +5 -0
  110. package/dist/src/desktop-async-state.js +53 -0
  111. package/dist/src/desktop-async-state.js.map +1 -0
  112. package/dist/src/desktop-cli-adapter.d.ts +7 -0
  113. package/dist/src/desktop-cli-adapter.js +322 -0
  114. package/dist/src/desktop-cli-adapter.js.map +1 -0
  115. package/dist/src/desktop-cli-controls.d.ts +9 -0
  116. package/dist/src/desktop-cli-controls.js +45 -0
  117. package/dist/src/desktop-cli-controls.js.map +1 -0
  118. package/dist/src/desktop-command-presentation.d.ts +2 -0
  119. package/dist/src/desktop-command-presentation.js +31 -0
  120. package/dist/src/desktop-command-presentation.js.map +1 -0
  121. package/dist/src/desktop-control-semantic.d.ts +8 -0
  122. package/dist/src/desktop-control-semantic.js +68 -0
  123. package/dist/src/desktop-control-semantic.js.map +1 -0
  124. package/dist/src/desktop-identity.d.ts +5 -0
  125. package/dist/src/desktop-identity.js +40 -0
  126. package/dist/src/desktop-identity.js.map +1 -0
  127. package/dist/src/desktop-interaction-projection.d.ts +57 -0
  128. package/dist/src/desktop-interaction-projection.js +196 -0
  129. package/dist/src/desktop-interaction-projection.js.map +1 -0
  130. package/dist/src/desktop-interaction-state.d.ts +3 -0
  131. package/dist/src/desktop-interaction-state.js +48 -0
  132. package/dist/src/desktop-interaction-state.js.map +1 -0
  133. package/dist/src/desktop-ipc-async-answer.d.ts +9 -0
  134. package/dist/src/desktop-ipc-async-answer.js +71 -0
  135. package/dist/src/desktop-ipc-async-answer.js.map +1 -0
  136. package/dist/src/desktop-ipc-client.d.ts +47 -0
  137. package/dist/src/desktop-ipc-client.js +400 -0
  138. package/dist/src/desktop-ipc-client.js.map +1 -0
  139. package/dist/src/desktop-ipc-native-operations.d.ts +11 -0
  140. package/dist/src/desktop-ipc-native-operations.js +126 -0
  141. package/dist/src/desktop-ipc-native-operations.js.map +1 -0
  142. package/dist/src/desktop-ipc-transport.d.ts +13 -0
  143. package/dist/src/desktop-ipc-transport.js +123 -0
  144. package/dist/src/desktop-ipc-transport.js.map +1 -0
  145. package/dist/src/desktop-list.d.ts +25 -0
  146. package/dist/src/desktop-list.js +55 -0
  147. package/dist/src/desktop-list.js.map +1 -0
  148. package/dist/src/desktop-metadata-reader.d.ts +30 -0
  149. package/dist/src/desktop-metadata-reader.js +182 -0
  150. package/dist/src/desktop-metadata-reader.js.map +1 -0
  151. package/dist/src/desktop-monitor.d.ts +4 -0
  152. package/dist/src/desktop-monitor.js +101 -0
  153. package/dist/src/desktop-monitor.js.map +1 -0
  154. package/dist/src/desktop-public-projection.d.ts +6 -0
  155. package/dist/src/desktop-public-projection.js +134 -0
  156. package/dist/src/desktop-public-projection.js.map +1 -0
  157. package/dist/src/desktop-request-interactions.d.ts +14 -0
  158. package/dist/src/desktop-request-interactions.js +144 -0
  159. package/dist/src/desktop-request-interactions.js.map +1 -0
  160. package/dist/src/desktop-response-dispatch.d.ts +14 -0
  161. package/dist/src/desktop-response-dispatch.js +19 -0
  162. package/dist/src/desktop-response-dispatch.js.map +1 -0
  163. package/dist/src/desktop-response-evidence.d.ts +4 -0
  164. package/dist/src/desktop-response-evidence.js +19 -0
  165. package/dist/src/desktop-response-evidence.js.map +1 -0
  166. package/dist/src/desktop-response-service.d.ts +11 -0
  167. package/dist/src/desktop-response-service.js +188 -0
  168. package/dist/src/desktop-response-service.js.map +1 -0
  169. package/dist/src/desktop-response-store.d.ts +35 -0
  170. package/dist/src/desktop-response-store.js +58 -0
  171. package/dist/src/desktop-response-store.js.map +1 -0
  172. package/dist/src/desktop-response-types.d.ts +20 -0
  173. package/dist/src/desktop-response-types.js +2 -0
  174. package/dist/src/desktop-response-types.js.map +1 -0
  175. package/dist/src/desktop-response-value.d.ts +6 -0
  176. package/dist/src/desktop-response-value.js +31 -0
  177. package/dist/src/desktop-response-value.js.map +1 -0
  178. package/dist/src/desktop-runtime.d.ts +153 -0
  179. package/dist/src/desktop-runtime.js +88 -0
  180. package/dist/src/desktop-runtime.js.map +1 -0
  181. package/dist/src/desktop-semantic.d.ts +21 -0
  182. package/dist/src/desktop-semantic.js +140 -0
  183. package/dist/src/desktop-semantic.js.map +1 -0
  184. package/dist/src/desktop-session-catalog.d.ts +68 -0
  185. package/dist/src/desktop-session-catalog.js +225 -0
  186. package/dist/src/desktop-session-catalog.js.map +1 -0
  187. package/dist/src/desktop-session-controls.d.ts +145 -0
  188. package/dist/src/desktop-session-controls.js +176 -0
  189. package/dist/src/desktop-session-controls.js.map +1 -0
  190. package/dist/src/desktop-sidebar-metadata.d.ts +27 -0
  191. package/dist/src/desktop-sidebar-metadata.js +83 -0
  192. package/dist/src/desktop-sidebar-metadata.js.map +1 -0
  193. package/dist/src/desktop-sidebar-projects.d.ts +10 -0
  194. package/dist/src/desktop-sidebar-projects.js +31 -0
  195. package/dist/src/desktop-sidebar-projects.js.map +1 -0
  196. package/dist/src/desktop-sidebar-selection.d.ts +28 -0
  197. package/dist/src/desktop-sidebar-selection.js +85 -0
  198. package/dist/src/desktop-sidebar-selection.js.map +1 -0
  199. package/dist/src/desktop-snapshot-details.d.ts +4 -0
  200. package/dist/src/desktop-snapshot-details.js +116 -0
  201. package/dist/src/desktop-snapshot-details.js.map +1 -0
  202. package/dist/src/desktop-snapshot.d.ts +11 -0
  203. package/dist/src/desktop-snapshot.js +276 -0
  204. package/dist/src/desktop-snapshot.js.map +1 -0
  205. package/dist/src/desktop-state-store.d.ts +72 -0
  206. package/dist/src/desktop-state-store.js +269 -0
  207. package/dist/src/desktop-state-store.js.map +1 -0
  208. package/dist/src/desktop-task-interactions.d.ts +10 -0
  209. package/dist/src/desktop-task-interactions.js +93 -0
  210. package/dist/src/desktop-task-interactions.js.map +1 -0
  211. package/dist/src/desktop-task-recovery.d.ts +38 -0
  212. package/dist/src/desktop-task-recovery.js +171 -0
  213. package/dist/src/desktop-task-recovery.js.map +1 -0
  214. package/dist/src/desktop-task-service.d.ts +54 -0
  215. package/dist/src/desktop-task-service.js +441 -0
  216. package/dist/src/desktop-task-service.js.map +1 -0
  217. package/dist/src/desktop-types.d.ts +281 -0
  218. package/dist/src/desktop-types.js +13 -0
  219. package/dist/src/desktop-types.js.map +1 -0
  220. package/dist/src/host-monitor-reconciliation.js +36 -4
  221. package/dist/src/host-monitor-reconciliation.js.map +1 -1
  222. package/dist/src/host-profile-runtime.js +7 -3
  223. package/dist/src/host-profile-runtime.js.map +1 -1
  224. package/dist/src/local-codex-cli-adapter.d.ts +7 -0
  225. package/dist/src/local-codex-cli-adapter.js +13 -0
  226. package/dist/src/local-codex-cli-adapter.js.map +1 -0
  227. package/dist/src/openclaw-callback-transport.js +2 -1
  228. package/dist/src/openclaw-callback-transport.js.map +1 -1
  229. package/dist/src/semantic-conversation-target.d.ts +4 -0
  230. package/dist/src/semantic-conversation-target.js +20 -0
  231. package/dist/src/semantic-conversation-target.js.map +1 -0
  232. package/dist/src/semantic-permission-control.js +47 -9
  233. package/dist/src/semantic-permission-control.js.map +1 -1
  234. package/dist/src/semantic-private-authority-offers.d.ts +1 -1
  235. package/dist/src/semantic-private-authority-offers.js +3 -1
  236. package/dist/src/semantic-private-authority-offers.js.map +1 -1
  237. package/dist/src/semantic-tool-command-helpers.d.ts +6 -0
  238. package/dist/src/semantic-tool-command-helpers.js +199 -78
  239. package/dist/src/semantic-tool-command-helpers.js.map +1 -1
  240. package/dist/src/semantic-tool-descriptions.d.ts +2 -1
  241. package/dist/src/semantic-tool-descriptions.js +81 -35
  242. package/dist/src/semantic-tool-descriptions.js.map +1 -1
  243. package/dist/src/semantic-tool-list-projection.js +66 -2
  244. package/dist/src/semantic-tool-list-projection.js.map +1 -1
  245. package/dist/src/semantic-tool-presentation.js +76 -7
  246. package/dist/src/semantic-tool-presentation.js.map +1 -1
  247. package/dist/src/semantic-tool-runtime.js +129 -29
  248. package/dist/src/semantic-tool-runtime.js.map +1 -1
  249. package/dist/src/semantic-tool-schemas.d.ts +410 -27
  250. package/dist/src/semantic-tool-schemas.js +176 -88
  251. package/dist/src/semantic-tool-schemas.js.map +1 -1
  252. package/dist/src/terminal-action-contracts.js +10 -6
  253. package/dist/src/terminal-action-contracts.js.map +1 -1
  254. package/dist/src/terminal-list-cli-adapter.d.ts +1 -0
  255. package/dist/src/terminal-list-cli-adapter.js +6 -3
  256. package/dist/src/terminal-list-cli-adapter.js.map +1 -1
  257. package/dist/src/terminal-model-control-profile.d.ts +3 -1
  258. package/dist/src/terminal-model-control-profile.js +15 -7
  259. package/dist/src/terminal-model-control-profile.js.map +1 -1
  260. package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
  261. package/dist/src/terminal-native-inspection-profile.js +4 -0
  262. package/dist/src/terminal-native-inspection-profile.js.map +1 -1
  263. package/dist/src/terminal-permission-control-list-projection.d.ts +1 -1
  264. package/dist/src/terminal-permission-control.js +5 -1
  265. package/dist/src/terminal-permission-control.js.map +1 -1
  266. package/dist/src/terminal-questionnaire-adapter.js +5 -2
  267. package/dist/src/terminal-questionnaire-adapter.js.map +1 -1
  268. package/dist/src/terminal-user-send-intent.d.ts +2 -0
  269. package/dist/src/terminal-user-send-intent.js +11 -3
  270. package/dist/src/terminal-user-send-intent.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 +89 -0
  277. package/docs/bidirectional-agent-protocol.md +260 -0
  278. package/docs/codex-0.160.0-compatibility.md +126 -0
  279. package/docs/codex-cli-native-compatibility.md +246 -0
  280. package/docs/codex-desktop-compatibility.md +414 -0
  281. package/docs/codex-permissions.md +12 -1
  282. package/docs/openclaw-operations.md +281 -0
  283. package/docs/openclaw-session-turn-delivery-requirement.md +45 -0
  284. package/docs/operator-guide.md +543 -0
  285. package/docs/storage-and-logging.md +91 -0
  286. package/docs/test-performance-issue-108.md +80 -0
  287. package/docs/test-performance-issue-120.md +226 -0
  288. package/docs/testing.md +628 -0
  289. package/openclaw.plugin.json +7 -3
  290. package/package.json +6 -12
  291. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +69 -18
@@ -0,0 +1,326 @@
1
+ import { CodexNativeRpc } from "./codex-native-client-rpc.js";
2
+ import { buildNativeAsyncReply, nativeResponse, parseNativeRequest, hydrateNativeFileApproval } from "./codex-native-client-interactions.js";
3
+ import { nativeId, nativeRecord, nativeInvalid, nativePage, parseNativeThread, parseNativeTurn, parseNativeItem, isMainCodexCliThread, nativeAsyncInteractions, parseNativePermissions } from "./codex-native-snapshot.js";
4
+ import { CodexNativeError } from "./codex-native-types.js";
5
+ const MAX_PAGES = 100;
6
+ const PRESETS = { "read-only": [":read-only", "on-request"], default: [":workspace", "on-request"],
7
+ "full-access": [":danger-full-access", "never"] };
8
+ /** Native shared-daemon connection. No terminal ownership inference and no historical thread loading. */
9
+ export class CodexNativeClient {
10
+ rpc;
11
+ metadata;
12
+ subscribed = new Set();
13
+ requests = new Map();
14
+ answered = new Set();
15
+ settings = new Map();
16
+ liveFileChanges = new Map();
17
+ constructor(rpc) {
18
+ this.rpc = rpc;
19
+ this.metadata = rpc.metadata;
20
+ rpc.onEvent(raw => this.receive(raw));
21
+ }
22
+ static async connect(options) {
23
+ return new CodexNativeClient(await CodexNativeRpc.connect(options));
24
+ }
25
+ close() { this.rpc.close(); this.subscribed.clear(); this.requests.clear(); this.liveFileChanges.clear(); }
26
+ async listLoaded() {
27
+ const ids = [], cursors = new Set();
28
+ let cursor;
29
+ for (let pageIndex = 0; pageIndex < MAX_PAGES; pageIndex++) {
30
+ const page = nativePage(await this.rpc.call("thread/loaded/list", { limit: 100, ...(cursor ? { cursor } : {}) }), value => nativeId(value));
31
+ for (const id of page.data) {
32
+ if (ids.includes(id))
33
+ nativeInvalid("Duplicate loaded thread identity");
34
+ ids.push(id);
35
+ }
36
+ if (page.nextCursor === null)
37
+ return ids;
38
+ cursor = nextCursor(page.nextCursor, cursors);
39
+ }
40
+ throw new CodexNativeError("pagination_limit", "Loaded thread list exceeds bounded pagination");
41
+ }
42
+ async readThread(threadId) {
43
+ nativeId(threadId);
44
+ const result = nativeRecord(await this.rpc.call("thread/read", { threadId, includeTurns: false }));
45
+ return parseNativeThread(result.thread, threadId);
46
+ }
47
+ async discover() {
48
+ const rows = [];
49
+ for (const id of await this.listLoaded()) {
50
+ const thread = await this.readThread(id);
51
+ if (thread.status.type !== "notLoaded" && isMainCodexCliThread(thread))
52
+ rows.push(thread);
53
+ }
54
+ return rows;
55
+ }
56
+ async readSnapshot(threadId, exactTurnId) {
57
+ nativeId(threadId);
58
+ if (exactTurnId !== undefined)
59
+ nativeId(exactTurnId);
60
+ const thread = await this.readThread(threadId);
61
+ const loaded = thread.status.type !== "notLoaded" && (await this.listLoaded()).includes(threadId);
62
+ const turns = await this.readTurns(thread, exactTurnId);
63
+ const latestTurnId = turns[0]?.id ?? null;
64
+ const selectedTurn = exactTurnId ? turns.find(t => t.id === exactTurnId) : turns[0];
65
+ const wanted = new Set([latestTurnId, selectedTurn?.id]);
66
+ for (const turn of turns)
67
+ if (wanted.has(turn.id) && !turn.itemsComplete) {
68
+ turn.items = await this.readItems(threadId, turn.id);
69
+ turn.itemsComplete = true;
70
+ }
71
+ const liveIds = new Set(turns.filter(t => t.status === "inProgress").map(t => t.id));
72
+ const pendingInteractions = [...this.getInteractions(threadId).filter(i => liveIds.has(i.turnId)).map(i => hydrateNativeFileApproval(i, turns, this.liveFileChanges.get(itemKey(i.threadId, i.turnId, i.itemId))?.item)),
73
+ ...turns.flatMap(t => nativeAsyncInteractions(threadId, t))];
74
+ return { threadId, thread, loaded, latestTurnId, turns, ...(selectedTurn ? { selectedTurn } : {}), pendingInteractions,
75
+ canSend: loaded && isMainCodexCliThread(thread) && thread.status.type === "idle"
76
+ && !turns.some(t => t.status === "inProgress") && pendingInteractions.length === 0 };
77
+ }
78
+ async subscribe(threadId) {
79
+ await this.requireLoaded(threadId);
80
+ if (this.subscribed.has(threadId))
81
+ return;
82
+ this.subscribed.add(threadId);
83
+ try {
84
+ await this.resume(threadId);
85
+ }
86
+ catch (error) {
87
+ this.subscribed.delete(threadId);
88
+ this.clearRequests(threadId);
89
+ throw error;
90
+ }
91
+ }
92
+ getInteractions(threadId) {
93
+ return [...this.requests.values()].filter(i => i.threadId === threadId).map(i => structuredClone(i));
94
+ }
95
+ async start(threadId, options) {
96
+ this.validateInput(options.text, options.clientUserMessageId);
97
+ await this.requireLoaded(threadId);
98
+ const snapshot = await this.readSnapshot(threadId);
99
+ if (!snapshot.canSend)
100
+ throw new CodexNativeError("thread_not_idle", "Codex native thread is not idle");
101
+ if (snapshot.turns.some(t => t.items.some(i => i.clientId === options.clientUserMessageId))) {
102
+ throw new CodexNativeError("duplicate_submission", "Native submission ID already exists");
103
+ }
104
+ await options.beforeDispatch?.(snapshot);
105
+ const result = await this.rpc.call("turn/start", { threadId, clientUserMessageId: options.clientUserMessageId,
106
+ input: [{ type: "text", text: options.text, text_elements: [] }] }, true);
107
+ try {
108
+ const turn = parseNativeTurn(nativeRecord(result).turn);
109
+ if (snapshot.turns.some(t => t.id === turn.id))
110
+ throw new CodexNativeError("thread_not_idle", "Codex accepted input into an existing turn", "accepted", undefined, turn.id);
111
+ return { turnId: turn.id, clientUserMessageId: options.clientUserMessageId };
112
+ }
113
+ catch (error) {
114
+ if (error instanceof CodexNativeError && error.dispatchState === "accepted")
115
+ throw error;
116
+ throw new CodexNativeError("invalid_response", "Invalid native send receipt; do not resend", "unknown");
117
+ }
118
+ }
119
+ async respond(interaction, response) {
120
+ await this.requireLoaded(interaction.threadId);
121
+ await this.subscribe(interaction.threadId);
122
+ const current = this.getInteractions(interaction.threadId).find(i => i.id === interaction.id);
123
+ if (!current || current.requestId === undefined || current.turnId !== interaction.turnId || current.itemId !== interaction.itemId
124
+ || this.answered.has(current.id))
125
+ throw new CodexNativeError("stale_interaction", "Native request is no longer pending");
126
+ const snapshot = await this.readSnapshot(interaction.threadId, interaction.turnId);
127
+ if (snapshot.selectedTurn?.status !== "inProgress" || !this.requests.has(requestKey(current.threadId, current.requestId))) {
128
+ throw new CodexNativeError("stale_interaction", "Native request no longer belongs to an active turn");
129
+ }
130
+ if (current.kind === "file_approval") {
131
+ const hydrated = snapshot.pendingInteractions.find(i => i.id === current.id);
132
+ // Pending file items may not be materialized until approved. Preview availability is not native authority.
133
+ if (interaction.changes && hydrated?.changes && JSON.stringify(interaction.changes) !== JSON.stringify(hydrated.changes)) {
134
+ throw new CodexNativeError("stale_interaction", "Native file approval changes no longer match the displayed request");
135
+ }
136
+ }
137
+ const result = nativeResponse(current, response);
138
+ this.answered.add(current.id);
139
+ this.rpc.respond(current.requestId, result);
140
+ return { dispatchState: "sent" };
141
+ }
142
+ async answerAsync(interaction, options) {
143
+ const text = buildNativeAsyncReply(interaction, options.answer);
144
+ this.validateInput(text, options.clientUserMessageId);
145
+ await this.requireLoaded(interaction.threadId);
146
+ const snapshot = await this.readSnapshot(interaction.threadId, interaction.turnId);
147
+ const current = snapshot.pendingInteractions.find(i => i.id === interaction.id && i.kind === "async_question");
148
+ if (!current || snapshot.selectedTurn?.status !== "inProgress" || this.answered.has(current.id)) {
149
+ throw new CodexNativeError("stale_interaction", "Native asynchronous question is no longer pending");
150
+ }
151
+ this.answered.add(current.id);
152
+ const raw = await this.rpc.call("turn/steer", { threadId: interaction.threadId, expectedTurnId: interaction.turnId,
153
+ clientUserMessageId: options.clientUserMessageId, input: [{ type: "text", text, textElements: [] }] }, true);
154
+ if (!raw || typeof raw !== "object" || raw.turnId !== interaction.turnId) {
155
+ throw new CodexNativeError("invalid_response", "Native answer returned a different turn", "unknown");
156
+ }
157
+ return { turnId: interaction.turnId, clientUserMessageId: options.clientUserMessageId };
158
+ }
159
+ async readPermissions(threadId) {
160
+ await this.requireLoaded(threadId);
161
+ await this.subscribe(threadId);
162
+ return parseNativePermissions(await this.resume(threadId));
163
+ }
164
+ async updatePermissions(threadId, preset) {
165
+ if (!Object.hasOwn(PRESETS, preset))
166
+ throw new CodexNativeError("invalid_argument", "Unknown permission preset");
167
+ await this.requireLoaded(threadId);
168
+ await this.subscribe(threadId);
169
+ const [permissions, approvalPolicy] = PRESETS[preset];
170
+ this.settings.delete(threadId);
171
+ await this.rpc.call("thread/settings/update", { threadId, permissions, approvalPolicy, approvalsReviewer: "user" }, true);
172
+ // The update acknowledgement only queues settings. Check an event or readback, including a no-op update.
173
+ const deadline = Date.now() + this.rpc.timeoutMs;
174
+ try {
175
+ do {
176
+ const event = this.settings.get(threadId);
177
+ if (event) {
178
+ const current = parseNativePermissions(event);
179
+ if (current.preset === preset && current.approvalsReviewer === "user")
180
+ return current;
181
+ }
182
+ const current = await this.readPermissions(threadId);
183
+ if (current.preset === preset && current.approvalsReviewer === "user")
184
+ return current;
185
+ await new Promise(resolve => setTimeout(resolve, Math.min(100, this.rpc.timeoutMs)));
186
+ } while (Date.now() < deadline);
187
+ }
188
+ catch (error) {
189
+ throw new CodexNativeError(error instanceof CodexNativeError ? error.code : "invalid_response", "Native permission update confirmation failed", "unknown");
190
+ }
191
+ throw new CodexNativeError("timeout", "Native permission update was not confirmed", "unknown");
192
+ }
193
+ async requireLoaded(threadId) {
194
+ nativeId(threadId);
195
+ if (!(await this.listLoaded()).includes(threadId))
196
+ throw new CodexNativeError("thread_not_loaded", "Codex thread is not loaded in this backend");
197
+ const thread = await this.readThread(threadId);
198
+ if (thread.status.type === "notLoaded")
199
+ throw new CodexNativeError("thread_not_loaded", "Codex thread is no longer loaded");
200
+ if (!isMainCodexCliThread(thread))
201
+ throw new CodexNativeError("unsupported_thread", "Target is not a main interactive Codex CLI thread");
202
+ return thread;
203
+ }
204
+ async resume(threadId) {
205
+ const result = nativeRecord(await this.rpc.call("thread/resume", { threadId, excludeTurns: true }, true));
206
+ parseNativeThread(result.thread, threadId);
207
+ return result;
208
+ }
209
+ async readTurns(thread, exactTurnId) {
210
+ if (thread.historyMode === "legacy") {
211
+ const result = nativeRecord(await this.rpc.call("thread/read", { threadId: thread.id, includeTurns: true }));
212
+ const read = parseNativeThread(result.thread, thread.id);
213
+ return read.turns.map(t => parseNativeTurn({ ...t, itemsView: "full" })).reverse();
214
+ }
215
+ const turns = [], cursors = new Set();
216
+ let cursor;
217
+ for (let index = 0; index < MAX_PAGES; index++) {
218
+ let page;
219
+ try {
220
+ page = nativePage(await this.rpc.call("thread/turns/list", { threadId: thread.id, limit: 100,
221
+ sortDirection: "desc", itemsView: "notLoaded", ...(cursor ? { cursor } : {}) }), parseNativeTurn);
222
+ }
223
+ catch (error) {
224
+ if (index === 0 && thread.status.type === "idle" && error instanceof CodexNativeError && error.code === "unmaterialized_thread")
225
+ return [];
226
+ throw error;
227
+ }
228
+ for (const turn of page.data) {
229
+ if (turns.some(t => t.id === turn.id))
230
+ nativeInvalid("Duplicate native turn identity");
231
+ turns.push(turn);
232
+ }
233
+ if (!exactTurnId || turns.some(t => t.id === exactTurnId) || page.nextCursor === null)
234
+ return turns;
235
+ cursor = nextCursor(page.nextCursor, cursors);
236
+ }
237
+ throw new CodexNativeError("pagination_limit", "Exact native task exceeds bounded history lookup");
238
+ }
239
+ async readItems(threadId, turnId) {
240
+ const items = [], cursors = new Set();
241
+ let cursor;
242
+ for (let index = 0; index < MAX_PAGES; index++) {
243
+ const page = nativePage(await this.rpc.call("thread/items/list", { threadId, turnId, limit: 100, sortDirection: "asc",
244
+ ...(cursor ? { cursor } : {}) }), raw => {
245
+ const entry = nativeRecord(raw);
246
+ if (entry.turnId !== turnId)
247
+ nativeInvalid("Native history crossed the exact turn");
248
+ return parseNativeItem(entry.item);
249
+ });
250
+ for (const item of page.data) {
251
+ if (items.some(i => i.id === item.id))
252
+ nativeInvalid("Duplicate native task item");
253
+ items.push(item);
254
+ }
255
+ if (page.nextCursor === null)
256
+ return items;
257
+ cursor = nextCursor(page.nextCursor, cursors);
258
+ }
259
+ throw new CodexNativeError("pagination_limit", "Exact native task items exceed bounded pagination");
260
+ }
261
+ receive(raw) {
262
+ if (!raw.params || typeof raw.params !== "object")
263
+ return;
264
+ const p = nativeRecord(raw.params);
265
+ if (typeof p.threadId !== "string" || !this.subscribed.has(p.threadId))
266
+ return;
267
+ if (this.receiveItemEvent(raw.method, p))
268
+ return;
269
+ if (raw.method === "serverRequest/resolved" && (typeof p.requestId === "string" || typeof p.requestId === "number")) {
270
+ this.requests.delete(requestKey(p.threadId, p.requestId));
271
+ return;
272
+ }
273
+ if (raw.method === "thread/settings/updated") {
274
+ this.settings.set(p.threadId, p.threadSettings);
275
+ return;
276
+ }
277
+ if (raw.id === undefined)
278
+ return;
279
+ const interaction = parseNativeRequest(raw);
280
+ if (interaction?.requestId !== undefined) {
281
+ // Replaying one logical request may allocate a new connection-local request ID.
282
+ for (const [key, previous] of this.requests)
283
+ if (previous.id === interaction.id)
284
+ this.requests.delete(key);
285
+ this.requests.set(requestKey(interaction.threadId, interaction.requestId), interaction);
286
+ }
287
+ }
288
+ receiveItemEvent(method, p) {
289
+ if (method === "turn/completed") {
290
+ const turnId = nativeRecord(p.turn).id;
291
+ for (const [key, entry] of this.liveFileChanges)
292
+ if (entry.threadId === p.threadId && entry.turnId === turnId)
293
+ this.liveFileChanges.delete(key);
294
+ return true;
295
+ }
296
+ if (method !== "item/started" && method !== "item/completed")
297
+ return false;
298
+ const rawItem = nativeRecord(p.item);
299
+ if (rawItem.type !== "fileChange")
300
+ return true;
301
+ const threadId = nativeId(p.threadId), turnId = nativeId(p.turnId), item = parseNativeItem(rawItem);
302
+ this.liveFileChanges.set(itemKey(threadId, turnId, item.id), { threadId, turnId, item });
303
+ if (this.liveFileChanges.size > 2000)
304
+ this.liveFileChanges.delete(this.liveFileChanges.keys().next().value);
305
+ return true;
306
+ }
307
+ clearRequests(threadId) {
308
+ for (const [key, value] of this.requests)
309
+ if (value.threadId === threadId)
310
+ this.requests.delete(key);
311
+ }
312
+ validateInput(text, clientId) {
313
+ nativeId(clientId);
314
+ if (typeof text !== "string" || !text.trim() || text.length > 1_000_000)
315
+ throw new CodexNativeError("invalid_argument", "Invalid native task input");
316
+ }
317
+ }
318
+ function nextCursor(cursor, seen) {
319
+ if (seen.has(cursor))
320
+ nativeInvalid("Codex native pagination cursor repeated");
321
+ seen.add(cursor);
322
+ return cursor;
323
+ }
324
+ function requestKey(threadId, requestId) { return JSON.stringify([threadId, requestId]); }
325
+ function itemKey(threadId, turnId, itemId) { return JSON.stringify([threadId, turnId, itemId]); }
326
+ //# sourceMappingURL=codex-native-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-native-client.js","sourceRoot":"","sources":["../../src/codex-native-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAC7I,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAC7G,oBAAoB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAEiE,MAAM,yBAAyB,CAAC;AAE1H,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,OAAO,GAAG,EAAE,WAAW,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;IAChG,aAAa,EAAE,CAAC,qBAAqB,EAAE,OAAO,CAAC,EAAW,CAAC;AAE7D,yGAAyG;AACzG,MAAM,OAAO,iBAAiB;IAOS,GAAG;IAN/B,QAAQ,CAAsB;IAC/B,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAChD,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7B,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtC,eAAe,GAAG,IAAI,GAAG,EAAwF,CAAC;IAC1H,YAAqC,GAAmB;mBAAnB,GAAG;QACtC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC7B,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAiC;QACpD,OAAO,IAAI,iBAAiB,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,KAAW,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEjH,KAAK,CAAC,UAAU;QACd,MAAM,GAAG,GAAa,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAAC,IAAI,MAA0B,CAAC;QACtF,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5I,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAAE,aAAa,CAAC,kCAAkC,CAAC,CAAC;gBAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;YACtH,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;gBAAE,OAAO,GAAG,CAAC;YACzC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,+CAA+C,CAAC,CAAC;IAClG,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACnG,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IACD,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,GAAwB,EAAE,CAAC;QACrC,KAAK,MAAM,EAAE,IAAI,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,oBAAoB,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,WAAoB;QACvD,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAAC,IAAI,WAAW,KAAK,SAAS;YAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAClG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;QAC1C,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzE,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAClF,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACxG,yBAAyB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7G,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,mBAAmB;YACpH,OAAO,EAAE,MAAM,IAAI,oBAAoB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;mBAC3E,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC3F,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,QAAgB;QAC9B,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC;YAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QACpC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;IAChG,CAAC;IACD,eAAe,CAAC,QAAgB;QAC9B,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACvG,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,OACuC;QACnE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAAC;QACxG,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC;YAC5F,MAAM,IAAI,gBAAgB,CAAC,sBAAsB,EAAE,qCAAqC,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAC3G,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAC1F,4CAA4C,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAChF,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,gBAAgB,IAAI,KAAK,CAAC,aAAa,KAAK,UAAU;gBAAE,MAAM,KAAK,CAAC;YACzF,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,WAA8B,EAAE,QAAmC;QAC/E,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;eAC5H,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,qCAAqC,CAAC,CAAC;QAC3H,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACnF,IAAI,QAAQ,CAAC,YAAY,EAAE,MAAM,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC1H,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,oDAAoD,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7E,2GAA2G;YAC3G,IAAI,WAAW,CAAC,OAAO,IAAI,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzH,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,oEAAoE,CAAC,CAAC;YACxH,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,WAA8B,EAAE,OAAwD;QACxG,MAAM,IAAI,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACvH,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;QAC/G,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAChG,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,mDAAmD,CAAC,CAAC;QACvG,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAC,MAAM;YAChH,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/G,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAK,GAA+B,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;YACtG,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,yCAAyC,EAAE,SAAS,CAAC,CAAC;QACvG,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAC1F,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnE,OAAO,sBAAsB,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,CAAC,iBAAiB,CAAC,QAAgB,EAAE,MAAmC;QAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;YAAE,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,CAAC;QACjH,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtF,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1H,yGAAyG;QACzG,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QACjD,IAAI,CAAC;YACH,GAAG,CAAC;gBACF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC1C,IAAI,KAAK,EAAE,CAAC;oBAAC,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;oBAAC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,iBAAiB,KAAK,MAAM;wBAAE,OAAO,OAAO,CAAC;gBAAC,CAAC;gBACpJ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBACrD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,iBAAiB,KAAK,MAAM;oBAAE,OAAO,OAAO,CAAC;gBACtF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACvF,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,gBAAgB,CAAC,KAAK,YAAY,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,EAAE,8CAA8C,EAAE,SAAS,CAAC,CAAC;QAC7J,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,SAAS,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAC;IACjG,CAAC;IACO,KAAK,CAAC,aAAa,CAAC,QAAgB;QAC1C,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,4CAA4C,CAAC,CAAC;QACjJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW;YAAE,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,kCAAkC,CAAC,CAAC;QAC5H,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,gBAAgB,CAAC,oBAAoB,EAAE,mDAAmD,CAAC,CAAC;QACzI,OAAO,MAAM,CAAC;IAChB,CAAC;IACO,KAAK,CAAC,MAAM,CAAC,QAAgB;QACnC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1G,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAAC,OAAO,MAAM,CAAC;IAC5D,CAAC;IACO,KAAK,CAAC,SAAS,CAAC,MAAyB,EAAE,WAAoB;QACrE,IAAI,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7G,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACrF,CAAC;QACD,MAAM,KAAK,GAAsB,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAAC,IAAI,MAA0B,CAAC;QACjG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;YAC/C,IAAI,IAAoD,CAAC;YACzD,IAAI,CAAC;gBAAC,IAAI,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG;oBAChG,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;YAAC,CAAC;YACtG,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,YAAY,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB;oBAAE,OAAO,EAAE,CAAC;gBAC3I,MAAM,KAAK,CAAC;YACd,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;oBAAE,aAAa,CAAC,gCAAgC,CAAC,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3G,CAAC;YACD,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACpG,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,kDAAkD,CAAC,CAAC;IACrG,CAAC;IACO,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,MAAc;QACtD,MAAM,KAAK,GAA6B,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAAC,IAAI,MAA0B,CAAC;QACxG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK;gBACnH,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;gBACxC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBAAC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;oBAAE,aAAa,CAAC,uCAAuC,CAAC,CAAC;gBACrH,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;oBAAE,aAAa,CAAC,4BAA4B,CAAC,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YACvI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YAC3C,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,mDAAmD,CAAC,CAAC;IACtG,CAAC;IACO,OAAO,CAAC,GAA4B;QAC1C,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO;QAC1D,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO;QAC/E,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAAE,OAAO;QACjD,IAAI,GAAG,CAAC,MAAM,KAAK,wBAAwB,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,EAAE,CAAC;YACpH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAAC,OAAO;QACpE,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,yBAAyB,EAAE,CAAC;YAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC1G,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS;YAAE,OAAO;QACjC,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,WAAW,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;YACzC,gFAAgF;YAChF,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,QAAQ,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE;oBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3G,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IACO,gBAAgB,CAAC,MAAe,EAAE,CAA0B;QAClE,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe;gBAAE,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;oBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChJ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,gBAAgB;YAAE,OAAO,KAAK,CAAC;QAC3E,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACpG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzF,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI;YAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAC;QAC7G,OAAO,IAAI,CAAC;IACd,CAAC;IACO,aAAa,CAAC,QAAgB;QACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;gBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvG,CAAC;IACO,aAAa,CAAC,IAAY,EAAE,QAAgB;QAClD,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS;YAAE,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,CAAC;IACvJ,CAAC;CACF;AACD,SAAS,UAAU,CAAC,MAAc,EAAE,IAAiB;IACnD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,aAAa,CAAC,yCAAyC,CAAC,CAAC;IAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,OAAO,MAAM,CAAC;AAClH,CAAC;AACD,SAAS,UAAU,CAAC,QAAgB,EAAE,SAA0B,IAAY,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3H,SAAS,OAAO,CAAC,QAAgB,EAAE,MAAc,EAAE,MAAc,IAAY,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CodexNativeIdentity } from "./codex-native-types.js";
2
+ export declare function createCodexNativeConversationId(identity: CodexNativeIdentity): string;
3
+ export declare function parseCodexNativeConversationId(value: string): CodexNativeIdentity;
4
+ export declare function isCodexNativeConversationId(value: unknown): value is string;
5
+ /** Both send-derived digest IDs and externally watched task UUIDs are durable Watch IDs. */
6
+ export declare function isCodexNativeWatchId(value: unknown): value is string;
@@ -0,0 +1,42 @@
1
+ import path from "node:path";
2
+ const PREFIX = "codex-cli:v1:";
3
+ export function createCodexNativeConversationId(identity) {
4
+ const { codexHome, threadId } = validate(identity);
5
+ return PREFIX + Buffer.from(JSON.stringify([codexHome, threadId])).toString("base64url");
6
+ }
7
+ export function parseCodexNativeConversationId(value) {
8
+ if (!isCodexNativeConversationId(value) || value.length > 4096)
9
+ throw new Error("Invalid Codex CLI conversation ID");
10
+ const encoded = value.slice(PREFIX.length);
11
+ if (!/^[A-Za-z0-9_-]+$/u.test(encoded))
12
+ throw new Error("Invalid Codex CLI conversation encoding");
13
+ let tuple;
14
+ try {
15
+ tuple = JSON.parse(Buffer.from(encoded, "base64url").toString("utf8"));
16
+ }
17
+ catch {
18
+ throw new Error("Invalid Codex CLI conversation payload");
19
+ }
20
+ if (!Array.isArray(tuple) || tuple.length !== 2)
21
+ throw new Error("Invalid Codex CLI conversation payload");
22
+ const identity = validate({ codexHome: tuple[0], threadId: tuple[1] });
23
+ if (createCodexNativeConversationId(identity) !== value)
24
+ throw new Error("Non-canonical Codex CLI conversation ID");
25
+ return identity;
26
+ }
27
+ export function isCodexNativeConversationId(value) {
28
+ return typeof value === "string" && value.startsWith(PREFIX);
29
+ }
30
+ /** Both send-derived digest IDs and externally watched task UUIDs are durable Watch IDs. */
31
+ export function isCodexNativeWatchId(value) {
32
+ return typeof value === "string" && /^codex-cli-watch:[A-Za-z0-9_-]{8,128}$/u.test(value);
33
+ }
34
+ function validate(value) {
35
+ if (typeof value.codexHome !== "string" || !path.isAbsolute(value.codexHome)
36
+ || value.codexHome.length > 2048 || /[\u0000-\u001f\u007f]/u.test(value.codexHome)
37
+ || typeof value.threadId !== "string" || !/^[A-Za-z0-9][A-Za-z0-9_-]{1,160}$/u.test(value.threadId)) {
38
+ throw new Error("Invalid Codex CLI native identity");
39
+ }
40
+ return { codexHome: path.resolve(value.codexHome), threadId: value.threadId };
41
+ }
42
+ //# sourceMappingURL=codex-native-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-native-identity.js","sourceRoot":"","sources":["../../src/codex-native-identity.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,MAAM,GAAG,eAAe,CAAC;AAC/B,MAAM,UAAU,+BAA+B,CAAC,QAA6B;IAC3E,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnD,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3F,CAAC;AACD,MAAM,UAAU,8BAA8B,CAAC,KAAa;IAC1D,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACrH,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACnG,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAC/E,MAAM,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAAC,CAAC;IACpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC3G,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvE,IAAI,+BAA+B,CAAC,QAAQ,CAAC,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACpH,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC;AACD,4FAA4F;AAC5F,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,yCAAyC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5F,CAAC;AACD,SAAS,QAAQ,CAAC,KAA0B;IAC1C,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;WACvE,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;WAC/E,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtG,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AAChF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type CodexNativeRuntimeOptions } from "./codex-native-runtime.js";
2
+ export declare function launchCodexNativeMonitor(watchId: string, options: CodexNativeRuntimeOptions): Promise<number>;
3
+ /** Keep one scoped observer connected; polling recovers exact turn state after missed events. */
4
+ export declare function runCodexNativeMonitor(watchId: string, options: CodexNativeRuntimeOptions): Promise<void>;
@@ -0,0 +1,92 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { spawn } from "node:child_process";
5
+ import { ensureDir } from "./store.js";
6
+ import { cliCwd, cliEnv, cliNow, cliNowMs, cliPid, cliSleep, cliSleepSync } from "./cli-runtime-context.js";
7
+ import { createFileLockCliAdapter } from "./file-lock-cli-adapter.js";
8
+ import { codexNativeTaskNeedsReconciliation } from "./codex-native-task-service.js";
9
+ import { isCodexNativeWatchId } from "./codex-native-state-store.js";
10
+ import { createCodexNativeRuntime } from "./codex-native-runtime.js";
11
+ export async function launchCodexNativeMonitor(watchId, options) {
12
+ if (!isCodexNativeWatchId(watchId))
13
+ throw new Error("Invalid Codex CLI Watch ID");
14
+ const args = [fileURLToPath(new URL("./cli.js", import.meta.url)), "monitor-codex-native", "--watch", watchId, "--store-dir", options.storeDir];
15
+ if (options.openclawBin)
16
+ args.push("--openclaw-bin", options.openclawBin);
17
+ const directory = path.join(options.storeDir, "codex-native-monitors");
18
+ ensureDir(directory);
19
+ const fd = fs.openSync(path.join(directory, `${watchId}.log`), fs.constants.O_CREAT | fs.constants.O_APPEND | fs.constants.O_WRONLY | fs.constants.O_NOFOLLOW, 0o600);
20
+ try {
21
+ const child = spawn(process.execPath, args, { detached: true, cwd: cliCwd(),
22
+ env: { ...cliEnv(), AKK_NATIVE_CODEX_HOMES: JSON.stringify(options.codexHomes) }, stdio: ["ignore", fd, fd, "ipc"] });
23
+ return await new Promise((resolve, reject) => {
24
+ let finished = false;
25
+ const timer = setTimeout(() => finish(new Error("Codex CLI monitor readiness timed out")), 5000);
26
+ const finish = (error, pid) => {
27
+ if (finished)
28
+ return;
29
+ finished = true;
30
+ clearTimeout(timer);
31
+ child.removeAllListeners("message");
32
+ child.removeAllListeners("exit");
33
+ child.removeAllListeners("error");
34
+ if (child.connected)
35
+ child.disconnect();
36
+ child.unref();
37
+ if (error)
38
+ reject(error);
39
+ else
40
+ resolve(pid);
41
+ };
42
+ child.once("error", error => finish(error));
43
+ child.once("exit", () => finish(new Error("Codex CLI monitor exited before readiness")));
44
+ child.on("message", value => {
45
+ const message = value;
46
+ if (message.watchId === watchId && message.ready === true && Number.isSafeInteger(message.pid) && message.pid > 1)
47
+ finish(undefined, message.pid);
48
+ });
49
+ });
50
+ }
51
+ finally {
52
+ fs.closeSync(fd);
53
+ }
54
+ }
55
+ /** Keep one scoped observer connected; polling recovers exact turn state after missed events. */
56
+ export async function runCodexNativeMonitor(watchId, options) {
57
+ if (!isCodexNativeWatchId(watchId))
58
+ throw new Error("Invalid Codex CLI Watch ID");
59
+ const directory = path.join(options.storeDir, "codex-native-monitors");
60
+ ensureDir(directory);
61
+ const locks = createFileLockCliAdapter({ now: cliNow, nowMs: cliNowMs, pid: cliPid, sleepSync: cliSleepSync });
62
+ const runtime = createCodexNativeRuntime(options);
63
+ const lockPath = path.join(directory, `${watchId}.lock`);
64
+ let release;
65
+ try {
66
+ runtime.tasks.status(watchId);
67
+ try {
68
+ release = locks.acquire(lockPath, { timeoutMs: 100 });
69
+ }
70
+ catch (error) {
71
+ const owner = locks.owner(lockPath);
72
+ if (owner.pid && owner.pid !== cliPid() && !locks.stale(lockPath)) {
73
+ process.send?.({ watchId, ready: true, pid: owner.pid });
74
+ return;
75
+ }
76
+ throw error;
77
+ }
78
+ // Readiness acknowledges durable observer ownership, not native task acceptance or completion.
79
+ process.send?.({ watchId, ready: true, pid: cliPid() });
80
+ for (;;) {
81
+ const task = await runtime.reconcile(watchId);
82
+ if (!codexNativeTaskNeedsReconciliation(task))
83
+ return;
84
+ await cliSleep(2000);
85
+ }
86
+ }
87
+ finally {
88
+ release?.();
89
+ await runtime.close();
90
+ }
91
+ }
92
+ //# sourceMappingURL=codex-native-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-native-monitor.js","sourceRoot":"","sources":["../../src/codex-native-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type CallbackAttemptOutcome, type CallbackTransportContextV1, type CallbackTransportDeliverInput } from "./callback-transport.js";
2
+ import type { CodexNativeStateRepository, CodexNativeTaskRecord } from "./codex-native-state-store.js";
3
+ export interface NativeOutboxDependencies {
4
+ repository: CodexNativeStateRepository;
5
+ deliver?(input: CallbackTransportDeliverInput): CallbackAttemptOutcome | Promise<CallbackAttemptOutcome>;
6
+ resolveCallbackContext?(task: CodexNativeTaskRecord): CallbackTransportContextV1 | undefined;
7
+ now?(): Date;
8
+ randomUUID?(): string;
9
+ deliveryLeaseMs?: number;
10
+ retryDelayMs?: number;
11
+ maxDeliveryAttempts?: number;
12
+ }
13
+ /** Lease and durable checkpoint semantics are shared with the other AKK transports. */
14
+ export declare function createNativeNotificationOutbox(deps: NativeOutboxDependencies): {
15
+ deliverPending(id: string, notificationId?: string): Promise<void>;
16
+ };