@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
@@ -1,2681 +0,0 @@
1
- import { $ as SYNTHETIC_DEFAULT_MODEL_REF, Dt as DEFAULT_PROVIDER, Et as DEFAULT_MODEL, F as resolveConfiguredModelRef, K as VENICE_DEFAULT_MODEL_REF, P as resolveAllowlistModelKey, St as CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF, b as resolveAnimaAgentDir, bt as discoverHuggingfaceModels, c as generateChutesPkce, d as listProfilesForProvider, h as ensureAuthProfileStore, l as parseOAuthCallbackInput, m as upsertAuthProfileWithLock, n as resolveAuthProfileOrder, o as CHUTES_AUTHORIZE_ENDPOINT, p as upsertAuthProfile, rt as getCustomProviderApiKey, s as exchangeChutesCodeForTokens, st as resolveEnvApiKey, xt as isHuggingfacePolicyLocked } from "./auth-profiles-DxI8L7bs.js";
2
- import { c as escapeRegExp, g as resolveConfigDir } from "./utils-C9sj30YY.js";
3
- import { a as resolveAgentModelPrimary, c as resolveDefaultAgentId, r as resolveAgentDir, s as resolveAgentWorkspaceDir, w as resolveDefaultAgentWorkspaceDir } from "./agent-scope-OZi7lb8S.js";
4
- import { n as isLoopbackHost } from "./net-B5lXhYLV.js";
5
- import { c as fetchWithTimeout } from "./media-THyainiE.js";
6
- import { Yt as loadModelCatalog } from "./cli-session-Dd8DKb5a.js";
7
- import { a as enablePluginInConfig } from "./onboard-channels-D7NbA55V.js";
8
- import { d as openUrl } from "./onboard-helpers-DO_hgZb9.js";
9
- import { $ as XIAOMI_DEFAULT_MODEL_REF, A as applySyntheticConfig, B as applyZaiConfig, C as applyMoonshotConfigCn, Ct as XAI_DEFAULT_MODEL_REF, D as applyOpenrouterProviderConfig, Dt as ZAI_GLOBAL_BASE_URL, E as applyOpenrouterConfig, Et as ZAI_CODING_GLOBAL_BASE_URL, F as applyVeniceProviderConfig, G as applyCloudflareAiGatewayProviderConfig, H as applyLitellmConfig, I as applyXaiConfig, J as HUGGINGFACE_DEFAULT_MODEL_REF, K as applyVercelAiGatewayConfig, L as applyXaiProviderConfig, M as applyTogetherConfig, N as applyTogetherProviderConfig, O as applyQianfanConfig, Ot as buildTokenProfileId, P as applyVeniceConfig, Q as VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, R as applyXiaomiConfig, S as applyMoonshotConfig, St as QIANFAN_DEFAULT_MODEL_REF, T as applyMoonshotProviderConfigCn, Tt as ZAI_CODING_CN_BASE_URL, U as applyLitellmProviderConfig, V as applyZaiProviderConfig, W as applyCloudflareAiGatewayConfig, X as OPENROUTER_DEFAULT_MODEL_REF, Y as LITELLM_DEFAULT_MODEL_REF, Z as TOGETHER_DEFAULT_MODEL_REF, _ as applyAuthProfileConfig, _t as setXiaomiApiKey, a as resolveProviderMatch, at as setKimiCodingApiKey, b as applyKimiCodeConfig, bt as KIMI_CODING_MODEL_REF, c as resolvePluginProviders, ct as setMoonshotApiKey, d as applyMinimaxApiConfig, dt as setQianfanApiKey, et as ZAI_DEFAULT_MODEL_REF, f as applyMinimaxApiConfigCn, ft as setSyntheticApiKey, g as applyMinimaxProviderConfig, gt as setXaiApiKey, h as applyMinimaxConfig, ht as setVercelAiGatewayApiKey, i as pickAuthMethod, it as setHuggingfaceApiKey, j as applySyntheticProviderConfig, k as applyQianfanProviderConfig, kt as validateAnthropicSetupToken, l as applyOpencodeZenConfig, lt as setOpencodeZenApiKey, m as applyMinimaxApiProviderConfigCn, mt as setVeniceApiKey, n as applyDefaultModel, nt as setCloudflareAiGatewayConfig, o as createVpsAwareOAuthHandlers, ot as setLitellmApiKey, p as applyMinimaxApiProviderConfig, pt as setTogetherApiKey, q as applyVercelAiGatewayProviderConfig, r as mergeConfigPatch, rt as setGeminiApiKey, s as isRemoteEnvironment, st as setMinimaxApiKey, t as githubCopilotLoginCommand, tt as setAnthropicApiKey, u as applyOpencodeZenProviderConfig, ut as setOpenrouterApiKey, vt as setZaiApiKey, w as applyMoonshotProviderConfig, wt as ZAI_CN_BASE_URL, x as applyKimiCodeProviderConfig, xt as MOONSHOT_DEFAULT_MODEL_REF, y as applyHuggingfaceProviderConfig, yt as writeOAuthCredentials, z as applyXiaomiProviderConfig } from "./github-copilot-auth-4IUFp669.js";
10
- import path from "node:path";
11
- import fs from "node:fs";
12
- import { loginOpenAICodex } from "@mariozechner/pi-ai";
13
- import { randomBytes } from "node:crypto";
14
- import { createServer } from "node:http";
15
-
16
- //#region src/commands/auth-choice-legacy.ts
17
- const AUTH_CHOICE_LEGACY_ALIASES_FOR_CLI = [
18
- "setup-token",
19
- "oauth",
20
- "claude-cli",
21
- "codex-cli",
22
- "minimax-cloud",
23
- "minimax"
24
- ];
25
- function normalizeLegacyOnboardAuthChoice(authChoice) {
26
- if (authChoice === "oauth" || authChoice === "claude-cli") return "setup-token";
27
- if (authChoice === "codex-cli") return "openai-codex";
28
- return authChoice;
29
- }
30
- function isDeprecatedAuthChoice(authChoice) {
31
- return authChoice === "claude-cli" || authChoice === "codex-cli";
32
- }
33
-
34
- //#endregion
35
- //#region src/commands/auth-choice-options.ts
36
- const AUTH_CHOICE_GROUP_DEFS = [
37
- {
38
- value: "openai",
39
- label: "OpenAI",
40
- hint: "Codex OAuth + API key",
41
- choices: ["openai-codex", "openai-api-key"]
42
- },
43
- {
44
- value: "anthropic",
45
- label: "Anthropic",
46
- hint: "setup-token + API key",
47
- choices: ["token", "apiKey"]
48
- },
49
- {
50
- value: "chutes",
51
- label: "Chutes",
52
- hint: "OAuth",
53
- choices: ["chutes"]
54
- },
55
- {
56
- value: "vllm",
57
- label: "vLLM",
58
- hint: "Local/self-hosted OpenAI-compatible",
59
- choices: ["vllm"]
60
- },
61
- {
62
- value: "minimax",
63
- label: "MiniMax",
64
- hint: "M2.5 (recommended)",
65
- choices: [
66
- "minimax-portal",
67
- "minimax-api",
68
- "minimax-api-key-cn",
69
- "minimax-api-lightning"
70
- ]
71
- },
72
- {
73
- value: "moonshot",
74
- label: "Moonshot AI (Kimi K2.5)",
75
- hint: "Kimi K2.5 + Kimi Coding",
76
- choices: [
77
- "moonshot-api-key",
78
- "moonshot-api-key-cn",
79
- "kimi-code-api-key"
80
- ]
81
- },
82
- {
83
- value: "google",
84
- label: "Google",
85
- hint: "Gemini API key + OAuth",
86
- choices: [
87
- "gemini-api-key",
88
- "google-antigravity",
89
- "google-gemini-cli"
90
- ]
91
- },
92
- {
93
- value: "xai",
94
- label: "xAI (Grok)",
95
- hint: "API key",
96
- choices: ["xai-api-key"]
97
- },
98
- {
99
- value: "openrouter",
100
- label: "OpenRouter",
101
- hint: "API key",
102
- choices: ["openrouter-api-key"]
103
- },
104
- {
105
- value: "qwen",
106
- label: "Qwen",
107
- hint: "OAuth",
108
- choices: ["qwen-portal"]
109
- },
110
- {
111
- value: "zai",
112
- label: "Z.AI",
113
- hint: "GLM Coding Plan / Global / CN",
114
- choices: [
115
- "zai-coding-global",
116
- "zai-coding-cn",
117
- "zai-global",
118
- "zai-cn"
119
- ]
120
- },
121
- {
122
- value: "qianfan",
123
- label: "Qianfan",
124
- hint: "API key",
125
- choices: ["qianfan-api-key"]
126
- },
127
- {
128
- value: "copilot",
129
- label: "Copilot",
130
- hint: "GitHub + local proxy",
131
- choices: ["github-copilot", "copilot-proxy"]
132
- },
133
- {
134
- value: "ai-gateway",
135
- label: "Vercel AI Gateway",
136
- hint: "API key",
137
- choices: ["ai-gateway-api-key"]
138
- },
139
- {
140
- value: "opencode-zen",
141
- label: "OpenCode Zen",
142
- hint: "API key",
143
- choices: ["opencode-zen"]
144
- },
145
- {
146
- value: "xiaomi",
147
- label: "Xiaomi",
148
- hint: "API key",
149
- choices: ["xiaomi-api-key"]
150
- },
151
- {
152
- value: "synthetic",
153
- label: "Synthetic",
154
- hint: "Anthropic-compatible (multi-model)",
155
- choices: ["synthetic-api-key"]
156
- },
157
- {
158
- value: "together",
159
- label: "Together AI",
160
- hint: "API key",
161
- choices: ["together-api-key"]
162
- },
163
- {
164
- value: "huggingface",
165
- label: "Hugging Face",
166
- hint: "Inference API (HF token)",
167
- choices: ["huggingface-api-key"]
168
- },
169
- {
170
- value: "venice",
171
- label: "Venice AI",
172
- hint: "Privacy-focused (uncensored models)",
173
- choices: ["venice-api-key"]
174
- },
175
- {
176
- value: "litellm",
177
- label: "LiteLLM",
178
- hint: "Unified LLM gateway (100+ providers)",
179
- choices: ["litellm-api-key"]
180
- },
181
- {
182
- value: "cloudflare-ai-gateway",
183
- label: "Cloudflare AI Gateway",
184
- hint: "Account ID + Gateway ID + API key",
185
- choices: ["cloudflare-ai-gateway-api-key"]
186
- },
187
- {
188
- value: "custom",
189
- label: "Custom Provider",
190
- hint: "Any OpenAI or Anthropic compatible endpoint",
191
- choices: ["custom-api-key"]
192
- }
193
- ];
194
- const BASE_AUTH_CHOICE_OPTIONS = [
195
- {
196
- value: "token",
197
- label: "Anthropic token (paste setup-token)",
198
- hint: "run `claude setup-token` elsewhere, then paste the token here"
199
- },
200
- {
201
- value: "openai-codex",
202
- label: "OpenAI Codex (ChatGPT OAuth)"
203
- },
204
- {
205
- value: "chutes",
206
- label: "Chutes (OAuth)"
207
- },
208
- {
209
- value: "vllm",
210
- label: "vLLM (custom URL + model)",
211
- hint: "Local/self-hosted OpenAI-compatible server"
212
- },
213
- {
214
- value: "openai-api-key",
215
- label: "OpenAI API key"
216
- },
217
- {
218
- value: "xai-api-key",
219
- label: "xAI (Grok) API key"
220
- },
221
- {
222
- value: "qianfan-api-key",
223
- label: "Qianfan API key"
224
- },
225
- {
226
- value: "openrouter-api-key",
227
- label: "OpenRouter API key"
228
- },
229
- {
230
- value: "litellm-api-key",
231
- label: "LiteLLM API key",
232
- hint: "Unified gateway for 100+ LLM providers"
233
- },
234
- {
235
- value: "ai-gateway-api-key",
236
- label: "Vercel AI Gateway API key"
237
- },
238
- {
239
- value: "cloudflare-ai-gateway-api-key",
240
- label: "Cloudflare AI Gateway",
241
- hint: "Account ID + Gateway ID + API key"
242
- },
243
- {
244
- value: "moonshot-api-key",
245
- label: "Kimi API key (.ai)"
246
- },
247
- {
248
- value: "moonshot-api-key-cn",
249
- label: "Kimi API key (.cn)"
250
- },
251
- {
252
- value: "kimi-code-api-key",
253
- label: "Kimi Code API key (subscription)"
254
- },
255
- {
256
- value: "synthetic-api-key",
257
- label: "Synthetic API key"
258
- },
259
- {
260
- value: "venice-api-key",
261
- label: "Venice AI API key",
262
- hint: "Privacy-focused inference (uncensored models)"
263
- },
264
- {
265
- value: "together-api-key",
266
- label: "Together AI API key",
267
- hint: "Access to Llama, DeepSeek, Qwen, and more open models"
268
- },
269
- {
270
- value: "huggingface-api-key",
271
- label: "Hugging Face API key (HF token)",
272
- hint: "Inference Providers — OpenAI-compatible chat"
273
- },
274
- {
275
- value: "github-copilot",
276
- label: "GitHub Copilot (GitHub device login)",
277
- hint: "Uses GitHub device flow"
278
- },
279
- {
280
- value: "gemini-api-key",
281
- label: "Google Gemini API key"
282
- },
283
- {
284
- value: "google-antigravity",
285
- label: "Google Antigravity OAuth",
286
- hint: "Uses the bundled Antigravity auth plugin"
287
- },
288
- {
289
- value: "google-gemini-cli",
290
- label: "Google Gemini CLI OAuth",
291
- hint: "Uses the bundled Gemini CLI auth plugin"
292
- },
293
- {
294
- value: "zai-api-key",
295
- label: "Z.AI API key"
296
- },
297
- {
298
- value: "zai-coding-global",
299
- label: "Coding-Plan-Global",
300
- hint: "GLM Coding Plan Global (api.z.ai)"
301
- },
302
- {
303
- value: "zai-coding-cn",
304
- label: "Coding-Plan-CN",
305
- hint: "GLM Coding Plan CN (open.bigmodel.cn)"
306
- },
307
- {
308
- value: "zai-global",
309
- label: "Global",
310
- hint: "Z.AI Global (api.z.ai)"
311
- },
312
- {
313
- value: "zai-cn",
314
- label: "CN",
315
- hint: "Z.AI CN (open.bigmodel.cn)"
316
- },
317
- {
318
- value: "xiaomi-api-key",
319
- label: "Xiaomi API key"
320
- },
321
- {
322
- value: "minimax-portal",
323
- label: "MiniMax OAuth",
324
- hint: "Oauth plugin for MiniMax"
325
- },
326
- {
327
- value: "qwen-portal",
328
- label: "Qwen OAuth"
329
- },
330
- {
331
- value: "copilot-proxy",
332
- label: "Copilot Proxy (local)",
333
- hint: "Local proxy for VS Code Copilot models"
334
- },
335
- {
336
- value: "apiKey",
337
- label: "Anthropic API key"
338
- },
339
- {
340
- value: "opencode-zen",
341
- label: "OpenCode Zen (multi-model proxy)",
342
- hint: "Claude, GPT, Gemini via opencode.ai/zen"
343
- },
344
- {
345
- value: "minimax-api",
346
- label: "MiniMax M2.5"
347
- },
348
- {
349
- value: "minimax-api-key-cn",
350
- label: "MiniMax M2.5 (CN)",
351
- hint: "China endpoint (api.minimaxi.com)"
352
- },
353
- {
354
- value: "minimax-api-lightning",
355
- label: "MiniMax M2.5 Lightning",
356
- hint: "Faster, higher output cost"
357
- },
358
- {
359
- value: "custom-api-key",
360
- label: "Custom Provider"
361
- }
362
- ];
363
- function formatAuthChoiceChoicesForCli(params) {
364
- const includeSkip = params?.includeSkip ?? true;
365
- const includeLegacyAliases = params?.includeLegacyAliases ?? false;
366
- const values = BASE_AUTH_CHOICE_OPTIONS.map((opt) => opt.value);
367
- if (includeSkip) values.push("skip");
368
- if (includeLegacyAliases) values.push(...AUTH_CHOICE_LEGACY_ALIASES_FOR_CLI);
369
- return values.join("|");
370
- }
371
- function buildAuthChoiceOptions(params) {
372
- params.store;
373
- const options = [...BASE_AUTH_CHOICE_OPTIONS];
374
- if (params.includeSkip) options.push({
375
- value: "skip",
376
- label: "Skip for now"
377
- });
378
- return options;
379
- }
380
- function buildAuthChoiceGroups(params) {
381
- const options = buildAuthChoiceOptions({
382
- ...params,
383
- includeSkip: false
384
- });
385
- const optionByValue = new Map(options.map((opt) => [opt.value, opt]));
386
- return {
387
- groups: AUTH_CHOICE_GROUP_DEFS.map((group) => ({
388
- ...group,
389
- options: group.choices.map((choice) => optionByValue.get(choice)).filter((opt) => Boolean(opt))
390
- })),
391
- skipOption: params.includeSkip ? {
392
- value: "skip",
393
- label: "Skip for now"
394
- } : void 0
395
- };
396
- }
397
-
398
- //#endregion
399
- //#region src/commands/auth-choice-prompt.ts
400
- const BACK_VALUE = "__back";
401
- async function promptAuthChoiceGrouped(params) {
402
- const { groups, skipOption } = buildAuthChoiceGroups(params);
403
- const availableGroups = groups.filter((group) => group.options.length > 0);
404
- while (true) {
405
- const providerOptions = [...availableGroups.map((group) => ({
406
- value: group.value,
407
- label: group.label,
408
- hint: group.hint
409
- })), ...skipOption ? [skipOption] : []];
410
- const providerSelection = await params.prompter.select({
411
- message: "Model/auth provider",
412
- options: providerOptions
413
- });
414
- if (providerSelection === "skip") return "skip";
415
- const group = availableGroups.find((candidate) => candidate.value === providerSelection);
416
- if (!group || group.options.length === 0) {
417
- await params.prompter.note("No auth methods available for that provider.", "Model/auth choice");
418
- continue;
419
- }
420
- if (group.options.length === 1) return group.options[0].value;
421
- const methodSelection = await params.prompter.select({
422
- message: `${group.label} auth method`,
423
- options: [...group.options, {
424
- value: BACK_VALUE,
425
- label: "Back"
426
- }]
427
- });
428
- if (methodSelection === BACK_VALUE) continue;
429
- return methodSelection;
430
- }
431
- }
432
-
433
- //#endregion
434
- //#region src/commands/auth-choice.api-key.ts
435
- const DEFAULT_KEY_PREVIEW = {
436
- head: 4,
437
- tail: 4
438
- };
439
- function normalizeApiKeyInput(raw) {
440
- const trimmed = String(raw ?? "").trim();
441
- if (!trimmed) return "";
442
- const assignmentMatch = trimmed.match(/^(?:export\s+)?[A-Za-z_][A-Za-z0-9_]*\s*=\s*(.+)$/);
443
- const valuePart = assignmentMatch ? assignmentMatch[1].trim() : trimmed;
444
- const unquoted = valuePart.length >= 2 && (valuePart.startsWith("\"") && valuePart.endsWith("\"") || valuePart.startsWith("'") && valuePart.endsWith("'") || valuePart.startsWith("`") && valuePart.endsWith("`")) ? valuePart.slice(1, -1) : valuePart;
445
- return (unquoted.endsWith(";") ? unquoted.slice(0, -1) : unquoted).trim();
446
- }
447
- const validateApiKeyInput = (value) => normalizeApiKeyInput(value).length > 0 ? void 0 : "Required";
448
- function formatApiKeyPreview(raw, opts = {}) {
449
- const trimmed = raw.trim();
450
- if (!trimmed) return "…";
451
- const head = opts.head ?? DEFAULT_KEY_PREVIEW.head;
452
- const tail = opts.tail ?? DEFAULT_KEY_PREVIEW.tail;
453
- if (trimmed.length <= head + tail) {
454
- const shortHead = Math.min(2, trimmed.length);
455
- const shortTail = Math.min(2, trimmed.length - shortHead);
456
- if (shortTail <= 0) return `${trimmed.slice(0, shortHead)}…`;
457
- return `${trimmed.slice(0, shortHead)}…${trimmed.slice(-shortTail)}`;
458
- }
459
- return `${trimmed.slice(0, head)}…${trimmed.slice(-tail)}`;
460
- }
461
-
462
- //#endregion
463
- //#region src/commands/auth-choice.apply.anthropic.ts
464
- async function applyAuthChoiceAnthropic(params) {
465
- if (params.authChoice === "setup-token" || params.authChoice === "oauth" || params.authChoice === "token") {
466
- let nextConfig = params.config;
467
- await params.prompter.note(["Run `claude setup-token` in your terminal.", "Then paste the generated token below."].join("\n"), "Anthropic setup-token");
468
- const tokenRaw = await params.prompter.text({
469
- message: "Paste Anthropic setup-token",
470
- validate: (value) => validateAnthropicSetupToken(String(value ?? ""))
471
- });
472
- const token = String(tokenRaw ?? "").trim();
473
- const profileNameRaw = await params.prompter.text({
474
- message: "Token name (blank = default)",
475
- placeholder: "default"
476
- });
477
- const provider = "anthropic";
478
- const namedProfileId = buildTokenProfileId({
479
- provider,
480
- name: String(profileNameRaw ?? "")
481
- });
482
- upsertAuthProfile({
483
- profileId: namedProfileId,
484
- agentDir: params.agentDir,
485
- credential: {
486
- type: "token",
487
- provider,
488
- token
489
- }
490
- });
491
- nextConfig = applyAuthProfileConfig(nextConfig, {
492
- profileId: namedProfileId,
493
- provider,
494
- mode: "token"
495
- });
496
- return { config: nextConfig };
497
- }
498
- if (params.authChoice === "apiKey") {
499
- if (params.opts?.tokenProvider && params.opts.tokenProvider !== "anthropic") return null;
500
- let nextConfig = params.config;
501
- let hasCredential = false;
502
- const envKey = process.env.ANTHROPIC_API_KEY?.trim();
503
- if (params.opts?.token) {
504
- await setAnthropicApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
505
- hasCredential = true;
506
- }
507
- if (!hasCredential && envKey) {
508
- if (await params.prompter.confirm({
509
- message: `Use existing ANTHROPIC_API_KEY (env, ${formatApiKeyPreview(envKey)})?`,
510
- initialValue: true
511
- })) {
512
- await setAnthropicApiKey(envKey, params.agentDir);
513
- hasCredential = true;
514
- }
515
- }
516
- if (!hasCredential) {
517
- const key = await params.prompter.text({
518
- message: "Enter Anthropic API key",
519
- validate: validateApiKeyInput
520
- });
521
- await setAnthropicApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
522
- }
523
- nextConfig = applyAuthProfileConfig(nextConfig, {
524
- profileId: "anthropic:default",
525
- provider: "anthropic",
526
- mode: "api_key"
527
- });
528
- return { config: nextConfig };
529
- }
530
- return null;
531
- }
532
-
533
- //#endregion
534
- //#region src/commands/model-allowlist.ts
535
- function ensureModelAllowlistEntry(params) {
536
- const rawModelRef = params.modelRef.trim();
537
- if (!rawModelRef) return params.cfg;
538
- const models = { ...params.cfg.agents?.defaults?.models };
539
- const keySet = new Set([rawModelRef]);
540
- const canonicalKey = resolveAllowlistModelKey(rawModelRef, params.defaultProvider ?? DEFAULT_PROVIDER);
541
- if (canonicalKey) keySet.add(canonicalKey);
542
- for (const key of keySet) models[key] = { ...models[key] };
543
- return {
544
- ...params.cfg,
545
- agents: {
546
- ...params.cfg.agents,
547
- defaults: {
548
- ...params.cfg.agents?.defaults,
549
- models
550
- }
551
- }
552
- };
553
- }
554
-
555
- //#endregion
556
- //#region src/commands/auth-choice.default-model.ts
557
- async function applyDefaultModelChoice(params) {
558
- if (params.setDefaultModel) {
559
- const next = params.applyDefaultConfig(params.config);
560
- if (params.noteDefault) await params.prompter.note(`Default model set to ${params.noteDefault}`, "Model configured");
561
- return { config: next };
562
- }
563
- const nextWithModel = ensureModelAllowlistEntry({
564
- cfg: params.applyProviderConfig(params.config),
565
- modelRef: params.defaultModel
566
- });
567
- await params.noteAgentModel(params.defaultModel);
568
- return {
569
- config: nextWithModel,
570
- agentModelOverride: params.defaultModel
571
- };
572
- }
573
-
574
- //#endregion
575
- //#region src/commands/auth-choice.apply.huggingface.ts
576
- async function applyAuthChoiceHuggingface(params) {
577
- if (params.authChoice !== "huggingface-api-key") return null;
578
- let nextConfig = params.config;
579
- let agentModelOverride;
580
- const noteAgentModel = async (model) => {
581
- if (!params.agentId) return;
582
- await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`, "Model configured");
583
- };
584
- let hasCredential = false;
585
- let hfKey = "";
586
- if (!hasCredential && params.opts?.token && params.opts.tokenProvider === "huggingface") {
587
- hfKey = normalizeApiKeyInput(params.opts.token);
588
- await setHuggingfaceApiKey(hfKey, params.agentDir);
589
- hasCredential = true;
590
- }
591
- if (!hasCredential) await params.prompter.note(["Hugging Face Inference Providers offer OpenAI-compatible chat completions.", "Create a token at: https://huggingface.co/settings/tokens (fine-grained, 'Make calls to Inference Providers')."].join("\n"), "Hugging Face");
592
- if (!hasCredential) {
593
- const envKey = resolveEnvApiKey("huggingface");
594
- if (envKey) {
595
- if (await params.prompter.confirm({
596
- message: `Use existing Hugging Face token (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
597
- initialValue: true
598
- })) {
599
- hfKey = envKey.apiKey;
600
- await setHuggingfaceApiKey(hfKey, params.agentDir);
601
- hasCredential = true;
602
- }
603
- }
604
- }
605
- if (!hasCredential) {
606
- const key = await params.prompter.text({
607
- message: "Enter Hugging Face API key (HF token)",
608
- validate: validateApiKeyInput
609
- });
610
- hfKey = normalizeApiKeyInput(String(key ?? ""));
611
- await setHuggingfaceApiKey(hfKey, params.agentDir);
612
- }
613
- nextConfig = applyAuthProfileConfig(nextConfig, {
614
- profileId: "huggingface:default",
615
- provider: "huggingface",
616
- mode: "api_key"
617
- });
618
- const models = await discoverHuggingfaceModels(hfKey);
619
- const modelRefPrefix = "huggingface/";
620
- const options = [];
621
- for (const m of models) {
622
- const baseRef = `${modelRefPrefix}${m.id}`;
623
- const label = m.name ?? m.id;
624
- options.push({
625
- value: baseRef,
626
- label
627
- });
628
- options.push({
629
- value: `${baseRef}:cheapest`,
630
- label: `${label} (cheapest)`
631
- });
632
- options.push({
633
- value: `${baseRef}:fastest`,
634
- label: `${label} (fastest)`
635
- });
636
- }
637
- const defaultRef = HUGGINGFACE_DEFAULT_MODEL_REF;
638
- options.sort((a, b) => {
639
- if (a.value === defaultRef) return -1;
640
- if (b.value === defaultRef) return 1;
641
- return a.label.localeCompare(b.label, void 0, { sensitivity: "base" });
642
- });
643
- const selectedModelRef = options.length === 0 ? defaultRef : options.length === 1 ? options[0].value : await params.prompter.select({
644
- message: "Default Hugging Face model",
645
- options,
646
- initialValue: options.some((o) => o.value === defaultRef) ? defaultRef : options[0].value
647
- });
648
- if (isHuggingfacePolicyLocked(selectedModelRef)) await params.prompter.note("Provider locked — router will choose backend by cost or speed.", "Hugging Face");
649
- const applied = await applyDefaultModelChoice({
650
- config: nextConfig,
651
- setDefaultModel: params.setDefaultModel,
652
- defaultModel: selectedModelRef,
653
- applyDefaultConfig: (config) => {
654
- const withProvider = applyHuggingfaceProviderConfig(config);
655
- const existingModel = withProvider.agents?.defaults?.model;
656
- return ensureModelAllowlistEntry({
657
- cfg: {
658
- ...withProvider,
659
- agents: {
660
- ...withProvider.agents,
661
- defaults: {
662
- ...withProvider.agents?.defaults,
663
- model: {
664
- ...existingModel && typeof existingModel === "object" && "fallbacks" in existingModel ? { fallbacks: existingModel.fallbacks } : {},
665
- primary: selectedModelRef
666
- }
667
- }
668
- }
669
- },
670
- modelRef: selectedModelRef
671
- });
672
- },
673
- applyProviderConfig: applyHuggingfaceProviderConfig,
674
- noteDefault: selectedModelRef,
675
- noteAgentModel,
676
- prompter: params.prompter
677
- });
678
- nextConfig = applied.config;
679
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
680
- return {
681
- config: nextConfig,
682
- agentModelOverride
683
- };
684
- }
685
-
686
- //#endregion
687
- //#region src/commands/auth-choice.apply.openrouter.ts
688
- async function applyAuthChoiceOpenRouter(params) {
689
- let nextConfig = params.config;
690
- let agentModelOverride;
691
- const noteAgentModel = async (model) => {
692
- if (!params.agentId) return;
693
- await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`, "Model configured");
694
- };
695
- const store = ensureAuthProfileStore(params.agentDir, { allowKeychainPrompt: false });
696
- const existingProfileId = resolveAuthProfileOrder({
697
- cfg: nextConfig,
698
- store,
699
- provider: "openrouter"
700
- }).find((profileId) => Boolean(store.profiles[profileId]));
701
- const existingCred = existingProfileId ? store.profiles[existingProfileId] : void 0;
702
- let profileId = "openrouter:default";
703
- let mode = "api_key";
704
- let hasCredential = false;
705
- if (existingProfileId && existingCred?.type) {
706
- profileId = existingProfileId;
707
- mode = existingCred.type === "oauth" ? "oauth" : existingCred.type === "token" ? "token" : "api_key";
708
- hasCredential = true;
709
- }
710
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "openrouter") {
711
- await setOpenrouterApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
712
- hasCredential = true;
713
- }
714
- if (!hasCredential) {
715
- const envKey = resolveEnvApiKey("openrouter");
716
- if (envKey) {
717
- if (await params.prompter.confirm({
718
- message: `Use existing OPENROUTER_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
719
- initialValue: true
720
- })) {
721
- await setOpenrouterApiKey(envKey.apiKey, params.agentDir);
722
- hasCredential = true;
723
- }
724
- }
725
- }
726
- if (!hasCredential) {
727
- const key = await params.prompter.text({
728
- message: "Enter OpenRouter API key",
729
- validate: validateApiKeyInput
730
- });
731
- await setOpenrouterApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
732
- hasCredential = true;
733
- }
734
- if (hasCredential) nextConfig = applyAuthProfileConfig(nextConfig, {
735
- profileId,
736
- provider: "openrouter",
737
- mode
738
- });
739
- const applied = await applyDefaultModelChoice({
740
- config: nextConfig,
741
- setDefaultModel: params.setDefaultModel,
742
- defaultModel: OPENROUTER_DEFAULT_MODEL_REF,
743
- applyDefaultConfig: applyOpenrouterConfig,
744
- applyProviderConfig: applyOpenrouterProviderConfig,
745
- noteDefault: OPENROUTER_DEFAULT_MODEL_REF,
746
- noteAgentModel,
747
- prompter: params.prompter
748
- });
749
- nextConfig = applied.config;
750
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
751
- return {
752
- config: nextConfig,
753
- agentModelOverride
754
- };
755
- }
756
-
757
- //#endregion
758
- //#region src/commands/google-gemini-model-default.ts
759
- const GOOGLE_GEMINI_DEFAULT_MODEL = "google/gemini-3-pro-preview";
760
- function resolvePrimaryModel$1(model) {
761
- if (typeof model === "string") return model;
762
- if (model && typeof model === "object" && typeof model.primary === "string") return model.primary;
763
- }
764
- function applyGoogleGeminiModelDefault(cfg) {
765
- if (resolvePrimaryModel$1(cfg.agents?.defaults?.model)?.trim() === GOOGLE_GEMINI_DEFAULT_MODEL) return {
766
- next: cfg,
767
- changed: false
768
- };
769
- return {
770
- next: {
771
- ...cfg,
772
- agents: {
773
- ...cfg.agents,
774
- defaults: {
775
- ...cfg.agents?.defaults,
776
- model: cfg.agents?.defaults?.model && typeof cfg.agents.defaults.model === "object" ? {
777
- ...cfg.agents.defaults.model,
778
- primary: GOOGLE_GEMINI_DEFAULT_MODEL
779
- } : { primary: GOOGLE_GEMINI_DEFAULT_MODEL }
780
- }
781
- }
782
- },
783
- changed: true
784
- };
785
- }
786
-
787
- //#endregion
788
- //#region src/commands/opencode-zen-model-default.ts
789
- const OPENCODE_ZEN_DEFAULT_MODEL = "opencode/claude-opus-4-6";
790
-
791
- //#endregion
792
- //#region src/commands/zai-endpoint-detect.ts
793
- async function probeZaiChatCompletions(params) {
794
- try {
795
- const res = await fetchWithTimeout(`${params.baseUrl}/chat/completions`, {
796
- method: "POST",
797
- headers: {
798
- authorization: `Bearer ${params.apiKey}`,
799
- "content-type": "application/json"
800
- },
801
- body: JSON.stringify({
802
- model: params.modelId,
803
- stream: false,
804
- max_tokens: 1,
805
- messages: [{
806
- role: "user",
807
- content: "ping"
808
- }]
809
- })
810
- }, params.timeoutMs, params.fetchFn);
811
- if (res.ok) return { ok: true };
812
- let errorCode;
813
- let errorMessage;
814
- try {
815
- const json = await res.json();
816
- const code = json?.error?.code;
817
- const msg = json?.error?.message ?? json?.msg ?? json?.message;
818
- if (typeof code === "string") errorCode = code;
819
- else if (typeof code === "number") errorCode = String(code);
820
- if (typeof msg === "string") errorMessage = msg;
821
- } catch {}
822
- return {
823
- ok: false,
824
- status: res.status,
825
- errorCode,
826
- errorMessage
827
- };
828
- } catch {
829
- return { ok: false };
830
- }
831
- }
832
- async function detectZaiEndpoint(params) {
833
- if (process.env.VITEST && !params.fetchFn) return null;
834
- const timeoutMs = params.timeoutMs ?? 5e3;
835
- const glm5 = [{
836
- endpoint: "global",
837
- baseUrl: ZAI_GLOBAL_BASE_URL
838
- }, {
839
- endpoint: "cn",
840
- baseUrl: ZAI_CN_BASE_URL
841
- }];
842
- for (const candidate of glm5) if ((await probeZaiChatCompletions({
843
- baseUrl: candidate.baseUrl,
844
- apiKey: params.apiKey,
845
- modelId: "glm-5",
846
- timeoutMs,
847
- fetchFn: params.fetchFn
848
- })).ok) return {
849
- endpoint: candidate.endpoint,
850
- baseUrl: candidate.baseUrl,
851
- modelId: "glm-5",
852
- note: `Verified GLM-5 on ${candidate.endpoint} endpoint.`
853
- };
854
- const coding = [{
855
- endpoint: "coding-global",
856
- baseUrl: ZAI_CODING_GLOBAL_BASE_URL
857
- }, {
858
- endpoint: "coding-cn",
859
- baseUrl: ZAI_CODING_CN_BASE_URL
860
- }];
861
- for (const candidate of coding) if ((await probeZaiChatCompletions({
862
- baseUrl: candidate.baseUrl,
863
- apiKey: params.apiKey,
864
- modelId: "glm-4.7",
865
- timeoutMs,
866
- fetchFn: params.fetchFn
867
- })).ok) return {
868
- endpoint: candidate.endpoint,
869
- baseUrl: candidate.baseUrl,
870
- modelId: "glm-4.7",
871
- note: "Coding Plan endpoint detected; GLM-5 is not available there. Defaulting to GLM-4.7."
872
- };
873
- return null;
874
- }
875
-
876
- //#endregion
877
- //#region src/commands/auth-choice.apply.api-providers.ts
878
- async function applyAuthChoiceApiProviders(params) {
879
- let nextConfig = params.config;
880
- let agentModelOverride;
881
- const noteAgentModel = async (model) => {
882
- if (!params.agentId) return;
883
- await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`, "Model configured");
884
- };
885
- let authChoice = params.authChoice;
886
- if (authChoice === "apiKey" && params.opts?.tokenProvider && params.opts.tokenProvider !== "anthropic" && params.opts.tokenProvider !== "openai") {
887
- if (params.opts.tokenProvider === "openrouter") authChoice = "openrouter-api-key";
888
- else if (params.opts.tokenProvider === "litellm") authChoice = "litellm-api-key";
889
- else if (params.opts.tokenProvider === "vercel-ai-gateway") authChoice = "ai-gateway-api-key";
890
- else if (params.opts.tokenProvider === "cloudflare-ai-gateway") authChoice = "cloudflare-ai-gateway-api-key";
891
- else if (params.opts.tokenProvider === "moonshot") authChoice = "moonshot-api-key";
892
- else if (params.opts.tokenProvider === "kimi-code" || params.opts.tokenProvider === "kimi-coding") authChoice = "kimi-code-api-key";
893
- else if (params.opts.tokenProvider === "google") authChoice = "gemini-api-key";
894
- else if (params.opts.tokenProvider === "zai") authChoice = "zai-api-key";
895
- else if (params.opts.tokenProvider === "xiaomi") authChoice = "xiaomi-api-key";
896
- else if (params.opts.tokenProvider === "synthetic") authChoice = "synthetic-api-key";
897
- else if (params.opts.tokenProvider === "venice") authChoice = "venice-api-key";
898
- else if (params.opts.tokenProvider === "together") authChoice = "together-api-key";
899
- else if (params.opts.tokenProvider === "huggingface") authChoice = "huggingface-api-key";
900
- else if (params.opts.tokenProvider === "opencode") authChoice = "opencode-zen";
901
- else if (params.opts.tokenProvider === "qianfan") authChoice = "qianfan-api-key";
902
- }
903
- async function ensureMoonshotApiKeyCredential(promptMessage) {
904
- let hasCredential = false;
905
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "moonshot") {
906
- await setMoonshotApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
907
- hasCredential = true;
908
- }
909
- const envKey = resolveEnvApiKey("moonshot");
910
- if (envKey) {
911
- if (await params.prompter.confirm({
912
- message: `Use existing MOONSHOT_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
913
- initialValue: true
914
- })) {
915
- await setMoonshotApiKey(envKey.apiKey, params.agentDir);
916
- hasCredential = true;
917
- }
918
- }
919
- if (!hasCredential) {
920
- const key = await params.prompter.text({
921
- message: promptMessage,
922
- validate: validateApiKeyInput
923
- });
924
- await setMoonshotApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
925
- }
926
- }
927
- if (authChoice === "openrouter-api-key") return applyAuthChoiceOpenRouter(params);
928
- if (authChoice === "litellm-api-key") {
929
- const store = ensureAuthProfileStore(params.agentDir, { allowKeychainPrompt: false });
930
- const existingProfileId = resolveAuthProfileOrder({
931
- cfg: nextConfig,
932
- store,
933
- provider: "litellm"
934
- }).find((profileId) => Boolean(store.profiles[profileId]));
935
- const existingCred = existingProfileId ? store.profiles[existingProfileId] : void 0;
936
- let profileId = "litellm:default";
937
- let hasCredential = false;
938
- if (existingProfileId && existingCred?.type === "api_key") {
939
- profileId = existingProfileId;
940
- hasCredential = true;
941
- }
942
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "litellm") {
943
- await setLitellmApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
944
- hasCredential = true;
945
- }
946
- if (!hasCredential) {
947
- await params.prompter.note("LiteLLM provides a unified API to 100+ LLM providers.\nGet your API key from your LiteLLM proxy or https://litellm.ai\nDefault proxy runs on http://localhost:4000", "LiteLLM");
948
- const envKey = resolveEnvApiKey("litellm");
949
- if (envKey) {
950
- if (await params.prompter.confirm({
951
- message: `Use existing LITELLM_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
952
- initialValue: true
953
- })) {
954
- await setLitellmApiKey(envKey.apiKey, params.agentDir);
955
- hasCredential = true;
956
- }
957
- }
958
- if (!hasCredential) {
959
- const key = await params.prompter.text({
960
- message: "Enter LiteLLM API key",
961
- validate: validateApiKeyInput
962
- });
963
- await setLitellmApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
964
- hasCredential = true;
965
- }
966
- }
967
- if (hasCredential) nextConfig = applyAuthProfileConfig(nextConfig, {
968
- profileId,
969
- provider: "litellm",
970
- mode: "api_key"
971
- });
972
- const applied = await applyDefaultModelChoice({
973
- config: nextConfig,
974
- setDefaultModel: params.setDefaultModel,
975
- defaultModel: LITELLM_DEFAULT_MODEL_REF,
976
- applyDefaultConfig: applyLitellmConfig,
977
- applyProviderConfig: applyLitellmProviderConfig,
978
- noteDefault: LITELLM_DEFAULT_MODEL_REF,
979
- noteAgentModel,
980
- prompter: params.prompter
981
- });
982
- nextConfig = applied.config;
983
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
984
- return {
985
- config: nextConfig,
986
- agentModelOverride
987
- };
988
- }
989
- if (authChoice === "ai-gateway-api-key") {
990
- let hasCredential = false;
991
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "vercel-ai-gateway") {
992
- await setVercelAiGatewayApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
993
- hasCredential = true;
994
- }
995
- const envKey = resolveEnvApiKey("vercel-ai-gateway");
996
- if (envKey) {
997
- if (await params.prompter.confirm({
998
- message: `Use existing AI_GATEWAY_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
999
- initialValue: true
1000
- })) {
1001
- await setVercelAiGatewayApiKey(envKey.apiKey, params.agentDir);
1002
- hasCredential = true;
1003
- }
1004
- }
1005
- if (!hasCredential) {
1006
- const key = await params.prompter.text({
1007
- message: "Enter Vercel AI Gateway API key",
1008
- validate: validateApiKeyInput
1009
- });
1010
- await setVercelAiGatewayApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
1011
- }
1012
- nextConfig = applyAuthProfileConfig(nextConfig, {
1013
- profileId: "vercel-ai-gateway:default",
1014
- provider: "vercel-ai-gateway",
1015
- mode: "api_key"
1016
- });
1017
- {
1018
- const applied = await applyDefaultModelChoice({
1019
- config: nextConfig,
1020
- setDefaultModel: params.setDefaultModel,
1021
- defaultModel: VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF,
1022
- applyDefaultConfig: applyVercelAiGatewayConfig,
1023
- applyProviderConfig: applyVercelAiGatewayProviderConfig,
1024
- noteDefault: VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF,
1025
- noteAgentModel,
1026
- prompter: params.prompter
1027
- });
1028
- nextConfig = applied.config;
1029
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1030
- }
1031
- return {
1032
- config: nextConfig,
1033
- agentModelOverride
1034
- };
1035
- }
1036
- if (authChoice === "cloudflare-ai-gateway-api-key") {
1037
- let hasCredential = false;
1038
- let accountId = params.opts?.cloudflareAiGatewayAccountId?.trim() ?? "";
1039
- let gatewayId = params.opts?.cloudflareAiGatewayGatewayId?.trim() ?? "";
1040
- const ensureAccountGateway = async () => {
1041
- if (!accountId) {
1042
- const value = await params.prompter.text({
1043
- message: "Enter Cloudflare Account ID",
1044
- validate: (val) => String(val ?? "").trim() ? void 0 : "Account ID is required"
1045
- });
1046
- accountId = String(value ?? "").trim();
1047
- }
1048
- if (!gatewayId) {
1049
- const value = await params.prompter.text({
1050
- message: "Enter Cloudflare AI Gateway ID",
1051
- validate: (val) => String(val ?? "").trim() ? void 0 : "Gateway ID is required"
1052
- });
1053
- gatewayId = String(value ?? "").trim();
1054
- }
1055
- };
1056
- const optsApiKey = normalizeApiKeyInput(params.opts?.cloudflareAiGatewayApiKey ?? "");
1057
- if (!hasCredential && accountId && gatewayId && optsApiKey) {
1058
- await setCloudflareAiGatewayConfig(accountId, gatewayId, optsApiKey, params.agentDir);
1059
- hasCredential = true;
1060
- }
1061
- const envKey = resolveEnvApiKey("cloudflare-ai-gateway");
1062
- if (!hasCredential && envKey) {
1063
- if (await params.prompter.confirm({
1064
- message: `Use existing CLOUDFLARE_AI_GATEWAY_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
1065
- initialValue: true
1066
- })) {
1067
- await ensureAccountGateway();
1068
- await setCloudflareAiGatewayConfig(accountId, gatewayId, normalizeApiKeyInput(envKey.apiKey), params.agentDir);
1069
- hasCredential = true;
1070
- }
1071
- }
1072
- if (!hasCredential && optsApiKey) {
1073
- await ensureAccountGateway();
1074
- await setCloudflareAiGatewayConfig(accountId, gatewayId, optsApiKey, params.agentDir);
1075
- hasCredential = true;
1076
- }
1077
- if (!hasCredential) {
1078
- await ensureAccountGateway();
1079
- const key = await params.prompter.text({
1080
- message: "Enter Cloudflare AI Gateway API key",
1081
- validate: validateApiKeyInput
1082
- });
1083
- await setCloudflareAiGatewayConfig(accountId, gatewayId, normalizeApiKeyInput(String(key ?? "")), params.agentDir);
1084
- hasCredential = true;
1085
- }
1086
- if (hasCredential) nextConfig = applyAuthProfileConfig(nextConfig, {
1087
- profileId: "cloudflare-ai-gateway:default",
1088
- provider: "cloudflare-ai-gateway",
1089
- mode: "api_key"
1090
- });
1091
- {
1092
- const applied = await applyDefaultModelChoice({
1093
- config: nextConfig,
1094
- setDefaultModel: params.setDefaultModel,
1095
- defaultModel: CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,
1096
- applyDefaultConfig: (cfg) => applyCloudflareAiGatewayConfig(cfg, {
1097
- accountId: accountId || params.opts?.cloudflareAiGatewayAccountId,
1098
- gatewayId: gatewayId || params.opts?.cloudflareAiGatewayGatewayId
1099
- }),
1100
- applyProviderConfig: (cfg) => applyCloudflareAiGatewayProviderConfig(cfg, {
1101
- accountId: accountId || params.opts?.cloudflareAiGatewayAccountId,
1102
- gatewayId: gatewayId || params.opts?.cloudflareAiGatewayGatewayId
1103
- }),
1104
- noteDefault: CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,
1105
- noteAgentModel,
1106
- prompter: params.prompter
1107
- });
1108
- nextConfig = applied.config;
1109
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1110
- }
1111
- return {
1112
- config: nextConfig,
1113
- agentModelOverride
1114
- };
1115
- }
1116
- if (authChoice === "moonshot-api-key") {
1117
- await ensureMoonshotApiKeyCredential("Enter Moonshot API key");
1118
- nextConfig = applyAuthProfileConfig(nextConfig, {
1119
- profileId: "moonshot:default",
1120
- provider: "moonshot",
1121
- mode: "api_key"
1122
- });
1123
- {
1124
- const applied = await applyDefaultModelChoice({
1125
- config: nextConfig,
1126
- setDefaultModel: params.setDefaultModel,
1127
- defaultModel: MOONSHOT_DEFAULT_MODEL_REF,
1128
- applyDefaultConfig: applyMoonshotConfig,
1129
- applyProviderConfig: applyMoonshotProviderConfig,
1130
- noteAgentModel,
1131
- prompter: params.prompter
1132
- });
1133
- nextConfig = applied.config;
1134
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1135
- }
1136
- return {
1137
- config: nextConfig,
1138
- agentModelOverride
1139
- };
1140
- }
1141
- if (authChoice === "moonshot-api-key-cn") {
1142
- await ensureMoonshotApiKeyCredential("Enter Moonshot API key (.cn)");
1143
- nextConfig = applyAuthProfileConfig(nextConfig, {
1144
- profileId: "moonshot:default",
1145
- provider: "moonshot",
1146
- mode: "api_key"
1147
- });
1148
- {
1149
- const applied = await applyDefaultModelChoice({
1150
- config: nextConfig,
1151
- setDefaultModel: params.setDefaultModel,
1152
- defaultModel: MOONSHOT_DEFAULT_MODEL_REF,
1153
- applyDefaultConfig: applyMoonshotConfigCn,
1154
- applyProviderConfig: applyMoonshotProviderConfigCn,
1155
- noteAgentModel,
1156
- prompter: params.prompter
1157
- });
1158
- nextConfig = applied.config;
1159
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1160
- }
1161
- return {
1162
- config: nextConfig,
1163
- agentModelOverride
1164
- };
1165
- }
1166
- if (authChoice === "kimi-code-api-key") {
1167
- let hasCredential = false;
1168
- const tokenProvider = params.opts?.tokenProvider?.trim().toLowerCase();
1169
- if (!hasCredential && params.opts?.token && (tokenProvider === "kimi-code" || tokenProvider === "kimi-coding")) {
1170
- await setKimiCodingApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
1171
- hasCredential = true;
1172
- }
1173
- if (!hasCredential) await params.prompter.note(["Kimi Coding uses a dedicated endpoint and API key.", "Get your API key at: https://www.kimi.com/code/en"].join("\n"), "Kimi Coding");
1174
- const envKey = resolveEnvApiKey("kimi-coding");
1175
- if (envKey) {
1176
- if (await params.prompter.confirm({
1177
- message: `Use existing KIMI_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
1178
- initialValue: true
1179
- })) {
1180
- await setKimiCodingApiKey(envKey.apiKey, params.agentDir);
1181
- hasCredential = true;
1182
- }
1183
- }
1184
- if (!hasCredential) {
1185
- const key = await params.prompter.text({
1186
- message: "Enter Kimi Coding API key",
1187
- validate: validateApiKeyInput
1188
- });
1189
- await setKimiCodingApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
1190
- }
1191
- nextConfig = applyAuthProfileConfig(nextConfig, {
1192
- profileId: "kimi-coding:default",
1193
- provider: "kimi-coding",
1194
- mode: "api_key"
1195
- });
1196
- {
1197
- const applied = await applyDefaultModelChoice({
1198
- config: nextConfig,
1199
- setDefaultModel: params.setDefaultModel,
1200
- defaultModel: KIMI_CODING_MODEL_REF,
1201
- applyDefaultConfig: applyKimiCodeConfig,
1202
- applyProviderConfig: applyKimiCodeProviderConfig,
1203
- noteDefault: KIMI_CODING_MODEL_REF,
1204
- noteAgentModel,
1205
- prompter: params.prompter
1206
- });
1207
- nextConfig = applied.config;
1208
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1209
- }
1210
- return {
1211
- config: nextConfig,
1212
- agentModelOverride
1213
- };
1214
- }
1215
- if (authChoice === "gemini-api-key") {
1216
- let hasCredential = false;
1217
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "google") {
1218
- await setGeminiApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
1219
- hasCredential = true;
1220
- }
1221
- const envKey = resolveEnvApiKey("google");
1222
- if (envKey) {
1223
- if (await params.prompter.confirm({
1224
- message: `Use existing GEMINI_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
1225
- initialValue: true
1226
- })) {
1227
- await setGeminiApiKey(envKey.apiKey, params.agentDir);
1228
- hasCredential = true;
1229
- }
1230
- }
1231
- if (!hasCredential) {
1232
- const key = await params.prompter.text({
1233
- message: "Enter Gemini API key",
1234
- validate: validateApiKeyInput
1235
- });
1236
- await setGeminiApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
1237
- }
1238
- nextConfig = applyAuthProfileConfig(nextConfig, {
1239
- profileId: "google:default",
1240
- provider: "google",
1241
- mode: "api_key"
1242
- });
1243
- if (params.setDefaultModel) {
1244
- const applied = applyGoogleGeminiModelDefault(nextConfig);
1245
- nextConfig = applied.next;
1246
- if (applied.changed) await params.prompter.note(`Default model set to ${GOOGLE_GEMINI_DEFAULT_MODEL}`, "Model configured");
1247
- } else {
1248
- agentModelOverride = GOOGLE_GEMINI_DEFAULT_MODEL;
1249
- await noteAgentModel(GOOGLE_GEMINI_DEFAULT_MODEL);
1250
- }
1251
- return {
1252
- config: nextConfig,
1253
- agentModelOverride
1254
- };
1255
- }
1256
- if (authChoice === "zai-api-key" || authChoice === "zai-coding-global" || authChoice === "zai-coding-cn" || authChoice === "zai-global" || authChoice === "zai-cn") {
1257
- let endpoint;
1258
- if (authChoice === "zai-coding-global") endpoint = "coding-global";
1259
- else if (authChoice === "zai-coding-cn") endpoint = "coding-cn";
1260
- else if (authChoice === "zai-global") endpoint = "global";
1261
- else if (authChoice === "zai-cn") endpoint = "cn";
1262
- let hasCredential = false;
1263
- let apiKey = "";
1264
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "zai") {
1265
- apiKey = normalizeApiKeyInput(params.opts.token);
1266
- await setZaiApiKey(apiKey, params.agentDir);
1267
- hasCredential = true;
1268
- }
1269
- const envKey = resolveEnvApiKey("zai");
1270
- if (envKey) {
1271
- if (await params.prompter.confirm({
1272
- message: `Use existing ZAI_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
1273
- initialValue: true
1274
- })) {
1275
- apiKey = envKey.apiKey;
1276
- await setZaiApiKey(apiKey, params.agentDir);
1277
- hasCredential = true;
1278
- }
1279
- }
1280
- if (!hasCredential) {
1281
- const key = await params.prompter.text({
1282
- message: "Enter Z.AI API key",
1283
- validate: validateApiKeyInput
1284
- });
1285
- apiKey = normalizeApiKeyInput(String(key ?? ""));
1286
- await setZaiApiKey(apiKey, params.agentDir);
1287
- }
1288
- let modelIdOverride;
1289
- if (!endpoint) {
1290
- const detected = await detectZaiEndpoint({ apiKey });
1291
- if (detected) {
1292
- endpoint = detected.endpoint;
1293
- modelIdOverride = detected.modelId;
1294
- await params.prompter.note(detected.note, "Z.AI endpoint");
1295
- } else endpoint = await params.prompter.select({
1296
- message: "Select Z.AI endpoint",
1297
- options: [
1298
- {
1299
- value: "coding-global",
1300
- label: "Coding-Plan-Global",
1301
- hint: "GLM Coding Plan Global (api.z.ai)"
1302
- },
1303
- {
1304
- value: "coding-cn",
1305
- label: "Coding-Plan-CN",
1306
- hint: "GLM Coding Plan CN (open.bigmodel.cn)"
1307
- },
1308
- {
1309
- value: "global",
1310
- label: "Global",
1311
- hint: "Z.AI Global (api.z.ai)"
1312
- },
1313
- {
1314
- value: "cn",
1315
- label: "CN",
1316
- hint: "Z.AI CN (open.bigmodel.cn)"
1317
- }
1318
- ],
1319
- initialValue: "global"
1320
- });
1321
- }
1322
- nextConfig = applyAuthProfileConfig(nextConfig, {
1323
- profileId: "zai:default",
1324
- provider: "zai",
1325
- mode: "api_key"
1326
- });
1327
- const defaultModel = modelIdOverride ? `zai/${modelIdOverride}` : ZAI_DEFAULT_MODEL_REF;
1328
- const applied = await applyDefaultModelChoice({
1329
- config: nextConfig,
1330
- setDefaultModel: params.setDefaultModel,
1331
- defaultModel,
1332
- applyDefaultConfig: (config) => applyZaiConfig(config, {
1333
- endpoint,
1334
- ...modelIdOverride ? { modelId: modelIdOverride } : {}
1335
- }),
1336
- applyProviderConfig: (config) => applyZaiProviderConfig(config, {
1337
- endpoint,
1338
- ...modelIdOverride ? { modelId: modelIdOverride } : {}
1339
- }),
1340
- noteDefault: defaultModel,
1341
- noteAgentModel,
1342
- prompter: params.prompter
1343
- });
1344
- nextConfig = applied.config;
1345
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1346
- return {
1347
- config: nextConfig,
1348
- agentModelOverride
1349
- };
1350
- }
1351
- if (authChoice === "xiaomi-api-key") {
1352
- let hasCredential = false;
1353
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "xiaomi") {
1354
- await setXiaomiApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
1355
- hasCredential = true;
1356
- }
1357
- const envKey = resolveEnvApiKey("xiaomi");
1358
- if (envKey) {
1359
- if (await params.prompter.confirm({
1360
- message: `Use existing XIAOMI_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
1361
- initialValue: true
1362
- })) {
1363
- await setXiaomiApiKey(envKey.apiKey, params.agentDir);
1364
- hasCredential = true;
1365
- }
1366
- }
1367
- if (!hasCredential) {
1368
- const key = await params.prompter.text({
1369
- message: "Enter Xiaomi API key",
1370
- validate: validateApiKeyInput
1371
- });
1372
- await setXiaomiApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
1373
- }
1374
- nextConfig = applyAuthProfileConfig(nextConfig, {
1375
- profileId: "xiaomi:default",
1376
- provider: "xiaomi",
1377
- mode: "api_key"
1378
- });
1379
- {
1380
- const applied = await applyDefaultModelChoice({
1381
- config: nextConfig,
1382
- setDefaultModel: params.setDefaultModel,
1383
- defaultModel: XIAOMI_DEFAULT_MODEL_REF,
1384
- applyDefaultConfig: applyXiaomiConfig,
1385
- applyProviderConfig: applyXiaomiProviderConfig,
1386
- noteDefault: XIAOMI_DEFAULT_MODEL_REF,
1387
- noteAgentModel,
1388
- prompter: params.prompter
1389
- });
1390
- nextConfig = applied.config;
1391
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1392
- }
1393
- return {
1394
- config: nextConfig,
1395
- agentModelOverride
1396
- };
1397
- }
1398
- if (authChoice === "synthetic-api-key") {
1399
- if (params.opts?.token && params.opts?.tokenProvider === "synthetic") await setSyntheticApiKey(String(params.opts.token ?? "").trim(), params.agentDir);
1400
- else {
1401
- const key = await params.prompter.text({
1402
- message: "Enter Synthetic API key",
1403
- validate: (value) => value?.trim() ? void 0 : "Required"
1404
- });
1405
- await setSyntheticApiKey(String(key ?? "").trim(), params.agentDir);
1406
- }
1407
- nextConfig = applyAuthProfileConfig(nextConfig, {
1408
- profileId: "synthetic:default",
1409
- provider: "synthetic",
1410
- mode: "api_key"
1411
- });
1412
- {
1413
- const applied = await applyDefaultModelChoice({
1414
- config: nextConfig,
1415
- setDefaultModel: params.setDefaultModel,
1416
- defaultModel: SYNTHETIC_DEFAULT_MODEL_REF,
1417
- applyDefaultConfig: applySyntheticConfig,
1418
- applyProviderConfig: applySyntheticProviderConfig,
1419
- noteDefault: SYNTHETIC_DEFAULT_MODEL_REF,
1420
- noteAgentModel,
1421
- prompter: params.prompter
1422
- });
1423
- nextConfig = applied.config;
1424
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1425
- }
1426
- return {
1427
- config: nextConfig,
1428
- agentModelOverride
1429
- };
1430
- }
1431
- if (authChoice === "venice-api-key") {
1432
- let hasCredential = false;
1433
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "venice") {
1434
- await setVeniceApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
1435
- hasCredential = true;
1436
- }
1437
- if (!hasCredential) await params.prompter.note([
1438
- "Venice AI provides privacy-focused inference with uncensored models.",
1439
- "Get your API key at: https://venice.ai/settings/api",
1440
- "Supports 'private' (fully private) and 'anonymized' (proxy) modes."
1441
- ].join("\n"), "Venice AI");
1442
- const envKey = resolveEnvApiKey("venice");
1443
- if (envKey) {
1444
- if (await params.prompter.confirm({
1445
- message: `Use existing VENICE_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
1446
- initialValue: true
1447
- })) {
1448
- await setVeniceApiKey(envKey.apiKey, params.agentDir);
1449
- hasCredential = true;
1450
- }
1451
- }
1452
- if (!hasCredential) {
1453
- const key = await params.prompter.text({
1454
- message: "Enter Venice AI API key",
1455
- validate: validateApiKeyInput
1456
- });
1457
- await setVeniceApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
1458
- }
1459
- nextConfig = applyAuthProfileConfig(nextConfig, {
1460
- profileId: "venice:default",
1461
- provider: "venice",
1462
- mode: "api_key"
1463
- });
1464
- {
1465
- const applied = await applyDefaultModelChoice({
1466
- config: nextConfig,
1467
- setDefaultModel: params.setDefaultModel,
1468
- defaultModel: VENICE_DEFAULT_MODEL_REF,
1469
- applyDefaultConfig: applyVeniceConfig,
1470
- applyProviderConfig: applyVeniceProviderConfig,
1471
- noteDefault: VENICE_DEFAULT_MODEL_REF,
1472
- noteAgentModel,
1473
- prompter: params.prompter
1474
- });
1475
- nextConfig = applied.config;
1476
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1477
- }
1478
- return {
1479
- config: nextConfig,
1480
- agentModelOverride
1481
- };
1482
- }
1483
- if (authChoice === "opencode-zen") {
1484
- let hasCredential = false;
1485
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "opencode") {
1486
- await setOpencodeZenApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
1487
- hasCredential = true;
1488
- }
1489
- if (!hasCredential) await params.prompter.note([
1490
- "OpenCode Zen provides access to Claude, GPT, Gemini, and more models.",
1491
- "Get your API key at: https://opencode.ai/auth",
1492
- "OpenCode Zen bills per request. Check your OpenCode dashboard for details."
1493
- ].join("\n"), "OpenCode Zen");
1494
- const envKey = resolveEnvApiKey("opencode");
1495
- if (envKey) {
1496
- if (await params.prompter.confirm({
1497
- message: `Use existing OPENCODE_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
1498
- initialValue: true
1499
- })) {
1500
- await setOpencodeZenApiKey(envKey.apiKey, params.agentDir);
1501
- hasCredential = true;
1502
- }
1503
- }
1504
- if (!hasCredential) {
1505
- const key = await params.prompter.text({
1506
- message: "Enter OpenCode Zen API key",
1507
- validate: validateApiKeyInput
1508
- });
1509
- await setOpencodeZenApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
1510
- }
1511
- nextConfig = applyAuthProfileConfig(nextConfig, {
1512
- profileId: "opencode:default",
1513
- provider: "opencode",
1514
- mode: "api_key"
1515
- });
1516
- {
1517
- const applied = await applyDefaultModelChoice({
1518
- config: nextConfig,
1519
- setDefaultModel: params.setDefaultModel,
1520
- defaultModel: OPENCODE_ZEN_DEFAULT_MODEL,
1521
- applyDefaultConfig: applyOpencodeZenConfig,
1522
- applyProviderConfig: applyOpencodeZenProviderConfig,
1523
- noteDefault: OPENCODE_ZEN_DEFAULT_MODEL,
1524
- noteAgentModel,
1525
- prompter: params.prompter
1526
- });
1527
- nextConfig = applied.config;
1528
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1529
- }
1530
- return {
1531
- config: nextConfig,
1532
- agentModelOverride
1533
- };
1534
- }
1535
- if (authChoice === "together-api-key") {
1536
- let hasCredential = false;
1537
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "together") {
1538
- await setTogetherApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
1539
- hasCredential = true;
1540
- }
1541
- if (!hasCredential) await params.prompter.note(["Together AI provides access to leading open-source models including Llama, DeepSeek, Qwen, and more.", "Get your API key at: https://api.together.xyz/settings/api-keys"].join("\n"), "Together AI");
1542
- const envKey = resolveEnvApiKey("together");
1543
- if (envKey) {
1544
- if (await params.prompter.confirm({
1545
- message: `Use existing TOGETHER_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
1546
- initialValue: true
1547
- })) {
1548
- await setTogetherApiKey(envKey.apiKey, params.agentDir);
1549
- hasCredential = true;
1550
- }
1551
- }
1552
- if (!hasCredential) {
1553
- const key = await params.prompter.text({
1554
- message: "Enter Together AI API key",
1555
- validate: validateApiKeyInput
1556
- });
1557
- await setTogetherApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
1558
- }
1559
- nextConfig = applyAuthProfileConfig(nextConfig, {
1560
- profileId: "together:default",
1561
- provider: "together",
1562
- mode: "api_key"
1563
- });
1564
- {
1565
- const applied = await applyDefaultModelChoice({
1566
- config: nextConfig,
1567
- setDefaultModel: params.setDefaultModel,
1568
- defaultModel: TOGETHER_DEFAULT_MODEL_REF,
1569
- applyDefaultConfig: applyTogetherConfig,
1570
- applyProviderConfig: applyTogetherProviderConfig,
1571
- noteDefault: TOGETHER_DEFAULT_MODEL_REF,
1572
- noteAgentModel,
1573
- prompter: params.prompter
1574
- });
1575
- nextConfig = applied.config;
1576
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1577
- }
1578
- return {
1579
- config: nextConfig,
1580
- agentModelOverride
1581
- };
1582
- }
1583
- if (authChoice === "huggingface-api-key") return applyAuthChoiceHuggingface({
1584
- ...params,
1585
- authChoice
1586
- });
1587
- if (authChoice === "qianfan-api-key") {
1588
- let hasCredential = false;
1589
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "qianfan") {
1590
- setQianfanApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
1591
- hasCredential = true;
1592
- }
1593
- if (!hasCredential) await params.prompter.note(["Get your API key at: https://console.bce.baidu.com/qianfan/ais/console/apiKey", "API key format: bce-v3/ALTAK-..."].join("\n"), "QIANFAN");
1594
- const envKey = resolveEnvApiKey("qianfan");
1595
- if (envKey) {
1596
- if (await params.prompter.confirm({
1597
- message: `Use existing QIANFAN_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
1598
- initialValue: true
1599
- })) {
1600
- setQianfanApiKey(envKey.apiKey, params.agentDir);
1601
- hasCredential = true;
1602
- }
1603
- }
1604
- if (!hasCredential) {
1605
- const key = await params.prompter.text({
1606
- message: "Enter QIANFAN API key",
1607
- validate: validateApiKeyInput
1608
- });
1609
- setQianfanApiKey(normalizeApiKeyInput(String(key ?? "")), params.agentDir);
1610
- }
1611
- nextConfig = applyAuthProfileConfig(nextConfig, {
1612
- profileId: "qianfan:default",
1613
- provider: "qianfan",
1614
- mode: "api_key"
1615
- });
1616
- {
1617
- const applied = await applyDefaultModelChoice({
1618
- config: nextConfig,
1619
- setDefaultModel: params.setDefaultModel,
1620
- defaultModel: QIANFAN_DEFAULT_MODEL_REF,
1621
- applyDefaultConfig: applyQianfanConfig,
1622
- applyProviderConfig: applyQianfanProviderConfig,
1623
- noteDefault: QIANFAN_DEFAULT_MODEL_REF,
1624
- noteAgentModel,
1625
- prompter: params.prompter
1626
- });
1627
- nextConfig = applied.config;
1628
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1629
- }
1630
- return {
1631
- config: nextConfig,
1632
- agentModelOverride
1633
- };
1634
- }
1635
- return null;
1636
- }
1637
-
1638
- //#endregion
1639
- //#region src/commands/auth-choice.apply.plugin-provider.ts
1640
- async function applyAuthChoicePluginProvider(params, options) {
1641
- if (params.authChoice !== options.authChoice) return null;
1642
- const enableResult = enablePluginInConfig(params.config, options.pluginId);
1643
- let nextConfig = enableResult.config;
1644
- if (!enableResult.enabled) {
1645
- await params.prompter.note(`${options.label} plugin is disabled (${enableResult.reason ?? "blocked"}).`, options.label);
1646
- return { config: nextConfig };
1647
- }
1648
- const agentId = params.agentId ?? resolveDefaultAgentId(nextConfig);
1649
- const defaultAgentId = resolveDefaultAgentId(nextConfig);
1650
- const agentDir = params.agentDir ?? (agentId === defaultAgentId ? resolveAnimaAgentDir() : resolveAgentDir(nextConfig, agentId));
1651
- const workspaceDir = resolveAgentWorkspaceDir(nextConfig, agentId) ?? resolveDefaultAgentWorkspaceDir();
1652
- const provider = resolveProviderMatch(resolvePluginProviders({
1653
- config: nextConfig,
1654
- workspaceDir
1655
- }), options.providerId);
1656
- if (!provider) {
1657
- await params.prompter.note(`${options.label} auth plugin is not available. Enable it and re-run the wizard.`, options.label);
1658
- return { config: nextConfig };
1659
- }
1660
- const method = pickAuthMethod(provider, options.methodId) ?? provider.auth[0];
1661
- if (!method) {
1662
- await params.prompter.note(`${options.label} auth method missing.`, options.label);
1663
- return { config: nextConfig };
1664
- }
1665
- const isRemote = isRemoteEnvironment();
1666
- const result = await method.run({
1667
- config: nextConfig,
1668
- agentDir,
1669
- workspaceDir,
1670
- prompter: params.prompter,
1671
- runtime: params.runtime,
1672
- isRemote,
1673
- openUrl: async (url) => {
1674
- await openUrl(url);
1675
- },
1676
- oauth: { createVpsAwareHandlers: (opts) => createVpsAwareOAuthHandlers(opts) }
1677
- });
1678
- if (result.configPatch) nextConfig = mergeConfigPatch(nextConfig, result.configPatch);
1679
- for (const profile of result.profiles) {
1680
- upsertAuthProfile({
1681
- profileId: profile.profileId,
1682
- credential: profile.credential,
1683
- agentDir
1684
- });
1685
- nextConfig = applyAuthProfileConfig(nextConfig, {
1686
- profileId: profile.profileId,
1687
- provider: profile.credential.provider,
1688
- mode: profile.credential.type === "token" ? "token" : profile.credential.type,
1689
- ..."email" in profile.credential && profile.credential.email ? { email: profile.credential.email } : {}
1690
- });
1691
- }
1692
- let agentModelOverride;
1693
- if (result.defaultModel) {
1694
- if (params.setDefaultModel) {
1695
- nextConfig = applyDefaultModel(nextConfig, result.defaultModel);
1696
- await params.prompter.note(`Default model set to ${result.defaultModel}`, "Model configured");
1697
- } else if (params.agentId) {
1698
- agentModelOverride = result.defaultModel;
1699
- await params.prompter.note(`Default model set to ${result.defaultModel} for agent "${params.agentId}".`, "Model configured");
1700
- }
1701
- }
1702
- if (result.notes && result.notes.length > 0) await params.prompter.note(result.notes.join("\n"), "Provider notes");
1703
- return {
1704
- config: nextConfig,
1705
- agentModelOverride
1706
- };
1707
- }
1708
-
1709
- //#endregion
1710
- //#region src/commands/auth-choice.apply.copilot-proxy.ts
1711
- async function applyAuthChoiceCopilotProxy(params) {
1712
- return await applyAuthChoicePluginProvider(params, {
1713
- authChoice: "copilot-proxy",
1714
- pluginId: "copilot-proxy",
1715
- providerId: "copilot-proxy",
1716
- methodId: "local",
1717
- label: "Copilot Proxy"
1718
- });
1719
- }
1720
-
1721
- //#endregion
1722
- //#region src/commands/auth-choice.apply.github-copilot.ts
1723
- async function applyAuthChoiceGitHubCopilot(params) {
1724
- if (params.authChoice !== "github-copilot") return null;
1725
- let nextConfig = params.config;
1726
- await params.prompter.note(["This will open a GitHub device login to authorize Copilot.", "Requires an active GitHub Copilot subscription."].join("\n"), "GitHub Copilot");
1727
- if (!process.stdin.isTTY) {
1728
- await params.prompter.note("GitHub Copilot login requires an interactive TTY.", "GitHub Copilot");
1729
- return { config: nextConfig };
1730
- }
1731
- try {
1732
- await githubCopilotLoginCommand({ yes: true }, params.runtime);
1733
- } catch (err) {
1734
- await params.prompter.note(`GitHub Copilot login failed: ${String(err)}`, "GitHub Copilot");
1735
- return { config: nextConfig };
1736
- }
1737
- nextConfig = applyAuthProfileConfig(nextConfig, {
1738
- profileId: "github-copilot:github",
1739
- provider: "github-copilot",
1740
- mode: "token"
1741
- });
1742
- if (params.setDefaultModel) {
1743
- const model = "github-copilot/gpt-4o";
1744
- nextConfig = {
1745
- ...nextConfig,
1746
- agents: {
1747
- ...nextConfig.agents,
1748
- defaults: {
1749
- ...nextConfig.agents?.defaults,
1750
- model: {
1751
- ...typeof nextConfig.agents?.defaults?.model === "object" ? nextConfig.agents.defaults.model : void 0,
1752
- primary: model
1753
- }
1754
- }
1755
- }
1756
- };
1757
- await params.prompter.note(`Default model set to ${model}`, "Model configured");
1758
- }
1759
- return { config: nextConfig };
1760
- }
1761
-
1762
- //#endregion
1763
- //#region src/commands/auth-choice.apply.google-antigravity.ts
1764
- async function applyAuthChoiceGoogleAntigravity(params) {
1765
- return await applyAuthChoicePluginProvider(params, {
1766
- authChoice: "google-antigravity",
1767
- pluginId: "google-antigravity-auth",
1768
- providerId: "google-antigravity",
1769
- methodId: "oauth",
1770
- label: "Google Antigravity"
1771
- });
1772
- }
1773
-
1774
- //#endregion
1775
- //#region src/commands/auth-choice.apply.google-gemini-cli.ts
1776
- async function applyAuthChoiceGoogleGeminiCli(params) {
1777
- return await applyAuthChoicePluginProvider(params, {
1778
- authChoice: "google-gemini-cli",
1779
- pluginId: "google-gemini-cli-auth",
1780
- providerId: "google-gemini-cli",
1781
- methodId: "oauth",
1782
- label: "Google Gemini CLI"
1783
- });
1784
- }
1785
-
1786
- //#endregion
1787
- //#region src/commands/auth-choice.apply.minimax.ts
1788
- async function applyAuthChoiceMiniMax(params) {
1789
- let nextConfig = params.config;
1790
- let agentModelOverride;
1791
- const ensureMinimaxApiKey = async (opts) => {
1792
- let hasCredential = false;
1793
- const envKey = resolveEnvApiKey("minimax");
1794
- if (envKey) {
1795
- if (await params.prompter.confirm({
1796
- message: `Use existing MINIMAX_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
1797
- initialValue: true
1798
- })) {
1799
- await setMinimaxApiKey(envKey.apiKey, params.agentDir, opts.profileId);
1800
- hasCredential = true;
1801
- }
1802
- }
1803
- if (!hasCredential) {
1804
- const key = await params.prompter.text({
1805
- message: opts.promptMessage,
1806
- validate: validateApiKeyInput
1807
- });
1808
- await setMinimaxApiKey(normalizeApiKeyInput(String(key)), params.agentDir, opts.profileId);
1809
- }
1810
- };
1811
- const noteAgentModel = async (model) => {
1812
- if (!params.agentId) return;
1813
- await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`, "Model configured");
1814
- };
1815
- if (params.authChoice === "minimax-portal") return await applyAuthChoicePluginProvider(params, {
1816
- authChoice: "minimax-portal",
1817
- pluginId: "minimax-portal-auth",
1818
- providerId: "minimax-portal",
1819
- methodId: await params.prompter.select({
1820
- message: "Select MiniMax endpoint",
1821
- options: [{
1822
- value: "oauth",
1823
- label: "Global",
1824
- hint: "OAuth for international users"
1825
- }, {
1826
- value: "oauth-cn",
1827
- label: "CN",
1828
- hint: "OAuth for users in China"
1829
- }]
1830
- }),
1831
- label: "MiniMax"
1832
- });
1833
- if (params.authChoice === "minimax-cloud" || params.authChoice === "minimax-api" || params.authChoice === "minimax-api-lightning") {
1834
- const modelId = params.authChoice === "minimax-api-lightning" ? "MiniMax-M2.5-Lightning" : "MiniMax-M2.5";
1835
- await ensureMinimaxApiKey({
1836
- profileId: "minimax:default",
1837
- promptMessage: "Enter MiniMax API key"
1838
- });
1839
- nextConfig = applyAuthProfileConfig(nextConfig, {
1840
- profileId: "minimax:default",
1841
- provider: "minimax",
1842
- mode: "api_key"
1843
- });
1844
- {
1845
- const modelRef = `minimax/${modelId}`;
1846
- const applied = await applyDefaultModelChoice({
1847
- config: nextConfig,
1848
- setDefaultModel: params.setDefaultModel,
1849
- defaultModel: modelRef,
1850
- applyDefaultConfig: (config) => applyMinimaxApiConfig(config, modelId),
1851
- applyProviderConfig: (config) => applyMinimaxApiProviderConfig(config, modelId),
1852
- noteAgentModel,
1853
- prompter: params.prompter
1854
- });
1855
- nextConfig = applied.config;
1856
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1857
- }
1858
- return {
1859
- config: nextConfig,
1860
- agentModelOverride
1861
- };
1862
- }
1863
- if (params.authChoice === "minimax-api-key-cn") {
1864
- const modelId = "MiniMax-M2.5";
1865
- await ensureMinimaxApiKey({
1866
- profileId: "minimax-cn:default",
1867
- promptMessage: "Enter MiniMax China API key"
1868
- });
1869
- nextConfig = applyAuthProfileConfig(nextConfig, {
1870
- profileId: "minimax-cn:default",
1871
- provider: "minimax-cn",
1872
- mode: "api_key"
1873
- });
1874
- {
1875
- const modelRef = `minimax-cn/${modelId}`;
1876
- const applied = await applyDefaultModelChoice({
1877
- config: nextConfig,
1878
- setDefaultModel: params.setDefaultModel,
1879
- defaultModel: modelRef,
1880
- applyDefaultConfig: (config) => applyMinimaxApiConfigCn(config, modelId),
1881
- applyProviderConfig: (config) => applyMinimaxApiProviderConfigCn(config, modelId),
1882
- noteAgentModel,
1883
- prompter: params.prompter
1884
- });
1885
- nextConfig = applied.config;
1886
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1887
- }
1888
- return {
1889
- config: nextConfig,
1890
- agentModelOverride
1891
- };
1892
- }
1893
- if (params.authChoice === "minimax") {
1894
- const applied = await applyDefaultModelChoice({
1895
- config: nextConfig,
1896
- setDefaultModel: params.setDefaultModel,
1897
- defaultModel: "lmstudio/minimax-m2.1-gs32",
1898
- applyDefaultConfig: applyMinimaxConfig,
1899
- applyProviderConfig: applyMinimaxProviderConfig,
1900
- noteAgentModel,
1901
- prompter: params.prompter
1902
- });
1903
- nextConfig = applied.config;
1904
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
1905
- return {
1906
- config: nextConfig,
1907
- agentModelOverride
1908
- };
1909
- }
1910
- return null;
1911
- }
1912
-
1913
- //#endregion
1914
- //#region src/commands/chutes-oauth.ts
1915
- function parseManualOAuthInput(input, expectedState) {
1916
- const trimmed = String(input ?? "").trim();
1917
- if (!trimmed) throw new Error("Missing OAuth redirect URL or authorization code.");
1918
- if (!(/^https?:\/\//i.test(trimmed) || trimmed.includes("://") || trimmed.includes("?"))) return {
1919
- code: trimmed,
1920
- state: expectedState
1921
- };
1922
- const parsed = parseOAuthCallbackInput(trimmed, expectedState);
1923
- if ("error" in parsed) throw new Error(parsed.error);
1924
- if (parsed.state !== expectedState) throw new Error("Invalid OAuth state");
1925
- return parsed;
1926
- }
1927
- function buildAuthorizeUrl(params) {
1928
- return `${CHUTES_AUTHORIZE_ENDPOINT}?${new URLSearchParams({
1929
- client_id: params.clientId,
1930
- redirect_uri: params.redirectUri,
1931
- response_type: "code",
1932
- scope: params.scopes.join(" "),
1933
- state: params.state,
1934
- code_challenge: params.challenge,
1935
- code_challenge_method: "S256"
1936
- }).toString()}`;
1937
- }
1938
- async function waitForLocalCallback(params) {
1939
- const redirectUrl = new URL(params.redirectUri);
1940
- if (redirectUrl.protocol !== "http:") throw new Error(`Chutes OAuth redirect URI must be http:// (got ${params.redirectUri})`);
1941
- const hostname = redirectUrl.hostname || "127.0.0.1";
1942
- if (!isLoopbackHost(hostname)) throw new Error(`Chutes OAuth redirect hostname must be loopback (got ${hostname}). Use http://127.0.0.1:<port>/...`);
1943
- const port = redirectUrl.port ? Number.parseInt(redirectUrl.port, 10) : 80;
1944
- const expectedPath = redirectUrl.pathname || "/";
1945
- return await new Promise((resolve, reject) => {
1946
- let timeout = null;
1947
- const server = createServer((req, res) => {
1948
- try {
1949
- const requestUrl = new URL(req.url ?? "/", redirectUrl.origin);
1950
- if (requestUrl.pathname !== expectedPath) {
1951
- res.statusCode = 404;
1952
- res.setHeader("Content-Type", "text/plain; charset=utf-8");
1953
- res.end("Not found");
1954
- return;
1955
- }
1956
- const code = requestUrl.searchParams.get("code")?.trim();
1957
- const state = requestUrl.searchParams.get("state")?.trim();
1958
- if (!code) {
1959
- res.statusCode = 400;
1960
- res.setHeader("Content-Type", "text/plain; charset=utf-8");
1961
- res.end("Missing code");
1962
- return;
1963
- }
1964
- if (!state || state !== params.expectedState) {
1965
- res.statusCode = 400;
1966
- res.setHeader("Content-Type", "text/plain; charset=utf-8");
1967
- res.end("Invalid state");
1968
- return;
1969
- }
1970
- res.statusCode = 200;
1971
- res.setHeader("Content-Type", "text/html; charset=utf-8");
1972
- res.end([
1973
- "<!doctype html>",
1974
- "<html><head><meta charset='utf-8' /></head>",
1975
- "<body><h2>Chutes OAuth complete</h2>",
1976
- "<p>You can close this window and return to Anima.</p></body></html>"
1977
- ].join(""));
1978
- if (timeout) clearTimeout(timeout);
1979
- server.close();
1980
- resolve({
1981
- code,
1982
- state
1983
- });
1984
- } catch (err) {
1985
- if (timeout) clearTimeout(timeout);
1986
- server.close();
1987
- reject(err);
1988
- }
1989
- });
1990
- server.once("error", (err) => {
1991
- if (timeout) clearTimeout(timeout);
1992
- server.close();
1993
- reject(err);
1994
- });
1995
- server.listen(port, hostname, () => {
1996
- params.onProgress?.(`Waiting for OAuth callback on ${redirectUrl.origin}${expectedPath}…`);
1997
- });
1998
- timeout = setTimeout(() => {
1999
- try {
2000
- server.close();
2001
- } catch {}
2002
- reject(/* @__PURE__ */ new Error("OAuth callback timeout"));
2003
- }, params.timeoutMs);
2004
- });
2005
- }
2006
- async function loginChutes(params) {
2007
- const createPkce = params.createPkce ?? generateChutesPkce;
2008
- const createState = params.createState ?? (() => randomBytes(16).toString("hex"));
2009
- const { verifier, challenge } = createPkce();
2010
- const state = createState();
2011
- const timeoutMs = params.timeoutMs ?? 180 * 1e3;
2012
- const url = buildAuthorizeUrl({
2013
- clientId: params.app.clientId,
2014
- redirectUri: params.app.redirectUri,
2015
- scopes: params.app.scopes,
2016
- state,
2017
- challenge
2018
- });
2019
- let codeAndState;
2020
- if (params.manual) {
2021
- await params.onAuth({ url });
2022
- params.onProgress?.("Waiting for redirect URL…");
2023
- codeAndState = parseManualOAuthInput(await params.onPrompt({
2024
- message: "Paste the redirect URL (or authorization code)",
2025
- placeholder: `${params.app.redirectUri}?code=...&state=...`
2026
- }), state);
2027
- } else {
2028
- const callback = waitForLocalCallback({
2029
- redirectUri: params.app.redirectUri,
2030
- expectedState: state,
2031
- timeoutMs,
2032
- onProgress: params.onProgress
2033
- }).catch(async () => {
2034
- params.onProgress?.("OAuth callback not detected; paste redirect URL…");
2035
- return parseManualOAuthInput(await params.onPrompt({
2036
- message: "Paste the redirect URL (or authorization code)",
2037
- placeholder: `${params.app.redirectUri}?code=...&state=...`
2038
- }), state);
2039
- });
2040
- await params.onAuth({ url });
2041
- codeAndState = await callback;
2042
- }
2043
- params.onProgress?.("Exchanging code for tokens…");
2044
- return await exchangeChutesCodeForTokens({
2045
- app: params.app,
2046
- code: codeAndState.code,
2047
- codeVerifier: verifier,
2048
- fetchFn: params.fetchFn
2049
- });
2050
- }
2051
-
2052
- //#endregion
2053
- //#region src/commands/auth-choice.apply.oauth.ts
2054
- async function applyAuthChoiceOAuth(params) {
2055
- if (params.authChoice === "chutes") {
2056
- let nextConfig = params.config;
2057
- const isRemote = isRemoteEnvironment();
2058
- const redirectUri = process.env.CHUTES_OAUTH_REDIRECT_URI?.trim() || "http://127.0.0.1:1456/oauth-callback";
2059
- const scopes = process.env.CHUTES_OAUTH_SCOPES?.trim() || "openid profile chutes:invoke";
2060
- const clientId = process.env.CHUTES_CLIENT_ID?.trim() || String(await params.prompter.text({
2061
- message: "Enter Chutes OAuth client id",
2062
- placeholder: "cid_xxx",
2063
- validate: (value) => value?.trim() ? void 0 : "Required"
2064
- })).trim();
2065
- const clientSecret = process.env.CHUTES_CLIENT_SECRET?.trim() || void 0;
2066
- await params.prompter.note(isRemote ? [
2067
- "You are running in a remote/VPS environment.",
2068
- "A URL will be shown for you to open in your LOCAL browser.",
2069
- "After signing in, paste the redirect URL back here.",
2070
- "",
2071
- `Redirect URI: ${redirectUri}`
2072
- ].join("\n") : [
2073
- "Browser will open for Chutes authentication.",
2074
- "If the callback doesn't auto-complete, paste the redirect URL.",
2075
- "",
2076
- `Redirect URI: ${redirectUri}`
2077
- ].join("\n"), "Chutes OAuth");
2078
- const spin = params.prompter.progress("Starting OAuth flow…");
2079
- try {
2080
- const { onAuth, onPrompt } = createVpsAwareOAuthHandlers({
2081
- isRemote,
2082
- prompter: params.prompter,
2083
- runtime: params.runtime,
2084
- spin,
2085
- openUrl,
2086
- localBrowserMessage: "Complete sign-in in browser…"
2087
- });
2088
- const creds = await loginChutes({
2089
- app: {
2090
- clientId,
2091
- clientSecret,
2092
- redirectUri,
2093
- scopes: scopes.split(/\s+/).filter(Boolean)
2094
- },
2095
- manual: isRemote,
2096
- onAuth,
2097
- onPrompt,
2098
- onProgress: (msg) => spin.update(msg)
2099
- });
2100
- spin.stop("Chutes OAuth complete");
2101
- const profileId = `chutes:${typeof creds.email === "string" && creds.email.trim() ? creds.email.trim() : "default"}`;
2102
- await writeOAuthCredentials("chutes", creds, params.agentDir);
2103
- nextConfig = applyAuthProfileConfig(nextConfig, {
2104
- profileId,
2105
- provider: "chutes",
2106
- mode: "oauth"
2107
- });
2108
- } catch (err) {
2109
- spin.stop("Chutes OAuth failed");
2110
- params.runtime.error(String(err));
2111
- await params.prompter.note([
2112
- "Trouble with OAuth?",
2113
- "Verify CHUTES_CLIENT_ID (and CHUTES_CLIENT_SECRET if required).",
2114
- `Verify the OAuth app redirect URI includes: ${redirectUri}`,
2115
- "Chutes docs: https://chutes.ai/docs/sign-in-with-chutes/overview"
2116
- ].join("\n"), "OAuth help");
2117
- }
2118
- return { config: nextConfig };
2119
- }
2120
- return null;
2121
- }
2122
-
2123
- //#endregion
2124
- //#region src/infra/env-file.ts
2125
- function upsertSharedEnvVar(params) {
2126
- const dir = resolveConfigDir(params.env ?? process.env);
2127
- const filepath = path.join(dir, ".env");
2128
- const key = params.key.trim();
2129
- const value = params.value;
2130
- let raw = "";
2131
- if (fs.existsSync(filepath)) raw = fs.readFileSync(filepath, "utf8");
2132
- const lines = raw.length ? raw.split(/\r?\n/) : [];
2133
- const matcher = new RegExp(`^(\\s*(?:export\\s+)?)${escapeRegExp(key)}\\s*=`);
2134
- let updated = false;
2135
- let replaced = false;
2136
- const nextLines = lines.map((line) => {
2137
- const match = line.match(matcher);
2138
- if (!match) return line;
2139
- replaced = true;
2140
- const next = `${match[1] ?? ""}${key}=${value}`;
2141
- if (next !== line) updated = true;
2142
- return next;
2143
- });
2144
- if (!replaced) {
2145
- nextLines.push(`${key}=${value}`);
2146
- updated = true;
2147
- }
2148
- if (!fs.existsSync(dir)) fs.mkdirSync(dir, {
2149
- recursive: true,
2150
- mode: 448
2151
- });
2152
- const output = `${nextLines.join("\n")}\n`;
2153
- fs.writeFileSync(filepath, output, "utf8");
2154
- fs.chmodSync(filepath, 384);
2155
- return {
2156
- path: filepath,
2157
- updated,
2158
- created: !raw
2159
- };
2160
- }
2161
-
2162
- //#endregion
2163
- //#region src/commands/openai-codex-model-default.ts
2164
- const OPENAI_CODEX_DEFAULT_MODEL = "openai-codex/gpt-5.3-codex";
2165
- function shouldSetOpenAICodexModel(model) {
2166
- const trimmed = model?.trim();
2167
- if (!trimmed) return true;
2168
- const normalized = trimmed.toLowerCase();
2169
- if (normalized.startsWith("openai-codex/")) return false;
2170
- if (normalized.startsWith("openai/")) return true;
2171
- return normalized === "gpt" || normalized === "gpt-mini";
2172
- }
2173
- function resolvePrimaryModel(model) {
2174
- if (typeof model === "string") return model;
2175
- if (model && typeof model === "object" && typeof model.primary === "string") return model.primary;
2176
- }
2177
- function applyOpenAICodexModelDefault(cfg) {
2178
- if (!shouldSetOpenAICodexModel(resolvePrimaryModel(cfg.agents?.defaults?.model))) return {
2179
- next: cfg,
2180
- changed: false
2181
- };
2182
- return {
2183
- next: {
2184
- ...cfg,
2185
- agents: {
2186
- ...cfg.agents,
2187
- defaults: {
2188
- ...cfg.agents?.defaults,
2189
- model: cfg.agents?.defaults?.model && typeof cfg.agents.defaults.model === "object" ? {
2190
- ...cfg.agents.defaults.model,
2191
- primary: OPENAI_CODEX_DEFAULT_MODEL
2192
- } : { primary: OPENAI_CODEX_DEFAULT_MODEL }
2193
- }
2194
- }
2195
- },
2196
- changed: true
2197
- };
2198
- }
2199
-
2200
- //#endregion
2201
- //#region src/commands/openai-codex-oauth.ts
2202
- async function loginOpenAICodexOAuth(params) {
2203
- const { prompter, runtime, isRemote, openUrl, localBrowserMessage } = params;
2204
- await prompter.note(isRemote ? [
2205
- "You are running in a remote/VPS environment.",
2206
- "A URL will be shown for you to open in your LOCAL browser.",
2207
- "After signing in, paste the redirect URL back here."
2208
- ].join("\n") : [
2209
- "Browser will open for OpenAI authentication.",
2210
- "If the callback doesn't auto-complete, paste the redirect URL.",
2211
- "OpenAI OAuth uses localhost:1455 for the callback."
2212
- ].join("\n"), "OpenAI Codex OAuth");
2213
- const spin = prompter.progress("Starting OAuth flow…");
2214
- try {
2215
- const { onAuth, onPrompt } = createVpsAwareOAuthHandlers({
2216
- isRemote,
2217
- prompter,
2218
- runtime,
2219
- spin,
2220
- openUrl,
2221
- localBrowserMessage: localBrowserMessage ?? "Complete sign-in in browser…"
2222
- });
2223
- const creds = await loginOpenAICodex({
2224
- onAuth,
2225
- onPrompt,
2226
- onProgress: (msg) => spin.update(msg)
2227
- });
2228
- spin.stop("OpenAI OAuth complete");
2229
- return creds ?? null;
2230
- } catch (err) {
2231
- spin.stop("OpenAI OAuth failed");
2232
- runtime.error(String(err));
2233
- await prompter.note("Trouble with OAuth? See https://docs.anima.ai/start/faq", "OAuth help");
2234
- throw err;
2235
- }
2236
- }
2237
-
2238
- //#endregion
2239
- //#region src/commands/openai-model-default.ts
2240
- const OPENAI_DEFAULT_MODEL = "openai/gpt-5.1-codex";
2241
- function applyOpenAIProviderConfig(cfg) {
2242
- const next = ensureModelAllowlistEntry({
2243
- cfg,
2244
- modelRef: OPENAI_DEFAULT_MODEL
2245
- });
2246
- const models = { ...next.agents?.defaults?.models };
2247
- models[OPENAI_DEFAULT_MODEL] = {
2248
- ...models[OPENAI_DEFAULT_MODEL],
2249
- alias: models[OPENAI_DEFAULT_MODEL]?.alias ?? "GPT"
2250
- };
2251
- return {
2252
- ...next,
2253
- agents: {
2254
- ...next.agents,
2255
- defaults: {
2256
- ...next.agents?.defaults,
2257
- models
2258
- }
2259
- }
2260
- };
2261
- }
2262
- function applyOpenAIConfig(cfg) {
2263
- const next = applyOpenAIProviderConfig(cfg);
2264
- return {
2265
- ...next,
2266
- agents: {
2267
- ...next.agents,
2268
- defaults: {
2269
- ...next.agents?.defaults,
2270
- model: next.agents?.defaults?.model && typeof next.agents.defaults.model === "object" ? {
2271
- ...next.agents.defaults.model,
2272
- primary: OPENAI_DEFAULT_MODEL
2273
- } : { primary: OPENAI_DEFAULT_MODEL }
2274
- }
2275
- }
2276
- };
2277
- }
2278
-
2279
- //#endregion
2280
- //#region src/commands/auth-choice.apply.openai.ts
2281
- async function applyAuthChoiceOpenAI(params) {
2282
- let authChoice = params.authChoice;
2283
- if (authChoice === "apiKey" && params.opts?.tokenProvider === "openai") authChoice = "openai-api-key";
2284
- if (authChoice === "openai-api-key") {
2285
- let nextConfig = params.config;
2286
- let agentModelOverride;
2287
- const noteAgentModel = async (model) => {
2288
- if (!params.agentId) return;
2289
- await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`, "Model configured");
2290
- };
2291
- const applyOpenAiDefaultModelChoice = async () => {
2292
- const applied = await applyDefaultModelChoice({
2293
- config: nextConfig,
2294
- setDefaultModel: params.setDefaultModel,
2295
- defaultModel: OPENAI_DEFAULT_MODEL,
2296
- applyDefaultConfig: applyOpenAIConfig,
2297
- applyProviderConfig: applyOpenAIProviderConfig,
2298
- noteDefault: OPENAI_DEFAULT_MODEL,
2299
- noteAgentModel,
2300
- prompter: params.prompter
2301
- });
2302
- nextConfig = applied.config;
2303
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
2304
- return {
2305
- config: nextConfig,
2306
- agentModelOverride
2307
- };
2308
- };
2309
- const envKey = resolveEnvApiKey("openai");
2310
- if (envKey) {
2311
- if (await params.prompter.confirm({
2312
- message: `Use existing OPENAI_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
2313
- initialValue: true
2314
- })) {
2315
- const result = upsertSharedEnvVar({
2316
- key: "OPENAI_API_KEY",
2317
- value: envKey.apiKey
2318
- });
2319
- if (!process.env.OPENAI_API_KEY) process.env.OPENAI_API_KEY = envKey.apiKey;
2320
- await params.prompter.note(`Copied OPENAI_API_KEY to ${result.path} for launchd compatibility.`, "OpenAI API key");
2321
- return await applyOpenAiDefaultModelChoice();
2322
- }
2323
- }
2324
- let key;
2325
- if (params.opts?.token && params.opts?.tokenProvider === "openai") key = params.opts.token;
2326
- else key = await params.prompter.text({
2327
- message: "Enter OpenAI API key",
2328
- validate: validateApiKeyInput
2329
- });
2330
- const trimmed = normalizeApiKeyInput(String(key));
2331
- const result = upsertSharedEnvVar({
2332
- key: "OPENAI_API_KEY",
2333
- value: trimmed
2334
- });
2335
- process.env.OPENAI_API_KEY = trimmed;
2336
- await params.prompter.note(`Saved OPENAI_API_KEY to ${result.path} for launchd compatibility.`, "OpenAI API key");
2337
- return await applyOpenAiDefaultModelChoice();
2338
- }
2339
- if (params.authChoice === "openai-codex") {
2340
- let nextConfig = params.config;
2341
- let agentModelOverride;
2342
- const noteAgentModel = async (model) => {
2343
- if (!params.agentId) return;
2344
- await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`, "Model configured");
2345
- };
2346
- let creds;
2347
- try {
2348
- creds = await loginOpenAICodexOAuth({
2349
- prompter: params.prompter,
2350
- runtime: params.runtime,
2351
- isRemote: isRemoteEnvironment(),
2352
- openUrl: async (url) => {
2353
- await openUrl(url);
2354
- },
2355
- localBrowserMessage: "Complete sign-in in browser…"
2356
- });
2357
- } catch {
2358
- return {
2359
- config: nextConfig,
2360
- agentModelOverride
2361
- };
2362
- }
2363
- if (creds) {
2364
- await writeOAuthCredentials("openai-codex", creds, params.agentDir);
2365
- nextConfig = applyAuthProfileConfig(nextConfig, {
2366
- profileId: "openai-codex:default",
2367
- provider: "openai-codex",
2368
- mode: "oauth"
2369
- });
2370
- if (params.setDefaultModel) {
2371
- const applied = applyOpenAICodexModelDefault(nextConfig);
2372
- nextConfig = applied.next;
2373
- if (applied.changed) await params.prompter.note(`Default model set to ${OPENAI_CODEX_DEFAULT_MODEL}`, "Model configured");
2374
- } else {
2375
- agentModelOverride = OPENAI_CODEX_DEFAULT_MODEL;
2376
- await noteAgentModel(OPENAI_CODEX_DEFAULT_MODEL);
2377
- }
2378
- }
2379
- return {
2380
- config: nextConfig,
2381
- agentModelOverride
2382
- };
2383
- }
2384
- return null;
2385
- }
2386
-
2387
- //#endregion
2388
- //#region src/commands/auth-choice.apply.qwen-portal.ts
2389
- async function applyAuthChoiceQwenPortal(params) {
2390
- return await applyAuthChoicePluginProvider(params, {
2391
- authChoice: "qwen-portal",
2392
- pluginId: "qwen-portal-auth",
2393
- providerId: "qwen-portal",
2394
- methodId: "device",
2395
- label: "Qwen"
2396
- });
2397
- }
2398
-
2399
- //#endregion
2400
- //#region src/commands/vllm-setup.ts
2401
- const VLLM_DEFAULT_BASE_URL = "http://127.0.0.1:8000/v1";
2402
- const VLLM_DEFAULT_CONTEXT_WINDOW = 128e3;
2403
- const VLLM_DEFAULT_MAX_TOKENS = 8192;
2404
- const VLLM_DEFAULT_COST = {
2405
- input: 0,
2406
- output: 0,
2407
- cacheRead: 0,
2408
- cacheWrite: 0
2409
- };
2410
- async function promptAndConfigureVllm(params) {
2411
- const baseUrlRaw = await params.prompter.text({
2412
- message: "vLLM base URL",
2413
- initialValue: VLLM_DEFAULT_BASE_URL,
2414
- placeholder: VLLM_DEFAULT_BASE_URL,
2415
- validate: (value) => value?.trim() ? void 0 : "Required"
2416
- });
2417
- const apiKeyRaw = await params.prompter.text({
2418
- message: "vLLM API key",
2419
- placeholder: "sk-... (or any non-empty string)",
2420
- validate: (value) => value?.trim() ? void 0 : "Required"
2421
- });
2422
- const modelIdRaw = await params.prompter.text({
2423
- message: "vLLM model",
2424
- placeholder: "meta-llama/Meta-Llama-3-8B-Instruct",
2425
- validate: (value) => value?.trim() ? void 0 : "Required"
2426
- });
2427
- const baseUrl = String(baseUrlRaw ?? "").trim().replace(/\/+$/, "");
2428
- const apiKey = String(apiKeyRaw ?? "").trim();
2429
- const modelId = String(modelIdRaw ?? "").trim();
2430
- const modelRef = `vllm/${modelId}`;
2431
- await upsertAuthProfileWithLock({
2432
- profileId: "vllm:default",
2433
- credential: {
2434
- type: "api_key",
2435
- provider: "vllm",
2436
- key: apiKey
2437
- },
2438
- agentDir: params.agentDir
2439
- });
2440
- return {
2441
- config: {
2442
- ...params.cfg,
2443
- models: {
2444
- ...params.cfg.models,
2445
- mode: params.cfg.models?.mode ?? "merge",
2446
- providers: {
2447
- ...params.cfg.models?.providers,
2448
- vllm: {
2449
- baseUrl,
2450
- api: "openai-completions",
2451
- apiKey: "VLLM_API_KEY",
2452
- models: [{
2453
- id: modelId,
2454
- name: modelId,
2455
- reasoning: false,
2456
- input: ["text"],
2457
- cost: VLLM_DEFAULT_COST,
2458
- contextWindow: VLLM_DEFAULT_CONTEXT_WINDOW,
2459
- maxTokens: VLLM_DEFAULT_MAX_TOKENS
2460
- }]
2461
- }
2462
- }
2463
- }
2464
- },
2465
- modelId,
2466
- modelRef
2467
- };
2468
- }
2469
-
2470
- //#endregion
2471
- //#region src/commands/auth-choice.apply.vllm.ts
2472
- function applyVllmDefaultModel(cfg, modelRef) {
2473
- const existingModel = cfg.agents?.defaults?.model;
2474
- const fallbacks = existingModel && typeof existingModel === "object" && "fallbacks" in existingModel ? existingModel.fallbacks : void 0;
2475
- return {
2476
- ...cfg,
2477
- agents: {
2478
- ...cfg.agents,
2479
- defaults: {
2480
- ...cfg.agents?.defaults,
2481
- model: {
2482
- ...fallbacks ? { fallbacks } : void 0,
2483
- primary: modelRef
2484
- }
2485
- }
2486
- }
2487
- };
2488
- }
2489
- async function applyAuthChoiceVllm(params) {
2490
- if (params.authChoice !== "vllm") return null;
2491
- const { config: nextConfig, modelRef } = await promptAndConfigureVllm({
2492
- cfg: params.config,
2493
- prompter: params.prompter,
2494
- agentDir: params.agentDir
2495
- });
2496
- if (!params.setDefaultModel) return {
2497
- config: nextConfig,
2498
- agentModelOverride: modelRef
2499
- };
2500
- await params.prompter.note(`Default model set to ${modelRef}`, "Model configured");
2501
- return { config: applyVllmDefaultModel(nextConfig, modelRef) };
2502
- }
2503
-
2504
- //#endregion
2505
- //#region src/commands/auth-choice.apply.xai.ts
2506
- async function applyAuthChoiceXAI(params) {
2507
- if (params.authChoice !== "xai-api-key") return null;
2508
- let nextConfig = params.config;
2509
- let agentModelOverride;
2510
- const noteAgentModel = async (model) => {
2511
- if (!params.agentId) return;
2512
- await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`, "Model configured");
2513
- };
2514
- let hasCredential = false;
2515
- const optsKey = params.opts?.xaiApiKey?.trim();
2516
- if (optsKey) {
2517
- setXaiApiKey(normalizeApiKeyInput(optsKey), params.agentDir);
2518
- hasCredential = true;
2519
- }
2520
- if (!hasCredential) {
2521
- const envKey = resolveEnvApiKey("xai");
2522
- if (envKey) {
2523
- if (await params.prompter.confirm({
2524
- message: `Use existing XAI_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
2525
- initialValue: true
2526
- })) {
2527
- setXaiApiKey(envKey.apiKey, params.agentDir);
2528
- hasCredential = true;
2529
- }
2530
- }
2531
- }
2532
- if (!hasCredential) {
2533
- const key = await params.prompter.text({
2534
- message: "Enter xAI API key",
2535
- validate: validateApiKeyInput
2536
- });
2537
- setXaiApiKey(normalizeApiKeyInput(String(key)), params.agentDir);
2538
- }
2539
- nextConfig = applyAuthProfileConfig(nextConfig, {
2540
- profileId: "xai:default",
2541
- provider: "xai",
2542
- mode: "api_key"
2543
- });
2544
- {
2545
- const applied = await applyDefaultModelChoice({
2546
- config: nextConfig,
2547
- setDefaultModel: params.setDefaultModel,
2548
- defaultModel: XAI_DEFAULT_MODEL_REF,
2549
- applyDefaultConfig: applyXaiConfig,
2550
- applyProviderConfig: applyXaiProviderConfig,
2551
- noteDefault: XAI_DEFAULT_MODEL_REF,
2552
- noteAgentModel,
2553
- prompter: params.prompter
2554
- });
2555
- nextConfig = applied.config;
2556
- agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
2557
- }
2558
- return {
2559
- config: nextConfig,
2560
- agentModelOverride
2561
- };
2562
- }
2563
-
2564
- //#endregion
2565
- //#region src/commands/auth-choice.apply.ts
2566
- async function applyAuthChoice(params) {
2567
- const handlers = [
2568
- applyAuthChoiceAnthropic,
2569
- applyAuthChoiceVllm,
2570
- applyAuthChoiceOpenAI,
2571
- applyAuthChoiceOAuth,
2572
- applyAuthChoiceApiProviders,
2573
- applyAuthChoiceMiniMax,
2574
- applyAuthChoiceGitHubCopilot,
2575
- applyAuthChoiceGoogleAntigravity,
2576
- applyAuthChoiceGoogleGeminiCli,
2577
- applyAuthChoiceCopilotProxy,
2578
- applyAuthChoiceQwenPortal,
2579
- applyAuthChoiceXAI
2580
- ];
2581
- for (const handler of handlers) {
2582
- const result = await handler(params);
2583
- if (result) return result;
2584
- }
2585
- return { config: params.config };
2586
- }
2587
-
2588
- //#endregion
2589
- //#region src/commands/auth-choice.model-check.ts
2590
- async function warnIfModelConfigLooksOff(config, prompter, options) {
2591
- const agentModelOverride = options?.agentId ? resolveAgentModelPrimary(config, options.agentId) : void 0;
2592
- const configWithModel = agentModelOverride && agentModelOverride.length > 0 ? {
2593
- ...config,
2594
- agents: {
2595
- ...config.agents,
2596
- defaults: {
2597
- ...config.agents?.defaults,
2598
- model: {
2599
- ...typeof config.agents?.defaults?.model === "object" ? config.agents.defaults.model : void 0,
2600
- primary: agentModelOverride
2601
- }
2602
- }
2603
- }
2604
- } : config;
2605
- const ref = resolveConfiguredModelRef({
2606
- cfg: configWithModel,
2607
- defaultProvider: DEFAULT_PROVIDER,
2608
- defaultModel: DEFAULT_MODEL
2609
- });
2610
- const warnings = [];
2611
- const catalog = await loadModelCatalog({
2612
- config: configWithModel,
2613
- useCache: false
2614
- });
2615
- if (catalog.length > 0) {
2616
- if (!catalog.some((entry) => entry.provider === ref.provider && entry.id === ref.model)) warnings.push(`Model not found: ${ref.provider}/${ref.model}. Update agents.defaults.model or run /models list.`);
2617
- }
2618
- const store = ensureAuthProfileStore(options?.agentDir);
2619
- const hasProfile = listProfilesForProvider(store, ref.provider).length > 0;
2620
- const envKey = resolveEnvApiKey(ref.provider);
2621
- const customKey = getCustomProviderApiKey(config, ref.provider);
2622
- if (!hasProfile && !envKey && !customKey) warnings.push(`No auth configured for provider "${ref.provider}". The agent may fail until credentials are added.`);
2623
- if (ref.provider === "openai") {
2624
- if (listProfilesForProvider(store, "openai-codex").length > 0) warnings.push(`Detected OpenAI Codex OAuth. Consider setting agents.defaults.model to ${OPENAI_CODEX_DEFAULT_MODEL}.`);
2625
- }
2626
- if (warnings.length > 0) await prompter.note(warnings.join("\n"), "Model check");
2627
- }
2628
-
2629
- //#endregion
2630
- //#region src/commands/auth-choice.preferred-provider.ts
2631
- const PREFERRED_PROVIDER_BY_AUTH_CHOICE = {
2632
- oauth: "anthropic",
2633
- "setup-token": "anthropic",
2634
- "claude-cli": "anthropic",
2635
- token: "anthropic",
2636
- apiKey: "anthropic",
2637
- vllm: "vllm",
2638
- "openai-codex": "openai-codex",
2639
- "codex-cli": "openai-codex",
2640
- chutes: "chutes",
2641
- "openai-api-key": "openai",
2642
- "openrouter-api-key": "openrouter",
2643
- "ai-gateway-api-key": "vercel-ai-gateway",
2644
- "cloudflare-ai-gateway-api-key": "cloudflare-ai-gateway",
2645
- "moonshot-api-key": "moonshot",
2646
- "moonshot-api-key-cn": "moonshot",
2647
- "kimi-code-api-key": "kimi-coding",
2648
- "gemini-api-key": "google",
2649
- "google-antigravity": "google-antigravity",
2650
- "google-gemini-cli": "google-gemini-cli",
2651
- "zai-api-key": "zai",
2652
- "zai-coding-global": "zai",
2653
- "zai-coding-cn": "zai",
2654
- "zai-global": "zai",
2655
- "zai-cn": "zai",
2656
- "xiaomi-api-key": "xiaomi",
2657
- "synthetic-api-key": "synthetic",
2658
- "venice-api-key": "venice",
2659
- "together-api-key": "together",
2660
- "huggingface-api-key": "huggingface",
2661
- "github-copilot": "github-copilot",
2662
- "copilot-proxy": "copilot-proxy",
2663
- "minimax-cloud": "minimax",
2664
- "minimax-api": "minimax",
2665
- "minimax-api-key-cn": "minimax-cn",
2666
- "minimax-api-lightning": "minimax",
2667
- minimax: "lmstudio",
2668
- "opencode-zen": "opencode",
2669
- "xai-api-key": "xai",
2670
- "litellm-api-key": "litellm",
2671
- "qwen-portal": "qwen-portal",
2672
- "minimax-portal": "minimax-portal",
2673
- "qianfan-api-key": "qianfan",
2674
- "custom-api-key": "custom"
2675
- };
2676
- function resolvePreferredProviderForAuthChoice(choice) {
2677
- return PREFERRED_PROVIDER_BY_AUTH_CHOICE[choice];
2678
- }
2679
-
2680
- //#endregion
2681
- export { applyOpenAIConfig as a, detectZaiEndpoint as c, formatAuthChoiceChoicesForCli as d, isDeprecatedAuthChoice as f, promptAndConfigureVllm as i, applyGoogleGeminiModelDefault as l, warnIfModelConfigLooksOff as n, OPENAI_CODEX_DEFAULT_MODEL as o, normalizeLegacyOnboardAuthChoice as p, applyAuthChoice as r, upsertSharedEnvVar as s, resolvePreferredProviderForAuthChoice as t, promptAuthChoiceGrouped as u };