@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,488 +0,0 @@
1
- /** Durable per-Agent-Session state, activation bookkeeping, and pruning. */
2
- import { randomBytes } from 'node:crypto';
3
- import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, utimesSync, writeFileSync, } from 'node:fs';
4
- import path from 'node:path';
5
- import { atomicWriteFileSync } from './atomic-file.js';
6
- import { sanitizeSessionId, sessionConfigPath, stateDir } from './config.js';
7
- import { withFileLock } from './file-lock.js';
8
- export function sessionStatePath(sessionId, env) {
9
- return path.join(stateDir(env), 'sessions', `${sanitizeSessionId(sessionId)}.json`);
10
- }
11
- /**
12
- * Durable cancellation for observers that can outlive the harness process.
13
- *
14
- * Absence of session state is not enough: SessionEnd deliberately deletes it,
15
- * and an in-flight submit/fence could otherwise recreate it afterwards. The
16
- * marker shares the session-state lock, giving every racing writer one total
17
- * order: either its state lands before SessionEnd and is cleaned up there, or
18
- * it observes this marker and must not write or deliver into the ended session.
19
- */
20
- function sessionEndMarkerPath(sessionId, env) {
21
- return path.join(stateDir(env), 'sessions', `${sanitizeSessionId(sessionId)}.ended`);
22
- }
23
- export function sessionHasEnded(sessionId, env) {
24
- return existsSync(sessionEndMarkerPath(sessionId, env));
25
- }
26
- export function lifecycleStamp(wall = Date.now()) {
27
- return { wall, mono: process.hrtime.bigint().toString() };
28
- }
29
- function parseStamp(value) {
30
- if (typeof value !== 'object' || value === null)
31
- return null;
32
- const record = value;
33
- return typeof record['wall'] === 'number' &&
34
- typeof record['mono'] === 'string' &&
35
- /^\d{1,30}$/.test(record['mono'])
36
- ? { wall: record['wall'], mono: record['mono'] }
37
- : null;
38
- }
39
- /**
40
- * Whether `edge` happened before `reference`, a stamp taken by this process.
41
- * A monotonic value ahead of this process's own clock can only come from an
42
- * earlier boot, so it is earlier too; an edge without a stamp (an older
43
- * build's marker) is treated as earlier.
44
- */
45
- export function happenedBefore(edge, reference) {
46
- if (edge === null)
47
- return true;
48
- const mono = BigInt(edge.mono);
49
- return mono < BigInt(reference.mono) || mono > process.hrtime.bigint();
50
- }
51
- export function markSessionEnded(sessionId, env, now) {
52
- const stateFile = sessionStatePath(sessionId, env);
53
- return withFileLock(`${stateFile}.lock`, () => {
54
- const current = readSessionIncarnation(sessionId, env);
55
- const marker = { stamp: lifecycleStamp(now), ends: current?.key ?? null };
56
- atomicWriteFileSync(sessionEndMarkerPath(sessionId, env), `${JSON.stringify(marker)}\n`);
57
- return marker;
58
- });
59
- }
60
- /** The end marker, or null when the session carries none. */
61
- export function readSessionEndMarker(sessionId, env) {
62
- let raw;
63
- try {
64
- raw = readFileSync(sessionEndMarkerPath(sessionId, env), 'utf8');
65
- }
66
- catch {
67
- return null;
68
- }
69
- try {
70
- const parsed = JSON.parse(raw);
71
- if (typeof parsed === 'object' && parsed !== null) {
72
- return {
73
- stamp: parseStamp(parsed['stamp']),
74
- ends: typeof parsed['ends'] === 'string' ? parsed['ends'] : null,
75
- };
76
- }
77
- }
78
- catch {
79
- // An older build wrote bare milliseconds.
80
- }
81
- return { stamp: null, ends: null };
82
- }
83
- /** Whether this marker ended exactly this incarnation. */
84
- export function endsIncarnation(marker, incarnation) {
85
- return marker !== null && marker.ends === incarnation.key;
86
- }
87
- function sessionIncarnationPath(sessionId, env) {
88
- return path.join(stateDir(env), 'sessions', `${sanitizeSessionId(sessionId)}.incarnation.json`);
89
- }
90
- export function readSessionIncarnation(sessionId, env) {
91
- try {
92
- const parsed = JSON.parse(readFileSync(sessionIncarnationPath(sessionId, env), 'utf8'));
93
- if (typeof parsed !== 'object' || parsed === null)
94
- return null;
95
- const record = parsed;
96
- const start = parseStamp(record['start']);
97
- if (typeof record['key'] !== 'string' ||
98
- typeof record['incarnation'] !== 'string' ||
99
- !/^inc_[A-Za-z0-9_-]{10,64}$/.test(record['incarnation']) ||
100
- start === null) {
101
- return null;
102
- }
103
- const harness = record['harness_process'];
104
- return {
105
- key: record['key'],
106
- incarnation: record['incarnation'],
107
- start,
108
- ...(typeof record['openclaw_generation'] === 'string'
109
- ? { openclaw_generation: record['openclaw_generation'] }
110
- : {}),
111
- ...(harness !== undefined &&
112
- typeof harness['pid'] === 'number' &&
113
- typeof harness['start'] === 'string'
114
- ? { harness_process: { pid: harness['pid'], start: harness['start'] } }
115
- : {}),
116
- };
117
- }
118
- catch {
119
- return null;
120
- }
121
- }
122
- export function newIncarnationId() {
123
- return `inc_${randomBytes(12).toString('base64url')}`;
124
- }
125
- /**
126
- * The one shared, idempotent start of an Agent Session incarnation.
127
- *
128
- * Every SessionStart handler calls it before anything reads the end marker,
129
- * stamped with the moment its own invocation began.
130
- *
131
- * - The recorded incarnation is joined when it runs in the same harness
132
- * process and has not ended — the second handler of one start — or when its
133
- * end came *after* this handler began: that end is this start's own, seen by
134
- * a delayed handler, and it must stay ended.
135
- * - Otherwise a new incarnation is minted: no record, another harness
136
- * process, or the recorded incarnation ended before this handler began
137
- * (in-process `/resume` after `/clear`).
138
- * - An end marker from before this handler, for any incarnation but the one
139
- * joined, is dropped; a later one is kept.
140
- */
141
- export function beginSessionIncarnation(sessionId, env, options) {
142
- const stateFile = sessionStatePath(sessionId, env);
143
- return withFileLock(`${stateFile}.lock`, () => {
144
- const marker = readSessionEndMarker(sessionId, env);
145
- const current = readSessionIncarnation(sessionId, env);
146
- const differentHarness = options.harnessProcess !== undefined &&
147
- current?.harness_process !== undefined &&
148
- (current.harness_process.pid !== options.harnessProcess.pid ||
149
- current.harness_process.start !== options.harnessProcess.start);
150
- const differentOpenclawGeneration = options.openclawGeneration !== undefined &&
151
- current?.openclaw_generation !== options.openclawGeneration;
152
- const endedEarlier = current !== null && endsIncarnation(marker, current) && happenedBefore(marker.stamp, options.stamp);
153
- let next;
154
- if (current !== null && !differentHarness && !differentOpenclawGeneration && !endedEarlier) {
155
- next =
156
- current.harness_process === undefined && options.harnessProcess !== undefined
157
- ? { ...current, harness_process: options.harnessProcess }
158
- : current;
159
- }
160
- else {
161
- next = {
162
- key: randomBytes(12).toString('base64url'),
163
- incarnation: newIncarnationId(),
164
- start: options.stamp,
165
- ...(options.openclawGeneration === undefined
166
- ? {}
167
- : { openclaw_generation: options.openclawGeneration }),
168
- ...(options.harnessProcess === undefined ? {} : { harness_process: options.harnessProcess }),
169
- };
170
- }
171
- if (options.clearEarlierEnd !== false &&
172
- marker !== null &&
173
- !endsIncarnation(marker, next) &&
174
- happenedBefore(marker.stamp, options.stamp)) {
175
- rmSync(sessionEndMarkerPath(sessionId, env), { force: true });
176
- }
177
- if (next !== current) {
178
- atomicWriteFileSync(sessionIncarnationPath(sessionId, env), `${JSON.stringify(next)}\n`);
179
- }
180
- return next;
181
- });
182
- }
183
- /**
184
- * Replace this incarnation's service identity after the service refused it,
185
- * keeping its local key and start. Only the holder of `expected` may rotate it.
186
- */
187
- export function rotateSessionIncarnation(sessionId, env, expected) {
188
- const stateFile = sessionStatePath(sessionId, env);
189
- return withFileLock(`${stateFile}.lock`, () => {
190
- const current = readSessionIncarnation(sessionId, env);
191
- if (current === null || current.incarnation !== expected)
192
- return null;
193
- const next = { ...current, incarnation: newIncarnationId() };
194
- atomicWriteFileSync(sessionIncarnationPath(sessionId, env), `${JSON.stringify(next)}\n`);
195
- return next;
196
- });
197
- }
198
- /**
199
- * Whether this Agent Session ever had a Notification Request accepted on this
200
- * machine. Its Session Attendant makes no network call before this marker
201
- * exists, so sessions that never notified are never reported.
202
- */
203
- function sessionNotifiedPath(sessionId, env) {
204
- return path.join(stateDir(env), 'sessions', `${sanitizeSessionId(sessionId)}.notified`);
205
- }
206
- export function sessionNotified(sessionId, env) {
207
- return existsSync(sessionNotifiedPath(sessionId, env));
208
- }
209
- /** Record the first accepted Notification Request of an Agent Session. Never throws. */
210
- export function recordSessionNotified(sessionId, env, now) {
211
- try {
212
- const file = sessionNotifiedPath(sessionId, env);
213
- if (existsSync(file))
214
- return;
215
- mkdirSync(path.dirname(file), { recursive: true });
216
- atomicWriteFileSync(file, `${now}\n`);
217
- }
218
- catch {
219
- // The marker only wakes a dormant attendant; the notification already left.
220
- }
221
- }
222
- /**
223
- * Keep a long-running session's small files younger than the abandoned-state
224
- * prune, including any extra files its owner names (the attendant's claim).
225
- */
226
- export function refreshSessionMarkers(sessionId, env, now, extra = []) {
227
- const at = new Date(now);
228
- for (const file of [sessionIncarnationPath(sessionId, env), sessionNotifiedPath(sessionId, env), ...extra]) {
229
- try {
230
- utimesSync(file, at, at);
231
- }
232
- catch {
233
- // Missing is fine; the prune only removes what is old.
234
- }
235
- }
236
- }
237
- export function readSessionState(sessionId, env) {
238
- const file = sessionStatePath(sessionId, env);
239
- if (!existsSync(file))
240
- return {};
241
- try {
242
- const parsed = JSON.parse(readFileSync(file, 'utf8'));
243
- if (typeof parsed !== 'object' || parsed === null)
244
- return {};
245
- const state = { ...parsed };
246
- delete state.session_id;
247
- return state;
248
- }
249
- catch {
250
- // A corrupt marker must not wedge the harness; treat it as "no evidence",
251
- // which fails closed onto ordinary terminal behaviour.
252
- return {};
253
- }
254
- }
255
- /**
256
- * Resolve a stable question or request id to the one exact session that owns it.
257
- *
258
- * This deliberately searches lifecycle state, not checkout pointers: question
259
- * identity is global on this machine, while a linked worktree is only where a
260
- * command happened to run. Ambiguous or corrupt matches fail closed.
261
- */
262
- export function findOwningSession(id, env) {
263
- const directory = path.join(stateDir(env), 'sessions');
264
- if (!existsSync(directory))
265
- return { sessionId: null, ambiguous: false };
266
- const matches = [];
267
- for (const name of readdirSync(directory)) {
268
- if (!name.endsWith('.json'))
269
- continue;
270
- let persisted = null;
271
- try {
272
- const parsed = JSON.parse(readFileSync(path.join(directory, name), 'utf8'));
273
- if (typeof parsed === 'object' && parsed !== null) {
274
- persisted = parsed;
275
- }
276
- }
277
- catch {
278
- // Corrupt lifecycle state is not identity evidence.
279
- }
280
- if (persisted === null || typeof persisted.session_id !== 'string')
281
- continue;
282
- const sessionId = persisted.session_id;
283
- const state = persisted;
284
- const pendingMatch = pendingList(state).some((entry) => entry.question_id === id || entry.request_id === id);
285
- const retiringMatch = (state.retiring ?? []).some((entry) => entry.question_id === id || entry.request_id === id);
286
- const historyMatch = (state.question_history ?? []).some((entry) => entry.question_id === id || entry.request_id === id);
287
- const acknowledgementMatch = (state.acknowledgement_due ?? []).some((entry) => entry.request_id === id) ||
288
- (state.message_acknowledgement_due ?? []).some((entry) => entry.message_id === id) ||
289
- (state.openclaw_foreground_replies ?? []).some((entry) => entry.request_id === id);
290
- const acceptedMatch = state.accepted?.answers.some(({ pending }) => pending.question_id === id || pending.request_id === id) ?? false;
291
- const deliveredMatch = state.delivered_answers?.some(({ pending }) => pending.question_id === id || pending.request_id === id) ?? false;
292
- const nativeMatch = state.native_answer_operations?.some(entry => entry.question_id === id || entry.request_id === id) || state.codex_question_bindings?.some(entry => entry.question_id === id || entry.confirmed_request_id === id) || false;
293
- if (pendingMatch || retiringMatch || historyMatch || acknowledgementMatch || acceptedMatch || deliveredMatch || nativeMatch) {
294
- matches.push(sessionId);
295
- if (matches.length > 1)
296
- return { sessionId: null, ambiguous: true };
297
- }
298
- }
299
- return { sessionId: matches[0] ?? null, ambiguous: false };
300
- }
301
- export function writeSessionState(sessionId, env, state) {
302
- const file = sessionStatePath(sessionId, env);
303
- withFileLock(`${file}.lock`, () => writeSessionStateUnlocked(file, sessionId, state));
304
- }
305
- export function clearSessionState(sessionId, env) {
306
- const file = sessionStatePath(sessionId, env);
307
- withFileLock(`${file}.lock`, () => {
308
- clearSessionStateUnlocked(sessionId, env);
309
- });
310
- }
311
- /** Caller owns the session lock. Completed keys remain non-reusable until the
312
- * whole abandoned session is pruned; unfinished operations pin that boundary.
313
- */
314
- export function clearSessionStateUnlocked(sessionId, env) {
315
- const file = sessionStatePath(sessionId, env);
316
- const current = readSessionState(sessionId, env);
317
- if ((current.native_answer_operations?.length ?? 0) > 0 || (current.codex_question_bindings?.length ?? 0) > 0) {
318
- writeSessionStateUnlocked(file, sessionId, {
319
- ...(current.native_answer_operations === undefined ? {} : { native_answer_operations: current.native_answer_operations }),
320
- ...(current.codex_question_bindings === undefined ? {} : { codex_question_bindings: current.codex_question_bindings }),
321
- ...(current.codex_question_marker_counter === undefined ? {} : { codex_question_marker_counter: current.codex_question_marker_counter }),
322
- ...(current.question_history === undefined ? {} : { question_history: current.question_history }),
323
- });
324
- }
325
- else
326
- rmSync(file, { force: true });
327
- // The session override lives in a sibling file; leaving it behind meant a
328
- // later session reusing the id silently inherited `ask_notifications = false`.
329
- rmSync(sessionConfigPath(sessionId, env), { force: true });
330
- }
331
- export function writeSessionStateUnlocked(file, sessionId, state) {
332
- atomicWriteFileSync(file, `${JSON.stringify({ ...state, session_id: sessionId }, null, 2)}\n`);
333
- }
334
- export function updateSessionState(sessionId, env, update) {
335
- const file = sessionStatePath(sessionId, env);
336
- return withFileLock(`${file}.lock`, () => {
337
- const current = readSessionState(sessionId, env);
338
- // SessionEnd and every asynchronous writer share this lock. Once the
339
- // durable marker exists, no observer may recreate state for that session.
340
- if (sessionHasEnded(sessionId, env))
341
- return current;
342
- const next = update(current);
343
- writeSessionStateUnlocked(file, sessionId, next);
344
- return next;
345
- });
346
- }
347
- /** Record the current installation when an owner session starts. */
348
- export function recordSessionStart(sessionId, env, harness, cwd, codexStopDefinitionFingerprint, stamp = lifecycleStamp(), openclawGeneration) {
349
- // Harnesses may reuse a session id only by explicitly starting that session
350
- // again. That lifecycle edge is the sole authority for clearing cancellation,
351
- // and it clears only an end recorded before this handler started.
352
- beginSessionIncarnation(sessionId, env, {
353
- stamp,
354
- ...(openclawGeneration === undefined ? {} : { openclawGeneration }),
355
- });
356
- updateSessionState(sessionId, env, (current) => {
357
- const next = {
358
- ...current,
359
- ...(harness === undefined ? {} : { harness }),
360
- ...(cwd === undefined
361
- ? {}
362
- : { activation_cwd: harness === 'codex' ? cwd : current.activation_cwd ?? cwd }),
363
- };
364
- // A Codex SessionStart materializes one new runtime generation. Absence of
365
- // singular proof must replace prior proof too; retaining it would let a
366
- // resumed session borrow the definition loaded by an earlier runtime.
367
- if (harness === 'codex') {
368
- delete next.codex_stop_definition_fingerprint;
369
- if (codexStopDefinitionFingerprint !== undefined) {
370
- next.codex_stop_definition_fingerprint = codexStopDefinitionFingerprint;
371
- }
372
- }
373
- return next;
374
- });
375
- }
376
- /** Atomically claim Cursor's first-Stop activation fallback once per conversation. */
377
- export function claimCursorStopActivation(sessionId, env, now) {
378
- const claimGuardMs = 30_000;
379
- let claimed = false;
380
- updateSessionState(sessionId, env, (current) => {
381
- if (current.cursor_activation_confirmed_at !== undefined)
382
- return current;
383
- if (current.cursor_activation_claimed_at !== undefined &&
384
- now - current.cursor_activation_claimed_at < claimGuardMs) {
385
- return current;
386
- }
387
- claimed = true;
388
- return { ...current, cursor_activation_claimed_at: now };
389
- });
390
- return claimed;
391
- }
392
- /** Cursor's loop_count proves the previous Stop follow-up reached the host. */
393
- export function confirmCursorStopActivation(sessionId, env, now) {
394
- let owned = false;
395
- updateSessionState(sessionId, env, (current) => {
396
- if (current.cursor_activation_confirmed_at !== undefined) {
397
- owned = true;
398
- return current;
399
- }
400
- if (current.cursor_activation_claimed_at === undefined)
401
- return current;
402
- owned = true;
403
- return { ...current, cursor_activation_confirmed_at: now };
404
- });
405
- return owned;
406
- }
407
- /** A fresh/cleared Cursor lifecycle makes its next Stop the fallback owner again. */
408
- export function resetCursorStopActivation(sessionId, env) {
409
- updateSessionState(sessionId, env, (current) => {
410
- if (current.cursor_activation_claimed_at === undefined &&
411
- current.cursor_activation_confirmed_at === undefined) {
412
- return current;
413
- }
414
- const next = { ...current };
415
- delete next.cursor_activation_claimed_at;
416
- delete next.cursor_activation_confirmed_at;
417
- return next;
418
- });
419
- }
420
- /**
421
- * Session state a crashed harness left behind.
422
- *
423
- * `SessionEnd` removes session state and leaves a short-lived cancellation
424
- * marker; a harness that crashes or is killed never reaches it. At roughly a
425
- * hundred sessions a day that is tens of thousands of files a year, none of
426
- * which anything reads.
427
- *
428
- * Opportunistic rather than scheduled: hooks are the only thing that runs, so
429
- * a hook is where this has to live. It is rate-limited by its own stamp file
430
- * so the common case costs one `stat`, not a directory walk — a Stop hook is
431
- * on the critical path of every turn.
432
- */
433
- const SESSION_PRUNE_AFTER_MS = 7 * 24 * 3600 * 1000;
434
- const SESSION_PRUNE_INTERVAL_MS = 24 * 3600 * 1000;
435
- export function pruneAbandonedSessions(env, now = Date.now(), maxAgeMs = SESSION_PRUNE_AFTER_MS) {
436
- const directory = path.join(stateDir(env), 'sessions');
437
- const stamp = path.join(stateDir(env), 'last-prune');
438
- try {
439
- if (existsSync(stamp) && now - statSync(stamp).mtimeMs < SESSION_PRUNE_INTERVAL_MS)
440
- return 0;
441
- mkdirSync(path.dirname(stamp), { recursive: true });
442
- writeFileSync(stamp, '', { mode: 0o600 });
443
- if (!existsSync(directory))
444
- return 0;
445
- let removed = 0;
446
- for (const name of readdirSync(directory)) {
447
- const file = path.join(directory, name);
448
- try {
449
- if (!statSync(file).isFile())
450
- continue;
451
- // Every sibling of an unfinished native operation shares the same
452
- // lifecycle fence. Keep the state, incarnation and end marker together.
453
- const stem = name.replace(/\..*$/, '');
454
- const stateFile = path.join(directory, `${stem}.json`);
455
- const prune = () => {
456
- if (existsSync(stateFile)) {
457
- const state = JSON.parse(readFileSync(stateFile, 'utf8'));
458
- if (state.native_answer_operations?.some(op => op.acknowledgement === undefined))
459
- return;
460
- }
461
- const age = now - statSync(file).mtimeMs;
462
- // A negative age means the clock moved, not that the file is old.
463
- // Deleting live session state on an NTP correction would lose a
464
- // question already on the user's phone.
465
- if (age <= maxAgeMs)
466
- return;
467
- rmSync(file, { force: true });
468
- removed += 1;
469
- };
470
- withFileLock(`${stateFile}.lock`, prune);
471
- }
472
- catch {
473
- // A file that vanished under us, or one we may not read. Neither is
474
- // worth failing a hook for, and the next pass will see it again.
475
- }
476
- }
477
- return removed;
478
- }
479
- catch {
480
- // Housekeeping must never be the reason a turn fails.
481
- return 0;
482
- }
483
- }
484
- /** The registered-question queue. Anything but the current shape reads as empty. */
485
- export function pendingList(state) {
486
- return Array.isArray(state.pending) ? state.pending : [];
487
- }
488
- //# sourceMappingURL=hook-session-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-session-state.js","sourceRoot":"","sources":["../src/hook-session-state.ts"],"names":[],"mappings":"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"}