@raidiant/notifai 11.7.1-beta.2 → 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 +56 -4
  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,41 +0,0 @@
1
- import { loadLoggedConfig, EXIT } from './commands-core.js';
2
- import { disableProject, enableProject, projectBinding, projectEnabled, } from './project-enablement.js';
3
- function bindingFor(deps) {
4
- const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
5
- return projectBinding(deps.cwd, deps.env, config.project.value);
6
- }
7
- export function projectEnableCommand(deps) {
8
- const binding = bindingFor(deps);
9
- if (binding === null) {
10
- deps.io.err('No Project can be inferred here. Run inside a Project or configure an explicit Project id.');
11
- return EXIT.usage;
12
- }
13
- enableProject(binding);
14
- deps.io.out(`Notifai lifecycle behavior is enabled for Project "${binding.project}".`);
15
- return EXIT.ok;
16
- }
17
- export function projectDisableCommand(deps) {
18
- const binding = bindingFor(deps);
19
- if (binding === null) {
20
- deps.io.err('No Project can be inferred here. Run inside a Project or configure an explicit Project id.');
21
- return EXIT.usage;
22
- }
23
- disableProject(binding);
24
- deps.io.out(`Notifai lifecycle behavior is disabled for Project "${binding.project}".`);
25
- return EXIT.ok;
26
- }
27
- export function projectStatusCommand(deps, json = false) {
28
- const binding = bindingFor(deps);
29
- const enabled = projectEnabled(binding);
30
- if (json) {
31
- deps.io.out(JSON.stringify({ project: binding?.project ?? null, enabled }));
32
- }
33
- else if (binding === null) {
34
- deps.io.out('No Project can be inferred here; lifecycle behavior is disabled.');
35
- }
36
- else {
37
- deps.io.out(`Project "${binding.project}": lifecycle behavior ${enabled ? 'enabled' : 'disabled'}.`);
38
- }
39
- return EXIT.ok;
40
- }
41
- //# sourceMappingURL=commands-project.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-project.js","sourceRoot":"","sources":["../src/commands-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAoB,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,yBAAyB,CAAA;AAEhC,SAAS,UAAU,CAAC,IAAiB;IACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACvE,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAiB;IACpD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAA;QACzG,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,aAAa,CAAC,OAAO,CAAC,CAAA;IACtB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,sDAAsD,OAAO,CAAC,OAAO,IAAI,CAAC,CAAA;IACtF,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAiB;IACrD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAA;QACzG,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,uDAAuD,OAAO,CAAC,OAAO,IAAI,CAAC,CAAA;IACvF,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAiB,EAAE,IAAI,GAAG,KAAK;IAClE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IAC7E,CAAC;SAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAA;IACjF,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,OAAO,yBAAyB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAA;IACtG,CAAC;IACD,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC"}
@@ -1,3 +0,0 @@
1
- import { type CommandDeps } from './commands-core.js';
2
- export declare function receiveSessionInputs(deps: CommandDeps, sessionId: string, write: (text: string) => void): Promise<boolean>;
3
- export declare function receiveCommand(deps: CommandDeps): Promise<number>;
@@ -1,59 +0,0 @@
1
- /** Foreground input consumption, shared by prompt hooks and an explicit wake. */
2
- import { resolveCommandSession } from './command-session.js';
3
- import { EXIT, makeClient, log } from './commands-core.js';
4
- import { readSessionIncarnation, sessionHasEnded } from './hook-session-state.js';
5
- import { currentProcessIdentity, processIdentityLiveness } from './process-identity.js';
6
- import { readAttendantLease } from './session-attendant-state.js';
7
- import { drainSessionInputs, hasSessionInputs, observeSessionInputWake, sessionInputWake } from './session-inputs.js';
8
- export async function receiveSessionInputs(deps, sessionId, write) {
9
- const lease = readAttendantLease(sessionId, deps.env);
10
- const incarnation = readSessionIncarnation(sessionId, deps.env);
11
- const owner = incarnation?.harness_process;
12
- if (!hasSessionInputs(sessionId, deps.env, lease))
13
- return false;
14
- const mayWrite = () => {
15
- const current = readAttendantLease(sessionId, deps.env);
16
- if (sessionHasEnded(sessionId, deps.env))
17
- return false;
18
- if (lease === null)
19
- return current === null;
20
- return incarnation?.incarnation === lease.incarnation && owner !== undefined && current?.incarnation === lease.incarnation &&
21
- current.generation === lease.generation && readSessionIncarnation(sessionId, deps.env)?.incarnation === lease.incarnation &&
22
- processIdentityLiveness(owner) === 'alive';
23
- };
24
- if (!mayWrite())
25
- return false;
26
- const credential = deps.store.load();
27
- const writer = currentProcessIdentity();
28
- if (credential === null || writer === null)
29
- return false;
30
- const now = deps.now ?? Date.now;
31
- const deadlineAt = now() + 2_000;
32
- const client = makeClient(deps, credential.baseUrl, `Bearer nfm_${credential.machineId}.${credential.secret}`, {
33
- timeoutMs: 750, deadlineAt, now,
34
- });
35
- return drainSessionInputs({
36
- lease, mayWrite: () => now() < deadlineAt && mayWrite(), write,
37
- sequencer: { sessionId, env: deps.env, client, writer, log: log(deps),
38
- wall: now, monotonic: () => performance.now(), recoveryDeadline: performance.now() + 500,
39
- sleep: async () => undefined },
40
- });
41
- }
42
- export async function receiveCommand(deps) {
43
- const current = resolveCommandSession(deps);
44
- if (current?.source !== 'exact-harness') {
45
- deps.io.err('Exact Agent Session identity could not be resolved; no input was read.');
46
- return EXIT.usage;
47
- }
48
- log(deps).bind({ session: current.sessionId });
49
- observeSessionInputWake(current.sessionId, deps.env, sessionInputWake());
50
- const received = await receiveSessionInputs(deps, current.sessionId, (text) => deps.io.out(text));
51
- if (!received) {
52
- const pending = hasSessionInputs(current.sessionId, deps.env, readAttendantLease(current.sessionId, deps.env));
53
- deps.io.out(pending
54
- ? 'User input is pending but could not be handed over yet. It remains queued. Inspect notifai logs for the claim or delivery failure; do not treat this as an empty inbox or acknowledge unseen input.'
55
- : 'No user input is pending in the local inbox for this session. Continue your work.');
56
- }
57
- return EXIT.ok;
58
- }
59
- //# sourceMappingURL=commands-receive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-receive.js","sourceRoot":"","sources":["../src/commands-receive.ts"],"names":[],"mappings":"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"}
@@ -1,59 +0,0 @@
1
- import { type ListRepliesResponse } from '@raidiant/notifai-protocol';
2
- import { type ApiClient } from './client.js';
3
- import { type DraftInvocation, type SendFlags } from './send.js';
4
- import { type CommandDeps } from './commands-core.js';
5
- import type { ActiveHarnessSession } from './commands-harness-context.js';
6
- export declare function resolveDraftInvocation(deps: CommandDeps, flags: Pick<SendFlags, 'sessionId' | 'sessionLabel'>, active: ActiveHarnessSession | null): {
7
- ok: true;
8
- invocation: DraftInvocation;
9
- } | {
10
- ok: false;
11
- error: string;
12
- };
13
- interface ReplyWaitOptions {
14
- timeoutSeconds: number;
15
- afterSeq: number;
16
- now?: (() => number) | undefined;
17
- sleep?: ((milliseconds: number) => Promise<void>) | undefined;
18
- }
19
- interface ReplyWaitResult {
20
- response: ListRepliesResponse;
21
- timedOut: boolean;
22
- /**
23
- * The wait ended while polls were failing, so silence is unproven: the user
24
- * may well have answered and we could not see it.
25
- */
26
- degraded: boolean;
27
- }
28
- /** Loop over server-capped long polls until a reply arrives or the caller's deadline passes. */
29
- export declare function waitForReply(client: ApiClient, requestId: string, options: ReplyWaitOptions): Promise<ReplyWaitResult>;
30
- export declare function acknowledgementCommand(requestId: string, textRequired: boolean, acknowledgement: ListRepliesResponse['agent_acknowledgement'], hasReply?: boolean): string | null;
31
- export declare function printAcknowledgementStatus(deps: CommandDeps, response: ListRepliesResponse): void;
32
- type UploadResult = {
33
- ok: true;
34
- mediaId: string;
35
- }
36
- /** `error: null` means `reportError` already said it; do not print it twice. */
37
- | {
38
- ok: false;
39
- error: string | null;
40
- exit: number;
41
- };
42
- /**
43
- * Read a remote image without buffering more than the server will accept.
44
- *
45
- * Content-Length is an early refusal, not trust: a lying header still hits
46
- * the byte cap while the body is read. Supported schemes stay http and https.
47
- */
48
- export declare function readCappedBytes(response: Response, maxBytes: number): Promise<Uint8Array | 'too-large'>;
49
- /**
50
- * `--image` accepts a media id, a local file path, or an http(s) URL.
51
- *
52
- * A remote URL is fetched under the media URL policy (`url-policy.ts`):
53
- * public HTTPS by default, every redirect hop re-validated, and non-public
54
- * destinations only through the User's `media_origins` — never a
55
- * repository's. `--image` values routinely arrive from an agent that read
56
- * them in a working tree, so the URL is hostile input until proven otherwise.
57
- */
58
- export declare function uploadImage(deps: CommandDeps, client: ApiClient, source: string, allowOrigins?: readonly string[]): Promise<UploadResult>;
59
- export {};
@@ -1,258 +0,0 @@
1
- import { NOTIFICATION_IMAGE_MAX_BYTES } from '@raidiant/notifai-protocol';
2
- import { sha256Hex } from '@raidiant/notifai-protocol/node';
3
- import { existsSync, readFileSync } from 'node:fs';
4
- import path from 'node:path';
5
- import { isRetryableReplyPollError } from './client.js';
6
- import { fetchMediaUrl } from './url-policy.js';
7
- import { buildSourceContext, inferInvocationContext } from './invocation-context.js';
8
- import { readHarnessSessionTitle } from './harness-session-title.js';
9
- import {} from './send.js';
10
- import { EXIT, reportError } from './commands-core.js';
11
- function managedSessionTitle(deps, active) {
12
- try {
13
- return readHarnessSessionTitle(deps.env, active, {
14
- ...(deps.orcaSessionTitle === undefined ? {} : { orca: deps.orcaSessionTitle }),
15
- ...(deps.codexSessionTitle === undefined ? {} : { codex: deps.codexSessionTitle }),
16
- });
17
- }
18
- catch {
19
- return undefined;
20
- }
21
- }
22
- export function resolveDraftInvocation(deps, flags, active) {
23
- const inferred = inferInvocationContext(deps.cwd);
24
- const sessionTitle = managedSessionTitle(deps, active);
25
- const source = buildSourceContext({
26
- env: deps.env,
27
- invocation: inferred,
28
- ...(flags.sessionId !== undefined ? { sessionId: flags.sessionId } : {}),
29
- ...(flags.sessionLabel !== undefined ? { sessionLabel: flags.sessionLabel } : {}),
30
- ...(active === null
31
- ? {}
32
- : {
33
- activeHarness: {
34
- harness: active.harness,
35
- ...(active.sessionId === undefined ? {} : { sessionId: active.sessionId }),
36
- ...(sessionTitle === undefined ? {} : { sessionLabel: sessionTitle }),
37
- ...(active.sessionLabelPending === true ? { sessionLabelPending: true } : {}),
38
- },
39
- }),
40
- now: (deps.now ?? Date.now)(),
41
- });
42
- if (!source.ok)
43
- return source;
44
- if (source.generatedSessionLabel !== undefined) {
45
- deps.io.err(`Heads up (source.session_label): No semantic Agent Session title was available; using generated fallback "${source.generatedSessionLabel}". Pass --session-label with a concise task name when one is available.`);
46
- }
47
- if (source.unchangedSessionLabel !== undefined) {
48
- deps.io.err(`Heads up (source.session_label): The supplied label did not rename this Agent Session; its local name remains ${JSON.stringify(source.unchangedSessionLabel)}. If the job changed completely enough that this name would mislead, run \`notifai session rename "New job"\` inside the exact active Agent Session. Keep the current name for milestones, progress, or same-job refinements.`);
49
- }
50
- return {
51
- ok: true,
52
- invocation: {
53
- inferredProject: inferred.project,
54
- ...(source.source === undefined ? {} : { source: source.source }),
55
- },
56
- };
57
- }
58
- /** Loop over server-capped long polls until a reply arrives or the caller's deadline passes. */
59
- export async function waitForReply(client, requestId, options) {
60
- const now = options.now ?? Date.now;
61
- const sleep = options.sleep ?? ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
62
- const deadline = now() + options.timeoutSeconds * 1000;
63
- let lastResponse = null;
64
- let lastTransientError = null;
65
- let consecutiveTransientErrors = 0;
66
- let firstPoll = true;
67
- while (firstPoll || now() < deadline) {
68
- firstPoll = false;
69
- const remainingMs = Math.max(0, deadline - now());
70
- const waitSeconds = Math.min(25, Math.floor(remainingMs / 1000));
71
- try {
72
- const response = await client.replies(requestId, {
73
- waitSeconds,
74
- afterSeq: options.afterSeq,
75
- });
76
- lastResponse = response;
77
- lastTransientError = null;
78
- consecutiveTransientErrors = 0;
79
- if (response.replies.length > 0)
80
- return { response, timedOut: false, degraded: false };
81
- const pauseMs = Math.min(250, Math.max(0, deadline - now()));
82
- if (pauseMs > 0)
83
- await sleep(pauseMs);
84
- }
85
- catch (err) {
86
- if (!isRetryableReplyPollError(err))
87
- throw err;
88
- lastTransientError = err instanceof Error ? err : new Error(String(err));
89
- consecutiveTransientErrors += 1;
90
- const remainingAfterError = Math.max(0, deadline - now());
91
- if (remainingAfterError === 0)
92
- break;
93
- const backoffMs = Math.min(250 * 2 ** (consecutiveTransientErrors - 1), 2_000, remainingAfterError);
94
- await sleep(backoffMs);
95
- }
96
- }
97
- // Never saw a successful poll: surface the fault so callers get EXIT.network
98
- // rather than a fake empty silence. The durable request is still on the
99
- // server; the typed recovery is `notifai replies <id>`.
100
- if (!lastResponse && lastTransientError)
101
- throw lastTransientError;
102
- return {
103
- response: lastResponse ??
104
- {
105
- request_id: requestId,
106
- reply_expires_at: null,
107
- agent_acknowledgement_required: false,
108
- agent_acknowledgement_text_required: false,
109
- agent_acknowledgement: null,
110
- replies: [],
111
- },
112
- timedOut: true,
113
- // A poll succeeded at some point, so we do not throw — but the last thing
114
- // we know is that we could not reach the server. Reporting that as a plain
115
- // "no reply" would let an agent treat an unseen refusal as consent.
116
- degraded: lastTransientError !== null,
117
- };
118
- }
119
- function acknowledgeInvocation(requestId, textRequired) {
120
- return textRequired
121
- ? `notifai acknowledge ${requestId} --text <text>`
122
- : `notifai acknowledge ${requestId}`;
123
- }
124
- export function acknowledgementCommand(requestId, textRequired, acknowledgement, hasReply = true) {
125
- return acknowledgement === null && hasReply
126
- ? acknowledgeInvocation(requestId, textRequired)
127
- : null;
128
- }
129
- export function printAcknowledgementStatus(deps, response) {
130
- if (!response.agent_acknowledgement_required && response.replies.length === 0) {
131
- deps.io.out('Agent Acknowledgement: not required for this request.');
132
- return;
133
- }
134
- const textRequired = response.agent_acknowledgement_text_required;
135
- if (response.agent_acknowledgement !== null) {
136
- const recorded = `Agent Acknowledgement: recorded at ${response.agent_acknowledgement.created_at}`;
137
- deps.io.out(response.agent_acknowledgement.text.length > 0
138
- ? `${recorded}: ${response.agent_acknowledgement.text}`
139
- : `${recorded}.`);
140
- return;
141
- }
142
- if (response.replies.length > 0) {
143
- deps.io.out('Agent Acknowledgement required.');
144
- deps.io.out(textRequired
145
- ? `next: Run \`${acknowledgeInvocation(response.request_id, true)}\` with concrete text saying what you will do because of the reply.`
146
- : `next: Run \`${acknowledgeInvocation(response.request_id, false)}\` so the user sees you read the reply; this account turned acknowledgement text off.`);
147
- return;
148
- }
149
- deps.io.out('Agent Acknowledgement: required after a user reply; no reply is recorded yet.');
150
- }
151
- const MEDIA_TYPES = {
152
- '.jpg': 'image/jpeg',
153
- '.jpeg': 'image/jpeg',
154
- '.png': 'image/png',
155
- '.gif': 'image/gif',
156
- };
157
- /**
158
- * Read a remote image without buffering more than the server will accept.
159
- *
160
- * Content-Length is an early refusal, not trust: a lying header still hits
161
- * the byte cap while the body is read. Supported schemes stay http and https.
162
- */
163
- export async function readCappedBytes(response, maxBytes) {
164
- const contentLength = Number(response.headers.get('content-length'));
165
- if (Number.isFinite(contentLength) && contentLength > maxBytes)
166
- return 'too-large';
167
- const reader = response.body?.getReader();
168
- if (reader === undefined) {
169
- const buf = new Uint8Array(await response.arrayBuffer());
170
- return buf.byteLength > maxBytes ? 'too-large' : buf;
171
- }
172
- const chunks = [];
173
- let received = 0;
174
- while (true) {
175
- const { done, value } = await reader.read();
176
- if (done)
177
- break;
178
- received += value.byteLength;
179
- if (received > maxBytes) {
180
- await reader.cancel();
181
- return 'too-large';
182
- }
183
- chunks.push(value);
184
- }
185
- const out = new Uint8Array(received);
186
- let offset = 0;
187
- for (const chunk of chunks) {
188
- out.set(chunk, offset);
189
- offset += chunk.byteLength;
190
- }
191
- return out;
192
- }
193
- /**
194
- * `--image` accepts a media id, a local file path, or an http(s) URL.
195
- *
196
- * A remote URL is fetched under the media URL policy (`url-policy.ts`):
197
- * public HTTPS by default, every redirect hop re-validated, and non-public
198
- * destinations only through the User's `media_origins` — never a
199
- * repository's. `--image` values routinely arrive from an agent that read
200
- * them in a working tree, so the URL is hostile input until proven otherwise.
201
- */
202
- export async function uploadImage(deps, client, source, allowOrigins = []) {
203
- let bytes;
204
- let mediaType;
205
- if (/^https?:\/\//.test(source)) {
206
- try {
207
- const fetched = await fetchMediaUrl(source, { allowOrigins }, deps.fetchImpl);
208
- if (!fetched.ok)
209
- return { ok: false, error: fetched.reason, exit: EXIT.usage };
210
- const response = fetched.response;
211
- if (!response.ok)
212
- return { ok: false, error: `Could not fetch ${source} (${response.status}).`, exit: EXIT.usage };
213
- const contentType = response.headers.get('content-type')?.split(';')[0]?.trim() ?? '';
214
- mediaType = ['image/jpeg', 'image/png', 'image/gif'].find((t) => t === contentType);
215
- const downloaded = await readCappedBytes(response, NOTIFICATION_IMAGE_MAX_BYTES);
216
- if (downloaded === 'too-large') {
217
- return {
218
- ok: false,
219
- error: `Remote image exceeds the ${NOTIFICATION_IMAGE_MAX_BYTES} byte media limit.`,
220
- exit: EXIT.usage,
221
- };
222
- }
223
- bytes = downloaded;
224
- }
225
- catch (err) {
226
- return { ok: false, error: `Could not fetch ${source}: ${String(err)}`, exit: EXIT.network };
227
- }
228
- }
229
- else {
230
- if (!existsSync(source)) {
231
- return { ok: false, error: `--image: "${source}" is not a media id, file, or URL.`, exit: EXIT.usage };
232
- }
233
- bytes = new Uint8Array(readFileSync(source));
234
- mediaType = MEDIA_TYPES[path.extname(source).toLowerCase()];
235
- }
236
- if (!mediaType) {
237
- return { ok: false, error: 'Images must be JPEG, PNG, or GIF.', exit: EXIT.usage };
238
- }
239
- try {
240
- const grant = await client.createMediaUpload({
241
- media_type: mediaType,
242
- size_bytes: bytes.byteLength,
243
- sha256: sha256Hex(bytes),
244
- });
245
- await client.uploadMedia(grant, bytes);
246
- return { ok: true, mediaId: grant.media_id };
247
- }
248
- catch (err) {
249
- // Every other API failure in this file goes through `reportError`, which
250
- // maps a revoked credential to the auth code, a server fault to the network
251
- // one and everything else to plain failure, and records it in the local
252
- // log with whatever next step the server named. This used to answer
253
- // `network` to all of them, so an image too large for the account exited
254
- // the same way an unreachable server did, and nothing about it was logged.
255
- return { ok: false, error: null, exit: reportError(deps, err) };
256
- }
257
- }
258
- //# sourceMappingURL=commands-send-support.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-send-support.js","sourceRoot":"","sources":["../src/commands-send-support.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import { type ReplyView } from '@raidiant/notifai-protocol';
2
- import { type SendFlags } from './send.js';
3
- import { type CommandDeps } from './commands-core.js';
4
- export declare function sendCommand(deps: CommandDeps, flags: SendFlags & {
5
- json?: boolean;
6
- wait?: number;
7
- noWait?: boolean;
8
- replyTimeout?: number;
9
- idempotencyKey?: string;
10
- retry?: boolean;
11
- baseUrl?: string;
12
- }): Promise<number>;
13
- export declare function repliesCommand(deps: CommandDeps, requestedId: string | undefined, flags: {
14
- wait?: number;
15
- after?: number;
16
- json?: boolean;
17
- pending?: boolean;
18
- handoff?: boolean;
19
- }): Promise<number>;
20
- /**
21
- * The correction note for a wait that saw more than one answer.
22
- *
23
- * A later reply that conflicts with an earlier one is a correction, so the
24
- * latest answer is the one that counts. The server retires the question on
25
- * the other devices the moment one answers, which makes this rare; it is
26
- * still reachable, because a device can answer between the first reply
27
- * landing and its retirement arriving.
28
- *
29
- * Ordered by seq, so `replies.at(-1)` is the answer to act on.
30
- */
31
- export declare function contradictingAnswer(replies: ReplyView[]): string | null;
32
- export declare function statusCommand(deps: CommandDeps, id: string, flags: {
33
- json?: boolean;
34
- }): Promise<number>;