@raidiant/notifai 11.7.1-beta.2 → 12.0.0-beta.5

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 +56 -4
  2. package/NOTICE +16 -0
  3. package/THIRD_PARTY_NOTICES +725 -0
  4. package/bin/notifai.mjs +11387 -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,76 +0,0 @@
1
- import type { QuestionT, ReplyAnswerT } from '@raidiant/notifai-protocol';
2
- import type { ServiceIdentity } from './credentials.js';
3
- import type { PendingQuestion, SessionState } from './hook-types.js';
4
- import type { NativeTurnSnapshot } from './codex-native-turn.js';
5
- export interface CodexQuestionBinding {
6
- question: QuestionT;
7
- marker: string;
8
- native?: {
9
- turn_id: string;
10
- call_id: string;
11
- index: number;
12
- };
13
- /** Recomputed from a fresh full registration-turn snapshot before use. */
14
- verified?: true;
15
- /** A second occurrence permanently removes this marker's authority. */
16
- ambiguous?: true;
17
- }
18
- export interface CodexQuestionRegistration {
19
- question_id: string;
20
- owner_key: string;
21
- registration_turn_id: string;
22
- transcript: {
23
- file: string;
24
- identity: string;
25
- registered_offset: number;
26
- };
27
- service_identity: ServiceIdentity;
28
- questions: CodexQuestionBinding[];
29
- /** Positive receipt evidence only; never an unconfirmed reserved ID. */
30
- confirmed_request_id?: string;
31
- /** Ordinary presentation is sticky, including an uncertain stdout write. */
32
- ordinary_only?: true;
33
- /** Explicit retirement/withdrawal cannot become native authority again. */
34
- terminated?: true;
35
- }
36
- export declare function nativeQuestionTitle(binding: CodexQuestionBinding): string;
37
- /** Invocation-local service permission; never stored or reused for later asks. */
38
- export interface NativeQuestionAdmission {
39
- owner_key: string;
40
- turn_id: string;
41
- service: ServiceIdentity;
42
- }
43
- /** Read-only local eligibility. Registration repeats this under its lock. */
44
- export declare function currentCodexQuestionContext(state: SessionState, sessionId: string, env: NodeJS.ProcessEnv): {
45
- owner_key: string;
46
- snapshot: NativeTurnSnapshot;
47
- } | null;
48
- /** Called by registration while holding the session lock. Capability absence
49
- * leaves the ordinary registration untouched and creates no native authority.
50
- */
51
- export declare function reserveCurrentCodexQuestion(state: SessionState, pending: PendingQuestion, sessionId: string, env: NodeJS.ProcessEnv, admission?: NativeQuestionAdmission): SessionState;
52
- /** Caller holds the registration transaction and has proved the current owner.
53
- * Reservation and pending registration must be saved in that single write.
54
- * This creates no native question; only the agent's real tool call can do that.
55
- */
56
- export declare function reserveCodexQuestion(state: SessionState, pending: PendingQuestion, key: string, snapshot: NativeTurnSnapshot): SessionState;
57
- /** Count every marker occurrence before shape filtering. A changed-options
58
- * duplicate is still ambiguous. Missing/truncated/replaced evidence removes
59
- * current eligibility without forgetting the original tuple or ambiguity.
60
- */
61
- export declare function observeCodexQuestions(state: SessionState, key: string, snapshot: NativeTurnSnapshot | null): SessionState;
62
- /** Mark in the same transaction that consumes the ordinary app answer. */
63
- export declare function markCodexOrdinaryPresentation(state: SessionState, questionIds: ReadonlySet<string>): SessionState;
64
- /** Explicit cancellation only, in the transaction selecting the questions. */
65
- export declare function terminateCodexQuestions(state: SessionState, ids: ReadonlySet<string>): SessionState;
66
- /** Reservation protects early native answers before the emission observer runs.
67
- * Apply after matching all pending questions, so sibling ambiguity is preserved.
68
- */
69
- export declare function mayRetireFromPrompt(state: SessionState, pending: PendingQuestion): boolean;
70
- /** The caller refreshes observation under the owner fence before admission.
71
- * A fresh native answer remains reportable after ordinary app presentation.
72
- */
73
- export declare function admitBoundNativeAnswer(state: SessionState, questionId: string, key: string, service: ServiceIdentity, answers: ReplyAnswerT[]): {
74
- requestId?: string;
75
- service: ServiceIdentity;
76
- };
@@ -1,151 +0,0 @@
1
- /** Local association of registered questions with actual accepted Codex forms. */
2
- import { isDeepStrictEqual } from 'node:util';
3
- import { readNativeQuestionSnapshot } from './codex-native-turn.js';
4
- import { readSessionIncarnation, sessionHasEnded } from './hook-session-state.js';
5
- import { currentCodexTurn } from './session-attendant-state.js';
6
- import { processIdentityLiveness } from './process-identity.js';
7
- export function nativeQuestionTitle(binding) {
8
- return `[nf:${binding.marker}] ${binding.question.text}`;
9
- }
10
- /** Read-only local eligibility. Registration repeats this under its lock. */
11
- export function currentCodexQuestionContext(state, sessionId, env) {
12
- const owner = readSessionIncarnation(sessionId, env);
13
- const proof = state.codex_native_turn;
14
- if (state.harness !== 'codex' || owner === null || proof?.key !== owner.key || sessionHasEnded(sessionId, env) ||
15
- owner.harness_process === undefined || processIdentityLiveness(owner.harness_process) !== 'alive' ||
16
- state.codex_tool_hook?.incarnation !== owner.incarnation || state.codex_tool_hook.root_observed?.turn_id !== proof.turn_id ||
17
- currentCodexTurn(sessionId, env, owner.key) !== proof.turn_id)
18
- return null;
19
- const snapshot = readNativeQuestionSnapshot(proof.transcript_path, sessionId, env);
20
- if (snapshot === null || snapshot.latest.id !== proof.turn_id || snapshot.latest.ended)
21
- return null;
22
- return { owner_key: owner.key, snapshot };
23
- }
24
- /** Called by registration while holding the session lock. Capability absence
25
- * leaves the ordinary registration untouched and creates no native authority.
26
- */
27
- export function reserveCurrentCodexQuestion(state, pending, sessionId, env, admission) {
28
- if (admission === undefined || !isDeepStrictEqual(admission.service, pending.service_identity))
29
- return state;
30
- const current = currentCodexQuestionContext(state, sessionId, env);
31
- if (current === null || current.owner_key !== admission.owner_key || current.snapshot.latest.id !== admission.turn_id)
32
- return state;
33
- return reserveCodexQuestion(state, pending, current.owner_key, current.snapshot);
34
- }
35
- /** Caller holds the registration transaction and has proved the current owner.
36
- * Reservation and pending registration must be saved in that single write.
37
- * This creates no native question; only the agent's real tool call can do that.
38
- */
39
- export function reserveCodexQuestion(state, pending, key, snapshot) {
40
- if (state.harness !== 'codex' || pending.question_id === undefined || pending.service_identity === undefined ||
41
- snapshot.latest.ended || snapshot.questions === undefined || !snapshot.positions.has(snapshot.latest.id) ||
42
- pending.questions === undefined || pending.questions.length === 0 ||
43
- pending.questions.some(question => question.multi === true) ||
44
- state.codex_question_bindings?.some(item => item.question_id === pending.question_id))
45
- return state;
46
- const used = new Set((state.codex_question_bindings ?? []).flatMap(item => item.questions.map(q => q.marker)));
47
- // Avoid even an unrelated previously emitted marker visible in this turn.
48
- for (const emission of snapshot.questions) {
49
- for (const match of emission.title.matchAll(/\[nf:([0-9A-Z]+)\]/g))
50
- used.add(match[1]);
51
- }
52
- let counter = state.codex_question_marker_counter ?? 0;
53
- if (!Number.isSafeInteger(counter) || counter < 0)
54
- return state;
55
- const questions = [];
56
- for (const question of pending.questions) {
57
- let marker;
58
- do {
59
- if (counter >= Number.MAX_SAFE_INTEGER)
60
- return state;
61
- marker = (++counter).toString(36).toUpperCase().padStart(3, '0');
62
- } while (used.has(marker));
63
- used.add(marker);
64
- questions.push({ question: structuredClone(question), marker });
65
- }
66
- return { ...state, codex_question_marker_counter: counter, codex_question_bindings: [
67
- ...(state.codex_question_bindings ?? []), {
68
- question_id: pending.question_id, owner_key: key, registration_turn_id: snapshot.latest.id,
69
- transcript: { file: snapshot.file, identity: snapshot.identity, registered_offset: snapshot.size },
70
- service_identity: { ...pending.service_identity }, questions,
71
- },
72
- ] };
73
- }
74
- /** Count every marker occurrence before shape filtering. A changed-options
75
- * duplicate is still ambiguous. Missing/truncated/replaced evidence removes
76
- * current eligibility without forgetting the original tuple or ambiguity.
77
- */
78
- export function observeCodexQuestions(state, key, snapshot) {
79
- if (state.codex_question_bindings === undefined)
80
- return state;
81
- return { ...state, codex_question_bindings: state.codex_question_bindings.map(registration => {
82
- const covered = registration.terminated !== true && registration.owner_key === key && snapshot !== null &&
83
- snapshot.file === registration.transcript.file && snapshot.identity === registration.transcript.identity &&
84
- snapshot.size >= registration.transcript.registered_offset && snapshot.positions.has(registration.registration_turn_id);
85
- return { ...registration, questions: registration.questions.map(binding => {
86
- const next = { ...binding };
87
- delete next.verified;
88
- if (!covered || binding.ambiguous === true)
89
- return next;
90
- const matches = snapshot.questions?.filter(emission => emission.accepted && emission.title.includes(`[nf:${binding.marker}]`)) ?? [];
91
- // Count multiple copies of the token in a single title as ambiguous too.
92
- if (matches.length > 1 || matches.some(emission => emission.title.split(`[nf:${binding.marker}]`).length !== 2)) {
93
- return { ...next, ambiguous: true };
94
- }
95
- const emission = matches[0];
96
- if (emission === undefined || emission.offset < registration.transcript.registered_offset ||
97
- emission.turn_id !== registration.registration_turn_id ||
98
- emission.title !== nativeQuestionTitle(binding) ||
99
- !isDeepStrictEqual(emission.options, binding.question.choices?.map(choice => choice.label)))
100
- return next;
101
- const native = { turn_id: emission.turn_id, call_id: emission.call_id, index: emission.index };
102
- if (binding.native !== undefined && !isDeepStrictEqual(binding.native, native))
103
- return { ...next, ambiguous: true };
104
- return { ...next, native, verified: true };
105
- }) };
106
- }) };
107
- }
108
- /** Mark in the same transaction that consumes the ordinary app answer. */
109
- export function markCodexOrdinaryPresentation(state, questionIds) {
110
- if (!state.codex_question_bindings?.some(item => questionIds.has(item.question_id)))
111
- return state;
112
- return { ...state, codex_question_bindings: state.codex_question_bindings.map(item => questionIds.has(item.question_id) ? { ...item, ordinary_only: true } : item) };
113
- }
114
- /** Explicit cancellation only, in the transaction selecting the questions. */
115
- export function terminateCodexQuestions(state, ids) {
116
- if (state.codex_question_bindings === undefined)
117
- return state;
118
- return { ...state, codex_question_bindings: state.codex_question_bindings.map(binding => ids.has(binding.question_id) || (binding.confirmed_request_id !== undefined && ids.has(binding.confirmed_request_id))
119
- ? { ...binding, terminated: true } : binding),
120
- };
121
- }
122
- /** Reservation protects early native answers before the emission observer runs.
123
- * Apply after matching all pending questions, so sibling ambiguity is preserved.
124
- */
125
- export function mayRetireFromPrompt(state, pending) {
126
- return !state.codex_question_bindings?.some(item => item.question_id === pending.question_id);
127
- }
128
- /** The caller refreshes observation under the owner fence before admission.
129
- * A fresh native answer remains reportable after ordinary app presentation.
130
- */
131
- export function admitBoundNativeAnswer(state, questionId, key, service, answers) {
132
- const registration = state.codex_question_bindings?.find(item => item.question_id === questionId);
133
- if (registration === undefined || registration.terminated === true || registration.owner_key !== key || !isDeepStrictEqual(registration.service_identity, service)) {
134
- throw new Error('The native question is not registered to this owner and Approved Machine.');
135
- }
136
- if (answers.length === 0 || new Set(answers.map(answer => answer.question_id)).size !== answers.length)
137
- throw new Error('Native answers must name distinct registered questions.');
138
- for (const answer of answers) {
139
- const binding = registration.questions.find(item => item.question.id === answer.question_id);
140
- const choices = answer.choice_ids ?? [];
141
- if (binding?.verified !== true || binding.native === undefined || binding.ambiguous === true ||
142
- new Set(choices).size !== choices.length || (binding.question.multi !== true && choices.length > 1) ||
143
- choices.some(id => !binding.question.choices?.some(choice => choice.id === id)) ||
144
- (choices.length === 0 && !answer.text?.trim())) {
145
- throw new Error('The answer does not match one verified native question and its registered choices.');
146
- }
147
- }
148
- return { service: registration.service_identity,
149
- ...(registration.confirmed_request_id === undefined ? {} : { requestId: registration.confirmed_request_id }) };
150
- }
151
- //# sourceMappingURL=codex-question-bindings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-question-bindings.js","sourceRoot":"","sources":["../src/codex-question-bindings.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- export interface NativeQueueItem {
2
- id: string;
3
- clientUserMessageId: string;
4
- input: Array<{
5
- type: string;
6
- text?: string;
7
- }>;
8
- }
9
- export interface QueueControl {
10
- namespace: string;
11
- threadId: string;
12
- add(token: string, text: string): Promise<string>;
13
- find(token: string, text: string): Promise<'absent' | 'ambiguous' | {
14
- id: string;
15
- }>;
16
- remove(id: string): Promise<boolean>;
17
- close(): void;
18
- }
19
- /** Missing queue capability is a preflight result. Errors after add starts
20
- * remain uncertain acceptance and cannot authorize another writer. */
21
- export declare function connectCodexQueue(sessionId: string, env: NodeJS.ProcessEnv, deadlineAt: number, now?: () => number, unavailable?: (stage: string) => void): Promise<QueueControl | null>;
@@ -1,59 +0,0 @@
1
- /** Optional exact queue capability on a verified existing Codex connection. */
2
- import { connectCodexControl } from './codex-native-control.js';
3
- /** Missing queue capability is a preflight result. Errors after add starts
4
- * remain uncertain acceptance and cannot authorize another writer. */
5
- export async function connectCodexQueue(sessionId, env, deadlineAt, now = () => performance.now(), unavailable) {
6
- const control = await connectCodexControl(sessionId, env, deadlineAt, now, unavailable);
7
- if (control === null)
8
- return null;
9
- const call = control.call;
10
- try {
11
- const list = async () => {
12
- const all = [];
13
- let cursor = null;
14
- for (let page = 0; page < 16; page += 1) {
15
- const result = await call('thread/queue/list', { threadId: sessionId, ...(cursor === null ? {} : { cursor }) });
16
- if (!Array.isArray(result.data) || !result.data.every(item => typeof item.id === 'string' && typeof item.clientUserMessageId === 'string' && Array.isArray(item.input)))
17
- throw new Error('Unrecognized native queue response');
18
- all.push(...result.data);
19
- if (result.nextCursor === null)
20
- return all;
21
- if (typeof result.nextCursor !== 'string' || result.nextCursor === cursor)
22
- throw new Error('Unrecognized native queue cursor');
23
- cursor = result.nextCursor;
24
- }
25
- throw new Error('Native queue inspection exceeded its bound');
26
- };
27
- await list(); // Capability check before any mutation or election.
28
- return {
29
- namespace: control.namespace,
30
- threadId: sessionId,
31
- add: async (token, text) => {
32
- const response = await call('thread/queue/add', { threadId: sessionId, clientUserMessageId: token, input: [{ type: 'text', text }] });
33
- if (typeof response.queuedSubmission?.id !== 'string' || response.queuedSubmission.clientUserMessageId !== token)
34
- throw new Error('Native queue receipt unknown');
35
- return response.queuedSubmission.id;
36
- },
37
- find: async (token, text) => {
38
- const matches = (await list()).filter(item => item.clientUserMessageId === token);
39
- if (matches.length === 0)
40
- return 'absent';
41
- const match = matches[0];
42
- return matches.length === 1 && match.input.length === 1 && match.input[0]?.type === 'text' && match.input[0].text === text ? { id: match.id } : 'ambiguous';
43
- },
44
- remove: async (id) => {
45
- const result = await call('thread/queue/delete', { threadId: sessionId, queuedSubmissionId: id });
46
- if (typeof result.deleted !== 'boolean')
47
- throw new Error('Native queue deletion unknown');
48
- return result.deleted;
49
- },
50
- close: () => control.close(),
51
- };
52
- }
53
- catch {
54
- control.close();
55
- unavailable?.('queue-list');
56
- return null;
57
- }
58
- }
59
- //# sourceMappingURL=codex-queue-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-queue-control.js","sourceRoot":"","sources":["../src/codex-queue-control.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { type CommandDeps } from './commands-core.js';
2
- import type { HookEnvelope } from './hook-types.js';
3
- import type { Logger } from './logging.js';
4
- export declare function codexToolHookReady(deps: Pick<CommandDeps, 'env' | 'hookAdapterHome' | 'hookPlatform'>, sessionId: string): boolean;
5
- export declare const CODEX_TOOL_HOOK_RECOVERY = "Wait for a real tool callback in this turn. If tools complete but this remains unverified, Codex may retain an older hook configuration in memory even when /hooks lists trusted, active definitions. In the existing session, open /hooks and toggle only the already-trusted Notifai PostToolUse handler off and back on to refresh it, then verify the next callback. Do not change approvals or end the Agent Session. The ordinary queue can wait until the active turn finishes; queue acceptance does not prove busy delivery.";
6
- /** Notes and answers share one bounded stdout document at the trusted boundary. */
7
- export declare function deliverCodexToolMessage(deps: CommandDeps, envelope: HookEnvelope, logger: Logger): Promise<void>;
@@ -1,126 +0,0 @@
1
- /** A trusted Codex tool boundary observes the turn and drains shared pending input. */
2
- import { drainSessionInputs, hasSessionInputs } from './session-inputs.js';
3
- import { makeClient } from './commands-core.js';
4
- import { readSessionIncarnation, readSessionState, sessionHasEnded, updateSessionState } from './hook-session-state.js';
5
- import { codexHookIdentityHash, codexTrustKey, codexTrustProblems, findInstallations, handlerEvent } from './install-hooks.js';
6
- import { currentProcessIdentity, processIdentityLiveness } from './process-identity.js';
7
- import { currentCodexTurn, readAttendantLease, recordTurnStart } from './session-attendant-state.js';
8
- import { refreshCodexInputActivity } from './codex-input-lifecycle.js';
9
- import { readNativeQuestionSnapshot } from './codex-native-turn.js';
10
- import { observeCodexQuestions } from './codex-question-bindings.js';
11
- import { codexAnswerPresentation } from './codex-answer-presentation.js';
12
- import { isDeepStrictEqual } from 'node:util';
13
- /** Missing, disabled, changed or untrusted hooks retain ordinary queue delivery. */
14
- function toolHookFingerprint(deps) {
15
- const installations = findInstallations(deps.env, deps.hookAdapterHome, deps.hookPlatform)
16
- .filter((installation) => installation.harness === 'codex');
17
- if (installations.some((installation) => (installation.problems ?? []).length > 0))
18
- return null;
19
- const hooks = installations.flatMap((installation) => installation.handlers
20
- .filter((handler) => ['post-tool-use', 'user-prompt-submit'].includes(handlerEvent(handler.command) ?? ''))
21
- .map((handler) => ({ installation, handler })));
22
- if (hooks.length !== 2 || !['PostToolUse', 'UserPromptSubmit'].every((event) => hooks.some(({ handler }) => handler.event === event)))
23
- return null;
24
- if (hooks.some(({ installation, handler }) => handler.async === true || handler.asyncRewake === true ||
25
- codexTrustProblems([{ ...installation, handlers: [handler] }], deps.env).length !== 0))
26
- return null;
27
- return hooks.map(({ installation, handler }) => `${codexTrustKey(installation, handler)}:${codexHookIdentityHash(handler)}`).sort().join('|');
28
- }
29
- export function codexToolHookReady(deps, sessionId) {
30
- const fingerprint = toolHookFingerprint(deps);
31
- const proof = readSessionState(sessionId, deps.env).codex_tool_hook;
32
- const incarnation = readSessionIncarnation(sessionId, deps.env);
33
- const turn = incarnation === null ? null : currentCodexTurn(sessionId, deps.env, incarnation.key);
34
- return fingerprint !== null && proof?.fingerprint === fingerprint &&
35
- proof.incarnation === incarnation?.incarnation && proof.root_observed !== undefined &&
36
- (turn === null || proof.root_observed.turn_id === turn);
37
- }
38
- export const CODEX_TOOL_HOOK_RECOVERY = 'Wait for a real tool callback in this turn. If tools complete but this remains unverified, Codex may retain an older hook configuration in memory even when /hooks lists trusted, active definitions. In the existing session, open /hooks and toggle only the already-trusted Notifai PostToolUse handler off and back on to refresh it, then verify the next callback. Do not change approvals or end the Agent Session. The ordinary queue can wait until the active turn finishes; queue acceptance does not prove busy delivery.';
39
- /** Notes and answers share one bounded stdout document at the trusted boundary. */
40
- export async function deliverCodexToolMessage(deps, envelope, logger) {
41
- const sessionId = envelope.session_id;
42
- if (sessionId === undefined || envelope.hook_event_name !== 'PostToolUse' ||
43
- typeof envelope.turn_id !== 'string' || envelope.turn_id === '')
44
- return;
45
- const incarnation = readSessionIncarnation(sessionId, deps.env);
46
- const sourcePid = Number(deps.env['NOTIFAI_HOOK_SOURCE_PID']);
47
- const owner = incarnation?.harness_process;
48
- if (incarnation === null || owner === undefined || owner.pid !== sourcePid)
49
- return;
50
- const ownsRoot = () => {
51
- const current = readSessionIncarnation(sessionId, deps.env);
52
- return !sessionHasEnded(sessionId, deps.env) && current?.key === incarnation.key &&
53
- current.incarnation === incarnation.incarnation &&
54
- processIdentityLiveness(owner) === 'alive';
55
- };
56
- // Seeing a definition on disk does not prove an already-running Codex loaded
57
- // it. Only this exact session's real tool invocation enables busy delivery.
58
- const fingerprint = toolHookFingerprint(deps);
59
- if (fingerprint === null || !ownsRoot())
60
- return;
61
- // Automatic continuations need not emit UserPromptSubmit. A trusted,
62
- // synchronous tool callback from this exact owner is also a turn observation.
63
- // recordTurnStart ignores previously seen/ended turns, so a late callback
64
- // cannot resurrect an interrupted turn or replace a newer observed turn.
65
- if (currentCodexTurn(sessionId, deps.env, incarnation.key) !== envelope.turn_id) {
66
- recordTurnStart(sessionId, deps.env, incarnation.key, envelope.turn_id);
67
- }
68
- const mayObserve = () => ownsRoot() &&
69
- currentCodexTurn(sessionId, deps.env, incarnation.key) === envelope.turn_id;
70
- if (!mayObserve())
71
- return;
72
- refreshCodexInputActivity(sessionId, deps.env, incarnation.key, envelope.transcript_path);
73
- if (!mayObserve())
74
- return;
75
- if (readSessionState(sessionId, deps.env).codex_question_bindings?.length) {
76
- const snapshot = readNativeQuestionSnapshot(envelope.transcript_path, sessionId, deps.env);
77
- updateSessionState(sessionId, deps.env, state => mayObserve() ? observeCodexQuestions(state, incarnation.key, snapshot) : state);
78
- }
79
- const proof = readSessionState(sessionId, deps.env).codex_tool_hook;
80
- if (proof?.incarnation !== incarnation.incarnation || proof.fingerprint !== fingerprint ||
81
- proof.root_observed?.turn_id !== envelope.turn_id) {
82
- updateSessionState(sessionId, deps.env, (state) => !mayObserve() ? state : ({
83
- ...state, codex_tool_hook: { incarnation: incarnation.incarnation, fingerprint,
84
- root_observed: { turn_id: envelope.turn_id, at: (deps.now ?? Date.now)() } },
85
- }));
86
- }
87
- // A fresh session may have no service lease until its first question exists.
88
- // Callback evidence permits registration; only a current lease permits input.
89
- const lease = readAttendantLease(sessionId, deps.env);
90
- if (lease === null || lease.incarnation !== incarnation.incarnation)
91
- return;
92
- const mayWrite = () => {
93
- const current = readAttendantLease(sessionId, deps.env);
94
- return mayObserve() && current?.incarnation === lease.incarnation && current.generation === lease.generation;
95
- };
96
- if (!hasSessionInputs(sessionId, deps.env, lease) || !mayWrite())
97
- return;
98
- const credential = deps.store.load();
99
- const writer = currentProcessIdentity();
100
- if (credential === null || writer === null)
101
- return;
102
- const now = deps.now ?? Date.now;
103
- const deadlineAt = now() + 2_000;
104
- const mayDeliver = () => now() < deadlineAt && mayWrite();
105
- const client = makeClient(deps, credential.baseUrl, `Bearer nfm_${credential.machineId}.${credential.secret}`, {
106
- timeoutMs: 750, deadlineAt, now,
107
- });
108
- await drainSessionInputs({
109
- lease,
110
- mayWrite: mayDeliver,
111
- nativeAnswers: codexAnswerPresentation({ sessionId, env: deps.env, lease, ownerKey: incarnation.key,
112
- turnId: envelope.turn_id, transcriptPath: envelope.transcript_path,
113
- service: { base_url: credential.baseUrl, machine_id: credential.machineId },
114
- deadline: performance.now() + 2_000, mayWrite: mayDeliver,
115
- serviceCurrent: () => isDeepStrictEqual(deps.store.load(), credential) }),
116
- sequencer: {
117
- sessionId, env: deps.env, client, writer, log: logger,
118
- monotonic: () => performance.now(), wall: now,
119
- recoveryDeadline: performance.now() + 500,
120
- sleep: async (ms) => { if (now() < deadlineAt)
121
- await new Promise((resolve) => setTimeout(resolve, Math.min(ms, deadlineAt - now()))); },
122
- },
123
- write: (text) => deps.io.out(JSON.stringify({ hookSpecificOutput: { hookEventName: 'PostToolUse', additionalContext: text } })),
124
- });
125
- }
126
- //# sourceMappingURL=codex-tool-messages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-tool-messages.js","sourceRoot":"","sources":["../src/codex-tool-messages.ts"],"names":[],"mappings":"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"}
@@ -1,58 +0,0 @@
1
- import { type EscalationDeliveryRoute } from './hook-types.js';
2
- /**
3
- * The per-thread durable inbox `codex queue` writes to, relative to `$CODEX_HOME`.
4
- *
5
- * Named for diagnostics only. Notifai never opens it: the schema is private to
6
- * Codex, versioned by its own migration table, and the supported writer is the
7
- * CLI. Reading it here would couple Notifai to an internal shape it does not own.
8
- */
9
- export declare const CODEX_QUEUE_STORE_FILE = "queue_1.sqlite";
10
- export interface CodexWakeAdapters {
11
- /**
12
- * Write one message into the thread's durable inbox via `codex queue`.
13
- * `onSpawn` receives the child's own process group as soon as it exists.
14
- * When `signal` aborts, the whole group is killed and the call rejects:
15
- * a claimed write never outlives its claim.
16
- */
17
- queue(threadId: string, cwd: string, context: string, onSpawn?: (pgid: number) => void, signal?: AbortSignal): Promise<void>;
18
- /**
19
- * Whether the `codex` executable `queue` runs can be found at all. A
20
- * resident writer asks once, before it offers to take Session Messages.
21
- */
22
- available?(): boolean;
23
- }
24
- export type CodexQueueReadiness = {
25
- state: 'ready';
26
- threadId: string;
27
- } | {
28
- state: 'unavailable';
29
- reason: string;
30
- };
31
- export declare function codexHome(env: NodeJS.ProcessEnv): string;
32
- export declare function codexQueueStorePath(env: NodeJS.ProcessEnv): string;
33
- /**
34
- * Whether this Stop hook could queue an answer into its own thread.
35
- *
36
- * The only precondition the route actually has is an exact thread id: queueing
37
- * needs no writer lock, no daemon, no socket and no platform syscall, and it
38
- * succeeds against a live, busy or stopped thread alike. The absence of the
39
- * queue store is deliberately *not* a blocker — Codex creates it on first
40
- * write — so this reports readiness, never a store-existence gate.
41
- */
42
- export declare function inspectCodexQueue(threadId: string | undefined, _env: NodeJS.ProcessEnv): CodexQueueReadiness;
43
- /**
44
- * Low-level exact-thread wake transport. Production callers wrap this route
45
- * with sessionInputRoute: only a content-free wake goes into the native queue,
46
- * and the foreground consumer claims current input immediately before stdout.
47
- *
48
- * Queue exit 0 proves storage, never presentation. A busy owner may consume
49
- * the wake much later; an exited thread keeps it until reopened. There is no
50
- * cold-resume path here, which would consume the queue and a repeated prompt.
51
- */
52
- export declare function codexWakeRoute(options: {
53
- threadId: string;
54
- cwd: string;
55
- env?: NodeJS.ProcessEnv;
56
- adapters?: CodexWakeAdapters;
57
- }): EscalationDeliveryRoute;
58
- export declare function systemCodexWakeAdapters(env?: NodeJS.ProcessEnv): CodexWakeAdapters;