@fased/fased 0.1.20 → 0.1.23
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 +9 -2
- package/dist/{active-listener-B_AAz_Nv.js → active-listener-CILIY2ox.js} +1 -1
- package/dist/{agent-scope-Cb1u7HE7.js → agent-scope-DwKyukUg.js} +124 -124
- package/dist/{agents-ChQhgSlb.js → agents-J1fRpMRy.js} +10 -10
- package/dist/{attachment-normalize-Cr8RzfVf.js → attachment-normalize-CJWQWDbC.js} +1 -1
- package/dist/{attachment-normalize-DB19KLbl.js → attachment-normalize-Din9M1Y4.js} +1 -1
- package/dist/{audio-preflight-BLGP3XdB.js → audio-preflight-CiHBO6op.js} +31 -31
- package/dist/{audio-preflight-CHhcmiXJ.js → audio-preflight-D3I9e121.js} +4 -4
- package/dist/{audio-preflight-DAevycUR.js → audio-preflight-Dpmj_mYE.js} +1 -1
- package/dist/{audio-preflight-DVwcDm03.js → audio-preflight-fOBO0I4S.js} +4 -4
- package/dist/{audio-preflight-BmW52Ycp.js → audio-preflight-tHKngO6z.js} +1 -1
- package/dist/{audit-C5YXYuIL.js → audit-BGrhx_IL.js} +1 -1
- package/dist/{audit-DPnCY1UL.js → audit-DQyLAEfl.js} +1 -1
- package/dist/{auth-BbQxXxtt.js → auth-C4Rs_Ca4.js} +5 -5
- package/dist/{auth-choice-DRyuJ7OL.js → auth-choice-BTahePAl.js} +1 -1
- package/dist/{auth-choice-D8Q1fQwa.js → auth-choice-ioJ3htvR.js} +1 -1
- package/dist/{auth-choice-prompt-Bs_OE3ai.js → auth-choice-prompt-Cigxs_6f.js} +1 -1
- package/dist/{auth-choice-prompt-EOHB6Adp.js → auth-choice-prompt-Db0yW_LH.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +31 -31
- package/dist/bundled/bootstrap-extra-files/handler.js +3 -3
- package/dist/bundled/command-logger/handler.js +2 -2
- package/dist/bundled/session-memory/handler.js +31 -31
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-activity-DY_GHJwO.js → channel-activity-D17GYsMz.js} +1 -1
- package/dist/{channel-web-Do7PfpgZ.js → channel-web-CclBHrhb.js} +1 -1
- package/dist/{channel-web-BYwefJub.js → channel-web-DIRVjokt.js} +1 -1
- package/dist/{channels-Ca02RvCt.js → channels-A880gMB8.js} +8 -8
- package/dist/{channels-DrEj3b4G.js → channels-DWuoO75L.js} +8 -8
- package/dist/{channels-cli-b6IPejdy.js → channels-cli-54FnZFBp.js} +7 -7
- package/dist/{channels-cli-CCa-scQg.js → channels-cli-HVr7lRa7.js} +7 -7
- package/dist/{chunk-Cj87uJLo.js → chunk-DfA5CGzI.js} +1 -1
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-DXIWIIJj.js → cli-C8OGL6Ju.js} +4 -4
- package/dist/{cli-eje5udQT.js → cli-cnJ-Fwbu.js} +4 -4
- package/dist/{command-registry-Bs12xiCA.js → command-registry-BHCwSxmh.js} +10 -10
- package/dist/{commands-registry-Du1VUNqv.js → commands-registry-ShBrc7Zz.js} +1 -1
- package/dist/{completion-cli-Btcmy2ZS.js → completion-cli-BsgojaxZ.js} +2 -2
- package/dist/{completion-cli-RlpZaXwm.js → completion-cli-DuqDB42S.js} +1 -1
- package/dist/{config-cli-D-FqgnuJ.js → config-cli-B62owpbq.js} +1 -1
- package/dist/{config-cli-CTo8yFw1.js → config-cli-nRzwa31Y.js} +1 -1
- package/dist/{config-eval-BVvNsPGB.js → config-eval-B5XXAbrm.js} +3 -3
- package/dist/{configure-CLTc56jo.js → configure-ByLqSsRA.js} +14 -14
- package/dist/{configure-D0-Sq2kW.js → configure-CbMYLFUm.js} +14 -14
- package/dist/control-ui/assets/app-DXYMrRJ9.js.map +1 -1
- package/dist/{cron-cli-BstCBSyn.js → cron-cli-CLNLFdxi.js} +2 -2
- package/dist/{cron-cli-pA06wiEq.js → cron-cli-CM9CM1GR.js} +2 -2
- package/dist/{daemon-cli-DiuXEPjO.js → daemon-cli-9ids8mMV.js} +1 -1
- package/dist/{daemon-cli-cyqRsnTF.js → daemon-cli-w15TQchq.js} +1 -1
- package/dist/daemon-cli.js +1 -1
- package/dist/{deps-BKAIBkcE.js → deps-BVNeN6gT.js} +1 -1
- package/dist/{deps-BWo3ls9h.js → deps-Uo5boHSY.js} +1 -1
- package/dist/{diagnostic-D6XQAXl4.js → diagnostic-B4NKiC20.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +1 -1
- package/dist/{fetch-BKzFOgku.js → fetch-BH7uURYM.js} +1 -1
- package/dist/{fetch-guard-B3bzvmt4.js → fetch-guard-DqpQMLwE.js} +1 -1
- package/dist/{filesystem-manager-CrDoOIOx.js → filesystem-manager-DKU5F0fA.js} +4 -4
- package/dist/{fs-safe-DcQcXS6I.js → fs-safe-CwUdejUJ.js} +2 -2
- package/dist/{gateway-cli-izDCXWNN.js → gateway-cli-C9Os2Z5s.js} +30 -30
- package/dist/{gateway-cli-BbSS1Nxd.js → gateway-cli-CLFeYf4s.js} +30 -30
- package/dist/{github-copilot-token-DYrFvncE.js → github-copilot-token-eyrRGmGp.js} +8 -8
- package/dist/{health-DW5NMpNI.js → health-CghndVpq.js} +2 -2
- package/dist/{health-kF4U3o3b.js → health-GSYUFoyr.js} +2 -2
- package/dist/{heartbeat-runner-CJP5uO8S.js → heartbeat-runner-1b23y_3_.js} +1 -1
- package/dist/{heartbeat-runner-BnDruNG2.js → heartbeat-runner-DPtasJ9O.js} +1 -1
- package/dist/{hooks-cli-U5qCBqJm.js → hooks-cli-BXZ0yiOV.js} +5 -5
- package/dist/{hooks-cli-CSFuSiA5.js → hooks-cli-_VHugcqb.js} +5 -5
- package/dist/index.js +9 -9
- package/dist/{internal-B3yITtDC.js → internal-CU3wrcPl.js} +3 -3
- package/dist/{ipv4-B42xQEbV.js → ipv4-Cb1Ofo1o.js} +2 -2
- package/dist/{ipv4-DSDJ9Fn2.js → ipv4-h9TrAq_w.js} +2 -2
- package/dist/{lifecycle-Bbry4K-O.js → lifecycle-CBewhyXk.js} +1 -1
- package/dist/{lifecycle-BiNcSCVf.js → lifecycle-CV1zHjpj.js} +1 -1
- package/dist/{list.auth-overview-ByYcn7Ct.js → list.auth-overview-C8izvpBJ.js} +1 -1
- package/dist/{list.auth-overview-Di-jSuQF.js → list.auth-overview-CvPcpBIP.js} +1 -1
- package/dist/llm-slug-generator.js +31 -31
- package/dist/{login-BPi6GEMh.js → login-DmSOJJZh.js} +2 -2
- package/dist/{login-qr-BaJ9M5z6.js → login-qr-gY230e9k.js} +3 -3
- package/dist/{manager-C05ypUW3.js → manager-Cxjfnksb.js} +8 -8
- package/dist/{markdown-tables-CBLut_ie.js → markdown-tables-DFtTedxN.js} +1 -1
- package/dist/{media-DUBmlR9u.js → media-DZj8v0oe.js} +5 -5
- package/dist/{memory-search-tdsFhtIi.js → memory-search-BxRjHrXP.js} +2 -2
- package/dist/{model-catalog-ex4Cpln_.js → model-catalog-Iu_LUOVA.js} +10 -10
- package/dist/{models-BonzQ9Rv.js → models-DqMgO-Ak.js} +6 -6
- package/dist/{models-cli-Cc0fVKLR.js → models-cli-C7WASQac.js} +6 -6
- package/dist/{models-cli-DZ05AYqI.js → models-cli-D6H_Kt3i.js} +7 -7
- package/dist/{node-cli-CKXvITsL.js → node-cli-B8DI8VK2.js} +4 -4
- package/dist/{node-cli-Dfl7X414.js → node-cli-CGwktXpe.js} +4 -4
- package/dist/{onboard-BDK2o_5B.js → onboard-BR6vBv2I.js} +7 -7
- package/dist/{onboard-CpJeEn67.js → onboard-C-fjU4uC.js} +7 -7
- package/dist/{onboard-channels-ZnUGKi2j.js → onboard-channels-B3tCPpRS.js} +2 -2
- package/dist/{onboard-channels-CDXretWe.js → onboard-channels-C1UyGFfb.js} +2 -2
- package/dist/{onboard-search-BIltnW27.js → onboard-search-CjU6w3Sm.js} +7 -7
- package/dist/{onboard-search-HgNX3hct.js → onboard-search-Ds5KeCF_.js} +7 -7
- package/dist/{onboarding-CBlXOasA.js → onboarding-BL3becPO.js} +184 -38
- package/dist/{onboarding-Bgx1tJnU.js → onboarding-DGAQeYgr.js} +184 -38
- package/dist/{onboarding.wallet--7Yu2hFw.js → onboarding.wallet-B87UVKiT.js} +16 -10
- package/dist/{onboarding.wallet-CQG8MiG_.js → onboarding.wallet-BFJRJg77.js} +16 -10
- package/dist/{openresponses-http-COAxhJal.js → openresponses-http-Bcy1YyQY.js} +4 -4
- package/dist/{openresponses-http-5S3xc2MZ.js → openresponses-http-DIR_t4i1.js} +31 -31
- package/dist/{openresponses-http-BBNbIRzc.js → openresponses-http-DxsL0uBk.js} +1 -1
- package/dist/{openresponses-http-o273A5SH.js → openresponses-http-IVnQ_wz0.js} +4 -4
- package/dist/{openresponses-http-BTpFUwym.js → openresponses-http-Qb_KOtcX.js} +1 -1
- package/dist/{outbound-BF3W1nJQ.js → outbound-BtgGTj4E.js} +6 -6
- package/dist/{outbound-attachment-CZV6JZkx.js → outbound-attachment-NKTzAe-U.js} +2 -2
- package/dist/{parent-default-help-BwE33-U1.js → parent-default-help-BJGqN88G.js} +1 -1
- package/dist/{parent-default-help-DzWAx_GB.js → parent-default-help-XXsayZks.js} +1 -1
- package/dist/{path-alias-guards--dquYHnR.js → path-alias-guards-BgsM3Cb3.js} +1 -1
- package/dist/{paths-BGX-IMoI.js → paths-57KGLbK2.js} +22 -22
- package/dist/{pi-embedded-CeuBUTjd.js → pi-embedded-CZAiurHo.js} +5 -5
- package/dist/{pi-embedded-Bnuo5tPq.js → pi-embedded-qk5CdQmR.js} +239 -239
- package/dist/{pi-model-discovery-DYwyxntg.js → pi-model-discovery-CfcnLOyX.js} +7 -7
- package/dist/pi-model-discovery-runtime-D85aZCOu.js +5 -0
- package/dist/{plugin-registry-DjTXh-9g.js → plugin-registry-Bw0a_OGC.js} +1 -1
- package/dist/{plugin-registry-D2IeEq2N.js → plugin-registry-Dqk6vxYj.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-CVWduuEO.js → audio-preflight-BO8XDtTk.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-CdPkTmJX.js → audio-preflight-DK-6iXZY.js} +1 -1
- package/dist/plugin-sdk/{channel-web-oM8gCehY.js → channel-web-DgXfvJo-.js} +1 -1
- package/dist/plugin-sdk/command-status.js +1 -1
- package/dist/plugin-sdk/index.js +2 -2
- package/dist/plugin-sdk/{openresponses-http-C_9IfZXZ.js → openresponses-http-DBFqruTK.js} +1 -1
- package/dist/plugin-sdk/{openresponses-http-_SiZJaK2.js → openresponses-http-RBdNxv8F.js} +1 -1
- package/dist/plugin-sdk/{reply-e-9_IdAa.js → reply-Bb9pzXn4.js} +5 -5
- package/dist/plugin-sdk/src/brand.d.ts +2 -2
- package/dist/plugin-sdk/{status-D_fsW8e3.js → status-CHo58oXD.js} +5 -5
- package/dist/plugin-sdk/{web-BL2TuPTi.js → web-B-fwFsth.js} +1 -1
- package/dist/plugin-sdk/{web-CaVSiRWI.js → web-BIIifta2.js} +2 -2
- package/dist/{plugins-cli-BMV70lmj.js → plugins-cli-BKlKaixI.js} +7 -7
- package/dist/{plugins-cli-Bf0I1xYR.js → plugins-cli-dvRFoJCC.js} +7 -7
- package/dist/{program-CZzXG3p4.js → program-P-9mYfYw.js} +9 -9
- package/dist/{program-context-CaLlkx1k.js → program-context-DZ2qDI4u.js} +25 -25
- package/dist/{prompt-select-styled-Cj_SHqRt.js → prompt-select-styled-CdVuqLJH.js} +4 -4
- package/dist/{prompt-select-styled-DVwrrZSb.js → prompt-select-styled-DHjjwvXl.js} +4 -4
- package/dist/{pw-ai-42y3optV.js → pw-ai-CmgZwdpF.js} +5 -5
- package/dist/{qmd-manager-BPz-XVY5.js → qmd-manager-B4jAaAzx.js} +5 -5
- package/dist/{qmd-scope-D2okAldm.js → qmd-scope-BdblEj4C.js} +1 -1
- package/dist/{query-expansion-f4DE13gJ.js → query-expansion-JhTilyB1.js} +2 -2
- package/dist/{register.agent-D0ZpgSNd.js → register.agent-Be3pMMEj.js} +10 -10
- package/dist/{register.agent-C-bHdMXU.js → register.agent-rgc26ryI.js} +11 -11
- package/dist/{register.configure-B0PTAyow.js → register.configure-BKYZzj-a.js} +14 -14
- package/dist/{register.configure-B51e7-qt.js → register.configure-DUgwZXRG.js} +14 -14
- package/dist/{register.maintenance-B3cXfhM1.js → register.maintenance-CEB2_x4K.js} +10 -10
- package/dist/{register.maintenance-BrmIl5VW.js → register.maintenance-OE1jM64G.js} +11 -11
- package/dist/{register.message-EKaGgJ9I.js → register.message-CUE4ZFjr.js} +5 -5
- package/dist/{register.message-Dzs1vNKG.js → register.message-vxrokTGv.js} +5 -5
- package/dist/{register.onboard-DmFrOBs4.js → register.onboard-Cyymwvc3.js} +16 -16
- package/dist/{register.onboard-BFPT0Hh1.js → register.onboard-Dg3786vL.js} +16 -16
- package/dist/{register.setup-B0beU4w3.js → register.setup-B6uH9Fkv.js} +16 -16
- package/dist/{register.setup-5M8f6DaB.js → register.setup-BNk3o4bu.js} +16 -16
- package/dist/{register.status-health-sessions-9GJwT82K.js → register.status-health-sessions-DXgm8jTd.js} +8 -8
- package/dist/{register.status-health-sessions-CEIpWahs.js → register.status-health-sessions-n5YTxXMt.js} +8 -8
- package/dist/{register.subclis-C3yGp0vO.js → register.subclis-h2rwp41b.js} +16 -16
- package/dist/{replies-Bn06Bh1x.js → replies-afs2sQ1G.js} +2 -2
- package/dist/{reply-B034LmuD.js → reply-C6zXCUnw.js} +10 -10
- package/dist/{reply-prefix-DwrVxkMY.js → reply-prefix-CG0zciBg.js} +1 -1
- package/dist/{resolve-route-B4dOoe-E.js → resolve-route-DZkIcri6.js} +1 -1
- package/dist/{run-main-DYdI5qyZ.js → run-main-BW1xk67k.js} +16 -16
- package/dist/{runtime-helper-grants-BB9I81Ny.js → runtime-helper-grants-BotyKHoQ.js} +1 -1
- package/dist/{runtime-helper-grants-9-0EfflU.js → runtime-helper-grants-DlthXnch.js} +1 -1
- package/dist/{sandbox-cli-Bl9Lyv-l.js → sandbox-cli-B74LKmmu.js} +4 -4
- package/dist/{sandbox-cli-CAh9nzL6.js → sandbox-cli-DVrOgz6X.js} +4 -4
- package/dist/{security-cli-lQy0YwCb.js → security-cli-B_v3gSPc.js} +5 -5
- package/dist/{security-cli-Bt7g6fbK.js → security-cli-DUh-3-R1.js} +5 -5
- package/dist/{send-vR6HwT94.js → send-CABrQiXU.js} +4 -4
- package/dist/{send-BQMxv218.js → send-CUYy-rA3.js} +7 -7
- package/dist/{send-kLcLFjb8.js → send-DE1no-h6.js} +5 -5
- package/dist/{send-BsajjIj8.js → send-iIy3frXq.js} +5 -5
- package/dist/{send-Da1hCe1A.js → send-lQXOUIaW.js} +18 -18
- package/dist/{server-BKrGeOGh.js → server-BWmtB5RG.js} +4 -4
- package/dist/{server-CES-5PaV.js → server-CVXoSpqC.js} +4 -4
- package/dist/{server-cron-q6O09WWT.js → server-cron-D0oLzDes.js} +2 -2
- package/dist/{server-cron-D3WgivDk.js → server-cron-DBSvrOWz.js} +2 -2
- package/dist/{server-node-events-Df_2uVcT.js → server-node-events-BGkUHSkq.js} +5 -5
- package/dist/{server-node-events-DE5oWSSB.js → server-node-events-TmYB-LGW.js} +5 -5
- package/dist/{session-ZMAktQw4.js → session-TK9Idt8g.js} +5 -5
- package/dist/{skill-commands-BP6zVlmg.js → skill-commands-CCjZMCdx.js} +24 -24
- package/dist/{status-CqIzNbBd.js → status-C1qehkux.js} +1 -1
- package/dist/{status-DrXKyHMz.js → status-CGYle9wh.js} +4 -4
- package/dist/{status-CdI_oSZ4.js → status-DVTZ42Xi.js} +1 -1
- package/dist/{status-ne0p_x1W.js → status-hNS_-DU5.js} +4 -4
- package/dist/{tables-DMwrn7NN.js → tables-H4kq3TrS.js} +1 -1
- package/dist/{target-errors-CR_hozUt.js → target-errors-9BsSMzQY.js} +2 -2
- package/dist/{tool-loop-detection-DZ-oTJiQ.js → tool-loop-detection-D4MYRJWP.js} +2 -2
- package/dist/{tui-CLXEsHbW.js → tui-ARPlmctm.js} +1 -1
- package/dist/{tui-CF9NTWgo.js → tui-D6_aw9hu.js} +1 -1
- package/dist/{tui-cli-Bo8T0iEO.js → tui-cli-CDBUp2y3.js} +5 -5
- package/dist/{tui-cli-DIHJPDjw.js → tui-cli-CYkhnUmj.js} +5 -5
- package/dist/{update-cli-pAvK-b3V.js → update-cli-CVPEyzw1.js} +12 -12
- package/dist/{update-cli-RA5GdCSl.js → update-cli-ChNYv3li.js} +11 -11
- package/dist/{update-runner-CUbpiOBD.js → update-runner-CMe4a4QF.js} +1 -1
- package/dist/{update-runner-kVl9uX8I.js → update-runner-dCQywbJs.js} +1 -1
- package/dist/{wallet-C95r3fvu.js → wallet-CJdBRqTq.js} +1 -1
- package/dist/{wallet-BguV7zPF.js → wallet-DZA0r3pV.js} +1 -1
- package/dist/{web-D7NnzaWN.js → web-BIREWy8I.js} +35 -35
- package/dist/{web-CFtLg8L6.js → web-Bly-ch0b.js} +1 -1
- package/dist/{web-R6Wrr8ru.js → web-BvK9MRcp.js} +1 -1
- package/dist/{web-CRHqblTb.js → web-CCLojlog.js} +5 -5
- package/dist/{web-BSGV69pb.js → web-CvJzsQ59.js} +5 -5
- package/dist/{web-search-providers.runtime-BQw2Sxko.js → web-search-providers.runtime-BCjJQLBJ.js} +1 -1
- package/dist/{web-search-providers.runtime-E9CDTKMh.js → web-search-providers.runtime-DCy32Tl0.js} +1 -1
- package/dist/{whatsapp-actions-favixTth.js → whatsapp-actions-C0w9GEJM.js} +12 -12
- package/docs/install/index.md +8 -1
- package/docs/install/installer.md +9 -6
- package/docs/install/vps.md +9 -2
- package/docs/start/wizard.md +9 -2
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +18 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +18 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +18 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +18 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +18 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +18 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +18 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/scripts/start-managed.sh +9 -4
- package/dist/pi-model-discovery-runtime-BhaI9PU2.js +0 -5
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { _ as resolveStateDir, u as resolveGatewayPort } from "./paths-C9FmTW1x.js";
|
|
2
2
|
import { S as resolveUserPath, U as theme } from "./agent-paths-DmOVZE7g.js";
|
|
3
3
|
import { Ga as ensureAuthProfileStore, Mn as writeConfigFile, Zr as collectConfigServiceEnvVars, d as resolveDefaultAgentId, dd as formatCliCommand, fr as ensureActiveMemoryPluginAllowlisted, kn as readConfigFileSnapshot, u as resolveAgentWorkspaceDir } from "./agent-scope-DHrLr5OF.js";
|
|
4
|
-
import { Bt as detectBrowserOpenSupport, Ht as formatControlUiSshHint, Jt as openUrl, Lt as DEFAULT_WORKSPACE, Mo as runFederationAutoConnectOnce, Qo as findTailscaleBinary, Qt as resolveControlUiLinks, Rt as applyWizardMetadata, Vt as ensureWorkspaceAndSessions, Wt as handleOnboardingRepair, Xo as enableTailscaleFunnel, Xt as probeGatewayReachable, Yt as printWizardHeader, Zo as enableTailscaleServe, Zt as randomToken, en as summarizeExistingConfig, nn as waitForGatewayReachable, qt as normalizeGatewayTokenInput, tn as validateGatewayPasswordInput, xo as normalizeControlUiBasePath, yo as CONTROL_UI_BOOT_CHECK_PATH } from "./reply-
|
|
4
|
+
import { Bt as detectBrowserOpenSupport, Ht as formatControlUiSshHint, Jt as openUrl, Lt as DEFAULT_WORKSPACE, Mo as runFederationAutoConnectOnce, Qo as findTailscaleBinary, Qt as resolveControlUiLinks, Rt as applyWizardMetadata, Vt as ensureWorkspaceAndSessions, Wt as handleOnboardingRepair, Xo as enableTailscaleFunnel, Xt as probeGatewayReachable, Yt as printWizardHeader, Zo as enableTailscaleServe, Zt as randomToken, en as summarizeExistingConfig, nn as waitForGatewayReachable, qt as normalizeGatewayTokenInput, tn as validateGatewayPasswordInput, xo as normalizeControlUiBasePath, yo as CONTROL_UI_BOOT_CHECK_PATH } from "./reply-C6zXCUnw.js";
|
|
5
5
|
import { d as defaultRuntime, f as restoreTerminalState, s as redactSensitiveText } from "./errors-Dx3S3Nrp.js";
|
|
6
|
-
import { a as resolveSignerdBinaryPath, n as installSignerdBinary, o as restartLocalSocketSigner, r as migrateLocalSignerKeystoreToMaterialDir, t as configureWalletForOnboarding } from "./onboarding.wallet-
|
|
6
|
+
import { a as resolveSignerdBinaryPath, n as installSignerdBinary, o as restartLocalSocketSigner, r as migrateLocalSignerKeystoreToMaterialDir, t as configureWalletForOnboarding } from "./onboarding.wallet-BFJRJg77.js";
|
|
7
7
|
import { i as resolveLocalSignerRunAsUser, n as resolveLocalSignerBackendSocketPath, o as resolveLocalSignerSocketPath, r as resolveLocalSignerMaterialRootDir, t as ensureWalletStateDir } from "./wallet-runtime-config-BlRWvEER.js";
|
|
8
8
|
import { a as readWalletProviderRegistry, l as setDefaultWallet, n as checkNamedWalletDeletionSafety, p as upsertNamedWallet, r as deleteNamedWallet, s as resolveWalletUserRole, u as setNamedWalletRole } from "./wallet-provider-registry-ax0NJo0F.js";
|
|
9
9
|
import { n as redactSensitiveUrlLikeString } from "./redact-sensitive-url-B0RJQqO7.js";
|
|
10
|
-
import { C as walletSetupCommand, k as readWalletStatusSnapshot, t as collectWalletSignerDoctorReport } from "./wallet-
|
|
10
|
+
import { C as walletSetupCommand, k as readWalletStatusSnapshot, t as collectWalletSignerDoctorReport } from "./wallet-DZA0r3pV.js";
|
|
11
11
|
import { c as loadPersistedFederationToken, i as resolveFederationBaseUrl, o as resolveFederationHandle, t as DEFAULT_FEDERATION_BASE_URL } from "./runtime-bsvPuEXH.js";
|
|
12
12
|
import { t as readManagedFederationTokenSummary } from "./federation-BrNm7xtG.js";
|
|
13
13
|
import { or as clearDeviceAuthStore } from "./call-DDALpDwS.js";
|
|
@@ -17,14 +17,14 @@ import { a as resolveHostedOnboardingGatewayStartupMode, i as resolveGatewayStar
|
|
|
17
17
|
import { d as buildSystemdUnit, r as isSystemdUserServiceAvailable } from "./systemd-CmxDYXvt.js";
|
|
18
18
|
import { t as resolveGatewayService } from "./service-Bsg622jp.js";
|
|
19
19
|
import { n as auditGatewayServiceConfig, t as SERVICE_AUDIT_CODES } from "./service-audit-BRLbvcxT.js";
|
|
20
|
-
import { a as promptRemoteGatewayConfig, n as getTailscaleMissingBinNoteLines, r as setupSkills, t as validateIPv4AddressInput, u as promptCustomApiConfig } from "./ipv4-
|
|
21
|
-
import { o as waitForHostedDashboardBrowserPath } from "./health-
|
|
22
|
-
import { n as warnIfModelConfigLooksOff, r as applyAuthChoice } from "./auth-choice-
|
|
23
|
-
import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-
|
|
20
|
+
import { a as promptRemoteGatewayConfig, n as getTailscaleMissingBinNoteLines, r as setupSkills, t as validateIPv4AddressInput, u as promptCustomApiConfig } from "./ipv4-Cb1Ofo1o.js";
|
|
21
|
+
import { o as waitForHostedDashboardBrowserPath } from "./health-GSYUFoyr.js";
|
|
22
|
+
import { n as warnIfModelConfigLooksOff, r as applyAuthChoice } from "./auth-choice-BTahePAl.js";
|
|
23
|
+
import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-Db0yW_LH.js";
|
|
24
24
|
import { n as logConfigUpdated } from "./logging-Dv2wthF_.js";
|
|
25
|
-
import { n as setupChannels } from "./onboard-channels-
|
|
25
|
+
import { n as setupChannels } from "./onboard-channels-B3tCPpRS.js";
|
|
26
26
|
import { t as buildWorkspaceHookStatus } from "./hooks-status-BielXMUB.js";
|
|
27
|
-
import { t as runTui } from "./tui-
|
|
27
|
+
import { t as runTui } from "./tui-D6_aw9hu.js";
|
|
28
28
|
import fs from "node:fs";
|
|
29
29
|
import os from "node:os";
|
|
30
30
|
import path from "node:path";
|
|
@@ -32,6 +32,7 @@ import fs$1 from "node:fs/promises";
|
|
|
32
32
|
import { spawn, spawnSync } from "node:child_process";
|
|
33
33
|
import { Writable } from "node:stream";
|
|
34
34
|
import net from "node:net";
|
|
35
|
+
import { Buffer as Buffer$1 } from "node:buffer";
|
|
35
36
|
|
|
36
37
|
//#region src/commands/onboard-config.ts
|
|
37
38
|
const ONBOARDING_DEFAULT_DM_SCOPE = "per-channel-peer";
|
|
@@ -1664,7 +1665,7 @@ async function finalizeOnboardingWizard(options) {
|
|
|
1664
1665
|
if (process.platform === "linux") {
|
|
1665
1666
|
const localSignerSync = resolveLocalSignerSyncForFinalize({ strictVps });
|
|
1666
1667
|
if (localSignerSync.sync) try {
|
|
1667
|
-
const { syncLocalSocketSignerFromConfig } = await import("./onboarding.wallet-
|
|
1668
|
+
const { syncLocalSocketSignerFromConfig } = await import("./onboarding.wallet-BFJRJg77.js").then((n) => n.i);
|
|
1668
1669
|
await syncLocalSocketSignerFromConfig({
|
|
1669
1670
|
config: nextConfig,
|
|
1670
1671
|
env: process.env,
|
|
@@ -3001,9 +3002,10 @@ function formatLocalDeviceTailnetRequirementNote() {
|
|
|
3001
3002
|
""
|
|
3002
3003
|
].join("\n");
|
|
3003
3004
|
}
|
|
3004
|
-
function formatTailnetSshVerificationNote(target) {
|
|
3005
|
+
function formatTailnetSshVerificationNote(target, method = "ssh-key") {
|
|
3005
3006
|
const pingTargets = [target.host, target.ipv4 && target.ipv4 !== target.host ? target.ipv4 : void 0].filter((value) => Boolean(value));
|
|
3006
3007
|
const sshTargets = pingTargets;
|
|
3008
|
+
const sshCommands = method === "tailscale-ssh" ? sshTargets.map((host) => `tailscale ssh ${target.user}@${host}`) : sshTargets.map((host) => `ssh ${target.user}@${host}`);
|
|
3007
3009
|
return [
|
|
3008
3010
|
noteStep(1, "Check visibility"),
|
|
3009
3011
|
"Run on your own computer:",
|
|
@@ -3016,32 +3018,150 @@ function formatTailnetSshVerificationNote(target) {
|
|
|
3016
3018
|
"",
|
|
3017
3019
|
noteStep(2, "SSH into VPS"),
|
|
3018
3020
|
"Run one command:",
|
|
3019
|
-
...
|
|
3021
|
+
...method === "tailscale-ssh" ? ["No app SSH key was found on this VPS.", "Use Tailscale SSH from your own Tailscale-connected computer:"] : [],
|
|
3022
|
+
...noteCommands(sshCommands),
|
|
3020
3023
|
`Continue only after SSH opens in ${target.repoDir}.`,
|
|
3021
3024
|
"",
|
|
3022
3025
|
noteHeading("Fallback"),
|
|
3023
|
-
noteWarn("If hostname lookup fails, keep the other VPN off and use the `100.x.x.x` command.")
|
|
3026
|
+
noteWarn(method === "tailscale-ssh" ? "If Tailscale SSH is unavailable in your tailnet, choose the SSH public key fallback." : "If hostname lookup fails, keep the other VPN off and use the `100.x.x.x` command.")
|
|
3024
3027
|
].join("\n");
|
|
3025
3028
|
}
|
|
3029
|
+
function formatTailnetSshPublicKeyNote(target) {
|
|
3030
|
+
return [
|
|
3031
|
+
noteStep(1, "Find your public key"),
|
|
3032
|
+
"Use this fallback only when Tailscale SSH is unavailable in your tailnet.",
|
|
3033
|
+
"Do this on your own computer while this VPS installer stays open.",
|
|
3034
|
+
...noteCommands(["cat ~/.ssh/id_ed25519.pub", "type $env:USERPROFILE\\.ssh\\id_ed25519.pub"]),
|
|
3035
|
+
noteWarn("Paste a `.pub` key only. Never paste a private key."),
|
|
3036
|
+
"",
|
|
3037
|
+
noteStep(2, "Create one if needed"),
|
|
3038
|
+
"Run this on your own computer, then paste the `.pub` line here:",
|
|
3039
|
+
...noteCommands(["ssh-keygen -t ed25519 -C \"fased-vps\" -f ~/.ssh/id_ed25519"]),
|
|
3040
|
+
"",
|
|
3041
|
+
noteStep(3, "What Fased will do"),
|
|
3042
|
+
`Install that public key for ${target.user} at /home/${target.user}/.ssh/authorized_keys.`,
|
|
3043
|
+
"Then you will test regular SSH over Tailscale before root/password access is locked down."
|
|
3044
|
+
].join("\n");
|
|
3045
|
+
}
|
|
3046
|
+
function normalizeSshPublicKeys(input) {
|
|
3047
|
+
const acceptedTypes = new Set([
|
|
3048
|
+
"ecdsa-sha2-nistp256",
|
|
3049
|
+
"ecdsa-sha2-nistp384",
|
|
3050
|
+
"ecdsa-sha2-nistp521",
|
|
3051
|
+
"sk-ecdsa-sha2-nistp256@openssh.com",
|
|
3052
|
+
"sk-ssh-ed25519@openssh.com",
|
|
3053
|
+
"ssh-ed25519",
|
|
3054
|
+
"ssh-rsa"
|
|
3055
|
+
]);
|
|
3056
|
+
const lines = input.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
|
|
3057
|
+
if (lines.length === 0) return {
|
|
3058
|
+
ok: false,
|
|
3059
|
+
keys: [],
|
|
3060
|
+
detail: "Paste one SSH public key line."
|
|
3061
|
+
};
|
|
3062
|
+
if (lines.some((line) => /^-{5}BEGIN\b/i.test(line) || /PRIVATE KEY/i.test(line))) return {
|
|
3063
|
+
ok: false,
|
|
3064
|
+
keys: [],
|
|
3065
|
+
detail: "That looks like a private key. Paste the `.pub` key only."
|
|
3066
|
+
};
|
|
3067
|
+
const normalized = [];
|
|
3068
|
+
for (const line of lines) {
|
|
3069
|
+
const parts = line.split(/\s+/);
|
|
3070
|
+
const keyType = parts[0] ?? "";
|
|
3071
|
+
const keyBody = parts[1] ?? "";
|
|
3072
|
+
if (!acceptedTypes.has(keyType) || !/^[A-Za-z0-9+/]+={0,3}$/.test(keyBody)) return {
|
|
3073
|
+
ok: false,
|
|
3074
|
+
keys: [],
|
|
3075
|
+
detail: "Paste a valid OpenSSH public key, for example `ssh-ed25519 AAAA... user@computer`."
|
|
3076
|
+
};
|
|
3077
|
+
normalized.push(parts.join(" "));
|
|
3078
|
+
}
|
|
3079
|
+
return {
|
|
3080
|
+
ok: true,
|
|
3081
|
+
keys: Array.from(new Set(normalized))
|
|
3082
|
+
};
|
|
3083
|
+
}
|
|
3084
|
+
function buildInstallTailnetSshAuthorizedKeysCommand(target, keys) {
|
|
3085
|
+
const sshDir = `/home/${target.user}/.ssh`;
|
|
3086
|
+
const authorizedKeys = `${sshDir}/authorized_keys`;
|
|
3087
|
+
const encodedKeys = Buffer$1.from(`${keys.join("\n")}\n`, "utf8").toString("base64");
|
|
3088
|
+
return [
|
|
3089
|
+
"set -e",
|
|
3090
|
+
"umask 077",
|
|
3091
|
+
`mkdir -p ${shellQuote(sshDir)}`,
|
|
3092
|
+
"tmp_keys=\"$(mktemp)\"",
|
|
3093
|
+
"tmp_merged=\"$(mktemp)\"",
|
|
3094
|
+
`printf '%s' ${shellQuote(encodedKeys)} | base64 -d > "$tmp_keys"`,
|
|
3095
|
+
`{ cat ${shellQuote(authorizedKeys)} 2>/dev/null || true; cat "$tmp_keys"; } | awk 'NF { print }' | sort -u > "$tmp_merged"`,
|
|
3096
|
+
`install -m 600 "$tmp_merged" ${shellQuote(authorizedKeys)}`,
|
|
3097
|
+
`chmod 700 ${shellQuote(sshDir)}`,
|
|
3098
|
+
`chmod 600 ${shellQuote(authorizedKeys)}`,
|
|
3099
|
+
"rm -f \"$tmp_keys\" \"$tmp_merged\""
|
|
3100
|
+
].join("\n");
|
|
3101
|
+
}
|
|
3102
|
+
async function ensureTailnetSshAuthorizedKeys(params) {
|
|
3103
|
+
const { target, logPath, runtime, prompter, runner } = params;
|
|
3104
|
+
const authorizedKeys = `/home/${target.user}/.ssh/authorized_keys`;
|
|
3105
|
+
if (runner(`test -s ${shellQuote(authorizedKeys)}`, logPath).ok) return true;
|
|
3106
|
+
await prompter.note(formatTailnetSshPublicKeyNote(target), "SSH key fallback");
|
|
3107
|
+
const parsed = normalizeSshPublicKeys(await prompter.text({
|
|
3108
|
+
message: `Paste the SSH public key to install for ${target.user}`,
|
|
3109
|
+
placeholder: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... user@computer",
|
|
3110
|
+
validate: (value) => {
|
|
3111
|
+
const parsed = normalizeSshPublicKeys(value);
|
|
3112
|
+
return parsed.ok ? void 0 : parsed.detail;
|
|
3113
|
+
}
|
|
3114
|
+
}));
|
|
3115
|
+
if (!parsed.ok) {
|
|
3116
|
+
runtime.error("Hosting setup stopped before SSH/firewall lock-down.");
|
|
3117
|
+
runtime.error(parsed.detail);
|
|
3118
|
+
runtime.error(`Host hardening log: ${logPath}`);
|
|
3119
|
+
runtime.exit(1);
|
|
3120
|
+
return false;
|
|
3121
|
+
}
|
|
3122
|
+
const installResult = runner(buildInstallTailnetSshAuthorizedKeysCommand(target, parsed.keys), logPath);
|
|
3123
|
+
if (!installResult.ok) {
|
|
3124
|
+
runtime.error("Hosting setup stopped before SSH/firewall lock-down.");
|
|
3125
|
+
runtime.error(`Could not install SSH public key for ${target.user}: ${authorizedKeys}`);
|
|
3126
|
+
runtime.error(installResult.detail ?? "unknown SSH key install error");
|
|
3127
|
+
runtime.error(`Host hardening log: ${logPath}`);
|
|
3128
|
+
runtime.exit(1);
|
|
3129
|
+
return false;
|
|
3130
|
+
}
|
|
3131
|
+
if (!runner(`test -s ${shellQuote(authorizedKeys)}`, logPath).ok) {
|
|
3132
|
+
runtime.error("Hosting setup stopped before SSH/firewall lock-down.");
|
|
3133
|
+
runtime.error(`SSH public key was not written for ${target.user}: ${authorizedKeys}`);
|
|
3134
|
+
runtime.error(`Host hardening log: ${logPath}`);
|
|
3135
|
+
runtime.exit(1);
|
|
3136
|
+
return false;
|
|
3137
|
+
}
|
|
3138
|
+
appendHostSecurityLog(logPath, "tailnet ssh public key installed", `installed ${parsed.keys.length} public key(s) for ${target.user}: ${authorizedKeys}`);
|
|
3139
|
+
return true;
|
|
3140
|
+
}
|
|
3026
3141
|
function verifyTailnetSshServerPrerequisites(params) {
|
|
3027
3142
|
const runner = params.runner ?? run;
|
|
3028
3143
|
const target = params.target;
|
|
3029
3144
|
const checks = [];
|
|
3030
3145
|
const failures = [];
|
|
3146
|
+
let method = "tailscale-ssh";
|
|
3031
3147
|
if (runner(`test -d ${shellQuote(target.repoDir)}`, params.logPath).ok) checks.push(`repo directory ready: ${target.repoDir}`);
|
|
3032
3148
|
else failures.push(`missing app repo directory: ${target.repoDir}`);
|
|
3033
3149
|
const authorizedKeys = `/home/${target.user}/.ssh/authorized_keys`;
|
|
3034
|
-
if (runner(`test -s ${shellQuote(authorizedKeys)}`, params.logPath).ok)
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3150
|
+
if (runner(`test -s ${shellQuote(authorizedKeys)}`, params.logPath).ok) {
|
|
3151
|
+
method = "ssh-key";
|
|
3152
|
+
checks.push(`SSH keys ready: ${authorizedKeys}`);
|
|
3153
|
+
if (runner("systemctl is-active --quiet ssh || systemctl is-active --quiet sshd || sudo -n systemctl is-active --quiet ssh || sudo -n systemctl is-active --quiet sshd", params.logPath).ok) checks.push("OS SSH service active");
|
|
3154
|
+
else failures.push("OS SSH service is not active");
|
|
3155
|
+
} else checks.push(`no app SSH keys at ${authorizedKeys}; using Tailscale SSH`);
|
|
3038
3156
|
if (failures.length > 0) return {
|
|
3039
3157
|
ok: false,
|
|
3040
|
-
detail: failures.join("\n")
|
|
3158
|
+
detail: failures.join("\n"),
|
|
3159
|
+
method
|
|
3041
3160
|
};
|
|
3042
3161
|
return {
|
|
3043
3162
|
ok: true,
|
|
3044
|
-
detail: checks.join("\n")
|
|
3163
|
+
detail: checks.join("\n"),
|
|
3164
|
+
method
|
|
3045
3165
|
};
|
|
3046
3166
|
}
|
|
3047
3167
|
function ensureTailnetSshIngressForVerification(params) {
|
|
@@ -3075,8 +3195,9 @@ function hasExplicitTailnetSshConfirmation(env = process.env) {
|
|
|
3075
3195
|
}
|
|
3076
3196
|
function failTailnetSshConfirmation(params) {
|
|
3077
3197
|
const { runtime, logPath, target } = params;
|
|
3198
|
+
const commandPrefix = params.method === "tailscale-ssh" ? "tailscale ssh" : "ssh";
|
|
3078
3199
|
runtime.error("Hosting setup stopped before SSH/firewall lock-down.");
|
|
3079
|
-
runtime.error(`Confirm SSH over Tailscale first:
|
|
3200
|
+
runtime.error(`Confirm SSH over Tailscale first: ${commandPrefix} ${target.user}@${target.host}`);
|
|
3080
3201
|
runtime.error(`Expected app repo directory after login: ${target.repoDir}`);
|
|
3081
3202
|
runtime.error(`Host hardening log: ${logPath}`);
|
|
3082
3203
|
runtime.exit(1);
|
|
@@ -3095,10 +3216,16 @@ async function confirmTailnetSshBeforeLockdown(params) {
|
|
|
3095
3216
|
return true;
|
|
3096
3217
|
}
|
|
3097
3218
|
if (!prompter || opts.nonInteractive === true) {
|
|
3219
|
+
const serverPrereqs = verifyTailnetSshServerPrerequisites({
|
|
3220
|
+
target,
|
|
3221
|
+
logPath,
|
|
3222
|
+
runner
|
|
3223
|
+
});
|
|
3098
3224
|
failTailnetSshConfirmation({
|
|
3099
3225
|
runtime,
|
|
3100
3226
|
logPath,
|
|
3101
|
-
target
|
|
3227
|
+
target,
|
|
3228
|
+
method: serverPrereqs.method
|
|
3102
3229
|
});
|
|
3103
3230
|
return false;
|
|
3104
3231
|
}
|
|
@@ -3116,20 +3243,22 @@ async function confirmTailnetSshBeforeLockdown(params) {
|
|
|
3116
3243
|
return false;
|
|
3117
3244
|
}
|
|
3118
3245
|
appendHostSecurityLog(logPath, "tailnet ssh server prerequisites", serverPrereqs.detail);
|
|
3119
|
-
|
|
3120
|
-
|
|
3121
|
-
|
|
3122
|
-
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
|
|
3127
|
-
|
|
3128
|
-
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
3132
|
-
|
|
3246
|
+
if (serverPrereqs.method === "ssh-key") {
|
|
3247
|
+
const ingress = ensureTailnetSshIngressForVerification({
|
|
3248
|
+
logPath,
|
|
3249
|
+
runner
|
|
3250
|
+
});
|
|
3251
|
+
if (!ingress.ok) {
|
|
3252
|
+
runtime.error("Hosting setup stopped before SSH/firewall lock-down.");
|
|
3253
|
+
runtime.error("Could not prepare the tailnet-only SSH firewall rule required for verification.");
|
|
3254
|
+
runtime.error(ingress.detail ?? "unknown firewall error");
|
|
3255
|
+
runtime.error(`Host hardening log: ${logPath}`);
|
|
3256
|
+
runtime.exit(1);
|
|
3257
|
+
return false;
|
|
3258
|
+
}
|
|
3259
|
+
appendHostSecurityLog(logPath, "tailnet ssh ingress prepared for verification", ingress.detail);
|
|
3260
|
+
} else appendHostSecurityLog(logPath, "tailnet ssh verification mode", "using Tailscale SSH because app authorized_keys is empty");
|
|
3261
|
+
await prompter.note(formatTailnetSshVerificationNote(target, serverPrereqs.method), "Verify SSH over Tailscale");
|
|
3133
3262
|
if (!await prompter.confirm({
|
|
3134
3263
|
message: "Did tailscale ping find this VPS from your own computer?",
|
|
3135
3264
|
initialValue: false
|
|
@@ -3141,7 +3270,8 @@ async function confirmTailnetSshBeforeLockdown(params) {
|
|
|
3141
3270
|
failTailnetSshConfirmation({
|
|
3142
3271
|
runtime,
|
|
3143
3272
|
logPath,
|
|
3144
|
-
target
|
|
3273
|
+
target,
|
|
3274
|
+
method: serverPrereqs.method
|
|
3145
3275
|
});
|
|
3146
3276
|
return false;
|
|
3147
3277
|
}
|
|
@@ -3164,13 +3294,29 @@ async function confirmTailnetSshBeforeLockdown(params) {
|
|
|
3164
3294
|
continue;
|
|
3165
3295
|
}
|
|
3166
3296
|
if (!await prompter.confirm({
|
|
3167
|
-
message: `Did SSH over Tailscale connect as ${target.user} and open ${target.repoDir}?`,
|
|
3297
|
+
message: serverPrereqs.method === "tailscale-ssh" ? `Did Tailscale SSH connect as ${target.user} and open ${target.repoDir}?` : `Did SSH over Tailscale connect as ${target.user} and open ${target.repoDir}?`,
|
|
3168
3298
|
initialValue: false
|
|
3169
3299
|
})) {
|
|
3300
|
+
if (serverPrereqs.method === "tailscale-ssh") {
|
|
3301
|
+
if (await prompter.confirm({
|
|
3302
|
+
message: "Use SSH public key fallback instead?",
|
|
3303
|
+
initialValue: false
|
|
3304
|
+
})) {
|
|
3305
|
+
if (!await ensureTailnetSshAuthorizedKeys({
|
|
3306
|
+
target,
|
|
3307
|
+
logPath,
|
|
3308
|
+
runtime,
|
|
3309
|
+
prompter,
|
|
3310
|
+
runner
|
|
3311
|
+
})) return false;
|
|
3312
|
+
continue;
|
|
3313
|
+
}
|
|
3314
|
+
}
|
|
3170
3315
|
failTailnetSshConfirmation({
|
|
3171
3316
|
runtime,
|
|
3172
3317
|
logPath,
|
|
3173
|
-
target
|
|
3318
|
+
target,
|
|
3319
|
+
method: serverPrereqs.method
|
|
3174
3320
|
});
|
|
3175
3321
|
return false;
|
|
3176
3322
|
}
|