@raidiant/notifai 11.7.1 → 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 +48 -0
  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,74 +0,0 @@
1
- /** Durable question retirement, including cross-session orphan recovery. */
2
- import type { CloseDisposition, CloseRepliesResponse, LifecycleEndState, ListRepliesResponse } from '@raidiant/notifai-protocol';
3
- import type { HookContext, HookEnvelope, PendingQuestion, RetiringQuestion } from './hook-types.js';
4
- /**
5
- * Everything retirement needs. Narrower than a HookContext on purpose:
6
- * explicit close is a plain command with no hook payload, no idle probe and
7
- * nothing to sleep for. Independent asks never supersede each other.
8
- */
9
- export type RetireDeps = Pick<HookContext, 'client' | 'config'> & Pick<Partial<HookContext>, 'log'>;
10
- /**
11
- * Close is a server-side serialization fence: a successful response contains
12
- * every reply that committed before the window closed. `null` is deliberately
13
- * different from an empty reply set — it means ownership could not be proven
14
- * final and the local record must stay recoverable.
15
- *
16
- * `disposition` tells the service why this close happens, and the first close
17
- * that ends an open window keeps its reason: `deliver` only from a waiter that
18
- * will claim the fenced answer before handing it off, `retire` from every
19
- * retirement. Answer collection that hands off unclaimed sends none, so its
20
- * answer is honestly not editable after the fence.
21
- */
22
- export declare function finalizeReplies(ctx: RetireDeps, requestId: string, disposition?: CloseDisposition): Promise<ListRepliesResponse | CloseRepliesResponse | null>;
23
- /** Whether this close selected the answer it returned for a claimed hand-off. */
24
- export declare function selectedForClaimedDelivery(response: ListRepliesResponse | CloseRepliesResponse | null | undefined): boolean;
25
- /** Best effort only for already-journaled retirement debt. */
26
- export declare function closeQuietly(ctx: RetireDeps, requestId: string): Promise<void>;
27
- /**
28
- * Park a delivered question for retirement. Called at the moment we learn it is
29
- * dead, which is frequently not a moment we can reach the network.
30
- *
31
- * Nothing is parked for a question that never reached a device: with no
32
- * request_id there is nothing on any device to retire.
33
- */
34
- export declare function parkForRetirement(sessionId: string, env: NodeJS.ProcessEnv, pending: PendingQuestion, state: LifecycleEndState): void;
35
- /**
36
- * Stop queued retries under the same lock as admission. Preparations that
37
- * never started are withdrawn silently; admitted attempts retain their exact
38
- * retirement identity even if their receipt is still in flight or was lost.
39
- */
40
- export declare function retireQueuedQuestions(sessionId: string, env: NodeJS.ProcessEnv, questionId?: string): {
41
- withdrawn: PendingQuestion[];
42
- retiring: RetiringQuestion[];
43
- };
44
- /**
45
- * Convert live question state into a complete retirement instruction.
46
- *
47
- * A request/collapse pair without the original Delivery targets is not safe to
48
- * send: re-resolving today's routing can miss a device that still shows the
49
- * question or retire a device that never received it. Fail explicitly and keep
50
- * the pending record instead of silently broadening or narrowing the fanout.
51
- */
52
- export declare function retiringQuestion(pending: PendingQuestion, state: LifecycleEndState, cwd?: string): RetiringQuestion | null;
53
- /**
54
- * Which outstanding questions this prompt plausibly answers.
55
- *
56
- * A unique closed-choice match is enough. A short confirmation such as "done"
57
- * matches only when exactly one question is outstanding. Long unrelated
58
- * prompts leave every question open for the reply window.
59
- */
60
- export declare function pendingAnsweredByPrompt(prompt: string | undefined, pending: readonly PendingQuestion[]): PendingQuestion[];
61
- /**
62
- * Send every parked retirement, and forget the ones that landed. A failure
63
- * leaves the entry in place for the next hook rather than losing it, which is
64
- * the whole reason the queue exists.
65
- */
66
- export declare function drainRetirements(ctx: RetireDeps, sessionId: string, env: NodeJS.ProcessEnv): Promise<string[]>;
67
- /** Move retirements into the global queue; deduped so a retry costs nothing. */
68
- export declare function orphanRetirements(env: NodeJS.ProcessEnv, entries: RetiringQuestion[], now: number): void;
69
- /**
70
- * Retire everything a dead session left behind. Failures stay queued for the
71
- * next holder of a client; entries past the TTL are dropped as already dead.
72
- */
73
- export declare function drainOrphanRetirements(ctx: RetireDeps, env: NodeJS.ProcessEnv, now: number): Promise<string[]>;
74
- export declare function retirePendings(ctx: HookContext, envelope: HookEnvelope, sessionId: string, entries: PendingQuestion[], state: LifecycleEndState): Promise<void>;
@@ -1,314 +0,0 @@
1
- import { REPLY_MAX_WINDOW_SECONDS } from '@raidiant/notifai-protocol';
2
- import { existsSync, readFileSync } from 'node:fs';
3
- import path from 'node:path';
4
- import { atomicWriteFileSync } from './atomic-file.js';
5
- import { terminateCodexQuestions } from './codex-question-bindings.js';
6
- import { stateDir } from './config.js';
7
- import { withFileLock } from './file-lock.js';
8
- import { isSamePending, questionSubmissionAttempted, rememberQuestionState, sourceContextAtHookEvent, } from './hook-question-state.js';
9
- import { pendingList, readSessionState, updateSessionState } from './hook-session-state.js';
10
- /**
11
- * A retirement is only worth syncing while the question it retires could still
12
- * be answered, so this has to outlive the longest reply window a user can
13
- * choose — it is derived from that bound rather than from a guess about how
14
- * long questions stay open, which is exactly the assumption that broke when
15
- * the window stopped being one hour. Past it the companion shows the question
16
- * as dead on next open anyway. Also the backstop that keeps an unreachable
17
- * server from growing the queue for ever.
18
- */
19
- const ORPHAN_TTL_MS = (REPLY_MAX_WINDOW_SECONDS + 3600) * 1000;
20
- /** More orphans than this means something is looping; keep the newest. */
21
- const ORPHAN_QUEUE_CAP = 50;
22
- /**
23
- * Close is a server-side serialization fence: a successful response contains
24
- * every reply that committed before the window closed. `null` is deliberately
25
- * different from an empty reply set — it means ownership could not be proven
26
- * final and the local record must stay recoverable.
27
- *
28
- * `disposition` tells the service why this close happens, and the first close
29
- * that ends an open window keeps its reason: `deliver` only from a waiter that
30
- * will claim the fenced answer before handing it off, `retire` from every
31
- * retirement. Answer collection that hands off unclaimed sends none, so its
32
- * answer is honestly not editable after the fence.
33
- */
34
- export async function finalizeReplies(ctx, requestId, disposition) {
35
- try {
36
- return disposition === undefined
37
- ? await ctx.client.closeReplies(requestId)
38
- : await ctx.client.closeReplies(requestId, disposition);
39
- }
40
- catch {
41
- return null;
42
- }
43
- }
44
- /** Whether this close selected the answer it returned for a claimed hand-off. */
45
- export function selectedForClaimedDelivery(response) {
46
- return (response !== null &&
47
- response !== undefined &&
48
- 'close_disposition' in response &&
49
- response.close_disposition === 'deliver' &&
50
- response.delivered_reply_seq !== null &&
51
- response.delivered_reply_seq === response.replies.at(-1)?.seq);
52
- }
53
- /** Best effort only for already-journaled retirement debt. */
54
- export async function closeQuietly(ctx, requestId) {
55
- await finalizeReplies(ctx, requestId, 'retire');
56
- }
57
- /**
58
- * Close the reply window so the server can mint the retirement push. Client
59
- * submissions cannot carry `question_retired`; that event is reserved for
60
- * server-origin state syncs.
61
- */
62
- async function proveRetirement(ctx, requestId) {
63
- const response = await finalizeReplies(ctx, requestId, 'retire');
64
- const proven = response !== null;
65
- ctx.log?.info('hook.retirement', {
66
- request_id: requestId,
67
- attempted: true,
68
- proven,
69
- });
70
- return proven;
71
- }
72
- /**
73
- * Park a delivered question for retirement. Called at the moment we learn it is
74
- * dead, which is frequently not a moment we can reach the network.
75
- *
76
- * Nothing is parked for a question that never reached a device: with no
77
- * request_id there is nothing on any device to retire.
78
- */
79
- export function parkForRetirement(sessionId, env, pending, state) {
80
- const retirement = retiringQuestion(pending, state);
81
- if (retirement === null)
82
- return;
83
- updateSessionState(sessionId, env, (current) => {
84
- const already = current.retiring ?? [];
85
- const existing = already.findIndex((entry) => entry.request_id === retirement.request_id);
86
- if (existing < 0) {
87
- return rememberQuestionState({ ...current, retiring: [...already, retirement] }, pending, state === 'answered' ? 'answered' : 'retired');
88
- }
89
- const retiring = [...already];
90
- // An observed answer is final truth and upgrades an earlier supersession
91
- // parked while the submission callback was racing a newer question.
92
- if (retirement.state === 'answered' && retiring[existing].state !== 'answered') {
93
- retiring[existing] = retirement;
94
- }
95
- return rememberQuestionState({ ...current, retiring }, pending, state === 'answered' ? 'answered' : 'retired');
96
- });
97
- }
98
- /**
99
- * Stop queued retries under the same lock as admission. Preparations that
100
- * never started are withdrawn silently; admitted attempts retain their exact
101
- * retirement identity even if their receipt is still in flight or was lost.
102
- */
103
- export function retireQueuedQuestions(sessionId, env, questionId) {
104
- const withdrawn = [];
105
- const retiring = [];
106
- updateSessionState(sessionId, env, (current) => {
107
- const selected = pendingList(current).filter((entry) => entry.request_id === undefined &&
108
- (questionId === undefined || entry.question_id === questionId));
109
- const remaining = pendingList(current).filter((entry) => !selected.includes(entry));
110
- let next = terminateCodexQuestions({ ...current }, new Set(selected.flatMap(entry => entry.question_id === undefined ? [] : [entry.question_id])));
111
- if (remaining.length > 0)
112
- next.pending = remaining;
113
- else
114
- delete next.pending;
115
- for (const entry of selected) {
116
- if (questionSubmissionAttempted(entry)) {
117
- const retirement = retiringQuestion(entry, 'answered_elsewhere');
118
- retiring.push(retirement);
119
- const queue = [...(next.retiring ?? [])];
120
- if (!queue.some((item) => item.request_id === retirement.request_id))
121
- queue.push(retirement);
122
- next = rememberQuestionState({ ...next, retiring: queue }, entry, 'retired');
123
- }
124
- else {
125
- withdrawn.push(entry);
126
- next = rememberQuestionState(next, entry, 'withdrawn');
127
- }
128
- }
129
- return next;
130
- });
131
- return { withdrawn, retiring };
132
- }
133
- /**
134
- * Convert live question state into a complete retirement instruction.
135
- *
136
- * A request/collapse pair without the original Delivery targets is not safe to
137
- * send: re-resolving today's routing can miss a device that still shows the
138
- * question or retire a device that never received it. Fail explicitly and keep
139
- * the pending record instead of silently broadening or narrowing the fanout.
140
- */
141
- export function retiringQuestion(pending, state, cwd) {
142
- // A submit journal is written before the first network byte. SessionEnd can
143
- // therefore race a request that the server accepts after local cleanup. Its
144
- // reserved request id and exact fanout are already sufficient retirement
145
- // identity, even though the ordinary live fields have not been promoted yet.
146
- const requestId = pending.request_id ?? pending.submission?.request_id;
147
- const collapseKey = pending.collapse_key ?? pending.submission?.collapse_key;
148
- const deviceIds = pending.device_ids ?? pending.submission?.device_ids;
149
- const hasRequest = requestId !== undefined;
150
- const hasCollapse = collapseKey !== undefined;
151
- const hasDevices = deviceIds !== undefined && deviceIds.length > 0;
152
- if (!hasRequest && !hasCollapse && !hasDevices)
153
- return null;
154
- if (!hasRequest || !hasCollapse || !hasDevices) {
155
- throw new Error('live question state is incomplete; refusing to retire it without request, collapse, and device identifiers');
156
- }
157
- const source = sourceContextAtHookEvent(pending.source, cwd);
158
- return {
159
- ...(pending.question_id !== undefined ? { question_id: pending.question_id } : {}),
160
- request_id: requestId,
161
- collapse_key: collapseKey,
162
- device_ids: [...deviceIds],
163
- question: pending.question,
164
- ...(pending.project !== undefined ? { project: pending.project } : {}),
165
- ...(source !== undefined ? { source } : {}),
166
- state,
167
- };
168
- }
169
- const SHORT_CONFIRMATIONS = new Set(['done', 'yes', 'y', 'no', 'n', 'ok', 'okay']);
170
- function normalizePrompt(value) {
171
- return value.trim().replace(/\s+/g, ' ').toLowerCase();
172
- }
173
- function pendingChoiceLabels(pending) {
174
- const fromQuestions = (pending.questions ?? []).flatMap((question) => (question.choices ?? []).flatMap((choice) => [choice.label, choice.id]));
175
- return fromQuestions.map(normalizePrompt).filter((label) => label.length > 0);
176
- }
177
- function pendingHasMatchingChoice(pending, normalizedPrompt) {
178
- return pendingChoiceLabels(pending).includes(normalizedPrompt);
179
- }
180
- /**
181
- * Which outstanding questions this prompt plausibly answers.
182
- *
183
- * A unique closed-choice match is enough. A short confirmation such as "done"
184
- * matches only when exactly one question is outstanding. Long unrelated
185
- * prompts leave every question open for the reply window.
186
- */
187
- export function pendingAnsweredByPrompt(prompt, pending) {
188
- const normalized = normalizePrompt(prompt ?? '');
189
- if (normalized.length === 0 || pending.length === 0)
190
- return [];
191
- const labelled = pending.filter((entry) => pendingHasMatchingChoice(entry, normalized));
192
- if (labelled.length === 1)
193
- return labelled;
194
- if (labelled.length > 1)
195
- return [];
196
- if (pending.length === 1 && SHORT_CONFIRMATIONS.has(normalized))
197
- return [...pending];
198
- return [];
199
- }
200
- /**
201
- * Send every parked retirement, and forget the ones that landed. A failure
202
- * leaves the entry in place for the next hook rather than losing it, which is
203
- * the whole reason the queue exists.
204
- */
205
- export async function drainRetirements(ctx, sessionId, env) {
206
- const queue = readSessionState(sessionId, env).retiring ?? [];
207
- if (queue.length === 0)
208
- return [];
209
- const retired = [];
210
- for (const entry of queue) {
211
- const proven = await proveRetirement(ctx, entry.request_id);
212
- if (proven) {
213
- retired.push(entry.request_id);
214
- // Persist each success before touching the next entry. A later corrupt
215
- // record or interrupted process must not resurrect work already done.
216
- updateSessionState(sessionId, env, (current) => rememberQuestionState({
217
- ...current,
218
- retiring: (current.retiring ?? []).filter((candidate) => candidate.request_id !== entry.request_id),
219
- }, entry, entry.state === 'answered' ? 'answered' : 'retired'));
220
- }
221
- }
222
- return retired;
223
- }
224
- function orphanQueuePath(env) {
225
- return path.join(stateDir(env), 'retire-queue.json');
226
- }
227
- function readOrphanQueue(env) {
228
- const file = orphanQueuePath(env);
229
- if (!existsSync(file))
230
- return [];
231
- try {
232
- const parsed = JSON.parse(readFileSync(file, 'utf8'));
233
- return Array.isArray(parsed) ? parsed : [];
234
- }
235
- catch {
236
- // Same stance as session state: corruption fails closed to "nothing queued".
237
- return [];
238
- }
239
- }
240
- function writeOrphanQueueUnlocked(file, queue) {
241
- atomicWriteFileSync(file, `${JSON.stringify(queue, null, 2)}\n`);
242
- }
243
- function updateOrphanQueue(env, update) {
244
- const file = orphanQueuePath(env);
245
- return withFileLock(`${file}.lock`, () => {
246
- const next = update(readOrphanQueue(env));
247
- writeOrphanQueueUnlocked(file, next);
248
- return next;
249
- });
250
- }
251
- /** Move retirements into the global queue; deduped so a retry costs nothing. */
252
- export function orphanRetirements(env, entries, now) {
253
- if (entries.length === 0)
254
- return;
255
- updateOrphanQueue(env, (queue) => {
256
- const known = new Set(queue.map((entry) => entry.request_id));
257
- const added = entries
258
- .filter((entry) => !known.has(entry.request_id))
259
- .map((entry) => ({ ...entry, enqueued_at: now }));
260
- return [...queue, ...added].slice(-ORPHAN_QUEUE_CAP);
261
- });
262
- }
263
- /**
264
- * Retire everything a dead session left behind. Failures stay queued for the
265
- * next holder of a client; entries past the TTL are dropped as already dead.
266
- */
267
- export async function drainOrphanRetirements(ctx, env, now) {
268
- const queue = readOrphanQueue(env);
269
- if (queue.length === 0)
270
- return [];
271
- const done = [];
272
- for (const entry of queue) {
273
- const age = now - entry.enqueued_at;
274
- // A negative age is a clock jump, not a fresh entry; retiring is idempotent
275
- // and cheap, so treat it as due rather than letting it linger for ever.
276
- if (age > ORPHAN_TTL_MS) {
277
- done.push(entry.request_id);
278
- updateOrphanQueue(env, (current) => current.filter((candidate) => candidate.request_id !== entry.request_id));
279
- continue;
280
- }
281
- const proven = await proveRetirement(ctx, entry.request_id);
282
- if (proven) {
283
- done.push(entry.request_id);
284
- updateOrphanQueue(env, (current) => current.filter((candidate) => candidate.request_id !== entry.request_id));
285
- }
286
- }
287
- return done;
288
- }
289
- export async function retirePendings(ctx, envelope, sessionId, entries, state) {
290
- updateSessionState(sessionId, ctx.env, (current) => {
291
- const retiring = [...(current.retiring ?? [])];
292
- for (const entry of entries) {
293
- const retirement = retiringQuestion(entry, state, envelope.cwd);
294
- if (retirement !== null && !retiring.some((item) => item.request_id === retirement.request_id)) {
295
- retiring.push(retirement);
296
- }
297
- }
298
- const pending = pendingList(current).filter((candidate) => !entries.some((entry) => isSamePending(candidate, entry)));
299
- const next = { ...current };
300
- if (pending.length > 0)
301
- next.pending = pending;
302
- else
303
- delete next.pending;
304
- if (retiring.length > 0)
305
- next.retiring = retiring;
306
- else
307
- delete next.retiring;
308
- return entries.reduce((remembered, entry) => rememberQuestionState(remembered, entry, state === 'answered' ? 'answered' : 'retired'), next);
309
- });
310
- // Network retirement is deliberately deferred to a later no-question hook.
311
- // The state write above is the durable operation; blocking here creates a
312
- // crash window before an answer can reach harness stdout.
313
- }
314
- //# sourceMappingURL=hook-question-retirement.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-question-retirement.js","sourceRoot":"","sources":["../src/hook-question-retirement.ts"],"names":[],"mappings":"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"}
@@ -1,58 +0,0 @@
1
- /** Question history, inspection, and atomic live-question state changes. */
2
- import type { QuestionT, SourceContextT } from '@raidiant/notifai-protocol';
3
- import type { PendingQuestion, PendingSubmissionIntent, QuestionDeliveryState, QuestionTerminalState, SessionState } from './hook-types.js';
4
- import type { ServiceIdentity } from './credentials.js';
5
- export interface QuestionStateView {
6
- question_id: string;
7
- state: QuestionDeliveryState;
8
- /** Null means a frozen submission may or may not have crossed the service boundary. */
9
- submitted: boolean | null;
10
- request_id: string | null;
11
- frozen_request_id: string | null;
12
- }
13
- export type QuestionStateLookup = {
14
- found: true;
15
- session_id: string;
16
- question: QuestionStateView;
17
- } | {
18
- found: false;
19
- ambiguous: boolean;
20
- };
21
- /** Keep immutable session grouping while replacing per-event Git location authoritatively. */
22
- export declare function sourceContextAtHookEvent(source: SourceContextT | undefined, cwd: string | undefined): SourceContextT | undefined;
23
- export declare function summarizeRequestIds(entries: readonly PendingQuestion[]): {
24
- ids: string[];
25
- display: string;
26
- };
27
- type QuestionIdentity = Pick<PendingQuestion, 'question_id' | 'request_id' | 'submission'>;
28
- /** Keep a bounded, content-free map from local identity to its terminal state. */
29
- export declare function rememberQuestionState(current: SessionState, question: QuestionIdentity, state: QuestionTerminalState): SessionState;
30
- /** Read one stable local question identity without minting or submitting anything. */
31
- export declare function inspectQuestionState(questionId: string, env: NodeJS.ProcessEnv): QuestionStateLookup;
32
- /** Registration identity — the convention every racing writer compares by. */
33
- export declare function isSamePending(a: PendingQuestion, b: PendingQuestion): boolean;
34
- export declare function dropPendingQuestion(sessionId: string, env: NodeJS.ProcessEnv, entry: PendingQuestion, terminalState?: QuestionTerminalState): void;
35
- /** A cheap preflight check; only admitQueuedQuestion authorizes submission. */
36
- export declare function queuedQuestionStillEligible(sessionId: string, env: NodeJS.ProcessEnv, entry: PendingQuestion): boolean;
37
- /** Whether silent local withdrawal is no longer an honest outcome. */
38
- export declare function questionSubmissionAttempted(entry: PendingQuestion): boolean;
39
- /**
40
- * One serialized boundary with close, prompt retirement, and SessionEnd.
41
- * Withdrawal first means no request starts. Admission first journals the
42
- * reserved identity and starts the request before releasing the lock; a later
43
- * close must retire that potentially remote identity, never call it withdrawn.
44
- *
45
- * submit must initiate the request synchronously and return its promise. The
46
- * lock is released before awaiting network work, using the ordinary bounded
47
- * acquisition and dead-process recovery of the session-state lock.
48
- */
49
- export declare function admitQueuedQuestion<T>(sessionId: string, env: NodeJS.ProcessEnv, entry: PendingQuestion, intent: PendingSubmissionIntent, now: number, submit: () => Promise<T>, serviceIdentity?: ServiceIdentity): Promise<T> | null;
50
- /** Replace only the rejected frozen identity, atomically with the native
51
- * obligation check. Preparing a replacement never erases the original first.
52
- */
53
- export declare function replaceFrozenSubmission(sessionId: string, env: NodeJS.ProcessEnv, entry: PendingQuestion, rejected: PendingSubmissionIntent, replacement: PendingSubmissionIntent): boolean;
54
- /** The question set this pending record pushes, however it was registered. */
55
- export declare function pendingQuestions(pending: PendingQuestion): QuestionT[];
56
- /** Did any question in the set offer choices? Decides how replies combine. */
57
- export declare function pendingHasChoices(pending: PendingQuestion): boolean;
58
- export {};