@raidiant/notifai 11.7.1 → 12.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/NOTICE +16 -0
  3. package/THIRD_PARTY_NOTICES +725 -0
  4. package/bin/notifai.mjs +11387 -0
  5. package/data/install.ps1 +318 -0
  6. package/data/release.json +1 -0
  7. package/inventory.json +1 -0
  8. package/npm-adapter-files.json +52 -0
  9. package/package.json +14 -44
  10. package/README.md +0 -168
  11. package/dist/agent-update-notice.d.ts +0 -7
  12. package/dist/agent-update-notice.js +0 -77
  13. package/dist/agent-update-notice.js.map +0 -1
  14. package/dist/atomic-file.d.ts +0 -30
  15. package/dist/atomic-file.js +0 -148
  16. package/dist/atomic-file.js.map +0 -1
  17. package/dist/attendant-update.d.ts +0 -15
  18. package/dist/attendant-update.js +0 -96
  19. package/dist/attendant-update.js.map +0 -1
  20. package/dist/claude-wake.d.ts +0 -108
  21. package/dist/claude-wake.js +0 -369
  22. package/dist/claude-wake.js.map +0 -1
  23. package/dist/cli-bin.d.ts +0 -26
  24. package/dist/cli-bin.js +0 -220
  25. package/dist/cli-bin.js.map +0 -1
  26. package/dist/cli-contract.d.ts +0 -16
  27. package/dist/cli-contract.js +0 -27
  28. package/dist/cli-contract.js.map +0 -1
  29. package/dist/cli-release.d.ts +0 -36
  30. package/dist/cli-release.js +0 -85
  31. package/dist/cli-release.js.map +0 -1
  32. package/dist/client.d.ts +0 -109
  33. package/dist/client.js +0 -217
  34. package/dist/client.js.map +0 -1
  35. package/dist/codex-answer-control.d.ts +0 -14
  36. package/dist/codex-answer-control.js +0 -41
  37. package/dist/codex-answer-control.js.map +0 -1
  38. package/dist/codex-answer-presentation.d.ts +0 -18
  39. package/dist/codex-answer-presentation.js +0 -113
  40. package/dist/codex-answer-presentation.js.map +0 -1
  41. package/dist/codex-input-lifecycle.d.ts +0 -10
  42. package/dist/codex-input-lifecycle.js +0 -63
  43. package/dist/codex-input-lifecycle.js.map +0 -1
  44. package/dist/codex-native-control.d.ts +0 -13
  45. package/dist/codex-native-control.js +0 -120
  46. package/dist/codex-native-control.js.map +0 -1
  47. package/dist/codex-native-turn.d.ts +0 -37
  48. package/dist/codex-native-turn.js +0 -155
  49. package/dist/codex-native-turn.js.map +0 -1
  50. package/dist/codex-question-bindings.d.ts +0 -76
  51. package/dist/codex-question-bindings.js +0 -151
  52. package/dist/codex-question-bindings.js.map +0 -1
  53. package/dist/codex-queue-control.d.ts +0 -21
  54. package/dist/codex-queue-control.js +0 -59
  55. package/dist/codex-queue-control.js.map +0 -1
  56. package/dist/codex-tool-messages.d.ts +0 -7
  57. package/dist/codex-tool-messages.js +0 -126
  58. package/dist/codex-tool-messages.js.map +0 -1
  59. package/dist/codex-wake.d.ts +0 -58
  60. package/dist/codex-wake.js +0 -135
  61. package/dist/codex-wake.js.map +0 -1
  62. package/dist/command-session.d.ts +0 -14
  63. package/dist/command-session.js +0 -31
  64. package/dist/command-session.js.map +0 -1
  65. package/dist/commands-acknowledge.d.ts +0 -13
  66. package/dist/commands-acknowledge.js +0 -116
  67. package/dist/commands-acknowledge.js.map +0 -1
  68. package/dist/commands-agent-sessions.d.ts +0 -6
  69. package/dist/commands-agent-sessions.js +0 -51
  70. package/dist/commands-agent-sessions.js.map +0 -1
  71. package/dist/commands-ask.d.ts +0 -62
  72. package/dist/commands-ask.js +0 -503
  73. package/dist/commands-ask.js.map +0 -1
  74. package/dist/commands-auth.d.ts +0 -76
  75. package/dist/commands-auth.js +0 -421
  76. package/dist/commands-auth.js.map +0 -1
  77. package/dist/commands-close.d.ts +0 -6
  78. package/dist/commands-close.js +0 -273
  79. package/dist/commands-close.js.map +0 -1
  80. package/dist/commands-config.d.ts +0 -31
  81. package/dist/commands-config.js +0 -272
  82. package/dist/commands-config.js.map +0 -1
  83. package/dist/commands-core.d.ts +0 -145
  84. package/dist/commands-core.js +0 -190
  85. package/dist/commands-core.js.map +0 -1
  86. package/dist/commands-devices.d.ts +0 -41
  87. package/dist/commands-devices.js +0 -144
  88. package/dist/commands-devices.js.map +0 -1
  89. package/dist/commands-doctor.d.ts +0 -25
  90. package/dist/commands-doctor.js +0 -1553
  91. package/dist/commands-doctor.js.map +0 -1
  92. package/dist/commands-guidance.d.ts +0 -27
  93. package/dist/commands-guidance.js +0 -150
  94. package/dist/commands-guidance.js.map +0 -1
  95. package/dist/commands-harness-context.d.ts +0 -57
  96. package/dist/commands-harness-context.js +0 -102
  97. package/dist/commands-harness-context.js.map +0 -1
  98. package/dist/commands-hook-attend.d.ts +0 -70
  99. package/dist/commands-hook-attend.js +0 -655
  100. package/dist/commands-hook-attend.js.map +0 -1
  101. package/dist/commands-hook-diagnostics.d.ts +0 -37
  102. package/dist/commands-hook-diagnostics.js +0 -136
  103. package/dist/commands-hook-diagnostics.js.map +0 -1
  104. package/dist/commands-hook-install.d.ts +0 -26
  105. package/dist/commands-hook-install.js +0 -784
  106. package/dist/commands-hook-install.js.map +0 -1
  107. package/dist/commands-hook-run.d.ts +0 -29
  108. package/dist/commands-hook-run.js +0 -933
  109. package/dist/commands-hook-run.js.map +0 -1
  110. package/dist/commands-hook-shape.d.ts +0 -19
  111. package/dist/commands-hook-shape.js +0 -48
  112. package/dist/commands-hook-shape.js.map +0 -1
  113. package/dist/commands-init.d.ts +0 -42
  114. package/dist/commands-init.js +0 -901
  115. package/dist/commands-init.js.map +0 -1
  116. package/dist/commands-io.d.ts +0 -2
  117. package/dist/commands-io.js +0 -117
  118. package/dist/commands-io.js.map +0 -1
  119. package/dist/commands-logs.d.ts +0 -30
  120. package/dist/commands-logs.js +0 -201
  121. package/dist/commands-logs.js.map +0 -1
  122. package/dist/commands-native-acknowledge.d.ts +0 -8
  123. package/dist/commands-native-acknowledge.js +0 -114
  124. package/dist/commands-native-acknowledge.js.map +0 -1
  125. package/dist/commands-project.d.ts +0 -4
  126. package/dist/commands-project.js +0 -41
  127. package/dist/commands-project.js.map +0 -1
  128. package/dist/commands-receive.d.ts +0 -3
  129. package/dist/commands-receive.js +0 -59
  130. package/dist/commands-receive.js.map +0 -1
  131. package/dist/commands-send-support.d.ts +0 -59
  132. package/dist/commands-send-support.js +0 -258
  133. package/dist/commands-send-support.js.map +0 -1
  134. package/dist/commands-send.d.ts +0 -34
  135. package/dist/commands-send.js +0 -900
  136. package/dist/commands-send.js.map +0 -1
  137. package/dist/commands-setup-proof.d.ts +0 -43
  138. package/dist/commands-setup-proof.js +0 -134
  139. package/dist/commands-setup-proof.js.map +0 -1
  140. package/dist/commands-skill.d.ts +0 -21
  141. package/dist/commands-skill.js +0 -199
  142. package/dist/commands-skill.js.map +0 -1
  143. package/dist/commands-sounds.d.ts +0 -12
  144. package/dist/commands-sounds.js +0 -35
  145. package/dist/commands-sounds.js.map +0 -1
  146. package/dist/commands-update-check.d.ts +0 -6
  147. package/dist/commands-update-check.js +0 -102
  148. package/dist/commands-update-check.js.map +0 -1
  149. package/dist/commands-update-resume.d.ts +0 -7
  150. package/dist/commands-update-resume.js +0 -143
  151. package/dist/commands-update-resume.js.map +0 -1
  152. package/dist/commands-update-skill.d.ts +0 -5
  153. package/dist/commands-update-skill.js +0 -36
  154. package/dist/commands-update-skill.js.map +0 -1
  155. package/dist/commands-update.d.ts +0 -11
  156. package/dist/commands-update.js +0 -286
  157. package/dist/commands-update.js.map +0 -1
  158. package/dist/commands.d.ts +0 -26
  159. package/dist/commands.js +0 -27
  160. package/dist/commands.js.map +0 -1
  161. package/dist/config-schema.d.ts +0 -62
  162. package/dist/config-schema.js +0 -302
  163. package/dist/config-schema.js.map +0 -1
  164. package/dist/config.d.ts +0 -181
  165. package/dist/config.js +0 -357
  166. package/dist/config.js.map +0 -1
  167. package/dist/credentials.d.ts +0 -96
  168. package/dist/credentials.js +0 -342
  169. package/dist/credentials.js.map +0 -1
  170. package/dist/file-lock.d.ts +0 -34
  171. package/dist/file-lock.js +0 -367
  172. package/dist/file-lock.js.map +0 -1
  173. package/dist/generated-session-label.d.ts +0 -2
  174. package/dist/generated-session-label.js +0 -152
  175. package/dist/generated-session-label.js.map +0 -1
  176. package/dist/guidance-content.d.ts +0 -53
  177. package/dist/guidance-content.js +0 -248
  178. package/dist/guidance-content.js.map +0 -1
  179. package/dist/guidance-render.d.ts +0 -25
  180. package/dist/guidance-render.js +0 -47
  181. package/dist/guidance-render.js.map +0 -1
  182. package/dist/guidance.d.ts +0 -69
  183. package/dist/guidance.js +0 -173
  184. package/dist/guidance.js.map +0 -1
  185. package/dist/harness-session-title.d.ts +0 -22
  186. package/dist/harness-session-title.js +0 -74
  187. package/dist/harness-session-title.js.map +0 -1
  188. package/dist/harnesses.d.ts +0 -65
  189. package/dist/harnesses.js +0 -159
  190. package/dist/harnesses.js.map +0 -1
  191. package/dist/hermes-attendant.d.ts +0 -38
  192. package/dist/hermes-attendant.js +0 -337
  193. package/dist/hermes-attendant.js.map +0 -1
  194. package/dist/hermes-plugin.d.ts +0 -11
  195. package/dist/hermes-plugin.js +0 -299
  196. package/dist/hermes-plugin.js.map +0 -1
  197. package/dist/hook-acknowledgements.d.ts +0 -70
  198. package/dist/hook-acknowledgements.js +0 -490
  199. package/dist/hook-acknowledgements.js.map +0 -1
  200. package/dist/hook-adapter.d.ts +0 -48
  201. package/dist/hook-adapter.js +0 -419
  202. package/dist/hook-adapter.js.map +0 -1
  203. package/dist/hook-events.d.ts +0 -105
  204. package/dist/hook-events.js +0 -130
  205. package/dist/hook-events.js.map +0 -1
  206. package/dist/hook-gates.d.ts +0 -7
  207. package/dist/hook-gates.js +0 -20
  208. package/dist/hook-gates.js.map +0 -1
  209. package/dist/hook-input.d.ts +0 -10
  210. package/dist/hook-input.js +0 -64
  211. package/dist/hook-input.js.map +0 -1
  212. package/dist/hook-lifecycle.d.ts +0 -112
  213. package/dist/hook-lifecycle.js +0 -2031
  214. package/dist/hook-lifecycle.js.map +0 -1
  215. package/dist/hook-project-sessions.d.ts +0 -28
  216. package/dist/hook-project-sessions.js +0 -141
  217. package/dist/hook-project-sessions.js.map +0 -1
  218. package/dist/hook-question-lock.d.ts +0 -29
  219. package/dist/hook-question-lock.js +0 -217
  220. package/dist/hook-question-lock.js.map +0 -1
  221. package/dist/hook-question-retirement.d.ts +0 -74
  222. package/dist/hook-question-retirement.js +0 -314
  223. package/dist/hook-question-retirement.js.map +0 -1
  224. package/dist/hook-question-state.d.ts +0 -58
  225. package/dist/hook-question-state.js +0 -239
  226. package/dist/hook-question-state.js.map +0 -1
  227. package/dist/hook-session-state.d.ts +0 -127
  228. package/dist/hook-session-state.js +0 -488
  229. package/dist/hook-session-state.js.map +0 -1
  230. package/dist/hook-types.d.ts +0 -476
  231. package/dist/hook-types.js +0 -4
  232. package/dist/hook-types.js.map +0 -1
  233. package/dist/injection-render.d.ts +0 -36
  234. package/dist/injection-render.js +0 -61
  235. package/dist/injection-render.js.map +0 -1
  236. package/dist/install-hooks.d.ts +0 -470
  237. package/dist/install-hooks.js +0 -1622
  238. package/dist/install-hooks.js.map +0 -1
  239. package/dist/integration-health.d.ts +0 -26
  240. package/dist/integration-health.js +0 -133
  241. package/dist/integration-health.js.map +0 -1
  242. package/dist/interactive.d.ts +0 -22
  243. package/dist/interactive.js +0 -644
  244. package/dist/interactive.js.map +0 -1
  245. package/dist/invocation-context.d.ts +0 -47
  246. package/dist/invocation-context.js +0 -164
  247. package/dist/invocation-context.js.map +0 -1
  248. package/dist/local-path.d.ts +0 -7
  249. package/dist/local-path.js +0 -27
  250. package/dist/local-path.js.map +0 -1
  251. package/dist/logging.d.ts +0 -157
  252. package/dist/logging.js +0 -599
  253. package/dist/logging.js.map +0 -1
  254. package/dist/main-run.d.ts +0 -1
  255. package/dist/main-run.js +0 -42
  256. package/dist/main-run.js.map +0 -1
  257. package/dist/main.d.ts +0 -2
  258. package/dist/main.js +0 -12
  259. package/dist/main.js.map +0 -1
  260. package/dist/native-answer-operation.d.ts +0 -70
  261. package/dist/native-answer-operation.js +0 -247
  262. package/dist/native-answer-operation.js.map +0 -1
  263. package/dist/native-skills.d.ts +0 -64
  264. package/dist/native-skills.js +0 -167
  265. package/dist/native-skills.js.map +0 -1
  266. package/dist/node-floor.d.ts +0 -19
  267. package/dist/node-floor.js +0 -32
  268. package/dist/node-floor.js.map +0 -1
  269. package/dist/npm-invocation.d.ts +0 -34
  270. package/dist/npm-invocation.js +0 -53
  271. package/dist/npm-invocation.js.map +0 -1
  272. package/dist/openclaw-continuation-bridge.d.ts +0 -7
  273. package/dist/openclaw-continuation-bridge.js +0 -64
  274. package/dist/openclaw-continuation-bridge.js.map +0 -1
  275. package/dist/openclaw-gateway-readiness.d.ts +0 -1
  276. package/dist/openclaw-gateway-readiness.js +0 -24
  277. package/dist/openclaw-gateway-readiness.js.map +0 -1
  278. package/dist/openclaw-generation.d.ts +0 -21
  279. package/dist/openclaw-generation.js +0 -115
  280. package/dist/openclaw-generation.js.map +0 -1
  281. package/dist/openclaw-message-bridge.d.ts +0 -8
  282. package/dist/openclaw-message-bridge.js +0 -93
  283. package/dist/openclaw-message-bridge.js.map +0 -1
  284. package/dist/openclaw-pending.d.ts +0 -8
  285. package/dist/openclaw-pending.js +0 -47
  286. package/dist/openclaw-pending.js.map +0 -1
  287. package/dist/openclaw-plugin.d.ts +0 -75
  288. package/dist/openclaw-plugin.js +0 -1353
  289. package/dist/openclaw-plugin.js.map +0 -1
  290. package/dist/openclaw-session-access.d.ts +0 -12
  291. package/dist/openclaw-session-access.js +0 -79
  292. package/dist/openclaw-session-access.js.map +0 -1
  293. package/dist/opencode-plugin.d.ts +0 -88
  294. package/dist/opencode-plugin.js +0 -286
  295. package/dist/opencode-plugin.js.map +0 -1
  296. package/dist/orca-session-title.d.ts +0 -11
  297. package/dist/orca-session-title.js +0 -111
  298. package/dist/orca-session-title.js.map +0 -1
  299. package/dist/pack-feedback-slice.d.ts +0 -35
  300. package/dist/pack-feedback-slice.js +0 -126
  301. package/dist/pack-feedback-slice.js.map +0 -1
  302. package/dist/pairing-qr.d.ts +0 -5
  303. package/dist/pairing-qr.js +0 -24
  304. package/dist/pairing-qr.js.map +0 -1
  305. package/dist/pending-pairing.d.ts +0 -38
  306. package/dist/pending-pairing.js +0 -70
  307. package/dist/pending-pairing.js.map +0 -1
  308. package/dist/platform.d.ts +0 -67
  309. package/dist/platform.js +0 -140
  310. package/dist/platform.js.map +0 -1
  311. package/dist/process-identity.d.ts +0 -26
  312. package/dist/process-identity.js +0 -82
  313. package/dist/process-identity.js.map +0 -1
  314. package/dist/program.d.ts +0 -59
  315. package/dist/program.js +0 -691
  316. package/dist/program.js.map +0 -1
  317. package/dist/project-enablement.d.ts +0 -21
  318. package/dist/project-enablement.js +0 -71
  319. package/dist/project-enablement.js.map +0 -1
  320. package/dist/question-settlement-process.d.ts +0 -17
  321. package/dist/question-settlement-process.js +0 -35
  322. package/dist/question-settlement-process.js.map +0 -1
  323. package/dist/question-timing.d.ts +0 -46
  324. package/dist/question-timing.js +0 -48
  325. package/dist/question-timing.js.map +0 -1
  326. package/dist/readiness.d.ts +0 -153
  327. package/dist/readiness.js +0 -149
  328. package/dist/readiness.js.map +0 -1
  329. package/dist/release.d.ts +0 -31
  330. package/dist/release.js +0 -52
  331. package/dist/release.js.map +0 -1
  332. package/dist/send-attempts.d.ts +0 -26
  333. package/dist/send-attempts.js +0 -139
  334. package/dist/send-attempts.js.map +0 -1
  335. package/dist/send.d.ts +0 -115
  336. package/dist/send.js +0 -421
  337. package/dist/send.js.map +0 -1
  338. package/dist/session-activation.d.ts +0 -13
  339. package/dist/session-activation.js +0 -64
  340. package/dist/session-activation.js.map +0 -1
  341. package/dist/session-attendant-probe.d.ts +0 -85
  342. package/dist/session-attendant-probe.js +0 -173
  343. package/dist/session-attendant-probe.js.map +0 -1
  344. package/dist/session-attendant-state.d.ts +0 -70
  345. package/dist/session-attendant-state.js +0 -256
  346. package/dist/session-attendant-state.js.map +0 -1
  347. package/dist/session-attendant.d.ts +0 -143
  348. package/dist/session-attendant.js +0 -520
  349. package/dist/session-attendant.js.map +0 -1
  350. package/dist/session-delivery.d.ts +0 -249
  351. package/dist/session-delivery.js +0 -576
  352. package/dist/session-delivery.js.map +0 -1
  353. package/dist/session-handoff.d.ts +0 -98
  354. package/dist/session-handoff.js +0 -118
  355. package/dist/session-handoff.js.map +0 -1
  356. package/dist/session-input-wakes.d.ts +0 -78
  357. package/dist/session-input-wakes.js +0 -239
  358. package/dist/session-input-wakes.js.map +0 -1
  359. package/dist/session-inputs.d.ts +0 -57
  360. package/dist/session-inputs.js +0 -434
  361. package/dist/session-inputs.js.map +0 -1
  362. package/dist/session-labels.d.ts +0 -56
  363. package/dist/session-labels.js +0 -396
  364. package/dist/session-labels.js.map +0 -1
  365. package/dist/session-message-handoff.d.ts +0 -39
  366. package/dist/session-message-handoff.js +0 -107
  367. package/dist/session-message-handoff.js.map +0 -1
  368. package/dist/setup-destinations.d.ts +0 -23
  369. package/dist/setup-destinations.js +0 -44
  370. package/dist/setup-destinations.js.map +0 -1
  371. package/dist/skill-integrity.d.ts +0 -54
  372. package/dist/skill-integrity.js +0 -164
  373. package/dist/skill-integrity.js.map +0 -1
  374. package/dist/skill-source/manifest.json +0 -40
  375. package/dist/skill-source/notifai/SKILL.md +0 -350
  376. package/dist/skill-source/notifai/references/diagnostics.md +0 -36
  377. package/dist/skill-source/notifai/references/harness-setup.md +0 -384
  378. package/dist/skill-source/notifai/references/native-questions.md +0 -51
  379. package/dist/skill-source/notifai/references/notes-and-edits.md +0 -54
  380. package/dist/skill-source/notifai/references/send-details.md +0 -14
  381. package/dist/skill-source/notifai/references/updates.md +0 -116
  382. package/dist/skill-source/notifai/references/writing-examples.md +0 -56
  383. package/dist/sound-ref.d.ts +0 -23
  384. package/dist/sound-ref.js +0 -28
  385. package/dist/sound-ref.js.map +0 -1
  386. package/dist/ui/banner.d.ts +0 -22
  387. package/dist/ui/banner.js +0 -87
  388. package/dist/ui/banner.js.map +0 -1
  389. package/dist/ui/config-view.d.ts +0 -30
  390. package/dist/ui/config-view.js +0 -108
  391. package/dist/ui/config-view.js.map +0 -1
  392. package/dist/ui/help.d.ts +0 -44
  393. package/dist/ui/help.js +0 -107
  394. package/dist/ui/help.js.map +0 -1
  395. package/dist/ui/theme.d.ts +0 -90
  396. package/dist/ui/theme.js +0 -244
  397. package/dist/ui/theme.js.map +0 -1
  398. package/dist/update-handoff.d.ts +0 -29
  399. package/dist/update-handoff.js +0 -69
  400. package/dist/update-handoff.js.map +0 -1
  401. package/dist/url-policy.d.ts +0 -85
  402. package/dist/url-policy.js +0 -369
  403. package/dist/url-policy.js.map +0 -1
  404. package/dist/version.d.ts +0 -40
  405. package/dist/version.js +0 -132
  406. package/dist/version.js.map +0 -1
  407. package/dist/wake-support.d.ts +0 -40
  408. package/dist/wake-support.js +0 -95
  409. package/dist/wake-support.js.map +0 -1
