@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,503 +0,0 @@
1
- /** Validation and durable registration for the agent-facing ask command. */
2
- import { CAPABILITIES_V1, QUESTION_TEXT_MAX_LENGTH, REPLY_MAX_QUESTIONS, validateDraft, } from '@raidiant/notifai-protocol';
3
- import { EXIT, authedClient, log, makeClient } from './commands-core.js';
4
- import { resolveActiveHarness } from './commands-harness-context.js';
5
- import { CODEX_FRESH_SESSION_USER_ACTION, CODEX_HOOK_APPROVAL_USER_ACTION, CODEX_STALE_STOP_DEFINITION_PROBLEM, CODEX_STOP_DEFINITION_NOT_SINGULAR_PROBLEM, activeQuestionRouteProblems, } from './commands-hook-diagnostics.js';
6
- import { resolveDraftInvocation, uploadImage } from './commands-send-support.js';
7
- import { loadConfig } from './config.js';
8
- import { HERMES_QUESTION_ROUTING_UNAVAILABLE, isHookInstallableHarness } from './harnesses.js';
9
- import { QuestionRegistrationChanged, registerQuestion } from './hook-lifecycle.js';
10
- import { readSessionIncarnation, readSessionState } from './hook-session-state.js';
11
- import { currentCodexQuestionContext, nativeQuestionTitle } from './codex-question-bindings.js';
12
- import { hermesQuestionRouteReady } from './session-attendant-state.js';
13
- import { codexRoutingTrustProblems, findInstallations } from './install-hooks.js';
14
- import { inferInvocationContext } from './invocation-context.js';
15
- import { activeOpenclawGeneration } from './openclaw-session-access.js';
16
- import { openclawGatewayReady } from './openclaw-gateway-readiness.js';
17
- import { enableProject, projectBinding } from './project-enablement.js';
18
- import { spawnQuestionSettlement } from './question-settlement-process.js';
19
- import { CHOICE_USAGE, buildDraft, parseChoices, rejectAccidentalEscapedNewlines, slugify, validateMediaInputs, } from './send.js';
20
- /** One stable failure contract for every machine-readable ask refusal. */
21
- export function reportAskFailure(deps, flags, failure) {
22
- log(deps).error('cli.error', {
23
- kind: 'ask_admission',
24
- code: failure.code,
25
- check_id: failure.check_id,
26
- exit: failure.exit_code,
27
- });
28
- if (flags.json === true) {
29
- deps.io.out(JSON.stringify({ ok: false, registered: false, ...failure }, null, 2));
30
- }
31
- else {
32
- deps.io.err(failure.message);
33
- deps.io.err(`next: ${failure.remedy}`);
34
- }
35
- return failure.exit_code;
36
- }
37
- function askFailure(deps, flags, code, checkId, message, remedy, exitCode = EXIT.usage, details = {}) {
38
- return reportAskFailure(deps, flags, {
39
- code,
40
- check_id: checkId,
41
- exit_code: exitCode,
42
- remedy,
43
- message,
44
- ...details,
45
- });
46
- }
47
- /**
48
- * Turn ask input into questions plus authored presentation content. Everything is
49
- * validated at registration because a later hook failure is easy to miss.
50
- */
51
- export function buildQuestions(flags, question) {
52
- if (flags.form !== undefined) {
53
- if (question !== undefined || flags.choice?.length || flags.multi) {
54
- return { ok: false, error: '--form replaces the positional question, --choice, and --multi.' };
55
- }
56
- let parsed;
57
- try {
58
- parsed = JSON.parse(flags.form);
59
- }
60
- catch {
61
- return {
62
- ok: false,
63
- error: '--form must be JSON: {"summary": "...", "questions": [{"text", "choices"?, "multi"?}], "body"?}.',
64
- };
65
- }
66
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
67
- return { ok: false, error: `--form needs a "questions" array (1-${REPLY_MAX_QUESTIONS} entries).` };
68
- }
69
- const record = parsed;
70
- const unknownKeys = Object.keys(record).filter((key) => key !== 'summary' && key !== 'questions' && key !== 'body');
71
- if (unknownKeys.length > 0) {
72
- return {
73
- ok: false,
74
- error: `Unknown --form ${unknownKeys.length === 1 ? 'key' : 'keys'}: ${unknownKeys.join(', ')}.`,
75
- };
76
- }
77
- if (!Array.isArray(record['questions'])) {
78
- return { ok: false, error: `--form needs a "questions" array (1-${REPLY_MAX_QUESTIONS} entries).` };
79
- }
80
- if (typeof record['summary'] !== 'string' || record['summary'].trim() === '') {
81
- return { ok: false, error: '--form needs a non-empty one-line "summary" string.' };
82
- }
83
- const formQuestions = record['questions'];
84
- if (formQuestions.length < 1 || formQuestions.length > REPLY_MAX_QUESTIONS) {
85
- return {
86
- ok: false,
87
- error: `A form asks 1-${REPLY_MAX_QUESTIONS} questions; this one has ${formQuestions.length}.`,
88
- };
89
- }
90
- if (record['body'] !== undefined && typeof record['body'] !== 'string') {
91
- return { ok: false, error: '"body" must be a Markdown string.' };
92
- }
93
- if (flags.body !== undefined && record['body'] !== undefined) {
94
- return { ok: false, error: 'Pass the Markdown Body in either --body or the form "body" key, not both.' };
95
- }
96
- const questions = [];
97
- const usedIds = new Set();
98
- for (const [index, entry] of formQuestions.entries()) {
99
- if (typeof entry !== 'object' || entry === null || typeof entry.text !== 'string') {
100
- return { ok: false, error: `Question ${index + 1} needs a "text" string.` };
101
- }
102
- const spec = entry;
103
- const built = buildOneQuestion(spec.text, spec.choices, spec.multi === true, index, usedIds);
104
- if ('error' in built)
105
- return { ok: false, error: `Question ${index + 1}: ${built.error}` };
106
- questions.push(built.question);
107
- }
108
- const body = flags.body ?? record['body'];
109
- return {
110
- ok: true,
111
- questions,
112
- summary: record['summary'],
113
- ...(body !== undefined ? { body } : {}),
114
- };
115
- }
116
- if (question === undefined || question.trim() === '') {
117
- return { ok: false, error: 'The question cannot be empty.' };
118
- }
119
- const built = buildOneQuestion(question, flags.choice, flags.multi === true, 0, new Set());
120
- if ('error' in built)
121
- return { ok: false, error: built.error };
122
- return {
123
- ok: true,
124
- questions: [built.question],
125
- summary: built.question.text,
126
- ...(flags.body !== undefined ? { body: flags.body } : {}),
127
- };
128
- }
129
- function buildOneQuestion(text, choiceLabels, multi, index, usedIds) {
130
- const trimmed = text.trim();
131
- if (trimmed === '')
132
- return { error: 'the question text cannot be empty.' };
133
- if ([...trimmed].length > QUESTION_TEXT_MAX_LENGTH) {
134
- return {
135
- error: `a question must be readable where it is answered: keep it within ` +
136
- `${QUESTION_TEXT_MAX_LENGTH} characters and put the longer explanation in --body.`,
137
- };
138
- }
139
- const choices = parseChoices(choiceLabels);
140
- if (choices === 'invalid')
141
- return { error: CHOICE_USAGE };
142
- if (multi && choices === null) {
143
- return { error: '--multi needs answers to select between; add --choice.' };
144
- }
145
- let id = slugify(trimmed);
146
- if (id === '' || usedIds.has(id))
147
- id = `q${index + 1}`;
148
- usedIds.add(id);
149
- return {
150
- question: {
151
- id,
152
- text: trimmed,
153
- ...(choices !== null ? { choices } : {}),
154
- ...(multi ? { multi: true } : {}),
155
- },
156
- };
157
- }
158
- function buildAskDraft(config, built, flags, invocation, mediaIds) {
159
- const result = buildDraft(config, {
160
- title: built.questions[0].text,
161
- summary: built.summary,
162
- ...(built.body !== undefined ? { body: built.body } : {}),
163
- ...(flags.project !== undefined ? { project: flags.project } : {}),
164
- ...(mediaIds.length > 0 ? { image: mediaIds } : {}),
165
- ...(flags.imageAlt !== undefined ? { imageAlt: flags.imageAlt } : {}),
166
- reply: true,
167
- questions: built.questions,
168
- }, invocation);
169
- if (!result.ok)
170
- return result;
171
- const capabilities = CAPABILITIES_V1.describe(result.platform);
172
- if (capabilities === null)
173
- return { ok: false, error: 'No iOS capability contract is available.' };
174
- const validation = validateDraft(result.draft, capabilities);
175
- if (!validation.ok) {
176
- return {
177
- ok: false,
178
- error: validation.errors.map((issue) => `${issue.path}: ${issue.message}`).join('\n'),
179
- };
180
- }
181
- return { ok: true, draft: result.draft };
182
- }
183
- function recordRegisteredQuestion(deps, sessionId, built, draft, service, json = false) {
184
- const ordinary = () => persistRegisteredQuestion(deps, sessionId, built, draft, service, json);
185
- if (built.questions.some(question => question.multi === true))
186
- return ordinary();
187
- const local = currentCodexQuestionContext(readSessionState(sessionId, deps.env), sessionId, deps.env);
188
- if (local === null)
189
- return ordinary();
190
- const credential = deps.store.load();
191
- if (credential === null || credential.machineId !== service.machine_id || credential.baseUrl !== service.base_url)
192
- return ordinary();
193
- const persist = (nativeAdmission) => persistRegisteredQuestion(deps, sessionId, built, draft, service, json, nativeAdmission, local.owner_key);
194
- // Discovery is optional and bounded. Missing service support must not create
195
- // a hidden binding or block ordinary question registration. Do not cache it.
196
- const client = makeClient(deps, service.base_url, `Bearer nfm_${credential.machineId}.${credential.secret}`, { timeoutMs: 1500 });
197
- return client.compatibility().then(support => persist(Array.isArray(support?.server_capabilities) && support.server_capabilities.includes('harness_answers')
198
- ? { owner_key: local.owner_key, turn_id: local.snapshot.latest.id, service } : undefined), () => persist());
199
- }
200
- function persistRegisteredQuestion(deps, sessionId, built, draft, service, json = false, nativeAdmission, ownerKey) {
201
- let questionId;
202
- const credential = deps.store.load();
203
- if (credential === null || credential.machineId !== service.machine_id || credential.baseUrl !== service.base_url) {
204
- return askFailure(deps, { json }, 'auth_required', 'credential', 'The Approved Machine changed before question registration completed.', 'retry the same ask from the intended signed-in machine', EXIT.auth);
205
- }
206
- try {
207
- questionId = registerQuestion(sessionId, deps.env, {
208
- question: built.questions[0].text,
209
- summary: draft.presentation.summary,
210
- service_identity: service,
211
- questions: built.questions,
212
- ...(draft.presentation.body !== undefined ? { body: draft.presentation.body } : {}),
213
- ...(draft.project !== undefined ? { project: draft.project } : {}),
214
- ...(draft.source !== undefined ? { source: draft.source } : {}),
215
- ...(draft.presentation.media !== undefined ? { media: draft.presentation.media } : {}),
216
- }, (deps.now ?? Date.now)(), nativeAdmission, { ...(ownerKey === undefined ? {} : { owner_key: ownerKey }), machineStillMatches: () => {
217
- const current = deps.store.load();
218
- return current !== null && current.machineId === service.machine_id && current.baseUrl === service.base_url;
219
- } });
220
- }
221
- catch (err) {
222
- if (err instanceof QuestionRegistrationChanged) {
223
- return askFailure(deps, { json }, err.reason === 'credential' ? 'auth_required' : 'session_changed', err.reason === 'credential' ? 'credential' : 'question_registration', err.message, 'retry the same ask from the current Agent Session and intended signed-in machine', err.reason === 'credential' ? EXIT.auth : EXIT.failed);
224
- }
225
- return askFailure(deps, { json }, 'registration_failed', 'question_registration', `Could not register the question: ${err instanceof Error ? err.message : String(err)}`, 'retire an older pending question if the limit was reached, then retry the same ask', EXIT.failed);
226
- }
227
- log(deps).info('ask.registered', {
228
- ok: true,
229
- session: sessionId,
230
- question_id: questionId,
231
- questions: built.questions.length,
232
- text_chars: built.questions[0].text.length,
233
- choices: built.questions[0].choices?.length ?? 0,
234
- media: draft.presentation.media?.length ?? 0,
235
- });
236
- const harness = readSessionState(sessionId, deps.env).harness;
237
- let submission = 'starting';
238
- try {
239
- if (harness === undefined)
240
- throw new Error('The admitted Agent Session lost its harness identity');
241
- (deps.spawnQuestionSettlement ?? spawnQuestionSettlement)({
242
- envelope: { session_id: sessionId, cwd: deps.cwd }, harness, purpose: 'submission',
243
- });
244
- }
245
- catch (err) {
246
- submission = 'launch-failed';
247
- log(deps).error('cli.error', { kind: 'question_submission_launch', session: sessionId, question_id: questionId, outcome: submission,
248
- message: err instanceof Error ? err.message : String(err) });
249
- }
250
- const nextStep = submission === 'starting'
251
- ? 'Submission starts without ending this turn. Continue independent work while Question Routing owns the answer return path.'
252
- : 'Background startup failed. Keep this registration; ordinary lifecycle hooks can recover it. Inspect status before relying on submission.';
253
- const native = readSessionState(sessionId, deps.env).codex_question_bindings?.find(binding => binding.question_id === questionId && binding.owner_key === readSessionIncarnation(sessionId, deps.env)?.key);
254
- const nativeCommand = `notifai acknowledge ${questionId} --operation-id native-1 --native-answers '<actual answers JSON>' --text '<concrete work this answer sets in motion>' --json`;
255
- const nativeInstruction = `If you use request_user_input_async, copy the native titles and options exactly in this turn. For an answer you actually read from that native form, your first dependent command must be: ${nativeCommand}. Use the registered question/choice IDs. Use a distinct operation ID for each distinct submission; retry the same ID and immutable body after failure, omitting answers/text only after the command confirms the operation was saved. Do not report an app answer again as a native answer. Keep the app watcher; do not close the question after native acknowledgement. If you did not emit the exact marked native form, ordinary conversation answers still retire with notifai close ${questionId}. Native linking is optional and capability-dependent; never promise form closure.`;
256
- // The block below is the densest guidance this CLI prints, and until now it
257
- // was prose only: an agent could not read back the choice ids it must branch
258
- // on without asking the server for them. The JSON form carries the same
259
- // obligation as data.
260
- if (json) {
261
- deps.io.out(JSON.stringify({
262
- registered: true,
263
- question_id: questionId,
264
- state: 'local',
265
- submitted: false,
266
- submission,
267
- request_id: null,
268
- provider_acceptance: 'not_available',
269
- questions: built.questions.map((entry) => ({
270
- id: entry.id,
271
- text: entry.text,
272
- ...(entry.choices === undefined ? {} : { choices: entry.choices }),
273
- ...(entry.multi === true ? { multi: true } : {}),
274
- })),
275
- ...(native === undefined ? {} : { native_question: {
276
- tool: 'request_user_input_async',
277
- questions: native.questions.map(binding => ({ question_id: binding.question.id, title: nativeQuestionTitle(binding),
278
- ...(binding.question.choices === undefined ? {} : { options: binding.question.choices.map(choice => choice.label) }) })),
279
- instructions: nativeInstruction,
280
- } }),
281
- status: `notifai status ${questionId}`,
282
- close: `notifai close ${questionId}`,
283
- next: {
284
- end_turn: false,
285
- in_this_turn: `Ask the question in the conversation and explain what each answer will change. ${nextStep}`,
286
- route_neutral: 'Never say where the answer must arrive; it returns by whatever route the harness supports.',
287
- on_answer: 'Acknowledge it, then resume the committed work without asking the user to confirm again.',
288
- answered_outside_notifai: native === undefined
289
- ? `If they answer in the conversation instead, run \`notifai close ${questionId}\` to retire this question.`
290
- : nativeInstruction,
291
- },
292
- }, null, 2));
293
- return EXIT.ok;
294
- }
295
- for (const [index, entry] of built.questions.entries()) {
296
- const prefix = built.questions.length > 1 ? `${index + 1}. ` : '';
297
- if (entry.choices !== undefined) {
298
- const kind = entry.multi === true ? 'answers offered (several may be chosen)' : 'answers offered';
299
- deps.io.out(`${prefix}${entry.text} — ${kind}: ${entry.choices.map((choice) => choice.label).join(' / ')}`);
300
- }
301
- else if (built.questions.length > 1) {
302
- deps.io.out(`${prefix}${entry.text} — free text`);
303
- }
304
- }
305
- deps.io.out(built.questions.length > 1
306
- ? `${built.questions.length} questions registered as one form (${questionId}); background submission is ${submission}. Provider Acceptance is not confirmed yet.`
307
- : `Question registered (${questionId}); background submission is ${submission}. Provider Acceptance is not confirmed yet.`);
308
- deps.io.out(`${nextStep} Inspect \`notifai status ${questionId}\` for submission evidence; never register a replacement to check this question.`);
309
- deps.io.out('Ask in the conversation and explain what each answer will change:');
310
- for (const [index, entry] of built.questions.entries()) {
311
- const questionPrefix = built.questions.length > 1 ? `Question ${index + 1}, ` : '';
312
- if (entry.choices !== undefined) {
313
- for (const choice of entry.choices) {
314
- deps.io.out(`- ${questionPrefix}If the answer is ${JSON.stringify(choice.label)}: state the concrete work you will resume.`);
315
- }
316
- deps.io.out(`- ${questionPrefix}For an unexpected typed answer: state how it will determine the concrete work you resume.`);
317
- }
318
- else {
319
- deps.io.out(`- ${questionPrefix}For the free-text answer: state how its content will determine the concrete work you resume.`);
320
- }
321
- }
322
- deps.io.out('When the answer arrives, resume the matching work without asking the user to confirm again. Frame this as work you will resume, not as approval you receive.');
323
- deps.io.out('A Notifai answer cannot answer a harness permission prompt or interactive picker; leave those to the harness and user.');
324
- if (native !== undefined) {
325
- deps.io.out(nativeInstruction);
326
- deps.io.out(JSON.stringify({ native_questions: native.questions.map(binding => ({ title: nativeQuestionTitle(binding),
327
- question_id: binding.question.id, ...(binding.question.choices === undefined ? {} : { options: binding.question.choices.map(choice => choice.label) }),
328
- ...(binding.question.choices === undefined ? {} : { choice_ids: binding.question.choices.map(choice => choice.id) }),
329
- })) }));
330
- }
331
- else
332
- deps.io.out(`If they answer in this conversation instead, retire it with \`notifai close ${questionId}\`.`);
333
- return EXIT.ok;
334
- }
335
- async function uploadAskMedia(deps, config, sessionId, built, flags, invocation, service) {
336
- const authed = authedClient(deps, config);
337
- if (!authed) {
338
- return askFailure(deps, flags, 'auth_required', 'credential', 'Question routing is not paired on this machine.', 'run `notifai init --json`', EXIT.auth);
339
- }
340
- if (authed.service.base_url !== service.base_url || authed.service.machine_id !== service.machine_id) {
341
- return askFailure(deps, flags, 'machine_changed', 'credential', 'The Approved Machine changed before the question media upload started.', 'retry the same ask from the intended signed-in machine', EXIT.auth);
342
- }
343
- const mediaIds = [];
344
- for (const image of flags.image ?? []) {
345
- if (image.startsWith('med_')) {
346
- mediaIds.push(image);
347
- continue;
348
- }
349
- const uploaded = await uploadImage(deps, authed.client, image, config.media_origins.value);
350
- if (!uploaded.ok) {
351
- if (uploaded.error !== null)
352
- deps.io.err(uploaded.error);
353
- return askFailure(deps, flags, 'media_upload_failed', 'media', uploaded.error ?? 'The image upload failed.', 'fix the reported image or network problem, then retry the same ask', uploaded.exit);
354
- }
355
- mediaIds.push(uploaded.mediaId);
356
- }
357
- const ready = buildAskDraft(config, built, flags, invocation, mediaIds);
358
- if (!ready.ok) {
359
- return askFailure(deps, flags, 'invalid_draft', 'draft', ready.error, 'fix the reported field and retry');
360
- }
361
- return recordRegisteredQuestion(deps, sessionId, built, ready.draft, service, flags.json === true);
362
- }
363
- /**
364
- * Registers and starts submission immediately, without waiting for turn end.
365
- * The exact harness keeps ownership of answer delivery while work continues.
366
- */
367
- export function askCommand(deps, question, flags) {
368
- // Validate before route discovery. A malformed question belongs to the
369
- // caller and should not be hidden behind whichever harness setup issue
370
- // happens to exist on this machine.
371
- const escapedBody = rejectAccidentalEscapedNewlines(flags.body, flags.literalBackslashN);
372
- if (escapedBody !== null) {
373
- return askFailure(deps, flags, 'invalid_input', 'body', escapedBody, 'fix the body and retry');
374
- }
375
- const built = buildQuestions(flags, question);
376
- if (!built.ok) {
377
- return askFailure(deps, flags, 'invalid_input', 'questions', built.error, 'fix the question input and retry');
378
- }
379
- const mediaInputError = validateMediaInputs(flags.image, flags.imageAlt);
380
- if (mediaInputError !== null) {
381
- return askFailure(deps, flags, 'invalid_input', 'media', mediaInputError, 'fix the media flags and retry');
382
- }
383
- let explicitUseConfig;
384
- try {
385
- explicitUseConfig = loadConfig({ cwd: deps.cwd, env: deps.env });
386
- }
387
- catch (err) {
388
- return askFailure(deps, flags, 'config_invalid', 'configuration', `Question routing configuration is invalid: ${String(err)}`, 'fix the reported Notifai configuration and retry');
389
- }
390
- const explicitProject = flags.project ?? explicitUseConfig.project.value ?? inferInvocationContext(deps.cwd).project;
391
- if (explicitProject !== null) {
392
- const binding = projectBinding(deps.cwd, deps.env, explicitProject);
393
- // A disabled OpenClaw Project must remain disabled until the User or agent
394
- // explicitly enables it; the exact-generation route cannot infer consent.
395
- if (binding !== null && deps.env['NOTIFAI_ACTIVE_HARNESS'] !== 'openclaw') {
396
- try {
397
- enableProject(binding);
398
- }
399
- catch (err) {
400
- return askFailure(deps, flags, 'project_enablement_failed', 'project_enablement', `Project Enablement could not be saved: ${String(err)}`, 'check filesystem permissions or sandbox access for the Notifai state directory, then retry the same ask', EXIT.failed);
401
- }
402
- }
403
- }
404
- const credential = deps.store.load();
405
- if (credential === null) {
406
- return askFailure(deps, flags, 'auth_required', 'credential', 'Question routing is not paired on this machine.', 'run `notifai init --json`', EXIT.auth);
407
- }
408
- // An agent calling this gets no hook payload. Harness-native environment
409
- // markers identify the active owner, while UserPromptSubmit adds the hook's
410
- // canonical id to the directory's concurrent-session index.
411
- const now = (deps.now ?? Date.now)();
412
- const { active, contested } = resolveActiveHarness(deps.env, deps.cwd, now);
413
- let sessionId;
414
- if (active !== null) {
415
- if (contested.length > 1) {
416
- return askFailure(deps, flags, 'session_identity_ambiguous', 'exact_session', `Several harness sessions could own this shell (${contested.map((candidate) => candidate.label).join(', ')}).`, 'use the documented foreground `notifai send --reply` flow with --reply-timeout equal to --reply-window, or run ask from an unambiguous harness session');
417
- }
418
- if ((active.harness === 'hermes' && active.integrationInstance === undefined) ||
419
- !isHookInstallableHarness(active.harness)) {
420
- const capability = HERMES_QUESTION_ROUTING_UNAVAILABLE;
421
- return askFailure(deps, flags, 'question_routing_unavailable', 'hook_contract', `${active.label}: ${capability.deliveryContract}`, 'use a blocking `notifai send --reply` question');
422
- }
423
- const installations = findInstallations(deps.env, deps.hookAdapterHome, deps.hookPlatform);
424
- const activeInstalled = installations.some((installation) => installation.harness === active.harness);
425
- if (!activeInstalled) {
426
- return askFailure(deps, flags, 'hooks_not_installed', 'hook_installation', `Notifai ${active.label} hooks are not installed in this active harness home.`, `run \`notifai init --json\` from this ${active.label} session`);
427
- }
428
- if (active.sessionId === undefined) {
429
- return askFailure(deps, flags, 'session_identity_missing', 'exact_session', `The active ${active.label} shell does not expose an exact session id.`, 'use a blocking `notifai send --reply` question');
430
- }
431
- const matchingInstallations = installations.filter((installation) => installation.harness === active.harness);
432
- const trustProblems = active.harness === 'codex'
433
- ? codexRoutingTrustProblems(matchingInstallations, deps.env)
434
- : [];
435
- if (trustProblems.length > 0) {
436
- return askFailure(deps, flags, 'codex_hook_approval_required', 'hook_trust', `Question routing is not ready: ${trustProblems.join('; ')}. This question was not registered. Do not replace it with a short \`notifai send --reply\` wait: that command cannot resume this Agent Session after its reply timeout.`, 'open `/hooks` in Codex and approve or enable the Notifai handlers', EXIT.usage, { user_action: CODEX_HOOK_APPROVAL_USER_ACTION });
437
- }
438
- const routeProblems = activeQuestionRouteProblems(deps, active, installations);
439
- if (routeProblems.includes(CODEX_STOP_DEFINITION_NOT_SINGULAR_PROBLEM)) {
440
- return askFailure(deps, flags, 'codex_stop_definition_invalid', 'hook_installation', `Question routing is not ready: ${CODEX_STOP_DEFINITION_NOT_SINGULAR_PROBLEM}. This question was not registered.`, 'run `notifai hooks install --harness codex`, then re-run `notifai doctor`');
441
- }
442
- if (routeProblems.includes(CODEX_STALE_STOP_DEFINITION_PROBLEM)) {
443
- return askFailure(deps, flags, 'codex_fresh_session_required', 'stop_hook', `Question routing is not ready: ${CODEX_STALE_STOP_DEFINITION_PROBLEM}. This question was not registered.`, 'start one fresh Codex session, send one prompt in it, then retry `notifai ask --json`', EXIT.usage, { user_action: CODEX_FRESH_SESSION_USER_ACTION });
444
- }
445
- if (routeProblems.length > 0) {
446
- return askFailure(deps, flags, 'question_routing_unavailable', 'hook_contract', `Question routing is not ready: ${routeProblems.join('; ')}`, 'run `notifai init --json` and follow its question-routing remedy');
447
- }
448
- const state = readSessionState(active.sessionId, deps.env);
449
- if (active.harness === 'openclaw' &&
450
- activeOpenclawGeneration(active.sessionId, deps.env, deps.cwd) === null) {
451
- return askFailure(deps, flags, 'openclaw_generation_stale', 'exact_session', 'This OpenClaw tool subprocess cannot prove the current enabled Gateway session generation.', 'enable the Project if needed, then run the question from a current OpenClaw turn after the Notifai plugin has activated');
452
- }
453
- if (active.harness === 'openclaw' && !openclawGatewayReady(deps.env)) {
454
- return askFailure(deps, flags, 'openclaw_gateway_unready', 'hook_contract', 'The local OpenClaw Gateway service has not proved a matching CLI and live process.', 'restart the Gateway with the installed Notifai plugin, then run `notifai doctor`');
455
- }
456
- if (state.harness !== active.harness ||
457
- (active.harness !== 'hermes' && state.last_prompt_at === undefined)) {
458
- return askFailure(deps, flags, 'session_not_activated', 'user_prompt_submit', `This exact ${active.label} session has not fired UserPromptSubmit.`, `send one prompt in this ${active.label} session, then retry \`notifai ask --json\``);
459
- }
460
- if (active.harness === 'hermes' &&
461
- !hermesQuestionRouteReady(active.sessionId, deps.env, now)) {
462
- return askFailure(deps, flags, 'question_routing_unavailable', 'plugin_writer', 'This exact Hermes classic CLI session has no current attending plugin writer.', 'start a fresh local classic CLI session with the Notifai plugin enabled, then retry');
463
- }
464
- sessionId = active.sessionId;
465
- }
466
- else {
467
- return askFailure(deps, flags, 'session_identity_missing', 'exact_session', 'Could not prove which live Agent Session owns this command.', 'run it from a supported harness with exact Agent Session identity, or use a blocking `notifai send --reply` question');
468
- }
469
- if (!sessionId) {
470
- return askFailure(deps, flags, 'session_identity_missing', 'exact_session', 'No exact active Agent Session is available.', 'use a blocking `notifai send --reply` question');
471
- }
472
- let routingConfig;
473
- try {
474
- routingConfig = loadConfig({ cwd: deps.cwd, env: deps.env, sessionId });
475
- }
476
- catch (err) {
477
- return askFailure(deps, flags, 'config_invalid', 'configuration', `Question routing configuration is invalid: ${String(err)}`, 'fix the reported Notifai configuration and retry');
478
- }
479
- if (!routingConfig.ask_notifications.value) {
480
- return askFailure(deps, flags, 'question_routing_disabled', 'ask_notifications', 'Question routing is disabled by ask_notifications=false.', 'enable question routing or use a blocking `notifai send --reply` question');
481
- }
482
- const source = resolveDraftInvocation(deps, flags, active);
483
- if (!source.ok) {
484
- return askFailure(deps, flags, 'invalid_source', 'source_context', source.error, /session-name store|session's name/u.test(source.error)
485
- ? 'inspect the named session-name store, isolate or remove the invalid record, and retry'
486
- : 'remove the conflicting source override and retry');
487
- }
488
- if (source.invocation.source?.session_id !== sessionId) {
489
- return askFailure(deps, flags, 'session_identity_mismatch', 'exact_session', `The inferred session does not match the exact active ${active.label} session.`, 'remove NOTIFAI_SESSION_ID and retry from the exact active session');
490
- }
491
- // Placeholders let every body, source, project, media, and payload limit fail
492
- // before an upload starts. The real ids replace them only after this passes.
493
- const placeholders = (flags.image ?? []).map((_, index) => `med_pending_${index + 1}`);
494
- const preflight = buildAskDraft(routingConfig, built, flags, source.invocation, placeholders);
495
- if (!preflight.ok) {
496
- return askFailure(deps, flags, 'invalid_draft', 'draft', preflight.error, 'fix the reported field and retry');
497
- }
498
- if ((flags.image?.length ?? 0) > 0) {
499
- return uploadAskMedia(deps, routingConfig, sessionId, built, flags, source.invocation, { base_url: credential.baseUrl, machine_id: credential.machineId });
500
- }
501
- return recordRegisteredQuestion(deps, sessionId, built, preflight.draft, { base_url: credential.baseUrl, machine_id: credential.machineId }, flags.json === true);
502
- }
503
- //# sourceMappingURL=commands-ask.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-ask.js","sourceRoot":"","sources":["../src/commands-ask.ts"],"names":[],"mappings":"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"}
@@ -1,76 +0,0 @@
1
- import { type CommandDeps } from './commands-core.js';
2
- import { type PendingPairing } from './pending-pairing.js';
3
- import type { ReadinessState } from './readiness.js';
4
- /**
5
- * Keep the one-time confirmation secret out of the HTTP request that opens
6
- * the dashboard. URL fragments are browser-local and are not sent by GET,
7
- * prefetchers, referrers, or link scanners.
8
- */
9
- export declare function pairingApprovalUrl(approveUrl: string, confirmationSecret: string): string;
10
- /**
11
- * Why a sign-in stopped, in the shape the close line renders.
12
- *
13
- * Without it, `init` fell back to the state it had before the attempt — "this
14
- * machine is not paired … run `notifai init`" — so the last thing a User read
15
- * contradicted the correct line three lines above it and pointed back at the
16
- * command that had just failed, for a reason it never mentioned.
17
- *
18
- * Passing one also transfers the errand: whoever takes the blocker prints the
19
- * close, so this command stops after naming what stopped. A sign-in run on its
20
- * own has no such caller and states the errand itself.
21
- */
22
- export type LoginBlockedSink = (blocker: ReadinessState) => void;
23
- /** Why a machine approval is not (yet) a credential, as an agent reads it. */
24
- export type PairingOutcome = 'pending' | 'denied' | 'expired' | 'not_started';
25
- /**
26
- * The state `init` reports when approval has been started and not finished.
27
- *
28
- * It is a `credential` gap whose remedy names the exact page and code, so an
29
- * agent can relay both without inventing wording, and whose command is the
30
- * same setup command — the next run resumes this very handshake rather than
31
- * starting a second one.
32
- */
33
- export declare function pendingApprovalBlocker(pairing: PendingPairing, env?: NodeJS.ProcessEnv): ReadinessState;
34
- /**
35
- * The state `init` reports when an approval ended without a credential. Each
36
- * outcome is named, because "not paired" alone sends an agent straight back
37
- * into a new approval — and a User who just said no gets asked again.
38
- */
39
- export declare function pairingOutcomeBlocker(outcome: Exclude<PairingOutcome, 'pending'>, detail: string): ReadinessState;
40
- /**
41
- * Pair this machine with the User's Account.
42
- *
43
- * The handshake is one server-side pairing: this machine keeps the credential
44
- * and the confirmation secret, the User approves the code in their browser,
45
- * and polling collects the machine id. It is persisted between runs (see
46
- * `pending-pairing.ts`), which is what lets two very different callers share
47
- * it honestly:
48
- *
49
- * - A human at a terminal watches a spinner until the pairing resolves or
50
- * expires, as before.
51
- * - An agent, or any run with nobody at the terminal, never waits on a
52
- * person. It prints the page and the code, polls once, and returns — its
53
- * caller relays the errand, and the next run picks the same pairing up
54
- * where it was left. A shell tool that times out no longer strands an
55
- * approval the User already gave.
56
- *
57
- * A resumed handshake is always asked about before it is replaced: the
58
- * service answers `approved` for an approved pairing even after its expiry,
59
- * so an approval given late is collected rather than duplicated. Only the
60
- * service's `expired`, `denied`, or unknown answer discards one.
61
- */
62
- export declare function loginCommand(deps: CommandDeps, flags: {
63
- name?: string;
64
- baseUrl?: string;
65
- open?: boolean;
66
- approval?: string;
67
- approvalEmail?: string;
68
- }, onBlocked?: LoginBlockedSink): Promise<number>;
69
- export declare function logoutCommand(deps: CommandDeps): number;
70
- export declare function authStatusCommand(deps: CommandDeps, flags: {
71
- json?: boolean;
72
- }): number;
73
- /** Show the server's account access decision without attempting a product mutation. */
74
- export declare function accessStatusCommand(deps: CommandDeps, flags: {
75
- json?: boolean;
76
- }): Promise<number>;