@raidiant/notifai 11.7.1-beta.2 → 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 +61 -4
  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,77 +0,0 @@
1
- import { lstatSync, readFileSync } from 'node:fs';
2
- import path from 'node:path';
3
- import { atomicWriteFileSync } from './atomic-file.js';
4
- import { stateDir } from './config.js';
5
- import { withFileLock } from './file-lock.js';
6
- import { newerPublishedCli, publishedCliDistTags, shouldConsultCliRegistry, thisCliVersion } from './cli-release.js';
7
- import { CLI_UPDATE_AVAILABLE } from './cli-contract.js';
8
- const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
9
- const NOTICE_INTERVAL_MS = 7 * CHECK_INTERVAL_MS;
10
- function readState(file) {
11
- try {
12
- const stat = lstatSync(file);
13
- if (!stat.isFile() || stat.size > 1024)
14
- throw new Error('invalid update notice state');
15
- const value = JSON.parse(readFileSync(file, 'utf8'));
16
- if (typeof value !== 'object' || value === null)
17
- throw new Error('invalid update notice state');
18
- const state = value;
19
- for (const timestamp of [state.checked_at, state.notified_at]) {
20
- if (timestamp !== undefined && (!Number.isSafeInteger(timestamp) || timestamp < 0)) {
21
- throw new Error('invalid update notice timestamp');
22
- }
23
- }
24
- return state;
25
- }
26
- catch (error) {
27
- if (error.code === 'ENOENT')
28
- return {};
29
- throw error;
30
- }
31
- }
32
- function recent(timestamp, now, interval) {
33
- // A clock rollback must not create another notice.
34
- return timestamp !== undefined && now - timestamp < interval;
35
- }
36
- /** One optional notice per machine-local state directory, across roots and harnesses. */
37
- export async function agentUpdateNotice(options) {
38
- if (!shouldConsultCliRegistry({ env: options.env }))
39
- return undefined;
40
- const file = path.join(stateDir(options.env), 'cli-update-notice.json');
41
- const save = (state) => atomicWriteFileSync(file, `${JSON.stringify(state)}\n`);
42
- try {
43
- // Claim the lookup before doing network I/O. Another process neither waits
44
- // for the registry nor emits a duplicate. Only short disk work holds a lock.
45
- const claimed = withFileLock(`${file}.lock`, () => {
46
- const state = readState(file);
47
- if (recent(state.notified_at, options.now, NOTICE_INTERVAL_MS) ||
48
- recent(state.checked_at, options.now, CHECK_INTERVAL_MS))
49
- return false;
50
- save({ ...state, checked_at: options.now });
51
- return true;
52
- }, { waitMs: 50 });
53
- if (!claimed)
54
- return undefined;
55
- const tags = await publishedCliDistTags(options.fetchImpl, { useCache: false });
56
- if (newerPublishedCli(thisCliVersion(), tags) === null)
57
- return undefined;
58
- const notify = withFileLock(`${file}.lock`, () => {
59
- const state = readState(file);
60
- if (recent(state.notified_at, options.now, NOTICE_INTERVAL_MS))
61
- return false;
62
- save({ ...state, notified_at: options.now });
63
- return true;
64
- }, { waitMs: 50 });
65
- if (!notify)
66
- return undefined;
67
- return `${CLI_UPDATE_AVAILABLE} Run \`notifai update --check --json\`, read the release notes, and briefly offer to perform the update at a natural pause. ` +
68
- `When authorized, use \`${options.updateCommand}\` and follow the new CLI guidance and session handoff. ` +
69
- 'Follow the User\'s instructions about updating; keep working if deferred. ' +
70
- 'Do not send a Notification Request just for this notice. It appears at most once every seven days on this machine.';
71
- }
72
- catch {
73
- // Update discovery must never interrupt lifecycle guidance or routing.
74
- return undefined;
75
- }
76
- }
77
- //# sourceMappingURL=agent-update-notice.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-update-notice.js","sourceRoot":"","sources":["../src/agent-update-notice.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- export interface AtomicWriteOptions {
2
- /** Mode for a newly created file. Existing regular files keep their mode. */
3
- mode?: number;
4
- /** False when a managed executable must keep the requested mode on repair. */
5
- preserveMode?: boolean;
6
- /** Reject a target owned by another user instead of replacing it. */
7
- requireCurrentUserOwner?: boolean;
8
- /**
9
- * POSIX directory mode applied to the parent. Defaults to 0o700 when
10
- * `requireCurrentUserOwner` is set so credential and config dirs match the
11
- * hook-adapter and log directories.
12
- */
13
- directoryMode?: number;
14
- }
15
- /**
16
- * Replace one regular file without exposing a truncated intermediate state.
17
- *
18
- * The temporary file is a unique sibling, so rename is atomic on every
19
- * supported filesystem. The contents are flushed before the rename, and a
20
- * symlink target is refused instead of silently writing through it.
21
- */
22
- export declare function atomicWriteFileSync(file: string, contents: string | Uint8Array, options?: AtomicWriteOptions): void;
23
- /**
24
- * Create (or tighten) a directory that must not be world-readable.
25
- *
26
- * `mkdir` mode applies only to a newly created leaf, so an existing 0755
27
- * credential directory would otherwise stay world-listable. POSIX chmod of
28
- * the leaf is the matching repair; Windows has no equivalent mode bits.
29
- */
30
- export declare function ensurePrivateDirectory(directory: string): void;
@@ -1,148 +0,0 @@
1
- import { randomBytes } from 'node:crypto';
2
- import { chmodSync, closeSync, fsyncSync, lstatSync, mkdirSync, openSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
3
- import path from 'node:path';
4
- /**
5
- * Replace one regular file without exposing a truncated intermediate state.
6
- *
7
- * The temporary file is a unique sibling, so rename is atomic on every
8
- * supported filesystem. The contents are flushed before the rename, and a
9
- * symlink target is refused instead of silently writing through it.
10
- */
11
- export function atomicWriteFileSync(file, contents, options = {}) {
12
- const directory = path.dirname(file);
13
- const requireCurrentUserOwner = options.requireCurrentUserOwner ?? false;
14
- const directoryMode = options.directoryMode ?? (requireCurrentUserOwner ? 0o700 : undefined);
15
- const parent = ensureDirectory(directory, {
16
- requireCurrentUserOwner,
17
- ...(directoryMode === undefined ? {} : { mode: directoryMode }),
18
- });
19
- const target = targetMetadata(file, options.mode ?? 0o600, options.preserveMode ?? true, options.requireCurrentUserOwner ?? false);
20
- const temp = path.join(directory, `.${path.basename(file)}.notifai-${process.pid}-${randomBytes(6).toString('hex')}.tmp`);
21
- let handle;
22
- try {
23
- handle = openSync(temp, 'wx', target.mode);
24
- writeFileSync(handle, contents);
25
- fsyncSync(handle);
26
- closeSync(handle);
27
- handle = undefined;
28
- // Creation may already have the exact mode. Avoid a redundant operation
29
- // that a sandbox can forbid while still allowing the private write.
30
- if ((lstatSync(temp).mode & 0o7777) !== target.mode)
31
- chmodSync(temp, target.mode);
32
- assertSameDirectory(directory, parent);
33
- assertUnchangedTarget(file, target);
34
- renameSync(temp, file);
35
- syncDirectory(directory);
36
- }
37
- catch (err) {
38
- if (handle !== undefined)
39
- closeSync(handle);
40
- try {
41
- unlinkSync(temp);
42
- }
43
- catch {
44
- // Preserve the original error; the temp may not have been created.
45
- }
46
- throw err;
47
- }
48
- }
49
- /**
50
- * Create (or tighten) a directory that must not be world-readable.
51
- *
52
- * `mkdir` mode applies only to a newly created leaf, so an existing 0755
53
- * credential directory would otherwise stay world-listable. POSIX chmod of
54
- * the leaf is the matching repair; Windows has no equivalent mode bits.
55
- */
56
- export function ensurePrivateDirectory(directory) {
57
- ensureDirectory(directory, { mode: 0o700, requireCurrentUserOwner: false });
58
- }
59
- function ensureDirectory(directory, options) {
60
- if (options.mode === undefined)
61
- mkdirSync(directory, { recursive: true });
62
- else
63
- mkdirSync(directory, { recursive: true, mode: options.mode });
64
- const parent = safeDirectory(directory, options.requireCurrentUserOwner);
65
- if (options.mode !== undefined &&
66
- process.platform !== 'win32' &&
67
- parent.mode !== options.mode) {
68
- chmodSync(directory, options.mode);
69
- }
70
- return parent;
71
- }
72
- /** Persist the published directory entry where the host supports directory fsync. */
73
- function syncDirectory(directory) {
74
- if (process.platform === 'win32')
75
- return;
76
- const handle = openSync(directory, 'r');
77
- try {
78
- fsyncSync(handle);
79
- }
80
- finally {
81
- closeSync(handle);
82
- }
83
- }
84
- function targetMetadata(file, fallback, preserveMode, requireCurrentUserOwner) {
85
- let stat;
86
- try {
87
- stat = lstatSync(file);
88
- }
89
- catch (err) {
90
- if (err.code === 'ENOENT') {
91
- return { mode: fallback, identity: null };
92
- }
93
- throw err;
94
- }
95
- if (stat.isSymbolicLink()) {
96
- throw new Error(`${file} is a symlink; refusing to write through it. Replace it with a regular file, ` +
97
- 'or use a different state directory.');
98
- }
99
- if (!stat.isFile())
100
- throw new Error(`${file} is not a regular file; refusing to replace it.`);
101
- if (requireCurrentUserOwner)
102
- assertCurrentUserOwns(file, stat.uid);
103
- return {
104
- mode: preserveMode ? stat.mode & 0o777 : fallback,
105
- identity: { dev: stat.dev, ino: stat.ino },
106
- };
107
- }
108
- function assertUnchangedTarget(file, target) {
109
- let current;
110
- try {
111
- current = lstatSync(file);
112
- }
113
- catch (err) {
114
- if (err.code === 'ENOENT' && target.identity === null)
115
- return;
116
- throw new Error(`${file} changed during the atomic write; refusing to replace it.`);
117
- }
118
- if (target.identity === null ||
119
- current.dev !== target.identity.dev ||
120
- current.ino !== target.identity.ino) {
121
- throw new Error(`${file} changed during the atomic write; refusing to replace it.`);
122
- }
123
- }
124
- function safeDirectory(directory, requireCurrentUserOwner) {
125
- const stat = lstatSync(directory);
126
- if (stat.isSymbolicLink() || !stat.isDirectory()) {
127
- throw new Error(`${directory} is not a regular directory; refusing to write inside it.`);
128
- }
129
- if (requireCurrentUserOwner)
130
- assertCurrentUserOwns(directory, stat.uid);
131
- return { dev: stat.dev, ino: stat.ino, mode: stat.mode & 0o7777 };
132
- }
133
- function assertSameDirectory(directory, expected) {
134
- const current = lstatSync(directory);
135
- if (current.isSymbolicLink() ||
136
- !current.isDirectory() ||
137
- current.dev !== expected.dev ||
138
- current.ino !== expected.ino) {
139
- throw new Error(`${directory} changed during the write; refusing to publish the file.`);
140
- }
141
- }
142
- function assertCurrentUserOwns(file, owner) {
143
- const uid = typeof process.getuid === 'function' ? process.getuid() : undefined;
144
- if (uid !== undefined && owner !== uid) {
145
- throw new Error(`${file} is owned by uid ${owner}, not the current user; refusing to replace it.`);
146
- }
147
- }
148
- //# sourceMappingURL=atomic-file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"atomic-file.js","sourceRoot":"","sources":["../src/atomic-file.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { type CommandDeps } from './commands-core.js';
2
- /** Existing durable ownership is required; this path cannot create a session. */
3
- export declare function recoveryOwner(deps: CommandDeps, sessionId: string, key: string): {
4
- owner: import("./hook-session-state.js").SessionIncarnation;
5
- cwd: string;
6
- } | null;
7
- /** Internal child entrypoint. It observes native data; it does not impersonate a hook. */
8
- export declare function resumeAttendantCommand(deps: CommandDeps, sessionId: string, key: string): Promise<number>;
9
- export interface AttendantActivation {
10
- session_id: string;
11
- state: 'current' | 'activated' | 'pending';
12
- native_activity: boolean;
13
- }
14
- /** Called only by the authorized updater, after effective installation checks. */
15
- export declare function activateInstalledAttendants(deps: CommandDeps, artifact: string): Promise<AttendantActivation[]>;
@@ -1,96 +0,0 @@
1
- /** Explicit recovery of already-owned resident writers after an installation. */
2
- import { spawn } from 'node:child_process';
3
- import { readFileSync } from 'node:fs';
4
- import { EXIT, log } from './commands-core.js';
5
- import { attendHook, attendantGates, attendantRuntimeRevision } from './commands-hook-attend.js';
6
- import { findNativeTranscript, nativeTranscriptOwned } from './codex-native-turn.js';
7
- import { lifecycleStamp, readSessionIncarnation, readSessionState, sessionHasEnded } from './hook-session-state.js';
8
- import { readClaimFile } from './hook-question-lock.js';
9
- import { processExecutableName, processIdentityLiveness } from './process-identity.js';
10
- import { attendantClaimPath, attendantStatusPath, codexNativeActivityObserved, listAttendantReports } from './session-attendant-state.js';
11
- import { packageVersion } from './release.js';
12
- import { codexTrustProblems, findInstallations } from './install-hooks.js';
13
- /** Existing durable ownership is required; this path cannot create a session. */
14
- export function recoveryOwner(deps, sessionId, key) {
15
- const state = readSessionState(sessionId, deps.env);
16
- const owner = readSessionIncarnation(sessionId, deps.env);
17
- if (state.harness !== 'codex' || typeof state.activation_cwd !== 'string' ||
18
- owner?.key !== key || owner.harness_process === undefined || sessionHasEnded(sessionId, deps.env) ||
19
- processIdentityLiveness(owner.harness_process) !== 'alive' ||
20
- processExecutableName(owner.harness_process.pid) !== 'codex')
21
- return null;
22
- return { owner, cwd: state.activation_cwd };
23
- }
24
- /** Internal child entrypoint. It observes native data; it does not impersonate a hook. */
25
- export async function resumeAttendantCommand(deps, sessionId, key) {
26
- const owned = recoveryOwner(deps, sessionId, key);
27
- if (owned === null)
28
- return EXIT.failed;
29
- const transcript = readSessionState(sessionId, deps.env).codex_native_turn?.transcript_path ?? findNativeTranscript(sessionId, deps.env);
30
- if (transcript === null || !nativeTranscriptOwned(transcript, sessionId, deps.env))
31
- return EXIT.failed;
32
- const installations = findInstallations(deps.env, deps.hookAdapterHome, deps.hookPlatform).filter(entry => entry.harness === 'codex');
33
- if (installations.length === 0 || codexTrustProblems(installations, deps.env).length > 0)
34
- return EXIT.failed;
35
- const logger = log(deps);
36
- logger.bind({ session: sessionId });
37
- logger.info('attendant.state', { source: 'update-resume', phase: 'recovering' });
38
- return attendHook(deps, {
39
- envelope: { session_id: sessionId, cwd: owned.cwd }, harness: 'codex', cwd: owned.cwd,
40
- invokedAt: lifecycleStamp(), logger,
41
- recovery: { key, harnessProcess: owned.owner.harness_process, transcriptPath: transcript },
42
- });
43
- }
44
- /** Called only by the authorized updater, after effective installation checks. */
45
- export async function activateInstalledAttendants(deps, artifact) {
46
- const reports = listAttendantReports(deps.env).filter(report => report.alive && readSessionState(report.session_id, deps.env).harness === 'codex');
47
- // Each current owner is independent. Bound subprocess fanout and wall time.
48
- return Promise.all(reports.map(async (report, index) => {
49
- const sessionId = report.session_id;
50
- const result = (state) => ({
51
- session_id: sessionId, state, native_activity: codexNativeActivityObserved(sessionId, deps.env),
52
- });
53
- const current = readSessionIncarnation(sessionId, deps.env);
54
- if (current === null || index >= 16)
55
- return result('pending');
56
- const owned = recoveryOwner(deps, sessionId, current.key);
57
- if (owned === null || !attendantGates(deps, owned.cwd, sessionId, 'codex', packageVersion()).ok)
58
- return result('pending');
59
- const claimFile = attendantClaimPath(sessionId, deps.env);
60
- const holder = readClaimFile(claimFile);
61
- if (holder?.['runtime_revision'] === attendantRuntimeRevision && holder['runtime_version'] === packageVersion())
62
- return result('current');
63
- const transcript = readSessionState(sessionId, deps.env).codex_native_turn?.transcript_path ?? findNativeTranscript(sessionId, deps.env);
64
- if (transcript === null || !nativeTranscriptOwned(transcript, sessionId, deps.env))
65
- return result('pending');
66
- let child;
67
- try {
68
- child = spawn(process.execPath, [artifact, 'attendant-resume', sessionId, current.key], {
69
- cwd: owned.cwd, env: deps.env, detached: true, stdio: 'ignore', windowsHide: true,
70
- });
71
- }
72
- catch {
73
- return result('pending');
74
- }
75
- let failed = false;
76
- child.on('error', () => { failed = true; });
77
- child.unref();
78
- const until = performance.now() + 8_000;
79
- while (!failed && performance.now() < until) {
80
- const claim = readClaimFile(claimFile);
81
- let active = {};
82
- try {
83
- active = JSON.parse(readFileSync(attendantStatusPath(sessionId, deps.env), 'utf8'));
84
- }
85
- catch { /* not started */ }
86
- if (claim?.['runtime_revision'] === attendantRuntimeRevision && active.pid === claim['pid'] &&
87
- ['dormant', 'attending'].includes(active.phase ?? ''))
88
- return result('activated');
89
- if (recoveryOwner(deps, sessionId, current.key) === null)
90
- break;
91
- await new Promise(resolve => setTimeout(resolve, 100));
92
- }
93
- return result('pending');
94
- }));
95
- }
96
- //# sourceMappingURL=attendant-update.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attendant-update.js","sourceRoot":"","sources":["../src/attendant-update.ts"],"names":[],"mappings":"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"}
@@ -1,108 +0,0 @@
1
- import type { EscalationDeliveryRoute } from './hook-types.js';
2
- import { type WriteGuard } from './wake-support.js';
3
- /** Claude Code's currently observed inbox protocol. Unknown versions fail closed. */
4
- export declare const CLAUDE_PEER_PROTOCOL = 1;
5
- /** The first Claude Code release that publishes a session inbox socket. */
6
- export declare const CLAUDE_MIN_INBOX_VERSION = "2.1.224";
7
- /** macOS verifies own-child ancestry only while the posting process is alive. */
8
- export declare const CLAUDE_POST_SEND_LIVENESS_MS = 8000;
9
- export interface ClaudeSessionDescriptor {
10
- pid: number;
11
- sessionId: string;
12
- cwd: string;
13
- startedAt: number;
14
- procStart: string;
15
- version: string;
16
- peerProtocol: number;
17
- messagingSocketPath: string;
18
- status: string;
19
- }
20
- export interface ClaudeAgentObservation {
21
- pid: number;
22
- sessionId: string;
23
- startedAt: number;
24
- status: string;
25
- }
26
- export interface ClaudeWakeAdapters {
27
- listAgents(): Promise<unknown>;
28
- readDescriptor(pid: number): unknown;
29
- /** With `guard`, a connection that is late or no longer writable writes nothing. */
30
- sendSocket(socketPath: string, line: string, guard?: WriteGuard): Promise<void>;
31
- /** `onSpawn` receives the resumed harness's own process group as soon as it exists. */
32
- resume(sessionId: string, cwd: string, context: string, onSpawn?: (pgid: number) => void): Promise<void>;
33
- sleep(milliseconds: number): Promise<void>;
34
- }
35
- export type ClaudeWakeObservation = {
36
- state: 'live-idle' | 'live-busy';
37
- descriptor: ClaudeSessionDescriptor;
38
- } | {
39
- state: 'stopped';
40
- } | {
41
- state: 'unknown';
42
- reason: string;
43
- };
44
- /** A Claude Code session descriptor, or null when it has an unknown shape. */
45
- export declare function parseDescriptor(value: unknown): ClaudeSessionDescriptor | null;
46
- /**
47
- * Observe one exact Claude Code session without guessing.
48
- *
49
- * `claude agents --json` is the liveness oracle: Claude Code itself validates
50
- * each registry row against both PID and process start time before returning it.
51
- * The descriptor supplies the socket and peer protocol, but is never trusted as
52
- * proof that a process still owns the session.
53
- */
54
- export declare function observeClaudeSession(sessionId: string, adapters: Pick<ClaudeWakeAdapters, 'listAgents' | 'readDescriptor'>): Promise<ClaudeWakeObservation>;
55
- export type ClaudeInboxReadiness = {
56
- state: 'ready';
57
- socketPath: string;
58
- version: string;
59
- } | {
60
- state: 'unavailable';
61
- reason: string;
62
- };
63
- /**
64
- * Whether an answer could reach this exact Claude session over its inbox
65
- * socket, decided from evidence already on disk.
66
- *
67
- * Read-only by construction: it reads the session descriptor and asks whether
68
- * the socket file exists, and never connects to it. A diagnostic that delivers
69
- * a message is not a diagnostic.
70
- *
71
- * Every negative answer here is a degradation, not a failure — the accepted
72
- * journal still replays the answer at the session's next turn. What it buys is
73
- * that the reason is nameable in advance instead of being discovered as
74
- * silence. The common one is `--bare`, which binds no socket at all (and runs
75
- * no hooks either, so nothing would have registered a question in the first
76
- * place).
77
- */
78
- export declare function inspectClaudeInbox(options: {
79
- pid: number;
80
- platform: NodeJS.Platform;
81
- readDescriptor: (pid: number) => unknown;
82
- socketExists: (socketPath: string) => boolean;
83
- }): ClaudeInboxReadiness;
84
- /**
85
- * Claude's own-child delivery route.
86
- *
87
- * A successful socket write proves delivery to Claude Code, not model
88
- * consumption — and this route reports exactly that, no more. It reports
89
- * `delivered` all the same, because the write is the strongest acknowledgement
90
- * this route can ever obtain: the message it posts starts a brand-new turn
91
- * rather than continuing this one, so no later hook will confirm anything about
92
- * it. An answer delivered once and settled is strictly better than an answer
93
- * redelivered on every turn-end for ever.
94
- *
95
- * Every path that hands nothing over reports `held`, so the accepted journal
96
- * replays it. Unknown state deliberately returns without throwing, so the
97
- * journal becomes `hold-for-next-turn` instead of failing the hook. The
98
- * in-place write is the hand-off shared with Session Messages
99
- * (`session-handoff.ts`); only the cold resume of a stopped session belongs to
100
- * this answer route.
101
- */
102
- export declare function claudeWakeRoute(options: {
103
- sessionId: string;
104
- cwd: string;
105
- sourcePid: number;
106
- adapters?: ClaudeWakeAdapters;
107
- }): EscalationDeliveryRoute;
108
- export declare function systemClaudeWakeAdapters(env?: NodeJS.ProcessEnv): ClaudeWakeAdapters;