@@ -1,145 +0,0 @@
1
- import type { connectCodexQueue } from './codex-queue-control.js';
2
- import type { AttendantSeams } from './commands-hook-attend.js';
3
- import { type ClaudeWakeAdapters } from './claude-wake.js';
4
- import { type ApiClient, type ClientOptions } from './client.js';
5
- import { type CodexWakeAdapters } from './codex-wake.js';
6
- import { loadConfig, type CliConfig } from './config.js';
7
- import type { CredentialStore, MachineCredential } from './credentials.js';
8
- import { type HookAdapterTarget } from './hook-adapter.js';
9
- import { type Logger } from './logging.js';
10
- import type { NativeSkills } from './native-skills.js';
11
- import type { CodexSessionTitleLookup } from './harness-session-title.js';
12
- import type { OrcaSessionTitleLookup } from './orca-session-title.js';
13
- import type { ProcessIdentity } from './process-identity.js';
14
- import type { QuestionSettlementLaunch } from './question-settlement-process.js';
15
- import type { Tone } from './ui/theme.js';
16
- export interface CommandIo {
17
- out(line: string): void;
18
- err(line: string): void;
19
- /** Interactive confirmation; resolves `fallback` (default false) when not interactive. */
20
- confirm(question: string, fallback?: boolean): Promise<boolean>;
21
- openUrl(url: string): void;
22
- /**
23
- * True only when a human is demonstrably driving a terminal. Everything below
24
- * is optional sugar that MUST only be called behind this flag: an agent that
25
- * reaches an interactive prompt does not error, it hangs — the prompt
26
- * libraries wait on stdin for ever — so the gate is bypass, not handling.
27
- * Test fakes leave all of this undefined and exercise the plain paths.
28
- */
29
- interactive?: boolean;
30
- text?(message: string): Promise<string | null>;
31
- select?(message: string, options: {
32
- value: string;
33
- label: string;
34
- hint?: string;
35
- }[]): Promise<string | null>;
36
- /** Interactive multi-select. `initial` are pre-selected values. */
37
- multiselect?(message: string, options: {
38
- value: string;
39
- label: string;
40
- hint?: string;
41
- }[], initial?: string[]): Promise<string[] | null>;
42
- intro?(title: string): Promise<void>;
43
- outro?(message: string): Promise<void>;
44
- note?(message: string, title?: string): Promise<void>;
45
- spinner?(message: string): Promise<CommandSpinner | null>;
46
- /**
47
- * A report line. `tone` distinguishes the two states that are neither pass
48
- * nor fail — something optional the user declined, and something that was
49
- * never evaluated — which a boolean has to round to one or the other.
50
- * Optional so existing implementations keep type-checking.
51
- */
52
- check?(ok: boolean, message: string, tone?: Tone): Promise<void>;
53
- }
54
- export interface CommandSpinner {
55
- message(message: string): void;
56
- stop(message: string): void;
57
- error(message: string): void;
58
- }
59
- export interface CommandDeps {
60
- io: CommandIo;
61
- store: CredentialStore;
62
- env: NodeJS.ProcessEnv;
63
- cwd: string;
64
- /** Test seam; production uses the OS-account adapter and refuses a relocated HOME. */
65
- hookAdapterHome?: string;
66
- /** Test seam; production uses this process's Node and CLI paths. */
67
- hookInstallTarget?: HookAdapterTarget;
68
- /** Test seam; production uses process.platform for adapter format and quoting. */
69
- hookPlatform?: NodeJS.Platform;
70
- /** Test seam; production uses this build's package version. */
71
- runningVersion?: string | null;
72
- /** Test seam; production uses fetch against base_url. */
73
- clientFactory?: (baseUrl: string, bearer: string | null, options?: ClientOptions) => ApiClient;
74
- /** Test seam for bounded polling without wall-clock sleeps. */
75
- now?: () => number;
76
- /** Test seam for retry/backoff timing. */
77
- sleep?: (milliseconds: number) => Promise<void>;
78
- /** Test seams for Claude liveness, socket delivery, and cold resume. */
79
- claudeWake?: ClaudeWakeAdapters;
80
- claudeSourcePid?: number;
81
- /** Test seam: the answer waiter's writer identity; null disables answer claims. */
82
- answerWriter?: ProcessIdentity | null;
83
- /** Test seams for the Session Attendant's harness probe, clocks, and signals. */
84
- attendant?: AttendantSeams;
85
- /** Test seams for the Codex thread-writer probe and cold resume. */
86
- codexWake?: CodexWakeAdapters;
87
- codexQueueControl?: typeof connectCodexQueue;
88
- codexSourcePid?: number;
89
- /** Test seam for detached immediate submission and native answer ownership. */
90
- spawnQuestionSettlement?: (launch: QuestionSettlementLaunch) => void;
91
- /** Test seam and production adapter for the external native skills installer. */
92
- nativeSkills?: NativeSkills;
93
- /** Test seam for Orca's exact-pane Agent Session title lookup. */
94
- orcaSessionTitle?: OrcaSessionTitleLookup;
95
- /** Test seam for Codex Desktop/CLI's native Agent Session title index. */
96
- codexSessionTitle?: CodexSessionTitleLookup;
97
- /** Test seam for registry reads; production uses fetch. */
98
- fetchImpl?: typeof fetch;
99
- /**
100
- * The local record of what this invocation did. Optional so a test fake need
101
- * not carry one; `log(deps)` supplies a logger that records nothing.
102
- */
103
- logger?: Logger;
104
- }
105
- /** The invocation's logger, or one that discards everything. */
106
- export declare function log(deps: CommandDeps): Logger;
107
- export declare function loadLoggedConfig(deps: CommandDeps, options: Parameters<typeof loadConfig>[0]): CliConfig;
108
- export declare const EXIT: {
109
- readonly ok: 0;
110
- readonly failed: 1;
111
- readonly usage: 2;
112
- readonly noReply: 3;
113
- readonly auth: 4;
114
- readonly network: 5;
115
- };
116
- export declare function makeClient(deps: CommandDeps, baseUrl: string, bearer: string | null, options?: ClientOptions): ApiClient;
117
- export declare function resolvedBaseUrl(config: CliConfig, credential: MachineCredential | null): string;
118
- /**
119
- * Whether a flag or env origin would send signed-in traffic somewhere other
120
- * than the origin stored with this machine's credential.
121
- *
122
- * Login still honours those overrides: pairing has no credential to pin to.
123
- * Returning the source (not the override URL, and never the bearer) is what
124
- * lets callers diagnose the ignore without leaking either.
125
- */
126
- export declare function ignoredOriginOverride(config: CliConfig, credential: MachineCredential): CliConfig['base_url']['source'] | null;
127
- export declare function diagnoseIgnoredOriginOverride(io: Pick<CommandIo, 'err'>, config: CliConfig, credential: MachineCredential): void;
128
- export declare function authedClient(deps: CommandDeps, config: CliConfig): {
129
- client: ApiClient;
130
- baseUrl: string;
131
- service: {
132
- base_url: string;
133
- machine_id: string;
134
- };
135
- } | null;
136
- /**
137
- * Resolve a current CLI independently of PATH. A bare `notifai update` would
138
- * be captured by the stale winner this action is meant to repair. A beta
139
- * installation is pointed at the beta channel, which never downgrades it.
140
- */
141
- export declare function updateCliCommand(_deps: Pick<CommandDeps, 'hookInstallTarget' | 'hookPlatform'>): string;
142
- /** The one first-run command an unsigned machine is told to run. */
143
- export declare const SETUP_COMMAND = "notifai init";
144
- export declare function reportError(deps: CommandDeps, err: unknown, context?: Record<string, unknown>): number;
145
- export declare function rejectedPaths(details: unknown): string[];
@@ -1,190 +0,0 @@
1
- import { NOTIFICATION_CONTRACT_FINGERPRINT, SHIPPED_CLI_CAPABILITIES, } from '@raidiant/notifai-protocol';
2
- import {} from './claude-wake.js';
3
- import { ApiCallError, NetworkError, createClient, } from './client.js';
4
- import {} from './codex-wake.js';
5
- import { loadConfig } from './config.js';
6
- import {} from './hook-adapter.js';
7
- import { logConfigResolved, logSettingsFrom, nullLogger } from './logging.js';
8
- import { packageVersion } from './release.js';
9
- import { SERVICE_UPDATE_IN_PROGRESS, cliUpdateChannel, cliUpdateRecoveryCommand } from './cli-contract.js';
10
- /** The invocation's logger, or one that discards everything. */
11
- export function log(deps) {
12
- return deps.logger ?? nullLogger();
13
- }
14
- export function loadLoggedConfig(deps, options) {
15
- const config = loadConfig(options);
16
- const logger = log(deps);
17
- logger.adopt(logSettingsFrom(config));
18
- logger.bind({ project: config.project.value });
19
- logConfigResolved(logger, config);
20
- return config;
21
- }
22
- export const EXIT = {
23
- ok: 0,
24
- failed: 1,
25
- usage: 2,
26
- noReply: 3,
27
- auth: 4,
28
- network: 5,
29
- };
30
- export function makeClient(deps, baseUrl, bearer, options) {
31
- return (deps.clientFactory ?? createClient)(baseUrl, bearer, {
32
- ...options,
33
- logger: log(deps),
34
- cliVersion: packageVersion(),
35
- capabilities: SHIPPED_CLI_CAPABILITIES,
36
- notificationContractFingerprint: NOTIFICATION_CONTRACT_FINGERPRINT,
37
- });
38
- }
39
- export function resolvedBaseUrl(config, credential) {
40
- return credential ? credential.baseUrl : config.base_url.value;
41
- }
42
- /**
43
- * Whether a flag or env origin would send signed-in traffic somewhere other
44
- * than the origin stored with this machine's credential.
45
- *
46
- * Login still honours those overrides: pairing has no credential to pin to.
47
- * Returning the source (not the override URL, and never the bearer) is what
48
- * lets callers diagnose the ignore without leaking either.
49
- */
50
- export function ignoredOriginOverride(config, credential) {
51
- if (config.base_url.source === 'default')
52
- return null;
53
- if (config.base_url.value === credential.baseUrl)
54
- return null;
55
- return config.base_url.source;
56
- }
57
- export function diagnoseIgnoredOriginOverride(io, config, credential) {
58
- const source = ignoredOriginOverride(config, credential);
59
- if (source === null)
60
- return;
61
- io.err(`Ignoring base_url from ${source}; authenticated traffic uses the origin stored with this machine's credential. Run \`notifai login\` to pair with a different origin.`);
62
- }
63
- export function authedClient(deps, config) {
64
- const credential = deps.store.load();
65
- if (!credential) {
66
- // The commonest reason a command does nothing, and one that leaves no other
67
- // trace: it returns before any request is made, so without this the log
68
- // shows an exit code and no cause.
69
- log(deps).error('cli.error', { kind: 'auth', message: 'not signed in', store: deps.store.describe() });
70
- deps.io.err('Not signed in. Run `notifai init`; it will coordinate machine login and device setup.');
71
- return null;
72
- }
73
- diagnoseIgnoredOriginOverride(deps.io, config, credential);
74
- const baseUrl = resolvedBaseUrl(config, credential);
75
- return {
76
- client: makeClient(deps, baseUrl, `Bearer nfm_${credential.machineId}.${credential.secret}`),
77
- baseUrl,
78
- service: { base_url: baseUrl, machine_id: credential.machineId },
79
- };
80
- }
81
- /**
82
- * Resolve a current CLI independently of PATH. A bare `notifai update` would
83
- * be captured by the stale winner this action is meant to repair. A beta
84
- * installation is pointed at the beta channel, which never downgrades it.
85
- */
86
- export function updateCliCommand(_deps) {
87
- return cliUpdateRecoveryCommand(cliUpdateChannel(packageVersion()));
88
- }
89
- /** The one first-run command an unsigned machine is told to run. */
90
- export const SETUP_COMMAND = 'notifai init';
91
- function affectedDeviceNames(details) {
92
- if (typeof details !== 'object' || details === null || !('device_names' in details))
93
- return [];
94
- const names = details.device_names;
95
- if (!Array.isArray(names))
96
- return [];
97
- return [...new Set(names.filter((name) => typeof name === 'string' && name.trim() !== ''))];
98
- }
99
- function naturalList(values) {
100
- if (values.length <= 1)
101
- return values[0] ?? '';
102
- if (values.length === 2)
103
- return `${values[0]} and ${values[1]}`;
104
- return `${values.slice(0, -1).join(', ')}, and ${values.at(-1)}`;
105
- }
106
- function localRecovery(deps, action, details) {
107
- switch (action) {
108
- case 'update_cli':
109
- return `next: ${updateCliCommand(deps)}`;
110
- case 'update_companion': {
111
- const names = affectedDeviceNames(details);
112
- return names.length > 0
113
- ? `next: Update Notifai on ${naturalList(names)}.`
114
- : 'next: Update Notifai on the affected devices.';
115
- }
116
- case 'wait_for_service':
117
- return `next: ${SERVICE_UPDATE_IN_PROGRESS}`;
118
- default:
119
- return null;
120
- }
121
- }
122
- export function reportError(deps, err, context = {}) {
123
- // Recorded before it is printed: stderr from an agent's shell call is often
124
- // the one thing that does not survive into the next turn, and this is exactly
125
- // the line someone comes back looking for.
126
- log(deps).error('cli.error', {
127
- ...context,
128
- ...(err instanceof ApiCallError
129
- ? {
130
- kind: 'api',
131
- status: err.status,
132
- code: err.code,
133
- message: err.message,
134
- next_action: err.nextAction,
135
- recovery_action: err.recoveryAction,
136
- details: err.details,
137
- }
138
- : err instanceof NetworkError
139
- ? { kind: 'network', message: err.message }
140
- : { kind: 'unknown', message: String(err) }),
141
- });
142
- if (err instanceof ApiCallError) {
143
- deps.io.err(deps.io.interactive === true && err.recoveryAction !== null
144
- ? err.message
145
- : `${err.code}: ${err.message}`);
146
- // The server's field-level details were already being logged above, but
147
- // stderr is the one surface an agent's next turn actually reads — so the
148
- // diagnosis has to be on it, the same way the hook path prints it.
149
- const paths = rejectedPaths(err.details);
150
- if (paths.length > 0)
151
- deps.io.err(`the server rejected: ${paths.join(', ')}`);
152
- // A 422 on a request this CLI built is not a user error: the two sides
153
- // disagree about the contract, in whichever direction. `doctor` says which.
154
- // Codes that name a policy the account chose are the exception — the
155
- // contract held, the body simply did not satisfy that account.
156
- if (err.status === 422 &&
157
- err.code !== 'acknowledgement_text_required' &&
158
- err.code !== 'feature_unavailable') {
159
- deps.io.err('this build sent a field the server did not accept — the CLI and server ' +
160
- 'disagree about the contract; check with `notifai doctor`');
161
- }
162
- const recovery = err.code === 'no_active_devices'
163
- ? 'next: Run `notifai init` to connect an active Companion App; it will complete machine setup and identify any human-only device step.'
164
- : localRecovery(deps, err.recoveryAction, err.details);
165
- if (recovery !== null)
166
- deps.io.err(recovery);
167
- else if (err.recoveryAction === null && err.nextAction)
168
- deps.io.err(`next: ${err.nextAction}`);
169
- if (err.code === 'auth_required' || err.code === 'machine_revoked')
170
- return EXIT.auth;
171
- return err.status >= 500 ? EXIT.network : EXIT.failed;
172
- }
173
- if (err instanceof NetworkError) {
174
- deps.io.err(err.message);
175
- return EXIT.network;
176
- }
177
- deps.io.err(String(err));
178
- return EXIT.failed;
179
- }
180
- export function rejectedPaths(details) {
181
- if (!Array.isArray(details))
182
- return [];
183
- return details
184
- .map((issue) => typeof issue === 'object' && issue !== null && typeof issue.path === 'string'
185
- ? issue.path
186
- : null)
187
- .filter((path) => path !== null && path !== '')
188
- .slice(0, 5);
189
- }
190
- //# sourceMappingURL=commands-core.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-core.js","sourceRoot":"","sources":["../src/commands-core.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import { type Platform, type RoutableDevice } from '@raidiant/notifai-protocol';
2
- import { type CommandDeps } from './commands-core.js';
3
- import { type CompanionPlatform } from './setup-destinations.js';
4
- export declare function devicesCommand(deps: CommandDeps, flags: {
5
- json?: boolean;
6
- platform?: string;
7
- }): Promise<number>;
8
- /**
9
- * Devices as data, for surfaces that render them themselves.
10
- *
11
- * `devicesCommand` prints and returns an exit code, which is the right shape
12
- * for a command and the wrong one for a menu that wants to show names beside
13
- * checkboxes. Silent on every failure by design: the interactive app already
14
- * shows the credential and connectivity state on its status card, so a second
15
- * error line here would be reporting the same fault twice.
16
- */
17
- export declare function deviceInventory(deps: CommandDeps): Promise<RoutableDevice[] | null>;
18
- /** Whether a device is in a state where a notification would actually arrive. */
19
- export declare function canDeviceReceive(device: RoutableDevice): boolean;
20
- export declare function capabilitiesCommand(deps: CommandDeps, flags: {
21
- json?: boolean;
22
- platform?: Platform;
23
- }): Promise<number>;
24
- /** Same-account line for the device hop; prefers the real email when known. */
25
- export declare function sameAccountSignInLine(email: string | null | undefined): string;
26
- /**
27
- * What is actually left to do on the phone.
28
- *
29
- * Three sub-states, three remedies. "Install the app" is useless advice to
30
- * someone who installed it and then declined the permission prompt, and
31
- * offering install steps to a registered device says this terminal did not
32
- * read the state it just fetched.
33
- */
34
- export declare function deviceInstallRemedy(options: {
35
- baseUrl: string;
36
- email: string | null;
37
- devices: readonly RoutableDevice[];
38
- platform?: CompanionPlatform;
39
- }): string;
40
- export declare function deviceCanReceive(device: RoutableDevice): boolean;
41
- export declare function readyCompanionDevices(devices: readonly RoutableDevice[]): RoutableDevice[];
@@ -1,144 +0,0 @@
1
- import { PLATFORMS } from '@raidiant/notifai-protocol';
2
- import { EXIT, authedClient, loadLoggedConfig, makeClient, reportError, resolvedBaseUrl, } from './commands-core.js';
3
- import { companionPlatformLabel, setupCompanionUrl, } from './setup-destinations.js';
4
- // ---------------------------------------------------------------------------
5
- // devices / capabilities
6
- // ---------------------------------------------------------------------------
7
- export async function devicesCommand(deps, flags) {
8
- if (flags.platform !== undefined && !PLATFORMS.includes(flags.platform)) {
9
- deps.io.err(`Unknown platform "${flags.platform}" — use ${PLATFORMS.join(' or ')}.`);
10
- return EXIT.usage;
11
- }
12
- const platform = flags.platform;
13
- const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
14
- const authed = authedClient(deps, config);
15
- if (!authed)
16
- return EXIT.auth;
17
- try {
18
- const result = await authed.client.listDevices();
19
- const devices = platform === undefined
20
- ? result.devices
21
- : result.devices.filter((device) => device.platform === platform);
22
- if (flags.json) {
23
- deps.io.out(JSON.stringify({ ...result, devices }, null, 2));
24
- return EXIT.ok;
25
- }
26
- if (devices.length === 0) {
27
- if (platform !== undefined) {
28
- deps.io.out(`No ${platform} devices registered.`);
29
- return EXIT.ok;
30
- }
31
- const setupUrl = setupCompanionUrl(authed.baseUrl);
32
- let email = null;
33
- try {
34
- email = (await authed.client.accessStatus()).email;
35
- }
36
- catch {
37
- // Best-effort: the empty-state copy still names the destination.
38
- }
39
- deps.io.out(`No devices yet. Set up a Companion App at ${setupUrl}, ${sameAccountSignInLine(email)}, and allow notifications.`);
40
- return EXIT.ok;
41
- }
42
- for (const d of devices) {
43
- deps.io.out(`${d.device_id} ${d.display_name} ${d.platform} ${d.status_message ?? 'Working'}`);
44
- }
45
- return EXIT.ok;
46
- }
47
- catch (err) {
48
- return reportError(deps, err);
49
- }
50
- }
51
- /**
52
- * Devices as data, for surfaces that render them themselves.
53
- *
54
- * `devicesCommand` prints and returns an exit code, which is the right shape
55
- * for a command and the wrong one for a menu that wants to show names beside
56
- * checkboxes. Silent on every failure by design: the interactive app already
57
- * shows the credential and connectivity state on its status card, so a second
58
- * error line here would be reporting the same fault twice.
59
- */
60
- export async function deviceInventory(deps) {
61
- if (!deps.store.load())
62
- return null;
63
- const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
64
- const authed = authedClient(deps, config);
65
- if (!authed)
66
- return null;
67
- try {
68
- return (await authed.client.listDevices()).devices;
69
- }
70
- catch {
71
- return null;
72
- }
73
- }
74
- /** Whether a device is in a state where a notification would actually arrive. */
75
- export function canDeviceReceive(device) {
76
- return deviceCanReceive(device);
77
- }
78
- export async function capabilitiesCommand(deps, flags) {
79
- // Locally, and with the same message `send` gives. Spending a round trip to
80
- // have the server answer "Request validation failed" told the caller neither
81
- // which flag was wrong nor what it accepts.
82
- if (flags.platform !== undefined && !PLATFORMS.includes(flags.platform)) {
83
- deps.io.err(`Unknown platform "${flags.platform}" — use ${PLATFORMS.join(' or ')}.`);
84
- return EXIT.usage;
85
- }
86
- const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
87
- const credential = deps.store.load();
88
- const baseUrl = resolvedBaseUrl(config, credential);
89
- const client = makeClient(deps, baseUrl, null);
90
- try {
91
- const doc = await client.capabilities(flags.platform ?? 'ios');
92
- if (flags.json) {
93
- deps.io.out(JSON.stringify(doc, null, 2));
94
- return EXIT.ok;
95
- }
96
- deps.io.out(`${doc.platform} capability contract v${doc.schema_version} (payload limit ${doc.payload_limit_bytes} bytes)`);
97
- for (const field of doc.fields) {
98
- deps.io.out(` ${field.path}: ${field.status}${field.reason ? ` — ${field.reason}` : ''}`);
99
- }
100
- return EXIT.ok;
101
- }
102
- catch (err) {
103
- return reportError(deps, err);
104
- }
105
- }
106
- /** Same-account line for the device hop; prefers the real email when known. */
107
- export function sameAccountSignInLine(email) {
108
- return email
109
- ? `sign in with the same email as this account (${email})`
110
- : 'sign in with the same email as this account';
111
- }
112
- /**
113
- * What is actually left to do on the phone.
114
- *
115
- * Three sub-states, three remedies. "Install the app" is useless advice to
116
- * someone who installed it and then declined the permission prompt, and
117
- * offering install steps to a registered device says this terminal did not
118
- * read the state it just fetched.
119
- */
120
- export function deviceInstallRemedy(options) {
121
- const sameEmail = sameAccountSignInLine(options.email);
122
- if (options.devices.length === 0) {
123
- const destination = setupCompanionUrl(options.baseUrl, options.platform);
124
- const named = options.platform === undefined
125
- ? 'the Companion App'
126
- : `Notifai on ${companionPlatformLabel(options.platform)}`;
127
- return `open the steps for ${named} at ${destination}, install it, ${sameEmail}, and allow notifications`;
128
- }
129
- if (options.devices.some((d) => d.permission_status === 'denied')) {
130
- return "allow notifications for Notifai in the device's Settings";
131
- }
132
- return 'open Notifai on the device and allow its notification prompt';
133
- }
134
- export function deviceCanReceive(device) {
135
- const receiveIsFloored = device.support?.state === 'must_update' &&
136
- device.support.affected_operation === 'receive_notifications';
137
- return (!receiveIsFloored &&
138
- device.registration_healthy &&
139
- (device.permission_status === 'authorized' || device.permission_status === 'provisional'));
140
- }
141
- export function readyCompanionDevices(devices) {
142
- return devices.filter((device) => (device.platform === 'ios' || device.platform === 'android') && deviceCanReceive(device));
143
- }
144
- //# sourceMappingURL=commands-devices.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-devices.js","sourceRoot":"","sources":["../src/commands-devices.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import type { SkillScope } from './native-skills.js';
2
- import { type Readiness, type ReadinessRefresh, type ReadinessState } from './readiness.js';
3
- import { type CommandDeps } from './commands-core.js';
4
- /**
5
- * Read the whole setup once, in dependency order.
6
- *
7
- * Descent stops where a prerequisite is missing: without a credential there is
8
- * nothing to ask the server with, and without a reachable server a contract
9
- * mismatch is unknowable rather than absent. Those downstream states report
10
- * `unknown`, which is the honest answer and keeps a network outage from
11
- * looking like a broken install.
12
- */
13
- export declare function assessReadiness(deps: CommandDeps, options?: {
14
- skillScope?: SkillScope;
15
- previous?: Readiness;
16
- refresh?: readonly ReadinessRefresh[];
17
- json?: boolean;
18
- }): Promise<Readiness>;
19
- export declare function doctorCommand(deps: CommandDeps, flags: {
20
- json?: boolean;
21
- }, options?: {
22
- readiness?: Readiness;
23
- }): Promise<number>;
24
- /** One line telling the reader what to actually do about a state. */
25
- export declare function remedyLine(state: ReadinessState): string;