@noxsoft/anima 2.0.2 → 2.0.4

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 (829) hide show
  1. package/README.md +1260 -28
  2. package/dist/accounts-Bth3PpPD.js +260 -0
  3. package/dist/accounts-D8CPKNkN.js +259 -0
  4. package/dist/acp-cli-ByK6lS6c.js +1081 -0
  5. package/dist/acp-cli-CaQCjIw4.js +1084 -0
  6. package/dist/agent-BgIkqd3F.js +725 -0
  7. package/dist/agent-N5BDcge4.js +725 -0
  8. package/dist/agent-events-COH7NDW2.js +182 -0
  9. package/dist/agent-scope-CPphqq-U.js +452 -0
  10. package/dist/agent-scope-DZgptr9J.js +452 -0
  11. package/dist/agent-scope-cj2QCT6R.js +112 -0
  12. package/dist/agents-NEudYMdg.js +774 -0
  13. package/dist/agents.config-Bujs-NIy.js +182 -0
  14. package/dist/agents.config-jp7OLssr.js +182 -0
  15. package/dist/argv-BMZMiW7v.js +73 -0
  16. package/dist/audit-C-UJhfdv.js +2401 -0
  17. package/dist/audit-CeCO7SK5.js +2401 -0
  18. package/dist/auth-BNZsOHGF.js +648 -0
  19. package/dist/auth-DMPZWzEa.js +639 -0
  20. package/dist/auth-choice-5VnaGMD-.js +2681 -0
  21. package/dist/auth-choice-DA2k4vs8.js +2681 -0
  22. package/dist/auth-health-B7FqA26_.js +149 -0
  23. package/dist/auth-health-VO_MPqVX.js +149 -0
  24. package/dist/auth-profiles-BDrNYX_n.js +1564 -0
  25. package/dist/auth-profiles-CxSHydjn.js +2689 -0
  26. package/dist/banner-BtDZPRzi.js +294 -0
  27. package/dist/browser-cli-8yQMpxb8.js +1679 -0
  28. package/dist/browser-cli-Czg3JtDH.js +1676 -0
  29. package/dist/build-info.json +3 -3
  30. package/dist/bundled/boot-md/handler.js +16 -16
  31. package/dist/bundled/bootstrap-extra-files/handler.js +4 -4
  32. package/dist/bundled/command-logger/handler.js +1 -1
  33. package/dist/bundled/session-memory/handler.js +5 -5
  34. package/dist/call-BIzCaKZb.js +282 -0
  35. package/dist/call-BYDpTVCZ.js +282 -0
  36. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  37. package/dist/catalog-CqKiUgu6.js +185 -0
  38. package/dist/catalog-DMfEg-oK.js +185 -0
  39. package/dist/channel-options-BrtCtyrT.js +32 -0
  40. package/dist/channel-options-CO21Gl8p.js +33 -0
  41. package/dist/channel-selection-Bbm1lq3P.js +51 -0
  42. package/dist/channel-selection-CqcX7Ocw.js +51 -0
  43. package/dist/channel-web-DrsT6OAE.js +2162 -0
  44. package/dist/channels-cli-Juyh1S6n.js +1304 -0
  45. package/dist/channels-cli-zNvi1m5c.js +1306 -0
  46. package/dist/channels-status-issues-CqzqshW4.js +18 -0
  47. package/dist/channels-status-issues-DdJdO866.js +18 -0
  48. package/dist/chrome-C4dOMO8z.js +1601 -0
  49. package/dist/chrome-DdcDzAtH.js +1629 -0
  50. package/dist/chrome-U3DRzjJD.js +1601 -0
  51. package/dist/chunk-D2nLsrEW.js +348 -0
  52. package/dist/clack-prompter-BI3RDW5w.js +92 -0
  53. package/dist/clack-prompter-Dwr1m_IZ.js +92 -0
  54. package/dist/cli/daemon-cli.js +1 -1
  55. package/dist/cli-C3cpDaz8.js +99 -0
  56. package/dist/cli-CjWUGdGC.js +101 -0
  57. package/dist/cli-session-BVjY_XrW.js +5463 -0
  58. package/dist/cli-session-gtuYN2Iq.js +5408 -0
  59. package/dist/client-Dswwze5_.js +1692 -0
  60. package/dist/client-LRKFjo4A.js +1692 -0
  61. package/dist/clipboard-BZKS9O1u.js +31 -0
  62. package/dist/clipboard-DES8b1AM.js +31 -0
  63. package/dist/command-format-CP1YTNCl.js +52 -0
  64. package/dist/command-format-CVL4K5cj.js +52 -0
  65. package/dist/command-format-G6N2zghg.js +38 -0
  66. package/dist/command-registry-BBvNvysr.js +248 -0
  67. package/dist/commands-AZ3n8Y2c.js +726 -0
  68. package/dist/commands-BMnD_QRY.js +726 -0
  69. package/dist/commands-registry-cFqZ6Ib4.js +766 -0
  70. package/dist/commands-registry-q13H7ng5.js +766 -0
  71. package/dist/common-CX5458fH.js +287 -0
  72. package/dist/common-DJbnT8ws.js +287 -0
  73. package/dist/completion-cli-BADRBcIl.js +432 -0
  74. package/dist/completion-cli-DMQgiObF.js +431 -0
  75. package/dist/config-CU-Axg8P.js +5704 -0
  76. package/dist/config-DaqbUdkI.js +5705 -0
  77. package/dist/config-cli-BPlbwiuA.js +244 -0
  78. package/dist/config-cli-DXgZJkPU.js +247 -0
  79. package/dist/config-guard-Ba49JNds.js +76 -0
  80. package/dist/config-guard-Cu0qMKZJ.js +93 -0
  81. package/dist/config-kVVm5EYV.js +6523 -0
  82. package/dist/config-sync-CzLnLTXt.js +91 -0
  83. package/dist/config-sync-DuydxPWx.js +91 -0
  84. package/dist/configure-CHgacLyi.js +960 -0
  85. package/dist/configure-DfHXDa1L.js +959 -0
  86. package/dist/context-DzgXOckU.js +60 -0
  87. package/dist/control-service-8_wKHwBa.js +72 -0
  88. package/dist/control-service-BtL1Jto_.js +72 -0
  89. package/dist/cron-cli-BCzSR2c0.js +448 -0
  90. package/dist/cron-cli-CCWNkykU.js +451 -0
  91. package/dist/daemon-cli-Bjkbu9Vy.js +565 -0
  92. package/dist/daemon-cli-CmlHcC1J.js +566 -0
  93. package/dist/daemon-cli.js +16 -16
  94. package/dist/daemon-runtime-C0tz7VAC.js +460 -0
  95. package/dist/daemon-runtime-rUTqCVwJ.js +460 -0
  96. package/dist/deliver-BBggsviM.js +1097 -0
  97. package/dist/deliver-CePITOl8.js +1162 -0
  98. package/dist/deliver-DFnVaetP.js +1097 -0
  99. package/dist/delivery-queue-BJQK3oh5.js +220 -0
  100. package/dist/deps-CeEKhrp7.js +42 -0
  101. package/dist/devices-cli-DQrDMrZH.js +198 -0
  102. package/dist/devices-cli-Oe-A1Dv0.js +195 -0
  103. package/dist/diagnostics-DxMFrBLO.js +35 -0
  104. package/dist/diagnostics-m79ZlMmZ.js +35 -0
  105. package/dist/directory-cli-BL6h8cGF.js +246 -0
  106. package/dist/directory-cli-Cjgmi_sj.js +243 -0
  107. package/dist/dispatcher-DAFbQM-c.js +100 -0
  108. package/dist/dispatcher-DNd40gUn.js +100 -0
  109. package/dist/dist-CqDI82ei.js +929 -0
  110. package/dist/dist-DnHRxR5U.js +929 -0
  111. package/dist/dns-cli-CFtV3BXK.js +200 -0
  112. package/dist/dns-cli-NyIHvQ5S.js +197 -0
  113. package/dist/dock-BdXLb5oY.js +753 -0
  114. package/dist/dock-jYICmNcI.js +753 -0
  115. package/dist/docs-cli-CrOaIK_H.js +161 -0
  116. package/dist/docs-cli-D_cmJDSr.js +159 -0
  117. package/dist/doctor-BpGxKrBl.js +1815 -0
  118. package/dist/doctor-D12wNQPU.js +1813 -0
  119. package/dist/doctor-completion-DeOfofek.js +92 -0
  120. package/dist/doctor-completion-DwjqdEcK.js +92 -0
  121. package/dist/doctor-config-flow-BI3mpkbd.js +1232 -0
  122. package/dist/doctor-config-flow-wMHheFkC.js +1232 -0
  123. package/dist/engine-BCtL-AMw.js +563 -0
  124. package/dist/engine-Bk_UT413.js +563 -0
  125. package/dist/entry.js +5 -5
  126. package/dist/env-v6411I8h.js +32 -0
  127. package/dist/exec-B7sUS164.js +1167 -0
  128. package/dist/exec-approvals-CroGJRUg.js +1221 -0
  129. package/dist/exec-approvals-cli-BTxF_RsH.js +371 -0
  130. package/dist/exec-approvals-cli-n1gyGwH2.js +368 -0
  131. package/dist/exec-mhSykkaa.js +255 -0
  132. package/dist/extensionAPI.js +3 -3
  133. package/dist/frontmatter-BmHq0vRD.js +204 -0
  134. package/dist/gateway-cli-DDBadlrS.js +19971 -0
  135. package/dist/gateway-cli-IZNkOMBe.js +19972 -0
  136. package/dist/gateway-rpc-Dtx8HN-n.js +28 -0
  137. package/dist/gateway-rpc-L2PVSqGj.js +28 -0
  138. package/dist/github-copilot-auth-DKyqDaGU.js +1418 -0
  139. package/dist/github-copilot-auth-DXpOMSd3.js +1418 -0
  140. package/dist/gmail-setup-utils-BKNczIJ9.js +428 -0
  141. package/dist/gmail-setup-utils-co0ppccC.js +428 -0
  142. package/dist/health-Bm8ZTvC3.js +1253 -0
  143. package/dist/health-DUf1gt4E.js +1258 -0
  144. package/dist/health-format-BksT6F68.js +208 -0
  145. package/dist/health-format-uzh1xYLD.js +208 -0
  146. package/dist/heartbeat-visibility-1TJb1Zao.js +98 -0
  147. package/dist/heartbeat-visibility-CwodtdcX.js +98 -0
  148. package/dist/help-format-C6cv_aZp.js +17 -0
  149. package/dist/helpers-N-uSFKOn.js +10 -0
  150. package/dist/hooks-cli-1POsXqOl.js +993 -0
  151. package/dist/hooks-cli-BGjILbze.js +991 -0
  152. package/dist/hooks-status-DE07n5RC.js +356 -0
  153. package/dist/hooks-status-Du-d1jde.js +356 -0
  154. package/dist/image-ops-B_AYV3tp.js +541 -0
  155. package/dist/image-ops-Bp0C6Mvr.js +541 -0
  156. package/dist/index.js +82 -82
  157. package/dist/init-9A0s7bWG.js +122 -0
  158. package/dist/init-DoyCHJDC.js +122 -0
  159. package/dist/installs-D1C9wHAq.js +383 -0
  160. package/dist/installs-Dh4dHayM.js +383 -0
  161. package/dist/ipv4-DCItfaJo.js +1964 -0
  162. package/dist/ipv4-DSOUVx0i.js +1964 -0
  163. package/dist/lanes-BvSnHq2h.js +232 -0
  164. package/dist/lifecycle-core-BY4WIf9g.js +388 -0
  165. package/dist/lifecycle-core-TQKyXO-6.js +387 -0
  166. package/dist/links-CNu_8RZl.js +15 -0
  167. package/dist/links-D2tt2ouh.js +15 -0
  168. package/dist/llm-slug-generator.js +4 -4
  169. package/dist/logging-BIeRw0WR.js +15 -0
  170. package/dist/logging-C7lb3Vjc.js +15 -0
  171. package/dist/login-DXWKewA2.js +59 -0
  172. package/dist/login-Fhh4uWmf.js +61 -0
  173. package/dist/login-pPs3UO38.js +61 -0
  174. package/dist/login-qr-CevLD8cV.js +326 -0
  175. package/dist/login-qr-GF2JMIy-.js +323 -0
  176. package/dist/login-qr-ZYYKD6Yt.js +321 -0
  177. package/dist/logs-cli-CzXbX8HZ.js +242 -0
  178. package/dist/logs-cli-D9ngH9PF.js +245 -0
  179. package/dist/manager-BD5rA3w0.js +3244 -0
  180. package/dist/manager-BDPgBQSH.js +3246 -0
  181. package/dist/manager-DRWMWM--.js +3244 -0
  182. package/dist/manifest-registry-DbvPaBXY.js +748 -0
  183. package/dist/manifest-registry-kHX_MFa1.js +748 -0
  184. package/dist/markdown-tables-CqwihY2m.js +347 -0
  185. package/dist/markdown-tables-DJV7eAJZ.js +348 -0
  186. package/dist/media-lUqN-0O9.js +1342 -0
  187. package/dist/memory-cli-BLXSpgnN.js +868 -0
  188. package/dist/memory-cli-BcGVkkRJ.js +869 -0
  189. package/dist/message-channel-D_jIO87f.js +110 -0
  190. package/dist/migrate-BpVOar4L.js +157 -0
  191. package/dist/migrate-CkgGDkWy.js +157 -0
  192. package/dist/model-selection-Cqt6aJ0G.js +2691 -0
  193. package/dist/models-CExsNQPH.js +2510 -0
  194. package/dist/models-cli-Ba3Jmwev.js +2739 -0
  195. package/dist/models-cli-iDAlsbL2.js +258 -0
  196. package/dist/net-0A_zcaQD.js +218 -0
  197. package/dist/node-cli-ATmwCXIk.js +1319 -0
  198. package/dist/node-cli-DYFR_V25.js +1322 -0
  199. package/dist/node-service-CN4LqR1A.js +67 -0
  200. package/dist/node-service-CWt3MdSC.js +67 -0
  201. package/dist/nodes-cli-BeVmhTz3.js +1197 -0
  202. package/dist/nodes-cli-QeJIfa18.js +1200 -0
  203. package/dist/nodes-screen-DHyWAlla.js +234 -0
  204. package/dist/nodes-screen-qs3jRBPk.js +234 -0
  205. package/dist/note-CSlg2BnB.js +73 -0
  206. package/dist/note-Ctvglhp1.js +73 -0
  207. package/dist/npm-registry-spec-DQd4M22q.js +351 -0
  208. package/dist/npm-registry-spec-PxisIMts.js +351 -0
  209. package/dist/onboard-DeruD10m.js +1166 -0
  210. package/dist/onboard-SAcu5N6N.js +1165 -0
  211. package/dist/onboard-channels-C4iSfFXR.js +672 -0
  212. package/dist/onboard-channels-oVTVgoyg.js +672 -0
  213. package/dist/onboard-helpers-B8roRwLP.js +365 -0
  214. package/dist/onboard-helpers-Dgh26hgP.js +365 -0
  215. package/dist/onboarding-Bi-ac8we.js +911 -0
  216. package/dist/onboarding-C2gjB2u8.js +910 -0
  217. package/dist/orchestrator-DlbAYMQP.js +357 -0
  218. package/dist/orchestrator-DlwVRVDA.js +357 -0
  219. package/dist/outbound-CkKgc6iR.js +2062 -0
  220. package/dist/outbound-Vfm5yDh3.js +214 -0
  221. package/dist/outbound-bs_VK51X.js +214 -0
  222. package/dist/outbound-send-deps-DDjiMfEL.js +55 -0
  223. package/dist/pairing-cli-CJYeuEik.js +118 -0
  224. package/dist/pairing-cli-mqopHI8s.js +121 -0
  225. package/dist/pairing-store-BsXzUDPv.js +388 -0
  226. package/dist/pairing-store-DoNj00-X.js +388 -0
  227. package/dist/path-env-C_xpiG8l.js +89 -0
  228. package/dist/path-env-DSSMHu5A.js +89 -0
  229. package/dist/paths-B1vRVCad.js +126 -0
  230. package/dist/paths-BMuHNFxg.js +238 -0
  231. package/dist/paths-BXQQzXGQ.js +129 -0
  232. package/dist/paths-Buw_geoe.js +54 -0
  233. package/dist/paths-DA9WYabg.js +222 -0
  234. package/dist/paths-DfQGx0_k.js +129 -0
  235. package/dist/pi-auth-json-DOPW3e4X.js +78 -0
  236. package/dist/pi-auth-json-MruLmI_X.js +82 -0
  237. package/dist/pi-auth-json-lae_wwwo.js +80 -0
  238. package/dist/pi-model-discovery-7q0GxMrp.js +3 -0
  239. package/dist/pi-tools.policy-Csmla32P.js +200 -0
  240. package/dist/pi-tools.policy-xYdDLEv9.js +200 -0
  241. package/dist/plugin-auto-enable-CViVVWgg.js +282 -0
  242. package/dist/plugin-auto-enable-CjZ238UI.js +282 -0
  243. package/dist/plugin-registry-B4Aw2hzq.js +32 -0
  244. package/dist/plugin-registry-DW81arxW.js +32 -0
  245. package/dist/plugin-sdk/cli/cli-name.d.ts +1 -1
  246. package/dist/plugin-sdk/config/paths.d.ts +2 -2
  247. package/dist/plugin-sdk/index.js +7 -7
  248. package/dist/plugins-DhcGAPDB.js +38 -0
  249. package/dist/plugins-DtghNRtM.js +168 -0
  250. package/dist/plugins-cli-4vWTmOAb.js +736 -0
  251. package/dist/plugins-cli-CdTMbP0X.js +734 -0
  252. package/dist/polls-D6eCdatA.js +1343 -0
  253. package/dist/ports-BtZx-JKD.js +96 -0
  254. package/dist/ports-C8bKN8s0.js +96 -0
  255. package/dist/ports-DHiKnPRX.js +344 -0
  256. package/dist/ports-vd93M_Pt.js +317 -0
  257. package/dist/program-CX3aUVeb.js +176 -0
  258. package/dist/program-context-BPos0ivo.js +496 -0
  259. package/dist/progress-oiAjiiNi.js +133 -0
  260. package/dist/prompt-style-Cm4wOtKm.js +9 -0
  261. package/dist/pw-ai-4QbK5YFe.js +1865 -0
  262. package/dist/pw-ai-BWz3Cxt7.js +1868 -0
  263. package/dist/pw-ai-C83HBue2.js +1867 -0
  264. package/dist/qmd-manager-BcMeZiGD.js +938 -0
  265. package/dist/qmd-manager-CPypGJ0P.js +935 -0
  266. package/dist/qmd-manager-CRrSkfia.js +937 -0
  267. package/dist/register.agent-DDY8KJhn.js +265 -0
  268. package/dist/register.agent-DKawm-9d.js +1003 -0
  269. package/dist/register.anima-CEWUo29k.js +193 -0
  270. package/dist/register.anima-DBWz2rk_.js +193 -0
  271. package/dist/register.configure-BX67qV8k.js +103 -0
  272. package/dist/register.configure-CWsySuiq.js +101 -0
  273. package/dist/register.maintenance-0k-ZNhDg.js +543 -0
  274. package/dist/register.maintenance-BIwx1fzX.js +543 -0
  275. package/dist/register.message-CXPsoakA.js +657 -0
  276. package/dist/register.message-DA3jvfgI.js +660 -0
  277. package/dist/register.onboard-C4HG7Hqv.js +170 -0
  278. package/dist/register.onboard-GOpdif-j.js +170 -0
  279. package/dist/register.setup-B17vZT7C.js +175 -0
  280. package/dist/register.setup-GJyUDCqh.js +175 -0
  281. package/dist/register.status-health-sessions-D5876dGx.js +313 -0
  282. package/dist/register.status-health-sessions-lOewVIZR.js +142 -0
  283. package/dist/register.subclis-Dwnujj5C.js +255 -0
  284. package/dist/reply-CR5T_oQJ.js +32212 -0
  285. package/dist/reply-prefix-BcrS4Umd.js +100 -0
  286. package/dist/reply-prefix-Btb5o2NH.js +100 -0
  287. package/dist/reply-r089HuRA.js +32212 -0
  288. package/dist/routes-B4czFzIb.js +1820 -0
  289. package/dist/routes-ucJWAk5O.js +1820 -0
  290. package/dist/rpc-BnKxnQ0v.js +70 -0
  291. package/dist/rpc-DgE-xnyx.js +70 -0
  292. package/dist/run-main-B74kv84C.js +371 -0
  293. package/dist/runtime-guard-CKFdts2L.js +60 -0
  294. package/dist/sandbox-CJTS3er6.js +858 -0
  295. package/dist/sandbox-DBSiVHt_.js +859 -0
  296. package/dist/sandbox-cli-CrkjyU5M.js +461 -0
  297. package/dist/sandbox-cli-D1r5y6Sz.js +458 -0
  298. package/dist/security-cli-BZUdnkhn.js +462 -0
  299. package/dist/security-cli-DS09ebvA.js +465 -0
  300. package/dist/server-context-C0xZbYhg.js +824 -0
  301. package/dist/server-context-DVh2z7om.js +824 -0
  302. package/dist/server-node-events-bu9lpkMH.js +233 -0
  303. package/dist/server-node-events-i1Rrww31.js +231 -0
  304. package/dist/service-CJJwLEor.js +642 -0
  305. package/dist/service-DxLxBhaU.js +642 -0
  306. package/dist/service-audit-DB4Y3Ekp.js +488 -0
  307. package/dist/service-audit-M8y4TXVb.js +488 -0
  308. package/dist/session-CGxOLFs2.js +179 -0
  309. package/dist/session-DTTbdKb0.js +181 -0
  310. package/dist/session-cost-usage-FcdJl9c3.js +600 -0
  311. package/dist/session-cost-usage-qdfsGU2a.js +600 -0
  312. package/dist/session-yOhWcsD2.js +181 -0
  313. package/dist/sessions-B-Cu7JZq.js +1296 -0
  314. package/dist/sessions-BgLN4KFr.js +180 -0
  315. package/dist/sessions-CnRjwdVr.js +1296 -0
  316. package/dist/sessions-wRKla1Qh.js +2038 -0
  317. package/dist/shared-DS3UaJSP.js +66 -0
  318. package/dist/shared-DxNHzky3.js +77 -0
  319. package/dist/shared-Qpt4hUDi.js +66 -0
  320. package/dist/shared-kzrojZ1B.js +77 -0
  321. package/dist/skill-scanner-DLJji5Ye.js +263 -0
  322. package/dist/skills-BWFIEp4j.js +807 -0
  323. package/dist/skills-DV4zKdCx.js +808 -0
  324. package/dist/skills-cli-BY53ILm2.js +289 -0
  325. package/dist/skills-cli-CO3gxl8A.js +286 -0
  326. package/dist/skills-status-DX5pcqY3.js +166 -0
  327. package/dist/skills-status-zhcKzGkp.js +166 -0
  328. package/dist/sqlite-B6MojU1I.js +321 -0
  329. package/dist/sqlite-CuprTGR7.js +453 -0
  330. package/dist/sqlite-dzD-jMjs.js +368 -0
  331. package/dist/start-Cu3aLoSf.js +297 -0
  332. package/dist/start-Dz7tMAl8.js +296 -0
  333. package/dist/status-CaSxhxfV.js +2132 -0
  334. package/dist/status-D2C0JCX3.js +2137 -0
  335. package/dist/status-DlFMsQzh.js +27 -0
  336. package/dist/status-G0CITnKR.js +27 -0
  337. package/dist/status.update-CHjhVxJY.js +79 -0
  338. package/dist/status.update-DVFelehi.js +79 -0
  339. package/dist/subagent-registry-3Xb4el-8.js +14 -0
  340. package/dist/subagent-registry-CdSjz14I.js +2760 -0
  341. package/dist/subagent-registry-DNDhbHWi.js +2759 -0
  342. package/dist/subsystem-DfKstnEK.js +860 -0
  343. package/dist/system-cli-B5mt0FWa.js +82 -0
  344. package/dist/system-cli-Dg3UQ3Zz.js +79 -0
  345. package/dist/systemd-B43AvOGx.js +452 -0
  346. package/dist/systemd-RpPE0XGg.js +452 -0
  347. package/dist/systemd-hints-DMJT-Bbc.js +36 -0
  348. package/dist/systemd-hints-vRInKcz9.js +36 -0
  349. package/dist/systemd-linger-Dzyxqsod.js +75 -0
  350. package/dist/systemd-linger-EujbmI5A.js +75 -0
  351. package/dist/table-DhXHfRX2.js +279 -0
  352. package/dist/table-bWCLW-3P.js +279 -0
  353. package/dist/timeout-Ddn-5kAO.js +232 -0
  354. package/dist/tokens-3psI_Qk2.js +14 -0
  355. package/dist/tokens-BaM53PEx.js +14 -0
  356. package/dist/trash-Bmxs1Rnm.js +23 -0
  357. package/dist/trash-C39a6hKA.js +23 -0
  358. package/dist/tui-BHgBWhHE.js +3894 -0
  359. package/dist/tui-cli-B9Sq5-cC.js +50 -0
  360. package/dist/tui-cli-Dw7v4JoJ.js +47 -0
  361. package/dist/tui-mUwDwqvd.js +3894 -0
  362. package/dist/update-DF0GHG0j.js +317 -0
  363. package/dist/update-DoZLVjva.js +317 -0
  364. package/dist/update-check-Bt1dVPVN.js +400 -0
  365. package/dist/update-check-D5qAKes7.js +400 -0
  366. package/dist/update-cli-BNu2Oi7H.js +1105 -0
  367. package/dist/update-cli-D36AmALA.js +1105 -0
  368. package/dist/update-runner-CNQQaTwA.js +894 -0
  369. package/dist/update-runner-CvxZmbu-.js +894 -0
  370. package/dist/usage-BGCwNnjk.js +4516 -0
  371. package/dist/utils-DZ8pnOD5.js +243 -0
  372. package/dist/web-B5QG839O.js +46842 -0
  373. package/dist/web-Cmnvk9v0.js +2203 -0
  374. package/dist/web-Cv2KnTnL.js +63 -0
  375. package/dist/webhooks-cli-B6y89Pj_.js +319 -0
  376. package/dist/webhooks-cli-BDzHON4w.js +316 -0
  377. package/dist/whatsapp-actions-C_5MwVxM.js +45 -0
  378. package/dist/whatsapp-actions-hgYA12To.js +53 -0
  379. package/dist/whatsapp-actions-zTiVOoOV.js +49 -0
  380. package/dist/widearea-dns-BeIdnISJ.js +127 -0
  381. package/dist/widearea-dns-CF1gxpJ-.js +127 -0
  382. package/dist/workspace-DLna1IxR.js +649 -0
  383. package/dist/ws-log-Q4wO1Ztb.js +267 -0
  384. package/dist/ws-log-xF0kxDzp.js +267 -0
  385. package/package.json +1 -2
  386. package/dist/accounts-Cc5E4IDO.js +0 -260
  387. package/dist/accounts-CcVrwKqv.js +0 -259
  388. package/dist/acp-cli-DvphOKuh.js +0 -1081
  389. package/dist/acp-cli-p28pQ65a.js +0 -1084
  390. package/dist/agent-Cj7uDJaZ.js +0 -725
  391. package/dist/agent-Cuj9-2sT.js +0 -725
  392. package/dist/agent-events-BEBQsyE5.js +0 -182
  393. package/dist/agent-scope-BVf4aSwY.js +0 -112
  394. package/dist/agent-scope-OZi7lb8S.js +0 -452
  395. package/dist/agent-scope-V1bi9OYL.js +0 -452
  396. package/dist/agents-BUWqn_Ui.js +0 -774
  397. package/dist/agents.config-Dvo2ULxs.js +0 -182
  398. package/dist/agents.config-d6H0_3oj.js +0 -182
  399. package/dist/argv-DqUHKf0o.js +0 -73
  400. package/dist/audit-C6okOOSh.js +0 -2401
  401. package/dist/audit-VWjIdwC7.js +0 -2401
  402. package/dist/auth-91o2YM96.js +0 -648
  403. package/dist/auth-choice-CAmACV13.js +0 -2681
  404. package/dist/auth-choice-p3SeHPj2.js +0 -2681
  405. package/dist/auth-health-B_jXrWe6.js +0 -149
  406. package/dist/auth-health-DCicUKYR.js +0 -149
  407. package/dist/auth-lZ26wsbN.js +0 -639
  408. package/dist/auth-profiles-CCDD56dU.js +0 -1564
  409. package/dist/auth-profiles-DxI8L7bs.js +0 -2689
  410. package/dist/banner-Cohn04J6.js +0 -294
  411. package/dist/browser-cli-DANzjztE.js +0 -1676
  412. package/dist/browser-cli-WjsVH741.js +0 -1679
  413. package/dist/call-BAHvlu2G.js +0 -282
  414. package/dist/call-Ct7EGP_L.js +0 -282
  415. package/dist/catalog-BAayBt1L.js +0 -185
  416. package/dist/catalog-BNsf97BM.js +0 -185
  417. package/dist/channel-options-Dx9nPlX8.js +0 -33
  418. package/dist/channel-options-ZdvXrTGs.js +0 -32
  419. package/dist/channel-selection-CujyiWGM.js +0 -51
  420. package/dist/channel-selection-DfGpCyh2.js +0 -51
  421. package/dist/channel-web-CC0hkgkR.js +0 -2162
  422. package/dist/channels-cli-D7lNBpIb.js +0 -1304
  423. package/dist/channels-cli-DUPG8WDv.js +0 -1306
  424. package/dist/channels-status-issues-DBc1pU_R.js +0 -18
  425. package/dist/channels-status-issues-DjO9MHIG.js +0 -18
  426. package/dist/chrome-Bi6iZ5sG.js +0 -1601
  427. package/dist/chrome-DNSv7Cpy.js +0 -1629
  428. package/dist/chrome-DScZx4Lk.js +0 -1601
  429. package/dist/chunk-mxPVo000.js +0 -348
  430. package/dist/clack-prompter-B0kl7shw.js +0 -92
  431. package/dist/clack-prompter-B1YxZdRy.js +0 -92
  432. package/dist/cli-CfHUkOD0.js +0 -101
  433. package/dist/cli-ClMrIh6l.js +0 -99
  434. package/dist/cli-session-BkPTd9Pk.js +0 -5463
  435. package/dist/cli-session-Dd8DKb5a.js +0 -5408
  436. package/dist/client-C1avc0vD.js +0 -1692
  437. package/dist/client-CC94YZrT.js +0 -1692
  438. package/dist/clipboard-B2fBy8tG.js +0 -31
  439. package/dist/clipboard-BbGnZskJ.js +0 -31
  440. package/dist/command-format-Clp46jkj.js +0 -38
  441. package/dist/command-format-DELazozB.js +0 -52
  442. package/dist/command-format-SkzzRqR1.js +0 -52
  443. package/dist/command-registry-DZ4hkmA0.js +0 -248
  444. package/dist/commands-DtYZJSPn.js +0 -568
  445. package/dist/commands-Dujk1JmY.js +0 -568
  446. package/dist/commands-registry-Bd0xbvwG.js +0 -766
  447. package/dist/commands-registry-DYfRSVF3.js +0 -766
  448. package/dist/common-D6bu0zHC.js +0 -287
  449. package/dist/common-zW9Y2P1B.js +0 -287
  450. package/dist/completion-cli-tSe7Pmqm.js +0 -431
  451. package/dist/completion-cli-vn4IScs5.js +0 -432
  452. package/dist/config-C8rUDJXY.js +0 -5704
  453. package/dist/config-CLZ_XGVw.js +0 -6523
  454. package/dist/config-SY8M0kM_.js +0 -5705
  455. package/dist/config-cli-1V7D2Wsw.js +0 -247
  456. package/dist/config-cli-CjWEC81L.js +0 -244
  457. package/dist/config-guard-BW2gpKj_.js +0 -93
  458. package/dist/config-guard-BvxuzHpo.js +0 -76
  459. package/dist/config-sync-CoIIbEOe.js +0 -91
  460. package/dist/config-sync-DvAttep0.js +0 -91
  461. package/dist/configure-Bf0oupCE.js +0 -959
  462. package/dist/configure-DRM-7zFf.js +0 -960
  463. package/dist/context-D5iEFzv9.js +0 -60
  464. package/dist/control-service-C8m8F9pr.js +0 -72
  465. package/dist/control-service-DKotCWCg.js +0 -72
  466. package/dist/cron-cli-DB_FLYHD.js +0 -448
  467. package/dist/cron-cli-bxm5lrrO.js +0 -451
  468. package/dist/daemon-cli-1LsOnICv.js +0 -566
  469. package/dist/daemon-cli-CC2NrJ7a.js +0 -565
  470. package/dist/daemon-runtime-BXZhtBL9.js +0 -460
  471. package/dist/daemon-runtime-DW4USC7r.js +0 -460
  472. package/dist/deliver-B4HuPwJA.js +0 -1162
  473. package/dist/deliver-LiY5oL52.js +0 -1097
  474. package/dist/deliver-xrmk7xjh.js +0 -1097
  475. package/dist/delivery-queue-TnQykYsg.js +0 -220
  476. package/dist/deps-CMMOiOsF.js +0 -42
  477. package/dist/devices-cli-Be5he2SA.js +0 -195
  478. package/dist/devices-cli-z6ecoFe9.js +0 -198
  479. package/dist/diagnostics-Dj75aEHN.js +0 -35
  480. package/dist/diagnostics-DlIw6fqD.js +0 -35
  481. package/dist/directory-cli-CEy-0nxj.js +0 -243
  482. package/dist/directory-cli-DpzKcigr.js +0 -246
  483. package/dist/dispatcher-10Shiuz3.js +0 -100
  484. package/dist/dispatcher-3Jae6AiW.js +0 -100
  485. package/dist/dns-cli-Bat1pkc-.js +0 -200
  486. package/dist/dns-cli-NohNyEo0.js +0 -197
  487. package/dist/dock-DbxBBv30.js +0 -753
  488. package/dist/dock-cPBY4qGl.js +0 -753
  489. package/dist/docs-cli-BWp6p-Tq.js +0 -161
  490. package/dist/docs-cli-x22FnZfL.js +0 -159
  491. package/dist/doctor-BrT5m_on.js +0 -1815
  492. package/dist/doctor-Pp2HVnjM.js +0 -1813
  493. package/dist/doctor-completion-DNTimX9o.js +0 -92
  494. package/dist/doctor-completion-ylN9QAJ6.js +0 -92
  495. package/dist/doctor-config-flow-D1w3700T.js +0 -1232
  496. package/dist/doctor-config-flow-Dq50iE1R.js +0 -1232
  497. package/dist/engine-B9avUJL5.js +0 -563
  498. package/dist/engine-BiUQ25D4.js +0 -563
  499. package/dist/env-0lJfCPsw.js +0 -32
  500. package/dist/exec-BenD3A5l.js +0 -1167
  501. package/dist/exec-Bv3pyjeM.js +0 -255
  502. package/dist/exec-approvals-CdLmKX2R.js +0 -1221
  503. package/dist/exec-approvals-cli-DXfV6G8H.js +0 -368
  504. package/dist/exec-approvals-cli-J2cZs10o.js +0 -371
  505. package/dist/frontmatter-YijVi0FQ.js +0 -204
  506. package/dist/gateway-cli-DOAbA0pc.js +0 -19972
  507. package/dist/gateway-cli-QpWtBhQy.js +0 -19971
  508. package/dist/gateway-rpc-DJKBil9s.js +0 -28
  509. package/dist/gateway-rpc-DVterpLP.js +0 -28
  510. package/dist/github-copilot-auth-4IUFp669.js +0 -1418
  511. package/dist/github-copilot-auth-C9E0IROs.js +0 -1418
  512. package/dist/gmail-setup-utils-BPo_LkKI.js +0 -428
  513. package/dist/gmail-setup-utils-D3Yqgor7.js +0 -428
  514. package/dist/health-BeZnqp6m.js +0 -1258
  515. package/dist/health-Cn2OoVWZ.js +0 -1253
  516. package/dist/health-format-CdP99j3Y.js +0 -208
  517. package/dist/health-format-JEChH08S.js +0 -208
  518. package/dist/heartbeat-visibility-BL3WAchI.js +0 -98
  519. package/dist/heartbeat-visibility-CQ9QimI7.js +0 -98
  520. package/dist/help-format-Dl4bsrLI.js +0 -17
  521. package/dist/helpers-ZKNRexvX.js +0 -10
  522. package/dist/hooks-cli-D99hXt7K.js +0 -991
  523. package/dist/hooks-cli-DMB8RiEO.js +0 -993
  524. package/dist/hooks-status-B-e96dZj.js +0 -356
  525. package/dist/hooks-status-C_9sE0ox.js +0 -356
  526. package/dist/image-ops-Dlt3T7th.js +0 -541
  527. package/dist/image-ops-omlvdfah.js +0 -541
  528. package/dist/init-Bm04RagW.js +0 -122
  529. package/dist/init-CaJBf4p1.js +0 -122
  530. package/dist/installs-C2iMRBVz.js +0 -383
  531. package/dist/installs-D-cPGdCw.js +0 -383
  532. package/dist/ipv4-Bf7NS3QU.js +0 -1964
  533. package/dist/ipv4-wWNs8IH_.js +0 -1964
  534. package/dist/lanes-CNxj3tit.js +0 -232
  535. package/dist/lifecycle-core-B_7XRcvF.js +0 -388
  536. package/dist/lifecycle-core-By83PVAK.js +0 -387
  537. package/dist/links-BfjHVTB_.js +0 -15
  538. package/dist/links-DPGe0OHw.js +0 -15
  539. package/dist/logging-DB6BQmhi.js +0 -15
  540. package/dist/logging-mcb66J0p.js +0 -15
  541. package/dist/login-BDCg6D0N.js +0 -61
  542. package/dist/login-BDfnbjnZ.js +0 -59
  543. package/dist/login-BqH1itcg.js +0 -61
  544. package/dist/login-qr-CyOw3R4r.js +0 -321
  545. package/dist/login-qr-D8ECtb72.js +0 -323
  546. package/dist/login-qr-RnR7e4Bw.js +0 -326
  547. package/dist/logs-cli--j89L74J.js +0 -245
  548. package/dist/logs-cli-DpEMg_Gq.js +0 -242
  549. package/dist/manager-B4OyvcxT.js +0 -3244
  550. package/dist/manager-Cqc1CeH7.js +0 -3246
  551. package/dist/manager-DUyQPFvj.js +0 -3244
  552. package/dist/manifest-registry-CW1zCyRF.js +0 -748
  553. package/dist/manifest-registry-D4lM2RdV.js +0 -748
  554. package/dist/markdown-tables-BT1X6jqH.js +0 -347
  555. package/dist/markdown-tables-DHgOK2vI.js +0 -348
  556. package/dist/media-THyainiE.js +0 -1342
  557. package/dist/memory-cli-BKocCWXM.js +0 -868
  558. package/dist/memory-cli-Jmma-xI_.js +0 -869
  559. package/dist/message-channel-dSTVVCyX.js +0 -110
  560. package/dist/migrate-BR6iAIjO.js +0 -157
  561. package/dist/migrate-D0EcMs0f.js +0 -157
  562. package/dist/model-selection-YcSr9CgC.js +0 -2691
  563. package/dist/models-1vUQBVfw.js +0 -2510
  564. package/dist/models-cli-BK3BwUhL.js +0 -2739
  565. package/dist/models-cli-DECrM8oA.js +0 -258
  566. package/dist/net-B5lXhYLV.js +0 -218
  567. package/dist/node-cli-cLHUNpPD.js +0 -1319
  568. package/dist/node-cli-fO7Y132S.js +0 -1322
  569. package/dist/node-service-BFxHJsno.js +0 -67
  570. package/dist/node-service-DUnan4uK.js +0 -67
  571. package/dist/nodes-cli-BCq35E6N.js +0 -1200
  572. package/dist/nodes-cli-vD7MwAKP.js +0 -1197
  573. package/dist/nodes-screen-1YiLkqr5.js +0 -234
  574. package/dist/nodes-screen-DZeD8hE5.js +0 -234
  575. package/dist/note-Bi8Wb8DV.js +0 -73
  576. package/dist/note-uiuPxhyX.js +0 -73
  577. package/dist/npm-registry-spec-B-XIShkB.js +0 -351
  578. package/dist/npm-registry-spec-za3itb5Y.js +0 -351
  579. package/dist/onboard-Ds6w_sWo.js +0 -1165
  580. package/dist/onboard-SAVx3bp4.js +0 -1166
  581. package/dist/onboard-channels-Cg_EkBa4.js +0 -672
  582. package/dist/onboard-channels-D7NbA55V.js +0 -672
  583. package/dist/onboard-helpers-DO_hgZb9.js +0 -365
  584. package/dist/onboard-helpers-_XgJgeqh.js +0 -365
  585. package/dist/onboarding-3hLmDd0r.js +0 -911
  586. package/dist/onboarding-B4LKLsbU.js +0 -910
  587. package/dist/orchestrator-BKzmyBWy.js +0 -357
  588. package/dist/orchestrator-BN3QCz2s.js +0 -357
  589. package/dist/outbound-BgA9hNlP.js +0 -2062
  590. package/dist/outbound-CjdvVhUI.js +0 -214
  591. package/dist/outbound-DOGe6qb2.js +0 -214
  592. package/dist/outbound-send-deps-Du5aBpd7.js +0 -55
  593. package/dist/pairing-cli-2vnyg_Nd.js +0 -118
  594. package/dist/pairing-cli-BH1KQtNV.js +0 -121
  595. package/dist/pairing-store-DJz_9Gv0.js +0 -388
  596. package/dist/pairing-store-DmOzxcuk.js +0 -388
  597. package/dist/path-env-Bu6k0jDQ.js +0 -89
  598. package/dist/path-env-C0zQSjw8.js +0 -89
  599. package/dist/paths-BTc4nk-6.js +0 -126
  600. package/dist/paths-BgUi2Z2G.js +0 -54
  601. package/dist/paths-C6VCWKo3.js +0 -238
  602. package/dist/paths-CCxa0o9c.js +0 -222
  603. package/dist/paths-CxRf2rBG.js +0 -129
  604. package/dist/paths-hcX1Gqg5.js +0 -129
  605. package/dist/pi-auth-json-B68R7q7_.js +0 -82
  606. package/dist/pi-auth-json-CR0jXAgq.js +0 -78
  607. package/dist/pi-auth-json-ZYzi3nxs.js +0 -80
  608. package/dist/pi-model-discovery-Cxs4pvC2.js +0 -3
  609. package/dist/pi-tools.policy-D81U5xy0.js +0 -200
  610. package/dist/pi-tools.policy-DSHkkb5b.js +0 -200
  611. package/dist/plugin-auto-enable-CxF4bpDN.js +0 -282
  612. package/dist/plugin-auto-enable-jNaAeyEh.js +0 -282
  613. package/dist/plugin-registry-C7XWotZG.js +0 -32
  614. package/dist/plugin-registry-DcUCbGax.js +0 -32
  615. package/dist/plugins-B362e77G.js +0 -168
  616. package/dist/plugins-CmSUIUNi.js +0 -38
  617. package/dist/plugins-cli-BsCEnoQ7.js +0 -734
  618. package/dist/plugins-cli-QSIsMUG7.js +0 -736
  619. package/dist/polls-CItfB1H8.js +0 -1343
  620. package/dist/ports-BVLMN1Sr.js +0 -96
  621. package/dist/ports-CqLSlU6Z.js +0 -317
  622. package/dist/ports-D94CwCrv.js +0 -344
  623. package/dist/ports-D_NHthOz.js +0 -96
  624. package/dist/program-DkJHjI0R.js +0 -176
  625. package/dist/program-context-DnyGM2SC.js +0 -496
  626. package/dist/progress-Bek_GyWS.js +0 -133
  627. package/dist/prompt-style-lu0clOOE.js +0 -9
  628. package/dist/pw-ai-BLVMuSLv.js +0 -1867
  629. package/dist/pw-ai-DZJWEF_f.js +0 -1865
  630. package/dist/pw-ai-dzf-ptcn.js +0 -1868
  631. package/dist/qmd-manager-Cur_Ekn0.js +0 -937
  632. package/dist/qmd-manager-DNAUuwjK.js +0 -938
  633. package/dist/qmd-manager-DepEoASu.js +0 -935
  634. package/dist/register.agent-CSWvzOkR.js +0 -265
  635. package/dist/register.agent-UeH2NXmH.js +0 -1003
  636. package/dist/register.anima-DOdee0dh.js +0 -193
  637. package/dist/register.anima-HHDWsz6r.js +0 -193
  638. package/dist/register.configure-CSJFxdz9.js +0 -103
  639. package/dist/register.configure-D84Fvcz4.js +0 -101
  640. package/dist/register.maintenance-B3pvNbZb.js +0 -543
  641. package/dist/register.maintenance-BKVOwkw6.js +0 -543
  642. package/dist/register.message-BAO6CPl2.js +0 -657
  643. package/dist/register.message-OXoOKE_6.js +0 -660
  644. package/dist/register.onboard-BK_ixVmD.js +0 -170
  645. package/dist/register.onboard-cfCaPx6j.js +0 -170
  646. package/dist/register.setup-BGfDnzph.js +0 -175
  647. package/dist/register.setup-Y-Q74M-0.js +0 -175
  648. package/dist/register.status-health-sessions-CT14eitH.js +0 -142
  649. package/dist/register.status-health-sessions-TfZMzAUn.js +0 -313
  650. package/dist/register.subclis-BZwdlNHC.js +0 -255
  651. package/dist/reply-mlsExaZm.js +0 -32212
  652. package/dist/reply-prefix-B0CfR4bM.js +0 -100
  653. package/dist/reply-prefix-w4a39ybC.js +0 -100
  654. package/dist/reply-qalRISe_.js +0 -32212
  655. package/dist/routes-CENsHJyg.js +0 -1820
  656. package/dist/routes-DO0HqW2e.js +0 -1820
  657. package/dist/rpc-C0pjNhBi.js +0 -70
  658. package/dist/rpc-DZ44PIXE.js +0 -70
  659. package/dist/run-main-BMpKw8Mp.js +0 -371
  660. package/dist/runtime-guard-BSUFiAQV.js +0 -60
  661. package/dist/sandbox-BIGfMYEI.js +0 -858
  662. package/dist/sandbox-DxP3IpUP.js +0 -859
  663. package/dist/sandbox-cli-DtLGH8sL.js +0 -461
  664. package/dist/sandbox-cli-_Tg7lfJ_.js +0 -458
  665. package/dist/security-cli-BRwgbedo.js +0 -462
  666. package/dist/security-cli-D3bSuyZt.js +0 -465
  667. package/dist/server-context-49XFFxFg.js +0 -824
  668. package/dist/server-context-LrlgrZzS.js +0 -824
  669. package/dist/server-node-events-Dm52i7NW.js +0 -231
  670. package/dist/server-node-events-QX523UyF.js +0 -233
  671. package/dist/service-BNVpYcQe.js +0 -642
  672. package/dist/service-D56aMXUB.js +0 -642
  673. package/dist/service-audit-D0X_XAB2.js +0 -488
  674. package/dist/service-audit-qmf6XMmP.js +0 -488
  675. package/dist/session-CrQQLLhx.js +0 -179
  676. package/dist/session-LocsOOWJ.js +0 -181
  677. package/dist/session-Vlce2BAT.js +0 -181
  678. package/dist/session-cost-usage-BwiTZuKl.js +0 -600
  679. package/dist/session-cost-usage-DT9YNXTJ.js +0 -600
  680. package/dist/sessions-BfV53TbG.js +0 -1296
  681. package/dist/sessions-BimpX_km.js +0 -180
  682. package/dist/sessions-DcXpzig0.js +0 -1296
  683. package/dist/sessions-Wd18dukK.js +0 -2038
  684. package/dist/shared-Bsr69u_7.js +0 -77
  685. package/dist/shared-Cgly1vPb.js +0 -66
  686. package/dist/shared-JOo05hST.js +0 -66
  687. package/dist/shared-f7dvQsi7.js +0 -77
  688. package/dist/skill-scanner-CkaVLABv.js +0 -263
  689. package/dist/skills-B-G7UHOa.js +0 -808
  690. package/dist/skills-B5LQx4lT.js +0 -807
  691. package/dist/skills-cli-DUGe2ZWW.js +0 -286
  692. package/dist/skills-cli-DtOk0bvK.js +0 -289
  693. package/dist/skills-status-Clq9ZnYu.js +0 -166
  694. package/dist/skills-status-JQluhU-P.js +0 -166
  695. package/dist/sqlite-BukcjdJa.js +0 -321
  696. package/dist/sqlite-CGcOZZ0C.js +0 -368
  697. package/dist/sqlite-Ck6f9KWc.js +0 -453
  698. package/dist/start--xmSFepB.js +0 -372
  699. package/dist/start-BdlZbqrr.js +0 -371
  700. package/dist/status-BgoeFm6g.js +0 -2137
  701. package/dist/status-BjjDrUq7.js +0 -27
  702. package/dist/status-Ct0DgOZ-.js +0 -2132
  703. package/dist/status-RA_uNmK0.js +0 -27
  704. package/dist/status.update-BjOH3GlS.js +0 -79
  705. package/dist/status.update-DLU1qBf0.js +0 -79
  706. package/dist/subagent-registry-9RLdKxES.js +0 -2760
  707. package/dist/subagent-registry-Byuex3zp.js +0 -2759
  708. package/dist/subagent-registry-DOBunBYS.js +0 -14
  709. package/dist/subsystem-Dowf8fSU.js +0 -860
  710. package/dist/system-cli-C5oBpzni.js +0 -79
  711. package/dist/system-cli-DXNKD_Id.js +0 -82
  712. package/dist/systemd-BSrHDyeU.js +0 -452
  713. package/dist/systemd-By5xdSB4.js +0 -452
  714. package/dist/systemd-hints-BtjL_5Rh.js +0 -36
  715. package/dist/systemd-hints-sJmr6cjb.js +0 -36
  716. package/dist/systemd-linger-CTmV2Gci.js +0 -75
  717. package/dist/systemd-linger-CmyqQkeC.js +0 -75
  718. package/dist/table-BL0lJzsm.js +0 -279
  719. package/dist/table-DoiRPsn0.js +0 -279
  720. package/dist/timeout-CswI_K-U.js +0 -232
  721. package/dist/tokens-C-X7wDKj.js +0 -14
  722. package/dist/tokens-DkvqA72p.js +0 -14
  723. package/dist/trash-BJLK1vMn.js +0 -23
  724. package/dist/trash-_x5UZ94k.js +0 -23
  725. package/dist/tui-BHjxDFZC.js +0 -3894
  726. package/dist/tui-CgOocwN8.js +0 -3894
  727. package/dist/tui-cli-5ANH8dE5.js +0 -47
  728. package/dist/tui-cli-BQ4P-JW_.js +0 -50
  729. package/dist/update-LFgxHHPd.js +0 -317
  730. package/dist/update-TxptCqk7.js +0 -317
  731. package/dist/update-check-CWc7YXmc.js +0 -400
  732. package/dist/update-check-IhlWaui6.js +0 -400
  733. package/dist/update-cli-PtXU62w7.js +0 -1105
  734. package/dist/update-cli-Va0EtETG.js +0 -1105
  735. package/dist/update-runner-BLeKFkiB.js +0 -894
  736. package/dist/update-runner-Iuzpc-_y.js +0 -894
  737. package/dist/usage-ApGvBLVg.js +0 -4516
  738. package/dist/utils-Bsw__U-F.js +0 -243
  739. package/dist/web-B6_Ky60G.js +0 -63
  740. package/dist/web-EZLQEWXY.js +0 -46842
  741. package/dist/web-pec8YJUX.js +0 -2203
  742. package/dist/webhooks-cli-BYQKTHTp.js +0 -319
  743. package/dist/webhooks-cli-C2_xtsUQ.js +0 -316
  744. package/dist/whatsapp-actions-C72VCq8f.js +0 -49
  745. package/dist/whatsapp-actions-Ck9Uv0Nw.js +0 -45
  746. package/dist/whatsapp-actions-D0reTj2k.js +0 -53
  747. package/dist/widearea-dns-B6ocX23x.js +0 -127
  748. package/dist/widearea-dns-NsEUNYwz.js +0 -127
  749. package/dist/workspace-Dcfoy5JJ.js +0 -649
  750. package/dist/ws-log-N8R5MvGE.js +0 -267
  751. package/dist/ws-log-gwFxPxj5.js +0 -267
  752. /package/dist/{auto-update-CUeF99gI.js → auto-update-CpF0fycd.js} +0 -0
  753. /package/dist/{auto-update-cgkp9ZTJ.js → auto-update-DNWdO7uF.js} +0 -0
  754. /package/dist/{brew-CVZkr0GU.js → brew-nqf_MiE4.js} +0 -0
  755. /package/dist/{budget-DxYQSekw.js → budget-CPedI-qW.js} +0 -0
  756. /package/dist/{budget-BWBp8Res.js → budget-CRpvqDRX.js} +0 -0
  757. /package/dist/{cli-utils-DtAxdCte.js → cli-utils-C1YHVD4o.js} +0 -0
  758. /package/dist/{command-options-CSbuuqHr.js → command-options-BbponVnw.js} +0 -0
  759. /package/dist/{command-options-Cp1tf96a.js → command-options-s0gnvXnS.js} +0 -0
  760. /package/dist/{constants-O8yBqCBv.js → constants-Dhb6zSIV.js} +0 -0
  761. /package/dist/{dangerous-tools-5ObDWy1N.js → dangerous-tools-DGTtJ_JR.js} +0 -0
  762. /package/dist/{dangerous-tools-Jwr7jqNw.js → dangerous-tools-DxrfTOfT.js} +0 -0
  763. /package/dist/{delivery-queue-B6IHz4Ry.js → delivery-queue-Bxm0nzw7.js} +0 -0
  764. /package/dist/{display-BDOsXu8F.js → display-Jy3UdGzA.js} +0 -0
  765. /package/dist/{errors-CHow2wtt.js → errors-CKaCqKga.js} +0 -0
  766. /package/dist/{exec-BizYYQgP.js → exec-DDmuVVNq.js} +0 -0
  767. /package/dist/{format-Mq6iU0_5.js → format-ByEjgyTF.js} +0 -0
  768. /package/dist/{format-duration-DhWzz_5b.js → format-duration-Aaj5tjJd.js} +0 -0
  769. /package/dist/{format-relative-C6kUHuOj.js → format-relative-79_Y1n2Y.js} +0 -0
  770. /package/dist/{help-format-DUBI91Ti.js → help-format-BMKzarov.js} +0 -0
  771. /package/dist/{helpers-eJFa4K6r.js → helpers-DpEB9Mh0.js} +0 -0
  772. /package/dist/{helpers-DLgbkcEn.js → helpers-FMld9sBT.js} +0 -0
  773. /package/dist/{input-provenance-DJBdpeKk.js → input-provenance-Cy_KnBlP.js} +0 -0
  774. /package/dist/{is-main-Dt9DTcH1.js → is-main-yjaVwMtJ.js} +0 -0
  775. /package/dist/{loader-l2OBdJ8x.js → loader-Br7Vr0zn.js} +0 -0
  776. /package/dist/{loader-BoYxRfcW.js → loader-CkmOrXcC.js} +0 -0
  777. /package/dist/{logging-BdnOSVPD.js → logging-CY-Q5cwf.js} +0 -0
  778. /package/dist/{message-channel-w4F2b2F6.js → message-channel-dua8OOGJ.js} +0 -0
  779. /package/dist/{mime-B1ZoR53M.js → mime-CBg4KybI.js} +0 -0
  780. /package/dist/{model-param-b-DPwyNGn8.js → model-param-b-DW9f0NN8.js} +0 -0
  781. /package/dist/{node-match-8XZnaid6.js → node-match-BV8bTBd4.js} +0 -0
  782. /package/dist/{normalize-GDK8JTNW.js → normalize-_lmlBOW9.js} +0 -0
  783. /package/dist/{openclaw-root-C85WMnVV.js → openclaw-root-JPvmPTf7.js} +0 -0
  784. /package/dist/{outbound-send-deps-ANnAhImn.js → outbound-send-deps-BfUvuWGa.js} +0 -0
  785. /package/dist/{parse-6-2MDhdT.js → parse-CZRwKocn.js} +0 -0
  786. /package/dist/{parse-log-line-Bqh1SSzC.js → parse-log-line-CvrZEK6A.js} +0 -0
  787. /package/dist/{parse-log-line-DUZCjXbl.js → parse-log-line-mLdat0AH.js} +0 -0
  788. /package/dist/{parse-port-BKB9Exlg.js → parse-port-BSOOdo7I.js} +0 -0
  789. /package/dist/{parse-port-DrfvwwiL.js → parse-port-Y0NK62x1.js} +0 -0
  790. /package/dist/{parse-timeout-Di_tcEmi.js → parse-timeout-DVPQ3n9j.js} +0 -0
  791. /package/dist/{paths-DcVEkYX5.js → paths-DHjlJ6cn.js} +0 -0
  792. /package/dist/{pi-model-discovery-DsRqYJLy.js → pi-model-discovery-DzEIEgHL.js} +0 -0
  793. /package/dist/{plugins-CDJw924T.js → plugins-D6PBOdkn.js} +0 -0
  794. /package/dist/{program-context-Bvn8046-.js → program-context-Q1hkT73c.js} +0 -0
  795. /package/dist/{progress-CbZ2D53A.js → progress-C9Ha1NJh.js} +0 -0
  796. /package/dist/{prompt-style-DKy6qQxR.js → prompt-style-DQi8j03a.js} +0 -0
  797. /package/dist/{prompts-BI__va99.js → prompts-BEHxUC3w.js} +0 -0
  798. /package/dist/{prompts-_dDWkCAz.js → prompts-CSOhuiqe.js} +0 -0
  799. /package/dist/{queue-D_u34pbL.js → queue-BJGo7kAB.js} +0 -0
  800. /package/dist/{queue-PG591iID.js → queue-DYgUbdoq.js} +0 -0
  801. /package/dist/{redact-ClVwO7Nn.js → redact-CyKvdFrg.js} +0 -0
  802. /package/dist/{registry-Bs_DJK9E.js → registry-C5MAYD4V.js} +0 -0
  803. /package/dist/{registry-D_zlP1U-.js → registry-CRrXXVs0.js} +0 -0
  804. /package/dist/{requirements-BzZxj2Wu.js → requirements-CGkxTCu4.js} +0 -0
  805. /package/dist/{requirements-DIW1svgA.js → requirements-CIDaOcbO.js} +0 -0
  806. /package/dist/{runtime-guard-DeOXA_86.js → runtime-guard-nL3Lp8T-.js} +0 -0
  807. /package/dist/{secret-equal-Dghy3xsA.js → secret-equal-DJpmLXlG.js} +0 -0
  808. /package/dist/{send-BhAfdGII.js → send-CTcxgDDU.js} +0 -0
  809. /package/dist/{send-ga9udK1_.js → send-DPezUR3-.js} +0 -0
  810. /package/dist/{send-C2t9xpXI.js → send-DZQTaG7-.js} +0 -0
  811. /package/dist/{send-DigO-i9j.js → send-VDff2gra.js} +0 -0
  812. /package/dist/{send-Dz2BDHll.js → send-bgQNV8d1.js} +0 -0
  813. /package/dist/{session-key-BGiG_JcT.js → session-key-CQT-NR6w.js} +0 -0
  814. /package/dist/{shell-argv-CAq1mLa2.js → shell-argv-n9IueeJQ.js} +0 -0
  815. /package/dist/{skill-scanner-Coo4QoCd.js → skill-scanner-o6NgVMD9.js} +0 -0
  816. /package/dist/{status-CMnlcBVc.js → status-C53kTIXF.js} +0 -0
  817. /package/dist/{status-tDZPwewW.js → status-CZDDA_Sy.js} +0 -0
  818. /package/dist/{system-run-command-X9lDJIy0.js → system-run-command-BCjUffN9.js} +0 -0
  819. /package/dist/{system-run-command-DGk7dwQP.js → system-run-command-CqAqKL9K.js} +0 -0
  820. /package/dist/{tailnet-CuiNECdL.js → tailnet-Ciwjv243.js} +0 -0
  821. /package/dist/{templates-CeYJjVzw.js → templates-37RKpACb.js} +0 -0
  822. /package/dist/{templates-I3Z0xplD.js → templates-DPalk30o.js} +0 -0
  823. /package/dist/{thinking-BXEswx1X.js → thinking-2hxwmvTl.js} +0 -0
  824. /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
  825. /package/dist/{transcript-tools-DuyYOkUq.js → transcript-tools-D4Lbxlka.js} +0 -0
  826. /package/dist/{usage-format-BAirWUSO.js → usage-format-6Uar63S0.js} +0 -0
  827. /package/dist/{utils-C9sj30YY.js → utils-DT8uXjFS.js} +0 -0
  828. /package/dist/{wsl-CqyuRvtM.js → wsl-CrPvx2kZ.js} +0 -0
  829. /package/dist/{wsl-ymJYvc9Q.js → wsl-UvJ5dHah.js} +0 -0
