@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,421 +0,0 @@
1
- import {} from '@raidiant/notifai-protocol';
2
- import { sha256Hex } from '@raidiant/notifai-protocol/node';
3
- import { randomBytes } from 'node:crypto';
4
- import os from 'node:os';
5
- import { renderPairingQr, terminalPairingQr, pairingQrPath, pairingQrTextPath } from './pairing-qr.js';
6
- import { ApiCallError, NetworkError } from './client.js';
7
- import {} from './config.js';
8
- import { checkApproveUrl } from './url-policy.js';
9
- import { EXIT, SETUP_COMMAND, authedClient, loadLoggedConfig, makeClient, reportError, } from './commands-core.js';
10
- import { setupAccessUrl } from './setup-destinations.js';
11
- import { clearPendingPairing, readPendingPairing, writePendingPairing, } from './pending-pairing.js';
12
- // ---------------------------------------------------------------------------
13
- // login / logout / auth status
14
- // ---------------------------------------------------------------------------
15
- /**
16
- * Keep the one-time confirmation secret out of the HTTP request that opens
17
- * the dashboard. URL fragments are browser-local and are not sent by GET,
18
- * prefetchers, referrers, or link scanners.
19
- */
20
- export function pairingApprovalUrl(approveUrl, confirmationSecret) {
21
- const url = new URL(approveUrl);
22
- url.hash = new URLSearchParams({ confirmation_secret: confirmationSecret }).toString();
23
- return url.toString();
24
- }
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 function pendingApprovalBlocker(pairing, env) {
34
- return {
35
- id: 'credential',
36
- title: 'This machine',
37
- status: 'gap',
38
- detail: `waiting for you to review and approve this computer (code ${pairing.code})`,
39
- technical: {
40
- pairing_outcome: 'pending',
41
- pairing: {
42
- approve_url: pairing.approve_url,
43
- ...(env ? { qr_path: pairingQrPath(env), qr_text_path: pairingQrTextPath(env) } : {}),
44
- alternatives: ['qr', 'notification', 'browser'],
45
- code: pairing.code,
46
- expires_at: pairing.expires_at,
47
- },
48
- },
49
- remedy: {
50
- by: 'user-here',
51
- summary: `scan the local QR to review this computer in Notifai and compare code ${pairing.code}; browser approval is also available at ${pairing.approve_url}`,
52
- command: SETUP_COMMAND,
53
- // The next run resumes this handshake through the same login path.
54
- interactive: true,
55
- },
56
- };
57
- }
58
- /**
59
- * The state `init` reports when an approval ended without a credential. Each
60
- * outcome is named, because "not paired" alone sends an agent straight back
61
- * into a new approval — and a User who just said no gets asked again.
62
- */
63
- export function pairingOutcomeBlocker(outcome, detail) {
64
- return {
65
- id: 'credential',
66
- title: 'This machine',
67
- status: 'gap',
68
- detail,
69
- technical: { pairing_outcome: outcome },
70
- remedy: {
71
- by: 'user-here',
72
- summary: outcome === 'denied'
73
- ? 'approval was denied; start setup again only if you want to connect this computer'
74
- : 'start machine approval again',
75
- command: SETUP_COMMAND,
76
- interactive: true,
77
- },
78
- };
79
- }
80
- /**
81
- * Pair this machine with the User's Account.
82
- *
83
- * The handshake is one server-side pairing: this machine keeps the credential
84
- * and the confirmation secret, the User approves the code in their browser,
85
- * and polling collects the machine id. It is persisted between runs (see
86
- * `pending-pairing.ts`), which is what lets two very different callers share
87
- * it honestly:
88
- *
89
- * - A human at a terminal watches a spinner until the pairing resolves or
90
- * expires, as before.
91
- * - An agent, or any run with nobody at the terminal, never waits on a
92
- * person. It prints the page and the code, polls once, and returns — its
93
- * caller relays the errand, and the next run picks the same pairing up
94
- * where it was left. A shell tool that times out no longer strands an
95
- * approval the User already gave.
96
- *
97
- * A resumed handshake is always asked about before it is replaced: the
98
- * service answers `approved` for an approved pairing even after its expiry,
99
- * so an approval given late is collected rather than duplicated. Only the
100
- * service's `expired`, `denied`, or unknown answer discards one.
101
- */
102
- export async function loginCommand(deps, flags, onBlocked) {
103
- if (flags.approval !== undefined && !['qr', 'notification', 'browser'].includes(flags.approval)) {
104
- deps.io.err('Choose --approval qr, notification, or browser.');
105
- return EXIT.usage;
106
- }
107
- if (flags.approvalEmail && flags.approval && flags.approval !== 'notification') {
108
- deps.io.err('--approval-email is for --approval notification.');
109
- return EXIT.usage;
110
- }
111
- const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env, flags: { base_url: flags.baseUrl } });
112
- const baseUrl = config.base_url.value;
113
- const interactive = deps.io.interactive === true;
114
- const now = deps.now ?? Date.now;
115
- const sleep = deps.sleep ?? ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
116
- const client = makeClient(deps, baseUrl, null);
117
- const startPairing = async () => {
118
- const machineName = flags.name ?? os.hostname();
119
- const secret = randomBytes(32).toString('base64url');
120
- const pollVerifier = randomBytes(24).toString('base64url');
121
- const confirmationSecret = randomBytes(32).toString('base64url');
122
- let begin;
123
- try {
124
- begin = await client.beginPairing({
125
- machine_name: machineName,
126
- credential_hash: sha256Hex(secret),
127
- poll_verifier_hash: sha256Hex(pollVerifier),
128
- confirmation_hash: sha256Hex(confirmationSecret),
129
- });
130
- }
131
- catch (err) {
132
- const code = reportError(deps, err);
133
- onBlocked?.(pairingOutcomeBlocker('not_started', `machine approval could not be started: ${err instanceof Error ? err.message : String(err)}`));
134
- return code;
135
- }
136
- // The approval URL is the server's choice, and this machine is about to put
137
- // it in front of the user's browser. A compromised or misconfigured service
138
- // must not be able to aim that anywhere it likes, so the pairing stops here
139
- // rather than showing a link the user would reasonably trust.
140
- const approvable = checkApproveUrl(begin.approve_url, baseUrl, config.approve_origins.value);
141
- if (!approvable.ok) {
142
- deps.io.err(`Pairing stopped: ${approvable.reason}`);
143
- deps.io.err('next: If you self-host with the dashboard on its own origin, allow it with ' +
144
- '`notifai config set approve_origins <origin>` and run `notifai login` again.');
145
- onBlocked?.(pairingOutcomeBlocker('not_started', `machine approval was refused: ${approvable.reason}`));
146
- return EXIT.auth;
147
- }
148
- const started = {
149
- pairing_id: begin.pairing_id,
150
- code: begin.code,
151
- approve_url: pairingApprovalUrl(begin.approve_url, confirmationSecret),
152
- base_url: baseUrl,
153
- machine_name: machineName,
154
- secret,
155
- poll_verifier: pollVerifier,
156
- expires_at: begin.expires_at,
157
- poll_interval_seconds: begin.poll_interval_seconds,
158
- };
159
- writePendingPairing(deps.env, started);
160
- return started;
161
- };
162
- let route = flags.approval ?? (flags.approvalEmail ? 'notification' : 'qr');
163
- const announce = async (pairing, resumed) => {
164
- const file = await renderPairingQr(deps.env, pairing.approve_url);
165
- deps.io.out(`Pairing code: ${pairing.code}`);
166
- if (route === 'qr') {
167
- if (interactive && deps.io.note)
168
- await deps.io.note(await terminalPairingQr(pairing.approve_url), 'Scan to approve in Notifai');
169
- else {
170
- deps.io.out('Scan to approve in Notifai:');
171
- deps.io.out(await terminalPairingQr(pairing.approve_url, false));
172
- }
173
- deps.io.out(`Local QR image: ${file}`);
174
- }
175
- if (interactive && flags.approval === undefined && flags.approvalEmail === undefined && deps.io.select) {
176
- route = await deps.io.select('Connect this computer', [
177
- { value: 'qr', label: 'Scan the QR', hint: 'Approve in your signed-in Notifai app' },
178
- { value: 'notification', label: 'Send approval notification', hint: 'Enter your Account email' },
179
- { value: 'browser', label: 'Use browser approval' },
180
- ]) ?? 'qr';
181
- }
182
- deps.io.out(`Browser alternative: ${pairing.approve_url}`);
183
- if (route === 'browser' && flags.open !== false)
184
- deps.io.openUrl(pairing.approve_url);
185
- if (route === 'notification') {
186
- const email = (flags.approvalEmail ?? (interactive ? await deps.io.text?.('Account email') : null))?.trim();
187
- if (!email) {
188
- deps.io.err('For an approval notification, run `notifai init --approval notification --approval-email <email>`; QR and browser approval use the same pairing.');
189
- return false;
190
- }
191
- if (email.toLowerCase() !== pairing.approval_email?.toLowerCase()) {
192
- try {
193
- await client.requestPairingNotification(pairing.pairing_id, pairing.poll_verifier, email);
194
- }
195
- catch (err) {
196
- reportError(deps, err);
197
- return false;
198
- }
199
- pairing.approval_email = email;
200
- writePendingPairing(deps.env, pairing);
201
- }
202
- deps.io.out('Approval invitation requested. Review it if it arrives; QR and browser approval remain available.');
203
- }
204
- // The default QR does not open a browser or send an approval notification.
205
- void resumed;
206
- return true;
207
- };
208
- // A handshake started against another service, or under another machine
209
- // name, is not this one; only an identical errand is resumed.
210
- let pairing = readPendingPairing(deps.env, now());
211
- if (pairing !== null && (pairing.base_url !== baseUrl || (flags.name !== undefined && flags.name !== pairing.machine_name))) {
212
- clearPendingPairing(deps.env);
213
- pairing = null;
214
- }
215
- let resumed = pairing !== null;
216
- let active;
217
- if (pairing === null) {
218
- const started = await startPairing();
219
- if (typeof started === 'number')
220
- return started;
221
- active = started;
222
- }
223
- else {
224
- active = pairing;
225
- }
226
- let expiresAt = Date.parse(active.expires_at);
227
- let intervalMs = Math.max(active.poll_interval_seconds, 1) * 1000;
228
- const approvalWaitMessage = () => {
229
- const remainingSec = Math.max(0, Math.ceil((expiresAt - now()) / 1000));
230
- const minutes = Math.floor(remainingSec / 60);
231
- const seconds = remainingSec % 60;
232
- const remaining = minutes > 0 ? `${minutes}m ${seconds.toString().padStart(2, '0')}s` : `${seconds}s`;
233
- return `Waiting for approval… code ${active.code} · ${remaining} left`;
234
- };
235
- const progress = {};
236
- let announced = false;
237
- const announceActive = async () => {
238
- if (announced)
239
- return true;
240
- const ready = await announce(active, resumed);
241
- announced = true;
242
- if (ready && interactive)
243
- progress.spinner = await deps.io.spinner?.(approvalWaitMessage()) ?? null;
244
- return ready;
245
- };
246
- // A resumed handshake the service no longer knows is replaced once, in the
247
- // same run, so the User is handed a fresh code instead of a dead end.
248
- const replaceStale = async () => {
249
- progress.spinner?.stop('Previous approval expired');
250
- progress.spinner = null;
251
- clearPendingPairing(deps.env);
252
- if (!resumed)
253
- return false;
254
- const started = await startPairing();
255
- if (typeof started === 'number')
256
- return false;
257
- active = started;
258
- resumed = false;
259
- expiresAt = Date.parse(active.expires_at);
260
- intervalMs = Math.max(active.poll_interval_seconds, 1) * 1000;
261
- announced = false;
262
- return true;
263
- };
264
- for (;;) {
265
- let poll;
266
- try {
267
- poll = await client.pollPairing(active.pairing_id, active.poll_verifier);
268
- }
269
- catch (err) {
270
- if (err instanceof NetworkError) {
271
- if (!await announceActive()) {
272
- onBlocked?.(pendingApprovalBlocker(active, deps.env));
273
- return EXIT.auth;
274
- }
275
- if (!interactive) {
276
- // The handshake is intact; only this check could not be made.
277
- deps.io.err(err.message);
278
- deps.io.out(`Waiting for approval. Run \`${SETUP_COMMAND}\` again once it is approved.`);
279
- onBlocked?.(pendingApprovalBlocker(active, deps.env));
280
- return EXIT.network;
281
- }
282
- progress.spinner?.message(`Connection lost — retrying… code ${active.code}`);
283
- await sleep(intervalMs);
284
- continue;
285
- }
286
- if (err instanceof ApiCallError && err.code === 'pairing_not_found' && resumed) {
287
- if (await replaceStale())
288
- continue;
289
- return EXIT.auth;
290
- }
291
- progress.spinner?.error('Pairing failed');
292
- return reportError(deps, err);
293
- }
294
- if (poll.status === 'approved' && poll.machine_id) {
295
- deps.store.save({ machineId: poll.machine_id, secret: active.secret, baseUrl, machineName: active.machine_name });
296
- clearPendingPairing(deps.env);
297
- if (interactive) {
298
- progress.spinner?.stop(`Machine "${active.machine_name}" approved`);
299
- await deps.io.outro?.(`Credential stored in ${deps.store.describe()}`);
300
- }
301
- else {
302
- deps.io.out(`Machine "${active.machine_name}" approved. Credential stored in ${deps.store.describe()}.`);
303
- }
304
- return EXIT.ok;
305
- }
306
- if (poll.status === 'denied') {
307
- clearPendingPairing(deps.env);
308
- progress.spinner?.error('Pairing denied');
309
- deps.io.err('Pairing was denied.');
310
- onBlocked?.(pairingOutcomeBlocker('denied', 'you denied this computer'));
311
- return EXIT.auth;
312
- }
313
- // Proof-gated: the server never returns this from lookup. Stop now rather
314
- // than waiting out a TTL no approval can arrive within.
315
- if (poll.status === 'no_active_plan') {
316
- clearPendingPairing(deps.env);
317
- // The server owns which access errand is current — requesting it today,
318
- // choosing a plan after cutover — so its line wins whenever it sends one.
319
- const accessUrl = setupAccessUrl(baseUrl);
320
- const next = poll.next_action ?? `Open ${accessUrl} to set up access, then retry.`;
321
- progress.spinner?.error('Pairing stopped');
322
- // One wall, said once. When a caller takes the blocker it closes the
323
- // visit on this exact errand, so repeating the destination here would
324
- // leave the User three phrasings of one step to choose between.
325
- if (onBlocked === undefined) {
326
- deps.io.err('This account has no active plan or temporary Alpha access.');
327
- deps.io.err(`next: ${next}`);
328
- deps.io.err(`After access is granted, run \`${SETUP_COMMAND}\` again.`);
329
- }
330
- onBlocked?.({
331
- id: 'auth',
332
- title: 'Access',
333
- status: 'gap',
334
- detail: 'this account does not have access to Notifai yet',
335
- technical: { access_url: accessUrl, next_action: next },
336
- remedy: { by: 'user-elsewhere', summary: next },
337
- });
338
- return EXIT.auth;
339
- }
340
- if (poll.status === 'expired') {
341
- if (await replaceStale())
342
- continue;
343
- break;
344
- }
345
- if (!await announceActive()) {
346
- onBlocked?.(pendingApprovalBlocker(active, deps.env));
347
- return EXIT.auth;
348
- }
349
- // Still pending. Nobody at this terminal means nobody to wait for: hand
350
- // the errand back and let the next run resume the same handshake.
351
- if (!interactive) {
352
- deps.io.out(`Waiting for approval. Run \`${SETUP_COMMAND}\` again once it is approved.`);
353
- onBlocked?.(pendingApprovalBlocker(active, deps.env));
354
- return EXIT.auth;
355
- }
356
- if (now() >= expiresAt)
357
- break;
358
- progress.spinner?.message(approvalWaitMessage());
359
- await sleep(Math.min(intervalMs, Math.max(0, expiresAt - now())));
360
- }
361
- clearPendingPairing(deps.env);
362
- progress.spinner?.error('Pairing expired');
363
- deps.io.err(`Pairing expired before it was approved. Run \`${SETUP_COMMAND}\` again.`);
364
- onBlocked?.(pairingOutcomeBlocker('expired', 'the approval expired before it was given'));
365
- return EXIT.auth;
366
- }
367
- export function logoutCommand(deps) {
368
- deps.store.clear();
369
- clearPendingPairing(deps.env);
370
- deps.io.out('Machine credential removed. Revoke it in the dashboard too if the machine is untrusted.');
371
- return EXIT.ok;
372
- }
373
- export function authStatusCommand(deps, flags) {
374
- const credential = deps.store.load();
375
- if (flags.json) {
376
- deps.io.out(JSON.stringify(credential
377
- ? {
378
- signed_in: true,
379
- machine_id: credential.machineId,
380
- machine_name: credential.machineName,
381
- base_url: credential.baseUrl,
382
- store: deps.store.describe(),
383
- }
384
- : { signed_in: false }, null, 2));
385
- return credential ? EXIT.ok : EXIT.auth;
386
- }
387
- if (!credential) {
388
- deps.io.err(`Not signed in. Run \`${SETUP_COMMAND}\`; it will coordinate machine login and device setup.`);
389
- return EXIT.auth;
390
- }
391
- deps.io.out(`Signed in as machine "${credential.machineName}" (${credential.machineId})`);
392
- deps.io.out(`Server: ${credential.baseUrl}`);
393
- deps.io.out(`Credential store: ${deps.store.describe()}`);
394
- return EXIT.ok;
395
- }
396
- /** Show the server's account access decision without attempting a product mutation. */
397
- export async function accessStatusCommand(deps, flags) {
398
- const config = loadLoggedConfig(deps, { cwd: deps.cwd, env: deps.env });
399
- const authed = authedClient(deps, config);
400
- if (!authed)
401
- return EXIT.auth;
402
- try {
403
- const access = await authed.client.accessStatus();
404
- if (flags.json) {
405
- deps.io.out(JSON.stringify(access, null, 2));
406
- return access.status === 'active' ? EXIT.ok : EXIT.failed;
407
- }
408
- if (access.status === 'no_active_plan') {
409
- deps.io.out('This account does not have access to Notifai yet.');
410
- deps.io.out(`next: Open ${setupAccessUrl(authed.baseUrl)} to set up access, then retry.`);
411
- return EXIT.failed;
412
- }
413
- const expiry = access.expires_at ? ` until ${access.expires_at}` : '';
414
- deps.io.out(`Access active (${access.reason})${expiry}`);
415
- return EXIT.ok;
416
- }
417
- catch (err) {
418
- return reportError(deps, err);
419
- }
420
- }
421
- //# sourceMappingURL=commands-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands-auth.js","sourceRoot":"","sources":["../src/commands-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,4BAA4B,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACtG,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAsB,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EACL,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,WAAW,GAGZ,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,sBAAsB,CAAA;AAG7B,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,kBAA0B;IAC/E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAA;IAC/B,GAAG,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;IACtF,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;AACvB,CAAC;AAmBD;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAuB,EAAE,GAAuB;IACrF,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,6DAA6D,OAAO,CAAC,IAAI,GAAG;QACpF,SAAS,EAAE;YACT,eAAe,EAAE,SAAkC;YACnD,OAAO,EAAE;gBACP,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,CAAC;gBAC/C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B;SACF;QACD,MAAM,EAAE;YACN,EAAE,EAAE,WAAW;YACf,OAAO,EAAE,yEAAyE,OAAO,CAAC,IAAI,2CAA2C,OAAO,CAAC,WAAW,EAAE;YAC9J,OAAO,EAAE,aAAa;YACtB,mEAAmE;YACnE,WAAW,EAAE,IAAI;SAClB;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA2C,EAC3C,MAAc;IAEd,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,KAAK;QACb,MAAM;QACN,SAAS,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE;QACvC,MAAM,EAAE;YACN,EAAE,EAAE,WAAW;YACf,OAAO,EACL,OAAO,KAAK,QAAQ;gBAClB,CAAC,CAAC,kFAAkF;gBACpF,CAAC,CAAC,8BAA8B;YACpC,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,IAAI;SAClB;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAiB,EACjB,KAAqG,EACrG,SAA4B;IAE5B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;QAC/E,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;QAC/D,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAmB,EAAE,CAAC,CAAA;IAC5H,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAA;IACrC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,KAAK,IAAI,CAAA;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,YAAoB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;IACzH,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAE9C,MAAM,YAAY,GAAG,KAAK,IAAsC,EAAE;QAChE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAA;QAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QACpD,MAAM,YAAY,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAC1D,MAAM,kBAAkB,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAChE,IAAI,KAAK,CAAA;QACT,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;gBAChC,YAAY,EAAE,WAAW;gBACzB,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC;gBAClC,kBAAkB,EAAE,SAAS,CAAC,YAAY,CAAC;gBAC3C,iBAAiB,EAAE,SAAS,CAAC,kBAAkB,CAAC;aACjD,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YACnC,SAAS,EAAE,CAAC,qBAAqB,CAAC,aAAa,EAAE,0CAA0C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YAC/I,OAAO,IAAI,CAAA;QACb,CAAC;QAED,4EAA4E;QAC5E,4EAA4E;QAC5E,4EAA4E;QAC5E,8DAA8D;QAC9D,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QAC5F,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,oBAAoB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;YACpD,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,6EAA6E;gBAC3E,8EAA8E,CACjF,CAAA;YACD,SAAS,EAAE,CAAC,qBAAqB,CAAC,aAAa,EAAE,iCAAiC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACvG,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QAED,MAAM,OAAO,GAAmB;YAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC;YACtE,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,WAAW;YACzB,MAAM;YACN,aAAa,EAAE,YAAY;YAC3B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;SACnD,CAAA;QACD,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACtC,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC3E,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAuB,EAAE,OAAgB,EAAoB,EAAE;QACrF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;QACjE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI;gBAAE,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,4BAA4B,CAAC,CAAA;iBAC1H,CAAC;gBACJ,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;gBAC1C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAA;YAClE,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAA;QACxC,CAAC;QACD,IAAI,WAAW,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YACvG,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,uBAAuB,EAAE;gBACpD,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,uCAAuC,EAAE;gBACpF,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,4BAA4B,EAAE,IAAI,EAAE,0BAA0B,EAAE;gBAChG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,sBAAsB,EAAE;aACpD,CAAC,IAAI,IAAI,CAAA;QACZ,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;QAC1D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACrF,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;YAC3G,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kJAAkJ,CAAC,CAAA;gBAC/J,OAAO,KAAK,CAAA;YACd,CAAC;YACD,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC;gBAClE,IAAI,CAAC;oBAAC,MAAM,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;gBAAC,CAAC;gBACjG,OAAO,GAAG,EAAE,CAAC;oBAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAAC,OAAO,KAAK,CAAA;gBAAC,CAAC;gBACpD,OAAO,CAAC,cAAc,GAAG,KAAK,CAAA;gBAC9B,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YACxC,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,mGAAmG,CAAC,CAAA;QAClH,CAAC;QACD,2EAA2E;QAC3E,KAAK,OAAO,CAAA;QACZ,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,wEAAwE;IACxE,8DAA8D;IAC9D,IAAI,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;IACjD,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC5H,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7B,OAAO,GAAG,IAAI,CAAA;IAChB,CAAC;IACD,IAAI,OAAO,GAAG,OAAO,KAAK,IAAI,CAAA;IAC9B,IAAI,MAAsB,CAAA;IAC1B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAA;QACpC,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAA;QAC/C,MAAM,GAAG,OAAO,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,OAAO,CAAA;IAClB,CAAC;IAED,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC7C,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;IACjE,MAAM,mBAAmB,GAAG,GAAW,EAAE;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;QAC7C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAA;QACjC,MAAM,SAAS,GACb,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAA;QACrF,OAAO,8BAA8B,MAAM,CAAC,IAAI,MAAM,SAAS,OAAO,CAAA;IACxE,CAAC,CAAA;IACD,MAAM,QAAQ,GAAwC,EAAE,CAAA;IACxD,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,MAAM,cAAc,GAAG,KAAK,IAAsB,EAAE;QAClD,IAAI,SAAS;YAAE,OAAO,IAAI,CAAA;QAC1B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC7C,SAAS,GAAG,IAAI,CAAA;QAChB,IAAI,KAAK,IAAI,WAAW;YAAE,QAAQ,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,mBAAmB,EAAE,CAAC,IAAI,IAAI,CAAA;QACnG,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IAED,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,YAAY,GAAG,KAAK,IAAsB,EAAE;QAChD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAA;QACnD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;QACvB,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAA;QAC1B,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAA;QACpC,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QAC7C,MAAM,GAAG,OAAO,CAAA;QAChB,OAAO,GAAG,KAAK,CAAA;QACf,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACzC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;QAC7D,SAAS,GAAG,KAAK,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,SAAS,CAAC;QACR,IAAI,IAAI,CAAA;QACR,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;QAC1E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,cAAc,EAAE,EAAE,CAAC;oBAAC,SAAS,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAC,OAAO,IAAI,CAAC,IAAI,CAAA;gBAAC,CAAC;gBACxG,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,8DAA8D;oBAC9D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oBACxB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,+BAA+B,aAAa,+BAA+B,CAAC,CAAA;oBACxF,SAAS,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;oBACrD,OAAO,IAAI,CAAC,OAAO,CAAA;gBACrB,CAAC;gBACD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,oCAAoC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC5E,MAAM,KAAK,CAAC,UAAU,CAAC,CAAA;gBACvB,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,IAAI,OAAO,EAAE,CAAC;gBAC/E,IAAI,MAAM,YAAY,EAAE;oBAAE,SAAQ;gBAClC,OAAO,IAAI,CAAC,IAAI,CAAA;YAClB,CAAC;YACD,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAA;YACzC,OAAO,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAA;YACjH,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7B,IAAI,WAAW,EAAE,CAAC;gBAChB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,MAAM,CAAC,YAAY,YAAY,CAAC,CAAA;gBACnE,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,wBAAwB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YACxE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,YAAY,oCAAoC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YAC1G,CAAC;YACD,OAAO,IAAI,CAAC,EAAE,CAAA;QAChB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAA;YACzC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;YAClC,SAAS,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC,CAAA;YACxE,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,0EAA0E;QAC1E,wDAAwD;QACxD,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YACrC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7B,wEAAwE;YACxE,0EAA0E;YAC1E,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,QAAQ,SAAS,gCAAgC,CAAA;YAClF,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAA;YAC1C,qEAAqE;YACrE,sEAAsE;YACtE,gEAAgE;YAChE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;gBACzE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;gBAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kCAAkC,aAAa,WAAW,CAAC,CAAA;YACzE,CAAC;YACD,SAAS,EAAE,CAAC;gBACV,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,kDAAkD;gBAC1D,SAAS,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE;gBACvD,MAAM,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE;aAChD,CAAC,CAAA;YACF,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,MAAM,YAAY,EAAE;gBAAE,SAAQ;YAClC,MAAK;QACP,CAAC;QACD,IAAI,CAAC,MAAM,cAAc,EAAE,EAAE,CAAC;YAC5B,SAAS,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YACrD,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,wEAAwE;QACxE,kEAAkE;QAClE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,+BAA+B,aAAa,+BAA+B,CAAC,CAAA;YACxF,SAAS,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YACrD,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,IAAI,GAAG,EAAE,IAAI,SAAS;YAAE,MAAK;QAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;QAChD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;IACD,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAA;IAC1C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iDAAiD,aAAa,WAAW,CAAC,CAAA;IACtF,SAAS,EAAE,CAAC,qBAAqB,CAAC,SAAS,EAAE,0CAA0C,CAAC,CAAC,CAAA;IACzF,OAAO,IAAI,CAAC,IAAI,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAiB;IAC7C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAClB,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAA;IACtG,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,KAAyB;IAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IACpC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ,UAAU;YACR,CAAC,CAAC;gBACE,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,UAAU,CAAC,SAAS;gBAChC,YAAY,EAAE,UAAU,CAAC,WAAW;gBACpC,QAAQ,EAAE,UAAU,CAAC,OAAO;gBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;aAC7B;YACH,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EACxB,IAAI,EACJ,CAAC,CACF,CACF,CAAA;QACD,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IACzC,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,aAAa,wDAAwD,CAAC,CAAA;QAC1G,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,UAAU,CAAC,WAAW,MAAM,UAAU,CAAC,SAAS,GAAG,CAAC,CAAA;IACzF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,UAAU,CAAC,OAAO,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IACzD,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAiB,EACjB,KAAyB;IAEzB,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,IAAI,CAAA;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAA0B,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAA;QACxE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5C,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;QAC3D,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAA;YAChE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAA;YACzF,OAAO,IAAI,CAAC,MAAM,CAAA;QACpB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACrE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAA;QACxD,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC"}
@@ -1,6 +0,0 @@
1
- import { type CommandDeps } from './commands-core.js';
2
- /** Retire a question so a late answer is rejected rather than silently lost. */
3
- export declare function closeCommand(deps: CommandDeps, requestId: string | undefined, flags?: {
4
- json?: boolean;
5
- pending?: boolean;
6
- }): Promise<number>;