@raidiant/notifai 11.7.1 → 12.0.0-beta.13

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 +57 -0
  2. package/NOTICE +16 -0
  3. package/THIRD_PARTY_NOTICES +725 -0
  4. package/bin/notifai.mjs +11420 -0
  5. package/data/install.ps1 +318 -0
  6. package/data/release.json +1 -0
  7. package/inventory.json +1 -0
  8. package/npm-adapter-files.json +52 -0
  9. package/package.json +14 -44
  10. package/README.md +0 -168
  11. package/dist/agent-update-notice.d.ts +0 -7
  12. package/dist/agent-update-notice.js +0 -77
  13. package/dist/agent-update-notice.js.map +0 -1
  14. package/dist/atomic-file.d.ts +0 -30
  15. package/dist/atomic-file.js +0 -148
  16. package/dist/atomic-file.js.map +0 -1
  17. package/dist/attendant-update.d.ts +0 -15
  18. package/dist/attendant-update.js +0 -96
  19. package/dist/attendant-update.js.map +0 -1
  20. package/dist/claude-wake.d.ts +0 -108
  21. package/dist/claude-wake.js +0 -369
  22. package/dist/claude-wake.js.map +0 -1
  23. package/dist/cli-bin.d.ts +0 -26
  24. package/dist/cli-bin.js +0 -220
  25. package/dist/cli-bin.js.map +0 -1
  26. package/dist/cli-contract.d.ts +0 -16
  27. package/dist/cli-contract.js +0 -27
  28. package/dist/cli-contract.js.map +0 -1
  29. package/dist/cli-release.d.ts +0 -36
  30. package/dist/cli-release.js +0 -85
  31. package/dist/cli-release.js.map +0 -1
  32. package/dist/client.d.ts +0 -109
  33. package/dist/client.js +0 -217
  34. package/dist/client.js.map +0 -1
  35. package/dist/codex-answer-control.d.ts +0 -14
  36. package/dist/codex-answer-control.js +0 -41
  37. package/dist/codex-answer-control.js.map +0 -1
  38. package/dist/codex-answer-presentation.d.ts +0 -18
  39. package/dist/codex-answer-presentation.js +0 -113
  40. package/dist/codex-answer-presentation.js.map +0 -1
  41. package/dist/codex-input-lifecycle.d.ts +0 -10
  42. package/dist/codex-input-lifecycle.js +0 -63
  43. package/dist/codex-input-lifecycle.js.map +0 -1
  44. package/dist/codex-native-control.d.ts +0 -13
  45. package/dist/codex-native-control.js +0 -120
  46. package/dist/codex-native-control.js.map +0 -1
  47. package/dist/codex-native-turn.d.ts +0 -37
  48. package/dist/codex-native-turn.js +0 -155
  49. package/dist/codex-native-turn.js.map +0 -1
  50. package/dist/codex-question-bindings.d.ts +0 -76
  51. package/dist/codex-question-bindings.js +0 -151
  52. package/dist/codex-question-bindings.js.map +0 -1
  53. package/dist/codex-queue-control.d.ts +0 -21
  54. package/dist/codex-queue-control.js +0 -59
  55. package/dist/codex-queue-control.js.map +0 -1
  56. package/dist/codex-tool-messages.d.ts +0 -7
  57. package/dist/codex-tool-messages.js +0 -126
  58. package/dist/codex-tool-messages.js.map +0 -1
  59. package/dist/codex-wake.d.ts +0 -58
  60. package/dist/codex-wake.js +0 -135
  61. package/dist/codex-wake.js.map +0 -1
  62. package/dist/command-session.d.ts +0 -14
  63. package/dist/command-session.js +0 -31
  64. package/dist/command-session.js.map +0 -1
  65. package/dist/commands-acknowledge.d.ts +0 -13
  66. package/dist/commands-acknowledge.js +0 -116
  67. package/dist/commands-acknowledge.js.map +0 -1
  68. package/dist/commands-agent-sessions.d.ts +0 -6
  69. package/dist/commands-agent-sessions.js +0 -51
  70. package/dist/commands-agent-sessions.js.map +0 -1
  71. package/dist/commands-ask.d.ts +0 -62
  72. package/dist/commands-ask.js +0 -503
  73. package/dist/commands-ask.js.map +0 -1
  74. package/dist/commands-auth.d.ts +0 -76
  75. package/dist/commands-auth.js +0 -421
  76. package/dist/commands-auth.js.map +0 -1
  77. package/dist/commands-close.d.ts +0 -6
  78. package/dist/commands-close.js +0 -273
  79. package/dist/commands-close.js.map +0 -1
  80. package/dist/commands-config.d.ts +0 -31
  81. package/dist/commands-config.js +0 -272
  82. package/dist/commands-config.js.map +0 -1
  83. package/dist/commands-core.d.ts +0 -145
  84. package/dist/commands-core.js +0 -190
  85. package/dist/commands-core.js.map +0 -1
  86. package/dist/commands-devices.d.ts +0 -41
  87. package/dist/commands-devices.js +0 -144
  88. package/dist/commands-devices.js.map +0 -1
  89. package/dist/commands-doctor.d.ts +0 -25
  90. package/dist/commands-doctor.js +0 -1553
  91. package/dist/commands-doctor.js.map +0 -1
  92. package/dist/commands-guidance.d.ts +0 -27
  93. package/dist/commands-guidance.js +0 -150
  94. package/dist/commands-guidance.js.map +0 -1
  95. package/dist/commands-harness-context.d.ts +0 -57
  96. package/dist/commands-harness-context.js +0 -102
  97. package/dist/commands-harness-context.js.map +0 -1
  98. package/dist/commands-hook-attend.d.ts +0 -70
  99. package/dist/commands-hook-attend.js +0 -655
  100. package/dist/commands-hook-attend.js.map +0 -1
  101. package/dist/commands-hook-diagnostics.d.ts +0 -37
  102. package/dist/commands-hook-diagnostics.js +0 -136
  103. package/dist/commands-hook-diagnostics.js.map +0 -1
  104. package/dist/commands-hook-install.d.ts +0 -26
  105. package/dist/commands-hook-install.js +0 -784
  106. package/dist/commands-hook-install.js.map +0 -1
  107. package/dist/commands-hook-run.d.ts +0 -29
  108. package/dist/commands-hook-run.js +0 -933
  109. package/dist/commands-hook-run.js.map +0 -1
  110. package/dist/commands-hook-shape.d.ts +0 -19
  111. package/dist/commands-hook-shape.js +0 -48
  112. package/dist/commands-hook-shape.js.map +0 -1
  113. package/dist/commands-init.d.ts +0 -42
  114. package/dist/commands-init.js +0 -901
  115. package/dist/commands-init.js.map +0 -1
  116. package/dist/commands-io.d.ts +0 -2
  117. package/dist/commands-io.js +0 -117
  118. package/dist/commands-io.js.map +0 -1
  119. package/dist/commands-logs.d.ts +0 -30
  120. package/dist/commands-logs.js +0 -201
  121. package/dist/commands-logs.js.map +0 -1
  122. package/dist/commands-native-acknowledge.d.ts +0 -8
  123. package/dist/commands-native-acknowledge.js +0 -114
  124. package/dist/commands-native-acknowledge.js.map +0 -1
  125. package/dist/commands-project.d.ts +0 -4
  126. package/dist/commands-project.js +0 -41
  127. package/dist/commands-project.js.map +0 -1
  128. package/dist/commands-receive.d.ts +0 -3
  129. package/dist/commands-receive.js +0 -59
  130. package/dist/commands-receive.js.map +0 -1
  131. package/dist/commands-send-support.d.ts +0 -59
  132. package/dist/commands-send-support.js +0 -258
  133. package/dist/commands-send-support.js.map +0 -1
  134. package/dist/commands-send.d.ts +0 -34
  135. package/dist/commands-send.js +0 -900
  136. package/dist/commands-send.js.map +0 -1
  137. package/dist/commands-setup-proof.d.ts +0 -43
  138. package/dist/commands-setup-proof.js +0 -134
  139. package/dist/commands-setup-proof.js.map +0 -1
  140. package/dist/commands-skill.d.ts +0 -21
  141. package/dist/commands-skill.js +0 -199
  142. package/dist/commands-skill.js.map +0 -1
  143. package/dist/commands-sounds.d.ts +0 -12
  144. package/dist/commands-sounds.js +0 -35
  145. package/dist/commands-sounds.js.map +0 -1
  146. package/dist/commands-update-check.d.ts +0 -6
  147. package/dist/commands-update-check.js +0 -102
  148. package/dist/commands-update-check.js.map +0 -1
  149. package/dist/commands-update-resume.d.ts +0 -7
  150. package/dist/commands-update-resume.js +0 -143
  151. package/dist/commands-update-resume.js.map +0 -1
  152. package/dist/commands-update-skill.d.ts +0 -5
  153. package/dist/commands-update-skill.js +0 -36
  154. package/dist/commands-update-skill.js.map +0 -1
  155. package/dist/commands-update.d.ts +0 -11
  156. package/dist/commands-update.js +0 -286
  157. package/dist/commands-update.js.map +0 -1
  158. package/dist/commands.d.ts +0 -26
  159. package/dist/commands.js +0 -27
  160. package/dist/commands.js.map +0 -1
  161. package/dist/config-schema.d.ts +0 -62
  162. package/dist/config-schema.js +0 -302
  163. package/dist/config-schema.js.map +0 -1
  164. package/dist/config.d.ts +0 -181
  165. package/dist/config.js +0 -357
  166. package/dist/config.js.map +0 -1
  167. package/dist/credentials.d.ts +0 -96
  168. package/dist/credentials.js +0 -342
  169. package/dist/credentials.js.map +0 -1
  170. package/dist/file-lock.d.ts +0 -34
  171. package/dist/file-lock.js +0 -367
  172. package/dist/file-lock.js.map +0 -1
  173. package/dist/generated-session-label.d.ts +0 -2
  174. package/dist/generated-session-label.js +0 -152
  175. package/dist/generated-session-label.js.map +0 -1
  176. package/dist/guidance-content.d.ts +0 -53
  177. package/dist/guidance-content.js +0 -248
  178. package/dist/guidance-content.js.map +0 -1
  179. package/dist/guidance-render.d.ts +0 -25
  180. package/dist/guidance-render.js +0 -47
  181. package/dist/guidance-render.js.map +0 -1
  182. package/dist/guidance.d.ts +0 -69
  183. package/dist/guidance.js +0 -173
  184. package/dist/guidance.js.map +0 -1
  185. package/dist/harness-session-title.d.ts +0 -22
  186. package/dist/harness-session-title.js +0 -74
  187. package/dist/harness-session-title.js.map +0 -1
  188. package/dist/harnesses.d.ts +0 -65
  189. package/dist/harnesses.js +0 -159
  190. package/dist/harnesses.js.map +0 -1
  191. package/dist/hermes-attendant.d.ts +0 -38
  192. package/dist/hermes-attendant.js +0 -337
  193. package/dist/hermes-attendant.js.map +0 -1
  194. package/dist/hermes-plugin.d.ts +0 -11
  195. package/dist/hermes-plugin.js +0 -299
  196. package/dist/hermes-plugin.js.map +0 -1
  197. package/dist/hook-acknowledgements.d.ts +0 -70
  198. package/dist/hook-acknowledgements.js +0 -490
  199. package/dist/hook-acknowledgements.js.map +0 -1
  200. package/dist/hook-adapter.d.ts +0 -48
  201. package/dist/hook-adapter.js +0 -419
  202. package/dist/hook-adapter.js.map +0 -1
  203. package/dist/hook-events.d.ts +0 -105
  204. package/dist/hook-events.js +0 -130
  205. package/dist/hook-events.js.map +0 -1
  206. package/dist/hook-gates.d.ts +0 -7
  207. package/dist/hook-gates.js +0 -20
  208. package/dist/hook-gates.js.map +0 -1
  209. package/dist/hook-input.d.ts +0 -10
  210. package/dist/hook-input.js +0 -64
  211. package/dist/hook-input.js.map +0 -1
  212. package/dist/hook-lifecycle.d.ts +0 -112
  213. package/dist/hook-lifecycle.js +0 -2031
  214. package/dist/hook-lifecycle.js.map +0 -1
  215. package/dist/hook-project-sessions.d.ts +0 -28
  216. package/dist/hook-project-sessions.js +0 -141
  217. package/dist/hook-project-sessions.js.map +0 -1
  218. package/dist/hook-question-lock.d.ts +0 -29
  219. package/dist/hook-question-lock.js +0 -217
  220. package/dist/hook-question-lock.js.map +0 -1
  221. package/dist/hook-question-retirement.d.ts +0 -74
  222. package/dist/hook-question-retirement.js +0 -314
  223. package/dist/hook-question-retirement.js.map +0 -1
  224. package/dist/hook-question-state.d.ts +0 -58
  225. package/dist/hook-question-state.js +0 -239
  226. package/dist/hook-question-state.js.map +0 -1
  227. package/dist/hook-session-state.d.ts +0 -127
  228. package/dist/hook-session-state.js +0 -488
  229. package/dist/hook-session-state.js.map +0 -1
  230. package/dist/hook-types.d.ts +0 -476
  231. package/dist/hook-types.js +0 -4
  232. package/dist/hook-types.js.map +0 -1
  233. package/dist/injection-render.d.ts +0 -36
  234. package/dist/injection-render.js +0 -61
  235. package/dist/injection-render.js.map +0 -1
  236. package/dist/install-hooks.d.ts +0 -470
  237. package/dist/install-hooks.js +0 -1622
  238. package/dist/install-hooks.js.map +0 -1
  239. package/dist/integration-health.d.ts +0 -26
  240. package/dist/integration-health.js +0 -133
  241. package/dist/integration-health.js.map +0 -1
  242. package/dist/interactive.d.ts +0 -22
  243. package/dist/interactive.js +0 -644
  244. package/dist/interactive.js.map +0 -1
  245. package/dist/invocation-context.d.ts +0 -47
  246. package/dist/invocation-context.js +0 -164
  247. package/dist/invocation-context.js.map +0 -1
  248. package/dist/local-path.d.ts +0 -7
  249. package/dist/local-path.js +0 -27
  250. package/dist/local-path.js.map +0 -1
  251. package/dist/logging.d.ts +0 -157
  252. package/dist/logging.js +0 -599
  253. package/dist/logging.js.map +0 -1
  254. package/dist/main-run.d.ts +0 -1
  255. package/dist/main-run.js +0 -42
  256. package/dist/main-run.js.map +0 -1
  257. package/dist/main.d.ts +0 -2
  258. package/dist/main.js +0 -12
  259. package/dist/main.js.map +0 -1
  260. package/dist/native-answer-operation.d.ts +0 -70
  261. package/dist/native-answer-operation.js +0 -247
  262. package/dist/native-answer-operation.js.map +0 -1
  263. package/dist/native-skills.d.ts +0 -64
  264. package/dist/native-skills.js +0 -167
  265. package/dist/native-skills.js.map +0 -1
  266. package/dist/node-floor.d.ts +0 -19
  267. package/dist/node-floor.js +0 -32
  268. package/dist/node-floor.js.map +0 -1
  269. package/dist/npm-invocation.d.ts +0 -34
  270. package/dist/npm-invocation.js +0 -53
  271. package/dist/npm-invocation.js.map +0 -1
  272. package/dist/openclaw-continuation-bridge.d.ts +0 -7
  273. package/dist/openclaw-continuation-bridge.js +0 -64
  274. package/dist/openclaw-continuation-bridge.js.map +0 -1
  275. package/dist/openclaw-gateway-readiness.d.ts +0 -1
  276. package/dist/openclaw-gateway-readiness.js +0 -24
  277. package/dist/openclaw-gateway-readiness.js.map +0 -1
  278. package/dist/openclaw-generation.d.ts +0 -21
  279. package/dist/openclaw-generation.js +0 -115
  280. package/dist/openclaw-generation.js.map +0 -1
  281. package/dist/openclaw-message-bridge.d.ts +0 -8
  282. package/dist/openclaw-message-bridge.js +0 -93
  283. package/dist/openclaw-message-bridge.js.map +0 -1
  284. package/dist/openclaw-pending.d.ts +0 -8
  285. package/dist/openclaw-pending.js +0 -47
  286. package/dist/openclaw-pending.js.map +0 -1
  287. package/dist/openclaw-plugin.d.ts +0 -75
  288. package/dist/openclaw-plugin.js +0 -1353
  289. package/dist/openclaw-plugin.js.map +0 -1
  290. package/dist/openclaw-session-access.d.ts +0 -12
  291. package/dist/openclaw-session-access.js +0 -79
  292. package/dist/openclaw-session-access.js.map +0 -1
  293. package/dist/opencode-plugin.d.ts +0 -88
  294. package/dist/opencode-plugin.js +0 -286
  295. package/dist/opencode-plugin.js.map +0 -1
  296. package/dist/orca-session-title.d.ts +0 -11
  297. package/dist/orca-session-title.js +0 -111
  298. package/dist/orca-session-title.js.map +0 -1
  299. package/dist/pack-feedback-slice.d.ts +0 -35
  300. package/dist/pack-feedback-slice.js +0 -126
  301. package/dist/pack-feedback-slice.js.map +0 -1
  302. package/dist/pairing-qr.d.ts +0 -5
  303. package/dist/pairing-qr.js +0 -24
  304. package/dist/pairing-qr.js.map +0 -1
  305. package/dist/pending-pairing.d.ts +0 -38
  306. package/dist/pending-pairing.js +0 -70
  307. package/dist/pending-pairing.js.map +0 -1
  308. package/dist/platform.d.ts +0 -67
  309. package/dist/platform.js +0 -140
  310. package/dist/platform.js.map +0 -1
  311. package/dist/process-identity.d.ts +0 -26
  312. package/dist/process-identity.js +0 -82
  313. package/dist/process-identity.js.map +0 -1
  314. package/dist/program.d.ts +0 -59
  315. package/dist/program.js +0 -691
  316. package/dist/program.js.map +0 -1
  317. package/dist/project-enablement.d.ts +0 -21
  318. package/dist/project-enablement.js +0 -71
  319. package/dist/project-enablement.js.map +0 -1
  320. package/dist/question-settlement-process.d.ts +0 -17
  321. package/dist/question-settlement-process.js +0 -35
  322. package/dist/question-settlement-process.js.map +0 -1
  323. package/dist/question-timing.d.ts +0 -46
  324. package/dist/question-timing.js +0 -48
  325. package/dist/question-timing.js.map +0 -1
  326. package/dist/readiness.d.ts +0 -153
  327. package/dist/readiness.js +0 -149
  328. package/dist/readiness.js.map +0 -1
  329. package/dist/release.d.ts +0 -31
  330. package/dist/release.js +0 -52
  331. package/dist/release.js.map +0 -1
  332. package/dist/send-attempts.d.ts +0 -26
  333. package/dist/send-attempts.js +0 -139
  334. package/dist/send-attempts.js.map +0 -1
  335. package/dist/send.d.ts +0 -115
  336. package/dist/send.js +0 -421
  337. package/dist/send.js.map +0 -1
  338. package/dist/session-activation.d.ts +0 -13
  339. package/dist/session-activation.js +0 -64
  340. package/dist/session-activation.js.map +0 -1
  341. package/dist/session-attendant-probe.d.ts +0 -85
  342. package/dist/session-attendant-probe.js +0 -173
  343. package/dist/session-attendant-probe.js.map +0 -1
  344. package/dist/session-attendant-state.d.ts +0 -70
  345. package/dist/session-attendant-state.js +0 -256
  346. package/dist/session-attendant-state.js.map +0 -1
  347. package/dist/session-attendant.d.ts +0 -143
  348. package/dist/session-attendant.js +0 -520
  349. package/dist/session-attendant.js.map +0 -1
  350. package/dist/session-delivery.d.ts +0 -249
  351. package/dist/session-delivery.js +0 -576
  352. package/dist/session-delivery.js.map +0 -1
  353. package/dist/session-handoff.d.ts +0 -98
  354. package/dist/session-handoff.js +0 -118
  355. package/dist/session-handoff.js.map +0 -1
  356. package/dist/session-input-wakes.d.ts +0 -78
  357. package/dist/session-input-wakes.js +0 -239
  358. package/dist/session-input-wakes.js.map +0 -1
  359. package/dist/session-inputs.d.ts +0 -57
  360. package/dist/session-inputs.js +0 -434
  361. package/dist/session-inputs.js.map +0 -1
  362. package/dist/session-labels.d.ts +0 -56
  363. package/dist/session-labels.js +0 -396
  364. package/dist/session-labels.js.map +0 -1
  365. package/dist/session-message-handoff.d.ts +0 -39
  366. package/dist/session-message-handoff.js +0 -107
  367. package/dist/session-message-handoff.js.map +0 -1
  368. package/dist/setup-destinations.d.ts +0 -23
  369. package/dist/setup-destinations.js +0 -44
  370. package/dist/setup-destinations.js.map +0 -1
  371. package/dist/skill-integrity.d.ts +0 -54
  372. package/dist/skill-integrity.js +0 -164
  373. package/dist/skill-integrity.js.map +0 -1
  374. package/dist/skill-source/manifest.json +0 -40
  375. package/dist/skill-source/notifai/SKILL.md +0 -350
  376. package/dist/skill-source/notifai/references/diagnostics.md +0 -36
  377. package/dist/skill-source/notifai/references/harness-setup.md +0 -384
  378. package/dist/skill-source/notifai/references/native-questions.md +0 -51
  379. package/dist/skill-source/notifai/references/notes-and-edits.md +0 -54
  380. package/dist/skill-source/notifai/references/send-details.md +0 -14
  381. package/dist/skill-source/notifai/references/updates.md +0 -116
  382. package/dist/skill-source/notifai/references/writing-examples.md +0 -56
  383. package/dist/sound-ref.d.ts +0 -23
  384. package/dist/sound-ref.js +0 -28
  385. package/dist/sound-ref.js.map +0 -1
  386. package/dist/ui/banner.d.ts +0 -22
  387. package/dist/ui/banner.js +0 -87
  388. package/dist/ui/banner.js.map +0 -1
  389. package/dist/ui/config-view.d.ts +0 -30
  390. package/dist/ui/config-view.js +0 -108
  391. package/dist/ui/config-view.js.map +0 -1
  392. package/dist/ui/help.d.ts +0 -44
  393. package/dist/ui/help.js +0 -107
  394. package/dist/ui/help.js.map +0 -1
  395. package/dist/ui/theme.d.ts +0 -90
  396. package/dist/ui/theme.js +0 -244
  397. package/dist/ui/theme.js.map +0 -1
  398. package/dist/update-handoff.d.ts +0 -29
  399. package/dist/update-handoff.js +0 -69
  400. package/dist/update-handoff.js.map +0 -1
  401. package/dist/url-policy.d.ts +0 -85
  402. package/dist/url-policy.js +0 -369
  403. package/dist/url-policy.js.map +0 -1
  404. package/dist/version.d.ts +0 -40
  405. package/dist/version.js +0 -132
  406. package/dist/version.js.map +0 -1
  407. package/dist/wake-support.d.ts +0 -40
  408. package/dist/wake-support.js +0 -95
  409. package/dist/wake-support.js.map +0 -1
