@raidiant/notifai 11.7.1 → 12.0.0-beta.11

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 +53 -0
  2. package/NOTICE +16 -0
  3. package/THIRD_PARTY_NOTICES +725 -0
  4. package/bin/notifai.mjs +11420 -0
  5. package/data/install.ps1 +318 -0
  6. package/data/release.json +1 -0
  7. package/inventory.json +1 -0
  8. package/npm-adapter-files.json +52 -0
  9. package/package.json +14 -44
  10. package/README.md +0 -168
  11. package/dist/agent-update-notice.d.ts +0 -7
  12. package/dist/agent-update-notice.js +0 -77
  13. package/dist/agent-update-notice.js.map +0 -1
  14. package/dist/atomic-file.d.ts +0 -30
  15. package/dist/atomic-file.js +0 -148
  16. package/dist/atomic-file.js.map +0 -1
  17. package/dist/attendant-update.d.ts +0 -15
  18. package/dist/attendant-update.js +0 -96
  19. package/dist/attendant-update.js.map +0 -1
  20. package/dist/claude-wake.d.ts +0 -108
  21. package/dist/claude-wake.js +0 -369
  22. package/dist/claude-wake.js.map +0 -1
  23. package/dist/cli-bin.d.ts +0 -26
  24. package/dist/cli-bin.js +0 -220
  25. package/dist/cli-bin.js.map +0 -1
  26. package/dist/cli-contract.d.ts +0 -16
  27. package/dist/cli-contract.js +0 -27
  28. package/dist/cli-contract.js.map +0 -1
  29. package/dist/cli-release.d.ts +0 -36
  30. package/dist/cli-release.js +0 -85
  31. package/dist/cli-release.js.map +0 -1
  32. package/dist/client.d.ts +0 -109
  33. package/dist/client.js +0 -217
  34. package/dist/client.js.map +0 -1
  35. package/dist/codex-answer-control.d.ts +0 -14
  36. package/dist/codex-answer-control.js +0 -41
  37. package/dist/codex-answer-control.js.map +0 -1
  38. package/dist/codex-answer-presentation.d.ts +0 -18
  39. package/dist/codex-answer-presentation.js +0 -113
  40. package/dist/codex-answer-presentation.js.map +0 -1
  41. package/dist/codex-input-lifecycle.d.ts +0 -10
  42. package/dist/codex-input-lifecycle.js +0 -63
  43. package/dist/codex-input-lifecycle.js.map +0 -1
  44. package/dist/codex-native-control.d.ts +0 -13
  45. package/dist/codex-native-control.js +0 -120
  46. package/dist/codex-native-control.js.map +0 -1
  47. package/dist/codex-native-turn.d.ts +0 -37
  48. package/dist/codex-native-turn.js +0 -155
  49. package/dist/codex-native-turn.js.map +0 -1
  50. package/dist/codex-question-bindings.d.ts +0 -76
  51. package/dist/codex-question-bindings.js +0 -151
  52. package/dist/codex-question-bindings.js.map +0 -1
  53. package/dist/codex-queue-control.d.ts +0 -21
  54. package/dist/codex-queue-control.js +0 -59
  55. package/dist/codex-queue-control.js.map +0 -1
  56. package/dist/codex-tool-messages.d.ts +0 -7
  57. package/dist/codex-tool-messages.js +0 -126
  58. package/dist/codex-tool-messages.js.map +0 -1
  59. package/dist/codex-wake.d.ts +0 -58
  60. package/dist/codex-wake.js +0 -135
  61. package/dist/codex-wake.js.map +0 -1
  62. package/dist/command-session.d.ts +0 -14
  63. package/dist/command-session.js +0 -31
  64. package/dist/command-session.js.map +0 -1
  65. package/dist/commands-acknowledge.d.ts +0 -13
  66. package/dist/commands-acknowledge.js +0 -116
  67. package/dist/commands-acknowledge.js.map +0 -1
  68. package/dist/commands-agent-sessions.d.ts +0 -6
  69. package/dist/commands-agent-sessions.js +0 -51
  70. package/dist/commands-agent-sessions.js.map +0 -1
  71. package/dist/commands-ask.d.ts +0 -62
  72. package/dist/commands-ask.js +0 -503
  73. package/dist/commands-ask.js.map +0 -1
  74. package/dist/commands-auth.d.ts +0 -76
  75. package/dist/commands-auth.js +0 -421
  76. package/dist/commands-auth.js.map +0 -1
  77. package/dist/commands-close.d.ts +0 -6
  78. package/dist/commands-close.js +0 -273
  79. package/dist/commands-close.js.map +0 -1
  80. package/dist/commands-config.d.ts +0 -31
  81. package/dist/commands-config.js +0 -272
  82. package/dist/commands-config.js.map +0 -1
  83. package/dist/commands-core.d.ts +0 -145
  84. package/dist/commands-core.js +0 -190
  85. package/dist/commands-core.js.map +0 -1
  86. package/dist/commands-devices.d.ts +0 -41
  87. package/dist/commands-devices.js +0 -144
  88. package/dist/commands-devices.js.map +0 -1
  89. package/dist/commands-doctor.d.ts +0 -25
  90. package/dist/commands-doctor.js +0 -1553
  91. package/dist/commands-doctor.js.map +0 -1
  92. package/dist/commands-guidance.d.ts +0 -27
  93. package/dist/commands-guidance.js +0 -150
  94. package/dist/commands-guidance.js.map +0 -1
  95. package/dist/commands-harness-context.d.ts +0 -57
  96. package/dist/commands-harness-context.js +0 -102
  97. package/dist/commands-harness-context.js.map +0 -1
  98. package/dist/commands-hook-attend.d.ts +0 -70
  99. package/dist/commands-hook-attend.js +0 -655
  100. package/dist/commands-hook-attend.js.map +0 -1
  101. package/dist/commands-hook-diagnostics.d.ts +0 -37
  102. package/dist/commands-hook-diagnostics.js +0 -136
  103. package/dist/commands-hook-diagnostics.js.map +0 -1
  104. package/dist/commands-hook-install.d.ts +0 -26
  105. package/dist/commands-hook-install.js +0 -784
  106. package/dist/commands-hook-install.js.map +0 -1
  107. package/dist/commands-hook-run.d.ts +0 -29
  108. package/dist/commands-hook-run.js +0 -933
  109. package/dist/commands-hook-run.js.map +0 -1
  110. package/dist/commands-hook-shape.d.ts +0 -19
  111. package/dist/commands-hook-shape.js +0 -48
  112. package/dist/commands-hook-shape.js.map +0 -1
  113. package/dist/commands-init.d.ts +0 -42
  114. package/dist/commands-init.js +0 -901
  115. package/dist/commands-init.js.map +0 -1
  116. package/dist/commands-io.d.ts +0 -2
  117. package/dist/commands-io.js +0 -117
  118. package/dist/commands-io.js.map +0 -1
  119. package/dist/commands-logs.d.ts +0 -30
  120. package/dist/commands-logs.js +0 -201
  121. package/dist/commands-logs.js.map +0 -1
  122. package/dist/commands-native-acknowledge.d.ts +0 -8
  123. package/dist/commands-native-acknowledge.js +0 -114
  124. package/dist/commands-native-acknowledge.js.map +0 -1
  125. package/dist/commands-project.d.ts +0 -4
  126. package/dist/commands-project.js +0 -41
  127. package/dist/commands-project.js.map +0 -1
  128. package/dist/commands-receive.d.ts +0 -3
  129. package/dist/commands-receive.js +0 -59
  130. package/dist/commands-receive.js.map +0 -1
  131. package/dist/commands-send-support.d.ts +0 -59
  132. package/dist/commands-send-support.js +0 -258
  133. package/dist/commands-send-support.js.map +0 -1
  134. package/dist/commands-send.d.ts +0 -34
  135. package/dist/commands-send.js +0 -900
  136. package/dist/commands-send.js.map +0 -1
  137. package/dist/commands-setup-proof.d.ts +0 -43
  138. package/dist/commands-setup-proof.js +0 -134
  139. package/dist/commands-setup-proof.js.map +0 -1
  140. package/dist/commands-skill.d.ts +0 -21
  141. package/dist/commands-skill.js +0 -199
  142. package/dist/commands-skill.js.map +0 -1
  143. package/dist/commands-sounds.d.ts +0 -12
  144. package/dist/commands-sounds.js +0 -35
  145. package/dist/commands-sounds.js.map +0 -1
  146. package/dist/commands-update-check.d.ts +0 -6
  147. package/dist/commands-update-check.js +0 -102
  148. package/dist/commands-update-check.js.map +0 -1
  149. package/dist/commands-update-resume.d.ts +0 -7
  150. package/dist/commands-update-resume.js +0 -143
  151. package/dist/commands-update-resume.js.map +0 -1
  152. package/dist/commands-update-skill.d.ts +0 -5
  153. package/dist/commands-update-skill.js +0 -36
  154. package/dist/commands-update-skill.js.map +0 -1
  155. package/dist/commands-update.d.ts +0 -11
  156. package/dist/commands-update.js +0 -286
  157. package/dist/commands-update.js.map +0 -1
  158. package/dist/commands.d.ts +0 -26
  159. package/dist/commands.js +0 -27
  160. package/dist/commands.js.map +0 -1
  161. package/dist/config-schema.d.ts +0 -62
  162. package/dist/config-schema.js +0 -302
  163. package/dist/config-schema.js.map +0 -1
  164. package/dist/config.d.ts +0 -181
  165. package/dist/config.js +0 -357
  166. package/dist/config.js.map +0 -1
  167. package/dist/credentials.d.ts +0 -96
  168. package/dist/credentials.js +0 -342
  169. package/dist/credentials.js.map +0 -1
  170. package/dist/file-lock.d.ts +0 -34
  171. package/dist/file-lock.js +0 -367
  172. package/dist/file-lock.js.map +0 -1
  173. package/dist/generated-session-label.d.ts +0 -2
  174. package/dist/generated-session-label.js +0 -152
  175. package/dist/generated-session-label.js.map +0 -1
  176. package/dist/guidance-content.d.ts +0 -53
  177. package/dist/guidance-content.js +0 -248
  178. package/dist/guidance-content.js.map +0 -1
  179. package/dist/guidance-render.d.ts +0 -25
  180. package/dist/guidance-render.js +0 -47
  181. package/dist/guidance-render.js.map +0 -1
  182. package/dist/guidance.d.ts +0 -69
  183. package/dist/guidance.js +0 -173
  184. package/dist/guidance.js.map +0 -1
  185. package/dist/harness-session-title.d.ts +0 -22
  186. package/dist/harness-session-title.js +0 -74
  187. package/dist/harness-session-title.js.map +0 -1
  188. package/dist/harnesses.d.ts +0 -65
  189. package/dist/harnesses.js +0 -159
  190. package/dist/harnesses.js.map +0 -1
  191. package/dist/hermes-attendant.d.ts +0 -38
  192. package/dist/hermes-attendant.js +0 -337
  193. package/dist/hermes-attendant.js.map +0 -1
  194. package/dist/hermes-plugin.d.ts +0 -11
  195. package/dist/hermes-plugin.js +0 -299
  196. package/dist/hermes-plugin.js.map +0 -1
  197. package/dist/hook-acknowledgements.d.ts +0 -70
  198. package/dist/hook-acknowledgements.js +0 -490
  199. package/dist/hook-acknowledgements.js.map +0 -1
  200. package/dist/hook-adapter.d.ts +0 -48
  201. package/dist/hook-adapter.js +0 -419
  202. package/dist/hook-adapter.js.map +0 -1
  203. package/dist/hook-events.d.ts +0 -105
  204. package/dist/hook-events.js +0 -130
  205. package/dist/hook-events.js.map +0 -1
  206. package/dist/hook-gates.d.ts +0 -7
  207. package/dist/hook-gates.js +0 -20
  208. package/dist/hook-gates.js.map +0 -1
  209. package/dist/hook-input.d.ts +0 -10
  210. package/dist/hook-input.js +0 -64
  211. package/dist/hook-input.js.map +0 -1
  212. package/dist/hook-lifecycle.d.ts +0 -112
  213. package/dist/hook-lifecycle.js +0 -2031
  214. package/dist/hook-lifecycle.js.map +0 -1
  215. package/dist/hook-project-sessions.d.ts +0 -28
  216. package/dist/hook-project-sessions.js +0 -141
  217. package/dist/hook-project-sessions.js.map +0 -1
  218. package/dist/hook-question-lock.d.ts +0 -29
  219. package/dist/hook-question-lock.js +0 -217
  220. package/dist/hook-question-lock.js.map +0 -1
  221. package/dist/hook-question-retirement.d.ts +0 -74
  222. package/dist/hook-question-retirement.js +0 -314
  223. package/dist/hook-question-retirement.js.map +0 -1
  224. package/dist/hook-question-state.d.ts +0 -58
  225. package/dist/hook-question-state.js +0 -239
  226. package/dist/hook-question-state.js.map +0 -1
  227. package/dist/hook-session-state.d.ts +0 -127
  228. package/dist/hook-session-state.js +0 -488
  229. package/dist/hook-session-state.js.map +0 -1
  230. package/dist/hook-types.d.ts +0 -476
  231. package/dist/hook-types.js +0 -4
  232. package/dist/hook-types.js.map +0 -1
  233. package/dist/injection-render.d.ts +0 -36
  234. package/dist/injection-render.js +0 -61
  235. package/dist/injection-render.js.map +0 -1
  236. package/dist/install-hooks.d.ts +0 -470
  237. package/dist/install-hooks.js +0 -1622
  238. package/dist/install-hooks.js.map +0 -1
  239. package/dist/integration-health.d.ts +0 -26
  240. package/dist/integration-health.js +0 -133
  241. package/dist/integration-health.js.map +0 -1
  242. package/dist/interactive.d.ts +0 -22
  243. package/dist/interactive.js +0 -644
  244. package/dist/interactive.js.map +0 -1
  245. package/dist/invocation-context.d.ts +0 -47
  246. package/dist/invocation-context.js +0 -164
  247. package/dist/invocation-context.js.map +0 -1
  248. package/dist/local-path.d.ts +0 -7
  249. package/dist/local-path.js +0 -27
  250. package/dist/local-path.js.map +0 -1
  251. package/dist/logging.d.ts +0 -157
  252. package/dist/logging.js +0 -599
  253. package/dist/logging.js.map +0 -1
  254. package/dist/main-run.d.ts +0 -1
  255. package/dist/main-run.js +0 -42
  256. package/dist/main-run.js.map +0 -1
  257. package/dist/main.d.ts +0 -2
  258. package/dist/main.js +0 -12
  259. package/dist/main.js.map +0 -1
  260. package/dist/native-answer-operation.d.ts +0 -70
  261. package/dist/native-answer-operation.js +0 -247
  262. package/dist/native-answer-operation.js.map +0 -1
  263. package/dist/native-skills.d.ts +0 -64
  264. package/dist/native-skills.js +0 -167
  265. package/dist/native-skills.js.map +0 -1
  266. package/dist/node-floor.d.ts +0 -19
  267. package/dist/node-floor.js +0 -32
  268. package/dist/node-floor.js.map +0 -1
  269. package/dist/npm-invocation.d.ts +0 -34
  270. package/dist/npm-invocation.js +0 -53
  271. package/dist/npm-invocation.js.map +0 -1
  272. package/dist/openclaw-continuation-bridge.d.ts +0 -7
  273. package/dist/openclaw-continuation-bridge.js +0 -64
  274. package/dist/openclaw-continuation-bridge.js.map +0 -1
  275. package/dist/openclaw-gateway-readiness.d.ts +0 -1
  276. package/dist/openclaw-gateway-readiness.js +0 -24
  277. package/dist/openclaw-gateway-readiness.js.map +0 -1
  278. package/dist/openclaw-generation.d.ts +0 -21
  279. package/dist/openclaw-generation.js +0 -115
  280. package/dist/openclaw-generation.js.map +0 -1
  281. package/dist/openclaw-message-bridge.d.ts +0 -8
  282. package/dist/openclaw-message-bridge.js +0 -93
  283. package/dist/openclaw-message-bridge.js.map +0 -1
  284. package/dist/openclaw-pending.d.ts +0 -8
  285. package/dist/openclaw-pending.js +0 -47
  286. package/dist/openclaw-pending.js.map +0 -1
  287. package/dist/openclaw-plugin.d.ts +0 -75
  288. package/dist/openclaw-plugin.js +0 -1353
  289. package/dist/openclaw-plugin.js.map +0 -1
  290. package/dist/openclaw-session-access.d.ts +0 -12
  291. package/dist/openclaw-session-access.js +0 -79
  292. package/dist/openclaw-session-access.js.map +0 -1
  293. package/dist/opencode-plugin.d.ts +0 -88
  294. package/dist/opencode-plugin.js +0 -286
  295. package/dist/opencode-plugin.js.map +0 -1
  296. package/dist/orca-session-title.d.ts +0 -11
  297. package/dist/orca-session-title.js +0 -111
  298. package/dist/orca-session-title.js.map +0 -1
  299. package/dist/pack-feedback-slice.d.ts +0 -35
  300. package/dist/pack-feedback-slice.js +0 -126
  301. package/dist/pack-feedback-slice.js.map +0 -1
  302. package/dist/pairing-qr.d.ts +0 -5
  303. package/dist/pairing-qr.js +0 -24
  304. package/dist/pairing-qr.js.map +0 -1
  305. package/dist/pending-pairing.d.ts +0 -38
  306. package/dist/pending-pairing.js +0 -70
  307. package/dist/pending-pairing.js.map +0 -1
  308. package/dist/platform.d.ts +0 -67
  309. package/dist/platform.js +0 -140
  310. package/dist/platform.js.map +0 -1
  311. package/dist/process-identity.d.ts +0 -26
  312. package/dist/process-identity.js +0 -82
  313. package/dist/process-identity.js.map +0 -1
  314. package/dist/program.d.ts +0 -59
  315. package/dist/program.js +0 -691
  316. package/dist/program.js.map +0 -1
  317. package/dist/project-enablement.d.ts +0 -21
  318. package/dist/project-enablement.js +0 -71
  319. package/dist/project-enablement.js.map +0 -1
  320. package/dist/question-settlement-process.d.ts +0 -17
  321. package/dist/question-settlement-process.js +0 -35
  322. package/dist/question-settlement-process.js.map +0 -1
  323. package/dist/question-timing.d.ts +0 -46
  324. package/dist/question-timing.js +0 -48
  325. package/dist/question-timing.js.map +0 -1
  326. package/dist/readiness.d.ts +0 -153
  327. package/dist/readiness.js +0 -149
  328. package/dist/readiness.js.map +0 -1
  329. package/dist/release.d.ts +0 -31
  330. package/dist/release.js +0 -52
  331. package/dist/release.js.map +0 -1
  332. package/dist/send-attempts.d.ts +0 -26
  333. package/dist/send-attempts.js +0 -139
  334. package/dist/send-attempts.js.map +0 -1
  335. package/dist/send.d.ts +0 -115
  336. package/dist/send.js +0 -421
  337. package/dist/send.js.map +0 -1
  338. package/dist/session-activation.d.ts +0 -13
  339. package/dist/session-activation.js +0 -64
  340. package/dist/session-activation.js.map +0 -1
  341. package/dist/session-attendant-probe.d.ts +0 -85
  342. package/dist/session-attendant-probe.js +0 -173
  343. package/dist/session-attendant-probe.js.map +0 -1
  344. package/dist/session-attendant-state.d.ts +0 -70
  345. package/dist/session-attendant-state.js +0 -256
  346. package/dist/session-attendant-state.js.map +0 -1
  347. package/dist/session-attendant.d.ts +0 -143
  348. package/dist/session-attendant.js +0 -520
  349. package/dist/session-attendant.js.map +0 -1
  350. package/dist/session-delivery.d.ts +0 -249
  351. package/dist/session-delivery.js +0 -576
  352. package/dist/session-delivery.js.map +0 -1
  353. package/dist/session-handoff.d.ts +0 -98
  354. package/dist/session-handoff.js +0 -118
  355. package/dist/session-handoff.js.map +0 -1
  356. package/dist/session-input-wakes.d.ts +0 -78
  357. package/dist/session-input-wakes.js +0 -239
  358. package/dist/session-input-wakes.js.map +0 -1
  359. package/dist/session-inputs.d.ts +0 -57
  360. package/dist/session-inputs.js +0 -434
  361. package/dist/session-inputs.js.map +0 -1
  362. package/dist/session-labels.d.ts +0 -56
  363. package/dist/session-labels.js +0 -396
  364. package/dist/session-labels.js.map +0 -1
  365. package/dist/session-message-handoff.d.ts +0 -39
  366. package/dist/session-message-handoff.js +0 -107
  367. package/dist/session-message-handoff.js.map +0 -1
  368. package/dist/setup-destinations.d.ts +0 -23
  369. package/dist/setup-destinations.js +0 -44
  370. package/dist/setup-destinations.js.map +0 -1
  371. package/dist/skill-integrity.d.ts +0 -54
  372. package/dist/skill-integrity.js +0 -164
  373. package/dist/skill-integrity.js.map +0 -1
  374. package/dist/skill-source/manifest.json +0 -40
  375. package/dist/skill-source/notifai/SKILL.md +0 -350
  376. package/dist/skill-source/notifai/references/diagnostics.md +0 -36
  377. package/dist/skill-source/notifai/references/harness-setup.md +0 -384
  378. package/dist/skill-source/notifai/references/native-questions.md +0 -51
  379. package/dist/skill-source/notifai/references/notes-and-edits.md +0 -54
  380. package/dist/skill-source/notifai/references/send-details.md +0 -14
  381. package/dist/skill-source/notifai/references/updates.md +0 -116
  382. package/dist/skill-source/notifai/references/writing-examples.md +0 -56
  383. package/dist/sound-ref.d.ts +0 -23
  384. package/dist/sound-ref.js +0 -28
  385. package/dist/sound-ref.js.map +0 -1
  386. package/dist/ui/banner.d.ts +0 -22
  387. package/dist/ui/banner.js +0 -87
  388. package/dist/ui/banner.js.map +0 -1
  389. package/dist/ui/config-view.d.ts +0 -30
  390. package/dist/ui/config-view.js +0 -108
  391. package/dist/ui/config-view.js.map +0 -1
  392. package/dist/ui/help.d.ts +0 -44
  393. package/dist/ui/help.js +0 -107
  394. package/dist/ui/help.js.map +0 -1
  395. package/dist/ui/theme.d.ts +0 -90
  396. package/dist/ui/theme.js +0 -244
  397. package/dist/ui/theme.js.map +0 -1
  398. package/dist/update-handoff.d.ts +0 -29
  399. package/dist/update-handoff.js +0 -69
  400. package/dist/update-handoff.js.map +0 -1
  401. package/dist/url-policy.d.ts +0 -85
  402. package/dist/url-policy.js +0 -369
  403. package/dist/url-policy.js.map +0 -1
  404. package/dist/version.d.ts +0 -40
  405. package/dist/version.js +0 -132
  406. package/dist/version.js.map +0 -1
  407. package/dist/wake-support.d.ts +0 -40
  408. package/dist/wake-support.js +0 -95
  409. package/dist/wake-support.js.map +0 -1
