@raidiant/notifai 11.7.1 → 12.0.0-beta.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/NOTICE +16 -0
  3. package/THIRD_PARTY_NOTICES +725 -0
  4. package/bin/notifai.mjs +11420 -0
  5. package/data/install.ps1 +318 -0
  6. package/data/release.json +1 -0
  7. package/inventory.json +1 -0
  8. package/npm-adapter-files.json +52 -0
  9. package/package.json +14 -44
  10. package/README.md +0 -168
  11. package/dist/agent-update-notice.d.ts +0 -7
  12. package/dist/agent-update-notice.js +0 -77
  13. package/dist/agent-update-notice.js.map +0 -1
  14. package/dist/atomic-file.d.ts +0 -30
  15. package/dist/atomic-file.js +0 -148
  16. package/dist/atomic-file.js.map +0 -1
  17. package/dist/attendant-update.d.ts +0 -15
  18. package/dist/attendant-update.js +0 -96
  19. package/dist/attendant-update.js.map +0 -1
  20. package/dist/claude-wake.d.ts +0 -108
  21. package/dist/claude-wake.js +0 -369
  22. package/dist/claude-wake.js.map +0 -1
  23. package/dist/cli-bin.d.ts +0 -26
  24. package/dist/cli-bin.js +0 -220
  25. package/dist/cli-bin.js.map +0 -1
  26. package/dist/cli-contract.d.ts +0 -16
  27. package/dist/cli-contract.js +0 -27
  28. package/dist/cli-contract.js.map +0 -1
  29. package/dist/cli-release.d.ts +0 -36
  30. package/dist/cli-release.js +0 -85
  31. package/dist/cli-release.js.map +0 -1
  32. package/dist/client.d.ts +0 -109
  33. package/dist/client.js +0 -217
  34. package/dist/client.js.map +0 -1
  35. package/dist/codex-answer-control.d.ts +0 -14
  36. package/dist/codex-answer-control.js +0 -41
  37. package/dist/codex-answer-control.js.map +0 -1
  38. package/dist/codex-answer-presentation.d.ts +0 -18
  39. package/dist/codex-answer-presentation.js +0 -113
  40. package/dist/codex-answer-presentation.js.map +0 -1
  41. package/dist/codex-input-lifecycle.d.ts +0 -10
  42. package/dist/codex-input-lifecycle.js +0 -63
  43. package/dist/codex-input-lifecycle.js.map +0 -1
  44. package/dist/codex-native-control.d.ts +0 -13
  45. package/dist/codex-native-control.js +0 -120
  46. package/dist/codex-native-control.js.map +0 -1
  47. package/dist/codex-native-turn.d.ts +0 -37
  48. package/dist/codex-native-turn.js +0 -155
  49. package/dist/codex-native-turn.js.map +0 -1
  50. package/dist/codex-question-bindings.d.ts +0 -76
  51. package/dist/codex-question-bindings.js +0 -151
  52. package/dist/codex-question-bindings.js.map +0 -1
  53. package/dist/codex-queue-control.d.ts +0 -21
  54. package/dist/codex-queue-control.js +0 -59
  55. package/dist/codex-queue-control.js.map +0 -1
  56. package/dist/codex-tool-messages.d.ts +0 -7
  57. package/dist/codex-tool-messages.js +0 -126
  58. package/dist/codex-tool-messages.js.map +0 -1
  59. package/dist/codex-wake.d.ts +0 -58
  60. package/dist/codex-wake.js +0 -135
  61. package/dist/codex-wake.js.map +0 -1
  62. package/dist/command-session.d.ts +0 -14
  63. package/dist/command-session.js +0 -31
  64. package/dist/command-session.js.map +0 -1
  65. package/dist/commands-acknowledge.d.ts +0 -13
  66. package/dist/commands-acknowledge.js +0 -116
  67. package/dist/commands-acknowledge.js.map +0 -1
  68. package/dist/commands-agent-sessions.d.ts +0 -6
  69. package/dist/commands-agent-sessions.js +0 -51
  70. package/dist/commands-agent-sessions.js.map +0 -1
  71. package/dist/commands-ask.d.ts +0 -62
  72. package/dist/commands-ask.js +0 -503
  73. package/dist/commands-ask.js.map +0 -1
  74. package/dist/commands-auth.d.ts +0 -76
  75. package/dist/commands-auth.js +0 -421
  76. package/dist/commands-auth.js.map +0 -1
  77. package/dist/commands-close.d.ts +0 -6
  78. package/dist/commands-close.js +0 -273
  79. package/dist/commands-close.js.map +0 -1
  80. package/dist/commands-config.d.ts +0 -31
  81. package/dist/commands-config.js +0 -272
  82. package/dist/commands-config.js.map +0 -1
  83. package/dist/commands-core.d.ts +0 -145
  84. package/dist/commands-core.js +0 -190
  85. package/dist/commands-core.js.map +0 -1
  86. package/dist/commands-devices.d.ts +0 -41
  87. package/dist/commands-devices.js +0 -144
  88. package/dist/commands-devices.js.map +0 -1
  89. package/dist/commands-doctor.d.ts +0 -25
  90. package/dist/commands-doctor.js +0 -1553
  91. package/dist/commands-doctor.js.map +0 -1
  92. package/dist/commands-guidance.d.ts +0 -27
  93. package/dist/commands-guidance.js +0 -150
  94. package/dist/commands-guidance.js.map +0 -1
  95. package/dist/commands-harness-context.d.ts +0 -57
  96. package/dist/commands-harness-context.js +0 -102
  97. package/dist/commands-harness-context.js.map +0 -1
  98. package/dist/commands-hook-attend.d.ts +0 -70
  99. package/dist/commands-hook-attend.js +0 -655
  100. package/dist/commands-hook-attend.js.map +0 -1
  101. package/dist/commands-hook-diagnostics.d.ts +0 -37
  102. package/dist/commands-hook-diagnostics.js +0 -136
  103. package/dist/commands-hook-diagnostics.js.map +0 -1
  104. package/dist/commands-hook-install.d.ts +0 -26
  105. package/dist/commands-hook-install.js +0 -784
  106. package/dist/commands-hook-install.js.map +0 -1
  107. package/dist/commands-hook-run.d.ts +0 -29
  108. package/dist/commands-hook-run.js +0 -933
  109. package/dist/commands-hook-run.js.map +0 -1
  110. package/dist/commands-hook-shape.d.ts +0 -19
  111. package/dist/commands-hook-shape.js +0 -48
  112. package/dist/commands-hook-shape.js.map +0 -1
  113. package/dist/commands-init.d.ts +0 -42
  114. package/dist/commands-init.js +0 -901
  115. package/dist/commands-init.js.map +0 -1
  116. package/dist/commands-io.d.ts +0 -2
  117. package/dist/commands-io.js +0 -117
  118. package/dist/commands-io.js.map +0 -1
  119. package/dist/commands-logs.d.ts +0 -30
  120. package/dist/commands-logs.js +0 -201
  121. package/dist/commands-logs.js.map +0 -1
  122. package/dist/commands-native-acknowledge.d.ts +0 -8
  123. package/dist/commands-native-acknowledge.js +0 -114
  124. package/dist/commands-native-acknowledge.js.map +0 -1
  125. package/dist/commands-project.d.ts +0 -4
  126. package/dist/commands-project.js +0 -41
  127. package/dist/commands-project.js.map +0 -1
  128. package/dist/commands-receive.d.ts +0 -3
  129. package/dist/commands-receive.js +0 -59
  130. package/dist/commands-receive.js.map +0 -1
  131. package/dist/commands-send-support.d.ts +0 -59
  132. package/dist/commands-send-support.js +0 -258
  133. package/dist/commands-send-support.js.map +0 -1
  134. package/dist/commands-send.d.ts +0 -34
  135. package/dist/commands-send.js +0 -900
  136. package/dist/commands-send.js.map +0 -1
  137. package/dist/commands-setup-proof.d.ts +0 -43
  138. package/dist/commands-setup-proof.js +0 -134
  139. package/dist/commands-setup-proof.js.map +0 -1
  140. package/dist/commands-skill.d.ts +0 -21
  141. package/dist/commands-skill.js +0 -199
  142. package/dist/commands-skill.js.map +0 -1
  143. package/dist/commands-sounds.d.ts +0 -12
  144. package/dist/commands-sounds.js +0 -35
  145. package/dist/commands-sounds.js.map +0 -1
  146. package/dist/commands-update-check.d.ts +0 -6
  147. package/dist/commands-update-check.js +0 -102
  148. package/dist/commands-update-check.js.map +0 -1
  149. package/dist/commands-update-resume.d.ts +0 -7
  150. package/dist/commands-update-resume.js +0 -143
  151. package/dist/commands-update-resume.js.map +0 -1
  152. package/dist/commands-update-skill.d.ts +0 -5
  153. package/dist/commands-update-skill.js +0 -36
  154. package/dist/commands-update-skill.js.map +0 -1
  155. package/dist/commands-update.d.ts +0 -11
  156. package/dist/commands-update.js +0 -286
  157. package/dist/commands-update.js.map +0 -1
  158. package/dist/commands.d.ts +0 -26
  159. package/dist/commands.js +0 -27
  160. package/dist/commands.js.map +0 -1
  161. package/dist/config-schema.d.ts +0 -62
  162. package/dist/config-schema.js +0 -302
  163. package/dist/config-schema.js.map +0 -1
  164. package/dist/config.d.ts +0 -181
  165. package/dist/config.js +0 -357
  166. package/dist/config.js.map +0 -1
  167. package/dist/credentials.d.ts +0 -96
  168. package/dist/credentials.js +0 -342
  169. package/dist/credentials.js.map +0 -1
  170. package/dist/file-lock.d.ts +0 -34
  171. package/dist/file-lock.js +0 -367
  172. package/dist/file-lock.js.map +0 -1
  173. package/dist/generated-session-label.d.ts +0 -2
  174. package/dist/generated-session-label.js +0 -152
  175. package/dist/generated-session-label.js.map +0 -1
  176. package/dist/guidance-content.d.ts +0 -53
  177. package/dist/guidance-content.js +0 -248
  178. package/dist/guidance-content.js.map +0 -1
  179. package/dist/guidance-render.d.ts +0 -25
  180. package/dist/guidance-render.js +0 -47
  181. package/dist/guidance-render.js.map +0 -1
  182. package/dist/guidance.d.ts +0 -69
  183. package/dist/guidance.js +0 -173
  184. package/dist/guidance.js.map +0 -1
  185. package/dist/harness-session-title.d.ts +0 -22
  186. package/dist/harness-session-title.js +0 -74
  187. package/dist/harness-session-title.js.map +0 -1
  188. package/dist/harnesses.d.ts +0 -65
  189. package/dist/harnesses.js +0 -159
  190. package/dist/harnesses.js.map +0 -1
  191. package/dist/hermes-attendant.d.ts +0 -38
  192. package/dist/hermes-attendant.js +0 -337
  193. package/dist/hermes-attendant.js.map +0 -1
  194. package/dist/hermes-plugin.d.ts +0 -11
  195. package/dist/hermes-plugin.js +0 -299
  196. package/dist/hermes-plugin.js.map +0 -1
  197. package/dist/hook-acknowledgements.d.ts +0 -70
  198. package/dist/hook-acknowledgements.js +0 -490
  199. package/dist/hook-acknowledgements.js.map +0 -1
  200. package/dist/hook-adapter.d.ts +0 -48
  201. package/dist/hook-adapter.js +0 -419
  202. package/dist/hook-adapter.js.map +0 -1
  203. package/dist/hook-events.d.ts +0 -105
  204. package/dist/hook-events.js +0 -130
  205. package/dist/hook-events.js.map +0 -1
  206. package/dist/hook-gates.d.ts +0 -7
  207. package/dist/hook-gates.js +0 -20
  208. package/dist/hook-gates.js.map +0 -1
  209. package/dist/hook-input.d.ts +0 -10
  210. package/dist/hook-input.js +0 -64
  211. package/dist/hook-input.js.map +0 -1
  212. package/dist/hook-lifecycle.d.ts +0 -112
  213. package/dist/hook-lifecycle.js +0 -2031
  214. package/dist/hook-lifecycle.js.map +0 -1
  215. package/dist/hook-project-sessions.d.ts +0 -28
  216. package/dist/hook-project-sessions.js +0 -141
  217. package/dist/hook-project-sessions.js.map +0 -1
  218. package/dist/hook-question-lock.d.ts +0 -29
  219. package/dist/hook-question-lock.js +0 -217
  220. package/dist/hook-question-lock.js.map +0 -1
  221. package/dist/hook-question-retirement.d.ts +0 -74
  222. package/dist/hook-question-retirement.js +0 -314
  223. package/dist/hook-question-retirement.js.map +0 -1
  224. package/dist/hook-question-state.d.ts +0 -58
  225. package/dist/hook-question-state.js +0 -239
  226. package/dist/hook-question-state.js.map +0 -1
  227. package/dist/hook-session-state.d.ts +0 -127
  228. package/dist/hook-session-state.js +0 -488
  229. package/dist/hook-session-state.js.map +0 -1
  230. package/dist/hook-types.d.ts +0 -476
  231. package/dist/hook-types.js +0 -4
  232. package/dist/hook-types.js.map +0 -1
  233. package/dist/injection-render.d.ts +0 -36
  234. package/dist/injection-render.js +0 -61
  235. package/dist/injection-render.js.map +0 -1
  236. package/dist/install-hooks.d.ts +0 -470
  237. package/dist/install-hooks.js +0 -1622
  238. package/dist/install-hooks.js.map +0 -1
  239. package/dist/integration-health.d.ts +0 -26
  240. package/dist/integration-health.js +0 -133
  241. package/dist/integration-health.js.map +0 -1
  242. package/dist/interactive.d.ts +0 -22
  243. package/dist/interactive.js +0 -644
  244. package/dist/interactive.js.map +0 -1
  245. package/dist/invocation-context.d.ts +0 -47
  246. package/dist/invocation-context.js +0 -164
  247. package/dist/invocation-context.js.map +0 -1
  248. package/dist/local-path.d.ts +0 -7
  249. package/dist/local-path.js +0 -27
  250. package/dist/local-path.js.map +0 -1
  251. package/dist/logging.d.ts +0 -157
  252. package/dist/logging.js +0 -599
  253. package/dist/logging.js.map +0 -1
  254. package/dist/main-run.d.ts +0 -1
  255. package/dist/main-run.js +0 -42
  256. package/dist/main-run.js.map +0 -1
  257. package/dist/main.d.ts +0 -2
  258. package/dist/main.js +0 -12
  259. package/dist/main.js.map +0 -1
  260. package/dist/native-answer-operation.d.ts +0 -70
  261. package/dist/native-answer-operation.js +0 -247
  262. package/dist/native-answer-operation.js.map +0 -1
  263. package/dist/native-skills.d.ts +0 -64
  264. package/dist/native-skills.js +0 -167
  265. package/dist/native-skills.js.map +0 -1
  266. package/dist/node-floor.d.ts +0 -19
  267. package/dist/node-floor.js +0 -32
  268. package/dist/node-floor.js.map +0 -1
  269. package/dist/npm-invocation.d.ts +0 -34
  270. package/dist/npm-invocation.js +0 -53
  271. package/dist/npm-invocation.js.map +0 -1
  272. package/dist/openclaw-continuation-bridge.d.ts +0 -7
  273. package/dist/openclaw-continuation-bridge.js +0 -64
  274. package/dist/openclaw-continuation-bridge.js.map +0 -1
  275. package/dist/openclaw-gateway-readiness.d.ts +0 -1
  276. package/dist/openclaw-gateway-readiness.js +0 -24
  277. package/dist/openclaw-gateway-readiness.js.map +0 -1
  278. package/dist/openclaw-generation.d.ts +0 -21
  279. package/dist/openclaw-generation.js +0 -115
  280. package/dist/openclaw-generation.js.map +0 -1
  281. package/dist/openclaw-message-bridge.d.ts +0 -8
  282. package/dist/openclaw-message-bridge.js +0 -93
  283. package/dist/openclaw-message-bridge.js.map +0 -1
  284. package/dist/openclaw-pending.d.ts +0 -8
  285. package/dist/openclaw-pending.js +0 -47
  286. package/dist/openclaw-pending.js.map +0 -1
  287. package/dist/openclaw-plugin.d.ts +0 -75
  288. package/dist/openclaw-plugin.js +0 -1353
  289. package/dist/openclaw-plugin.js.map +0 -1
  290. package/dist/openclaw-session-access.d.ts +0 -12
  291. package/dist/openclaw-session-access.js +0 -79
  292. package/dist/openclaw-session-access.js.map +0 -1
  293. package/dist/opencode-plugin.d.ts +0 -88
  294. package/dist/opencode-plugin.js +0 -286
  295. package/dist/opencode-plugin.js.map +0 -1
  296. package/dist/orca-session-title.d.ts +0 -11
  297. package/dist/orca-session-title.js +0 -111
  298. package/dist/orca-session-title.js.map +0 -1
  299. package/dist/pack-feedback-slice.d.ts +0 -35
  300. package/dist/pack-feedback-slice.js +0 -126
  301. package/dist/pack-feedback-slice.js.map +0 -1
  302. package/dist/pairing-qr.d.ts +0 -5
  303. package/dist/pairing-qr.js +0 -24
  304. package/dist/pairing-qr.js.map +0 -1
  305. package/dist/pending-pairing.d.ts +0 -38
  306. package/dist/pending-pairing.js +0 -70
  307. package/dist/pending-pairing.js.map +0 -1
  308. package/dist/platform.d.ts +0 -67
  309. package/dist/platform.js +0 -140
  310. package/dist/platform.js.map +0 -1
  311. package/dist/process-identity.d.ts +0 -26
  312. package/dist/process-identity.js +0 -82
  313. package/dist/process-identity.js.map +0 -1
  314. package/dist/program.d.ts +0 -59
  315. package/dist/program.js +0 -691
  316. package/dist/program.js.map +0 -1
  317. package/dist/project-enablement.d.ts +0 -21
  318. package/dist/project-enablement.js +0 -71
  319. package/dist/project-enablement.js.map +0 -1
  320. package/dist/question-settlement-process.d.ts +0 -17
  321. package/dist/question-settlement-process.js +0 -35
  322. package/dist/question-settlement-process.js.map +0 -1
  323. package/dist/question-timing.d.ts +0 -46
  324. package/dist/question-timing.js +0 -48
  325. package/dist/question-timing.js.map +0 -1
  326. package/dist/readiness.d.ts +0 -153
  327. package/dist/readiness.js +0 -149
  328. package/dist/readiness.js.map +0 -1
  329. package/dist/release.d.ts +0 -31
  330. package/dist/release.js +0 -52
  331. package/dist/release.js.map +0 -1
  332. package/dist/send-attempts.d.ts +0 -26
  333. package/dist/send-attempts.js +0 -139
  334. package/dist/send-attempts.js.map +0 -1
  335. package/dist/send.d.ts +0 -115
  336. package/dist/send.js +0 -421
  337. package/dist/send.js.map +0 -1
  338. package/dist/session-activation.d.ts +0 -13
  339. package/dist/session-activation.js +0 -64
  340. package/dist/session-activation.js.map +0 -1
  341. package/dist/session-attendant-probe.d.ts +0 -85
  342. package/dist/session-attendant-probe.js +0 -173
  343. package/dist/session-attendant-probe.js.map +0 -1
  344. package/dist/session-attendant-state.d.ts +0 -70
  345. package/dist/session-attendant-state.js +0 -256
  346. package/dist/session-attendant-state.js.map +0 -1
  347. package/dist/session-attendant.d.ts +0 -143
  348. package/dist/session-attendant.js +0 -520
  349. package/dist/session-attendant.js.map +0 -1
  350. package/dist/session-delivery.d.ts +0 -249
  351. package/dist/session-delivery.js +0 -576
  352. package/dist/session-delivery.js.map +0 -1
  353. package/dist/session-handoff.d.ts +0 -98
  354. package/dist/session-handoff.js +0 -118
  355. package/dist/session-handoff.js.map +0 -1
  356. package/dist/session-input-wakes.d.ts +0 -78
  357. package/dist/session-input-wakes.js +0 -239
  358. package/dist/session-input-wakes.js.map +0 -1
  359. package/dist/session-inputs.d.ts +0 -57
  360. package/dist/session-inputs.js +0 -434
  361. package/dist/session-inputs.js.map +0 -1
  362. package/dist/session-labels.d.ts +0 -56
  363. package/dist/session-labels.js +0 -396
  364. package/dist/session-labels.js.map +0 -1
  365. package/dist/session-message-handoff.d.ts +0 -39
  366. package/dist/session-message-handoff.js +0 -107
  367. package/dist/session-message-handoff.js.map +0 -1
  368. package/dist/setup-destinations.d.ts +0 -23
  369. package/dist/setup-destinations.js +0 -44
  370. package/dist/setup-destinations.js.map +0 -1
  371. package/dist/skill-integrity.d.ts +0 -54
  372. package/dist/skill-integrity.js +0 -164
  373. package/dist/skill-integrity.js.map +0 -1
  374. package/dist/skill-source/manifest.json +0 -40
  375. package/dist/skill-source/notifai/SKILL.md +0 -350
  376. package/dist/skill-source/notifai/references/diagnostics.md +0 -36
  377. package/dist/skill-source/notifai/references/harness-setup.md +0 -384
  378. package/dist/skill-source/notifai/references/native-questions.md +0 -51
  379. package/dist/skill-source/notifai/references/notes-and-edits.md +0 -54
  380. package/dist/skill-source/notifai/references/send-details.md +0 -14
  381. package/dist/skill-source/notifai/references/updates.md +0 -116
  382. package/dist/skill-source/notifai/references/writing-examples.md +0 -56
  383. package/dist/sound-ref.d.ts +0 -23
  384. package/dist/sound-ref.js +0 -28
  385. package/dist/sound-ref.js.map +0 -1
  386. package/dist/ui/banner.d.ts +0 -22
  387. package/dist/ui/banner.js +0 -87
  388. package/dist/ui/banner.js.map +0 -1
  389. package/dist/ui/config-view.d.ts +0 -30
  390. package/dist/ui/config-view.js +0 -108
  391. package/dist/ui/config-view.js.map +0 -1
  392. package/dist/ui/help.d.ts +0 -44
  393. package/dist/ui/help.js +0 -107
  394. package/dist/ui/help.js.map +0 -1
  395. package/dist/ui/theme.d.ts +0 -90
  396. package/dist/ui/theme.js +0 -244
  397. package/dist/ui/theme.js.map +0 -1
  398. package/dist/update-handoff.d.ts +0 -29
  399. package/dist/update-handoff.js +0 -69
  400. package/dist/update-handoff.js.map +0 -1
  401. package/dist/url-policy.d.ts +0 -85
  402. package/dist/url-policy.js +0 -369
  403. package/dist/url-policy.js.map +0 -1
  404. package/dist/version.d.ts +0 -40
  405. package/dist/version.js +0 -132
  406. package/dist/version.js.map +0 -1
  407. package/dist/wake-support.d.ts +0 -40
  408. package/dist/wake-support.js +0 -95
  409. package/dist/wake-support.js.map +0 -1