@@ -0,0 +1,1306 @@
1
+ import "./paths-BMuHNFxg.js";
2
+ import { B as theme, O as danger, P as setVerbose, U as getResolvedLoggerSettings, _ as DEFAULT_CHAT_CHANNEL, u as defaultRuntime } from "./subsystem-DfKstnEK.js";
3
+ import "./utils-DZ8pnOD5.js";
4
+ import "./thinking-BLU0jXR8.js";
5
+ import "./subagent-registry-CdSjz14I.js";
6
+ import { c as loadProviderUsageSummary, l as formatUsageReportLines, ot as parseDiscordTarget } from "./reply-CR5T_oQJ.js";
7
+ import { c as normalizeAccountId, t as DEFAULT_ACCOUNT_ID } from "./session-key-DxcgHezu.js";
8
+ import "./exec-mhSykkaa.js";
9
+ import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-CPphqq-U.js";
10
+ import { ht as loadAuthProfileStore } from "./model-selection-Cqt6aJ0G.js";
11
+ import { t as formatCliCommand } from "./command-format-CVL4K5cj.js";
12
+ import "./boolean-Wzu0-e0P.js";
13
+ import "./env-v6411I8h.js";
14
+ import "./lanes-BvSnHq2h.js";
15
+ import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot } from "./config-DaqbUdkI.js";
16
+ import "./manifest-registry-kHX_MFa1.js";
17
+ import "./sessions-B-Cu7JZq.js";
18
+ import "./image-ops-B_AYV3tp.js";
19
+ import "./polls-D6eCdatA.js";
20
+ import "./mime-C1RlpUSs.js";
21
+ import "./cli-session-BVjY_XrW.js";
22
+ import "./dock-jYICmNcI.js";
23
+ import "./logging-54nXj81z.js";
24
+ import "./accounts-Bth3PpPD.js";
25
+ import "./tokens-3psI_Qk2.js";
26
+ import "./sandbox-DBSiVHt_.js";
27
+ import "./chrome-U3DRzjJD.js";
28
+ import "./auth-BNZsOHGF.js";
29
+ import "./server-context-C0xZbYhg.js";
30
+ import "./skills-DV4zKdCx.js";
31
+ import "./routes-B4czFzIb.js";
32
+ import "./paths-Buw_geoe.js";
33
+ import "./ports-DHiKnPRX.js";
34
+ import "./trash-C39a6hKA.js";
35
+ import "./message-channel-D_jIO87f.js";
36
+ import { n as listChannelPlugins, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-DhcGAPDB.js";
37
+ import "./paths-BXQQzXGQ.js";
38
+ import "./commands-registry-q13H7ng5.js";
39
+ import "./markdown-tables-DJV7eAJZ.js";
40
+ import "./deliver-BBggsviM.js";
41
+ import "./pairing-store-BsXzUDPv.js";
42
+ import "./client-LRKFjo4A.js";
43
+ import { n as callGateway } from "./call-BYDpTVCZ.js";
44
+ import "./nodes-screen-qs3jRBPk.js";
45
+ import { n as formatTimeAgo } from "./format-relative-sy9iviQN.js";
46
+ import "./memory-cli-BcGVkkRJ.js";
47
+ import "./manager-BDPgBQSH.js";
48
+ import "./sqlite-dzD-jMjs.js";
49
+ import "./redact-BHmk44DI.js";
50
+ import "./common-CX5458fH.js";
51
+ import { n as fetchChannelPermissionsDiscord } from "./send-DEMhcauI.js";
52
+ import { t as formatDocsLink } from "./links-D2tt2ouh.js";
53
+ import { n as runCommandWithRuntime } from "./cli-utils-BTBABPX9.js";
54
+ import { n as withProgress } from "./progress-oiAjiiNi.js";
55
+ import "./control-service-BtL1Jto_.js";
56
+ import "./dispatcher-DAFbQM-c.js";
57
+ import "./pi-model-discovery-BkqhoPls.js";
58
+ import { n as resolveMessageChannelSelection } from "./channel-selection-CqcX7Ocw.js";
59
+ import "./delivery-queue-BJQK3oh5.js";
60
+ import "./pi-tools.policy-Csmla32P.js";
61
+ import "./session-cost-usage-FcdJl9c3.js";
62
+ import { r as listChannelPluginCatalogEntries } from "./catalog-CqKiUgu6.js";
63
+ import "./plugin-registry-DW81arxW.js";
64
+ import { t as formatCliChannelOptions } from "./channel-options-CO21Gl8p.js";
65
+ import "./prompt-style-Cm4wOtKm.js";
66
+ import "./note-CSlg2BnB.js";
67
+ import { t as createClackPrompter } from "./clack-prompter-Dwr1m_IZ.js";
68
+ import { t as resolveChannelDefaultAccountId } from "./helpers-DpEB9Mh0.js";
69
+ import "./plugin-auto-enable-CjZ238UI.js";
70
+ import { i as reloadOnboardingPluginRegistry, n as setupChannels, r as ensureOnboardingPluginInstalled } from "./onboard-channels-C4iSfFXR.js";
71
+ import "./npm-registry-spec-DQd4M22q.js";
72
+ import "./skill-scanner-o6NgVMD9.js";
73
+ import "./installs-Dh4dHayM.js";
74
+ import { t as buildChannelAccountSnapshot } from "./status-CZDDA_Sy.js";
75
+ import { t as parseLogLine } from "./parse-log-line-mLdat0AH.js";
76
+ import { t as collectChannelStatusIssues } from "./channels-status-issues-DdJdO866.js";
77
+ import { t as hasExplicitOptions } from "./command-options-s0gnvXnS.js";
78
+ import fs from "node:fs/promises";
79
+
80
+ //#region src/commands/channels/add-mutators.ts
81
+ function applyAccountName(params) {
82
+ const accountId = normalizeAccountId(params.accountId);
83
+ const apply = getChannelPlugin(params.channel)?.setup?.applyAccountName;
84
+ return apply ? apply({
85
+ cfg: params.cfg,
86
+ accountId,
87
+ name: params.name
88
+ }) : params.cfg;
89
+ }
90
+ function applyChannelAccountConfig(params) {
91
+ const accountId = normalizeAccountId(params.accountId);
92
+ const apply = getChannelPlugin(params.channel)?.setup?.applyAccountConfig;
93
+ if (!apply) return params.cfg;
94
+ return apply({
95
+ cfg: params.cfg,
96
+ accountId,
97
+ input: params.input
98
+ });
99
+ }
100
+
101
+ //#endregion
102
+ //#region src/commands/channels/shared.ts
103
+ async function requireValidConfig(runtime = defaultRuntime) {
104
+ const snapshot = await readConfigFileSnapshot();
105
+ if (snapshot.exists && !snapshot.valid) {
106
+ const issues = snapshot.issues.length > 0 ? snapshot.issues.map((issue) => `- ${issue.path}: ${issue.message}`).join("\n") : "Unknown validation issue.";
107
+ runtime.error(`Config invalid:\n${issues}`);
108
+ runtime.error(`Fix the config or run ${formatCliCommand("anima doctor")}.`);
109
+ runtime.exit(1);
110
+ return null;
111
+ }
112
+ return snapshot.config;
113
+ }
114
+ function formatAccountLabel(params) {
115
+ const base = params.accountId || DEFAULT_ACCOUNT_ID;
116
+ if (params.name?.trim()) return `${base} (${params.name.trim()})`;
117
+ return base;
118
+ }
119
+ const channelLabel = (channel) => {
120
+ return getChannelPlugin(channel)?.meta.label ?? channel;
121
+ };
122
+ function formatChannelAccountLabel(params) {
123
+ const channelText = channelLabel(params.channel);
124
+ const accountText = formatAccountLabel({
125
+ accountId: params.accountId,
126
+ name: params.name
127
+ });
128
+ return `${params.channelStyle ? params.channelStyle(channelText) : channelText} ${params.accountStyle ? params.accountStyle(accountText) : accountText}`;
129
+ }
130
+ function shouldUseWizard(params) {
131
+ return params?.hasFlags === false;
132
+ }
133
+
134
+ //#endregion
135
+ //#region src/commands/channels/add.ts
136
+ function parseList(value) {
137
+ if (!value?.trim()) return;
138
+ const parsed = value.split(/[\n,;]+/g).map((entry) => entry.trim()).filter(Boolean);
139
+ return parsed.length > 0 ? parsed : void 0;
140
+ }
141
+ function resolveCatalogChannelEntry(raw, cfg) {
142
+ const trimmed = raw.trim().toLowerCase();
143
+ if (!trimmed) return;
144
+ return listChannelPluginCatalogEntries({ workspaceDir: cfg ? resolveAgentWorkspaceDir(cfg, resolveDefaultAgentId(cfg)) : void 0 }).find((entry) => {
145
+ if (entry.id.toLowerCase() === trimmed) return true;
146
+ return (entry.meta.aliases ?? []).some((alias) => alias.trim().toLowerCase() === trimmed);
147
+ });
148
+ }
149
+ async function channelsAddCommand(opts, runtime = defaultRuntime, params) {
150
+ const cfg = await requireValidConfig(runtime);
151
+ if (!cfg) return;
152
+ let nextConfig = cfg;
153
+ if (shouldUseWizard(params)) {
154
+ const prompter = createClackPrompter();
155
+ let selection = [];
156
+ const accountIds = {};
157
+ await prompter.intro("Channel setup");
158
+ let nextConfig = await setupChannels(cfg, runtime, prompter, {
159
+ allowDisable: false,
160
+ allowSignalInstall: true,
161
+ promptAccountIds: true,
162
+ onSelection: (value) => {
163
+ selection = value;
164
+ },
165
+ onAccountId: (channel, accountId) => {
166
+ accountIds[channel] = accountId;
167
+ }
168
+ });
169
+ if (selection.length === 0) {
170
+ await prompter.outro("No channels selected.");
171
+ return;
172
+ }
173
+ if (await prompter.confirm({
174
+ message: "Add display names for these accounts? (optional)",
175
+ initialValue: false
176
+ })) for (const channel of selection) {
177
+ const accountId = accountIds[channel] ?? DEFAULT_ACCOUNT_ID;
178
+ const plugin = getChannelPlugin(channel);
179
+ const account = plugin?.config.resolveAccount(nextConfig, accountId);
180
+ const existingName = (plugin?.config.describeAccount?.(account, nextConfig))?.name ?? account?.name;
181
+ const name = await prompter.text({
182
+ message: `${channel} account name (${accountId})`,
183
+ initialValue: existingName
184
+ });
185
+ if (name?.trim()) nextConfig = applyAccountName({
186
+ cfg: nextConfig,
187
+ channel,
188
+ accountId,
189
+ name
190
+ });
191
+ }
192
+ await writeConfigFile(nextConfig);
193
+ await prompter.outro("Channels updated.");
194
+ return;
195
+ }
196
+ const rawChannel = String(opts.channel ?? "");
197
+ let channel = normalizeChannelId(rawChannel);
198
+ let catalogEntry = channel ? void 0 : resolveCatalogChannelEntry(rawChannel, nextConfig);
199
+ if (!channel && catalogEntry) {
200
+ const prompter = createClackPrompter();
201
+ const workspaceDir = resolveAgentWorkspaceDir(nextConfig, resolveDefaultAgentId(nextConfig));
202
+ const result = await ensureOnboardingPluginInstalled({
203
+ cfg: nextConfig,
204
+ entry: catalogEntry,
205
+ prompter,
206
+ runtime,
207
+ workspaceDir
208
+ });
209
+ nextConfig = result.cfg;
210
+ if (!result.installed) return;
211
+ reloadOnboardingPluginRegistry({
212
+ cfg: nextConfig,
213
+ runtime,
214
+ workspaceDir
215
+ });
216
+ channel = normalizeChannelId(catalogEntry.id) ?? catalogEntry.id;
217
+ }
218
+ if (!channel) {
219
+ const hint = catalogEntry ? `Plugin ${catalogEntry.meta.label} could not be loaded after install.` : `Unknown channel: ${String(opts.channel ?? "")}`;
220
+ runtime.error(hint);
221
+ runtime.exit(1);
222
+ return;
223
+ }
224
+ const plugin = getChannelPlugin(channel);
225
+ if (!plugin?.setup?.applyAccountConfig) {
226
+ runtime.error(`Channel ${channel} does not support add.`);
227
+ runtime.exit(1);
228
+ return;
229
+ }
230
+ const accountId = plugin.setup.resolveAccountId?.({
231
+ cfg: nextConfig,
232
+ accountId: opts.account
233
+ }) ?? normalizeAccountId(opts.account);
234
+ const useEnv = opts.useEnv === true;
235
+ const initialSyncLimit = typeof opts.initialSyncLimit === "number" ? opts.initialSyncLimit : typeof opts.initialSyncLimit === "string" && opts.initialSyncLimit.trim() ? Number.parseInt(opts.initialSyncLimit, 10) : void 0;
236
+ const groupChannels = parseList(opts.groupChannels);
237
+ const dmAllowlist = parseList(opts.dmAllowlist);
238
+ const input = {
239
+ name: opts.name,
240
+ token: opts.token,
241
+ tokenFile: opts.tokenFile,
242
+ botToken: opts.botToken,
243
+ appToken: opts.appToken,
244
+ signalNumber: opts.signalNumber,
245
+ cliPath: opts.cliPath,
246
+ dbPath: opts.dbPath,
247
+ service: opts.service,
248
+ region: opts.region,
249
+ authDir: opts.authDir,
250
+ httpUrl: opts.httpUrl,
251
+ httpHost: opts.httpHost,
252
+ httpPort: opts.httpPort,
253
+ webhookPath: opts.webhookPath,
254
+ webhookUrl: opts.webhookUrl,
255
+ audienceType: opts.audienceType,
256
+ audience: opts.audience,
257
+ homeserver: opts.homeserver,
258
+ userId: opts.userId,
259
+ accessToken: opts.accessToken,
260
+ password: opts.password,
261
+ deviceName: opts.deviceName,
262
+ initialSyncLimit,
263
+ useEnv,
264
+ ship: opts.ship,
265
+ url: opts.url,
266
+ code: opts.code,
267
+ groupChannels,
268
+ dmAllowlist,
269
+ autoDiscoverChannels: opts.autoDiscoverChannels
270
+ };
271
+ const validationError = plugin.setup.validateInput?.({
272
+ cfg: nextConfig,
273
+ accountId,
274
+ input
275
+ });
276
+ if (validationError) {
277
+ runtime.error(validationError);
278
+ runtime.exit(1);
279
+ return;
280
+ }
281
+ nextConfig = applyChannelAccountConfig({
282
+ cfg: nextConfig,
283
+ channel,
284
+ accountId,
285
+ input
286
+ });
287
+ await writeConfigFile(nextConfig);
288
+ runtime.log(`Added ${channelLabel(channel)} account "${accountId}".`);
289
+ }
290
+
291
+ //#endregion
292
+ //#region src/slack/scopes.ts
293
+ async function fetchSlackScopes(..._args) {
294
+ return {
295
+ scopes: [],
296
+ missing: []
297
+ };
298
+ }
299
+
300
+ //#endregion
301
+ //#region src/commands/channels/capabilities.ts
302
+ const REQUIRED_DISCORD_PERMISSIONS = ["ViewChannel", "SendMessages"];
303
+ const TEAMS_GRAPH_PERMISSION_HINTS = {
304
+ "ChannelMessage.Read.All": "channel history",
305
+ "Chat.Read.All": "chat history",
306
+ "Channel.ReadBasic.All": "channel list",
307
+ "Team.ReadBasic.All": "team list",
308
+ "TeamsActivity.Read.All": "teams activity",
309
+ "Sites.Read.All": "files (SharePoint)",
310
+ "Files.Read.All": "files (OneDrive)"
311
+ };
312
+ function normalizeTimeout(raw, fallback = 1e4) {
313
+ const value = typeof raw === "string" ? Number(raw) : Number(raw);
314
+ if (!Number.isFinite(value) || value <= 0) return fallback;
315
+ return value;
316
+ }
317
+ function formatSupport(capabilities) {
318
+ if (!capabilities) return "unknown";
319
+ const bits = [];
320
+ if (capabilities.chatTypes?.length) bits.push(`chatTypes=${capabilities.chatTypes.join(",")}`);
321
+ if (capabilities.polls) bits.push("polls");
322
+ if (capabilities.reactions) bits.push("reactions");
323
+ if (capabilities.edit) bits.push("edit");
324
+ if (capabilities.unsend) bits.push("unsend");
325
+ if (capabilities.reply) bits.push("reply");
326
+ if (capabilities.effects) bits.push("effects");
327
+ if (capabilities.groupManagement) bits.push("groupManagement");
328
+ if (capabilities.threads) bits.push("threads");
329
+ if (capabilities.media) bits.push("media");
330
+ if (capabilities.nativeCommands) bits.push("nativeCommands");
331
+ if (capabilities.blockStreaming) bits.push("blockStreaming");
332
+ return bits.length ? bits.join(" ") : "none";
333
+ }
334
+ function summarizeDiscordTarget(raw) {
335
+ if (!raw) return;
336
+ const target = parseDiscordTarget(raw, { defaultKind: "channel" });
337
+ if (!target) return { raw };
338
+ if (target.kind === "channel") return {
339
+ raw,
340
+ normalized: target.normalized,
341
+ kind: "channel",
342
+ channelId: target.id
343
+ };
344
+ if (target.kind === "user") return {
345
+ raw,
346
+ normalized: target.normalized,
347
+ kind: "user"
348
+ };
349
+ return {
350
+ raw,
351
+ normalized: target.normalized
352
+ };
353
+ }
354
+ function formatDiscordIntents(intents) {
355
+ if (!intents) return "unknown";
356
+ return [
357
+ `messageContent=${intents.messageContent ?? "unknown"}`,
358
+ `guildMembers=${intents.guildMembers ?? "unknown"}`,
359
+ `presence=${intents.presence ?? "unknown"}`
360
+ ].join(" ");
361
+ }
362
+ function formatProbeLines(channelId, probe) {
363
+ const lines = [];
364
+ if (!probe || typeof probe !== "object") return lines;
365
+ const probeObj = probe;
366
+ if (channelId === "discord") {
367
+ const bot = probeObj.bot;
368
+ if (bot?.username) {
369
+ const botId = bot.id ? ` (${bot.id})` : "";
370
+ lines.push(`Bot: ${theme.accent(`@${bot.username}`)}${botId}`);
371
+ }
372
+ const app = probeObj.application;
373
+ if (app?.intents) lines.push(`Intents: ${formatDiscordIntents(app.intents)}`);
374
+ }
375
+ if (channelId === "telegram") {
376
+ const bot = probeObj.bot;
377
+ if (bot?.username) {
378
+ const botId = bot.id ? ` (${bot.id})` : "";
379
+ lines.push(`Bot: ${theme.accent(`@${bot.username}`)}${botId}`);
380
+ }
381
+ const flags = [];
382
+ const canJoinGroups = bot?.canJoinGroups;
383
+ const canReadAll = bot?.canReadAllGroupMessages;
384
+ const inlineQueries = bot?.supportsInlineQueries;
385
+ if (typeof canJoinGroups === "boolean") flags.push(`joinGroups=${canJoinGroups}`);
386
+ if (typeof canReadAll === "boolean") flags.push(`readAllGroupMessages=${canReadAll}`);
387
+ if (typeof inlineQueries === "boolean") flags.push(`inlineQueries=${inlineQueries}`);
388
+ if (flags.length > 0) lines.push(`Flags: ${flags.join(" ")}`);
389
+ const webhook = probeObj.webhook;
390
+ if (webhook?.url !== void 0) lines.push(`Webhook: ${webhook.url || "none"}`);
391
+ }
392
+ if (channelId === "slack") {
393
+ const bot = probeObj.bot;
394
+ const team = probeObj.team;
395
+ if (bot?.name) lines.push(`Bot: ${theme.accent(`@${bot.name}`)}`);
396
+ if (team?.name || team?.id) {
397
+ const id = team?.id ? ` (${team.id})` : "";
398
+ lines.push(`Team: ${team?.name ?? "unknown"}${id}`);
399
+ }
400
+ }
401
+ if (channelId === "signal") {
402
+ const version = probeObj.version;
403
+ if (version) lines.push(`Signal daemon: ${version}`);
404
+ }
405
+ if (channelId === "msteams") {
406
+ const appId = typeof probeObj.appId === "string" ? probeObj.appId.trim() : "";
407
+ if (appId) lines.push(`App: ${theme.accent(appId)}`);
408
+ const graph = probeObj.graph;
409
+ if (graph) {
410
+ const roles = Array.isArray(graph.roles) ? graph.roles.map((role) => String(role).trim()).filter(Boolean) : [];
411
+ const scopes = typeof graph.scopes === "string" ? graph.scopes.split(/\s+/).map((scope) => scope.trim()).filter(Boolean) : Array.isArray(graph.scopes) ? graph.scopes.map((scope) => String(scope).trim()).filter(Boolean) : [];
412
+ if (graph.ok === false) lines.push(`Graph: ${theme.error(graph.error ?? "failed")}`);
413
+ else if (roles.length > 0 || scopes.length > 0) {
414
+ const formatPermission = (permission) => {
415
+ const hint = TEAMS_GRAPH_PERMISSION_HINTS[permission];
416
+ return hint ? `${permission} (${hint})` : permission;
417
+ };
418
+ if (roles.length > 0) lines.push(`Graph roles: ${roles.map(formatPermission).join(", ")}`);
419
+ if (scopes.length > 0) lines.push(`Graph scopes: ${scopes.map(formatPermission).join(", ")}`);
420
+ } else if (graph.ok === true) lines.push("Graph: ok");
421
+ }
422
+ }
423
+ const ok = typeof probeObj.ok === "boolean" ? probeObj.ok : void 0;
424
+ if (ok === true && lines.length === 0) lines.push("Probe: ok");
425
+ if (ok === false) {
426
+ const error = typeof probeObj.error === "string" && probeObj.error ? ` (${probeObj.error})` : "";
427
+ lines.push(`Probe: ${theme.error(`failed${error}`)}`);
428
+ }
429
+ return lines;
430
+ }
431
+ async function buildDiscordPermissions(params) {
432
+ const target = summarizeDiscordTarget(params.target?.trim());
433
+ if (!target) return {};
434
+ if (target.kind !== "channel" || !target.channelId) return {
435
+ target,
436
+ report: { error: "Target looks like a DM user; pass channel:<id> to audit channel permissions." }
437
+ };
438
+ const token = params.account.token?.trim();
439
+ if (!token) return {
440
+ target,
441
+ report: {
442
+ channelId: target.channelId,
443
+ error: "Discord bot token missing for permission audit."
444
+ }
445
+ };
446
+ try {
447
+ const perms = await fetchChannelPermissionsDiscord(target.channelId, {
448
+ token,
449
+ accountId: params.account.accountId ?? void 0
450
+ });
451
+ const missing = REQUIRED_DISCORD_PERMISSIONS.filter((permission) => !perms.permissions.includes(permission));
452
+ return {
453
+ target,
454
+ report: {
455
+ channelId: perms.channelId,
456
+ guildId: perms.guildId,
457
+ isDm: perms.isDm,
458
+ channelType: perms.channelType,
459
+ permissions: perms.permissions,
460
+ missingRequired: missing.length ? missing : [],
461
+ raw: perms.raw
462
+ }
463
+ };
464
+ } catch (err) {
465
+ return {
466
+ target,
467
+ report: {
468
+ channelId: target.channelId,
469
+ error: err instanceof Error ? err.message : String(err)
470
+ }
471
+ };
472
+ }
473
+ }
474
+ async function resolveChannelReports(params) {
475
+ const { plugin, cfg, timeoutMs } = params;
476
+ const accountIds = params.accountOverride ? [params.accountOverride] : (() => {
477
+ const ids = plugin.config.listAccountIds(cfg);
478
+ return ids.length > 0 ? ids : [resolveChannelDefaultAccountId({
479
+ plugin,
480
+ cfg,
481
+ accountIds: ids
482
+ })];
483
+ })();
484
+ const reports = [];
485
+ const listedActions = plugin.actions?.listActions?.({ cfg }) ?? [];
486
+ const actions = Array.from(new Set([
487
+ "send",
488
+ "broadcast",
489
+ ...listedActions.map((action) => String(action))
490
+ ]));
491
+ for (const accountId of accountIds) {
492
+ const resolvedAccount = plugin.config.resolveAccount(cfg, accountId);
493
+ const configured = plugin.config.isConfigured ? await plugin.config.isConfigured(resolvedAccount, cfg) : Boolean(resolvedAccount);
494
+ const enabled = plugin.config.isEnabled ? plugin.config.isEnabled(resolvedAccount, cfg) : resolvedAccount.enabled !== false;
495
+ let probe;
496
+ if (configured && enabled && plugin.status?.probeAccount) try {
497
+ probe = await plugin.status.probeAccount({
498
+ account: resolvedAccount,
499
+ timeoutMs,
500
+ cfg
501
+ });
502
+ } catch (err) {
503
+ probe = {
504
+ ok: false,
505
+ error: err instanceof Error ? err.message : String(err)
506
+ };
507
+ }
508
+ let slackScopes;
509
+ if (plugin.id === "slack" && configured && enabled) {
510
+ const botToken = resolvedAccount.botToken?.trim();
511
+ const userToken = resolvedAccount.config?.userToken?.trim();
512
+ const scopeReports = [];
513
+ if (botToken) scopeReports.push({
514
+ tokenType: "bot",
515
+ result: await fetchSlackScopes(botToken, timeoutMs)
516
+ });
517
+ else scopeReports.push({
518
+ tokenType: "bot",
519
+ result: {
520
+ ok: false,
521
+ error: "Slack bot token missing."
522
+ }
523
+ });
524
+ if (userToken) scopeReports.push({
525
+ tokenType: "user",
526
+ result: await fetchSlackScopes(userToken, timeoutMs)
527
+ });
528
+ slackScopes = scopeReports;
529
+ }
530
+ let discordTarget;
531
+ let discordPermissions;
532
+ if (plugin.id === "discord" && params.target) {
533
+ const perms = await buildDiscordPermissions({
534
+ account: resolvedAccount,
535
+ target: params.target
536
+ });
537
+ discordTarget = perms.target;
538
+ discordPermissions = perms.report;
539
+ }
540
+ reports.push({
541
+ channel: plugin.id,
542
+ accountId,
543
+ accountName: typeof resolvedAccount.name === "string" ? resolvedAccount.name?.trim() || void 0 : void 0,
544
+ configured,
545
+ enabled,
546
+ support: plugin.capabilities,
547
+ probe,
548
+ target: discordTarget,
549
+ channelPermissions: discordPermissions,
550
+ actions,
551
+ slackScopes
552
+ });
553
+ }
554
+ return reports;
555
+ }
556
+ async function channelsCapabilitiesCommand(opts, runtime = defaultRuntime) {
557
+ const cfg = await requireValidConfig(runtime);
558
+ if (!cfg) return;
559
+ const timeoutMs = normalizeTimeout(opts.timeout, 1e4);
560
+ const rawChannel = typeof opts.channel === "string" ? opts.channel.trim().toLowerCase() : "";
561
+ const rawTarget = typeof opts.target === "string" ? opts.target.trim() : "";
562
+ if (opts.account && (!rawChannel || rawChannel === "all")) {
563
+ runtime.error(danger("--account requires a specific --channel."));
564
+ runtime.exit(1);
565
+ return;
566
+ }
567
+ if (rawTarget && rawChannel !== "discord") {
568
+ runtime.error(danger("--target requires --channel discord."));
569
+ runtime.exit(1);
570
+ return;
571
+ }
572
+ const plugins = listChannelPlugins();
573
+ const selected = !rawChannel || rawChannel === "all" ? plugins : (() => {
574
+ const plugin = getChannelPlugin(rawChannel);
575
+ if (!plugin) return null;
576
+ return [plugin];
577
+ })();
578
+ if (!selected || selected.length === 0) {
579
+ runtime.error(danger(`Unknown channel "${rawChannel}".`));
580
+ runtime.exit(1);
581
+ return;
582
+ }
583
+ const reports = [];
584
+ for (const plugin of selected) {
585
+ const accountOverride = opts.account?.trim() || void 0;
586
+ reports.push(...await resolveChannelReports({
587
+ plugin,
588
+ cfg,
589
+ timeoutMs,
590
+ accountOverride,
591
+ target: rawTarget && plugin.id === "discord" ? rawTarget : void 0
592
+ }));
593
+ }
594
+ if (opts.json) {
595
+ runtime.log(JSON.stringify({ channels: reports }, null, 2));
596
+ return;
597
+ }
598
+ const lines = [];
599
+ for (const report of reports) {
600
+ const label = formatChannelAccountLabel({
601
+ channel: report.channel,
602
+ accountId: report.accountId,
603
+ name: report.accountName,
604
+ channelStyle: theme.accent,
605
+ accountStyle: theme.heading
606
+ });
607
+ lines.push(theme.heading(label));
608
+ lines.push(`Support: ${formatSupport(report.support)}`);
609
+ if (report.actions && report.actions.length > 0) lines.push(`Actions: ${report.actions.join(", ")}`);
610
+ if (report.configured === false || report.enabled === false) {
611
+ const configuredLabel = report.configured === false ? "not configured" : "configured";
612
+ const enabledLabel = report.enabled === false ? "disabled" : "enabled";
613
+ lines.push(`Status: ${configuredLabel}, ${enabledLabel}`);
614
+ }
615
+ const probeLines = formatProbeLines(report.channel, report.probe);
616
+ if (probeLines.length > 0) lines.push(...probeLines);
617
+ else if (report.configured && report.enabled) lines.push(theme.muted("Probe: unavailable"));
618
+ if (report.channel === "slack" && report.slackScopes) for (const entry of report.slackScopes) {
619
+ const source = entry.result.source ? ` (${entry.result.source})` : "";
620
+ const label = entry.tokenType === "user" ? "User scopes" : "Bot scopes";
621
+ if (entry.result.ok && entry.result.scopes?.length) lines.push(`${label}${source}: ${entry.result.scopes.join(", ")}`);
622
+ else if (entry.result.error) lines.push(`${label}: ${theme.error(entry.result.error)}`);
623
+ }
624
+ if (report.channel === "discord" && report.channelPermissions) {
625
+ const perms = report.channelPermissions;
626
+ if (perms.error) lines.push(`Permissions: ${theme.error(perms.error)}`);
627
+ else {
628
+ const list = perms.permissions?.length ? perms.permissions.join(", ") : "none";
629
+ const label = perms.channelId ? ` (${perms.channelId})` : "";
630
+ lines.push(`Permissions${label}: ${list}`);
631
+ if (perms.missingRequired && perms.missingRequired.length > 0) lines.push(`${theme.warn("Missing required:")} ${perms.missingRequired.join(", ")}`);
632
+ else lines.push(theme.success("Missing required: none"));
633
+ }
634
+ } else if (report.channel === "discord" && rawTarget && !report.channelPermissions) lines.push(theme.muted("Permissions: skipped (no target)."));
635
+ lines.push("");
636
+ }
637
+ runtime.log(lines.join("\n").trimEnd());
638
+ }
639
+
640
+ //#endregion
641
+ //#region src/commands/channels/list.ts
642
+ const colorValue = (value) => {
643
+ if (value === "none") return theme.error(value);
644
+ if (value === "env") return theme.accent(value);
645
+ return theme.success(value);
646
+ };
647
+ function formatEnabled(value) {
648
+ return value === false ? theme.error("disabled") : theme.success("enabled");
649
+ }
650
+ function formatConfigured(value) {
651
+ return value ? theme.success("configured") : theme.warn("not configured");
652
+ }
653
+ function formatTokenSource(source) {
654
+ return `token=${colorValue(source || "none")}`;
655
+ }
656
+ function formatSource(label, source) {
657
+ return `${label}=${colorValue(source || "none")}`;
658
+ }
659
+ function formatLinked(value) {
660
+ return value ? theme.success("linked") : theme.warn("not linked");
661
+ }
662
+ function shouldShowConfigured(channel) {
663
+ return channel.meta.showConfigured !== false;
664
+ }
665
+ function formatAccountLine(params) {
666
+ const { channel, snapshot } = params;
667
+ const label = formatChannelAccountLabel({
668
+ channel: channel.id,
669
+ accountId: snapshot.accountId,
670
+ name: snapshot.name,
671
+ channelStyle: theme.accent,
672
+ accountStyle: theme.heading
673
+ });
674
+ const bits = [];
675
+ if (snapshot.linked !== void 0) bits.push(formatLinked(snapshot.linked));
676
+ if (shouldShowConfigured(channel) && typeof snapshot.configured === "boolean") bits.push(formatConfigured(snapshot.configured));
677
+ if (snapshot.tokenSource) bits.push(formatTokenSource(snapshot.tokenSource));
678
+ if (snapshot.botTokenSource) bits.push(formatSource("bot", snapshot.botTokenSource));
679
+ if (snapshot.appTokenSource) bits.push(formatSource("app", snapshot.appTokenSource));
680
+ if (snapshot.baseUrl) bits.push(`base=${theme.muted(snapshot.baseUrl)}`);
681
+ if (typeof snapshot.enabled === "boolean") bits.push(formatEnabled(snapshot.enabled));
682
+ return `- ${label}: ${bits.join(", ")}`;
683
+ }
684
+ async function loadUsageWithProgress(runtime) {
685
+ try {
686
+ return await withProgress({
687
+ label: "Fetching usage snapshot…",
688
+ indeterminate: true,
689
+ enabled: true
690
+ }, async () => await loadProviderUsageSummary());
691
+ } catch (err) {
692
+ runtime.error(String(err));
693
+ return null;
694
+ }
695
+ }
696
+ async function channelsListCommand(opts, runtime = defaultRuntime) {
697
+ const cfg = await requireValidConfig(runtime);
698
+ if (!cfg) return;
699
+ const includeUsage = opts.usage !== false;
700
+ const plugins = listChannelPlugins();
701
+ const authStore = loadAuthProfileStore();
702
+ const authProfiles = Object.entries(authStore.profiles).map(([profileId, profile]) => ({
703
+ id: profileId,
704
+ provider: profile.provider,
705
+ type: profile.type,
706
+ isExternal: false
707
+ }));
708
+ if (opts.json) {
709
+ const usage = includeUsage ? await loadProviderUsageSummary() : void 0;
710
+ const chat = {};
711
+ for (const plugin of plugins) chat[plugin.id] = plugin.config.listAccountIds(cfg);
712
+ const payload = {
713
+ chat,
714
+ auth: authProfiles,
715
+ ...usage ? { usage } : {}
716
+ };
717
+ runtime.log(JSON.stringify(payload, null, 2));
718
+ return;
719
+ }
720
+ const lines = [];
721
+ lines.push(theme.heading("Chat channels:"));
722
+ for (const plugin of plugins) {
723
+ const accounts = plugin.config.listAccountIds(cfg);
724
+ if (!accounts || accounts.length === 0) continue;
725
+ for (const accountId of accounts) {
726
+ const snapshot = await buildChannelAccountSnapshot({
727
+ plugin,
728
+ cfg,
729
+ accountId
730
+ });
731
+ lines.push(formatAccountLine({
732
+ channel: plugin,
733
+ snapshot
734
+ }));
735
+ }
736
+ }
737
+ lines.push("");
738
+ lines.push(theme.heading("Auth providers (OAuth + API keys):"));
739
+ if (authProfiles.length === 0) lines.push(theme.muted("- none"));
740
+ else for (const profile of authProfiles) {
741
+ const external = profile.isExternal ? theme.muted(" (synced)") : "";
742
+ lines.push(`- ${theme.accent(profile.id)} (${theme.success(profile.type)}${external})`);
743
+ }
744
+ runtime.log(lines.join("\n"));
745
+ if (includeUsage) {
746
+ runtime.log("");
747
+ const usage = await loadUsageWithProgress(runtime);
748
+ if (usage) {
749
+ const usageLines = formatUsageReportLines(usage);
750
+ if (usageLines.length > 0) {
751
+ usageLines[0] = theme.accent(usageLines[0]);
752
+ runtime.log(usageLines.join("\n"));
753
+ }
754
+ }
755
+ }
756
+ runtime.log("");
757
+ runtime.log(`Docs: ${formatDocsLink("/gateway/configuration", "gateway/configuration")}`);
758
+ }
759
+
760
+ //#endregion
761
+ //#region src/commands/channels/logs.ts
762
+ const DEFAULT_LIMIT = 200;
763
+ const MAX_BYTES = 1e6;
764
+ const getChannelSet = () => new Set([...listChannelPlugins().map((plugin) => plugin.id), "all"]);
765
+ function parseChannelFilter(raw) {
766
+ const trimmed = raw?.trim().toLowerCase();
767
+ if (!trimmed) return "all";
768
+ return getChannelSet().has(trimmed) ? trimmed : "all";
769
+ }
770
+ function matchesChannel(line, channel) {
771
+ if (channel === "all") return true;
772
+ const needle = `gateway/channels/${channel}`;
773
+ if (line.subsystem?.includes(needle)) return true;
774
+ if (line.module?.includes(channel)) return true;
775
+ return false;
776
+ }
777
+ async function readTailLines(file, limit) {
778
+ const stat = await fs.stat(file).catch(() => null);
779
+ if (!stat) return [];
780
+ const size = stat.size;
781
+ const start = Math.max(0, size - MAX_BYTES);
782
+ const handle = await fs.open(file, "r");
783
+ try {
784
+ const length = Math.max(0, size - start);
785
+ if (length === 0) return [];
786
+ const buffer = Buffer.alloc(length);
787
+ const readResult = await handle.read(buffer, 0, length, start);
788
+ let lines = buffer.toString("utf8", 0, readResult.bytesRead).split("\n");
789
+ if (start > 0) lines = lines.slice(1);
790
+ if (lines.length && lines[lines.length - 1] === "") lines = lines.slice(0, -1);
791
+ if (lines.length > limit) lines = lines.slice(lines.length - limit);
792
+ return lines;
793
+ } finally {
794
+ await handle.close();
795
+ }
796
+ }
797
+ async function channelsLogsCommand(opts, runtime = defaultRuntime) {
798
+ const channel = parseChannelFilter(opts.channel);
799
+ const limitRaw = typeof opts.lines === "string" ? Number(opts.lines) : opts.lines;
800
+ const limit = typeof limitRaw === "number" && Number.isFinite(limitRaw) && limitRaw > 0 ? Math.floor(limitRaw) : DEFAULT_LIMIT;
801
+ const file = getResolvedLoggerSettings().file;
802
+ const filtered = (await readTailLines(file, limit * 4)).map(parseLogLine).filter((line) => Boolean(line)).filter((line) => matchesChannel(line, channel));
803
+ const lines = filtered.slice(Math.max(0, filtered.length - limit));
804
+ if (opts.json) {
805
+ runtime.log(JSON.stringify({
806
+ file,
807
+ channel,
808
+ lines
809
+ }, null, 2));
810
+ return;
811
+ }
812
+ runtime.log(theme.info(`Log file: ${file}`));
813
+ if (channel !== "all") runtime.log(theme.info(`Channel: ${channel}`));
814
+ if (lines.length === 0) {
815
+ runtime.log(theme.muted("No matching log lines."));
816
+ return;
817
+ }
818
+ for (const line of lines) {
819
+ const ts = line.time ? `${line.time} ` : "";
820
+ const level = line.level ? `${line.level.toLowerCase()} ` : "";
821
+ runtime.log(`${ts}${level}${line.message}`.trim());
822
+ }
823
+ }
824
+
825
+ //#endregion
826
+ //#region src/commands/channels/remove.ts
827
+ function listAccountIds(cfg, channel) {
828
+ const plugin = getChannelPlugin(channel);
829
+ if (!plugin) return [];
830
+ return plugin.config.listAccountIds(cfg);
831
+ }
832
+ async function channelsRemoveCommand(opts, runtime = defaultRuntime, params) {
833
+ const cfg = await requireValidConfig(runtime);
834
+ if (!cfg) return;
835
+ const useWizard = shouldUseWizard(params);
836
+ const prompter = useWizard ? createClackPrompter() : null;
837
+ let channel = normalizeChannelId(opts.channel);
838
+ let accountId = normalizeAccountId(opts.account);
839
+ const deleteConfig = Boolean(opts.delete);
840
+ if (useWizard && prompter) {
841
+ await prompter.intro("Remove channel account");
842
+ const selectedChannel = await prompter.select({
843
+ message: "Channel",
844
+ options: listChannelPlugins().map((plugin) => ({
845
+ value: plugin.id,
846
+ label: plugin.meta.label
847
+ }))
848
+ });
849
+ channel = selectedChannel;
850
+ accountId = await (async () => {
851
+ const ids = listAccountIds(cfg, selectedChannel);
852
+ return normalizeAccountId(await prompter.select({
853
+ message: "Account",
854
+ options: ids.map((id) => ({
855
+ value: id,
856
+ label: id === DEFAULT_ACCOUNT_ID ? "default (primary)" : id
857
+ })),
858
+ initialValue: ids[0] ?? DEFAULT_ACCOUNT_ID
859
+ }));
860
+ })();
861
+ if (!await prompter.confirm({
862
+ message: `Disable ${channelLabel(selectedChannel)} account "${accountId}"? (keeps config)`,
863
+ initialValue: true
864
+ })) {
865
+ await prompter.outro("Cancelled.");
866
+ return;
867
+ }
868
+ } else {
869
+ if (!channel) {
870
+ runtime.error("Channel is required. Use --channel <name>.");
871
+ runtime.exit(1);
872
+ return;
873
+ }
874
+ if (!deleteConfig) {
875
+ if (!await createClackPrompter().confirm({
876
+ message: `Disable ${channelLabel(channel)} account "${accountId}"? (keeps config)`,
877
+ initialValue: true
878
+ })) return;
879
+ }
880
+ }
881
+ const plugin = getChannelPlugin(channel);
882
+ if (!plugin) {
883
+ runtime.error(`Unknown channel: ${channel}`);
884
+ runtime.exit(1);
885
+ return;
886
+ }
887
+ const resolvedAccountId = normalizeAccountId(accountId) ?? resolveChannelDefaultAccountId({
888
+ plugin,
889
+ cfg
890
+ });
891
+ const accountKey = resolvedAccountId || DEFAULT_ACCOUNT_ID;
892
+ let next = { ...cfg };
893
+ if (deleteConfig) {
894
+ if (!plugin.config.deleteAccount) {
895
+ runtime.error(`Channel ${channel} does not support delete.`);
896
+ runtime.exit(1);
897
+ return;
898
+ }
899
+ next = plugin.config.deleteAccount({
900
+ cfg: next,
901
+ accountId: resolvedAccountId
902
+ });
903
+ } else {
904
+ if (!plugin.config.setAccountEnabled) {
905
+ runtime.error(`Channel ${channel} does not support disable.`);
906
+ runtime.exit(1);
907
+ return;
908
+ }
909
+ next = plugin.config.setAccountEnabled({
910
+ cfg: next,
911
+ accountId: resolvedAccountId,
912
+ enabled: false
913
+ });
914
+ }
915
+ await writeConfigFile(next);
916
+ if (useWizard && prompter) await prompter.outro(deleteConfig ? `Deleted ${channelLabel(channel)} account "${accountKey}".` : `Disabled ${channelLabel(channel)} account "${accountKey}".`);
917
+ else runtime.log(deleteConfig ? `Deleted ${channelLabel(channel)} account "${accountKey}".` : `Disabled ${channelLabel(channel)} account "${accountKey}".`);
918
+ }
919
+
920
+ //#endregion
921
+ //#region src/commands/channels/resolve.ts
922
+ function resolvePreferredKind(kind) {
923
+ if (!kind || kind === "auto") return;
924
+ if (kind === "user") return "user";
925
+ return "group";
926
+ }
927
+ function detectAutoKind(input) {
928
+ const trimmed = input.trim();
929
+ if (!trimmed) return "group";
930
+ if (trimmed.startsWith("@")) return "user";
931
+ if (/^<@!?/.test(trimmed)) return "user";
932
+ if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed)) return "user";
933
+ if (/^(user|discord|slack|matrix|msteams|teams|zalo|zalouser|googlechat|google-chat|gchat):/i.test(trimmed)) return "user";
934
+ return "group";
935
+ }
936
+ function formatResolveResult(result) {
937
+ if (!result.resolved || !result.id) return `${result.input} -> unresolved`;
938
+ const name = result.name ? ` (${result.name})` : "";
939
+ const note = result.note ? ` [${result.note}]` : "";
940
+ return `${result.input} -> ${result.id}${name}${note}`;
941
+ }
942
+ async function channelsResolveCommand(opts, runtime) {
943
+ const cfg = loadConfig();
944
+ const entries = (opts.entries ?? []).map((entry) => entry.trim()).filter(Boolean);
945
+ if (entries.length === 0) throw new Error("At least one entry is required.");
946
+ const selection = await resolveMessageChannelSelection({
947
+ cfg,
948
+ channel: opts.channel ?? null
949
+ });
950
+ const plugin = getChannelPlugin(selection.channel);
951
+ if (!plugin?.resolver?.resolveTargets) throw new Error(`Channel ${selection.channel} does not support resolve.`);
952
+ const preferredKind = resolvePreferredKind(opts.kind);
953
+ let results = [];
954
+ if (preferredKind) results = (await plugin.resolver.resolveTargets({
955
+ cfg,
956
+ accountId: opts.account ?? null,
957
+ inputs: entries,
958
+ kind: preferredKind,
959
+ runtime
960
+ })).map((entry) => ({
961
+ input: entry.input,
962
+ resolved: entry.resolved,
963
+ id: entry.id,
964
+ name: entry.name,
965
+ note: entry.note
966
+ }));
967
+ else {
968
+ const byKind = /* @__PURE__ */ new Map();
969
+ for (const entry of entries) {
970
+ const kind = detectAutoKind(entry);
971
+ byKind.set(kind, [...byKind.get(kind) ?? [], entry]);
972
+ }
973
+ const resolved = [];
974
+ for (const [kind, inputs] of byKind.entries()) {
975
+ const batch = await plugin.resolver.resolveTargets({
976
+ cfg,
977
+ accountId: opts.account ?? null,
978
+ inputs,
979
+ kind,
980
+ runtime
981
+ });
982
+ resolved.push(...batch);
983
+ }
984
+ const byInput = new Map(resolved.map((entry) => [entry.input, entry]));
985
+ results = entries.map((input) => {
986
+ const entry = byInput.get(input);
987
+ return {
988
+ input,
989
+ resolved: entry?.resolved ?? false,
990
+ id: entry?.id,
991
+ name: entry?.name,
992
+ note: entry?.note
993
+ };
994
+ });
995
+ }
996
+ if (opts.json) {
997
+ runtime.log(JSON.stringify(results, null, 2));
998
+ return;
999
+ }
1000
+ for (const result of results) if (result.resolved && result.id) runtime.log(formatResolveResult(result));
1001
+ else runtime.error(danger(`${result.input} -> unresolved${result.error ? ` (${result.error})` : result.note ? ` (${result.note})` : ""}`));
1002
+ }
1003
+
1004
+ //#endregion
1005
+ //#region src/commands/channels/status.ts
1006
+ function formatGatewayChannelsStatusLines(payload) {
1007
+ const lines = [];
1008
+ lines.push(theme.success("Gateway reachable."));
1009
+ const accountLines = (provider, accounts) => accounts.map((account) => {
1010
+ const bits = [];
1011
+ if (typeof account.enabled === "boolean") bits.push(account.enabled ? "enabled" : "disabled");
1012
+ if (typeof account.configured === "boolean") bits.push(account.configured ? "configured" : "not configured");
1013
+ if (typeof account.linked === "boolean") bits.push(account.linked ? "linked" : "not linked");
1014
+ if (typeof account.running === "boolean") bits.push(account.running ? "running" : "stopped");
1015
+ if (typeof account.connected === "boolean") bits.push(account.connected ? "connected" : "disconnected");
1016
+ const inboundAt = typeof account.lastInboundAt === "number" && Number.isFinite(account.lastInboundAt) ? account.lastInboundAt : null;
1017
+ const outboundAt = typeof account.lastOutboundAt === "number" && Number.isFinite(account.lastOutboundAt) ? account.lastOutboundAt : null;
1018
+ if (inboundAt) bits.push(`in:${formatTimeAgo(Date.now() - inboundAt)}`);
1019
+ if (outboundAt) bits.push(`out:${formatTimeAgo(Date.now() - outboundAt)}`);
1020
+ if (typeof account.mode === "string" && account.mode.length > 0) bits.push(`mode:${account.mode}`);
1021
+ const botUsername = (() => {
1022
+ const bot = account.bot;
1023
+ const probeBot = account.probe?.bot;
1024
+ const raw = bot?.username ?? probeBot?.username ?? "";
1025
+ if (typeof raw !== "string") return "";
1026
+ const trimmed = raw.trim();
1027
+ if (!trimmed) return "";
1028
+ return trimmed.startsWith("@") ? trimmed : `@${trimmed}`;
1029
+ })();
1030
+ if (botUsername) bits.push(`bot:${botUsername}`);
1031
+ if (typeof account.dmPolicy === "string" && account.dmPolicy.length > 0) bits.push(`dm:${account.dmPolicy}`);
1032
+ if (Array.isArray(account.allowFrom) && account.allowFrom.length > 0) bits.push(`allow:${account.allowFrom.slice(0, 2).join(",")}`);
1033
+ if (typeof account.tokenSource === "string" && account.tokenSource) bits.push(`token:${account.tokenSource}`);
1034
+ if (typeof account.botTokenSource === "string" && account.botTokenSource) bits.push(`bot:${account.botTokenSource}`);
1035
+ if (typeof account.appTokenSource === "string" && account.appTokenSource) bits.push(`app:${account.appTokenSource}`);
1036
+ const messageContent = account.application?.intents?.messageContent;
1037
+ if (typeof messageContent === "string" && messageContent.length > 0 && messageContent !== "enabled") bits.push(`intents:content=${messageContent}`);
1038
+ if (account.allowUnmentionedGroups === true) bits.push("groups:unmentioned");
1039
+ if (typeof account.baseUrl === "string" && account.baseUrl) bits.push(`url:${account.baseUrl}`);
1040
+ const probe = account.probe;
1041
+ if (probe && typeof probe.ok === "boolean") bits.push(probe.ok ? "works" : "probe failed");
1042
+ const audit = account.audit;
1043
+ if (audit && typeof audit.ok === "boolean") bits.push(audit.ok ? "audit ok" : "audit failed");
1044
+ if (typeof account.lastError === "string" && account.lastError) bits.push(`error:${account.lastError}`);
1045
+ return `- ${formatChannelAccountLabel({
1046
+ channel: provider,
1047
+ accountId: typeof account.accountId === "string" ? account.accountId : "default",
1048
+ name: (typeof account.name === "string" ? account.name.trim() : "") || void 0
1049
+ })}: ${bits.join(", ")}`;
1050
+ });
1051
+ const plugins = listChannelPlugins();
1052
+ const accountsByChannel = payload.channelAccounts;
1053
+ const accountPayloads = {};
1054
+ for (const plugin of plugins) {
1055
+ const raw = accountsByChannel?.[plugin.id];
1056
+ if (Array.isArray(raw)) accountPayloads[plugin.id] = raw;
1057
+ }
1058
+ for (const plugin of plugins) {
1059
+ const accounts = accountPayloads[plugin.id];
1060
+ if (accounts && accounts.length > 0) lines.push(...accountLines(plugin.id, accounts));
1061
+ }
1062
+ lines.push("");
1063
+ const issues = collectChannelStatusIssues(payload);
1064
+ if (issues.length > 0) {
1065
+ lines.push(theme.warn("Warnings:"));
1066
+ for (const issue of issues) lines.push(`- ${issue.channel} ${issue.accountId}: ${issue.message}${issue.fix ? ` (${issue.fix})` : ""}`);
1067
+ lines.push(`- Run: ${formatCliCommand("anima doctor")}`);
1068
+ lines.push("");
1069
+ }
1070
+ lines.push(`Tip: ${formatDocsLink("/cli#status", "status --deep")} adds gateway health probes to status output (requires a reachable gateway).`);
1071
+ return lines;
1072
+ }
1073
+ async function formatConfigChannelsStatusLines(cfg, meta) {
1074
+ const lines = [];
1075
+ lines.push(theme.warn("Gateway not reachable; showing config-only status."));
1076
+ if (meta.path) lines.push(`Config: ${meta.path}`);
1077
+ if (meta.mode) lines.push(`Mode: ${meta.mode}`);
1078
+ if (meta.path || meta.mode) lines.push("");
1079
+ const accountLines = (provider, accounts) => accounts.map((account) => {
1080
+ const bits = [];
1081
+ if (typeof account.enabled === "boolean") bits.push(account.enabled ? "enabled" : "disabled");
1082
+ if (typeof account.configured === "boolean") bits.push(account.configured ? "configured" : "not configured");
1083
+ if (typeof account.linked === "boolean") bits.push(account.linked ? "linked" : "not linked");
1084
+ if (typeof account.mode === "string" && account.mode.length > 0) bits.push(`mode:${account.mode}`);
1085
+ if (typeof account.tokenSource === "string" && account.tokenSource) bits.push(`token:${account.tokenSource}`);
1086
+ if (typeof account.botTokenSource === "string" && account.botTokenSource) bits.push(`bot:${account.botTokenSource}`);
1087
+ if (typeof account.appTokenSource === "string" && account.appTokenSource) bits.push(`app:${account.appTokenSource}`);
1088
+ if (typeof account.baseUrl === "string" && account.baseUrl) bits.push(`url:${account.baseUrl}`);
1089
+ return `- ${formatChannelAccountLabel({
1090
+ channel: provider,
1091
+ accountId: typeof account.accountId === "string" ? account.accountId : "default",
1092
+ name: (typeof account.name === "string" ? account.name.trim() : "") || void 0
1093
+ })}: ${bits.join(", ")}`;
1094
+ });
1095
+ const plugins = listChannelPlugins();
1096
+ for (const plugin of plugins) {
1097
+ const accountIds = plugin.config.listAccountIds(cfg);
1098
+ if (!accountIds.length) continue;
1099
+ const snapshots = [];
1100
+ for (const accountId of accountIds) {
1101
+ const snapshot = await buildChannelAccountSnapshot({
1102
+ plugin,
1103
+ cfg,
1104
+ accountId
1105
+ });
1106
+ snapshots.push(snapshot);
1107
+ }
1108
+ if (snapshots.length > 0) lines.push(...accountLines(plugin.id, snapshots));
1109
+ }
1110
+ lines.push("");
1111
+ lines.push(`Tip: ${formatDocsLink("/cli#status", "status --deep")} adds gateway health probes to status output (requires a reachable gateway).`);
1112
+ return lines;
1113
+ }
1114
+ async function channelsStatusCommand(opts, runtime = defaultRuntime) {
1115
+ const timeoutMs = Number(opts.timeout ?? 1e4);
1116
+ const statusLabel = opts.probe ? "Checking channel status (probe)…" : "Checking channel status…";
1117
+ if (opts.json !== true && !process.stderr.isTTY) runtime.log(statusLabel);
1118
+ try {
1119
+ const payload = await withProgress({
1120
+ label: statusLabel,
1121
+ indeterminate: true,
1122
+ enabled: opts.json !== true
1123
+ }, async () => await callGateway({
1124
+ method: "channels.status",
1125
+ params: {
1126
+ probe: Boolean(opts.probe),
1127
+ timeoutMs
1128
+ },
1129
+ timeoutMs
1130
+ }));
1131
+ if (opts.json) {
1132
+ runtime.log(JSON.stringify(payload, null, 2));
1133
+ return;
1134
+ }
1135
+ runtime.log(formatGatewayChannelsStatusLines(payload).join("\n"));
1136
+ } catch (err) {
1137
+ runtime.error(`Gateway not reachable: ${String(err)}`);
1138
+ const cfg = await requireValidConfig(runtime);
1139
+ if (!cfg) return;
1140
+ const snapshot = await readConfigFileSnapshot();
1141
+ const mode = cfg.gateway?.mode === "remote" ? "remote" : "local";
1142
+ runtime.log((await formatConfigChannelsStatusLines(cfg, {
1143
+ path: snapshot.path,
1144
+ mode
1145
+ })).join("\n"));
1146
+ }
1147
+ }
1148
+
1149
+ //#endregion
1150
+ //#region src/cli/channel-auth.ts
1151
+ async function runChannelLogin(opts, runtime = defaultRuntime) {
1152
+ const channelInput = opts.channel ?? DEFAULT_CHAT_CHANNEL;
1153
+ const channelId = normalizeChannelId(channelInput);
1154
+ if (!channelId) throw new Error(`Unsupported channel: ${channelInput}`);
1155
+ const plugin = getChannelPlugin(channelId);
1156
+ if (!plugin?.auth?.login) throw new Error(`Channel ${channelId} does not support login`);
1157
+ setVerbose(Boolean(opts.verbose));
1158
+ const cfg = loadConfig();
1159
+ const accountId = opts.account?.trim() || resolveChannelDefaultAccountId({
1160
+ plugin,
1161
+ cfg
1162
+ });
1163
+ await plugin.auth.login({
1164
+ cfg,
1165
+ accountId,
1166
+ runtime,
1167
+ verbose: Boolean(opts.verbose),
1168
+ channelInput
1169
+ });
1170
+ }
1171
+ async function runChannelLogout(opts, runtime = defaultRuntime) {
1172
+ const channelInput = opts.channel ?? DEFAULT_CHAT_CHANNEL;
1173
+ const channelId = normalizeChannelId(channelInput);
1174
+ if (!channelId) throw new Error(`Unsupported channel: ${channelInput}`);
1175
+ const plugin = getChannelPlugin(channelId);
1176
+ if (!plugin?.gateway?.logoutAccount) throw new Error(`Channel ${channelId} does not support logout`);
1177
+ const cfg = loadConfig();
1178
+ const accountId = opts.account?.trim() || resolveChannelDefaultAccountId({
1179
+ plugin,
1180
+ cfg
1181
+ });
1182
+ const account = plugin.config.resolveAccount(cfg, accountId);
1183
+ await plugin.gateway.logoutAccount({
1184
+ cfg,
1185
+ accountId,
1186
+ account,
1187
+ runtime
1188
+ });
1189
+ }
1190
+
1191
+ //#endregion
1192
+ //#region src/cli/channels-cli.ts
1193
+ const optionNamesAdd = [
1194
+ "channel",
1195
+ "account",
1196
+ "name",
1197
+ "token",
1198
+ "tokenFile",
1199
+ "botToken",
1200
+ "appToken",
1201
+ "signalNumber",
1202
+ "cliPath",
1203
+ "dbPath",
1204
+ "service",
1205
+ "region",
1206
+ "authDir",
1207
+ "httpUrl",
1208
+ "httpHost",
1209
+ "httpPort",
1210
+ "webhookPath",
1211
+ "webhookUrl",
1212
+ "audienceType",
1213
+ "audience",
1214
+ "useEnv",
1215
+ "homeserver",
1216
+ "userId",
1217
+ "accessToken",
1218
+ "password",
1219
+ "deviceName",
1220
+ "initialSyncLimit",
1221
+ "ship",
1222
+ "url",
1223
+ "code",
1224
+ "groupChannels",
1225
+ "dmAllowlist",
1226
+ "autoDiscoverChannels"
1227
+ ];
1228
+ const optionNamesRemove = [
1229
+ "channel",
1230
+ "account",
1231
+ "delete"
1232
+ ];
1233
+ function runChannelsCommand(action) {
1234
+ return runCommandWithRuntime(defaultRuntime, action);
1235
+ }
1236
+ function runChannelsCommandWithDanger(action, label) {
1237
+ return runCommandWithRuntime(defaultRuntime, action, (err) => {
1238
+ defaultRuntime.error(danger(`${label}: ${String(err)}`));
1239
+ defaultRuntime.exit(1);
1240
+ });
1241
+ }
1242
+ function registerChannelsCli(program) {
1243
+ const channelNames = formatCliChannelOptions();
1244
+ const channels = program.command("channels").description("Manage chat channel accounts").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/channels", "docs.noxsoft.net/anima/cli/channels")}\n`);
1245
+ channels.command("list").description("List configured channels + auth profiles").option("--no-usage", "Skip model provider usage/quota snapshots").option("--json", "Output JSON", false).action(async (opts) => {
1246
+ await runChannelsCommand(async () => {
1247
+ await channelsListCommand(opts, defaultRuntime);
1248
+ });
1249
+ });
1250
+ channels.command("status").description("Show gateway channel status (use status --deep for local)").option("--probe", "Probe channel credentials", false).option("--timeout <ms>", "Timeout in ms", "10000").option("--json", "Output JSON", false).action(async (opts) => {
1251
+ await runChannelsCommand(async () => {
1252
+ await channelsStatusCommand(opts, defaultRuntime);
1253
+ });
1254
+ });
1255
+ channels.command("capabilities").description("Show provider capabilities (intents/scopes + supported features)").option("--channel <name>", `Channel (${formatCliChannelOptions(["all"])})`).option("--account <id>", "Account id (only with --channel)").option("--target <dest>", "Channel target for permission audit (Discord channel:<id>)").option("--timeout <ms>", "Timeout in ms", "10000").option("--json", "Output JSON", false).action(async (opts) => {
1256
+ await runChannelsCommand(async () => {
1257
+ await channelsCapabilitiesCommand(opts, defaultRuntime);
1258
+ });
1259
+ });
1260
+ channels.command("resolve").description("Resolve channel/user names to IDs").argument("<entries...>", "Entries to resolve (names or ids)").option("--channel <name>", `Channel (${channelNames})`).option("--account <id>", "Account id (accountId)").option("--kind <kind>", "Target kind (auto|user|group)", "auto").option("--json", "Output JSON", false).action(async (entries, opts) => {
1261
+ await runChannelsCommand(async () => {
1262
+ await channelsResolveCommand({
1263
+ channel: opts.channel,
1264
+ account: opts.account,
1265
+ kind: opts.kind,
1266
+ json: Boolean(opts.json),
1267
+ entries: Array.isArray(entries) ? entries : [String(entries)]
1268
+ }, defaultRuntime);
1269
+ });
1270
+ });
1271
+ channels.command("logs").description("Show recent channel logs from the gateway log file").option("--channel <name>", `Channel (${formatCliChannelOptions(["all"])})`, "all").option("--lines <n>", "Number of lines (default: 200)", "200").option("--json", "Output JSON", false).action(async (opts) => {
1272
+ await runChannelsCommand(async () => {
1273
+ await channelsLogsCommand(opts, defaultRuntime);
1274
+ });
1275
+ });
1276
+ channels.command("add").description("Add or update a channel account").option("--channel <name>", `Channel (${channelNames})`).option("--account <id>", "Account id (default when omitted)").option("--name <name>", "Display name for this account").option("--token <token>", "Bot token (Telegram/Discord)").option("--token-file <path>", "Bot token file (Telegram)").option("--bot-token <token>", "Slack bot token (xoxb-...)").option("--app-token <token>", "Slack app token (xapp-...)").option("--signal-number <e164>", "Signal account number (E.164)").option("--cli-path <path>", "CLI path (signal-cli or imsg)").option("--db-path <path>", "iMessage database path").option("--service <service>", "iMessage service (imessage|sms|auto)").option("--region <region>", "iMessage region (for SMS)").option("--auth-dir <path>", "WhatsApp auth directory override").option("--http-url <url>", "Signal HTTP daemon base URL").option("--http-host <host>", "Signal HTTP host").option("--http-port <port>", "Signal HTTP port").option("--webhook-path <path>", "Webhook path (Google Chat/BlueBubbles)").option("--webhook-url <url>", "Google Chat webhook URL").option("--audience-type <type>", "Google Chat audience type (app-url|project-number)").option("--audience <value>", "Google Chat audience value (app URL or project number)").option("--homeserver <url>", "Matrix homeserver URL").option("--user-id <id>", "Matrix user ID").option("--access-token <token>", "Matrix access token").option("--password <password>", "Matrix password").option("--device-name <name>", "Matrix device name").option("--initial-sync-limit <n>", "Matrix initial sync limit").option("--ship <ship>", "Tlon ship name (~sampel-palnet)").option("--url <url>", "Tlon ship URL").option("--code <code>", "Tlon login code").option("--group-channels <list>", "Tlon group channels (comma-separated)").option("--dm-allowlist <list>", "Tlon DM allowlist (comma-separated ships)").option("--auto-discover-channels", "Tlon auto-discover group channels").option("--no-auto-discover-channels", "Disable Tlon auto-discovery").option("--use-env", "Use env token (default account only)", false).action(async (opts, command) => {
1277
+ await runChannelsCommand(async () => {
1278
+ await channelsAddCommand(opts, defaultRuntime, { hasFlags: hasExplicitOptions(command, optionNamesAdd) });
1279
+ });
1280
+ });
1281
+ channels.command("remove").description("Disable or delete a channel account").option("--channel <name>", `Channel (${channelNames})`).option("--account <id>", "Account id (default when omitted)").option("--delete", "Delete config entries (no prompt)", false).action(async (opts, command) => {
1282
+ await runChannelsCommand(async () => {
1283
+ await channelsRemoveCommand(opts, defaultRuntime, { hasFlags: hasExplicitOptions(command, optionNamesRemove) });
1284
+ });
1285
+ });
1286
+ channels.command("login").description("Link a channel account (if supported)").option("--channel <channel>", "Channel alias (default: whatsapp)").option("--account <id>", "Account id (accountId)").option("--verbose", "Verbose connection logs", false).action(async (opts) => {
1287
+ await runChannelsCommandWithDanger(async () => {
1288
+ await runChannelLogin({
1289
+ channel: opts.channel,
1290
+ account: opts.account,
1291
+ verbose: Boolean(opts.verbose)
1292
+ }, defaultRuntime);
1293
+ }, "Channel login failed");
1294
+ });
1295
+ channels.command("logout").description("Log out of a channel session (if supported)").option("--channel <channel>", "Channel alias (default: whatsapp)").option("--account <id>", "Account id (accountId)").action(async (opts) => {
1296
+ await runChannelsCommandWithDanger(async () => {
1297
+ await runChannelLogout({
1298
+ channel: opts.channel,
1299
+ account: opts.account
1300
+ }, defaultRuntime);
1301
+ }, "Channel logout failed");
1302
+ });
1303
+ }
1304
+
1305
+ //#endregion
1306
+ export { registerChannelsCli };