@@ -1,239 +0,0 @@
1
- import { withFileLock } from './file-lock.js';
2
- import { findOwningSession, pendingList, readSessionState, sessionHasEnded, sessionStatePath, updateSessionState, writeSessionStateUnlocked, } from './hook-session-state.js';
3
- import { inferInvocationContext } from './invocation-context.js';
4
- /** Keep immutable session grouping while replacing per-event Git location authoritatively. */
5
- export function sourceContextAtHookEvent(source, cwd) {
6
- const invocation = cwd === undefined ? null : inferInvocationContext(cwd);
7
- const current = {
8
- ...(source?.session_id !== undefined ? { session_id: source.session_id } : {}),
9
- ...(source?.session_label !== undefined ? { session_label: source.session_label } : {}),
10
- ...(source?.harness !== undefined ? { harness: source.harness } : {}),
11
- ...(invocation?.branch !== undefined ? { branch: invocation.branch } : {}),
12
- ...(invocation?.worktree !== undefined ? { worktree: invocation.worktree } : {}),
13
- };
14
- return Object.keys(current).length === 0 ? undefined : current;
15
- }
16
- export function summarizeRequestIds(entries) {
17
- const ids = entries.flatMap((entry) => entry.request_id === undefined ? [] : [entry.request_id]);
18
- return { ids, display: ids.join(', ') };
19
- }
20
- const QUESTION_HISTORY_CAP = 50;
21
- /** Keep a bounded, content-free map from local identity to its terminal state. */
22
- export function rememberQuestionState(current, question, state) {
23
- if (question.question_id === undefined)
24
- return current;
25
- const existing = (current.question_history ?? []).find((entry) => entry.question_id === question.question_id);
26
- const terminalState = existing?.state === 'withdrawn' || existing?.state === 'answered'
27
- ? existing.state
28
- : state === 'answered'
29
- ? 'answered'
30
- : state;
31
- const requestId = question.request_id ?? existing?.request_id;
32
- const frozenRequestId = requestId === undefined && terminalState !== 'withdrawn'
33
- ? question.submission?.request_id ?? existing?.frozen_request_id
34
- : undefined;
35
- const record = {
36
- question_id: question.question_id,
37
- state: terminalState,
38
- ...(requestId === undefined ? {} : { request_id: requestId }),
39
- ...(frozenRequestId === undefined ? {} : { frozen_request_id: frozenRequestId }),
40
- };
41
- const history = [
42
- ...(current.question_history ?? []).filter((entry) => entry.question_id !== question.question_id),
43
- record,
44
- ].slice(-QUESTION_HISTORY_CAP);
45
- return { ...current, question_history: history };
46
- }
47
- function pendingQuestionView(entry) {
48
- if (entry.question_id === undefined)
49
- return null;
50
- if (entry.request_id !== undefined) {
51
- return {
52
- question_id: entry.question_id,
53
- state: 'live',
54
- submitted: true,
55
- request_id: entry.request_id,
56
- frozen_request_id: null,
57
- };
58
- }
59
- if (entry.submission !== undefined) {
60
- return {
61
- question_id: entry.question_id,
62
- state: 'frozen',
63
- submitted: null,
64
- request_id: null,
65
- frozen_request_id: entry.submission.request_id,
66
- };
67
- }
68
- return {
69
- question_id: entry.question_id,
70
- state: 'local',
71
- submitted: false,
72
- request_id: null,
73
- frozen_request_id: null,
74
- };
75
- }
76
- /** Read one stable local question identity without minting or submitting anything. */
77
- export function inspectQuestionState(questionId, env) {
78
- const owner = findOwningSession(questionId, env);
79
- if (owner.ambiguous || owner.sessionId === null) {
80
- return { found: false, ambiguous: owner.ambiguous };
81
- }
82
- const state = readSessionState(owner.sessionId, env);
83
- const pending = pendingList(state).find((entry) => entry.question_id === questionId);
84
- const pendingView = pending === undefined ? null : pendingQuestionView(pending);
85
- if (pendingView !== null) {
86
- return { found: true, session_id: owner.sessionId, question: pendingView };
87
- }
88
- const accepted = [...(state.accepted?.answers ?? []), ...(state.delivered_answers ?? [])].find(({ pending: entry }) => entry.question_id === questionId)?.pending;
89
- if (accepted?.question_id !== undefined) {
90
- return {
91
- found: true,
92
- session_id: owner.sessionId,
93
- question: {
94
- question_id: accepted.question_id,
95
- state: 'answered',
96
- submitted: true,
97
- request_id: accepted.request_id ?? null,
98
- frozen_request_id: null,
99
- },
100
- };
101
- }
102
- const retiring = (state.retiring ?? []).find((entry) => entry.question_id === questionId);
103
- const history = (state.question_history ?? []).find((entry) => entry.question_id === questionId);
104
- if (retiring?.question_id !== undefined) {
105
- const unconfirmed = history?.request_id === undefined &&
106
- history?.frozen_request_id === retiring.request_id;
107
- return {
108
- found: true,
109
- session_id: owner.sessionId,
110
- question: {
111
- question_id: retiring.question_id,
112
- state: retiring.state === 'answered' ? 'answered' : 'retired',
113
- submitted: unconfirmed ? null : true,
114
- request_id: unconfirmed ? null : retiring.request_id,
115
- frozen_request_id: unconfirmed ? retiring.request_id : null,
116
- },
117
- };
118
- }
119
- if (history !== undefined) {
120
- return {
121
- found: true,
122
- session_id: owner.sessionId,
123
- question: {
124
- question_id: history.question_id,
125
- state: history.state,
126
- submitted: history.request_id !== undefined
127
- ? true
128
- : history.frozen_request_id !== undefined
129
- ? null
130
- : false,
131
- request_id: history.request_id ?? null,
132
- frozen_request_id: history.frozen_request_id ?? null,
133
- },
134
- };
135
- }
136
- return { found: false, ambiguous: false };
137
- }
138
- /** Registration identity — the convention every racing writer compares by. */
139
- export function isSamePending(a, b) {
140
- if (a.question_id !== undefined || b.question_id !== undefined) {
141
- return a.question_id !== undefined && a.question_id === b.question_id;
142
- }
143
- return a.question === b.question && a.asked_at === b.asked_at;
144
- }
145
- export function dropPendingQuestion(sessionId, env, entry, terminalState = 'retired') {
146
- updateSessionState(sessionId, env, (current) => {
147
- const pending = pendingList(current).filter((candidate) => !isSamePending(candidate, entry));
148
- const next = { ...current };
149
- if (pending.length > 0)
150
- next.pending = pending;
151
- else
152
- delete next.pending;
153
- return rememberQuestionState(next, entry, terminalState);
154
- });
155
- }
156
- function queuedQuestionIndex(state, entry) {
157
- if (entry.question_id !== undefined) {
158
- const remembered = (state.question_history ?? []).find((item) => item.question_id === entry.question_id);
159
- if (remembered?.state === 'withdrawn' ||
160
- remembered?.state === 'answered' ||
161
- remembered?.state === 'retired') {
162
- return -1;
163
- }
164
- }
165
- return pendingList(state).findIndex((candidate) => isSamePending(candidate, entry) && candidate.request_id === undefined);
166
- }
167
- /** A cheap preflight check; only admitQueuedQuestion authorizes submission. */
168
- export function queuedQuestionStillEligible(sessionId, env, entry) {
169
- return queuedQuestionIndex(readSessionState(sessionId, env), entry) >= 0;
170
- }
171
- /** Whether silent local withdrawal is no longer an honest outcome. */
172
- export function questionSubmissionAttempted(entry) {
173
- return entry.request_id !== undefined || entry.submission?.admitted_at !== undefined;
174
- }
175
- /**
176
- * One serialized boundary with close, prompt retirement, and SessionEnd.
177
- * Withdrawal first means no request starts. Admission first journals the
178
- * reserved identity and starts the request before releasing the lock; a later
179
- * close must retire that potentially remote identity, never call it withdrawn.
180
- *
181
- * submit must initiate the request synchronously and return its promise. The
182
- * lock is released before awaiting network work, using the ordinary bounded
183
- * acquisition and dead-process recovery of the session-state lock.
184
- */
185
- export function admitQueuedQuestion(sessionId, env, entry, intent, now, submit, serviceIdentity) {
186
- const file = sessionStatePath(sessionId, env);
187
- return withFileLock(`${file}.lock`, () => {
188
- if (sessionHasEnded(sessionId, env))
189
- return null;
190
- const current = readSessionState(sessionId, env);
191
- const index = queuedQuestionIndex(current, entry);
192
- if (index < 0)
193
- return null;
194
- const pending = [...pendingList(current)];
195
- const candidate = pending[index];
196
- for (const identity of [candidate.service_identity, intent.service_identity]) {
197
- if (identity !== undefined && (identity.machine_id !== serviceIdentity?.machine_id ||
198
- identity.base_url !== serviceIdentity?.base_url))
199
- return null;
200
- }
201
- if (candidate.submission?.request_id !== intent.request_id)
202
- return null;
203
- pending[index] = {
204
- ...candidate,
205
- submission: { ...intent, admitted_at: intent.admitted_at ?? now },
206
- };
207
- writeSessionStateUnlocked(file, sessionId, { ...current, pending });
208
- return submit();
209
- });
210
- }
211
- /** Replace only the rejected frozen identity, atomically with the native
212
- * obligation check. Preparing a replacement never erases the original first.
213
- */
214
- export function replaceFrozenSubmission(sessionId, env, entry, rejected, replacement) {
215
- let replaced = false;
216
- updateSessionState(sessionId, env, (current) => {
217
- if (sessionHasEnded(sessionId, env) || current.native_answer_operations?.some(op => op.question_id === entry.question_id))
218
- return current;
219
- const list = pendingList(current);
220
- const index = queuedQuestionIndex(current, entry);
221
- if (index < 0 || list[index]?.submission?.request_id !== rejected.request_id ||
222
- list[index]?.submission?.idempotency_key !== rejected.idempotency_key)
223
- return current;
224
- const next = [...list];
225
- next[index] = { ...next[index], submission: replacement };
226
- replaced = true;
227
- return { ...current, pending: next };
228
- });
229
- return replaced;
230
- }
231
- /** The question set this pending record pushes, however it was registered. */
232
- export function pendingQuestions(pending) {
233
- return pending.questions ?? [{ id: 'q1', text: pending.question }];
234
- }
235
- /** Did any question in the set offer choices? Decides how replies combine. */
236
- export function pendingHasChoices(pending) {
237
- return pendingQuestions(pending).some((question) => question.choices !== undefined);
238
- }
239
- //# sourceMappingURL=hook-question-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-question-state.js","sourceRoot":"","sources":["../src/hook-question-state.ts"],"names":[],"mappings":"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"}
@@ -1,127 +0,0 @@
1
- import type { HookHarness, PendingQuestion, SessionState } from './hook-types.js';
2
- import type { ProcessIdentity } from './process-identity.js';
3
- export declare function sessionStatePath(sessionId: string, env: NodeJS.ProcessEnv): string;
4
- export declare function sessionHasEnded(sessionId: string, env: NodeJS.ProcessEnv): boolean;
5
- /**
6
- * When a lifecycle edge happened, in an order no wall-clock change can alter.
7
- *
8
- * `mono` is the system-wide monotonic clock (`process.hrtime`), shared by
9
- * every process on this machine within one boot. Wall time is kept for people
10
- * reading the files, never for ordering: an NTP step or a manual change moved
11
- * it backwards far enough to end a resumed session with its own earlier end.
12
- */
13
- export interface LifecycleStamp {
14
- wall: number;
15
- mono: string;
16
- }
17
- export declare function lifecycleStamp(wall?: number): LifecycleStamp;
18
- /**
19
- * Whether `edge` happened before `reference`, a stamp taken by this process.
20
- * A monotonic value ahead of this process's own clock can only come from an
21
- * earlier boot, so it is earlier too; an edge without a stamp (an older
22
- * build's marker) is treated as earlier.
23
- */
24
- export declare function happenedBefore(edge: LifecycleStamp | null, reference: LifecycleStamp): boolean;
25
- /** What SessionEnd recorded: when, and which incarnation it ended. */
26
- export interface SessionEndMarker {
27
- stamp: LifecycleStamp | null;
28
- /** `key` of the incarnation current when the session ended, when there was one. */
29
- ends: string | null;
30
- }
31
- export declare function markSessionEnded(sessionId: string, env: NodeJS.ProcessEnv, now: number): SessionEndMarker;
32
- /** The end marker, or null when the session carries none. */
33
- export declare function readSessionEndMarker(sessionId: string, env: NodeJS.ProcessEnv): SessionEndMarker | null;
34
- /** Whether this marker ended exactly this incarnation. */
35
- export declare function endsIncarnation(marker: SessionEndMarker | null, incarnation: SessionIncarnation): boolean;
36
- /**
37
- * One start of one Agent Session: the edge from which its end is judged.
38
- *
39
- * A harness may start the same session id again — `/resume` in the same
40
- * process, or `--resume` in a new one — after SessionEnd already marked it
41
- * ended. SessionEnd names the incarnation it ended, so an end recorded for an
42
- * earlier incarnation can never end a later one, whatever the wall clock did.
43
- */
44
- export interface SessionIncarnation {
45
- /** Stable local identity of this start; end markers name it. */
46
- key: string;
47
- /** Opaque identity shown to the service by the Session Attendant. Never a PID. */
48
- incarnation: string;
49
- start: LifecycleStamp;
50
- /** The OpenClaw plugin generation behind this stable sessionKey. */
51
- openclaw_generation?: string;
52
- /** The harness process hosting this incarnation, when the starter knew it. */
53
- harness_process?: ProcessIdentity;
54
- }
55
- export declare function readSessionIncarnation(sessionId: string, env: NodeJS.ProcessEnv): SessionIncarnation | null;
56
- export declare function newIncarnationId(): string;
57
- /**
58
- * The one shared, idempotent start of an Agent Session incarnation.
59
- *
60
- * Every SessionStart handler calls it before anything reads the end marker,
61
- * stamped with the moment its own invocation began.
62
- *
63
- * - The recorded incarnation is joined when it runs in the same harness
64
- * process and has not ended — the second handler of one start — or when its
65
- * end came *after* this handler began: that end is this start's own, seen by
66
- * a delayed handler, and it must stay ended.
67
- * - Otherwise a new incarnation is minted: no record, another harness
68
- * process, or the recorded incarnation ended before this handler began
69
- * (in-process `/resume` after `/clear`).
70
- * - An end marker from before this handler, for any incarnation but the one
71
- * joined, is dropped; a later one is kept.
72
- */
73
- export declare function beginSessionIncarnation(sessionId: string, env: NodeJS.ProcessEnv, options: {
74
- stamp: LifecycleStamp;
75
- harnessProcess?: ProcessIdentity;
76
- /**
77
- * Only a SessionStart may drop an earlier end marker. A re-arm (a later
78
- * hook finding no incarnation for its harness process) mints one without
79
- * touching the marker, so shared cancellation stays intact.
80
- */
81
- clearEarlierEnd?: boolean;
82
- openclawGeneration?: string;
83
- }): SessionIncarnation;
84
- /**
85
- * Replace this incarnation's service identity after the service refused it,
86
- * keeping its local key and start. Only the holder of `expected` may rotate it.
87
- */
88
- export declare function rotateSessionIncarnation(sessionId: string, env: NodeJS.ProcessEnv, expected: string): SessionIncarnation | null;
89
- export declare function sessionNotified(sessionId: string, env: NodeJS.ProcessEnv): boolean;
90
- /** Record the first accepted Notification Request of an Agent Session. Never throws. */
91
- export declare function recordSessionNotified(sessionId: string, env: NodeJS.ProcessEnv, now: number): void;
92
- /**
93
- * Keep a long-running session's small files younger than the abandoned-state
94
- * prune, including any extra files its owner names (the attendant's claim).
95
- */
96
- export declare function refreshSessionMarkers(sessionId: string, env: NodeJS.ProcessEnv, now: number, extra?: readonly string[]): void;
97
- export declare function readSessionState(sessionId: string, env: NodeJS.ProcessEnv): SessionState;
98
- /**
99
- * Resolve a stable question or request id to the one exact session that owns it.
100
- *
101
- * This deliberately searches lifecycle state, not checkout pointers: question
102
- * identity is global on this machine, while a linked worktree is only where a
103
- * command happened to run. Ambiguous or corrupt matches fail closed.
104
- */
105
- export declare function findOwningSession(id: string, env: NodeJS.ProcessEnv): {
106
- sessionId: string | null;
107
- ambiguous: boolean;
108
- };
109
- export declare function writeSessionState(sessionId: string, env: NodeJS.ProcessEnv, state: SessionState): void;
110
- export declare function clearSessionState(sessionId: string, env: NodeJS.ProcessEnv): void;
111
- /** Caller owns the session lock. Completed keys remain non-reusable until the
112
- * whole abandoned session is pruned; unfinished operations pin that boundary.
113
- */
114
- export declare function clearSessionStateUnlocked(sessionId: string, env: NodeJS.ProcessEnv): void;
115
- export declare function writeSessionStateUnlocked(file: string, sessionId: string, state: SessionState): void;
116
- export declare function updateSessionState(sessionId: string, env: NodeJS.ProcessEnv, update: (current: SessionState) => SessionState): SessionState;
117
- /** Record the current installation when an owner session starts. */
118
- export declare function recordSessionStart(sessionId: string, env: NodeJS.ProcessEnv, harness?: HookHarness, cwd?: string, codexStopDefinitionFingerprint?: string, stamp?: LifecycleStamp, openclawGeneration?: string): void;
119
- /** Atomically claim Cursor's first-Stop activation fallback once per conversation. */
120
- export declare function claimCursorStopActivation(sessionId: string, env: NodeJS.ProcessEnv, now: number): boolean;
121
- /** Cursor's loop_count proves the previous Stop follow-up reached the host. */
122
- export declare function confirmCursorStopActivation(sessionId: string, env: NodeJS.ProcessEnv, now: number): boolean;
123
- /** A fresh/cleared Cursor lifecycle makes its next Stop the fallback owner again. */
124
- export declare function resetCursorStopActivation(sessionId: string, env: NodeJS.ProcessEnv): void;
125
- export declare function pruneAbandonedSessions(env: NodeJS.ProcessEnv, now?: number, maxAgeMs?: number): number;
126
- /** The registered-question queue. Anything but the current shape reads as empty. */
127
- export declare function pendingList(state: SessionState): PendingQuestion[];