@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.
- package/README.md +1260 -28
- package/dist/accounts-Bth3PpPD.js +260 -0
- package/dist/accounts-D8CPKNkN.js +259 -0
- package/dist/acp-cli-ByK6lS6c.js +1081 -0
- package/dist/acp-cli-CaQCjIw4.js +1084 -0
- package/dist/agent-BgIkqd3F.js +725 -0
- package/dist/agent-N5BDcge4.js +725 -0
- package/dist/agent-events-COH7NDW2.js +182 -0
- package/dist/agent-scope-CPphqq-U.js +452 -0
- package/dist/agent-scope-DZgptr9J.js +452 -0
- package/dist/agent-scope-cj2QCT6R.js +112 -0
- package/dist/agents-NEudYMdg.js +774 -0
- package/dist/agents.config-Bujs-NIy.js +182 -0
- package/dist/agents.config-jp7OLssr.js +182 -0
- package/dist/argv-BMZMiW7v.js +73 -0
- package/dist/audit-C-UJhfdv.js +2401 -0
- package/dist/audit-CeCO7SK5.js +2401 -0
- package/dist/auth-BNZsOHGF.js +648 -0
- package/dist/auth-DMPZWzEa.js +639 -0
- package/dist/auth-choice-5VnaGMD-.js +2681 -0
- package/dist/auth-choice-DA2k4vs8.js +2681 -0
- package/dist/auth-health-B7FqA26_.js +149 -0
- package/dist/auth-health-VO_MPqVX.js +149 -0
- package/dist/auth-profiles-BDrNYX_n.js +1564 -0
- package/dist/auth-profiles-CxSHydjn.js +2689 -0
- package/dist/banner-BtDZPRzi.js +294 -0
- package/dist/browser-cli-8yQMpxb8.js +1679 -0
- package/dist/browser-cli-Czg3JtDH.js +1676 -0
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +16 -16
- package/dist/bundled/bootstrap-extra-files/handler.js +4 -4
- package/dist/bundled/command-logger/handler.js +1 -1
- package/dist/bundled/session-memory/handler.js +5 -5
- package/dist/call-BIzCaKZb.js +282 -0
- package/dist/call-BYDpTVCZ.js +282 -0
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/catalog-CqKiUgu6.js +185 -0
- package/dist/catalog-DMfEg-oK.js +185 -0
- package/dist/channel-options-BrtCtyrT.js +32 -0
- package/dist/channel-options-CO21Gl8p.js +33 -0
- package/dist/channel-selection-Bbm1lq3P.js +51 -0
- package/dist/channel-selection-CqcX7Ocw.js +51 -0
- package/dist/channel-web-DrsT6OAE.js +2162 -0
- package/dist/channels-cli-Juyh1S6n.js +1304 -0
- package/dist/channels-cli-zNvi1m5c.js +1306 -0
- package/dist/channels-status-issues-CqzqshW4.js +18 -0
- package/dist/channels-status-issues-DdJdO866.js +18 -0
- package/dist/chrome-C4dOMO8z.js +1601 -0
- package/dist/chrome-DdcDzAtH.js +1629 -0
- package/dist/chrome-U3DRzjJD.js +1601 -0
- package/dist/chunk-D2nLsrEW.js +348 -0
- package/dist/clack-prompter-BI3RDW5w.js +92 -0
- package/dist/clack-prompter-Dwr1m_IZ.js +92 -0
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/cli-C3cpDaz8.js +99 -0
- package/dist/cli-CjWUGdGC.js +101 -0
- package/dist/cli-session-BVjY_XrW.js +5463 -0
- package/dist/cli-session-gtuYN2Iq.js +5408 -0
- package/dist/client-Dswwze5_.js +1692 -0
- package/dist/client-LRKFjo4A.js +1692 -0
- package/dist/clipboard-BZKS9O1u.js +31 -0
- package/dist/clipboard-DES8b1AM.js +31 -0
- package/dist/command-format-CP1YTNCl.js +52 -0
- package/dist/command-format-CVL4K5cj.js +52 -0
- package/dist/command-format-G6N2zghg.js +38 -0
- package/dist/command-registry-BBvNvysr.js +248 -0
- package/dist/commands-AZ3n8Y2c.js +726 -0
- package/dist/commands-BMnD_QRY.js +726 -0
- package/dist/commands-registry-cFqZ6Ib4.js +766 -0
- package/dist/commands-registry-q13H7ng5.js +766 -0
- package/dist/common-CX5458fH.js +287 -0
- package/dist/common-DJbnT8ws.js +287 -0
- package/dist/completion-cli-BADRBcIl.js +432 -0
- package/dist/completion-cli-DMQgiObF.js +431 -0
- package/dist/config-CU-Axg8P.js +5704 -0
- package/dist/config-DaqbUdkI.js +5705 -0
- package/dist/config-cli-BPlbwiuA.js +244 -0
- package/dist/config-cli-DXgZJkPU.js +247 -0
- package/dist/config-guard-Ba49JNds.js +76 -0
- package/dist/config-guard-Cu0qMKZJ.js +93 -0
- package/dist/config-kVVm5EYV.js +6523 -0
- package/dist/config-sync-CzLnLTXt.js +91 -0
- package/dist/config-sync-DuydxPWx.js +91 -0
- package/dist/configure-CHgacLyi.js +960 -0
- package/dist/configure-DfHXDa1L.js +959 -0
- package/dist/context-DzgXOckU.js +60 -0
- package/dist/control-service-8_wKHwBa.js +72 -0
- package/dist/control-service-BtL1Jto_.js +72 -0
- package/dist/cron-cli-BCzSR2c0.js +448 -0
- package/dist/cron-cli-CCWNkykU.js +451 -0
- package/dist/daemon-cli-Bjkbu9Vy.js +565 -0
- package/dist/daemon-cli-CmlHcC1J.js +566 -0
- package/dist/daemon-cli.js +16 -16
- package/dist/daemon-runtime-C0tz7VAC.js +460 -0
- package/dist/daemon-runtime-rUTqCVwJ.js +460 -0
- package/dist/deliver-BBggsviM.js +1097 -0
- package/dist/deliver-CePITOl8.js +1162 -0
- package/dist/deliver-DFnVaetP.js +1097 -0
- package/dist/delivery-queue-BJQK3oh5.js +220 -0
- package/dist/deps-CeEKhrp7.js +42 -0
- package/dist/devices-cli-DQrDMrZH.js +198 -0
- package/dist/devices-cli-Oe-A1Dv0.js +195 -0
- package/dist/diagnostics-DxMFrBLO.js +35 -0
- package/dist/diagnostics-m79ZlMmZ.js +35 -0
- package/dist/directory-cli-BL6h8cGF.js +246 -0
- package/dist/directory-cli-Cjgmi_sj.js +243 -0
- package/dist/dispatcher-DAFbQM-c.js +100 -0
- package/dist/dispatcher-DNd40gUn.js +100 -0
- package/dist/dist-CqDI82ei.js +929 -0
- package/dist/dist-DnHRxR5U.js +929 -0
- package/dist/dns-cli-CFtV3BXK.js +200 -0
- package/dist/dns-cli-NyIHvQ5S.js +197 -0
- package/dist/dock-BdXLb5oY.js +753 -0
- package/dist/dock-jYICmNcI.js +753 -0
- package/dist/docs-cli-CrOaIK_H.js +161 -0
- package/dist/docs-cli-D_cmJDSr.js +159 -0
- package/dist/doctor-BpGxKrBl.js +1815 -0
- package/dist/doctor-D12wNQPU.js +1813 -0
- package/dist/doctor-completion-DeOfofek.js +92 -0
- package/dist/doctor-completion-DwjqdEcK.js +92 -0
- package/dist/doctor-config-flow-BI3mpkbd.js +1232 -0
- package/dist/doctor-config-flow-wMHheFkC.js +1232 -0
- package/dist/engine-BCtL-AMw.js +563 -0
- package/dist/engine-Bk_UT413.js +563 -0
- package/dist/entry.js +5 -5
- package/dist/env-v6411I8h.js +32 -0
- package/dist/exec-B7sUS164.js +1167 -0
- package/dist/exec-approvals-CroGJRUg.js +1221 -0
- package/dist/exec-approvals-cli-BTxF_RsH.js +371 -0
- package/dist/exec-approvals-cli-n1gyGwH2.js +368 -0
- package/dist/exec-mhSykkaa.js +255 -0
- package/dist/extensionAPI.js +3 -3
- package/dist/frontmatter-BmHq0vRD.js +204 -0
- package/dist/gateway-cli-DDBadlrS.js +19971 -0
- package/dist/gateway-cli-IZNkOMBe.js +19972 -0
- package/dist/gateway-rpc-Dtx8HN-n.js +28 -0
- package/dist/gateway-rpc-L2PVSqGj.js +28 -0
- package/dist/github-copilot-auth-DKyqDaGU.js +1418 -0
- package/dist/github-copilot-auth-DXpOMSd3.js +1418 -0
- package/dist/gmail-setup-utils-BKNczIJ9.js +428 -0
- package/dist/gmail-setup-utils-co0ppccC.js +428 -0
- package/dist/health-Bm8ZTvC3.js +1253 -0
- package/dist/health-DUf1gt4E.js +1258 -0
- package/dist/health-format-BksT6F68.js +208 -0
- package/dist/health-format-uzh1xYLD.js +208 -0
- package/dist/heartbeat-visibility-1TJb1Zao.js +98 -0
- package/dist/heartbeat-visibility-CwodtdcX.js +98 -0
- package/dist/help-format-C6cv_aZp.js +17 -0
- package/dist/helpers-N-uSFKOn.js +10 -0
- package/dist/hooks-cli-1POsXqOl.js +993 -0
- package/dist/hooks-cli-BGjILbze.js +991 -0
- package/dist/hooks-status-DE07n5RC.js +356 -0
- package/dist/hooks-status-Du-d1jde.js +356 -0
- package/dist/image-ops-B_AYV3tp.js +541 -0
- package/dist/image-ops-Bp0C6Mvr.js +541 -0
- package/dist/index.js +82 -82
- package/dist/init-9A0s7bWG.js +122 -0
- package/dist/init-DoyCHJDC.js +122 -0
- package/dist/installs-D1C9wHAq.js +383 -0
- package/dist/installs-Dh4dHayM.js +383 -0
- package/dist/ipv4-DCItfaJo.js +1964 -0
- package/dist/ipv4-DSOUVx0i.js +1964 -0
- package/dist/lanes-BvSnHq2h.js +232 -0
- package/dist/lifecycle-core-BY4WIf9g.js +388 -0
- package/dist/lifecycle-core-TQKyXO-6.js +387 -0
- package/dist/links-CNu_8RZl.js +15 -0
- package/dist/links-D2tt2ouh.js +15 -0
- package/dist/llm-slug-generator.js +4 -4
- package/dist/logging-BIeRw0WR.js +15 -0
- package/dist/logging-C7lb3Vjc.js +15 -0
- package/dist/login-DXWKewA2.js +59 -0
- package/dist/login-Fhh4uWmf.js +61 -0
- package/dist/login-pPs3UO38.js +61 -0
- package/dist/login-qr-CevLD8cV.js +326 -0
- package/dist/login-qr-GF2JMIy-.js +323 -0
- package/dist/login-qr-ZYYKD6Yt.js +321 -0
- package/dist/logs-cli-CzXbX8HZ.js +242 -0
- package/dist/logs-cli-D9ngH9PF.js +245 -0
- package/dist/manager-BD5rA3w0.js +3244 -0
- package/dist/manager-BDPgBQSH.js +3246 -0
- package/dist/manager-DRWMWM--.js +3244 -0
- package/dist/manifest-registry-DbvPaBXY.js +748 -0
- package/dist/manifest-registry-kHX_MFa1.js +748 -0
- package/dist/markdown-tables-CqwihY2m.js +347 -0
- package/dist/markdown-tables-DJV7eAJZ.js +348 -0
- package/dist/media-lUqN-0O9.js +1342 -0
- package/dist/memory-cli-BLXSpgnN.js +868 -0
- package/dist/memory-cli-BcGVkkRJ.js +869 -0
- package/dist/message-channel-D_jIO87f.js +110 -0
- package/dist/migrate-BpVOar4L.js +157 -0
- package/dist/migrate-CkgGDkWy.js +157 -0
- package/dist/model-selection-Cqt6aJ0G.js +2691 -0
- package/dist/models-CExsNQPH.js +2510 -0
- package/dist/models-cli-Ba3Jmwev.js +2739 -0
- package/dist/models-cli-iDAlsbL2.js +258 -0
- package/dist/net-0A_zcaQD.js +218 -0
- package/dist/node-cli-ATmwCXIk.js +1319 -0
- package/dist/node-cli-DYFR_V25.js +1322 -0
- package/dist/node-service-CN4LqR1A.js +67 -0
- package/dist/node-service-CWt3MdSC.js +67 -0
- package/dist/nodes-cli-BeVmhTz3.js +1197 -0
- package/dist/nodes-cli-QeJIfa18.js +1200 -0
- package/dist/nodes-screen-DHyWAlla.js +234 -0
- package/dist/nodes-screen-qs3jRBPk.js +234 -0
- package/dist/note-CSlg2BnB.js +73 -0
- package/dist/note-Ctvglhp1.js +73 -0
- package/dist/npm-registry-spec-DQd4M22q.js +351 -0
- package/dist/npm-registry-spec-PxisIMts.js +351 -0
- package/dist/onboard-DeruD10m.js +1166 -0
- package/dist/onboard-SAcu5N6N.js +1165 -0
- package/dist/onboard-channels-C4iSfFXR.js +672 -0
- package/dist/onboard-channels-oVTVgoyg.js +672 -0
- package/dist/onboard-helpers-B8roRwLP.js +365 -0
- package/dist/onboard-helpers-Dgh26hgP.js +365 -0
- package/dist/onboarding-Bi-ac8we.js +911 -0
- package/dist/onboarding-C2gjB2u8.js +910 -0
- package/dist/orchestrator-DlbAYMQP.js +357 -0
- package/dist/orchestrator-DlwVRVDA.js +357 -0
- package/dist/outbound-CkKgc6iR.js +2062 -0
- package/dist/outbound-Vfm5yDh3.js +214 -0
- package/dist/outbound-bs_VK51X.js +214 -0
- package/dist/outbound-send-deps-DDjiMfEL.js +55 -0
- package/dist/pairing-cli-CJYeuEik.js +118 -0
- package/dist/pairing-cli-mqopHI8s.js +121 -0
- package/dist/pairing-store-BsXzUDPv.js +388 -0
- package/dist/pairing-store-DoNj00-X.js +388 -0
- package/dist/path-env-C_xpiG8l.js +89 -0
- package/dist/path-env-DSSMHu5A.js +89 -0
- package/dist/paths-B1vRVCad.js +126 -0
- package/dist/paths-BMuHNFxg.js +238 -0
- package/dist/paths-BXQQzXGQ.js +129 -0
- package/dist/paths-Buw_geoe.js +54 -0
- package/dist/paths-DA9WYabg.js +222 -0
- package/dist/paths-DfQGx0_k.js +129 -0
- package/dist/pi-auth-json-DOPW3e4X.js +78 -0
- package/dist/pi-auth-json-MruLmI_X.js +82 -0
- package/dist/pi-auth-json-lae_wwwo.js +80 -0
- package/dist/pi-model-discovery-7q0GxMrp.js +3 -0
- package/dist/pi-tools.policy-Csmla32P.js +200 -0
- package/dist/pi-tools.policy-xYdDLEv9.js +200 -0
- package/dist/plugin-auto-enable-CViVVWgg.js +282 -0
- package/dist/plugin-auto-enable-CjZ238UI.js +282 -0
- package/dist/plugin-registry-B4Aw2hzq.js +32 -0
- package/dist/plugin-registry-DW81arxW.js +32 -0
- package/dist/plugin-sdk/cli/cli-name.d.ts +1 -1
- package/dist/plugin-sdk/config/paths.d.ts +2 -2
- package/dist/plugin-sdk/index.js +7 -7
- package/dist/plugins-DhcGAPDB.js +38 -0
- package/dist/plugins-DtghNRtM.js +168 -0
- package/dist/plugins-cli-4vWTmOAb.js +736 -0
- package/dist/plugins-cli-CdTMbP0X.js +734 -0
- package/dist/polls-D6eCdatA.js +1343 -0
- package/dist/ports-BtZx-JKD.js +96 -0
- package/dist/ports-C8bKN8s0.js +96 -0
- package/dist/ports-DHiKnPRX.js +344 -0
- package/dist/ports-vd93M_Pt.js +317 -0
- package/dist/program-CX3aUVeb.js +176 -0
- package/dist/program-context-BPos0ivo.js +496 -0
- package/dist/progress-oiAjiiNi.js +133 -0
- package/dist/prompt-style-Cm4wOtKm.js +9 -0
- package/dist/pw-ai-4QbK5YFe.js +1865 -0
- package/dist/pw-ai-BWz3Cxt7.js +1868 -0
- package/dist/pw-ai-C83HBue2.js +1867 -0
- package/dist/qmd-manager-BcMeZiGD.js +938 -0
- package/dist/qmd-manager-CPypGJ0P.js +935 -0
- package/dist/qmd-manager-CRrSkfia.js +937 -0
- package/dist/register.agent-DDY8KJhn.js +265 -0
- package/dist/register.agent-DKawm-9d.js +1003 -0
- package/dist/register.anima-CEWUo29k.js +193 -0
- package/dist/register.anima-DBWz2rk_.js +193 -0
- package/dist/register.configure-BX67qV8k.js +103 -0
- package/dist/register.configure-CWsySuiq.js +101 -0
- package/dist/register.maintenance-0k-ZNhDg.js +543 -0
- package/dist/register.maintenance-BIwx1fzX.js +543 -0
- package/dist/register.message-CXPsoakA.js +657 -0
- package/dist/register.message-DA3jvfgI.js +660 -0
- package/dist/register.onboard-C4HG7Hqv.js +170 -0
- package/dist/register.onboard-GOpdif-j.js +170 -0
- package/dist/register.setup-B17vZT7C.js +175 -0
- package/dist/register.setup-GJyUDCqh.js +175 -0
- package/dist/register.status-health-sessions-D5876dGx.js +313 -0
- package/dist/register.status-health-sessions-lOewVIZR.js +142 -0
- package/dist/register.subclis-Dwnujj5C.js +255 -0
- package/dist/reply-CR5T_oQJ.js +32212 -0
- package/dist/reply-prefix-BcrS4Umd.js +100 -0
- package/dist/reply-prefix-Btb5o2NH.js +100 -0
- package/dist/reply-r089HuRA.js +32212 -0
- package/dist/routes-B4czFzIb.js +1820 -0
- package/dist/routes-ucJWAk5O.js +1820 -0
- package/dist/rpc-BnKxnQ0v.js +70 -0
- package/dist/rpc-DgE-xnyx.js +70 -0
- package/dist/run-main-B74kv84C.js +371 -0
- package/dist/runtime-guard-CKFdts2L.js +60 -0
- package/dist/sandbox-CJTS3er6.js +858 -0
- package/dist/sandbox-DBSiVHt_.js +859 -0
- package/dist/sandbox-cli-CrkjyU5M.js +461 -0
- package/dist/sandbox-cli-D1r5y6Sz.js +458 -0
- package/dist/security-cli-BZUdnkhn.js +462 -0
- package/dist/security-cli-DS09ebvA.js +465 -0
- package/dist/server-context-C0xZbYhg.js +824 -0
- package/dist/server-context-DVh2z7om.js +824 -0
- package/dist/server-node-events-bu9lpkMH.js +233 -0
- package/dist/server-node-events-i1Rrww31.js +231 -0
- package/dist/service-CJJwLEor.js +642 -0
- package/dist/service-DxLxBhaU.js +642 -0
- package/dist/service-audit-DB4Y3Ekp.js +488 -0
- package/dist/service-audit-M8y4TXVb.js +488 -0
- package/dist/session-CGxOLFs2.js +179 -0
- package/dist/session-DTTbdKb0.js +181 -0
- package/dist/session-cost-usage-FcdJl9c3.js +600 -0
- package/dist/session-cost-usage-qdfsGU2a.js +600 -0
- package/dist/session-yOhWcsD2.js +181 -0
- package/dist/sessions-B-Cu7JZq.js +1296 -0
- package/dist/sessions-BgLN4KFr.js +180 -0
- package/dist/sessions-CnRjwdVr.js +1296 -0
- package/dist/sessions-wRKla1Qh.js +2038 -0
- package/dist/shared-DS3UaJSP.js +66 -0
- package/dist/shared-DxNHzky3.js +77 -0
- package/dist/shared-Qpt4hUDi.js +66 -0
- package/dist/shared-kzrojZ1B.js +77 -0
- package/dist/skill-scanner-DLJji5Ye.js +263 -0
- package/dist/skills-BWFIEp4j.js +807 -0
- package/dist/skills-DV4zKdCx.js +808 -0
- package/dist/skills-cli-BY53ILm2.js +289 -0
- package/dist/skills-cli-CO3gxl8A.js +286 -0
- package/dist/skills-status-DX5pcqY3.js +166 -0
- package/dist/skills-status-zhcKzGkp.js +166 -0
- package/dist/sqlite-B6MojU1I.js +321 -0
- package/dist/sqlite-CuprTGR7.js +453 -0
- package/dist/sqlite-dzD-jMjs.js +368 -0
- package/dist/start-Cu3aLoSf.js +297 -0
- package/dist/start-Dz7tMAl8.js +296 -0
- package/dist/status-CaSxhxfV.js +2132 -0
- package/dist/status-D2C0JCX3.js +2137 -0
- package/dist/status-DlFMsQzh.js +27 -0
- package/dist/status-G0CITnKR.js +27 -0
- package/dist/status.update-CHjhVxJY.js +79 -0
- package/dist/status.update-DVFelehi.js +79 -0
- package/dist/subagent-registry-3Xb4el-8.js +14 -0
- package/dist/subagent-registry-CdSjz14I.js +2760 -0
- package/dist/subagent-registry-DNDhbHWi.js +2759 -0
- package/dist/subsystem-DfKstnEK.js +860 -0
- package/dist/system-cli-B5mt0FWa.js +82 -0
- package/dist/system-cli-Dg3UQ3Zz.js +79 -0
- package/dist/systemd-B43AvOGx.js +452 -0
- package/dist/systemd-RpPE0XGg.js +452 -0
- package/dist/systemd-hints-DMJT-Bbc.js +36 -0
- package/dist/systemd-hints-vRInKcz9.js +36 -0
- package/dist/systemd-linger-Dzyxqsod.js +75 -0
- package/dist/systemd-linger-EujbmI5A.js +75 -0
- package/dist/table-DhXHfRX2.js +279 -0
- package/dist/table-bWCLW-3P.js +279 -0
- package/dist/timeout-Ddn-5kAO.js +232 -0
- package/dist/tokens-3psI_Qk2.js +14 -0
- package/dist/tokens-BaM53PEx.js +14 -0
- package/dist/trash-Bmxs1Rnm.js +23 -0
- package/dist/trash-C39a6hKA.js +23 -0
- package/dist/tui-BHgBWhHE.js +3894 -0
- package/dist/tui-cli-B9Sq5-cC.js +50 -0
- package/dist/tui-cli-Dw7v4JoJ.js +47 -0
- package/dist/tui-mUwDwqvd.js +3894 -0
- package/dist/update-DF0GHG0j.js +317 -0
- package/dist/update-DoZLVjva.js +317 -0
- package/dist/update-check-Bt1dVPVN.js +400 -0
- package/dist/update-check-D5qAKes7.js +400 -0
- package/dist/update-cli-BNu2Oi7H.js +1105 -0
- package/dist/update-cli-D36AmALA.js +1105 -0
- package/dist/update-runner-CNQQaTwA.js +894 -0
- package/dist/update-runner-CvxZmbu-.js +894 -0
- package/dist/usage-BGCwNnjk.js +4516 -0
- package/dist/utils-DZ8pnOD5.js +243 -0
- package/dist/web-B5QG839O.js +46842 -0
- package/dist/web-Cmnvk9v0.js +2203 -0
- package/dist/web-Cv2KnTnL.js +63 -0
- package/dist/webhooks-cli-B6y89Pj_.js +319 -0
- package/dist/webhooks-cli-BDzHON4w.js +316 -0
- package/dist/whatsapp-actions-C_5MwVxM.js +45 -0
- package/dist/whatsapp-actions-hgYA12To.js +53 -0
- package/dist/whatsapp-actions-zTiVOoOV.js +49 -0
- package/dist/widearea-dns-BeIdnISJ.js +127 -0
- package/dist/widearea-dns-CF1gxpJ-.js +127 -0
- package/dist/workspace-DLna1IxR.js +649 -0
- package/dist/ws-log-Q4wO1Ztb.js +267 -0
- package/dist/ws-log-xF0kxDzp.js +267 -0
- package/package.json +1 -2
- package/dist/accounts-Cc5E4IDO.js +0 -260
- package/dist/accounts-CcVrwKqv.js +0 -259
- package/dist/acp-cli-DvphOKuh.js +0 -1081
- package/dist/acp-cli-p28pQ65a.js +0 -1084
- package/dist/agent-Cj7uDJaZ.js +0 -725
- package/dist/agent-Cuj9-2sT.js +0 -725
- package/dist/agent-events-BEBQsyE5.js +0 -182
- package/dist/agent-scope-BVf4aSwY.js +0 -112
- package/dist/agent-scope-OZi7lb8S.js +0 -452
- package/dist/agent-scope-V1bi9OYL.js +0 -452
- package/dist/agents-BUWqn_Ui.js +0 -774
- package/dist/agents.config-Dvo2ULxs.js +0 -182
- package/dist/agents.config-d6H0_3oj.js +0 -182
- package/dist/argv-DqUHKf0o.js +0 -73
- package/dist/audit-C6okOOSh.js +0 -2401
- package/dist/audit-VWjIdwC7.js +0 -2401
- package/dist/auth-91o2YM96.js +0 -648
- package/dist/auth-choice-CAmACV13.js +0 -2681
- package/dist/auth-choice-p3SeHPj2.js +0 -2681
- package/dist/auth-health-B_jXrWe6.js +0 -149
- package/dist/auth-health-DCicUKYR.js +0 -149
- package/dist/auth-lZ26wsbN.js +0 -639
- package/dist/auth-profiles-CCDD56dU.js +0 -1564
- package/dist/auth-profiles-DxI8L7bs.js +0 -2689
- package/dist/banner-Cohn04J6.js +0 -294
- package/dist/browser-cli-DANzjztE.js +0 -1676
- package/dist/browser-cli-WjsVH741.js +0 -1679
- package/dist/call-BAHvlu2G.js +0 -282
- package/dist/call-Ct7EGP_L.js +0 -282
- package/dist/catalog-BAayBt1L.js +0 -185
- package/dist/catalog-BNsf97BM.js +0 -185
- package/dist/channel-options-Dx9nPlX8.js +0 -33
- package/dist/channel-options-ZdvXrTGs.js +0 -32
- package/dist/channel-selection-CujyiWGM.js +0 -51
- package/dist/channel-selection-DfGpCyh2.js +0 -51
- package/dist/channel-web-CC0hkgkR.js +0 -2162
- package/dist/channels-cli-D7lNBpIb.js +0 -1304
- package/dist/channels-cli-DUPG8WDv.js +0 -1306
- package/dist/channels-status-issues-DBc1pU_R.js +0 -18
- package/dist/channels-status-issues-DjO9MHIG.js +0 -18
- package/dist/chrome-Bi6iZ5sG.js +0 -1601
- package/dist/chrome-DNSv7Cpy.js +0 -1629
- package/dist/chrome-DScZx4Lk.js +0 -1601
- package/dist/chunk-mxPVo000.js +0 -348
- package/dist/clack-prompter-B0kl7shw.js +0 -92
- package/dist/clack-prompter-B1YxZdRy.js +0 -92
- package/dist/cli-CfHUkOD0.js +0 -101
- package/dist/cli-ClMrIh6l.js +0 -99
- package/dist/cli-session-BkPTd9Pk.js +0 -5463
- package/dist/cli-session-Dd8DKb5a.js +0 -5408
- package/dist/client-C1avc0vD.js +0 -1692
- package/dist/client-CC94YZrT.js +0 -1692
- package/dist/clipboard-B2fBy8tG.js +0 -31
- package/dist/clipboard-BbGnZskJ.js +0 -31
- package/dist/command-format-Clp46jkj.js +0 -38
- package/dist/command-format-DELazozB.js +0 -52
- package/dist/command-format-SkzzRqR1.js +0 -52
- package/dist/command-registry-DZ4hkmA0.js +0 -248
- package/dist/commands-DtYZJSPn.js +0 -568
- package/dist/commands-Dujk1JmY.js +0 -568
- package/dist/commands-registry-Bd0xbvwG.js +0 -766
- package/dist/commands-registry-DYfRSVF3.js +0 -766
- package/dist/common-D6bu0zHC.js +0 -287
- package/dist/common-zW9Y2P1B.js +0 -287
- package/dist/completion-cli-tSe7Pmqm.js +0 -431
- package/dist/completion-cli-vn4IScs5.js +0 -432
- package/dist/config-C8rUDJXY.js +0 -5704
- package/dist/config-CLZ_XGVw.js +0 -6523
- package/dist/config-SY8M0kM_.js +0 -5705
- package/dist/config-cli-1V7D2Wsw.js +0 -247
- package/dist/config-cli-CjWEC81L.js +0 -244
- package/dist/config-guard-BW2gpKj_.js +0 -93
- package/dist/config-guard-BvxuzHpo.js +0 -76
- package/dist/config-sync-CoIIbEOe.js +0 -91
- package/dist/config-sync-DvAttep0.js +0 -91
- package/dist/configure-Bf0oupCE.js +0 -959
- package/dist/configure-DRM-7zFf.js +0 -960
- package/dist/context-D5iEFzv9.js +0 -60
- package/dist/control-service-C8m8F9pr.js +0 -72
- package/dist/control-service-DKotCWCg.js +0 -72
- package/dist/cron-cli-DB_FLYHD.js +0 -448
- package/dist/cron-cli-bxm5lrrO.js +0 -451
- package/dist/daemon-cli-1LsOnICv.js +0 -566
- package/dist/daemon-cli-CC2NrJ7a.js +0 -565
- package/dist/daemon-runtime-BXZhtBL9.js +0 -460
- package/dist/daemon-runtime-DW4USC7r.js +0 -460
- package/dist/deliver-B4HuPwJA.js +0 -1162
- package/dist/deliver-LiY5oL52.js +0 -1097
- package/dist/deliver-xrmk7xjh.js +0 -1097
- package/dist/delivery-queue-TnQykYsg.js +0 -220
- package/dist/deps-CMMOiOsF.js +0 -42
- package/dist/devices-cli-Be5he2SA.js +0 -195
- package/dist/devices-cli-z6ecoFe9.js +0 -198
- package/dist/diagnostics-Dj75aEHN.js +0 -35
- package/dist/diagnostics-DlIw6fqD.js +0 -35
- package/dist/directory-cli-CEy-0nxj.js +0 -243
- package/dist/directory-cli-DpzKcigr.js +0 -246
- package/dist/dispatcher-10Shiuz3.js +0 -100
- package/dist/dispatcher-3Jae6AiW.js +0 -100
- package/dist/dns-cli-Bat1pkc-.js +0 -200
- package/dist/dns-cli-NohNyEo0.js +0 -197
- package/dist/dock-DbxBBv30.js +0 -753
- package/dist/dock-cPBY4qGl.js +0 -753
- package/dist/docs-cli-BWp6p-Tq.js +0 -161
- package/dist/docs-cli-x22FnZfL.js +0 -159
- package/dist/doctor-BrT5m_on.js +0 -1815
- package/dist/doctor-Pp2HVnjM.js +0 -1813
- package/dist/doctor-completion-DNTimX9o.js +0 -92
- package/dist/doctor-completion-ylN9QAJ6.js +0 -92
- package/dist/doctor-config-flow-D1w3700T.js +0 -1232
- package/dist/doctor-config-flow-Dq50iE1R.js +0 -1232
- package/dist/engine-B9avUJL5.js +0 -563
- package/dist/engine-BiUQ25D4.js +0 -563
- package/dist/env-0lJfCPsw.js +0 -32
- package/dist/exec-BenD3A5l.js +0 -1167
- package/dist/exec-Bv3pyjeM.js +0 -255
- package/dist/exec-approvals-CdLmKX2R.js +0 -1221
- package/dist/exec-approvals-cli-DXfV6G8H.js +0 -368
- package/dist/exec-approvals-cli-J2cZs10o.js +0 -371
- package/dist/frontmatter-YijVi0FQ.js +0 -204
- package/dist/gateway-cli-DOAbA0pc.js +0 -19972
- package/dist/gateway-cli-QpWtBhQy.js +0 -19971
- package/dist/gateway-rpc-DJKBil9s.js +0 -28
- package/dist/gateway-rpc-DVterpLP.js +0 -28
- package/dist/github-copilot-auth-4IUFp669.js +0 -1418
- package/dist/github-copilot-auth-C9E0IROs.js +0 -1418
- package/dist/gmail-setup-utils-BPo_LkKI.js +0 -428
- package/dist/gmail-setup-utils-D3Yqgor7.js +0 -428
- package/dist/health-BeZnqp6m.js +0 -1258
- package/dist/health-Cn2OoVWZ.js +0 -1253
- package/dist/health-format-CdP99j3Y.js +0 -208
- package/dist/health-format-JEChH08S.js +0 -208
- package/dist/heartbeat-visibility-BL3WAchI.js +0 -98
- package/dist/heartbeat-visibility-CQ9QimI7.js +0 -98
- package/dist/help-format-Dl4bsrLI.js +0 -17
- package/dist/helpers-ZKNRexvX.js +0 -10
- package/dist/hooks-cli-D99hXt7K.js +0 -991
- package/dist/hooks-cli-DMB8RiEO.js +0 -993
- package/dist/hooks-status-B-e96dZj.js +0 -356
- package/dist/hooks-status-C_9sE0ox.js +0 -356
- package/dist/image-ops-Dlt3T7th.js +0 -541
- package/dist/image-ops-omlvdfah.js +0 -541
- package/dist/init-Bm04RagW.js +0 -122
- package/dist/init-CaJBf4p1.js +0 -122
- package/dist/installs-C2iMRBVz.js +0 -383
- package/dist/installs-D-cPGdCw.js +0 -383
- package/dist/ipv4-Bf7NS3QU.js +0 -1964
- package/dist/ipv4-wWNs8IH_.js +0 -1964
- package/dist/lanes-CNxj3tit.js +0 -232
- package/dist/lifecycle-core-B_7XRcvF.js +0 -388
- package/dist/lifecycle-core-By83PVAK.js +0 -387
- package/dist/links-BfjHVTB_.js +0 -15
- package/dist/links-DPGe0OHw.js +0 -15
- package/dist/logging-DB6BQmhi.js +0 -15
- package/dist/logging-mcb66J0p.js +0 -15
- package/dist/login-BDCg6D0N.js +0 -61
- package/dist/login-BDfnbjnZ.js +0 -59
- package/dist/login-BqH1itcg.js +0 -61
- package/dist/login-qr-CyOw3R4r.js +0 -321
- package/dist/login-qr-D8ECtb72.js +0 -323
- package/dist/login-qr-RnR7e4Bw.js +0 -326
- package/dist/logs-cli--j89L74J.js +0 -245
- package/dist/logs-cli-DpEMg_Gq.js +0 -242
- package/dist/manager-B4OyvcxT.js +0 -3244
- package/dist/manager-Cqc1CeH7.js +0 -3246
- package/dist/manager-DUyQPFvj.js +0 -3244
- package/dist/manifest-registry-CW1zCyRF.js +0 -748
- package/dist/manifest-registry-D4lM2RdV.js +0 -748
- package/dist/markdown-tables-BT1X6jqH.js +0 -347
- package/dist/markdown-tables-DHgOK2vI.js +0 -348
- package/dist/media-THyainiE.js +0 -1342
- package/dist/memory-cli-BKocCWXM.js +0 -868
- package/dist/memory-cli-Jmma-xI_.js +0 -869
- package/dist/message-channel-dSTVVCyX.js +0 -110
- package/dist/migrate-BR6iAIjO.js +0 -157
- package/dist/migrate-D0EcMs0f.js +0 -157
- package/dist/model-selection-YcSr9CgC.js +0 -2691
- package/dist/models-1vUQBVfw.js +0 -2510
- package/dist/models-cli-BK3BwUhL.js +0 -2739
- package/dist/models-cli-DECrM8oA.js +0 -258
- package/dist/net-B5lXhYLV.js +0 -218
- package/dist/node-cli-cLHUNpPD.js +0 -1319
- package/dist/node-cli-fO7Y132S.js +0 -1322
- package/dist/node-service-BFxHJsno.js +0 -67
- package/dist/node-service-DUnan4uK.js +0 -67
- package/dist/nodes-cli-BCq35E6N.js +0 -1200
- package/dist/nodes-cli-vD7MwAKP.js +0 -1197
- package/dist/nodes-screen-1YiLkqr5.js +0 -234
- package/dist/nodes-screen-DZeD8hE5.js +0 -234
- package/dist/note-Bi8Wb8DV.js +0 -73
- package/dist/note-uiuPxhyX.js +0 -73
- package/dist/npm-registry-spec-B-XIShkB.js +0 -351
- package/dist/npm-registry-spec-za3itb5Y.js +0 -351
- package/dist/onboard-Ds6w_sWo.js +0 -1165
- package/dist/onboard-SAVx3bp4.js +0 -1166
- package/dist/onboard-channels-Cg_EkBa4.js +0 -672
- package/dist/onboard-channels-D7NbA55V.js +0 -672
- package/dist/onboard-helpers-DO_hgZb9.js +0 -365
- package/dist/onboard-helpers-_XgJgeqh.js +0 -365
- package/dist/onboarding-3hLmDd0r.js +0 -911
- package/dist/onboarding-B4LKLsbU.js +0 -910
- package/dist/orchestrator-BKzmyBWy.js +0 -357
- package/dist/orchestrator-BN3QCz2s.js +0 -357
- package/dist/outbound-BgA9hNlP.js +0 -2062
- package/dist/outbound-CjdvVhUI.js +0 -214
- package/dist/outbound-DOGe6qb2.js +0 -214
- package/dist/outbound-send-deps-Du5aBpd7.js +0 -55
- package/dist/pairing-cli-2vnyg_Nd.js +0 -118
- package/dist/pairing-cli-BH1KQtNV.js +0 -121
- package/dist/pairing-store-DJz_9Gv0.js +0 -388
- package/dist/pairing-store-DmOzxcuk.js +0 -388
- package/dist/path-env-Bu6k0jDQ.js +0 -89
- package/dist/path-env-C0zQSjw8.js +0 -89
- package/dist/paths-BTc4nk-6.js +0 -126
- package/dist/paths-BgUi2Z2G.js +0 -54
- package/dist/paths-C6VCWKo3.js +0 -238
- package/dist/paths-CCxa0o9c.js +0 -222
- package/dist/paths-CxRf2rBG.js +0 -129
- package/dist/paths-hcX1Gqg5.js +0 -129
- package/dist/pi-auth-json-B68R7q7_.js +0 -82
- package/dist/pi-auth-json-CR0jXAgq.js +0 -78
- package/dist/pi-auth-json-ZYzi3nxs.js +0 -80
- package/dist/pi-model-discovery-Cxs4pvC2.js +0 -3
- package/dist/pi-tools.policy-D81U5xy0.js +0 -200
- package/dist/pi-tools.policy-DSHkkb5b.js +0 -200
- package/dist/plugin-auto-enable-CxF4bpDN.js +0 -282
- package/dist/plugin-auto-enable-jNaAeyEh.js +0 -282
- package/dist/plugin-registry-C7XWotZG.js +0 -32
- package/dist/plugin-registry-DcUCbGax.js +0 -32
- package/dist/plugins-B362e77G.js +0 -168
- package/dist/plugins-CmSUIUNi.js +0 -38
- package/dist/plugins-cli-BsCEnoQ7.js +0 -734
- package/dist/plugins-cli-QSIsMUG7.js +0 -736
- package/dist/polls-CItfB1H8.js +0 -1343
- package/dist/ports-BVLMN1Sr.js +0 -96
- package/dist/ports-CqLSlU6Z.js +0 -317
- package/dist/ports-D94CwCrv.js +0 -344
- package/dist/ports-D_NHthOz.js +0 -96
- package/dist/program-DkJHjI0R.js +0 -176
- package/dist/program-context-DnyGM2SC.js +0 -496
- package/dist/progress-Bek_GyWS.js +0 -133
- package/dist/prompt-style-lu0clOOE.js +0 -9
- package/dist/pw-ai-BLVMuSLv.js +0 -1867
- package/dist/pw-ai-DZJWEF_f.js +0 -1865
- package/dist/pw-ai-dzf-ptcn.js +0 -1868
- package/dist/qmd-manager-Cur_Ekn0.js +0 -937
- package/dist/qmd-manager-DNAUuwjK.js +0 -938
- package/dist/qmd-manager-DepEoASu.js +0 -935
- package/dist/register.agent-CSWvzOkR.js +0 -265
- package/dist/register.agent-UeH2NXmH.js +0 -1003
- package/dist/register.anima-DOdee0dh.js +0 -193
- package/dist/register.anima-HHDWsz6r.js +0 -193
- package/dist/register.configure-CSJFxdz9.js +0 -103
- package/dist/register.configure-D84Fvcz4.js +0 -101
- package/dist/register.maintenance-B3pvNbZb.js +0 -543
- package/dist/register.maintenance-BKVOwkw6.js +0 -543
- package/dist/register.message-BAO6CPl2.js +0 -657
- package/dist/register.message-OXoOKE_6.js +0 -660
- package/dist/register.onboard-BK_ixVmD.js +0 -170
- package/dist/register.onboard-cfCaPx6j.js +0 -170
- package/dist/register.setup-BGfDnzph.js +0 -175
- package/dist/register.setup-Y-Q74M-0.js +0 -175
- package/dist/register.status-health-sessions-CT14eitH.js +0 -142
- package/dist/register.status-health-sessions-TfZMzAUn.js +0 -313
- package/dist/register.subclis-BZwdlNHC.js +0 -255
- package/dist/reply-mlsExaZm.js +0 -32212
- package/dist/reply-prefix-B0CfR4bM.js +0 -100
- package/dist/reply-prefix-w4a39ybC.js +0 -100
- package/dist/reply-qalRISe_.js +0 -32212
- package/dist/routes-CENsHJyg.js +0 -1820
- package/dist/routes-DO0HqW2e.js +0 -1820
- package/dist/rpc-C0pjNhBi.js +0 -70
- package/dist/rpc-DZ44PIXE.js +0 -70
- package/dist/run-main-BMpKw8Mp.js +0 -371
- package/dist/runtime-guard-BSUFiAQV.js +0 -60
- package/dist/sandbox-BIGfMYEI.js +0 -858
- package/dist/sandbox-DxP3IpUP.js +0 -859
- package/dist/sandbox-cli-DtLGH8sL.js +0 -461
- package/dist/sandbox-cli-_Tg7lfJ_.js +0 -458
- package/dist/security-cli-BRwgbedo.js +0 -462
- package/dist/security-cli-D3bSuyZt.js +0 -465
- package/dist/server-context-49XFFxFg.js +0 -824
- package/dist/server-context-LrlgrZzS.js +0 -824
- package/dist/server-node-events-Dm52i7NW.js +0 -231
- package/dist/server-node-events-QX523UyF.js +0 -233
- package/dist/service-BNVpYcQe.js +0 -642
- package/dist/service-D56aMXUB.js +0 -642
- package/dist/service-audit-D0X_XAB2.js +0 -488
- package/dist/service-audit-qmf6XMmP.js +0 -488
- package/dist/session-CrQQLLhx.js +0 -179
- package/dist/session-LocsOOWJ.js +0 -181
- package/dist/session-Vlce2BAT.js +0 -181
- package/dist/session-cost-usage-BwiTZuKl.js +0 -600
- package/dist/session-cost-usage-DT9YNXTJ.js +0 -600
- package/dist/sessions-BfV53TbG.js +0 -1296
- package/dist/sessions-BimpX_km.js +0 -180
- package/dist/sessions-DcXpzig0.js +0 -1296
- package/dist/sessions-Wd18dukK.js +0 -2038
- package/dist/shared-Bsr69u_7.js +0 -77
- package/dist/shared-Cgly1vPb.js +0 -66
- package/dist/shared-JOo05hST.js +0 -66
- package/dist/shared-f7dvQsi7.js +0 -77
- package/dist/skill-scanner-CkaVLABv.js +0 -263
- package/dist/skills-B-G7UHOa.js +0 -808
- package/dist/skills-B5LQx4lT.js +0 -807
- package/dist/skills-cli-DUGe2ZWW.js +0 -286
- package/dist/skills-cli-DtOk0bvK.js +0 -289
- package/dist/skills-status-Clq9ZnYu.js +0 -166
- package/dist/skills-status-JQluhU-P.js +0 -166
- package/dist/sqlite-BukcjdJa.js +0 -321
- package/dist/sqlite-CGcOZZ0C.js +0 -368
- package/dist/sqlite-Ck6f9KWc.js +0 -453
- package/dist/start--xmSFepB.js +0 -372
- package/dist/start-BdlZbqrr.js +0 -371
- package/dist/status-BgoeFm6g.js +0 -2137
- package/dist/status-BjjDrUq7.js +0 -27
- package/dist/status-Ct0DgOZ-.js +0 -2132
- package/dist/status-RA_uNmK0.js +0 -27
- package/dist/status.update-BjOH3GlS.js +0 -79
- package/dist/status.update-DLU1qBf0.js +0 -79
- package/dist/subagent-registry-9RLdKxES.js +0 -2760
- package/dist/subagent-registry-Byuex3zp.js +0 -2759
- package/dist/subagent-registry-DOBunBYS.js +0 -14
- package/dist/subsystem-Dowf8fSU.js +0 -860
- package/dist/system-cli-C5oBpzni.js +0 -79
- package/dist/system-cli-DXNKD_Id.js +0 -82
- package/dist/systemd-BSrHDyeU.js +0 -452
- package/dist/systemd-By5xdSB4.js +0 -452
- package/dist/systemd-hints-BtjL_5Rh.js +0 -36
- package/dist/systemd-hints-sJmr6cjb.js +0 -36
- package/dist/systemd-linger-CTmV2Gci.js +0 -75
- package/dist/systemd-linger-CmyqQkeC.js +0 -75
- package/dist/table-BL0lJzsm.js +0 -279
- package/dist/table-DoiRPsn0.js +0 -279
- package/dist/timeout-CswI_K-U.js +0 -232
- package/dist/tokens-C-X7wDKj.js +0 -14
- package/dist/tokens-DkvqA72p.js +0 -14
- package/dist/trash-BJLK1vMn.js +0 -23
- package/dist/trash-_x5UZ94k.js +0 -23
- package/dist/tui-BHjxDFZC.js +0 -3894
- package/dist/tui-CgOocwN8.js +0 -3894
- package/dist/tui-cli-5ANH8dE5.js +0 -47
- package/dist/tui-cli-BQ4P-JW_.js +0 -50
- package/dist/update-LFgxHHPd.js +0 -317
- package/dist/update-TxptCqk7.js +0 -317
- package/dist/update-check-CWc7YXmc.js +0 -400
- package/dist/update-check-IhlWaui6.js +0 -400
- package/dist/update-cli-PtXU62w7.js +0 -1105
- package/dist/update-cli-Va0EtETG.js +0 -1105
- package/dist/update-runner-BLeKFkiB.js +0 -894
- package/dist/update-runner-Iuzpc-_y.js +0 -894
- package/dist/usage-ApGvBLVg.js +0 -4516
- package/dist/utils-Bsw__U-F.js +0 -243
- package/dist/web-B6_Ky60G.js +0 -63
- package/dist/web-EZLQEWXY.js +0 -46842
- package/dist/web-pec8YJUX.js +0 -2203
- package/dist/webhooks-cli-BYQKTHTp.js +0 -319
- package/dist/webhooks-cli-C2_xtsUQ.js +0 -316
- package/dist/whatsapp-actions-C72VCq8f.js +0 -49
- package/dist/whatsapp-actions-Ck9Uv0Nw.js +0 -45
- package/dist/whatsapp-actions-D0reTj2k.js +0 -53
- package/dist/widearea-dns-B6ocX23x.js +0 -127
- package/dist/widearea-dns-NsEUNYwz.js +0 -127
- package/dist/workspace-Dcfoy5JJ.js +0 -649
- package/dist/ws-log-N8R5MvGE.js +0 -267
- package/dist/ws-log-gwFxPxj5.js +0 -267
- /package/dist/{auto-update-CUeF99gI.js → auto-update-CpF0fycd.js} +0 -0
- /package/dist/{auto-update-cgkp9ZTJ.js → auto-update-DNWdO7uF.js} +0 -0
- /package/dist/{brew-CVZkr0GU.js → brew-nqf_MiE4.js} +0 -0
- /package/dist/{budget-DxYQSekw.js → budget-CPedI-qW.js} +0 -0
- /package/dist/{budget-BWBp8Res.js → budget-CRpvqDRX.js} +0 -0
- /package/dist/{cli-utils-DtAxdCte.js → cli-utils-C1YHVD4o.js} +0 -0
- /package/dist/{command-options-CSbuuqHr.js → command-options-BbponVnw.js} +0 -0
- /package/dist/{command-options-Cp1tf96a.js → command-options-s0gnvXnS.js} +0 -0
- /package/dist/{constants-O8yBqCBv.js → constants-Dhb6zSIV.js} +0 -0
- /package/dist/{dangerous-tools-5ObDWy1N.js → dangerous-tools-DGTtJ_JR.js} +0 -0
- /package/dist/{dangerous-tools-Jwr7jqNw.js → dangerous-tools-DxrfTOfT.js} +0 -0
- /package/dist/{delivery-queue-B6IHz4Ry.js → delivery-queue-Bxm0nzw7.js} +0 -0
- /package/dist/{display-BDOsXu8F.js → display-Jy3UdGzA.js} +0 -0
- /package/dist/{errors-CHow2wtt.js → errors-CKaCqKga.js} +0 -0
- /package/dist/{exec-BizYYQgP.js → exec-DDmuVVNq.js} +0 -0
- /package/dist/{format-Mq6iU0_5.js → format-ByEjgyTF.js} +0 -0
- /package/dist/{format-duration-DhWzz_5b.js → format-duration-Aaj5tjJd.js} +0 -0
- /package/dist/{format-relative-C6kUHuOj.js → format-relative-79_Y1n2Y.js} +0 -0
- /package/dist/{help-format-DUBI91Ti.js → help-format-BMKzarov.js} +0 -0
- /package/dist/{helpers-eJFa4K6r.js → helpers-DpEB9Mh0.js} +0 -0
- /package/dist/{helpers-DLgbkcEn.js → helpers-FMld9sBT.js} +0 -0
- /package/dist/{input-provenance-DJBdpeKk.js → input-provenance-Cy_KnBlP.js} +0 -0
- /package/dist/{is-main-Dt9DTcH1.js → is-main-yjaVwMtJ.js} +0 -0
- /package/dist/{loader-l2OBdJ8x.js → loader-Br7Vr0zn.js} +0 -0
- /package/dist/{loader-BoYxRfcW.js → loader-CkmOrXcC.js} +0 -0
- /package/dist/{logging-BdnOSVPD.js → logging-CY-Q5cwf.js} +0 -0
- /package/dist/{message-channel-w4F2b2F6.js → message-channel-dua8OOGJ.js} +0 -0
- /package/dist/{mime-B1ZoR53M.js → mime-CBg4KybI.js} +0 -0
- /package/dist/{model-param-b-DPwyNGn8.js → model-param-b-DW9f0NN8.js} +0 -0
- /package/dist/{node-match-8XZnaid6.js → node-match-BV8bTBd4.js} +0 -0
- /package/dist/{normalize-GDK8JTNW.js → normalize-_lmlBOW9.js} +0 -0
- /package/dist/{openclaw-root-C85WMnVV.js → openclaw-root-JPvmPTf7.js} +0 -0
- /package/dist/{outbound-send-deps-ANnAhImn.js → outbound-send-deps-BfUvuWGa.js} +0 -0
- /package/dist/{parse-6-2MDhdT.js → parse-CZRwKocn.js} +0 -0
- /package/dist/{parse-log-line-Bqh1SSzC.js → parse-log-line-CvrZEK6A.js} +0 -0
- /package/dist/{parse-log-line-DUZCjXbl.js → parse-log-line-mLdat0AH.js} +0 -0
- /package/dist/{parse-port-BKB9Exlg.js → parse-port-BSOOdo7I.js} +0 -0
- /package/dist/{parse-port-DrfvwwiL.js → parse-port-Y0NK62x1.js} +0 -0
- /package/dist/{parse-timeout-Di_tcEmi.js → parse-timeout-DVPQ3n9j.js} +0 -0
- /package/dist/{paths-DcVEkYX5.js → paths-DHjlJ6cn.js} +0 -0
- /package/dist/{pi-model-discovery-DsRqYJLy.js → pi-model-discovery-DzEIEgHL.js} +0 -0
- /package/dist/{plugins-CDJw924T.js → plugins-D6PBOdkn.js} +0 -0
- /package/dist/{program-context-Bvn8046-.js → program-context-Q1hkT73c.js} +0 -0
- /package/dist/{progress-CbZ2D53A.js → progress-C9Ha1NJh.js} +0 -0
- /package/dist/{prompt-style-DKy6qQxR.js → prompt-style-DQi8j03a.js} +0 -0
- /package/dist/{prompts-BI__va99.js → prompts-BEHxUC3w.js} +0 -0
- /package/dist/{prompts-_dDWkCAz.js → prompts-CSOhuiqe.js} +0 -0
- /package/dist/{queue-D_u34pbL.js → queue-BJGo7kAB.js} +0 -0
- /package/dist/{queue-PG591iID.js → queue-DYgUbdoq.js} +0 -0
- /package/dist/{redact-ClVwO7Nn.js → redact-CyKvdFrg.js} +0 -0
- /package/dist/{registry-Bs_DJK9E.js → registry-C5MAYD4V.js} +0 -0
- /package/dist/{registry-D_zlP1U-.js → registry-CRrXXVs0.js} +0 -0
- /package/dist/{requirements-BzZxj2Wu.js → requirements-CGkxTCu4.js} +0 -0
- /package/dist/{requirements-DIW1svgA.js → requirements-CIDaOcbO.js} +0 -0
- /package/dist/{runtime-guard-DeOXA_86.js → runtime-guard-nL3Lp8T-.js} +0 -0
- /package/dist/{secret-equal-Dghy3xsA.js → secret-equal-DJpmLXlG.js} +0 -0
- /package/dist/{send-BhAfdGII.js → send-CTcxgDDU.js} +0 -0
- /package/dist/{send-ga9udK1_.js → send-DPezUR3-.js} +0 -0
- /package/dist/{send-C2t9xpXI.js → send-DZQTaG7-.js} +0 -0
- /package/dist/{send-DigO-i9j.js → send-VDff2gra.js} +0 -0
- /package/dist/{send-Dz2BDHll.js → send-bgQNV8d1.js} +0 -0
- /package/dist/{session-key-BGiG_JcT.js → session-key-CQT-NR6w.js} +0 -0
- /package/dist/{shell-argv-CAq1mLa2.js → shell-argv-n9IueeJQ.js} +0 -0
- /package/dist/{skill-scanner-Coo4QoCd.js → skill-scanner-o6NgVMD9.js} +0 -0
- /package/dist/{status-CMnlcBVc.js → status-C53kTIXF.js} +0 -0
- /package/dist/{status-tDZPwewW.js → status-CZDDA_Sy.js} +0 -0
- /package/dist/{system-run-command-X9lDJIy0.js → system-run-command-BCjUffN9.js} +0 -0
- /package/dist/{system-run-command-DGk7dwQP.js → system-run-command-CqAqKL9K.js} +0 -0
- /package/dist/{tailnet-CuiNECdL.js → tailnet-Ciwjv243.js} +0 -0
- /package/dist/{templates-CeYJjVzw.js → templates-37RKpACb.js} +0 -0
- /package/dist/{templates-I3Z0xplD.js → templates-DPalk30o.js} +0 -0
- /package/dist/{thinking-BXEswx1X.js → thinking-2hxwmvTl.js} +0 -0
- /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
- /package/dist/{transcript-tools-DuyYOkUq.js → transcript-tools-D4Lbxlka.js} +0 -0
- /package/dist/{usage-format-BAirWUSO.js → usage-format-6Uar63S0.js} +0 -0
- /package/dist/{utils-C9sj30YY.js → utils-DT8uXjFS.js} +0 -0
- /package/dist/{wsl-CqyuRvtM.js → wsl-CrPvx2kZ.js} +0 -0
- /package/dist/{wsl-ymJYvc9Q.js → wsl-UvJ5dHah.js} +0 -0
|
@@ -0,0 +1,911 @@
|
|
|
1
|
+
import { n as DEFAULT_GATEWAY_PORT, u as resolveGatewayPort } from "./paths-BMuHNFxg.js";
|
|
2
|
+
import { d as restoreTerminalState, u as defaultRuntime } from "./subsystem-DfKstnEK.js";
|
|
3
|
+
import { b as resolveUserPath, g as pathExists } from "./utils-DZ8pnOD5.js";
|
|
4
|
+
import { c as resolveDefaultAgentId, p as DEFAULT_BOOTSTRAP_FILENAME, s as resolveAgentWorkspaceDir } from "./agent-scope-CPphqq-U.js";
|
|
5
|
+
import { mt as ensureAuthProfileStore } from "./model-selection-Cqt6aJ0G.js";
|
|
6
|
+
import { r as resolveCliName, t as formatCliCommand } from "./command-format-CVL4K5cj.js";
|
|
7
|
+
import { l as writeConfigFile, o as readConfigFileSnapshot } from "./config-DaqbUdkI.js";
|
|
8
|
+
import { f as findTailscaleBinary } from "./auth-BNZsOHGF.js";
|
|
9
|
+
import { n as listChannelPlugins } from "./plugins-DhcGAPDB.js";
|
|
10
|
+
import { t as WizardCancelledError } from "./prompts-CSOhuiqe.js";
|
|
11
|
+
import { n as setupChannels } from "./onboard-channels-C4iSfFXR.js";
|
|
12
|
+
import { r as installCompletion } from "./completion-cli-DMQgiObF.js";
|
|
13
|
+
import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-C0tz7VAC.js";
|
|
14
|
+
import { _ as summarizeExistingConfig, a as ensureWorkspaceAndSessions, c as handleReset, d as openUrl, f as printWizardHeader, h as resolveControlUiLinks, i as detectBrowserOpenSupport, m as randomToken, n as applyWizardMetadata, o as formatControlUiSshHint, p as probeGatewayReachable, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as validateGatewayPasswordInput, y as waitForGatewayReachable } from "./onboard-helpers-Dgh26hgP.js";
|
|
15
|
+
import { r as isSystemdUserServiceAvailable } from "./systemd-B43AvOGx.js";
|
|
16
|
+
import { t as resolveGatewayService } from "./service-DxLxBhaU.js";
|
|
17
|
+
import { c as promptCustomApiConfig, f as applyPrimaryModel, i as promptRemoteGatewayConfig, n as setupSkills, p as promptDefaultModel, t as validateIPv4AddressInput } from "./ipv4-DSOUVx0i.js";
|
|
18
|
+
import { r as healthCommand } from "./health-Bm8ZTvC3.js";
|
|
19
|
+
import { n as ensureControlUiAssetsBuilt, t as formatHealthCheckFailure } from "./health-format-BksT6F68.js";
|
|
20
|
+
import { n as warnIfModelConfigLooksOff, r as applyAuthChoice, t as resolvePreferredProviderForAuthChoice, u as promptAuthChoiceGrouped } from "./auth-choice-5VnaGMD-.js";
|
|
21
|
+
import { t as buildWorkspaceHookStatus } from "./hooks-status-DE07n5RC.js";
|
|
22
|
+
import { n as logConfigUpdated } from "./logging-BIeRw0WR.js";
|
|
23
|
+
import { t as runTui } from "./tui-BHgBWhHE.js";
|
|
24
|
+
import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-DwjqdEcK.js";
|
|
25
|
+
import os from "node:os";
|
|
26
|
+
import path from "node:path";
|
|
27
|
+
import fs from "node:fs/promises";
|
|
28
|
+
|
|
29
|
+
//#region src/commands/onboard-hooks.ts
|
|
30
|
+
async function setupInternalHooks(cfg, runtime, prompter) {
|
|
31
|
+
await prompter.note([
|
|
32
|
+
"Hooks let you automate actions when agent commands are issued.",
|
|
33
|
+
"Example: Save session context to memory when you issue /new.",
|
|
34
|
+
"",
|
|
35
|
+
"Learn more: https://docs.anima.ai/automation/hooks"
|
|
36
|
+
].join("\n"), "Hooks");
|
|
37
|
+
const eligibleHooks = buildWorkspaceHookStatus(resolveAgentWorkspaceDir(cfg, resolveDefaultAgentId(cfg)), { config: cfg }).hooks.filter((h) => h.eligible);
|
|
38
|
+
if (eligibleHooks.length === 0) {
|
|
39
|
+
await prompter.note("No eligible hooks found. You can configure hooks later in your config.", "No Hooks Available");
|
|
40
|
+
return cfg;
|
|
41
|
+
}
|
|
42
|
+
const selected = (await prompter.multiselect({
|
|
43
|
+
message: "Enable hooks?",
|
|
44
|
+
options: [{
|
|
45
|
+
value: "__skip__",
|
|
46
|
+
label: "Skip for now"
|
|
47
|
+
}, ...eligibleHooks.map((hook) => ({
|
|
48
|
+
value: hook.name,
|
|
49
|
+
label: `${hook.emoji ?? "🔗"} ${hook.name}`,
|
|
50
|
+
hint: hook.description
|
|
51
|
+
}))]
|
|
52
|
+
})).filter((name) => name !== "__skip__");
|
|
53
|
+
if (selected.length === 0) return cfg;
|
|
54
|
+
const entries = { ...cfg.hooks?.internal?.entries };
|
|
55
|
+
for (const name of selected) entries[name] = { enabled: true };
|
|
56
|
+
const next = {
|
|
57
|
+
...cfg,
|
|
58
|
+
hooks: {
|
|
59
|
+
...cfg.hooks,
|
|
60
|
+
internal: {
|
|
61
|
+
enabled: true,
|
|
62
|
+
entries
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
await prompter.note([
|
|
67
|
+
`Enabled ${selected.length} hook${selected.length > 1 ? "s" : ""}: ${selected.join(", ")}`,
|
|
68
|
+
"",
|
|
69
|
+
"You can manage hooks later with:",
|
|
70
|
+
` ${formatCliCommand("anima hooks list")}`,
|
|
71
|
+
` ${formatCliCommand("anima hooks enable <name>")}`,
|
|
72
|
+
` ${formatCliCommand("anima hooks disable <name>")}`
|
|
73
|
+
].join("\n"), "Hooks Configured");
|
|
74
|
+
return next;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
//#region src/wizard/onboarding.completion.ts
|
|
79
|
+
async function resolveProfileHint(shell) {
|
|
80
|
+
const home = process.env.HOME || os.homedir();
|
|
81
|
+
if (shell === "zsh") return "~/.zshrc";
|
|
82
|
+
if (shell === "bash") return await pathExists(path.join(home, ".bashrc")) ? "~/.bashrc" : "~/.bash_profile";
|
|
83
|
+
if (shell === "fish") return "~/.config/fish/config.fish";
|
|
84
|
+
return "$PROFILE";
|
|
85
|
+
}
|
|
86
|
+
function formatReloadHint(shell, profileHint) {
|
|
87
|
+
if (shell === "powershell") return "Restart your shell (or reload your PowerShell profile).";
|
|
88
|
+
return `Restart your shell or run: source ${profileHint}`;
|
|
89
|
+
}
|
|
90
|
+
async function setupOnboardingShellCompletion(params) {
|
|
91
|
+
const deps = {
|
|
92
|
+
resolveCliName,
|
|
93
|
+
checkShellCompletionStatus,
|
|
94
|
+
ensureCompletionCacheExists,
|
|
95
|
+
installCompletion,
|
|
96
|
+
...params.deps
|
|
97
|
+
};
|
|
98
|
+
const cliName = deps.resolveCliName();
|
|
99
|
+
const completionStatus = await deps.checkShellCompletionStatus(cliName);
|
|
100
|
+
if (completionStatus.usesSlowPattern) {
|
|
101
|
+
if (await deps.ensureCompletionCacheExists(cliName)) await deps.installCompletion(completionStatus.shell, true, cliName);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (completionStatus.profileInstalled && !completionStatus.cacheExists) {
|
|
105
|
+
await deps.ensureCompletionCacheExists(cliName);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!completionStatus.profileInstalled) {
|
|
109
|
+
if (!(params.flow === "quickstart" ? true : await params.prompter.confirm({
|
|
110
|
+
message: `Enable ${completionStatus.shell} shell completion for ${cliName}?`,
|
|
111
|
+
initialValue: true
|
|
112
|
+
}))) return;
|
|
113
|
+
if (!await deps.ensureCompletionCacheExists(cliName)) {
|
|
114
|
+
await params.prompter.note(`Failed to generate completion cache. Run \`${cliName} completion --install\` later.`, "Shell completion");
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
await deps.installCompletion(completionStatus.shell, true, cliName);
|
|
118
|
+
const profileHint = await resolveProfileHint(completionStatus.shell);
|
|
119
|
+
await params.prompter.note(`Shell completion installed. ${formatReloadHint(completionStatus.shell, profileHint)}`, "Shell completion");
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
//#endregion
|
|
124
|
+
//#region src/wizard/onboarding.finalize.ts
|
|
125
|
+
async function finalizeOnboardingWizard(options) {
|
|
126
|
+
const { flow, opts, baseConfig, nextConfig, settings, prompter, runtime } = options;
|
|
127
|
+
const withWizardProgress = async (label, options, work) => {
|
|
128
|
+
const progress = prompter.progress(label);
|
|
129
|
+
try {
|
|
130
|
+
return await work(progress);
|
|
131
|
+
} finally {
|
|
132
|
+
progress.stop(options.doneMessage);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const systemdAvailable = process.platform === "linux" ? await isSystemdUserServiceAvailable() : true;
|
|
136
|
+
if (process.platform === "linux" && !systemdAvailable) await prompter.note("Systemd user services are unavailable. Skipping lingering checks and service install.", "Systemd");
|
|
137
|
+
if (process.platform === "linux" && systemdAvailable) {
|
|
138
|
+
const { ensureSystemdUserLingerInteractive } = await import("./systemd-linger-Dzyxqsod.js").then((n) => n.r);
|
|
139
|
+
await ensureSystemdUserLingerInteractive({
|
|
140
|
+
runtime,
|
|
141
|
+
prompter: {
|
|
142
|
+
confirm: prompter.confirm,
|
|
143
|
+
note: prompter.note
|
|
144
|
+
},
|
|
145
|
+
reason: "Linux installs use a systemd user service by default. Without lingering, systemd stops the user session on logout/idle and kills the Gateway.",
|
|
146
|
+
requireConfirm: false
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
const explicitInstallDaemon = typeof opts.installDaemon === "boolean" ? opts.installDaemon : void 0;
|
|
150
|
+
let installDaemon;
|
|
151
|
+
if (explicitInstallDaemon !== void 0) installDaemon = explicitInstallDaemon;
|
|
152
|
+
else if (process.platform === "linux" && !systemdAvailable) installDaemon = false;
|
|
153
|
+
else if (flow === "quickstart") installDaemon = true;
|
|
154
|
+
else installDaemon = await prompter.confirm({
|
|
155
|
+
message: "Install Gateway service (recommended)",
|
|
156
|
+
initialValue: true
|
|
157
|
+
});
|
|
158
|
+
if (process.platform === "linux" && !systemdAvailable && installDaemon) {
|
|
159
|
+
await prompter.note("Systemd user services are unavailable; skipping service install. Use your container supervisor or `docker compose up -d`.", "Gateway service");
|
|
160
|
+
installDaemon = false;
|
|
161
|
+
}
|
|
162
|
+
if (installDaemon) {
|
|
163
|
+
const daemonRuntime = flow === "quickstart" ? DEFAULT_GATEWAY_DAEMON_RUNTIME : await prompter.select({
|
|
164
|
+
message: "Gateway service runtime",
|
|
165
|
+
options: GATEWAY_DAEMON_RUNTIME_OPTIONS,
|
|
166
|
+
initialValue: opts.daemonRuntime ?? DEFAULT_GATEWAY_DAEMON_RUNTIME
|
|
167
|
+
});
|
|
168
|
+
if (flow === "quickstart") await prompter.note("QuickStart uses Node for the Gateway service (stable + supported).", "Gateway service runtime");
|
|
169
|
+
const service = resolveGatewayService();
|
|
170
|
+
const loaded = await service.isLoaded({ env: process.env });
|
|
171
|
+
if (loaded) {
|
|
172
|
+
const action = await prompter.select({
|
|
173
|
+
message: "Gateway service already installed",
|
|
174
|
+
options: [
|
|
175
|
+
{
|
|
176
|
+
value: "restart",
|
|
177
|
+
label: "Restart"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
value: "reinstall",
|
|
181
|
+
label: "Reinstall"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
value: "skip",
|
|
185
|
+
label: "Skip"
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
});
|
|
189
|
+
if (action === "restart") await withWizardProgress("Gateway service", { doneMessage: "Gateway service restarted." }, async (progress) => {
|
|
190
|
+
progress.update("Restarting Gateway service…");
|
|
191
|
+
await service.restart({
|
|
192
|
+
env: process.env,
|
|
193
|
+
stdout: process.stdout
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
else if (action === "reinstall") await withWizardProgress("Gateway service", { doneMessage: "Gateway service uninstalled." }, async (progress) => {
|
|
197
|
+
progress.update("Uninstalling Gateway service…");
|
|
198
|
+
await service.uninstall({
|
|
199
|
+
env: process.env,
|
|
200
|
+
stdout: process.stdout
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
if (!loaded || loaded && !await service.isLoaded({ env: process.env })) {
|
|
205
|
+
const progress = prompter.progress("Gateway service");
|
|
206
|
+
let installError = null;
|
|
207
|
+
try {
|
|
208
|
+
progress.update("Preparing Gateway service…");
|
|
209
|
+
const { programArguments, workingDirectory, environment } = await buildGatewayInstallPlan({
|
|
210
|
+
env: process.env,
|
|
211
|
+
port: settings.port,
|
|
212
|
+
token: settings.gatewayToken,
|
|
213
|
+
runtime: daemonRuntime,
|
|
214
|
+
warn: (message, title) => prompter.note(message, title),
|
|
215
|
+
config: nextConfig
|
|
216
|
+
});
|
|
217
|
+
progress.update("Installing Gateway service…");
|
|
218
|
+
await service.install({
|
|
219
|
+
env: process.env,
|
|
220
|
+
stdout: process.stdout,
|
|
221
|
+
programArguments,
|
|
222
|
+
workingDirectory,
|
|
223
|
+
environment
|
|
224
|
+
});
|
|
225
|
+
} catch (err) {
|
|
226
|
+
installError = err instanceof Error ? err.message : String(err);
|
|
227
|
+
} finally {
|
|
228
|
+
progress.stop(installError ? "Gateway service install failed." : "Gateway service installed.");
|
|
229
|
+
}
|
|
230
|
+
if (installError) {
|
|
231
|
+
await prompter.note(`Gateway service install failed: ${installError}`, "Gateway");
|
|
232
|
+
await prompter.note(gatewayInstallErrorHint(), "Gateway");
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (!opts.skipHealth) {
|
|
237
|
+
await waitForGatewayReachable({
|
|
238
|
+
url: resolveControlUiLinks({
|
|
239
|
+
bind: nextConfig.gateway?.bind ?? "loopback",
|
|
240
|
+
port: settings.port,
|
|
241
|
+
customBindHost: nextConfig.gateway?.customBindHost,
|
|
242
|
+
basePath: void 0
|
|
243
|
+
}).wsUrl,
|
|
244
|
+
token: settings.gatewayToken,
|
|
245
|
+
deadlineMs: 15e3
|
|
246
|
+
});
|
|
247
|
+
try {
|
|
248
|
+
await healthCommand({
|
|
249
|
+
json: false,
|
|
250
|
+
timeoutMs: 1e4
|
|
251
|
+
}, runtime);
|
|
252
|
+
} catch (err) {
|
|
253
|
+
runtime.error(formatHealthCheckFailure(err));
|
|
254
|
+
await prompter.note([
|
|
255
|
+
"Docs:",
|
|
256
|
+
"https://docs.anima.ai/gateway/health",
|
|
257
|
+
"https://docs.anima.ai/gateway/troubleshooting"
|
|
258
|
+
].join("\n"), "Health check help");
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
const controlUiEnabled = nextConfig.gateway?.controlUi?.enabled ?? baseConfig.gateway?.controlUi?.enabled ?? true;
|
|
262
|
+
if (!opts.skipUi && controlUiEnabled) {
|
|
263
|
+
const controlUiAssets = await ensureControlUiAssetsBuilt(runtime);
|
|
264
|
+
if (!controlUiAssets.ok && controlUiAssets.message) runtime.error(controlUiAssets.message);
|
|
265
|
+
}
|
|
266
|
+
await prompter.note([
|
|
267
|
+
"Add nodes for extra features:",
|
|
268
|
+
"- macOS app (system + notifications)",
|
|
269
|
+
"- iOS app (camera/canvas)",
|
|
270
|
+
"- Android app (camera/canvas)"
|
|
271
|
+
].join("\n"), "Optional apps");
|
|
272
|
+
const controlUiBasePath = nextConfig.gateway?.controlUi?.basePath ?? baseConfig.gateway?.controlUi?.basePath;
|
|
273
|
+
const links = resolveControlUiLinks({
|
|
274
|
+
bind: settings.bind,
|
|
275
|
+
port: settings.port,
|
|
276
|
+
customBindHost: settings.customBindHost,
|
|
277
|
+
basePath: controlUiBasePath
|
|
278
|
+
});
|
|
279
|
+
const authedUrl = settings.authMode === "token" && settings.gatewayToken ? `${links.httpUrl}#token=${encodeURIComponent(settings.gatewayToken)}` : links.httpUrl;
|
|
280
|
+
const gatewayProbe = await probeGatewayReachable({
|
|
281
|
+
url: links.wsUrl,
|
|
282
|
+
token: settings.authMode === "token" ? settings.gatewayToken : void 0,
|
|
283
|
+
password: settings.authMode === "password" ? nextConfig.gateway?.auth?.password : ""
|
|
284
|
+
});
|
|
285
|
+
const gatewayStatusLine = gatewayProbe.ok ? "Gateway: reachable" : `Gateway: not detected${gatewayProbe.detail ? ` (${gatewayProbe.detail})` : ""}`;
|
|
286
|
+
const bootstrapPath = path.join(resolveUserPath(options.workspaceDir), DEFAULT_BOOTSTRAP_FILENAME);
|
|
287
|
+
const hasBootstrap = await fs.access(bootstrapPath).then(() => true).catch(() => false);
|
|
288
|
+
await prompter.note([
|
|
289
|
+
`Web UI: ${links.httpUrl}`,
|
|
290
|
+
settings.authMode === "token" && settings.gatewayToken ? `Web UI (with token): ${authedUrl}` : void 0,
|
|
291
|
+
`Gateway WS: ${links.wsUrl}`,
|
|
292
|
+
gatewayStatusLine,
|
|
293
|
+
"Docs: https://docs.anima.ai/web/control-ui"
|
|
294
|
+
].filter(Boolean).join("\n"), "Control UI");
|
|
295
|
+
let controlUiOpened = false;
|
|
296
|
+
let controlUiOpenHint;
|
|
297
|
+
let hatchChoice = null;
|
|
298
|
+
let launchedTui = false;
|
|
299
|
+
if (!opts.skipUi && gatewayProbe.ok) {
|
|
300
|
+
if (hasBootstrap) await prompter.note([
|
|
301
|
+
"This is the defining action that makes your agent you.",
|
|
302
|
+
"Please take your time.",
|
|
303
|
+
"The more you tell it, the better the experience will be.",
|
|
304
|
+
"We will send: \"Wake up, my friend!\""
|
|
305
|
+
].join("\n"), "Start TUI (best option!)");
|
|
306
|
+
await prompter.note([
|
|
307
|
+
"Gateway token: shared auth for the Gateway + Control UI.",
|
|
308
|
+
"Stored in: ~/.anima/anima.json (gateway.auth.token) or ANIMA_GATEWAY_TOKEN.",
|
|
309
|
+
`View token: ${formatCliCommand("anima config get gateway.auth.token")}`,
|
|
310
|
+
`Generate token: ${formatCliCommand("anima doctor --generate-gateway-token")}`,
|
|
311
|
+
"Web UI stores a copy in this browser's localStorage (anima.control.settings.v1).",
|
|
312
|
+
`Open the dashboard anytime: ${formatCliCommand("anima dashboard --no-open")}`,
|
|
313
|
+
"If prompted: paste the token into Control UI settings (or use the tokenized dashboard URL)."
|
|
314
|
+
].join("\n"), "Token");
|
|
315
|
+
hatchChoice = await prompter.select({
|
|
316
|
+
message: "How do you want to hatch your bot?",
|
|
317
|
+
options: [
|
|
318
|
+
{
|
|
319
|
+
value: "tui",
|
|
320
|
+
label: "Hatch in TUI (recommended)"
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
value: "web",
|
|
324
|
+
label: "Open the Web UI"
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
value: "later",
|
|
328
|
+
label: "Do this later"
|
|
329
|
+
}
|
|
330
|
+
],
|
|
331
|
+
initialValue: "tui"
|
|
332
|
+
});
|
|
333
|
+
if (hatchChoice === "tui") {
|
|
334
|
+
restoreTerminalState("pre-onboarding tui", { resumeStdinIfPaused: true });
|
|
335
|
+
await runTui({
|
|
336
|
+
url: links.wsUrl,
|
|
337
|
+
token: settings.authMode === "token" ? settings.gatewayToken : void 0,
|
|
338
|
+
password: settings.authMode === "password" ? nextConfig.gateway?.auth?.password : "",
|
|
339
|
+
deliver: false,
|
|
340
|
+
message: hasBootstrap ? "Wake up, my friend!" : void 0
|
|
341
|
+
});
|
|
342
|
+
launchedTui = true;
|
|
343
|
+
} else if (hatchChoice === "web") {
|
|
344
|
+
if ((await detectBrowserOpenSupport()).ok) {
|
|
345
|
+
controlUiOpened = await openUrl(authedUrl);
|
|
346
|
+
if (!controlUiOpened) controlUiOpenHint = formatControlUiSshHint({
|
|
347
|
+
port: settings.port,
|
|
348
|
+
basePath: controlUiBasePath,
|
|
349
|
+
token: settings.authMode === "token" ? settings.gatewayToken : void 0
|
|
350
|
+
});
|
|
351
|
+
} else controlUiOpenHint = formatControlUiSshHint({
|
|
352
|
+
port: settings.port,
|
|
353
|
+
basePath: controlUiBasePath,
|
|
354
|
+
token: settings.authMode === "token" ? settings.gatewayToken : void 0
|
|
355
|
+
});
|
|
356
|
+
await prompter.note([
|
|
357
|
+
`Dashboard link (with token): ${authedUrl}`,
|
|
358
|
+
controlUiOpened ? "Opened in your browser. Keep that tab to control Anima." : "Copy/paste this URL in a browser on this machine to control Anima.",
|
|
359
|
+
controlUiOpenHint
|
|
360
|
+
].filter(Boolean).join("\n"), "Dashboard ready");
|
|
361
|
+
} else await prompter.note(`When you're ready: ${formatCliCommand("anima dashboard --no-open")}`, "Later");
|
|
362
|
+
} else if (opts.skipUi) await prompter.note("Skipping Control UI/TUI prompts.", "Control UI");
|
|
363
|
+
await prompter.note(["Back up your agent workspace.", "Docs: https://docs.anima.ai/concepts/agent-workspace"].join("\n"), "Workspace backup");
|
|
364
|
+
await prompter.note("Running agents on your computer is risky — harden your setup: https://docs.anima.ai/security", "Security");
|
|
365
|
+
await setupOnboardingShellCompletion({
|
|
366
|
+
flow,
|
|
367
|
+
prompter
|
|
368
|
+
});
|
|
369
|
+
if (!opts.skipUi && settings.authMode === "token" && Boolean(settings.gatewayToken) && hatchChoice === null) {
|
|
370
|
+
if ((await detectBrowserOpenSupport()).ok) {
|
|
371
|
+
controlUiOpened = await openUrl(authedUrl);
|
|
372
|
+
if (!controlUiOpened) controlUiOpenHint = formatControlUiSshHint({
|
|
373
|
+
port: settings.port,
|
|
374
|
+
basePath: controlUiBasePath,
|
|
375
|
+
token: settings.gatewayToken
|
|
376
|
+
});
|
|
377
|
+
} else controlUiOpenHint = formatControlUiSshHint({
|
|
378
|
+
port: settings.port,
|
|
379
|
+
basePath: controlUiBasePath,
|
|
380
|
+
token: settings.gatewayToken
|
|
381
|
+
});
|
|
382
|
+
await prompter.note([
|
|
383
|
+
`Dashboard link (with token): ${authedUrl}`,
|
|
384
|
+
controlUiOpened ? "Opened in your browser. Keep that tab to control Anima." : "Copy/paste this URL in a browser on this machine to control Anima.",
|
|
385
|
+
controlUiOpenHint
|
|
386
|
+
].filter(Boolean).join("\n"), "Dashboard ready");
|
|
387
|
+
}
|
|
388
|
+
const webSearchKey = (nextConfig.tools?.web?.search?.apiKey ?? "").trim();
|
|
389
|
+
const webSearchEnv = (process.env.BRAVE_API_KEY ?? "").trim();
|
|
390
|
+
const hasWebSearchKey = Boolean(webSearchKey || webSearchEnv);
|
|
391
|
+
await prompter.note(hasWebSearchKey ? [
|
|
392
|
+
"Web search is enabled, so your agent can look things up online when needed.",
|
|
393
|
+
"",
|
|
394
|
+
webSearchKey ? "API key: stored in config (tools.web.search.apiKey)." : "API key: provided via BRAVE_API_KEY env var (Gateway environment).",
|
|
395
|
+
"Docs: https://docs.anima.ai/tools/web"
|
|
396
|
+
].join("\n") : [
|
|
397
|
+
"If you want your agent to be able to search the web, you’ll need an API key.",
|
|
398
|
+
"",
|
|
399
|
+
"Anima uses Brave Search for the `web_search` tool. Without a Brave Search API key, web search won’t work.",
|
|
400
|
+
"",
|
|
401
|
+
"Set it up interactively:",
|
|
402
|
+
`- Run: ${formatCliCommand("anima configure --section web")}`,
|
|
403
|
+
"- Enable web_search and paste your Brave Search API key",
|
|
404
|
+
"",
|
|
405
|
+
"Alternative: set BRAVE_API_KEY in the Gateway environment (no config changes).",
|
|
406
|
+
"Docs: https://docs.anima.ai/tools/web"
|
|
407
|
+
].join("\n"), "Web search (optional)");
|
|
408
|
+
await prompter.note("What now: https://anima.ai/showcase (\"What People Are Building\").", "What now");
|
|
409
|
+
await prompter.outro(controlUiOpened ? "Onboarding complete. Dashboard opened; keep that tab to control Anima." : "Onboarding complete. Use the dashboard link above to control Anima.");
|
|
410
|
+
return { launchedTui };
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
//#endregion
|
|
414
|
+
//#region src/wizard/onboarding.gateway-config.ts
|
|
415
|
+
const DEFAULT_DANGEROUS_NODE_DENY_COMMANDS = [
|
|
416
|
+
"camera.snap",
|
|
417
|
+
"camera.clip",
|
|
418
|
+
"screen.record",
|
|
419
|
+
"calendar.add",
|
|
420
|
+
"contacts.add",
|
|
421
|
+
"reminders.add"
|
|
422
|
+
];
|
|
423
|
+
async function configureGatewayForOnboarding(opts) {
|
|
424
|
+
const { flow, localPort, quickstartGateway, prompter } = opts;
|
|
425
|
+
let { nextConfig } = opts;
|
|
426
|
+
const port = flow === "quickstart" ? quickstartGateway.port : Number.parseInt(String(await prompter.text({
|
|
427
|
+
message: "Gateway port",
|
|
428
|
+
initialValue: String(localPort),
|
|
429
|
+
validate: (value) => Number.isFinite(Number(value)) ? void 0 : "Invalid port"
|
|
430
|
+
})), 10);
|
|
431
|
+
let bind = flow === "quickstart" ? quickstartGateway.bind : await prompter.select({
|
|
432
|
+
message: "Gateway bind",
|
|
433
|
+
options: [
|
|
434
|
+
{
|
|
435
|
+
value: "loopback",
|
|
436
|
+
label: "Loopback (127.0.0.1)"
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
value: "lan",
|
|
440
|
+
label: "LAN (0.0.0.0)"
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
value: "tailnet",
|
|
444
|
+
label: "Tailnet (Tailscale IP)"
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
value: "auto",
|
|
448
|
+
label: "Auto (Loopback → LAN)"
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
value: "custom",
|
|
452
|
+
label: "Custom IP"
|
|
453
|
+
}
|
|
454
|
+
]
|
|
455
|
+
});
|
|
456
|
+
let customBindHost = quickstartGateway.customBindHost;
|
|
457
|
+
if (bind === "custom") {
|
|
458
|
+
if (flow !== "quickstart" || !customBindHost) {
|
|
459
|
+
const input = await prompter.text({
|
|
460
|
+
message: "Custom IP address",
|
|
461
|
+
placeholder: "192.168.1.100",
|
|
462
|
+
initialValue: customBindHost ?? "",
|
|
463
|
+
validate: validateIPv4AddressInput
|
|
464
|
+
});
|
|
465
|
+
customBindHost = typeof input === "string" ? input.trim() : void 0;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
let authMode = flow === "quickstart" ? quickstartGateway.authMode : await prompter.select({
|
|
469
|
+
message: "Gateway auth",
|
|
470
|
+
options: [{
|
|
471
|
+
value: "token",
|
|
472
|
+
label: "Token",
|
|
473
|
+
hint: "Recommended default (local + remote)"
|
|
474
|
+
}, {
|
|
475
|
+
value: "password",
|
|
476
|
+
label: "Password"
|
|
477
|
+
}],
|
|
478
|
+
initialValue: "token"
|
|
479
|
+
});
|
|
480
|
+
const tailscaleMode = flow === "quickstart" ? quickstartGateway.tailscaleMode : await prompter.select({
|
|
481
|
+
message: "Tailscale exposure",
|
|
482
|
+
options: [
|
|
483
|
+
{
|
|
484
|
+
value: "off",
|
|
485
|
+
label: "Off",
|
|
486
|
+
hint: "No Tailscale exposure"
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
value: "serve",
|
|
490
|
+
label: "Serve",
|
|
491
|
+
hint: "Private HTTPS for your tailnet (devices on Tailscale)"
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
value: "funnel",
|
|
495
|
+
label: "Funnel",
|
|
496
|
+
hint: "Public HTTPS via Tailscale Funnel (internet)"
|
|
497
|
+
}
|
|
498
|
+
]
|
|
499
|
+
});
|
|
500
|
+
if (tailscaleMode !== "off") {
|
|
501
|
+
if (!await findTailscaleBinary()) await prompter.note([
|
|
502
|
+
"Tailscale binary not found in PATH or /Applications.",
|
|
503
|
+
"Ensure Tailscale is installed from:",
|
|
504
|
+
" https://tailscale.com/download/mac",
|
|
505
|
+
"",
|
|
506
|
+
"You can continue setup, but serve/funnel will fail at runtime."
|
|
507
|
+
].join("\n"), "Tailscale Warning");
|
|
508
|
+
}
|
|
509
|
+
let tailscaleResetOnExit = flow === "quickstart" ? quickstartGateway.tailscaleResetOnExit : false;
|
|
510
|
+
if (tailscaleMode !== "off" && flow !== "quickstart") {
|
|
511
|
+
await prompter.note([
|
|
512
|
+
"Docs:",
|
|
513
|
+
"https://docs.anima.ai/gateway/tailscale",
|
|
514
|
+
"https://docs.anima.ai/web"
|
|
515
|
+
].join("\n"), "Tailscale");
|
|
516
|
+
tailscaleResetOnExit = Boolean(await prompter.confirm({
|
|
517
|
+
message: "Reset Tailscale serve/funnel on exit?",
|
|
518
|
+
initialValue: false
|
|
519
|
+
}));
|
|
520
|
+
}
|
|
521
|
+
if (tailscaleMode !== "off" && bind !== "loopback") {
|
|
522
|
+
await prompter.note("Tailscale requires bind=loopback. Adjusting bind to loopback.", "Note");
|
|
523
|
+
bind = "loopback";
|
|
524
|
+
customBindHost = void 0;
|
|
525
|
+
}
|
|
526
|
+
if (tailscaleMode === "funnel" && authMode !== "password") {
|
|
527
|
+
await prompter.note("Tailscale funnel requires password auth.", "Note");
|
|
528
|
+
authMode = "password";
|
|
529
|
+
}
|
|
530
|
+
let gatewayToken;
|
|
531
|
+
if (authMode === "token") if (flow === "quickstart") gatewayToken = quickstartGateway.token ?? randomToken();
|
|
532
|
+
else gatewayToken = normalizeGatewayTokenInput(await prompter.text({
|
|
533
|
+
message: "Gateway token (blank to generate)",
|
|
534
|
+
placeholder: "Needed for multi-machine or non-loopback access",
|
|
535
|
+
initialValue: quickstartGateway.token ?? ""
|
|
536
|
+
})) || randomToken();
|
|
537
|
+
if (authMode === "password") {
|
|
538
|
+
const password = flow === "quickstart" && quickstartGateway.password ? quickstartGateway.password : await prompter.text({
|
|
539
|
+
message: "Gateway password",
|
|
540
|
+
validate: validateGatewayPasswordInput
|
|
541
|
+
});
|
|
542
|
+
nextConfig = {
|
|
543
|
+
...nextConfig,
|
|
544
|
+
gateway: {
|
|
545
|
+
...nextConfig.gateway,
|
|
546
|
+
auth: {
|
|
547
|
+
...nextConfig.gateway?.auth,
|
|
548
|
+
mode: "password",
|
|
549
|
+
password: String(password ?? "").trim()
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
};
|
|
553
|
+
} else if (authMode === "token") nextConfig = {
|
|
554
|
+
...nextConfig,
|
|
555
|
+
gateway: {
|
|
556
|
+
...nextConfig.gateway,
|
|
557
|
+
auth: {
|
|
558
|
+
...nextConfig.gateway?.auth,
|
|
559
|
+
mode: "token",
|
|
560
|
+
token: gatewayToken
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
};
|
|
564
|
+
nextConfig = {
|
|
565
|
+
...nextConfig,
|
|
566
|
+
gateway: {
|
|
567
|
+
...nextConfig.gateway,
|
|
568
|
+
port,
|
|
569
|
+
bind,
|
|
570
|
+
...bind === "custom" && customBindHost ? { customBindHost } : {},
|
|
571
|
+
tailscale: {
|
|
572
|
+
...nextConfig.gateway?.tailscale,
|
|
573
|
+
mode: tailscaleMode,
|
|
574
|
+
resetOnExit: tailscaleResetOnExit
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
if (!quickstartGateway.hasExisting && nextConfig.gateway?.nodes?.denyCommands === void 0 && nextConfig.gateway?.nodes?.allowCommands === void 0 && nextConfig.gateway?.nodes?.browser === void 0) nextConfig = {
|
|
579
|
+
...nextConfig,
|
|
580
|
+
gateway: {
|
|
581
|
+
...nextConfig.gateway,
|
|
582
|
+
nodes: {
|
|
583
|
+
...nextConfig.gateway?.nodes,
|
|
584
|
+
denyCommands: [...DEFAULT_DANGEROUS_NODE_DENY_COMMANDS]
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
};
|
|
588
|
+
return {
|
|
589
|
+
nextConfig,
|
|
590
|
+
settings: {
|
|
591
|
+
port,
|
|
592
|
+
bind,
|
|
593
|
+
customBindHost: bind === "custom" ? customBindHost : void 0,
|
|
594
|
+
authMode,
|
|
595
|
+
gatewayToken,
|
|
596
|
+
tailscaleMode,
|
|
597
|
+
tailscaleResetOnExit
|
|
598
|
+
}
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
//#endregion
|
|
603
|
+
//#region src/wizard/onboarding.ts
|
|
604
|
+
async function requireRiskAcknowledgement(params) {
|
|
605
|
+
if (params.opts.acceptRisk === true) return;
|
|
606
|
+
await params.prompter.note([
|
|
607
|
+
"Security warning — please read.",
|
|
608
|
+
"",
|
|
609
|
+
"Anima is a hobby project and still in beta. Expect sharp edges.",
|
|
610
|
+
"This bot can read files and run actions if tools are enabled.",
|
|
611
|
+
"A bad prompt can trick it into doing unsafe things.",
|
|
612
|
+
"",
|
|
613
|
+
"If you’re not comfortable with basic security and access control, don’t run Anima.",
|
|
614
|
+
"Ask someone experienced to help before enabling tools or exposing it to the internet.",
|
|
615
|
+
"",
|
|
616
|
+
"Recommended baseline:",
|
|
617
|
+
"- Pairing/allowlists + mention gating.",
|
|
618
|
+
"- Sandbox + least-privilege tools.",
|
|
619
|
+
"- Keep secrets out of the agent’s reachable filesystem.",
|
|
620
|
+
"- Use the strongest available model for any bot with tools or untrusted inboxes.",
|
|
621
|
+
"",
|
|
622
|
+
"Run regularly:",
|
|
623
|
+
"anima security audit --deep",
|
|
624
|
+
"anima security audit --fix",
|
|
625
|
+
"",
|
|
626
|
+
"Must read: https://docs.anima.ai/gateway/security"
|
|
627
|
+
].join("\n"), "Security");
|
|
628
|
+
if (!await params.prompter.confirm({
|
|
629
|
+
message: "I understand this is powerful and inherently risky. Continue?",
|
|
630
|
+
initialValue: false
|
|
631
|
+
})) throw new WizardCancelledError("risk not accepted");
|
|
632
|
+
}
|
|
633
|
+
async function runOnboardingWizard(opts, runtime = defaultRuntime, prompter) {
|
|
634
|
+
printWizardHeader(runtime);
|
|
635
|
+
await prompter.intro("Anima onboarding");
|
|
636
|
+
await requireRiskAcknowledgement({
|
|
637
|
+
opts,
|
|
638
|
+
prompter
|
|
639
|
+
});
|
|
640
|
+
const snapshot = await readConfigFileSnapshot();
|
|
641
|
+
let baseConfig = snapshot.valid ? snapshot.config : {};
|
|
642
|
+
if (snapshot.exists && !snapshot.valid) {
|
|
643
|
+
await prompter.note(summarizeExistingConfig(baseConfig), "Invalid config");
|
|
644
|
+
if (snapshot.issues.length > 0) await prompter.note([
|
|
645
|
+
...snapshot.issues.map((iss) => `- ${iss.path}: ${iss.message}`),
|
|
646
|
+
"",
|
|
647
|
+
"Docs: https://docs.anima.ai/gateway/configuration"
|
|
648
|
+
].join("\n"), "Config issues");
|
|
649
|
+
await prompter.outro(`Config invalid. Run \`${formatCliCommand("anima doctor")}\` to repair it, then re-run onboarding.`);
|
|
650
|
+
runtime.exit(1);
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
653
|
+
const quickstartHint = `Configure details later via ${formatCliCommand("anima configure")}.`;
|
|
654
|
+
const manualHint = "Configure port, network, Tailscale, and auth options.";
|
|
655
|
+
const explicitFlowRaw = opts.flow?.trim();
|
|
656
|
+
const normalizedExplicitFlow = explicitFlowRaw === "manual" ? "advanced" : explicitFlowRaw;
|
|
657
|
+
if (normalizedExplicitFlow && normalizedExplicitFlow !== "quickstart" && normalizedExplicitFlow !== "advanced") {
|
|
658
|
+
runtime.error("Invalid --flow (use quickstart, manual, or advanced).");
|
|
659
|
+
runtime.exit(1);
|
|
660
|
+
return;
|
|
661
|
+
}
|
|
662
|
+
let flow = (normalizedExplicitFlow === "quickstart" || normalizedExplicitFlow === "advanced" ? normalizedExplicitFlow : void 0) ?? await prompter.select({
|
|
663
|
+
message: "Onboarding mode",
|
|
664
|
+
options: [{
|
|
665
|
+
value: "quickstart",
|
|
666
|
+
label: "QuickStart",
|
|
667
|
+
hint: quickstartHint
|
|
668
|
+
}, {
|
|
669
|
+
value: "advanced",
|
|
670
|
+
label: "Manual",
|
|
671
|
+
hint: manualHint
|
|
672
|
+
}],
|
|
673
|
+
initialValue: "quickstart"
|
|
674
|
+
});
|
|
675
|
+
if (opts.mode === "remote" && flow === "quickstart") {
|
|
676
|
+
await prompter.note("QuickStart only supports local gateways. Switching to Manual mode.", "QuickStart");
|
|
677
|
+
flow = "advanced";
|
|
678
|
+
}
|
|
679
|
+
if (snapshot.exists) {
|
|
680
|
+
await prompter.note(summarizeExistingConfig(baseConfig), "Existing config detected");
|
|
681
|
+
if (await prompter.select({
|
|
682
|
+
message: "Config handling",
|
|
683
|
+
options: [
|
|
684
|
+
{
|
|
685
|
+
value: "keep",
|
|
686
|
+
label: "Use existing values"
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
value: "modify",
|
|
690
|
+
label: "Update values"
|
|
691
|
+
},
|
|
692
|
+
{
|
|
693
|
+
value: "reset",
|
|
694
|
+
label: "Reset"
|
|
695
|
+
}
|
|
696
|
+
]
|
|
697
|
+
}) === "reset") {
|
|
698
|
+
const workspaceDefault = baseConfig.agents?.defaults?.workspace ?? DEFAULT_WORKSPACE;
|
|
699
|
+
await handleReset(await prompter.select({
|
|
700
|
+
message: "Reset scope",
|
|
701
|
+
options: [
|
|
702
|
+
{
|
|
703
|
+
value: "config",
|
|
704
|
+
label: "Config only"
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
value: "config+creds+sessions",
|
|
708
|
+
label: "Config + creds + sessions"
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
value: "full",
|
|
712
|
+
label: "Full reset (config + creds + sessions + workspace)"
|
|
713
|
+
}
|
|
714
|
+
]
|
|
715
|
+
}), resolveUserPath(workspaceDefault), runtime);
|
|
716
|
+
baseConfig = {};
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
const quickstartGateway = (() => {
|
|
720
|
+
const hasExisting = typeof baseConfig.gateway?.port === "number" || baseConfig.gateway?.bind !== void 0 || baseConfig.gateway?.auth?.mode !== void 0 || baseConfig.gateway?.auth?.token !== void 0 || baseConfig.gateway?.auth?.password !== void 0 || baseConfig.gateway?.customBindHost !== void 0 || baseConfig.gateway?.tailscale?.mode !== void 0;
|
|
721
|
+
const bindRaw = baseConfig.gateway?.bind;
|
|
722
|
+
const bind = bindRaw === "loopback" || bindRaw === "lan" || bindRaw === "auto" || bindRaw === "custom" || bindRaw === "tailnet" ? bindRaw : "loopback";
|
|
723
|
+
let authMode = "token";
|
|
724
|
+
if (baseConfig.gateway?.auth?.mode === "token" || baseConfig.gateway?.auth?.mode === "password") authMode = baseConfig.gateway.auth.mode;
|
|
725
|
+
else if (baseConfig.gateway?.auth?.token) authMode = "token";
|
|
726
|
+
else if (baseConfig.gateway?.auth?.password) authMode = "password";
|
|
727
|
+
const tailscaleRaw = baseConfig.gateway?.tailscale?.mode;
|
|
728
|
+
const tailscaleMode = tailscaleRaw === "off" || tailscaleRaw === "serve" || tailscaleRaw === "funnel" ? tailscaleRaw : "off";
|
|
729
|
+
return {
|
|
730
|
+
hasExisting,
|
|
731
|
+
port: resolveGatewayPort(baseConfig),
|
|
732
|
+
bind,
|
|
733
|
+
authMode,
|
|
734
|
+
tailscaleMode,
|
|
735
|
+
token: baseConfig.gateway?.auth?.token,
|
|
736
|
+
password: baseConfig.gateway?.auth?.password,
|
|
737
|
+
customBindHost: baseConfig.gateway?.customBindHost,
|
|
738
|
+
tailscaleResetOnExit: baseConfig.gateway?.tailscale?.resetOnExit ?? false
|
|
739
|
+
};
|
|
740
|
+
})();
|
|
741
|
+
if (flow === "quickstart") {
|
|
742
|
+
const formatBind = (value) => {
|
|
743
|
+
if (value === "loopback") return "Loopback (127.0.0.1)";
|
|
744
|
+
if (value === "lan") return "LAN";
|
|
745
|
+
if (value === "custom") return "Custom IP";
|
|
746
|
+
if (value === "tailnet") return "Tailnet (Tailscale IP)";
|
|
747
|
+
return "Auto";
|
|
748
|
+
};
|
|
749
|
+
const formatAuth = (value) => {
|
|
750
|
+
if (value === "token") return "Token (default)";
|
|
751
|
+
return "Password";
|
|
752
|
+
};
|
|
753
|
+
const formatTailscale = (value) => {
|
|
754
|
+
if (value === "off") return "Off";
|
|
755
|
+
if (value === "serve") return "Serve";
|
|
756
|
+
return "Funnel";
|
|
757
|
+
};
|
|
758
|
+
const quickstartLines = quickstartGateway.hasExisting ? [
|
|
759
|
+
"Keeping your current gateway settings:",
|
|
760
|
+
`Gateway port: ${quickstartGateway.port}`,
|
|
761
|
+
`Gateway bind: ${formatBind(quickstartGateway.bind)}`,
|
|
762
|
+
...quickstartGateway.bind === "custom" && quickstartGateway.customBindHost ? [`Gateway custom IP: ${quickstartGateway.customBindHost}`] : [],
|
|
763
|
+
`Gateway auth: ${formatAuth(quickstartGateway.authMode)}`,
|
|
764
|
+
`Tailscale exposure: ${formatTailscale(quickstartGateway.tailscaleMode)}`,
|
|
765
|
+
"Direct to chat channels."
|
|
766
|
+
] : [
|
|
767
|
+
`Gateway port: ${DEFAULT_GATEWAY_PORT}`,
|
|
768
|
+
"Gateway bind: Loopback (127.0.0.1)",
|
|
769
|
+
"Gateway auth: Token (default)",
|
|
770
|
+
"Tailscale exposure: Off",
|
|
771
|
+
"Direct to chat channels."
|
|
772
|
+
];
|
|
773
|
+
await prompter.note(quickstartLines.join("\n"), "QuickStart");
|
|
774
|
+
}
|
|
775
|
+
const localPort = resolveGatewayPort(baseConfig);
|
|
776
|
+
const localUrl = `ws://127.0.0.1:${localPort}`;
|
|
777
|
+
const localProbe = await probeGatewayReachable({
|
|
778
|
+
url: localUrl,
|
|
779
|
+
token: baseConfig.gateway?.auth?.token ?? process.env.ANIMA_GATEWAY_TOKEN,
|
|
780
|
+
password: baseConfig.gateway?.auth?.password ?? process.env.ANIMA_GATEWAY_PASSWORD
|
|
781
|
+
});
|
|
782
|
+
const remoteUrl = baseConfig.gateway?.remote?.url?.trim() ?? "";
|
|
783
|
+
const remoteProbe = remoteUrl ? await probeGatewayReachable({
|
|
784
|
+
url: remoteUrl,
|
|
785
|
+
token: baseConfig.gateway?.remote?.token
|
|
786
|
+
}) : null;
|
|
787
|
+
const mode = opts.mode ?? (flow === "quickstart" ? "local" : await prompter.select({
|
|
788
|
+
message: "What do you want to set up?",
|
|
789
|
+
options: [{
|
|
790
|
+
value: "local",
|
|
791
|
+
label: "Local gateway (this machine)",
|
|
792
|
+
hint: localProbe.ok ? `Gateway reachable (${localUrl})` : `No gateway detected (${localUrl})`
|
|
793
|
+
}, {
|
|
794
|
+
value: "remote",
|
|
795
|
+
label: "Remote gateway (info-only)",
|
|
796
|
+
hint: !remoteUrl ? "No remote URL configured yet" : remoteProbe?.ok ? `Gateway reachable (${remoteUrl})` : `Configured but unreachable (${remoteUrl})`
|
|
797
|
+
}]
|
|
798
|
+
}));
|
|
799
|
+
if (mode === "remote") {
|
|
800
|
+
let nextConfig = await promptRemoteGatewayConfig(baseConfig, prompter);
|
|
801
|
+
nextConfig = applyWizardMetadata(nextConfig, {
|
|
802
|
+
command: "onboard",
|
|
803
|
+
mode
|
|
804
|
+
});
|
|
805
|
+
await writeConfigFile(nextConfig);
|
|
806
|
+
logConfigUpdated(runtime);
|
|
807
|
+
await prompter.outro("Remote gateway configured.");
|
|
808
|
+
return;
|
|
809
|
+
}
|
|
810
|
+
const workspaceDir = resolveUserPath((opts.workspace ?? (flow === "quickstart" ? baseConfig.agents?.defaults?.workspace ?? DEFAULT_WORKSPACE : await prompter.text({
|
|
811
|
+
message: "Workspace directory",
|
|
812
|
+
initialValue: baseConfig.agents?.defaults?.workspace ?? DEFAULT_WORKSPACE
|
|
813
|
+
}))).trim() || DEFAULT_WORKSPACE);
|
|
814
|
+
let nextConfig = {
|
|
815
|
+
...baseConfig,
|
|
816
|
+
agents: {
|
|
817
|
+
...baseConfig.agents,
|
|
818
|
+
defaults: {
|
|
819
|
+
...baseConfig.agents?.defaults,
|
|
820
|
+
workspace: workspaceDir
|
|
821
|
+
}
|
|
822
|
+
},
|
|
823
|
+
gateway: {
|
|
824
|
+
...baseConfig.gateway,
|
|
825
|
+
mode: "local"
|
|
826
|
+
}
|
|
827
|
+
};
|
|
828
|
+
const authStore = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false });
|
|
829
|
+
const authChoiceFromPrompt = opts.authChoice === void 0;
|
|
830
|
+
const authChoice = opts.authChoice ?? await promptAuthChoiceGrouped({
|
|
831
|
+
prompter,
|
|
832
|
+
store: authStore,
|
|
833
|
+
includeSkip: true
|
|
834
|
+
});
|
|
835
|
+
if (authChoice === "custom-api-key") nextConfig = (await promptCustomApiConfig({
|
|
836
|
+
prompter,
|
|
837
|
+
runtime,
|
|
838
|
+
config: nextConfig
|
|
839
|
+
})).config;
|
|
840
|
+
else nextConfig = (await applyAuthChoice({
|
|
841
|
+
authChoice,
|
|
842
|
+
config: nextConfig,
|
|
843
|
+
prompter,
|
|
844
|
+
runtime,
|
|
845
|
+
setDefaultModel: true,
|
|
846
|
+
opts: {
|
|
847
|
+
tokenProvider: opts.tokenProvider,
|
|
848
|
+
token: opts.authChoice === "apiKey" && opts.token ? opts.token : void 0
|
|
849
|
+
}
|
|
850
|
+
})).config;
|
|
851
|
+
if (authChoiceFromPrompt && authChoice !== "custom-api-key") {
|
|
852
|
+
const modelSelection = await promptDefaultModel({
|
|
853
|
+
config: nextConfig,
|
|
854
|
+
prompter,
|
|
855
|
+
allowKeep: true,
|
|
856
|
+
ignoreAllowlist: true,
|
|
857
|
+
includeVllm: true,
|
|
858
|
+
preferredProvider: resolvePreferredProviderForAuthChoice(authChoice)
|
|
859
|
+
});
|
|
860
|
+
if (modelSelection.config) nextConfig = modelSelection.config;
|
|
861
|
+
if (modelSelection.model) nextConfig = applyPrimaryModel(nextConfig, modelSelection.model);
|
|
862
|
+
}
|
|
863
|
+
await warnIfModelConfigLooksOff(nextConfig, prompter);
|
|
864
|
+
const gateway = await configureGatewayForOnboarding({
|
|
865
|
+
flow,
|
|
866
|
+
baseConfig,
|
|
867
|
+
nextConfig,
|
|
868
|
+
localPort,
|
|
869
|
+
quickstartGateway,
|
|
870
|
+
prompter,
|
|
871
|
+
runtime
|
|
872
|
+
});
|
|
873
|
+
nextConfig = gateway.nextConfig;
|
|
874
|
+
const settings = gateway.settings;
|
|
875
|
+
if (opts.skipChannels ?? opts.skipProviders) await prompter.note("Skipping channel setup.", "Channels");
|
|
876
|
+
else {
|
|
877
|
+
const quickstartAllowFromChannels = flow === "quickstart" ? listChannelPlugins().filter((plugin) => plugin.meta.quickstartAllowFrom).map((plugin) => plugin.id) : [];
|
|
878
|
+
nextConfig = await setupChannels(nextConfig, runtime, prompter, {
|
|
879
|
+
allowSignalInstall: true,
|
|
880
|
+
forceAllowFromChannels: quickstartAllowFromChannels,
|
|
881
|
+
skipDmPolicyPrompt: flow === "quickstart",
|
|
882
|
+
skipConfirm: flow === "quickstart",
|
|
883
|
+
quickstartDefaults: flow === "quickstart"
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
await writeConfigFile(nextConfig);
|
|
887
|
+
logConfigUpdated(runtime);
|
|
888
|
+
await ensureWorkspaceAndSessions(workspaceDir, runtime, { skipBootstrap: Boolean(nextConfig.agents?.defaults?.skipBootstrap) });
|
|
889
|
+
if (opts.skipSkills) await prompter.note("Skipping skills setup.", "Skills");
|
|
890
|
+
else nextConfig = await setupSkills(nextConfig, workspaceDir, runtime, prompter);
|
|
891
|
+
nextConfig = await setupInternalHooks(nextConfig, runtime, prompter);
|
|
892
|
+
nextConfig = applyWizardMetadata(nextConfig, {
|
|
893
|
+
command: "onboard",
|
|
894
|
+
mode
|
|
895
|
+
});
|
|
896
|
+
await writeConfigFile(nextConfig);
|
|
897
|
+
const { launchedTui } = await finalizeOnboardingWizard({
|
|
898
|
+
flow,
|
|
899
|
+
opts,
|
|
900
|
+
baseConfig,
|
|
901
|
+
nextConfig,
|
|
902
|
+
workspaceDir,
|
|
903
|
+
settings,
|
|
904
|
+
prompter,
|
|
905
|
+
runtime
|
|
906
|
+
});
|
|
907
|
+
if (launchedTui) return;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
//#endregion
|
|
911
|
+
export { runOnboardingWizard as t };
|