@@ -1,113 +0,0 @@
1
- /** Present one claimed app submission through its exact accepted native form. */
2
- import { createHash } from 'node:crypto';
3
- import { isDeepStrictEqual } from 'node:util';
4
- import { acknowledgementContext } from './hook-acknowledgements.js';
5
- import { TRANSPORT_LIMIT } from './injection-render.js';
6
- import { nativeQuestionTitle, observeCodexQuestions } from './codex-question-bindings.js';
7
- import { readNativeQuestionSnapshot } from './codex-native-turn.js';
8
- import { readSessionIncarnation, updateSessionState } from './hook-session-state.js';
9
- import { connectCodexAnswerControl } from './codex-answer-control.js';
10
- import { CodexControlNotSent } from './codex-native-control.js';
11
- /** Multipart, malformed and unsupported answers keep the ordinary input path. */
12
- function boundAnswer(answer, state, ownerKey, service) {
13
- if (answer.delivery_claim !== true || answer.replies.length !== 1 ||
14
- !isDeepStrictEqual(answer.reply, answer.replies[0]) || !isDeepStrictEqual(answer.pending.service_identity, service))
15
- return null;
16
- const registration = state.codex_question_bindings?.find(item => item.question_id === answer.pending.question_id);
17
- if (registration === undefined || registration.owner_key !== ownerKey || registration.ordinary_only === true ||
18
- registration.terminated === true || registration.confirmed_request_id !== answer.pending.request_id ||
19
- !isDeepStrictEqual(registration.service_identity, service) ||
20
- !isDeepStrictEqual(registration.questions.map(item => item.question), answer.pending.questions))
21
- return null;
22
- const parts = answer.reply.answers;
23
- if (parts.length === 0 || new Set(parts.map(part => part.question_id)).size !== parts.length)
24
- return null;
25
- for (const part of parts) {
26
- const binding = registration.questions.find(item => item.question.id === part.question_id);
27
- if (binding?.verified !== true || binding.native === undefined || binding.ambiguous === true ||
28
- binding.question.multi === true || part.choice_ids.length > 1 ||
29
- part.choice_ids.some(id => !binding.question.choices?.some(choice => choice.id === id)) ||
30
- (part.choice_ids.length === 0 && !part.text?.trim()))
31
- return null;
32
- }
33
- return registration;
34
- }
35
- export function codexAnswerPresentation(input) {
36
- const eligible = (answer, state) => boundAnswer(answer, state, input.ownerKey, input.service);
37
- const refresh = (state) => {
38
- const snapshot = readNativeQuestionSnapshot(input.transcriptPath, input.sessionId, input.env);
39
- return { state: observeCodexQuestions(state, input.ownerKey, snapshot),
40
- current: snapshot?.latest.id === input.turnId && !snapshot.latest.ended };
41
- };
42
- const owned = () => input.mayWrite() && readSessionIncarnation(input.sessionId, input.env)?.key === input.ownerKey;
43
- return {
44
- eligible: (answer, state) => eligible(answer, state) !== null,
45
- prepare: async (answer, _state, deadline) => {
46
- let registration = null;
47
- updateSessionState(input.sessionId, input.env, state => {
48
- const observed = refresh(state);
49
- if (owned() && observed.current)
50
- registration = eligible(answer, observed.state);
51
- return observed.state;
52
- });
53
- if (registration === null)
54
- return null;
55
- // Freeze the binding independently of later state changes and retries.
56
- const binding = structuredClone(registration);
57
- const control = await (input.connect ?? connectCodexAnswerControl)(input.sessionId, input.turnId, input.env, Math.min(input.deadline, deadline));
58
- if (control === null)
59
- return null;
60
- try {
61
- if (!owned() || !await control.currentTurn(input.turnId)) {
62
- control.close();
63
- return null;
64
- }
65
- const reply = answer.reply;
66
- const text = '<send_user_message_question_reply>\n' + JSON.stringify(reply.answers.map(part => {
67
- const question = binding.questions.find(item => item.question.id === part.question_id);
68
- const selected = part.choice_ids.map(id => question.question.choices.find(choice => choice.id === id).label);
69
- return { questionItemId: JSON.stringify(['request_user_input_async', question.native.call_id, question.native.index]),
70
- question: nativeQuestionTitle(question), answer: [...selected, ...(part.text == null ? [] : [part.text])].join('\n'),
71
- notifai: { origin: 'companion', request_id: answer.pending.request_id, question_id: part.question_id,
72
- reply_id: reply.reply_id, reply_seq: reply.seq,
73
- instruction: 'This is the existing Notifai app submission, not a new native submission. Do not report it as a native answer.' +
74
- acknowledgementContext([answer]) + TRANSPORT_LIMIT } };
75
- })) + '\n</send_user_message_question_reply>';
76
- const validate = (state) => {
77
- const observed = refresh(state);
78
- return { state: observed.state, valid: owned() && observed.current &&
79
- isDeepStrictEqual(eligible(answer, observed.state), binding) };
80
- };
81
- return {
82
- presentation: { kind: 'codex-answer', request_id: answer.pending.request_id, question_id: binding.question_id,
83
- replies: [{ reply_id: reply.reply_id, seq: reply.seq }],
84
- questions: reply.answers.map(part => ({ question_id: part.question_id,
85
- ...binding.questions.find(item => item.question.id === part.question_id).native })),
86
- owner_key: input.ownerKey, ...input.lease, service_identity: input.service,
87
- namespace: control.namespace, thread_id: control.threadId, expected_turn_id: input.turnId,
88
- envelope_sha256: createHash('sha256').update(text).digest('hex') },
89
- validate,
90
- write: async (mayWrite) => {
91
- if (!input.serviceCurrent())
92
- throw new CodexControlNotSent('Native answer Machine changed before send');
93
- let valid = false;
94
- updateSessionState(input.sessionId, input.env, state => {
95
- const checked = validate(state);
96
- valid = checked.valid;
97
- return checked.state;
98
- });
99
- if (!valid || !owned() || !mayWrite())
100
- throw new CodexControlNotSent('Native answer authority changed before send');
101
- await control.steer(input.turnId, text);
102
- },
103
- close: () => control.close(),
104
- };
105
- }
106
- catch {
107
- control.close();
108
- return null;
109
- }
110
- },
111
- };
112
- }
113
- //# sourceMappingURL=codex-answer-presentation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-answer-presentation.js","sourceRoot":"","sources":["../src/codex-answer-presentation.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- export type CodexInputActivity = 'working' | 'idle' | 'aborted' | 'unknown';
2
- /** Never infers idle from missing callbacks or a Stop hook. */
3
- export declare function refreshCodexInputActivity(sessionId: string, env: NodeJS.ProcessEnv, expectedKey: string, transcriptPath?: string): CodexInputActivity;
4
- /** One observer owns the grace interval across probes and final wake checks.
5
- * Only a continuous read failure permits the bounded queue fallback. */
6
- export declare function codexInputObserver(sessionId: string, env: NodeJS.ProcessEnv, expectedKey: string, monotonic: () => number, transcriptPath?: string): {
7
- observe: () => CodexInputActivity;
8
- mayWake: () => boolean;
9
- unknownAllowed: () => boolean;
10
- };
@@ -1,63 +0,0 @@
1
- /** Exact native activity used by the existing input scheduler. */
2
- import { readNativeTurnSnapshot } from './codex-native-turn.js';
3
- import { readSessionIncarnation, readSessionState, sessionHasEnded, updateSessionState } from './hook-session-state.js';
4
- import { processIdentityLiveness } from './process-identity.js';
5
- import { reconcileNativeTurn } from './session-attendant-state.js';
6
- /** Never infers idle from missing callbacks or a Stop hook. */
7
- export function refreshCodexInputActivity(sessionId, env, expectedKey, transcriptPath) {
8
- const owner = readSessionIncarnation(sessionId, env);
9
- const owns = () => owner !== null && owner.key === expectedKey && !sessionHasEnded(sessionId, env) &&
10
- readSessionIncarnation(sessionId, env)?.key === expectedKey &&
11
- readSessionIncarnation(sessionId, env)?.incarnation === owner.incarnation &&
12
- owner.harness_process !== undefined && processIdentityLiveness(owner.harness_process) === 'alive';
13
- if (!owns() || owner === null)
14
- return 'unknown';
15
- const proof = readSessionState(sessionId, env).codex_native_turn;
16
- const file = transcriptPath ?? (proof?.key === owner.key ? proof.transcript_path : undefined);
17
- const native = readNativeTurnSnapshot(file, sessionId, env);
18
- if (native === null)
19
- return 'unknown';
20
- try {
21
- if (!reconcileNativeTurn(sessionId, env, owner.key, native.latest.id, native, owns))
22
- return 'unknown';
23
- updateSessionState(sessionId, env, state => !owns() ? state : ({ ...state, codex_native_turn: {
24
- key: owner.key, turn_id: native.latest.id, transcript_path: native.file, observed_at: Date.now(),
25
- } }));
26
- }
27
- catch {
28
- return 'unknown';
29
- }
30
- if (!owns())
31
- return 'unknown';
32
- return native.latest.ended ? native.latest.outcome === 'aborted' ? 'aborted' : 'idle' : 'working';
33
- }
34
- /** One observer owns the grace interval across probes and final wake checks.
35
- * Only a continuous read failure permits the bounded queue fallback. */
36
- export function codexInputObserver(sessionId, env, expectedKey, monotonic, transcriptPath) {
37
- let unknownSince;
38
- const observe = () => {
39
- const activity = refreshCodexInputActivity(sessionId, env, expectedKey, transcriptPath);
40
- if (activity === 'unknown')
41
- unknownSince ??= monotonic();
42
- else
43
- unknownSince = undefined;
44
- return activity;
45
- };
46
- return {
47
- observe,
48
- unknownAllowed: () => unknownSince !== undefined && monotonic() - unknownSince >= 6_000,
49
- mayWake: () => {
50
- if (readSessionIncarnation(sessionId, env)?.key !== expectedKey || sessionHasEnded(sessionId, env))
51
- return false;
52
- const activity = observe();
53
- const owner = readSessionIncarnation(sessionId, env);
54
- if (owner?.key !== expectedKey || sessionHasEnded(sessionId, env) ||
55
- owner.harness_process === undefined || processIdentityLiveness(owner.harness_process) !== 'alive')
56
- return false;
57
- // Aborting fences its turn; it does not cancel pending User input.
58
- return activity === 'idle' || activity === 'aborted' ||
59
- (activity === 'unknown' && monotonic() - unknownSince >= 6_000);
60
- },
61
- };
62
- }
63
- //# sourceMappingURL=codex-input-lifecycle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-input-lifecycle.js","sourceRoot":"","sources":["../src/codex-input-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- export type CodexControlMethod = 'thread/queue/list' | 'thread/queue/add' | 'thread/queue/delete' | 'thread/turns/list' | 'turn/steer';
2
- export interface CodexControl {
3
- namespace: string;
4
- threadId: string;
5
- call(method: CodexControlMethod, params: unknown): Promise<unknown>;
6
- close(): void;
7
- }
8
- /** Positive evidence that this request sent no bytes. RPC refusal is uncertain. */
9
- export declare class CodexControlNotSent extends Error {
10
- }
11
- /** Discovery proves a running endpoint, its namespace and an already loaded
12
- * thread. It never loads, resumes or takes ownership of a thread. */
13
- export declare function connectCodexControl(sessionId: string, env: NodeJS.ProcessEnv, deadlineAt: number, now?: () => number, unavailable?: (stage: string) => void): Promise<CodexControl | null>;
@@ -1,120 +0,0 @@
1
- /** Verified existing Codex connection shared by queue and answer adapters. */
2
- import { execFile } from 'node:child_process';
3
- import { lstatSync, realpathSync } from 'node:fs';
4
- import { promisify } from 'node:util';
5
- import WebSocket from 'ws';
6
- import { codexHome } from './codex-wake.js';
7
- const execute = promisify(execFile);
8
- /** Positive evidence that this request sent no bytes. RPC refusal is uncertain. */
9
- export class CodexControlNotSent extends Error {
10
- }
11
- /** Discovery proves a running endpoint, its namespace and an already loaded
12
- * thread. It never loads, resumes or takes ownership of a thread. */
13
- export async function connectCodexControl(sessionId, env, deadlineAt, now = () => performance.now(), unavailable) {
14
- let socket;
15
- let stage = 'discovery';
16
- try {
17
- const remaining = () => Math.max(1, Math.ceil(deadlineAt - now()));
18
- const { stdout } = await execute('codex', ['app-server', 'daemon', 'version'], {
19
- env, timeout: remaining(), maxBuffer: 16_384,
20
- });
21
- const version = JSON.parse(stdout);
22
- if (version.status !== 'running' || typeof version.socketPath !== 'string')
23
- throw new Error('No running daemon');
24
- stage = 'endpoint';
25
- const socketPath = realpathSync(version.socketPath);
26
- const endpoint = lstatSync(socketPath);
27
- if (!endpoint.isSocket() || (process.getuid !== undefined && endpoint.uid !== process.getuid()))
28
- throw new Error('Endpoint ownership unavailable');
29
- stage = 'connection';
30
- const home = realpathSync(codexHome(env));
31
- socket = new WebSocket(`ws+unix://${socketPath}:/`, { maxPayload: 2 * 1024 * 1024 });
32
- const connected = socket;
33
- const timer = setTimeout(() => connected.terminate(), remaining());
34
- connected.once('close', () => clearTimeout(timer));
35
- let seq = 0;
36
- const pending = new Map();
37
- const fail = (error) => { for (const p of pending.values())
38
- p.reject(error); pending.clear(); };
39
- connected.on('error', fail);
40
- connected.on('close', () => fail(new Error('Native queue connection closed; acceptance unknown')));
41
- connected.on('message', raw => {
42
- let value;
43
- try {
44
- value = JSON.parse(raw.toString());
45
- }
46
- catch {
47
- return;
48
- }
49
- if (value === null || typeof value !== 'object' || typeof value.id !== 'number')
50
- return;
51
- const waiting = pending.get(value.id);
52
- if (waiting === undefined)
53
- return;
54
- pending.delete(value.id);
55
- if (value.error !== undefined)
56
- waiting.reject(new Error('Native queue RPC refused; acceptance not established'));
57
- else
58
- waiting.resolve(value.result);
59
- });
60
- await new Promise((resolve, reject) => {
61
- connected.once('open', resolve);
62
- connected.once('error', reject);
63
- connected.once('close', () => reject(new Error('Native queue unavailable')));
64
- });
65
- const call = (method, params) => {
66
- try {
67
- const current = lstatSync(socketPath);
68
- if (realpathSync(version.socketPath) !== socketPath || current.dev !== endpoint.dev ||
69
- current.ino !== endpoint.ino || now() >= deadlineAt || connected.readyState !== WebSocket.OPEN) {
70
- throw new Error('Native queue endpoint, connection or deadline changed');
71
- }
72
- }
73
- catch {
74
- return Promise.reject(new CodexControlNotSent('Native queue request was not sent'));
75
- }
76
- const id = ++seq;
77
- return new Promise((resolve, reject) => {
78
- pending.set(id, { resolve, reject });
79
- connected.send(JSON.stringify({ id, method, params }), error => {
80
- if (error) {
81
- pending.delete(id);
82
- reject(error);
83
- }
84
- });
85
- });
86
- };
87
- stage = 'initialize';
88
- const initialized = await call('initialize', { clientInfo: { name: 'notifai_control', version: '1' }, capabilities: { experimentalApi: true } });
89
- stage = 'namespace';
90
- if (initialized.codexHome === undefined || realpathSync(initialized.codexHome) !== home)
91
- throw new Error('Different native queue namespace');
92
- connected.send(JSON.stringify({ method: 'initialized', params: {} }));
93
- stage = 'loaded-thread';
94
- let loaded = false;
95
- let loadedCursor = null;
96
- for (let page = 0; page < 16; page += 1) {
97
- const result = await call('thread/loaded/list', loadedCursor === null ? {} : { cursor: loadedCursor });
98
- if (!Array.isArray(result.data))
99
- throw new Error('Unrecognized loaded-thread response');
100
- if (result.data.includes(sessionId)) {
101
- loaded = true;
102
- break;
103
- }
104
- if (result.nextCursor == null)
105
- break;
106
- if (result.nextCursor === loadedCursor)
107
- throw new Error('Unrecognized loaded-thread cursor');
108
- loadedCursor = result.nextCursor;
109
- }
110
- if (!loaded)
111
- throw new Error('Exact owner thread is not loaded; refuse to load it');
112
- return { namespace: home, threadId: sessionId, call, close: () => connected.terminate() };
113
- }
114
- catch {
115
- socket?.terminate();
116
- unavailable?.(stage);
117
- return null;
118
- }
119
- }
120
- //# sourceMappingURL=codex-native-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-native-control.js","sourceRoot":"","sources":["../src/codex-native-control.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- export interface NativeTurnSnapshot {
2
- file: string;
3
- identity: string;
4
- size: number;
5
- latest: {
6
- id: string;
7
- offset: number;
8
- ended: boolean;
9
- outcome?: 'completed' | 'aborted';
10
- };
11
- positions: Map<string, number>;
12
- /** Only populated by explicit question observation, never by activity polling. */
13
- questions?: NativeQuestionEmission[];
14
- }
15
- export interface NativeQuestionEmission {
16
- /** Byte position of the actual tool call, used to reject pre-registration calls. */
17
- offset: number;
18
- turn_id: string;
19
- call_id: string;
20
- index: number;
21
- title: string;
22
- options?: string[];
23
- accepted: boolean;
24
- }
25
- /** Bounded filename discovery for an existing owner during an explicit update.
26
- * The reader below still verifies native metadata; filenames are not identity.
27
- */
28
- export declare function findNativeTranscript(sessionId: string, env: NodeJS.ProcessEnv): string | null;
29
- /** Unknown, replaced, partial or unowned records never supply activity evidence. */
30
- export declare function readNativeTurnSnapshot(file: unknown, sessionId: string, env: NodeJS.ProcessEnv): NativeTurnSnapshot | null;
31
- /** Observe actual native async-question calls plus their acceptance receipts.
32
- * User messages, quoted examples and injected app-answer envelopes are never
33
- * question emissions. This reads only the same owned, stable bounded tail.
34
- */
35
- export declare function readNativeQuestionSnapshot(file: unknown, sessionId: string, env: NodeJS.ProcessEnv): NativeTurnSnapshot | null;
36
- /** Ownership can be proved even when a long turn exceeds the activity bound. */
37
- export declare function nativeTranscriptOwned(file: unknown, sessionId: string, env: NodeJS.ProcessEnv): boolean;
@@ -1,155 +0,0 @@
1
- /** Read typed lifecycle and optional question records from an owned native transcript. */
2
- import { closeSync, constants, fstatSync, lstatSync, openSync, readSync, realpathSync, readdirSync } from 'node:fs';
3
- import path from 'node:path';
4
- import { configHome } from './install-hooks.js';
5
- const HEADER_BYTES = 64 * 1024;
6
- const TAIL_BYTES = 8 * 1024 * 1024;
7
- /** Bounded filename discovery for an existing owner during an explicit update.
8
- * The reader below still verifies native metadata; filenames are not identity.
9
- */
10
- export function findNativeTranscript(sessionId, env) {
11
- if (!/^[0-9a-f-]{36}$/i.test(sessionId))
12
- return null;
13
- const matches = [];
14
- let remaining = 50_000;
15
- const visit = (directory, depth) => {
16
- for (const entry of readdirSync(directory, { withFileTypes: true })) {
17
- if (--remaining < 0)
18
- throw new Error('discovery-bound');
19
- const file = path.join(directory, entry.name);
20
- if (entry.isDirectory() && depth < 3)
21
- visit(file, depth + 1);
22
- else if (entry.isFile() && entry.name.endsWith(`-${sessionId}.jsonl`))
23
- matches.push(file);
24
- }
25
- };
26
- try {
27
- visit(path.join(configHome(env, 'CODEX_HOME', '.codex'), 'sessions'), 0);
28
- return matches.length === 1 ? matches[0] : null;
29
- }
30
- catch {
31
- return null;
32
- }
33
- }
34
- /** Unknown, replaced, partial or unowned records never supply activity evidence. */
35
- export function readNativeTurnSnapshot(file, sessionId, env) {
36
- const observed = readNativeTranscript(file, sessionId, env, false);
37
- return observed !== null && 'latest' in observed ? observed : null;
38
- }
39
- /** Observe actual native async-question calls plus their acceptance receipts.
40
- * User messages, quoted examples and injected app-answer envelopes are never
41
- * question emissions. This reads only the same owned, stable bounded tail.
42
- */
43
- export function readNativeQuestionSnapshot(file, sessionId, env) {
44
- const observed = readNativeTranscript(file, sessionId, env, false, true);
45
- return observed !== null && 'latest' in observed ? observed : null;
46
- }
47
- /** Ownership can be proved even when a long turn exceeds the activity bound. */
48
- export function nativeTranscriptOwned(file, sessionId, env) {
49
- return readNativeTranscript(file, sessionId, env, true) !== null;
50
- }
51
- function readNativeTranscript(file, sessionId, env, identityOnly, includeQuestions = false) {
52
- if (typeof file !== 'string' || !path.isAbsolute(file))
53
- return null;
54
- let fd;
55
- try {
56
- const sessions = realpathSync(path.join(configHome(env, 'CODEX_HOME', '.codex'), 'sessions'));
57
- const canonical = realpathSync(file);
58
- if (lstatSync(file).isSymbolicLink() || !canonical.startsWith(`${sessions}${path.sep}`))
59
- return null;
60
- fd = openSync(canonical, constants.O_RDONLY | constants.O_NOFOLLOW);
61
- const stat = fstatSync(fd);
62
- if (!stat.isFile() || stat.size === 0)
63
- return null;
64
- const read = (at, count) => {
65
- const bytes = Buffer.alloc(count);
66
- const length = readSync(fd, bytes, 0, count, at);
67
- return bytes.subarray(0, length);
68
- };
69
- const header = read(0, Math.min(HEADER_BYTES, stat.size)).toString('utf8');
70
- const newline = header.indexOf('\n');
71
- if (newline < 0)
72
- return null;
73
- const meta = JSON.parse(header.slice(0, newline));
74
- if (meta.type !== 'session_meta' || meta.payload?.id !== sessionId ||
75
- !['cli', 'vscode', 'exec'].includes(String(meta.payload.source)))
76
- return null;
77
- if (identityOnly)
78
- return { file: canonical, identity: `${stat.dev}:${stat.ino}` };
79
- const at = Math.max(0, stat.size - TAIL_BYTES);
80
- const bytes = read(at, stat.size - at);
81
- // A trailing partial record may be a newer start: do not report an older one.
82
- if (bytes.length !== stat.size - at || bytes.at(-1) !== 10)
83
- return null;
84
- let offset = at === 0 ? 0 : bytes.indexOf(10) + 1;
85
- if (at > 0 && offset === 0)
86
- return null;
87
- let latest;
88
- const positions = new Map();
89
- const questions = [];
90
- const questionCalls = new Set();
91
- const outputs = new Map();
92
- while (offset < bytes.length) {
93
- const end = bytes.indexOf(10, offset);
94
- if (end < 0)
95
- return null;
96
- const line = bytes.subarray(offset, end).toString('utf8');
97
- // Conversation records are skipped without parsing or retaining their payload.
98
- if (line.includes('"event_msg"')) {
99
- const record = JSON.parse(line);
100
- const event = record.type === 'event_msg' ? record.payload : undefined;
101
- if (event?.type === 'task_started' && typeof event.turn_id === 'string') {
102
- latest = { id: event.turn_id, offset: at + offset, ended: false };
103
- positions.set(event.turn_id, at + offset);
104
- }
105
- else if (latest !== undefined && event?.turn_id === latest.id &&
106
- ['task_complete', 'turn_aborted'].includes(event.type ?? '')) {
107
- latest.ended = true;
108
- latest.outcome = event.type === 'turn_aborted' ? 'aborted' : 'completed';
109
- }
110
- }
111
- if (includeQuestions && line.includes('"response_item"')) {
112
- const record = JSON.parse(line);
113
- const item = record.type === 'response_item' ? record.payload : undefined;
114
- if (latest !== undefined && item?.type === 'function_call' && item.name === 'request_user_input_async') {
115
- if (latest.ended || typeof item.call_id !== 'string' || item.call_id.trim() === '' ||
116
- questionCalls.has(item.call_id) || typeof item.arguments !== 'string')
117
- return null;
118
- questionCalls.add(item.call_id);
119
- const args = JSON.parse(item.arguments);
120
- if (!Array.isArray(args.questions) || args.questions.length === 0)
121
- return null;
122
- for (const [index, question] of args.questions.entries()) {
123
- if (question === null || typeof question.title !== 'string' ||
124
- (question.options !== undefined && (!Array.isArray(question.options) || !question.options.every(option => typeof option === 'string'))))
125
- return null;
126
- questions.push({ offset: at + offset, turn_id: latest.id, call_id: item.call_id, index, title: question.title,
127
- ...(question.options === undefined ? {} : { options: question.options }), accepted: false });
128
- }
129
- }
130
- else if (item?.type === 'function_call_output' && typeof item.call_id === 'string' &&
131
- questions.some(question => question.call_id === item.call_id)) {
132
- // Missing, conflicting or repeated receipts cannot prove one emission.
133
- if (outputs.has(item.call_id) || typeof item.output !== 'string')
134
- return null;
135
- const output = JSON.parse(item.output);
136
- outputs.set(item.call_id, output?.accepted === true);
137
- }
138
- }
139
- offset = end + 1;
140
- }
141
- const after = fstatSync(fd);
142
- if (latest === undefined || after.size !== stat.size || after.mtimeMs !== stat.mtimeMs)
143
- return null;
144
- return { file: canonical, identity: `${stat.dev}:${stat.ino}`, size: stat.size, latest, positions,
145
- ...(includeQuestions ? { questions: questions.map(question => ({ ...question, accepted: outputs.get(question.call_id) === true })) } : {}) };
146
- }
147
- catch {
148
- return null;
149
- }
150
- finally {
151
- if (fd !== undefined)
152
- closeSync(fd);
153
- }
154
- }
155
- //# sourceMappingURL=codex-native-turn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-native-turn.js","sourceRoot":"","sources":["../src/codex-native-turn.ts"],"names":[],"mappings":"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"}