@@ -1,369 +0,0 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import os from 'node:os';
3
- import path from 'node:path';
4
- import { createConnection } from 'node:net';
5
- import { compareVersions } from './version.js';
6
- import { claudeSourceDescriptor, deliverIntoClaudeSession } from './session-handoff.js';
7
- import { WriteAbortedError, abortedDelivery, cancelledDelivery, holdForNextTurn, runWakeCommand, } from './wake-support.js';
8
- /** Claude Code's currently observed inbox protocol. Unknown versions fail closed. */
9
- export const CLAUDE_PEER_PROTOCOL = 1;
10
- /** The first Claude Code release that publishes a session inbox socket. */
11
- export const CLAUDE_MIN_INBOX_VERSION = '2.1.224';
12
- /** The inbox socket is a Unix domain socket; no Windows implementation exists. */
13
- const INBOX_PLATFORMS = new Set(['darwin', 'linux']);
14
- /** macOS verifies own-child ancestry only while the posting process is alive. */
15
- export const CLAUDE_POST_SEND_LIVENESS_MS = 8_000;
16
- const LIVE_STATUSES = new Set(['idle', 'busy']);
17
- function isRecord(value) {
18
- return typeof value === 'object' && value !== null && !Array.isArray(value);
19
- }
20
- function parseAgent(value) {
21
- if (!isRecord(value))
22
- return null;
23
- if (typeof value['pid'] !== 'number' ||
24
- !Number.isInteger(value['pid']) ||
25
- value['pid'] <= 0 ||
26
- typeof value['sessionId'] !== 'string' ||
27
- value['sessionId'] === '' ||
28
- typeof value['startedAt'] !== 'number' ||
29
- !Number.isFinite(value['startedAt']) ||
30
- typeof value['status'] !== 'string') {
31
- return null;
32
- }
33
- return {
34
- pid: value['pid'],
35
- sessionId: value['sessionId'],
36
- startedAt: value['startedAt'],
37
- status: value['status'],
38
- };
39
- }
40
- /** A Claude Code session descriptor, or null when it has an unknown shape. */
41
- export function parseDescriptor(value) {
42
- if (!isRecord(value))
43
- return null;
44
- if (typeof value['pid'] !== 'number' ||
45
- !Number.isInteger(value['pid']) ||
46
- value['pid'] <= 0 ||
47
- typeof value['sessionId'] !== 'string' ||
48
- value['sessionId'] === '' ||
49
- typeof value['cwd'] !== 'string' ||
50
- value['cwd'] === '' ||
51
- typeof value['startedAt'] !== 'number' ||
52
- !Number.isFinite(value['startedAt']) ||
53
- typeof value['procStart'] !== 'string' ||
54
- value['procStart'] === '' ||
55
- typeof value['version'] !== 'string' ||
56
- value['version'] === '' ||
57
- typeof value['peerProtocol'] !== 'number' ||
58
- !Number.isInteger(value['peerProtocol']) ||
59
- typeof value['messagingSocketPath'] !== 'string' ||
60
- value['messagingSocketPath'] === '' ||
61
- typeof value['status'] !== 'string') {
62
- return null;
63
- }
64
- return {
65
- pid: value['pid'],
66
- sessionId: value['sessionId'],
67
- cwd: value['cwd'],
68
- startedAt: value['startedAt'],
69
- procStart: value['procStart'],
70
- version: value['version'],
71
- peerProtocol: value['peerProtocol'],
72
- messagingSocketPath: value['messagingSocketPath'],
73
- status: value['status'],
74
- };
75
- }
76
- /**
77
- * Observe one exact Claude Code session without guessing.
78
- *
79
- * `claude agents --json` is the liveness oracle: Claude Code itself validates
80
- * each registry row against both PID and process start time before returning it.
81
- * The descriptor supplies the socket and peer protocol, but is never trusted as
82
- * proof that a process still owns the session.
83
- */
84
- export async function observeClaudeSession(sessionId, adapters) {
85
- let listed;
86
- try {
87
- listed = await adapters.listAgents();
88
- }
89
- catch (err) {
90
- return {
91
- state: 'unknown',
92
- reason: `claude agents probe failed: ${err instanceof Error ? err.message : String(err)}`,
93
- };
94
- }
95
- if (!Array.isArray(listed)) {
96
- return { state: 'unknown', reason: 'claude agents returned an invalid document' };
97
- }
98
- const matchingRaw = listed.filter((value) => isRecord(value) && value['sessionId'] === sessionId);
99
- if (matchingRaw.length === 0)
100
- return { state: 'stopped' };
101
- if (matchingRaw.length !== 1) {
102
- return { state: 'unknown', reason: 'claude agents returned duplicate session owners' };
103
- }
104
- const agent = parseAgent(matchingRaw[0]);
105
- if (agent === null) {
106
- return { state: 'unknown', reason: 'claude agents returned an invalid matching row' };
107
- }
108
- let descriptorRaw;
109
- try {
110
- descriptorRaw = adapters.readDescriptor(agent.pid);
111
- }
112
- catch (err) {
113
- return {
114
- state: 'unknown',
115
- reason: `Claude session descriptor could not be read: ${err instanceof Error ? err.message : String(err)}`,
116
- };
117
- }
118
- const descriptor = parseDescriptor(descriptorRaw);
119
- if (descriptor === null) {
120
- return { state: 'unknown', reason: 'Claude session descriptor has an unknown shape' };
121
- }
122
- if (descriptor.pid !== agent.pid ||
123
- descriptor.sessionId !== agent.sessionId ||
124
- descriptor.startedAt !== agent.startedAt) {
125
- return { state: 'unknown', reason: 'Claude liveness probe and descriptor disagree' };
126
- }
127
- if (descriptor.peerProtocol !== CLAUDE_PEER_PROTOCOL) {
128
- return {
129
- state: 'unknown',
130
- reason: `unsupported Claude peer protocol ${descriptor.peerProtocol}`,
131
- };
132
- }
133
- if (!LIVE_STATUSES.has(agent.status)) {
134
- return { state: 'unknown', reason: `Claude session status ${agent.status} is not wakeable` };
135
- }
136
- return {
137
- state: agent.status === 'idle' ? 'live-idle' : 'live-busy',
138
- descriptor,
139
- };
140
- }
141
- /**
142
- * Whether an answer could reach this exact Claude session over its inbox
143
- * socket, decided from evidence already on disk.
144
- *
145
- * Read-only by construction: it reads the session descriptor and asks whether
146
- * the socket file exists, and never connects to it. A diagnostic that delivers
147
- * a message is not a diagnostic.
148
- *
149
- * Every negative answer here is a degradation, not a failure — the accepted
150
- * journal still replays the answer at the session's next turn. What it buys is
151
- * that the reason is nameable in advance instead of being discovered as
152
- * silence. The common one is `--bare`, which binds no socket at all (and runs
153
- * no hooks either, so nothing would have registered a question in the first
154
- * place).
155
- */
156
- export function inspectClaudeInbox(options) {
157
- if (!INBOX_PLATFORMS.has(options.platform)) {
158
- return {
159
- state: 'unavailable',
160
- reason: `Claude Code publishes no inbox socket on ${options.platform}; it exists on macOS and Linux only`,
161
- };
162
- }
163
- let raw;
164
- try {
165
- raw = options.readDescriptor(options.pid);
166
- }
167
- catch (err) {
168
- return {
169
- state: 'unavailable',
170
- reason: `no session descriptor for pid ${options.pid} (${err instanceof Error ? err.message : String(err)}); a session started with \`--bare\` binds no inbox socket`,
171
- };
172
- }
173
- const descriptor = parseDescriptor(raw);
174
- if (descriptor === null) {
175
- return {
176
- state: 'unavailable',
177
- reason: `the session descriptor for pid ${options.pid} has an unknown shape`,
178
- };
179
- }
180
- if (descriptor.peerProtocol !== CLAUDE_PEER_PROTOCOL) {
181
- return {
182
- state: 'unavailable',
183
- reason: `this session speaks inbox protocol ${descriptor.peerProtocol}, and only ${CLAUDE_PEER_PROTOCOL} is known; refusing to guess at an undocumented wire format`,
184
- };
185
- }
186
- const versionComparison = compareVersions(descriptor.version, CLAUDE_MIN_INBOX_VERSION);
187
- if (versionComparison === 'unparseable') {
188
- return {
189
- state: 'unavailable',
190
- reason: `the Claude Code version ${descriptor.version} is not a recognised release number`,
191
- };
192
- }
193
- if (versionComparison === 'before') {
194
- return {
195
- state: 'unavailable',
196
- reason: `Claude Code ${descriptor.version} is older than ${CLAUDE_MIN_INBOX_VERSION}, which is where the inbox socket starts`,
197
- };
198
- }
199
- if (!options.socketExists(descriptor.messagingSocketPath)) {
200
- return {
201
- state: 'unavailable',
202
- reason: `the descriptor names ${descriptor.messagingSocketPath}, but no socket exists there`,
203
- };
204
- }
205
- return {
206
- state: 'ready',
207
- socketPath: descriptor.messagingSocketPath,
208
- version: descriptor.version,
209
- };
210
- }
211
- /**
212
- * Claude's own-child delivery route.
213
- *
214
- * A successful socket write proves delivery to Claude Code, not model
215
- * consumption — and this route reports exactly that, no more. It reports
216
- * `delivered` all the same, because the write is the strongest acknowledgement
217
- * this route can ever obtain: the message it posts starts a brand-new turn
218
- * rather than continuing this one, so no later hook will confirm anything about
219
- * it. An answer delivered once and settled is strictly better than an answer
220
- * redelivered on every turn-end for ever.
221
- *
222
- * Every path that hands nothing over reports `held`, so the accepted journal
223
- * replays it. Unknown state deliberately returns without throwing, so the
224
- * journal becomes `hold-for-next-turn` instead of failing the hook. The
225
- * in-place write is the hand-off shared with Session Messages
226
- * (`session-handoff.ts`); only the cold resume of a stopped session belongs to
227
- * this answer route.
228
- */
229
- export function claudeWakeRoute(options) {
230
- const adapters = options.adapters ?? systemClaudeWakeAdapters();
231
- const sourceDescriptor = claudeSourceDescriptor(options.sessionId, options.sourcePid, adapters);
232
- return {
233
- kind: 'inbox-socket',
234
- async deliver(event) {
235
- const written = await deliverIntoClaudeSession({
236
- sessionId: options.sessionId,
237
- sourcePid: options.sourcePid,
238
- sourceDescriptor,
239
- adapters,
240
- text: event.context,
241
- begin: () => event.commitDelivery(),
242
- ...(event.writeGuard === undefined ? {} : { guard: event.writeGuard }),
243
- writer: 'Stop-hook process',
244
- });
245
- switch (written.status) {
246
- case 'unavailable':
247
- return holdForNextTurn(written.reason);
248
- case 'cancelled':
249
- return cancelledDelivery();
250
- case 'aborted':
251
- return abortedDelivery();
252
- case 'failed':
253
- // The write started; the waiter records the failure as it always has.
254
- throw written.error;
255
- case 'written':
256
- return {
257
- notes: [
258
- written.sessionState === 'live-idle'
259
- ? 'posted the accepted answer to the live Claude session'
260
- : 'queued the accepted answer for the busy Claude session',
261
- ],
262
- log: {
263
- route: 'inbox-socket',
264
- stage: 'delivered',
265
- session_state: written.sessionState,
266
- },
267
- // The write completed: Claude Code holds the message. Nothing later
268
- // reports on it, so this is where the journal settles.
269
- acknowledgement: 'delivered',
270
- };
271
- case 'stopped':
272
- break;
273
- }
274
- // Probe immediately before spawn. A prior descriptor or dead socket is
275
- // never sufficient: resuming a live session creates a divergent ghost.
276
- const confirmed = await observeClaudeSession(options.sessionId, adapters);
277
- if (confirmed.state !== 'stopped') {
278
- const reason = confirmed.state === 'unknown'
279
- ? confirmed.reason
280
- : 'the Claude session became live before cold resume';
281
- return holdForNextTurn(reason);
282
- }
283
- // The resumed harness is a subprocess writer: its process group is
284
- // journaled as soon as it exists, so its survival is never mistaken
285
- // for a finished write.
286
- if (!event.commitDelivery('subprocess'))
287
- return cancelledDelivery();
288
- // `stopped` is reported only with a proven source descriptor.
289
- await adapters.resume(options.sessionId, sourceDescriptor.cwd, event.context, (pgid) => event.writerGroup?.(pgid));
290
- return {
291
- notes: ['cold-resumed the stopped Claude session with its accepted answer'],
292
- log: { route: 'cold-resume', stage: 'delivered' },
293
- acknowledgement: 'delivered',
294
- };
295
- },
296
- };
297
- }
298
- function runClaude(args, options = {}) {
299
- return runWakeCommand('claude', args, options);
300
- }
301
- function coldResumeEnvironment(env) {
302
- const next = { ...env };
303
- for (const key of Object.keys(next)) {
304
- if (key === 'CLAUDECODE' || key === 'CLAUDE_PID' || key.startsWith('CLAUDE_CODE_')) {
305
- delete next[key];
306
- }
307
- }
308
- return next;
309
- }
310
- export function systemClaudeWakeAdapters(env = process.env) {
311
- return {
312
- async listAgents() {
313
- const output = await runClaude(['agents', '--json'], { env });
314
- return JSON.parse(output);
315
- },
316
- readDescriptor(pid) {
317
- const file = path.join(os.homedir(), '.claude', 'sessions', `${pid}.json`);
318
- return JSON.parse(readFileSync(file, 'utf8'));
319
- },
320
- sendSocket(socketPath, line, guard) {
321
- return new Promise((resolve, reject) => {
322
- const socket = createConnection(socketPath);
323
- let settled = false;
324
- const fail = (err) => {
325
- if (settled)
326
- return;
327
- settled = true;
328
- clearTimeout(late);
329
- socket.destroy();
330
- reject(err);
331
- };
332
- // A connection still pending at the write boundary is abandoned.
333
- const late = guard === undefined
334
- ? undefined
335
- : setTimeout(() => fail(new WriteAbortedError('the inbox connection outlasted the claim')), Math.min(guard.remainingMs(), 2_147_483_647));
336
- socket.once('error', fail);
337
- socket.once('connect', () => {
338
- if (guard !== undefined && !guard.writable()) {
339
- fail(new WriteAbortedError('the claim lapsed before the first byte'));
340
- return;
341
- }
342
- clearTimeout(late);
343
- socket.end(line, () => {
344
- if (settled)
345
- return;
346
- settled = true;
347
- resolve();
348
- });
349
- });
350
- });
351
- },
352
- async resume(sessionId, cwd, context, onSpawn) {
353
- if (!existsSync(cwd))
354
- throw new Error(`Claude session cwd no longer exists: ${cwd}`);
355
- await runClaude([
356
- '-p',
357
- '--resume',
358
- sessionId,
359
- '--output-format',
360
- 'json',
361
- context,
362
- ], { cwd, env: coldResumeEnvironment(env), ...(onSpawn === undefined ? {} : { onSpawn }) });
363
- },
364
- sleep(milliseconds) {
365
- return new Promise((resolve) => setTimeout(resolve, milliseconds));
366
- },
367
- };
368
- }
369
- //# sourceMappingURL=claude-wake.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-wake.js","sourceRoot":"","sources":["../src/claude-wake.ts"],"names":[],"mappings":"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"}
package/dist/cli-bin.d.ts DELETED
@@ -1,26 +0,0 @@
1
- import type { ReadinessState } from './readiness.js';
2
- export interface CliBinReadinessOptions {
3
- runningArtifactPath?: string;
4
- currentVersion?: string | null;
5
- }
6
- export interface CliPathEntry {
7
- command_path: string;
8
- executable: boolean;
9
- artifact_path: string | null;
10
- version: string | null;
11
- install_prefix: string | null;
12
- }
13
- export interface CliInstallationInspection {
14
- current: {
15
- artifact_path: string;
16
- version: string | null;
17
- };
18
- effective: CliPathEntry | null;
19
- entries: CliPathEntry[];
20
- }
21
- /** npm exec prepends its own temporary .bin; it is not the user's installed CLI. */
22
- export declare function withoutNpxLauncherPath(env: NodeJS.ProcessEnv, platform: NodeJS.Platform, runningArtifact: string): NodeJS.ProcessEnv;
23
- export declare function pathNotifaiEntries(env: NodeJS.ProcessEnv, platform?: NodeJS.Platform): string[];
24
- export declare function isExecutablePath(file: string, platform?: NodeJS.Platform): boolean;
25
- export declare function inspectCliInstallations(env: NodeJS.ProcessEnv, platform?: NodeJS.Platform, options?: CliBinReadinessOptions): CliInstallationInspection;
26
- export declare function cliBinReadiness(env: NodeJS.ProcessEnv, platform?: NodeJS.Platform, options?: CliBinReadinessOptions): ReadinessState;
package/dist/cli-bin.js DELETED
@@ -1,220 +0,0 @@
1
- import { accessSync, constants, existsSync, lstatSync, readFileSync, readlinkSync, realpathSync, } from 'node:fs';
2
- import path from 'node:path';
3
- import { packageVersion } from './release.js';
4
- import { cliUpdateChannel, cliUpdateRecoveryCommand } from './cli-contract.js';
5
- import { canonicalPath, pathDirectories, sameLocalPath } from './local-path.js';
6
- const POSIX_NAMES = ['notifai'];
7
- const WINDOWS_NAMES = ['notifai.cmd', 'notifai.exe', 'notifai'];
8
- /** npm exec prepends its own temporary .bin; it is not the user's installed CLI. */
9
- export function withoutNpxLauncherPath(env, platform, runningArtifact) {
10
- const artifact = canonicalPath(runningArtifact);
11
- const modules = path.dirname(path.dirname(path.dirname(path.dirname(artifact))));
12
- const cacheEntry = path.dirname(modules);
13
- if (path.basename(path.dirname(cacheEntry)) !== '_npx' ||
14
- !sameLocalPath(artifact, path.join(modules, '@raidiant', 'notifai', 'dist', 'main.js'), platform) ||
15
- path.basename(modules) !== 'node_modules')
16
- return env;
17
- const launcher = path.join(modules, '.bin');
18
- const key = platform === 'win32' && env['Path'] !== undefined ? 'Path' : 'PATH';
19
- const directories = pathDirectories(env, platform);
20
- const retained = directories.filter(directory => !sameLocalPath(directory, launcher, platform));
21
- const next = { ...env };
22
- const value = retained.join(platform === 'win32' ? ';' : ':');
23
- // Node's Windows child environment deduplicates case-insensitive keys. Keep
24
- // every spelling coherent so an inherited PATH cannot defeat the new Path.
25
- const keys = platform === 'win32' ? Object.keys(env).filter(name => name.toLowerCase() === 'path') : [key];
26
- if (keys.every(name => env[name] === value))
27
- return env;
28
- for (const name of keys)
29
- next[name] = value;
30
- return next;
31
- }
32
- export function pathNotifaiEntries(env, platform = process.platform) {
33
- const names = platform === 'win32' ? WINDOWS_NAMES : POSIX_NAMES;
34
- const found = [];
35
- for (const directory of pathDirectories(env, platform)) {
36
- for (const name of names) {
37
- const candidate = path.join(directory, name);
38
- // A dangling npm symlink is still installation evidence after an
39
- // interrupted upgrade. Keep its destination available to local repair.
40
- try {
41
- lstatSync(candidate);
42
- }
43
- catch {
44
- continue;
45
- }
46
- if (!found.includes(candidate))
47
- found.push(candidate);
48
- }
49
- }
50
- return found;
51
- }
52
- export function isExecutablePath(file, platform = process.platform) {
53
- if (!existsSync(file))
54
- return false;
55
- if (platform === 'win32')
56
- return true;
57
- try {
58
- const target = lstatSync(file).isSymbolicLink() ? realpathSync(file) : file;
59
- accessSync(target, constants.X_OK);
60
- return true;
61
- }
62
- catch {
63
- return false;
64
- }
65
- }
66
- function windowsShimArtifact(file) {
67
- if (path.extname(file).toLowerCase() !== '.cmd')
68
- return null;
69
- try {
70
- const source = readFileSync(file, 'utf8');
71
- const match = /(?:%dp0%|%~dp0)?([^"\r\n]*node_modules[\\/]@raidiant[\\/]notifai[\\/]dist[\\/]main\.js)/i.exec(source);
72
- if (match?.[0] === undefined)
73
- return null;
74
- const expanded = match[0]
75
- .replace(/^%~?dp0%/i, `${path.dirname(file)}${path.sep}`)
76
- .replaceAll('\\', path.sep);
77
- return canonicalPath(expanded);
78
- }
79
- catch {
80
- return null;
81
- }
82
- }
83
- function artifactForCommand(file, platform) {
84
- const shim = platform === 'win32' ? windowsShimArtifact(file) : null;
85
- if (shim !== null)
86
- return shim;
87
- try {
88
- if (lstatSync(file).isSymbolicLink()) {
89
- return canonicalPath(path.resolve(path.dirname(file), readlinkSync(file)));
90
- }
91
- return canonicalPath(file);
92
- }
93
- catch {
94
- return null;
95
- }
96
- }
97
- function artifactVersion(artifact) {
98
- if (artifact === null)
99
- return null;
100
- try {
101
- const parsed = JSON.parse(readFileSync(path.join(path.dirname(artifact), '..', 'package.json'), 'utf8'));
102
- if (typeof parsed !== 'object' || parsed === null)
103
- return null;
104
- const version = parsed.version;
105
- return typeof version === 'string' && version !== '' ? version : null;
106
- }
107
- catch {
108
- return null;
109
- }
110
- }
111
- function installPrefix(artifact, command, platform) {
112
- if (artifact === null)
113
- return null;
114
- // Only an npm-global layout is writable through npm --global --prefix.
115
- // A local dependency or pnpm store path also contains node_modules, but
116
- // treating its parent as a global prefix writes an unrelated installation.
117
- const suffix = path.sep + path.join(...(platform === 'win32' ? [] : ['lib']), 'node_modules', '@raidiant', 'notifai', 'dist', 'main.js');
118
- const normalized = platform === 'win32' ? artifact.toLowerCase() : artifact;
119
- if (!normalized.endsWith(suffix))
120
- return null;
121
- const prefix = canonicalPath(artifact.slice(0, -suffix.length));
122
- const bin = platform === 'win32' ? prefix : path.join(prefix, 'bin');
123
- return sameLocalPath(path.dirname(command), bin, platform) ? prefix : null;
124
- }
125
- export function inspectCliInstallations(env, platform = process.platform, options = {}) {
126
- const runningArtifact = canonicalPath(options.runningArtifactPath ?? process.argv[1] ?? 'notifai');
127
- const entries = pathNotifaiEntries(withoutNpxLauncherPath(env, platform, runningArtifact), platform).map((command) => {
128
- const artifact = artifactForCommand(command, platform);
129
- return {
130
- command_path: command,
131
- executable: isExecutablePath(command, platform),
132
- artifact_path: artifact,
133
- version: artifactVersion(artifact),
134
- install_prefix: installPrefix(artifact, command, platform),
135
- };
136
- });
137
- return {
138
- current: {
139
- artifact_path: runningArtifact,
140
- version: options.currentVersion === undefined ? packageVersion() : options.currentVersion,
141
- },
142
- effective: entries.find((entry) => entry.executable) ?? null,
143
- entries,
144
- };
145
- }
146
- export function cliBinReadiness(env, platform = process.platform, options = {}) {
147
- const inspection = inspectCliInstallations(env, platform, options);
148
- const { current, effective, entries } = inspection;
149
- const updateCommand = cliUpdateRecoveryCommand(cliUpdateChannel(current.version));
150
- if (effective === null && entries.length > 0) {
151
- return {
152
- id: 'cli-bin',
153
- title: 'notifai command',
154
- status: 'gap',
155
- detail: 'the notifai command is on PATH but cannot run',
156
- technical: inspection,
157
- remedy: {
158
- by: 'user-here',
159
- summary: 'repair the global notifai command so it can run',
160
- command: updateCommand,
161
- },
162
- };
163
- }
164
- // A global install that landed outside PATH used to report `ready` with
165
- // "this process can run" — which is true of the running process and false of
166
- // every instruction it goes on to print. Hooks embed absolute paths, so
167
- // nothing visibly breaks until the reader types `notifai` themselves.
168
- //
169
- // Not a blocker: this process is already running, so the whole setup —
170
- // pairing, the app, the delivery proof — still completes. It is the later
171
- // `notifai …` lines that will not be found, and saying so is the fix.
172
- if (effective === null) {
173
- return {
174
- id: 'cli-bin',
175
- title: 'notifai command',
176
- status: 'optional-gap',
177
- detail: 'no `notifai` on PATH — this process runs, but a typed `notifai …` command will not be found',
178
- remedy: {
179
- by: 'user-here',
180
- summary: 'install notifai globally so the command is on your PATH',
181
- command: updateCommand,
182
- },
183
- };
184
- }
185
- const effectiveIsCurrent = effective.artifact_path === current.artifact_path ||
186
- (effective.version !== null && current.version !== null && effective.version === current.version);
187
- if (!effectiveIsCurrent) {
188
- return {
189
- id: 'cli-bin',
190
- title: 'notifai command',
191
- status: 'gap',
192
- detail: 'the notifai command resolves to a different installation than this current CLI',
193
- technical: inspection,
194
- remedy: {
195
- by: 'user-here',
196
- summary: 'update the notifai command that wins PATH',
197
- command: updateCommand,
198
- },
199
- };
200
- }
201
- const duplicateNeedsCleanup = entries.some((entry) => entry !== effective &&
202
- (!entry.executable || entry.artifact_path !== effective.artifact_path));
203
- if (duplicateNeedsCleanup) {
204
- return {
205
- id: 'cli-bin',
206
- title: 'notifai command',
207
- status: 'optional-gap',
208
- detail: 'the notifai command is ready; another installation remains for cleanup',
209
- technical: inspection,
210
- };
211
- }
212
- return {
213
- id: 'cli-bin',
214
- title: 'notifai command',
215
- status: 'ready',
216
- detail: 'the notifai command is ready',
217
- technical: inspection,
218
- };
219
- }
220
- //# sourceMappingURL=cli-bin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-bin.js","sourceRoot":"","sources":["../src/cli-bin.ts"],"names":[],"mappings":"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"}