@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,102 +0,0 @@
1
- import { assessReadiness } from './commands-doctor.js';
2
- import { EXIT, updateCliCommand } from './commands-core.js';
3
- import { resolveActiveHarness } from './commands-harness-context.js';
4
- import { inspectCliInstallations } from './cli-bin.js';
5
- import { newerPublishedCli, publishedCliDistTags } from './cli-release.js';
6
- import { packageVersion } from './release.js';
7
- import { shippedSkillBundle } from './skill-integrity.js';
8
- import { isSemVer } from './version.js';
9
- import { installedChangelog, releaseNotesUrl, updateSessionEffects } from './update-handoff.js';
10
- import path from 'node:path';
11
- import { activeQuestionRouteProblems, CODEX_STALE_STOP_DEFINITION_PROBLEM } from './commands-hook-diagnostics.js';
12
- import { findInstallations } from './install-hooks.js';
13
- import { pendingList, readSessionState } from './hook-session-state.js';
14
- import { localIntegrationAssessment } from './integration-health.js';
15
- import { codexToolHookReady, CODEX_TOOL_HOOK_RECOVERY } from './codex-tool-messages.js';
16
- /** Read-only update plan; integration changes belong to explicit resume. */
17
- export async function cliUpdateCheckCommand(deps, flags) {
18
- if (flags.from !== undefined && !isSemVer(flags.from)) {
19
- deps.io.err('--from must be a semantic version');
20
- return EXIT.usage;
21
- }
22
- const version = packageVersion();
23
- const installation = inspectCliInstallations(deps.env, deps.hookPlatform ?? process.platform);
24
- const tags = await publishedCliDistTags(deps.fetchImpl);
25
- const current = installation.effective?.version ?? version;
26
- const newer = tags === null || current === null ? null : newerPublishedCli(current, tags);
27
- const available = tags === null || current === null ? null : newer !== null;
28
- const readiness = await assessReadiness(deps, { json: true });
29
- const active = resolveActiveHarness(deps.env, deps.cwd, (deps.now ?? Date.now)());
30
- const owner = active.contested.length === 0 ? active.active : null;
31
- const installations = findInstallations(deps.env, deps.hookAdapterHome, deps.hookPlatform);
32
- const routeProblems = owner === null ? [] : activeQuestionRouteProblems(deps, owner, installations);
33
- const restartReason = routeProblems.includes(CODEX_STALE_STOP_DEFINITION_PROBLEM)
34
- ? CODEX_STALE_STOP_DEFINITION_PROBLEM : undefined;
35
- const sessionState = owner?.sessionId === undefined ? null : readSessionState(owner.sessionId, deps.env);
36
- const toolNotesVerified = owner?.harness === 'codex' && owner.sessionId !== undefined
37
- ? codexToolHookReady(deps, owner.sessionId) : null;
38
- const bundle = shippedSkillBundle(version ?? undefined);
39
- const installedSkill = readiness.states.find(state => state.id === 'skill');
40
- if (installedSkill !== undefined && typeof installedSkill.technical === 'object' && installedSkill.technical !== null &&
41
- 'resolution' in installedSkill.technical && installedSkill.technical.resolution === 'installed-skill-content-mismatch') {
42
- installedSkill.remedy = { by: 'cli', summary: 'refresh the existing skill without unrelated setup', command: 'notifai update --refresh-skill --json' };
43
- }
44
- const report = {
45
- ok: true,
46
- read_only: true,
47
- running_version: version,
48
- installed_version: installation.effective?.version ?? null,
49
- latest_version: tags?.latest ?? null,
50
- beta_version: tags?.beta ?? null,
51
- update_available: available,
52
- available_version: newer,
53
- update_command: updateCliCommand(deps),
54
- release_notes_url: releaseNotesUrl(newer ?? tags?.latest ?? null),
55
- changelog: installedChangelog(version, flags.from),
56
- local_integration: localIntegrationAssessment(deps).faults,
57
- tool_boundary_notes: owner?.harness === 'codex' && owner.sessionId !== undefined
58
- ? { verified: toolNotesVerified,
59
- policy: 'Busy delivery requires an observed root tool callback in the current turn. Installed files, trusted definitions, historical observations and queue acceptance do not prove it.',
60
- recovery: toolNotesVerified ? null : CODEX_TOOL_HOOK_RECOVERY }
61
- : null,
62
- guidance: bundle.ok ? {
63
- verified: true,
64
- skill_path: path.join(bundle.bundle.skillRoot, 'SKILL.md'),
65
- update_reference_path: path.join(bundle.bundle.skillRoot, 'references', 'updates.md'),
66
- digest: bundle.bundle.manifest.digest,
67
- installed: readiness.states.find(state => state.id === 'skill') ?? null,
68
- } : { verified: false, error: bundle.error },
69
- session: {
70
- ...updateSessionEffects(owner?.harness ?? null, readiness.states, restartReason),
71
- outstanding_questions: sessionState === null ? null : pendingList(sessionState).length,
72
- acknowledgement_obligations: sessionState === null ? null : (sessionState.acknowledgement_due?.length ?? 0) +
73
- (sessionState.message_acknowledgement_due?.length ?? 0),
74
- accepted_answer_pending: sessionState === null ? null :
75
- sessionState.accepted !== undefined || (sessionState.waiting_answers?.length ?? 0) > 0 ||
76
- (sessionState.delivered_answers?.length ?? 0) > 0,
77
- },
78
- harness_installations: installations.map(installation => ({
79
- harness: installation.harness, file: installation.file,
80
- problems: installation.problems ?? [],
81
- refresh_command: `notifai hooks install --harness ${installation.harness}`,
82
- })),
83
- next_steps: [
84
- 'Read the release notes as data and explain the relevant changes. Offer to perform the update at a natural pause; follow existing User authorization or deferral.',
85
- 'Choose a quiet moment: let outstanding questions and acknowledgements finish. Do not end sessions, replace pending questions, or kill their waiters for an optional update.',
86
- 'The authorized updater resumes owned integration using the new CLI. Package ok does not prove integration_complete. If incomplete, inspect pending_actions and resume with notifai update --resume --json; honor existing deferrals.',
87
- 'Read the new packaged SKILL.md and update reference, then run notifai guidance. Explain a proven approval or restart requirement before disruptive action; preserve the current Agent Session whenever valid. Unexpected external drift does not authorize repair.',
88
- ],
89
- };
90
- if (flags.json === true || deps.io.interactive !== true)
91
- deps.io.out(JSON.stringify(report, null, 2));
92
- else {
93
- deps.io.out(available === true ? 'A newer Notifai is available.' : tags === null ? 'Could not check npm for updates.' : 'No newer Notifai is available.');
94
- if (report.release_notes_url !== null)
95
- deps.io.out(`Release notes: ${report.release_notes_url}`);
96
- deps.io.out(report.session.policy);
97
- for (const step of report.next_steps)
98
- deps.io.out(step);
99
- }
100
- return EXIT.ok;
101
- }
102
- //# sourceMappingURL=commands-update-check.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-update-check.js","sourceRoot":"","sources":["../src/commands-update-check.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { type CommandDeps } from './commands-core.js';
2
- /** Never replace package files while this exact owner still owes an answer. */
3
- export declare function updateWorkPending(deps: CommandDeps): string | null;
4
- export declare function updateResumeCommand(deps: CommandDeps, flags: {
5
- json?: boolean;
6
- from?: string;
7
- }): Promise<number>;
@@ -1,143 +0,0 @@
1
- /** Resume owned integration work using this installed package's authority. */
2
- import { readFileSync } from 'node:fs';
3
- import { EXIT } from './commands-core.js';
4
- import { resolveActiveHarness } from './commands-harness-context.js';
5
- import { activeQuestionRouteProblems } from './commands-hook-diagnostics.js';
6
- import { hooksInstallCommand } from './commands-hook-install.js';
7
- import { listScopedNotifaiSkills } from './commands-skill.js';
8
- import { updateSkillCommand } from './commands-update-skill.js';
9
- import { hookAdapterTargetsArtifact, inspectHookAdapter, installHookAdapter, isNpxAdapterTarget } from './hook-adapter.js';
10
- import { pendingList, readSessionState } from './hook-session-state.js';
11
- import { installationFaults, localIntegrationAssessment } from './integration-health.js';
12
- import { packageVersion } from './release.js';
13
- import { installedChangelog } from './update-handoff.js';
14
- import { isSemVer } from './version.js';
15
- import { isHookInstallableHarness, questionRoutingCapability } from './harnesses.js';
16
- import { sameLocalPath } from './local-path.js';
17
- import { codexToolHookReady, CODEX_TOOL_HOOK_RECOVERY } from './codex-tool-messages.js';
18
- import { activateInstalledAttendants } from './attendant-update.js';
19
- /** Never replace package files while this exact owner still owes an answer. */
20
- export function updateWorkPending(deps) {
21
- const active = resolveActiveHarness(deps.env, deps.cwd, (deps.now ?? Date.now)());
22
- if (active.contested.length > 0)
23
- return 'Several Agent Sessions could own this invocation; resume from an unambiguous Agent Session.';
24
- const owner = active.active;
25
- if (owner?.sessionId === undefined)
26
- return null;
27
- const state = readSessionState(owner.sessionId, deps.env);
28
- return pendingList(state).length > 0 || (state.acknowledgement_due?.length ?? 0) > 0 ||
29
- (state.message_acknowledgement_due?.length ?? 0) > 0 ||
30
- state.accepted !== undefined || (state.delivered_answers?.length ?? 0) > 0
31
- ? 'Finish outstanding questions, answers and Agent Acknowledgements first; preserve their IDs and waiters.' : null;
32
- }
33
- export async function updateResumeCommand(deps, flags) {
34
- if (flags.from !== undefined && !isSemVer(flags.from)) {
35
- deps.io.err('--from must be a semantic version');
36
- return EXIT.usage;
37
- }
38
- const pending = [];
39
- const changed = [];
40
- let attendants = [];
41
- const report = (filesComplete) => {
42
- const complete = filesComplete && pending.length === 0;
43
- const result = { ok: filesComplete, read_only: false, running_version: packageVersion(),
44
- files_complete: filesComplete, migration_complete: complete, pending_actions: pending, changed, attendants,
45
- resume_command: 'notifai update --resume --json', changelog: installedChangelog(packageVersion(), flags.from),
46
- next_step: 'Read this package’s SKILL.md and references/updates.md, then run notifai guidance in the active Agent Session. Preserve outstanding work and existing User deferrals.' };
47
- if (flags.json === true || deps.io.interactive !== true)
48
- deps.io.out(JSON.stringify(result, null, 2));
49
- else
50
- deps.io.out(complete ? 'Update integration is verified. Reread changed agent guidance; no restart is implied.'
51
- : `Update integration remains pending: ${pending.join('; ')}. Resume with notifai update --resume --json.`);
52
- return filesComplete ? EXIT.ok : EXIT.failed;
53
- };
54
- const quietIo = { ...deps.io, confirm: deps.io.confirm.bind(deps.io), openUrl: deps.io.openUrl.bind(deps.io),
55
- out: (_line) => { }, err: (line) => pending.push(line) };
56
- const repairDeps = { ...deps, io: quietIo };
57
- try {
58
- let assessment = localIntegrationAssessment(deps);
59
- const effective = assessment.cli.effective;
60
- // A command invoked through another prefix has no authority to retarget
61
- // shared integration or replace its guidance merely because it can run.
62
- if (effective?.artifact_path === null || effective === null ||
63
- !hookAdapterTargetsArtifact({ execPath: process.execPath, scriptPath: assessment.cli.current.artifact_path }, effective.artifact_path)) {
64
- pending.push('Resolve the effective installation before resuming integration; run notifai doctor --json.');
65
- return report(false);
66
- }
67
- const active = resolveActiveHarness(deps.env, deps.cwd, (deps.now ?? Date.now)());
68
- const owner = active.contested.length === 0 ? active.active : null;
69
- const waiting = updateWorkPending(deps);
70
- if (waiting !== null) {
71
- pending.push(waiting);
72
- return report(false);
73
- }
74
- const inventory = await listScopedNotifaiSkills(deps);
75
- if (inventory.errors.length > 0 || inventory.installed.length > 1) {
76
- pending.push('Resolve unreadable or duplicate skill scopes before integration repair; no scope was selected.');
77
- return report(false);
78
- }
79
- if (assessment.installations.length > 0) {
80
- const adapter = inspectHookAdapter(deps.hookAdapterHome, deps.hookPlatform);
81
- if (adapter.problems.length > 0 || adapter.target === null || isNpxAdapterTarget(adapter.target) ||
82
- !hookAdapterTargetsArtifact(adapter.target, effective.artifact_path) ||
83
- !sameLocalPath(adapter.target.execPath, process.execPath, deps.hookPlatform ?? process.platform)) {
84
- if (installHookAdapter({ execPath: process.execPath, scriptPath: effective.artifact_path }, deps.hookAdapterHome, deps.hookPlatform, deps.env).changed)
85
- changed.push('hook-adapter');
86
- }
87
- }
88
- if (inventory.installed.length === 1) {
89
- let skillReport = {};
90
- const skillResult = await updateSkillCommand({ ...repairDeps, io: { ...quietIo,
91
- out: (line) => { try {
92
- skillReport = JSON.parse(line);
93
- }
94
- catch { /* local status only */ } },
95
- } }, { json: true });
96
- if (skillResult !== EXIT.ok) {
97
- pending.push(skillReport.error ?? 'Skill refresh failed; resume through the native installer in the existing scope.');
98
- return report(false);
99
- }
100
- if (skillReport.changed === true)
101
- changed.push('skill');
102
- }
103
- for (const { installation, env } of assessment.installations) {
104
- if (installationFaults(installation, deps.hookPlatform).length === 0)
105
- continue;
106
- const before = readFileSync(installation.file, 'utf8');
107
- if (hooksInstallCommand({ ...repairDeps, env }, { harness: installation.harness, narrate: false }) !== EXIT.ok) {
108
- pending.push(`Could not finish ${installation.harness} hook migration.`);
109
- return report(false);
110
- }
111
- if (readFileSync(installation.file, 'utf8') !== before)
112
- changed.push(`${installation.harness}-hooks`);
113
- }
114
- assessment = localIntegrationAssessment(deps);
115
- const repairFaults = assessment.faults.filter(fault => fault.code !== 'native-approval-pending');
116
- pending.push(...assessment.faults.map(fault => `${fault.code}: ${fault.remedy}`));
117
- if (owner !== null) {
118
- if (isHookInstallableHarness(owner.harness) && questionRoutingCapability(owner.harness, deps.hookPlatform).stopContinuation !== 'unsupported') {
119
- pending.push(...activeQuestionRouteProblems(deps, owner, assessment.installations.filter(entry => entry.env === deps.env).map(entry => entry.installation)));
120
- }
121
- if (changed.includes(`${owner.harness}-hooks`)) {
122
- pending.push('Changed hooks need exact-session activation verification; preserve the current Agent Session until a specific approval or fresh-session requirement is proven.');
123
- }
124
- if (owner.harness === 'codex' && owner.sessionId !== undefined && !codexToolHookReady(deps, owner.sessionId)) {
125
- pending.push(CODEX_TOOL_HOOK_RECOVERY);
126
- }
127
- }
128
- if (assessment.faults.length === 0) {
129
- attendants = await activateInstalledAttendants(deps, effective.artifact_path);
130
- if (attendants.some(entry => entry.state === 'activated'))
131
- changed.push('resident-attendants');
132
- const unresolved = attendants.filter(entry => entry.state === 'pending' || !entry.native_activity);
133
- if (unresolved.length > 0)
134
- pending.push(`${unresolved.length} existing Codex session(s) still need native activity or resident activation verification; keep their Agent Sessions and pending inputs intact.`);
135
- }
136
- return report(repairFaults.length === 0);
137
- }
138
- catch {
139
- pending.push('Integration could not be verified; run notifai doctor --json and resume after the diagnosed gap is resolved.');
140
- return report(false);
141
- }
142
- }
143
- //# sourceMappingURL=commands-update-resume.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-update-resume.js","sourceRoot":"","sources":["../src/commands-update-resume.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import { type CommandDeps } from './commands-core.js';
2
- /** Refresh one existing scope through the native installer, without setup. */
3
- export declare function updateSkillCommand(deps: CommandDeps, flags: {
4
- json?: boolean;
5
- }): Promise<number>;
@@ -1,36 +0,0 @@
1
- import { EXIT } from './commands-core.js';
2
- import { installedSkillMatchesPackage, listScopedNotifaiSkills, SKILLS_SOURCE } from './commands-skill.js';
3
- /** Refresh one existing scope through the native installer, without setup. */
4
- export async function updateSkillCommand(deps, flags) {
5
- const fail = (error) => {
6
- if (flags.json === true || deps.io.interactive !== true)
7
- deps.io.out(JSON.stringify({ ok: false, error }));
8
- else
9
- deps.io.err(error);
10
- return EXIT.failed;
11
- };
12
- const inventory = await listScopedNotifaiSkills(deps);
13
- if (inventory.errors.length > 0 || inventory.installed.length !== 1) {
14
- return fail('Skill refresh needs exactly one readable existing installation. Resolve missing or duplicate scope through setup first.');
15
- }
16
- const skill = inventory.installed[0];
17
- if (deps.nativeSkills === undefined || SKILLS_SOURCE === null)
18
- return fail('The packaged skill installer is unavailable.');
19
- const changed = !installedSkillMatchesPackage(skill);
20
- if (changed) {
21
- const operation = await deps.nativeSkills.add({ source: SKILLS_SOURCE, skill: 'notifai', scope: skill.scope,
22
- cwd: deps.cwd, env: deps.env, diagnosticsToStderr: true }).catch((error) => ({ code: 1, error: String(error) }));
23
- if ((typeof operation === 'number' ? operation : operation.code) !== 0) {
24
- return fail(typeof operation === 'number' ? 'The native skill installer failed.' : operation.error);
25
- }
26
- }
27
- const after = await listScopedNotifaiSkills(deps);
28
- if (after.errors.length > 0 || after.installed.length !== 1 || after.installed[0]?.scope !== skill.scope ||
29
- !installedSkillMatchesPackage(after.installed[0]))
30
- return fail('The refreshed skill could not be verified in its original scope.');
31
- const report = { ok: true, changed, scope: skill.scope, path: after.installed[0].path,
32
- next_step: 'Read the refreshed SKILL.md and references/updates.md, then run notifai guidance in this Agent Session.' };
33
- deps.io.out(flags.json === true || deps.io.interactive !== true ? JSON.stringify(report, null, 2) : report.next_step);
34
- return EXIT.ok;
35
- }
36
- //# sourceMappingURL=commands-update-skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-update-skill.js","sourceRoot":"","sources":["../src/commands-update-skill.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { type CommandDeps } from './commands-core.js';
2
- export interface CliUpdateFlags {
3
- json?: boolean;
4
- channel?: string;
5
- }
6
- /**
7
- * Update the npm-global installation the shell actually resolves, then point
8
- * the stable hook adapter at that same artifact. The npm executable may own a
9
- * different global prefix; --prefix makes that ambient choice irrelevant.
10
- */
11
- export declare function cliUpdateCommand(deps: CommandDeps, requested: CliUpdateFlags): number;
@@ -1,286 +0,0 @@
1
- import { spawnSync } from 'node:child_process';
2
- import { existsSync } from 'node:fs';
3
- import path from 'node:path';
4
- import { inspectCliInstallations, withoutNpxLauncherPath, } from './cli-bin.js';
5
- import { EXIT } from './commands-core.js';
6
- import { hookAdapterPath, installHookAdapter, inspectHookAdapter, isNpxAdapterTarget, } from './hook-adapter.js';
7
- import { packageVersion } from './release.js';
8
- import { CLI_PACKAGE_NAME, cliPackageSpec, cliUpdateChannel, cliUpdateRecoveryCommand, } from './cli-contract.js';
9
- import { cliReleaseTarget, parseCliDistTags } from './cli-release.js';
10
- import { pathContainsDirectory } from './local-path.js';
11
- import { npmInvocation } from './npm-invocation.js';
12
- import { compareReleasePrecedence } from './version.js';
13
- import { updateWorkPending } from './commands-update-resume.js';
14
- function runningArtifact(deps) {
15
- const target = deps.hookInstallTarget;
16
- if (target !== undefined && !isNpxAdapterTarget(target))
17
- return target.scriptPath;
18
- return process.argv[1];
19
- }
20
- function npmRun(deps, args) {
21
- const invocation = npmInvocation(args, {
22
- platform: deps.hookPlatform ?? process.platform,
23
- env: deps.env,
24
- nodeExecutable: process.execPath,
25
- });
26
- return spawnSync(invocation.file, invocation.args, {
27
- ...invocation.options,
28
- encoding: 'utf8',
29
- env: deps.env,
30
- cwd: deps.cwd,
31
- stdio: ['ignore', 'pipe', 'pipe'],
32
- timeout: 120_000,
33
- killSignal: 'SIGKILL',
34
- });
35
- }
36
- function inspection(deps) {
37
- const artifact = runningArtifact(deps);
38
- return inspectCliInstallations(deps.env, deps.hookPlatform ?? process.platform, {
39
- ...(artifact === undefined ? {} : { runningArtifactPath: artifact }),
40
- currentVersion: deps.runningVersion === undefined ? packageVersion() : deps.runningVersion,
41
- });
42
- }
43
- function prefixIsAddressable(deps, prefix) {
44
- const platform = deps.hookPlatform ?? process.platform;
45
- const commandDirectory = platform === 'win32' ? prefix : path.join(prefix, 'bin');
46
- return pathContainsDirectory(deps.env, commandDirectory, platform);
47
- }
48
- /**
49
- * Read the dist-tags from the registry npm itself installs from, so a custom
50
- * registry configuration answers for both the read and the install.
51
- */
52
- function publishedDistTags(deps) {
53
- const view = npmRun(deps, ['view', CLI_PACKAGE_NAME, 'dist-tags', '--json']);
54
- if (view.status !== 0 || typeof view.stdout !== 'string')
55
- return null;
56
- try {
57
- return parseCliDistTags(JSON.parse(view.stdout));
58
- }
59
- catch {
60
- return null;
61
- }
62
- }
63
- function updateRetryCommand(flags) {
64
- return flags.explicitStableSwitch
65
- ? `npx --yes ${cliPackageSpec('latest')} update --channel stable`
66
- : cliUpdateRecoveryCommand(flags.channel);
67
- }
68
- function failed(deps, flags, failure, before, packageManagerPrefix) {
69
- const { code, message, recoveryCommand: explicitRecovery, target } = typeof failure === 'string' ? { code: failure } : failure;
70
- const recoveryMessage = message ?? (code === 'update_destination_unknown'
71
- ? 'Notifai could not identify an npm-global installation to update. Use the package manager that installed the resolved command to update it; the diagnostic below can inspect the installation.'
72
- : code === 'package_manager_prefix_not_on_path'
73
- ? 'The npm global command directory is not on PATH. Add the bin directory for the reported package-manager prefix to PATH (the prefix itself on Windows), then inspect the installation with the diagnostic below before retrying the update.'
74
- : null);
75
- const recoveryCommand = explicitRecovery ?? (recoveryMessage === null
76
- ? updateRetryCommand(flags)
77
- : `npx --yes ${cliPackageSpec(flags.channel === 'beta' ? 'beta' : 'latest')} doctor --json`);
78
- if (flags.json === true) {
79
- deps.io.out(JSON.stringify({
80
- ok: false,
81
- code,
82
- recovery_command: recoveryCommand,
83
- ...(recoveryMessage === null ? {} : { message: recoveryMessage }),
84
- ...(target === undefined ? {} : { target }),
85
- package_manager_prefix: packageManagerPrefix,
86
- before,
87
- after: inspection(deps),
88
- }, null, 2));
89
- }
90
- else {
91
- deps.io.err(recoveryMessage ?? 'Notifai could not finish updating. Retry with:');
92
- deps.io.err(recoveryCommand);
93
- }
94
- return EXIT.failed;
95
- }
96
- /**
97
- * Update the npm-global installation the shell actually resolves, then point
98
- * the stable hook adapter at that same artifact. The npm executable may own a
99
- * different global prefix; --prefix makes that ambient choice irrelevant.
100
- */
101
- export function cliUpdateCommand(deps, requested) {
102
- const requestedChannel = requested.channel ?? 'stable';
103
- if (requestedChannel !== 'stable' && requestedChannel !== 'beta') {
104
- deps.io.err('--channel must be stable or beta');
105
- return EXIT.failed;
106
- }
107
- const channel = requestedChannel;
108
- // Carry the caller's effective PATH into npm and the new artifact's handoff,
109
- // otherwise each child would diagnose the temporary npx runner as installed.
110
- deps = { ...deps, env: withoutNpxLauncherPath(deps.env, deps.hookPlatform ?? process.platform, runningArtifact(deps) ?? 'notifai') };
111
- const before = inspection(deps);
112
- // A beta channel, or a beta installation, installs one exact resolved
113
- // release. Only an explicit stable selection may move a beta installation
114
- // backwards; plain update still protects it. A stable installation updating
115
- // on the stable channel keeps plain `latest`.
116
- const installed = before.effective?.version ?? before.current.version;
117
- const explicitlySwitchingToStable = requested.channel === 'stable' && cliUpdateChannel(installed) === 'beta';
118
- const flags = {
119
- ...requested,
120
- channel,
121
- json: requested.json === true || deps.io.interactive !== true,
122
- explicitStableSwitch: explicitlySwitchingToStable,
123
- };
124
- const waiting = updateWorkPending(deps);
125
- if (waiting !== null)
126
- return failed(deps, flags, { code: 'outstanding_session_work', message: waiting,
127
- recoveryCommand: 'notifai update --check --json' }, before, null);
128
- let target = null;
129
- if (channel === 'beta' || cliUpdateChannel(installed) === 'beta') {
130
- const tags = publishedDistTags(deps);
131
- if (tags === null) {
132
- return failed(deps, flags, {
133
- code: 'release_versions_unavailable',
134
- message: 'Notifai could not read the published release versions, so nothing was installed. Check the connection to the npm registry, then retry with:',
135
- recoveryCommand: updateRetryCommand(flags),
136
- }, before, null);
137
- }
138
- target = cliReleaseTarget(tags, channel);
139
- if (installed !== null && compareReleasePrecedence(target.version, installed) === 'before' &&
140
- !explicitlySwitchingToStable) {
141
- const betaTarget = cliReleaseTarget(tags, 'beta');
142
- const betaMovesForward = channel === 'stable' &&
143
- compareReleasePrecedence(betaTarget.version, installed) !== 'before';
144
- return failed(deps, flags, betaMovesForward
145
- ? {
146
- code: 'update_would_downgrade',
147
- message: `The installed Notifai ${installed} is newer than the stable release ${target.version}, so nothing was installed. Keep it current on the beta channel with:`,
148
- recoveryCommand: cliUpdateRecoveryCommand('beta'),
149
- target,
150
- }
151
- : {
152
- code: 'update_would_downgrade',
153
- message: `The installed Notifai ${installed} is newer than every published release, so nothing was installed. Inspect the installation with:`,
154
- target,
155
- }, before, null);
156
- }
157
- }
158
- const prefixResult = npmRun(deps, ['prefix', '--global']);
159
- const packageManagerPrefix = prefixResult.status === 0 && typeof prefixResult.stdout === 'string' && prefixResult.stdout.trim() !== ''
160
- ? prefixResult.stdout.trim()
161
- : null;
162
- const pathCandidate = before.effective ?? before.entries[0] ?? null;
163
- const targetPrefix = pathCandidate === null
164
- ? packageManagerPrefix
165
- : pathCandidate.install_prefix;
166
- if (targetPrefix === null) {
167
- return failed(deps, flags, 'update_destination_unknown', before, packageManagerPrefix);
168
- }
169
- if (pathCandidate === null && !prefixIsAddressable(deps, targetPrefix)) {
170
- return failed(deps, flags, 'package_manager_prefix_not_on_path', before, packageManagerPrefix);
171
- }
172
- const install = npmRun(deps, [
173
- 'install',
174
- '--global',
175
- '--prefix',
176
- targetPrefix,
177
- cliPackageSpec(target?.version ?? 'latest'),
178
- ]);
179
- if (install.status !== 0) {
180
- return failed(deps, flags, 'package_install_failed', before, packageManagerPrefix);
181
- }
182
- const after = inspection(deps);
183
- const effective = after.effective;
184
- if (effective === null ||
185
- effective.artifact_path === null ||
186
- effective.version === null ||
187
- (before.effective !== null && effective.command_path !== before.effective.command_path)) {
188
- return failed(deps, flags, 'effective_command_not_repaired', before, packageManagerPrefix);
189
- }
190
- if (target !== null && effective.version !== target.version) {
191
- return failed(deps, flags, { code: 'effective_command_not_target', target }, before, packageManagerPrefix);
192
- }
193
- const minimumCurrent = before.current.version;
194
- const currentComparison = minimumCurrent === null
195
- ? 'unparseable'
196
- : compareReleasePrecedence(effective.version, minimumCurrent);
197
- if (currentComparison === 'unparseable') {
198
- return failed(deps, flags, 'effective_command_version_unknown', before, packageManagerPrefix);
199
- }
200
- // The exact-target check above already proved an intentional switch landed
201
- // on the selected public release, even when this running beta is newer.
202
- if (currentComparison === 'before' && !explicitlySwitchingToStable) {
203
- return failed(deps, flags, 'effective_command_still_older', before, packageManagerPrefix);
204
- }
205
- // A package manifest can land before its dependencies or executable. Prove
206
- // this artifact starts before making every trusted hook depend on it.
207
- const probe = spawnSync(process.execPath, [effective.artifact_path, '--version'], {
208
- encoding: 'utf8',
209
- env: deps.env,
210
- cwd: deps.cwd,
211
- stdio: ['ignore', 'pipe', 'pipe'],
212
- timeout: 10_000,
213
- killSignal: 'SIGKILL',
214
- });
215
- if (probe.status !== 0 || probe.stdout?.trim() !== effective.version) {
216
- return failed(deps, flags, 'effective_command_not_runnable', before, packageManagerPrefix);
217
- }
218
- let adapterRetargeted = false;
219
- const adapter = hookAdapterPath(deps.hookAdapterHome);
220
- if (existsSync(adapter)) {
221
- try {
222
- adapterRetargeted = installHookAdapter({ execPath: process.execPath, scriptPath: effective.artifact_path }, deps.hookAdapterHome, deps.hookPlatform ?? process.platform).changed;
223
- }
224
- catch {
225
- return failed(deps, flags, 'hook_adapter_retarget_failed', before, packageManagerPrefix);
226
- }
227
- }
228
- // The old updater has already imported its modules. Only the newly installed
229
- // artifact can describe the new release's guidance and harness requirements.
230
- const previousVersion = before.effective?.version ?? before.current.version;
231
- const handoffArgs = [effective.artifact_path, 'update', '--resume', '--json'];
232
- if (previousVersion !== null)
233
- handoffArgs.push('--from', previousVersion);
234
- const handoffProbe = spawnSync(process.execPath, handoffArgs, {
235
- encoding: 'utf8', env: deps.env, cwd: deps.cwd,
236
- stdio: ['ignore', 'pipe', 'pipe'], timeout: 120_000, killSignal: 'SIGKILL',
237
- });
238
- let handoff = null;
239
- try {
240
- const value = JSON.parse(handoffProbe.stdout ?? '');
241
- if (typeof value === 'object' && value !== null) {
242
- const record = value;
243
- // Preserve structured partial progress from the new executable too.
244
- // A successful package probe alone cannot prove integration finished.
245
- if (record.read_only === false && record.running_version === effective.version &&
246
- typeof record.files_complete === 'boolean' && record.ok === record.files_complete &&
247
- handoffProbe.status === (record.files_complete ? EXIT.ok : EXIT.failed) &&
248
- typeof record.migration_complete === 'boolean' && Array.isArray(record.pending_actions) &&
249
- record.pending_actions.every(action => typeof action === 'string') &&
250
- record.migration_complete === (record.files_complete && record.pending_actions.length === 0)) {
251
- handoff = record;
252
- }
253
- }
254
- }
255
- catch {
256
- // Package installation succeeded; failure to inspect session effects is
257
- // explicit incomplete follow-up, never permission to restart blindly.
258
- }
259
- if (flags.json === true) {
260
- const adapterInspection = existsSync(adapter)
261
- ? inspectHookAdapter(deps.hookAdapterHome, deps.hookPlatform ?? process.platform)
262
- : null;
263
- deps.io.out(JSON.stringify({
264
- ok: true,
265
- package_manager_prefix: packageManagerPrefix,
266
- update_prefix: targetPrefix,
267
- target: target ?? { version: null, dist_tag: 'latest' },
268
- handoff,
269
- integration_complete: handoff?.migration_complete === true,
270
- follow_up_required: handoff?.migration_complete !== true,
271
- guidance_reread_required: true,
272
- handoff_error: handoff === null ? 'Run notifai update --resume --json with the updated CLI to finish integration; update --check --json is read-only diagnosis.' : null,
273
- before,
274
- after,
275
- hook_adapter: adapterInspection === null
276
- ? null
277
- : { path: adapterInspection.path, target: adapterInspection.target, retargeted: adapterRetargeted },
278
- }, null, 2));
279
- }
280
- else {
281
- deps.io.out(handoff?.migration_complete === true ? 'The CLI and integration are verified. Read changed agent guidance.' : 'The package is installed; integration still needs follow-up. Run `notifai update --resume --json`.');
282
- deps.io.out('Use `notifai update --check --json` for diagnosis; a restart is not automatic.');
283
- }
284
- return EXIT.ok;
285
- }
286
- //# sourceMappingURL=commands-update.js.map