@fased/fased 0.1.17 → 0.1.19
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/CHANGELOG.md +7 -0
- package/dist/{agents-ZHlcYNOm.js → agents-ET0n9FED.js} +11 -11
- package/dist/{attachment-normalize-BhPZ6uGO.js → attachment-normalize-CDK3Kj-a.js} +1 -1
- package/dist/{attachment-normalize-DTYtewZr.js → attachment-normalize-DMabJMU0.js} +1 -1
- package/dist/{audio-preflight-C7mBThF7.js → audio-preflight-CK4s7Cpe.js} +1 -1
- package/dist/{audio-preflight-ChwzRQPs.js → audio-preflight-CKsWKtOL.js} +2 -2
- package/dist/{audio-preflight-DVSnVlYd.js → audio-preflight-CtOWrCYT.js} +2 -2
- package/dist/{audio-preflight-CoQcqjKr.js → audio-preflight-D4ml3rER.js} +3 -3
- package/dist/{audio-preflight-Bi4VdYUO.js → audio-preflight-DnxL2DTu.js} +3 -3
- package/dist/{audit-DQnuqc0U.js → audit-Cw2GhO1l.js} +1 -1
- package/dist/{audit-CSWfakpx.js → audit-DBfVTWuR.js} +1 -1
- package/dist/{auth-CqkGNO1B.js → auth-D6aXaEgt.js} +5 -5
- package/dist/{auth-choice-CN9gyA5O.js → auth-choice-CRcRJvDg.js} +2 -2
- package/dist/{auth-choice-wNIst3YG.js → auth-choice-DCd_rmJr.js} +2 -2
- package/dist/{auth-choice-prompt-Dsfpbz6G.js → auth-choice-prompt-BBY8vO5H.js} +1 -1
- package/dist/{auth-choice-prompt-DvnUYnyW.js → auth-choice-prompt-CHAO6E_x.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +2 -2
- package/dist/bundled/session-memory/handler.js +2 -2
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-web-I-U78wmf.js → channel-web-B90TOW9f.js} +1 -1
- package/dist/{channel-web-kLuTpWVX.js → channel-web-rogzKqNR.js} +1 -1
- package/dist/{channels-Cs8acObo.js → channels-BDdw6tRB.js} +9 -9
- package/dist/{channels-B3fxmvYP.js → channels-CIVRD15I.js} +9 -9
- package/dist/{channels-cli-C29njyWF.js → channels-cli-BlinY5L-.js} +6 -6
- package/dist/{channels-cli-D8zA2RvX.js → channels-cli-nB_AyrYg.js} +6 -6
- package/dist/{clack-prompter-D2fuSvy3.js → clack-prompter-DhFjwbXA.js} +110 -40
- package/dist/{clack-prompter-DsooqWFU.js → clack-prompter-Q_PN4iLX.js} +110 -40
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-C0NqNpAe.js → cli-BkrcbFie.js} +3 -3
- package/dist/{cli-Mlqh5AdT.js → cli-DWyf6Ez0.js} +3 -3
- package/dist/{command-registry-B9_A3_Dx.js → command-registry-D0xhHn9Z.js} +9 -9
- package/dist/{completion-cli-Chx2En3m.js → completion-cli-BDgp9s2D.js} +2 -2
- package/dist/{completion-cli-C0A6ihvd.js → completion-cli-BpN_WF59.js} +1 -1
- package/dist/{config-cli-CMAn1M38.js → config-cli-D51JAiE2.js} +1 -1
- package/dist/{config-cli-yHQ8paR9.js → config-cli-Di8fNvh8.js} +1 -1
- package/dist/{config-guard-C74yuV1t.js → config-guard-D6r7usdP.js} +2 -2
- package/dist/{config-guard-ComvK070.js → config-guard-DnCSSIeP.js} +1 -1
- package/dist/{configure-BKSkbv4h.js → configure-CLUalzZB.js} +16 -16
- package/dist/{configure-Bc3GK0rN.js → configure-ZAJqoe8C.js} +16 -16
- package/dist/control-ui/assets/app-DXYMrRJ9.js.map +1 -1
- package/dist/{cron-cli-ApRsS-YG.js → cron-cli-CCfMl1ch.js} +2 -2
- package/dist/{cron-cli-DqPi-kbY.js → cron-cli-COETwgMD.js} +2 -2
- package/dist/{daemon-cli-DXHOflkW.js → daemon-cli-BwMJ_sub.js} +1 -1
- package/dist/{daemon-cli-DgdTmunC.js → daemon-cli-DUfzwrLw.js} +1 -1
- package/dist/daemon-cli.js +1 -1
- package/dist/{deps-fM7SZdlB.js → deps-BoCGz3bU.js} +1 -1
- package/dist/{deps-BVX6nj7c.js → deps-vuWHR8ix.js} +1 -1
- package/dist/{doctor-config-flow-4WutpMTV.js → doctor-config-flow-B-I0osH5.js} +1 -1
- package/dist/{doctor-config-flow-Cd9O0xNE.js → doctor-config-flow-Ceaz-Gkk.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +2 -2
- package/dist/{gateway-cli-CGMY4qqc.js → gateway-cli-DAaMYDEy.js} +28 -28
- package/dist/{gateway-cli-B97xz3Px.js → gateway-cli-DcooukDx.js} +28 -28
- package/dist/{health-CdW7K4YP.js → health-CD-e8iEW.js} +2 -2
- package/dist/{health-Bn6vWkyn.js → health-c7sJIXY9.js} +2 -2
- package/dist/{heartbeat-runner-DIftlHX6.js → heartbeat-runner-BTRTcwja.js} +1 -1
- package/dist/{heartbeat-runner-B6wpYjuS.js → heartbeat-runner-DZuApcd1.js} +1 -1
- package/dist/{hooks-cli-CkFOVlH3.js → hooks-cli--azOmGId.js} +4 -4
- package/dist/{hooks-cli-Bh_WRNX5.js → hooks-cli-Bq6e41xH.js} +4 -4
- package/dist/index.js +9 -9
- package/dist/{ipv4-DT7rmgG8.js → ipv4-BKbsAV5a.js} +2 -2
- package/dist/{ipv4-6svR7SNz.js → ipv4-Bxa3Ql2B.js} +2 -2
- package/dist/{lifecycle-B9_sK7Lg.js → lifecycle-DE4kux0k.js} +1 -1
- package/dist/{lifecycle-BR79mC_A.js → lifecycle-DKOezW7h.js} +1 -1
- package/dist/{list.auth-overview-9xaYIGIY.js → list.auth-overview-DQlFpghW.js} +1 -1
- package/dist/{list.auth-overview-CAxvB_TW.js → list.auth-overview-SasQirvR.js} +1 -1
- package/dist/llm-slug-generator.js +2 -2
- package/dist/{model-catalog-B3hPEPfU.js → model-catalog-DHRVUWBf.js} +12 -8
- package/dist/{models-CGYvzn8x.js → models-CIAvUTl5.js} +7 -7
- package/dist/{models-cli-lhXhYVIL.js → models-cli-BW4m-HHk.js} +8 -8
- package/dist/{models-cli-CNGqdXNr.js → models-cli-CxRv-tjs.js} +7 -7
- package/dist/{node-cli-Crt3RJFB.js → node-cli--1sHB0Pz.js} +3 -3
- package/dist/{node-cli-BU8uKipw.js → node-cli-CsYpYqHF.js} +3 -3
- package/dist/{note-DrwZGnSu.js → note-DwkETqd-.js} +2 -0
- package/dist/{note-CLUeye9D.js → note-rV2vspIo.js} +2 -0
- package/dist/{onboard-D3lGTn86.js → onboard-BoT3D8J9.js} +8 -8
- package/dist/{onboard-channels-DKCvEt36.js → onboard-channels-BREKCcFf.js} +2 -2
- package/dist/{onboard-channels-EXJRjGSu.js → onboard-channels-fJXaj04M.js} +2 -2
- package/dist/{onboard-CTW2Nw9r.js → onboard-lbl9C2gj.js} +8 -8
- package/dist/{onboard-search-L1prKL6U.js → onboard-search-C6A1sfph.js} +6 -6
- package/dist/{onboard-search-1iOn9oPJ.js → onboard-search-D-tM9Xrg.js} +6 -6
- package/dist/{onboarding-DiEiT_LB.js → onboarding-Bejkgd8a.js} +94 -41
- package/dist/{onboarding-DeTMPDGg.js → onboarding-C8AUR3x1.js} +94 -41
- package/dist/{openresponses-http-BY6b2lDC.js → openresponses-http-BR0xNXbf.js} +2 -2
- package/dist/{openresponses-http-BJx01ruC.js → openresponses-http-BYKqYqIr.js} +1 -1
- package/dist/{openresponses-http-DaFH5UEc.js → openresponses-http-C8H-a3KL.js} +3 -3
- package/dist/{openresponses-http-kIRkHsD1.js → openresponses-http-CyP-RUzR.js} +2 -2
- package/dist/{openresponses-http-CQhCnjXY.js → openresponses-http-DNXaz2VR.js} +3 -3
- package/dist/{parent-default-help-BVu8jqwL.js → parent-default-help-B57KLY1o.js} +1 -1
- package/dist/{parent-default-help-Da2SaoCP.js → parent-default-help-B9-EyEJR.js} +1 -1
- package/dist/{paths-D2Fac7_V.js → paths-BGX-IMoI.js} +9 -9
- package/dist/{paths-DuymR5Rg.js → paths-Bzz-O3FX.js} +9 -9
- package/dist/{pi-embedded-BZv4Mjvw.js → pi-embedded-Dtw2m41q.js} +14 -14
- package/dist/{pi-embedded-B-qXRnRI.js → pi-embedded-G-VYb-eT.js} +14 -14
- package/dist/{plugin-registry-BgHwN_Lg.js → plugin-registry-C5c96kNk.js} +1 -1
- package/dist/{plugin-registry-BjOVIPs_.js → plugin-registry-Dr7BDkEc.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-B7YdvtUo.js → audio-preflight-Bf83dqiV.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-CS0BGiq5.js → audio-preflight-jaSZX_On.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.js +1 -1
- package/dist/plugin-sdk/{channel-web-D7r6o_Nr.js → channel-web-Bu6Y92kC.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-aRyVxWnA.js → openresponses-http-M74cHGFJ.js} +1 -1
- package/dist/plugin-sdk/{openresponses-http-B2uRew9H.js → openresponses-http-gCxCNpHu.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-BWcaNxzp.js → pi-model-discovery-runtime-FgSYY3zE.js} +1 -1
- package/dist/plugin-sdk/{registry-DXXOSq_V.js → registry-DyRgZdL8.js} +8 -8
- package/dist/plugin-sdk/{reply-BlEQIxRB.js → reply-Bu9GXy54.js} +5 -5
- package/dist/plugin-sdk/src/brand.d.ts +2 -2
- package/dist/plugin-sdk/{status-C5KavVSM.js → status-DLh4u6pb.js} +5 -5
- package/dist/plugin-sdk/{web-C2qvRemd.js → web-BLZesoTn.js} +2 -2
- package/dist/plugin-sdk/{web-D3SBL6WL.js → web-BqmhQeOi.js} +1 -1
- package/dist/{plugins-cli-BgktSjQJ.js → plugins-cli-CpElRRGB.js} +6 -6
- package/dist/{plugins-cli-CKPZJor1.js → plugins-cli-hFcodPhF.js} +6 -6
- package/dist/{program-Nydl3I9b.js → program-ByNjbwln.js} +9 -9
- package/dist/{program-context-B2v5DYdk.js → program-context-BJ6EvoUW.js} +25 -25
- package/dist/{prompt-select-styled-BFIFk4AL.js → prompt-select-styled-DyUwhQR0.js} +8 -8
- package/dist/{prompt-select-styled-BjXEmV9l.js → prompt-select-styled-yZlzGWDe.js} +8 -8
- package/dist/{prompt-style-Wxki8rmI.js → prompt-style-CWAacuMq.js} +1 -2
- package/dist/{prompt-style-DxKPs6E0.js → prompt-style-Rmj3c-Ir.js} +1 -2
- package/dist/{providers-cli-DBG7T-38.js → providers-cli-BWZUM8kN.js} +3 -3
- package/dist/{providers-cli-DsUpaNkE.js → providers-cli-Dwb_MRo-.js} +3 -3
- package/dist/{pw-ai-CJ0aPd9o.js → pw-ai-42y3optV.js} +1 -1
- package/dist/{pw-ai-BWWVm40d.js → pw-ai-D6eWnTeA.js} +1 -1
- package/dist/{register.agent-CKCyVnHe.js → register.agent-DYThb3Qq.js} +12 -12
- package/dist/{register.agent-DMvHMzcw.js → register.agent-QbjX69Zq.js} +11 -11
- package/dist/{register.configure-ByF8uG5S.js → register.configure-CGzVdNRF.js} +16 -16
- package/dist/{register.configure-BUBxqquw.js → register.configure-CXn_6bwZ.js} +16 -16
- package/dist/{register.maintenance-C5PWlFfJ.js → register.maintenance-Cf-qQw2A.js} +13 -13
- package/dist/{register.maintenance-BGNb_S6N.js → register.maintenance-CiSlTmn6.js} +12 -12
- package/dist/{register.message-BWwA-s6K.js → register.message-Bz8Q1BDo.js} +4 -4
- package/dist/{register.message-aTN70VzV.js → register.message-CxejzCev.js} +4 -4
- package/dist/{register.onboard-Dlqyei9e.js → register.onboard-D-DkLJKD.js} +18 -18
- package/dist/{register.onboard-Dz42-nKS.js → register.onboard-DUvd2gzi.js} +18 -18
- package/dist/{register.setup-CNOjFVTJ.js → register.setup-BotpXpFX.js} +18 -18
- package/dist/{register.setup-B6v02LXR.js → register.setup-CzJsqVIe.js} +18 -18
- package/dist/{register.status-health-sessions-C3ItbaQ1.js → register.status-health-sessions-C9Zx-J4Y.js} +7 -7
- package/dist/{register.status-health-sessions-CmmN6MLd.js → register.status-health-sessions-IUpygKVu.js} +7 -7
- package/dist/{register.subclis-DESt0tVl.js → register.subclis-BtJ07gvR.js} +17 -17
- package/dist/{reply-jd1xrxXq.js → reply-BRoR6TOO.js} +12 -8
- package/dist/{run-main-D3CwNCnW.js → run-main-J8mnTN8L.js} +18 -18
- package/dist/{runtime-helper-grants-BRXTUail.js → runtime-helper-grants-CkoxSD6G.js} +1 -1
- package/dist/{runtime-helper-grants-BHKX5oKE.js → runtime-helper-grants-DMNl5B0x.js} +1 -1
- package/dist/{sandbox-cli-4kOH-DPO.js → sandbox-cli-CNyUbQKy.js} +3 -3
- package/dist/{sandbox-cli-DEc6XQT-.js → sandbox-cli-DfarPDi7.js} +3 -3
- package/dist/{security-cli-BUh3X9_F.js → security-cli-DYUEfOxV.js} +4 -4
- package/dist/{security-cli-B7M2Oc7k.js → security-cli-DfH_yEpS.js} +4 -4
- package/dist/{server-DtYT7_5l.js → server-3-CquHGG.js} +3 -3
- package/dist/{server-SVBXgb1K.js → server-OnS0sRn3.js} +3 -3
- package/dist/{server-cron-DYlWj-q5.js → server-cron-BclI8dUt.js} +2 -2
- package/dist/{server-cron-CW7fwBiW.js → server-cron-CB9ay7nN.js} +2 -2
- package/dist/{server-node-events-DKiw7ErS.js → server-node-events-B3wjSbTf.js} +4 -4
- package/dist/{server-node-events-CHxrrTwp.js → server-node-events-CHH1pmQi.js} +4 -4
- package/dist/{status-BMkqIbDJ.js → status-Cf-x3WJB.js} +1 -1
- package/dist/{status-CZGCfZGF.js → status-DhGsqqOx.js} +1 -1
- package/dist/{status-Aws79pOr.js → status-SrKDBHd_.js} +4 -4
- package/dist/{status-BlE8umrs.js → status-kfsSxAsl.js} +4 -4
- package/dist/{systemd-linger-9E60sw1j.js → systemd-linger-BTw_D-6k.js} +1 -1
- package/dist/{systemd-linger-BYFLOJbt.js → systemd-linger-BlmGMvvA.js} +1 -1
- package/dist/{tui-D_G4_9GB.js → tui-CIzUfHHB.js} +1 -1
- package/dist/{tui-El8PxPJw.js → tui-Cvc1YA_t.js} +1 -1
- package/dist/{tui-cli-DcfQ-oMv.js → tui-cli-BxyfSTll.js} +4 -4
- package/dist/{tui-cli-Crw0SZCT.js → tui-cli-D8ECRV-M.js} +4 -4
- package/dist/{update-cli-CX_5mVD4.js → update-cli-C1i3_uQZ.js} +13 -13
- package/dist/{update-cli-Dopc5Usd.js → update-cli-TMwGWZhI.js} +14 -14
- package/dist/{update-runner-Cd2MGute.js → update-runner-C6krqlIN.js} +1 -1
- package/dist/{update-runner-Iqgqs2dk.js → update-runner-ChBrrXIl.js} +1 -1
- package/dist/{web-CZCMgwva.js → web-CjKdghAZ.js} +4 -4
- package/dist/{web-ChYNYLuI.js → web-CnR4rHHv.js} +1 -1
- package/dist/{web-DnANur60.js → web-CoSbILfi.js} +2 -2
- package/dist/{web-y_U81dLD.js → web-l7WkPuq4.js} +2 -2
- package/dist/{web-search-providers.runtime-i1RoCwml.js → web-search-providers.runtime-B09rLDoa.js} +1 -1
- package/dist/{web-search-providers.runtime-CNjTAhI3.js → web-search-providers.runtime-BC_EmT37.js} +1 -1
- package/dist/{web-E9FagaIu.js → web-vOcMOS29.js} +4 -4
- package/docs/gateway/tailscale.md +44 -0
- package/docs/images/screenshots/local/chat-ui-1.png +0 -0
- package/docs/images/screenshots/local/final-ui-1.png +0 -0
- package/docs/images/screenshots/local/local-ui-1.png +0 -0
- package/docs/images/screenshots/local/local-ui-2.png +0 -0
- package/docs/images/screenshots/local/model-ui-1.png +0 -0
- package/docs/images/screenshots/local/wallet-ui-2.png +0 -0
- package/docs/install/index.md +26 -5
- package/docs/install/vps.md +27 -7
- package/docs/start/agent-wallet-mining-walkthrough.md +17 -1
- 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 +12 -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 +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +12 -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 +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/docs/images/screenshots/local/wallet-ui-1.png +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Ba as normalizeOptionalSecretInput, Cu as formatCliCommand, Ii as resolveApiKeyForProfile, Ji as resolveDefaultSecretProviderAlias, Oa as loadPluginManifestRegistry, Pr as normalizeProviderId, Qt as readConfigFileSnapshot, Va as normalizeSecretInput, _n as parseDurationMs, di as resolveEnvApiKey, fa as upsertAuthProfile, ka as assertSupportedRuntime, ki as resolveAuthProfileOrder, ma as ensureAuthProfileStore, tn as writeConfigFile } from "./env-C77feXxI.js";
|
|
2
2
|
import { x as resolveUserPath } from "./agent-paths-BI1hx-tF.js";
|
|
3
|
-
import { A as waitForGatewayReachable, E as resolveControlUiLinks, T as randomToken, d as DEFAULT_WORKSPACE, f as applyWizardMetadata, h as ensureWorkspaceAndSessions, s as resolvePluginProviders, v as handleOnboardingRepair } from "./model-catalog-
|
|
3
|
+
import { A as waitForGatewayReachable, E as resolveControlUiLinks, T as randomToken, d as DEFAULT_WORKSPACE, f as applyWizardMetadata, h as ensureWorkspaceAndSessions, s as resolvePluginProviders, v as handleOnboardingRepair } from "./model-catalog-DHRVUWBf.js";
|
|
4
4
|
import { A as defaultRuntime, gt as resolveGatewayPort, j as restoreTerminalState } from "./entry.js";
|
|
5
5
|
import { a as readWalletProviderRegistry, f as setWalletProvidersEnabled, t as WALLET_PROVIDER_IDS } from "./wallet-provider-registry-CFNtQ2ZR.js";
|
|
6
6
|
import { or as clearDeviceAuthStore } from "./call-B9EvxMq6.js";
|
|
@@ -8,15 +8,15 @@ import { r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from
|
|
|
8
8
|
import { a as resolveHostedOnboardingGatewayStartupMode, n as gatewayInstallErrorHint, t as buildGatewayInstallPlan } from "./daemon-install-helpers-BB0qUcut.js";
|
|
9
9
|
import { r as isSystemdUserServiceAvailable } from "./systemd-B8OPQXFR.js";
|
|
10
10
|
import { t as resolveGatewayService } from "./service-2JBjv-ge.js";
|
|
11
|
-
import { d as resolveCustomProviderId, l as parseNonInteractiveCustomApiFlags, o as CustomApiError, s as applyCustomApiConfig } from "./ipv4-
|
|
12
|
-
import { i as healthCommand } from "./health-
|
|
13
|
-
import { $ as applyLitellmConfig, At as validateAnthropicSetupToken, B as applyMistralConfig, Ct as setXaiApiKey, Dt as MINIMAX_HIGHSPEED_MODEL_ID, Et as MINIMAX_DEFAULT_MODEL_ID, F as applyMinimaxApiConfig, Ft as resolveManifestProviderAuthChoice, G as applyQwenCodingPlanConfig, H as applyMoonshotConfigCn, I as applyMinimaxApiConfigCn, J as applyTogetherConfig, K as applyQwenConfig, L as applyAuthProfileConfig$1, M as detectZaiEndpoint, Mt as normalizeSecretInputModeInput, N as applyGoogleGeminiModelDefault, P as applyOpencodeZenConfig, Pt as resolveManifestDeprecatedProviderAuthChoice, Q as applyZaiConfig, R as applyHuggingfaceConfig, St as setVolcengineApiKey, Tt as setZaiApiKey, U as applyOpenrouterConfig, V as applyMoonshotConfig, W as applyQianfanConfig, X as applyXaiConfig, Y as applyVeniceConfig, Z as applyXiaomiConfig, _t as setQwenCodingPlanApiKey, at as setGeminiApiKey, bt as setVeniceApiKey, c as applyDefaultModel, ct as setLitellmApiKey, d as resolveProviderMatch, dt as setMoonshotApiKey, et as applyCloudflareAiGatewayConfig, ft as setOpenaiApiKey, gt as setQwenApiKey, ht as setQianfanApiKey, i as applyOpenAIConfig, it as setCloudflareAiGatewayConfig, kt as buildTokenProfileId, l as mergeConfigPatch, lt as setMinimaxApiKey, m as applyPrimaryModel, mt as setOpenrouterApiKey, nt as setAnthropicApiKey, o as applyAuthProfileConfig, ot as setHuggingfaceApiKey, pt as setOpencodeZenApiKey, q as applySyntheticConfig, rt as setByteplusApiKey, s as buildApiKeyCredential, st as setKimiCodingApiKey, tt as applyVercelAiGatewayConfig, u as pickAuthMethod, ut as setMistralApiKey, vt as setSyntheticApiKey, wt as setXiaomiApiKey, xt as setVercelAiGatewayApiKey, yt as setTogetherApiKey, z as applyKimiCodeConfig } from "./auth-choice-
|
|
14
|
-
import { a as normalizeLegacyOnboardAuthChoice, i as isDeprecatedAuthChoice, r as resolveOnboardProviderAuthFlags } from "./auth-choice-prompt-
|
|
11
|
+
import { d as resolveCustomProviderId, l as parseNonInteractiveCustomApiFlags, o as CustomApiError, s as applyCustomApiConfig } from "./ipv4-BKbsAV5a.js";
|
|
12
|
+
import { i as healthCommand } from "./health-CD-e8iEW.js";
|
|
13
|
+
import { $ as applyLitellmConfig, At as validateAnthropicSetupToken, B as applyMistralConfig, Ct as setXaiApiKey, Dt as MINIMAX_HIGHSPEED_MODEL_ID, Et as MINIMAX_DEFAULT_MODEL_ID, F as applyMinimaxApiConfig, Ft as resolveManifestProviderAuthChoice, G as applyQwenCodingPlanConfig, H as applyMoonshotConfigCn, I as applyMinimaxApiConfigCn, J as applyTogetherConfig, K as applyQwenConfig, L as applyAuthProfileConfig$1, M as detectZaiEndpoint, Mt as normalizeSecretInputModeInput, N as applyGoogleGeminiModelDefault, P as applyOpencodeZenConfig, Pt as resolveManifestDeprecatedProviderAuthChoice, Q as applyZaiConfig, R as applyHuggingfaceConfig, St as setVolcengineApiKey, Tt as setZaiApiKey, U as applyOpenrouterConfig, V as applyMoonshotConfig, W as applyQianfanConfig, X as applyXaiConfig, Y as applyVeniceConfig, Z as applyXiaomiConfig, _t as setQwenCodingPlanApiKey, at as setGeminiApiKey, bt as setVeniceApiKey, c as applyDefaultModel, ct as setLitellmApiKey, d as resolveProviderMatch, dt as setMoonshotApiKey, et as applyCloudflareAiGatewayConfig, ft as setOpenaiApiKey, gt as setQwenApiKey, ht as setQianfanApiKey, i as applyOpenAIConfig, it as setCloudflareAiGatewayConfig, kt as buildTokenProfileId, l as mergeConfigPatch, lt as setMinimaxApiKey, m as applyPrimaryModel, mt as setOpenrouterApiKey, nt as setAnthropicApiKey, o as applyAuthProfileConfig, ot as setHuggingfaceApiKey, pt as setOpencodeZenApiKey, q as applySyntheticConfig, rt as setByteplusApiKey, s as buildApiKeyCredential, st as setKimiCodingApiKey, tt as applyVercelAiGatewayConfig, u as pickAuthMethod, ut as setMistralApiKey, vt as setSyntheticApiKey, wt as setXiaomiApiKey, xt as setVercelAiGatewayApiKey, yt as setTogetherApiKey, z as applyKimiCodeConfig } from "./auth-choice-CRcRJvDg.js";
|
|
14
|
+
import { a as normalizeLegacyOnboardAuthChoice, i as isDeprecatedAuthChoice, r as resolveOnboardProviderAuthFlags } from "./auth-choice-prompt-CHAO6E_x.js";
|
|
15
15
|
import { n as logConfigUpdated } from "./logging-DZ32I_SP.js";
|
|
16
|
-
import { a as applyRecommendedInternalHooks, i as isHostedSecurityCapableSession, n as applyHostingSecurity, o as applyOnboardingLocalWorkspaceConfig, r as configureFederationForOnboarding, t as runOnboardingWizard } from "./onboarding-
|
|
16
|
+
import { a as applyRecommendedInternalHooks, i as isHostedSecurityCapableSession, n as applyHostingSecurity, o as applyOnboardingLocalWorkspaceConfig, r as configureFederationForOnboarding, t as runOnboardingWizard } from "./onboarding-C8AUR3x1.js";
|
|
17
17
|
import { t as WizardCancelledError } from "./prompts-DdS4bZNt.js";
|
|
18
|
-
import { t as createClackPrompter } from "./clack-prompter-
|
|
19
|
-
import { n as ensureSystemdUserLingerNonInteractive } from "./systemd-linger-
|
|
18
|
+
import { t as createClackPrompter } from "./clack-prompter-DhFjwbXA.js";
|
|
19
|
+
import { n as ensureSystemdUserLingerNonInteractive } from "./systemd-linger-BlmGMvvA.js";
|
|
20
20
|
import { t as formatHealthCheckFailure } from "./health-format-DEsFwYbP.js";
|
|
21
21
|
|
|
22
22
|
//#region src/commands/onboard-interactive.ts
|
|
@@ -2,7 +2,7 @@ import { $c as installPluginFromNpmSpec, Wa as coerceSecretRef, pd as resolveFas
|
|
|
2
2
|
import { i as CONFIG_DIR, p as isRecord, x as resolveUserPath } from "./agent-paths-BI1hx-tF.js";
|
|
3
3
|
import "./send-D7X0_iFp.js";
|
|
4
4
|
import "./send-BFEd4vCM.js";
|
|
5
|
-
import "./model-catalog-
|
|
5
|
+
import "./model-catalog-DHRVUWBf.js";
|
|
6
6
|
import "./github-copilot-token-A9DiaCB0.js";
|
|
7
7
|
import "./reply-prefix-TUhpEtvr.js";
|
|
8
8
|
import "./memory-2keYbXkc.js";
|
|
@@ -44,7 +44,7 @@ import "./send-C-su1wPZ.js";
|
|
|
44
44
|
import "./outbound-attachment-Bh4FmcYg.js";
|
|
45
45
|
import "./fetch-BVvWzHT_.js";
|
|
46
46
|
import "./delivery-queue-55Cityuq.js";
|
|
47
|
-
import "./deps-
|
|
47
|
+
import "./deps-BoCGz3bU.js";
|
|
48
48
|
import "./frontmatter-D2UNJikU.js";
|
|
49
49
|
import "./skills-Dis31awJ.js";
|
|
50
50
|
import "./skills-remote-CIAB0AXm.js";
|
|
@@ -71,14 +71,14 @@ import "./cli-utils-XevKf-tr.js";
|
|
|
71
71
|
import "./help-format-B2DRdx98.js";
|
|
72
72
|
import "./progress-DkVYFLij.js";
|
|
73
73
|
import "./replies-FXlmpJVO.js";
|
|
74
|
-
import "./prompt-style-
|
|
74
|
+
import "./prompt-style-Rmj3c-Ir.js";
|
|
75
75
|
import "./pairing-labels-BCM1S2e_.js";
|
|
76
76
|
import { t as enablePluginInConfig } from "./enable-C4xB2A3x.js";
|
|
77
77
|
import { t as buildNpmResolutionInstallFields } from "./installs-Cha8QIzO.js";
|
|
78
|
-
import "./status-
|
|
78
|
+
import "./status-DhGsqqOx.js";
|
|
79
79
|
import "./update-D4rhRm3D.js";
|
|
80
|
-
import { o as finalizeInstalledPluginConfig } from "./lifecycle-
|
|
81
|
-
import { t as resolvePluginWebSearchProviders } from "./web-search-providers.runtime-
|
|
80
|
+
import { o as finalizeInstalledPluginConfig } from "./lifecycle-DE4kux0k.js";
|
|
81
|
+
import { t as resolvePluginWebSearchProviders } from "./web-search-providers.runtime-BC_EmT37.js";
|
|
82
82
|
import path from "node:path";
|
|
83
83
|
import fs from "node:fs";
|
|
84
84
|
|
|
@@ -2,7 +2,7 @@ import "./paths-C9FmTW1x.js";
|
|
|
2
2
|
import { S as resolveUserPath, i as CONFIG_DIR, m as isRecord } from "./agent-paths-DmOVZE7g.js";
|
|
3
3
|
import { Co as coerceSecretRef, mo as resolveFasedAgentPackageRootSync, wl as installPluginFromNpmSpec } from "./agent-scope-DHrLr5OF.js";
|
|
4
4
|
import "./commands-registry-BRvZQ1jh.js";
|
|
5
|
-
import "./reply-
|
|
5
|
+
import "./reply-BRoR6TOO.js";
|
|
6
6
|
import "./errors-Dx3S3Nrp.js";
|
|
7
7
|
import "./send-C5_fB8YQ.js";
|
|
8
8
|
import "./send-jxmRy65D.js";
|
|
@@ -37,7 +37,7 @@ import "./ssrf-Blf4NrHS.js";
|
|
|
37
37
|
import "./outbound-attachment-CsXJwFsg.js";
|
|
38
38
|
import "./fetch-CnCPOuq7.js";
|
|
39
39
|
import "./delivery-queue-DKRjVFlq.js";
|
|
40
|
-
import "./deps-
|
|
40
|
+
import "./deps-vuWHR8ix.js";
|
|
41
41
|
import "./memory-DDpj0IVA.js";
|
|
42
42
|
import "./memory-search-BwYkW6_V.js";
|
|
43
43
|
import "./manager-BmONwMiP.js";
|
|
@@ -74,14 +74,14 @@ import "./progress-DZRfIFVb.js";
|
|
|
74
74
|
import "./replies-Do40G8fO.js";
|
|
75
75
|
import "./skills-remote-BghdrdFV.js";
|
|
76
76
|
import "./skill-commands-QW8zKXC_.js";
|
|
77
|
-
import "./prompt-style-
|
|
77
|
+
import "./prompt-style-CWAacuMq.js";
|
|
78
78
|
import "./pairing-labels-D2yOKhoV.js";
|
|
79
79
|
import { t as enablePluginInConfig } from "./enable-D3_YPNIT.js";
|
|
80
80
|
import { t as buildNpmResolutionInstallFields } from "./installs-DDbnXe4x.js";
|
|
81
|
-
import "./status-
|
|
81
|
+
import "./status-Cf-x3WJB.js";
|
|
82
82
|
import "./update-Dew6hqdf.js";
|
|
83
|
-
import { o as finalizeInstalledPluginConfig } from "./lifecycle-
|
|
84
|
-
import { t as resolvePluginWebSearchProviders } from "./web-search-providers.runtime-
|
|
83
|
+
import { o as finalizeInstalledPluginConfig } from "./lifecycle-DKOezW7h.js";
|
|
84
|
+
import { t as resolvePluginWebSearchProviders } from "./web-search-providers.runtime-B09rLDoa.js";
|
|
85
85
|
import fs from "node:fs";
|
|
86
86
|
import path from "node:path";
|
|
87
87
|
|
|
@@ -1,7 +1,7 @@
|
|
|
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-BRoR6TOO.js";
|
|
5
5
|
import { d as defaultRuntime, f as restoreTerminalState, s as redactSensitiveText } from "./errors-Dx3S3Nrp.js";
|
|
6
6
|
import { a as resolveSignerdBinaryPath, n as installSignerdBinary, o as restartLocalSocketSigner, r as migrateLocalSignerKeystoreToMaterialDir, t as configureWalletForOnboarding } from "./onboarding.wallet-CQG8MiG_.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";
|
|
@@ -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-Bxa3Ql2B.js";
|
|
21
|
+
import { o as waitForHostedDashboardBrowserPath } from "./health-c7sJIXY9.js";
|
|
22
|
+
import { n as warnIfModelConfigLooksOff, r as applyAuthChoice } from "./auth-choice-DCd_rmJr.js";
|
|
23
|
+
import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-BBY8vO5H.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-BREKCcFf.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-CIzUfHHB.js";
|
|
28
28
|
import fs from "node:fs";
|
|
29
29
|
import os from "node:os";
|
|
30
30
|
import path from "node:path";
|
|
@@ -1358,7 +1358,7 @@ async function finalizeOnboardingWizard(options) {
|
|
|
1358
1358
|
const systemdAvailable = process.platform === "linux" ? await isSystemdUserServiceAvailable() : true;
|
|
1359
1359
|
if (process.platform === "linux" && !systemdAvailable && !strictVps && flow !== "quickstart") await prompter.note("Systemd user services are unavailable. Skipping lingering checks and user-service install.", "Systemd");
|
|
1360
1360
|
if (process.platform === "linux" && systemdAvailable && strictVps) {} else if (process.platform === "linux" && systemdAvailable) {
|
|
1361
|
-
const { ensureSystemdUserLingerInteractive } = await import("./systemd-linger-
|
|
1361
|
+
const { ensureSystemdUserLingerInteractive } = await import("./systemd-linger-BTw_D-6k.js").then((n) => n.r);
|
|
1362
1362
|
await ensureSystemdUserLingerInteractive({
|
|
1363
1363
|
runtime,
|
|
1364
1364
|
prompter: {
|
|
@@ -2463,7 +2463,7 @@ async function finalizeOnboardingWizard(options) {
|
|
|
2463
2463
|
fallbackHint: !strictVps ? controlUiOpenHint : void 0
|
|
2464
2464
|
}), "Dashboard ready");
|
|
2465
2465
|
}
|
|
2466
|
-
await prompter.outro(
|
|
2466
|
+
if (!strictVps) await prompter.outro(controlUiOpened ? "Setup complete. Next: Agent > Models, then Chat." : "Setup complete. Use the dashboard link above, then use Agent > Models and Chat.");
|
|
2467
2467
|
return { launchedTui };
|
|
2468
2468
|
}
|
|
2469
2469
|
|
|
@@ -2747,6 +2747,7 @@ const LOW_MEMORY_SWAP_THRESHOLD_MB = 2304;
|
|
|
2747
2747
|
const LOW_MEMORY_HOSTING_SWAP_GB = 4;
|
|
2748
2748
|
const HOSTING_SWAP_GB = 2;
|
|
2749
2749
|
const TAILSCALE_INTERACTIVE_TIMEOUT_MS = 120 * 1e3;
|
|
2750
|
+
const TAILSCALE_LOGIN_URL_RE = /https:\/\/login\.tailscale\.com\/a\/[A-Za-z0-9_-]+/i;
|
|
2750
2751
|
function detectTotalMemoryMb() {
|
|
2751
2752
|
if (process.platform === "linux") try {
|
|
2752
2753
|
const match = fs.readFileSync("/proc/meminfo", "utf8").match(/^MemTotal:\s+(\d+)\s+kB/m);
|
|
@@ -2779,29 +2780,67 @@ function run(command, logPath) {
|
|
|
2779
2780
|
detail: detail || `${command} (exit=${proc.status ?? "unknown"})`
|
|
2780
2781
|
};
|
|
2781
2782
|
}
|
|
2782
|
-
function runInteractive(command, logPath, options) {
|
|
2783
|
-
if (logPath) appendHostSecurityLog(logPath, command, "interactive command started; output
|
|
2784
|
-
|
|
2785
|
-
stdio: [
|
|
2783
|
+
async function runInteractive(command, logPath, options) {
|
|
2784
|
+
if (logPath) appendHostSecurityLog(logPath, command, "interactive command started; output captured for framed wizard display");
|
|
2785
|
+
return await new Promise((resolve) => {
|
|
2786
|
+
const proc = spawn("bash", ["-lc", command], { stdio: [
|
|
2786
2787
|
"ignore",
|
|
2787
|
-
"
|
|
2788
|
-
"
|
|
2789
|
-
]
|
|
2790
|
-
|
|
2791
|
-
|
|
2788
|
+
"pipe",
|
|
2789
|
+
"pipe"
|
|
2790
|
+
] });
|
|
2791
|
+
let output = "";
|
|
2792
|
+
let loginUrlShown = false;
|
|
2793
|
+
let timedOut = false;
|
|
2794
|
+
let noteQueue = Promise.resolve();
|
|
2795
|
+
const timer = options?.timeoutMs && options.timeoutMs > 0 ? setTimeout(() => {
|
|
2796
|
+
timedOut = true;
|
|
2797
|
+
proc.kill("SIGINT");
|
|
2798
|
+
}, options.timeoutMs) : null;
|
|
2799
|
+
const maybeShowLoginUrl = (chunk) => {
|
|
2800
|
+
output += chunk;
|
|
2801
|
+
if (loginUrlShown) return;
|
|
2802
|
+
const loginUrl = output.match(TAILSCALE_LOGIN_URL_RE)?.[0];
|
|
2803
|
+
if (!loginUrl) return;
|
|
2804
|
+
loginUrlShown = true;
|
|
2805
|
+
if (options?.prompter) {
|
|
2806
|
+
const message = [
|
|
2807
|
+
noteHeading("Open login URL"),
|
|
2808
|
+
"Open this URL in your local browser:",
|
|
2809
|
+
...noteCommands([loginUrl]),
|
|
2810
|
+
"Return here after approving this VPS."
|
|
2811
|
+
].join("\n");
|
|
2812
|
+
noteQueue = noteQueue.then(() => options.prompter?.note(message, options.noteTitle ?? "Tailscale login URL"));
|
|
2813
|
+
}
|
|
2814
|
+
};
|
|
2815
|
+
proc.stdout?.on("data", (chunk) => {
|
|
2816
|
+
maybeShowLoginUrl(String(chunk));
|
|
2817
|
+
});
|
|
2818
|
+
proc.stderr?.on("data", (chunk) => {
|
|
2819
|
+
maybeShowLoginUrl(String(chunk));
|
|
2820
|
+
});
|
|
2821
|
+
proc.on("error", (error) => {
|
|
2822
|
+
output += `\n${error instanceof Error ? error.message : String(error)}`;
|
|
2823
|
+
});
|
|
2824
|
+
proc.on("close", (code) => {
|
|
2825
|
+
if (timer) clearTimeout(timer);
|
|
2826
|
+
const detail = timedOut ? `${command} timed out after ${Math.round((options?.timeoutMs ?? 0) / 1e3)}s\n${output}`.trim() : `${command} (exit=${code ?? "unknown"})\n${output}`.trim();
|
|
2827
|
+
if (logPath) appendHostSecurityLog(logPath, command, detail);
|
|
2828
|
+
noteQueue.then(() => {
|
|
2829
|
+
if (code === 0) {
|
|
2830
|
+
resolve({
|
|
2831
|
+
ok: true,
|
|
2832
|
+
detail
|
|
2833
|
+
});
|
|
2834
|
+
return;
|
|
2835
|
+
}
|
|
2836
|
+
resolve({
|
|
2837
|
+
ok: false,
|
|
2838
|
+
detail,
|
|
2839
|
+
timedOut
|
|
2840
|
+
});
|
|
2841
|
+
});
|
|
2842
|
+
});
|
|
2792
2843
|
});
|
|
2793
|
-
const timedOut = proc.error?.code === "ETIMEDOUT";
|
|
2794
|
-
const detail = timedOut ? `${command} timed out after ${Math.round((options?.timeoutMs ?? 0) / 1e3)}s` : `${command} (exit=${proc.status ?? "unknown"})`;
|
|
2795
|
-
if (logPath) appendHostSecurityLog(logPath, command, detail);
|
|
2796
|
-
if (proc.status === 0) return {
|
|
2797
|
-
ok: true,
|
|
2798
|
-
detail
|
|
2799
|
-
};
|
|
2800
|
-
return {
|
|
2801
|
-
ok: false,
|
|
2802
|
-
detail,
|
|
2803
|
-
timedOut
|
|
2804
|
-
};
|
|
2805
2844
|
}
|
|
2806
2845
|
function buildTailscaleLoginWaitCommand(command) {
|
|
2807
2846
|
return [
|
|
@@ -2828,9 +2867,13 @@ function buildTailscaleLoginWaitCommand(command) {
|
|
|
2828
2867
|
"exit 124"
|
|
2829
2868
|
].join("\n");
|
|
2830
2869
|
}
|
|
2831
|
-
function runInteractiveTailscaleLogin(command, logPath) {
|
|
2832
|
-
if (logPath) appendHostSecurityLog(logPath, command, "interactive Tailscale login started;
|
|
2833
|
-
const result = runInteractive(buildTailscaleLoginWaitCommand(command), void 0, {
|
|
2870
|
+
async function runInteractiveTailscaleLogin(command, logPath, prompter) {
|
|
2871
|
+
if (logPath) appendHostSecurityLog(logPath, command, "interactive Tailscale login started; login URL shown in framed wizard note");
|
|
2872
|
+
const result = await runInteractive(buildTailscaleLoginWaitCommand(command), void 0, {
|
|
2873
|
+
timeoutMs: TAILSCALE_INTERACTIVE_TIMEOUT_MS,
|
|
2874
|
+
prompter,
|
|
2875
|
+
noteTitle: "Tailscale login URL"
|
|
2876
|
+
});
|
|
2834
2877
|
if (logPath) appendHostSecurityLog(logPath, "tailscale login result", result.ok ? "tailnet IP appeared or tailscale up completed" : result.detail ?? "tailscale login failed");
|
|
2835
2878
|
if (result.ok) return {
|
|
2836
2879
|
ok: true,
|
|
@@ -3089,7 +3132,7 @@ async function confirmTailnetSshBeforeLockdown(params) {
|
|
|
3089
3132
|
return false;
|
|
3090
3133
|
}
|
|
3091
3134
|
await prompter.note(formatTailscaleAccountBrowserLoginNote(), "Tailscale login");
|
|
3092
|
-
const tsReset = interactiveRunner("sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset", logPath);
|
|
3135
|
+
const tsReset = await interactiveRunner("sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset", logPath, prompter);
|
|
3093
3136
|
const acceptedTimedOutLogin = tailscaleTimedOutButReady(tsReset, logPath, runner);
|
|
3094
3137
|
if (!tsReset.ok && !acceptedTimedOutLogin || !hasTailscaleIp(logPath, runner)) {
|
|
3095
3138
|
runtime.error("Hosting setup stopped before SSH/firewall lock-down.");
|
|
@@ -3246,7 +3289,7 @@ function automaticUpdatesCommand() {
|
|
|
3246
3289
|
" sudo -n systemctl enable --now apt-daily.timer apt-daily-upgrade.timer",
|
|
3247
3290
|
"elif command -v dnf >/dev/null 2>&1 || command -v dnf5 >/dev/null 2>&1; then",
|
|
3248
3291
|
" (" + packageInstallCommand(["dnf5-plugin-automatic"]) + ") || (" + packageInstallCommand(["dnf-automatic"]) + ")",
|
|
3249
|
-
" sudo -n sed -i 's/^apply_updates[[:space:]]*=.*/apply_updates = yes/' /etc/dnf/automatic.conf >/dev/null 2>&1 || true",
|
|
3292
|
+
" sudo -n /usr/local/sbin/fased-host-maintenance enable-dnf-automatic >/dev/null 2>&1 || sudo -n sed -i 's/^apply_updates[[:space:]]*=.*/apply_updates = yes/' /etc/dnf/automatic.conf >/dev/null 2>&1 || true",
|
|
3250
3293
|
" sudo -n systemctl enable --now dnf5-automatic.timer >/dev/null 2>&1 || sudo -n systemctl enable --now dnf-automatic.timer",
|
|
3251
3294
|
"elif command -v yum >/dev/null 2>&1; then",
|
|
3252
3295
|
" (" + packageInstallCommand(["dnf-automatic"]) + ") || (" + packageInstallCommand(["yum-cron"]) + ")",
|
|
@@ -3257,6 +3300,17 @@ function automaticUpdatesCommand() {
|
|
|
3257
3300
|
"fi"
|
|
3258
3301
|
].join("\n");
|
|
3259
3302
|
}
|
|
3303
|
+
function sshHardeningCommand() {
|
|
3304
|
+
return [
|
|
3305
|
+
"if sudo -n /usr/local/sbin/fased-host-maintenance harden-ssh >/dev/null 2>&1; then",
|
|
3306
|
+
" :",
|
|
3307
|
+
"else",
|
|
3308
|
+
" sudo -n sed -i 's/^#\\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config",
|
|
3309
|
+
" sudo -n sed -i 's/^#\\?PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config",
|
|
3310
|
+
" sudo -n systemctl restart ssh || sudo -n systemctl restart sshd",
|
|
3311
|
+
"fi"
|
|
3312
|
+
].join("\n");
|
|
3313
|
+
}
|
|
3260
3314
|
function failOrContinue(params) {
|
|
3261
3315
|
const { opts, runtime, step, detail } = params;
|
|
3262
3316
|
const body = detail ? `${step}: ${detail}` : step;
|
|
@@ -3302,7 +3356,7 @@ async function applyHostingSecurity(params) {
|
|
|
3302
3356
|
})).trim();
|
|
3303
3357
|
else await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
|
|
3304
3358
|
const resetCommand = tsAuthkey ? `sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset --authkey ${JSON.stringify(tsAuthkey)}` : "sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset";
|
|
3305
|
-
const tsReset = tsAuthkey ? run(resetCommand, logPath) : runInteractiveTailscaleLogin(resetCommand, logPath);
|
|
3359
|
+
const tsReset = tsAuthkey ? run(resetCommand, logPath) : await runInteractiveTailscaleLogin(resetCommand, logPath, prompter);
|
|
3306
3360
|
if (!tsReset.ok && !tailscaleTimedOutButReady(tsReset, logPath)) return {
|
|
3307
3361
|
ok: false,
|
|
3308
3362
|
detail: tsReset.detail ?? "tailscale account switch failed"
|
|
@@ -3434,7 +3488,7 @@ async function applyHostingSecurity(params) {
|
|
|
3434
3488
|
initialValue: false
|
|
3435
3489
|
})) {
|
|
3436
3490
|
if (prompter) await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
|
|
3437
|
-
const tsReset = runInteractiveTailscaleLogin("sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset", logPath);
|
|
3491
|
+
const tsReset = await runInteractiveTailscaleLogin("sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset", logPath, prompter);
|
|
3438
3492
|
if (!tsReset.ok && !tailscaleTimedOutButReady(tsReset, logPath)) {
|
|
3439
3493
|
checks.push({
|
|
3440
3494
|
name: "tailscale",
|
|
@@ -3521,7 +3575,7 @@ async function applyHostingSecurity(params) {
|
|
|
3521
3575
|
};
|
|
3522
3576
|
} else {
|
|
3523
3577
|
if (prompter) await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
|
|
3524
|
-
const tsUp = runInteractiveTailscaleLogin("sudo -n tailscale up --ssh", logPath);
|
|
3578
|
+
const tsUp = await runInteractiveTailscaleLogin("sudo -n tailscale up --ssh", logPath, prompter);
|
|
3525
3579
|
if (!tsUp.ok && !tailscaleTimedOutButReady(tsUp, logPath)) {
|
|
3526
3580
|
checks.push({
|
|
3527
3581
|
name: "tailscale",
|
|
@@ -3648,7 +3702,7 @@ async function applyHostingSecurity(params) {
|
|
|
3648
3702
|
ok: true,
|
|
3649
3703
|
detail: "default-deny public ingress with tailnet SSH/HTTPS access"
|
|
3650
3704
|
});
|
|
3651
|
-
const sshRes = run(
|
|
3705
|
+
const sshRes = run(sshHardeningCommand(), logPath);
|
|
3652
3706
|
if (!sshRes.ok) {
|
|
3653
3707
|
checks.push({
|
|
3654
3708
|
name: "ssh",
|
|
@@ -3723,7 +3777,7 @@ async function applyHostingSecurity(params) {
|
|
|
3723
3777
|
ok: true,
|
|
3724
3778
|
detail: "automatic security updates enabled"
|
|
3725
3779
|
});
|
|
3726
|
-
|
|
3780
|
+
appendHostSecurityLog(logPath, "hosting host hardening complete", "enforced");
|
|
3727
3781
|
return {
|
|
3728
3782
|
profile,
|
|
3729
3783
|
checks,
|
|
@@ -4215,7 +4269,6 @@ async function runOnboardingWizard(opts, runtime = defaultRuntime, prompter) {
|
|
|
4215
4269
|
await installPrivateGoForOnboarding();
|
|
4216
4270
|
};
|
|
4217
4271
|
printWizardHeader(runtime);
|
|
4218
|
-
await prompter.intro("FASED Setup");
|
|
4219
4272
|
await requireRiskAcknowledgement({
|
|
4220
4273
|
opts,
|
|
4221
4274
|
prompter
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Cu as formatCliCommand, Fn as ensureActiveMemoryPluginAllowlisted, Gu as resolveDefaultAgentId, Qt as readConfigFileSnapshot, Wu as resolveAgentWorkspaceDir, br as collectConfigServiceEnvVars, ma as ensureAuthProfileStore, tn as writeConfigFile } from "./env-C77feXxI.js";
|
|
2
2
|
import { H as theme, x as resolveUserPath } from "./agent-paths-BI1hx-tF.js";
|
|
3
|
-
import { A as waitForGatewayReachable, C as printWizardHeader, E as resolveControlUiLinks, Ha as CONTROL_UI_BOOT_CHECK_PATH, O as summarizeExistingConfig, S as openUrl, T as randomToken, Wa as normalizeControlUiBasePath, bo as enableTailscaleServe, d as DEFAULT_WORKSPACE, f as applyWizardMetadata, g as formatControlUiSshHint, h as ensureWorkspaceAndSessions, k as validateGatewayPasswordInput, m as detectBrowserOpenSupport, to as runFederationAutoConnectOnce, v as handleOnboardingRepair, w as probeGatewayReachable, x as normalizeGatewayTokenInput, xo as findTailscaleBinary, yo as enableTailscaleFunnel } from "./model-catalog-
|
|
3
|
+
import { A as waitForGatewayReachable, C as printWizardHeader, E as resolveControlUiLinks, Ha as CONTROL_UI_BOOT_CHECK_PATH, O as summarizeExistingConfig, S as openUrl, T as randomToken, Wa as normalizeControlUiBasePath, bo as enableTailscaleServe, d as DEFAULT_WORKSPACE, f as applyWizardMetadata, g as formatControlUiSshHint, h as ensureWorkspaceAndSessions, k as validateGatewayPasswordInput, m as detectBrowserOpenSupport, to as runFederationAutoConnectOnce, v as handleOnboardingRepair, w as probeGatewayReachable, x as normalizeGatewayTokenInput, xo as findTailscaleBinary, yo as enableTailscaleFunnel } from "./model-catalog-DHRVUWBf.js";
|
|
4
4
|
import { A as defaultRuntime, Ct as resolveStateDir, E as redactSensitiveText, gt as resolveGatewayPort, j as restoreTerminalState } from "./entry.js";
|
|
5
5
|
import { n as redactSensitiveUrlLikeString } from "./redact-sensitive-url-BW03TVj8.js";
|
|
6
6
|
import { a as resolveSignerdBinaryPath, n as installSignerdBinary, o as restartLocalSocketSigner, r as migrateLocalSignerKeystoreToMaterialDir, t as configureWalletForOnboarding } from "./onboarding.wallet--7Yu2hFw.js";
|
|
@@ -16,14 +16,14 @@ import { a as resolveHostedOnboardingGatewayStartupMode, i as resolveGatewayStar
|
|
|
16
16
|
import { d as buildSystemdUnit, r as isSystemdUserServiceAvailable } from "./systemd-B8OPQXFR.js";
|
|
17
17
|
import { t as resolveGatewayService } from "./service-2JBjv-ge.js";
|
|
18
18
|
import { n as auditGatewayServiceConfig, t as SERVICE_AUDIT_CODES } from "./service-audit-COK5O0cM.js";
|
|
19
|
-
import { a as promptRemoteGatewayConfig, n as getTailscaleMissingBinNoteLines, r as setupSkills, t as validateIPv4AddressInput, u as promptCustomApiConfig } from "./ipv4-
|
|
20
|
-
import { s as waitForHostedDashboardBrowserPath } from "./health-
|
|
21
|
-
import { n as warnIfModelConfigLooksOff, r as applyAuthChoice } from "./auth-choice-
|
|
22
|
-
import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-
|
|
19
|
+
import { a as promptRemoteGatewayConfig, n as getTailscaleMissingBinNoteLines, r as setupSkills, t as validateIPv4AddressInput, u as promptCustomApiConfig } from "./ipv4-BKbsAV5a.js";
|
|
20
|
+
import { s as waitForHostedDashboardBrowserPath } from "./health-CD-e8iEW.js";
|
|
21
|
+
import { n as warnIfModelConfigLooksOff, r as applyAuthChoice } from "./auth-choice-CRcRJvDg.js";
|
|
22
|
+
import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-CHAO6E_x.js";
|
|
23
23
|
import { n as logConfigUpdated } from "./logging-DZ32I_SP.js";
|
|
24
|
-
import { n as setupChannels } from "./onboard-channels-
|
|
24
|
+
import { n as setupChannels } from "./onboard-channels-fJXaj04M.js";
|
|
25
25
|
import { t as buildWorkspaceHookStatus } from "./hooks-status-DRZciWMZ.js";
|
|
26
|
-
import { t as runTui } from "./tui-
|
|
26
|
+
import { t as runTui } from "./tui-Cvc1YA_t.js";
|
|
27
27
|
import { spawn, spawnSync } from "node:child_process";
|
|
28
28
|
import os from "node:os";
|
|
29
29
|
import path from "node:path";
|
|
@@ -1357,7 +1357,7 @@ async function finalizeOnboardingWizard(options) {
|
|
|
1357
1357
|
const systemdAvailable = process.platform === "linux" ? await isSystemdUserServiceAvailable() : true;
|
|
1358
1358
|
if (process.platform === "linux" && !systemdAvailable && !strictVps && flow !== "quickstart") await prompter.note("Systemd user services are unavailable. Skipping lingering checks and user-service install.", "Systemd");
|
|
1359
1359
|
if (process.platform === "linux" && systemdAvailable && strictVps) {} else if (process.platform === "linux" && systemdAvailable) {
|
|
1360
|
-
const { ensureSystemdUserLingerInteractive } = await import("./systemd-linger-
|
|
1360
|
+
const { ensureSystemdUserLingerInteractive } = await import("./systemd-linger-BlmGMvvA.js").then((n) => n.r);
|
|
1361
1361
|
await ensureSystemdUserLingerInteractive({
|
|
1362
1362
|
runtime,
|
|
1363
1363
|
prompter: {
|
|
@@ -2462,7 +2462,7 @@ async function finalizeOnboardingWizard(options) {
|
|
|
2462
2462
|
fallbackHint: !strictVps ? controlUiOpenHint : void 0
|
|
2463
2463
|
}), "Dashboard ready");
|
|
2464
2464
|
}
|
|
2465
|
-
await prompter.outro(
|
|
2465
|
+
if (!strictVps) await prompter.outro(controlUiOpened ? "Setup complete. Next: Agent > Models, then Chat." : "Setup complete. Use the dashboard link above, then use Agent > Models and Chat.");
|
|
2466
2466
|
return { launchedTui };
|
|
2467
2467
|
}
|
|
2468
2468
|
|
|
@@ -2746,6 +2746,7 @@ const LOW_MEMORY_SWAP_THRESHOLD_MB = 2304;
|
|
|
2746
2746
|
const LOW_MEMORY_HOSTING_SWAP_GB = 4;
|
|
2747
2747
|
const HOSTING_SWAP_GB = 2;
|
|
2748
2748
|
const TAILSCALE_INTERACTIVE_TIMEOUT_MS = 120 * 1e3;
|
|
2749
|
+
const TAILSCALE_LOGIN_URL_RE = /https:\/\/login\.tailscale\.com\/a\/[A-Za-z0-9_-]+/i;
|
|
2749
2750
|
function detectTotalMemoryMb() {
|
|
2750
2751
|
if (process.platform === "linux") try {
|
|
2751
2752
|
const match = fs.readFileSync("/proc/meminfo", "utf8").match(/^MemTotal:\s+(\d+)\s+kB/m);
|
|
@@ -2778,29 +2779,67 @@ function run(command, logPath) {
|
|
|
2778
2779
|
detail: detail || `${command} (exit=${proc.status ?? "unknown"})`
|
|
2779
2780
|
};
|
|
2780
2781
|
}
|
|
2781
|
-
function runInteractive(command, logPath, options) {
|
|
2782
|
-
if (logPath) appendHostSecurityLog(logPath, command, "interactive command started; output
|
|
2783
|
-
|
|
2784
|
-
stdio: [
|
|
2782
|
+
async function runInteractive(command, logPath, options) {
|
|
2783
|
+
if (logPath) appendHostSecurityLog(logPath, command, "interactive command started; output captured for framed wizard display");
|
|
2784
|
+
return await new Promise((resolve) => {
|
|
2785
|
+
const proc = spawn("bash", ["-lc", command], { stdio: [
|
|
2785
2786
|
"ignore",
|
|
2786
|
-
"
|
|
2787
|
-
"
|
|
2788
|
-
]
|
|
2789
|
-
|
|
2790
|
-
|
|
2787
|
+
"pipe",
|
|
2788
|
+
"pipe"
|
|
2789
|
+
] });
|
|
2790
|
+
let output = "";
|
|
2791
|
+
let loginUrlShown = false;
|
|
2792
|
+
let timedOut = false;
|
|
2793
|
+
let noteQueue = Promise.resolve();
|
|
2794
|
+
const timer = options?.timeoutMs && options.timeoutMs > 0 ? setTimeout(() => {
|
|
2795
|
+
timedOut = true;
|
|
2796
|
+
proc.kill("SIGINT");
|
|
2797
|
+
}, options.timeoutMs) : null;
|
|
2798
|
+
const maybeShowLoginUrl = (chunk) => {
|
|
2799
|
+
output += chunk;
|
|
2800
|
+
if (loginUrlShown) return;
|
|
2801
|
+
const loginUrl = output.match(TAILSCALE_LOGIN_URL_RE)?.[0];
|
|
2802
|
+
if (!loginUrl) return;
|
|
2803
|
+
loginUrlShown = true;
|
|
2804
|
+
if (options?.prompter) {
|
|
2805
|
+
const message = [
|
|
2806
|
+
noteHeading("Open login URL"),
|
|
2807
|
+
"Open this URL in your local browser:",
|
|
2808
|
+
...noteCommands([loginUrl]),
|
|
2809
|
+
"Return here after approving this VPS."
|
|
2810
|
+
].join("\n");
|
|
2811
|
+
noteQueue = noteQueue.then(() => options.prompter?.note(message, options.noteTitle ?? "Tailscale login URL"));
|
|
2812
|
+
}
|
|
2813
|
+
};
|
|
2814
|
+
proc.stdout?.on("data", (chunk) => {
|
|
2815
|
+
maybeShowLoginUrl(String(chunk));
|
|
2816
|
+
});
|
|
2817
|
+
proc.stderr?.on("data", (chunk) => {
|
|
2818
|
+
maybeShowLoginUrl(String(chunk));
|
|
2819
|
+
});
|
|
2820
|
+
proc.on("error", (error) => {
|
|
2821
|
+
output += `\n${error instanceof Error ? error.message : String(error)}`;
|
|
2822
|
+
});
|
|
2823
|
+
proc.on("close", (code) => {
|
|
2824
|
+
if (timer) clearTimeout(timer);
|
|
2825
|
+
const detail = timedOut ? `${command} timed out after ${Math.round((options?.timeoutMs ?? 0) / 1e3)}s\n${output}`.trim() : `${command} (exit=${code ?? "unknown"})\n${output}`.trim();
|
|
2826
|
+
if (logPath) appendHostSecurityLog(logPath, command, detail);
|
|
2827
|
+
noteQueue.then(() => {
|
|
2828
|
+
if (code === 0) {
|
|
2829
|
+
resolve({
|
|
2830
|
+
ok: true,
|
|
2831
|
+
detail
|
|
2832
|
+
});
|
|
2833
|
+
return;
|
|
2834
|
+
}
|
|
2835
|
+
resolve({
|
|
2836
|
+
ok: false,
|
|
2837
|
+
detail,
|
|
2838
|
+
timedOut
|
|
2839
|
+
});
|
|
2840
|
+
});
|
|
2841
|
+
});
|
|
2791
2842
|
});
|
|
2792
|
-
const timedOut = proc.error?.code === "ETIMEDOUT";
|
|
2793
|
-
const detail = timedOut ? `${command} timed out after ${Math.round((options?.timeoutMs ?? 0) / 1e3)}s` : `${command} (exit=${proc.status ?? "unknown"})`;
|
|
2794
|
-
if (logPath) appendHostSecurityLog(logPath, command, detail);
|
|
2795
|
-
if (proc.status === 0) return {
|
|
2796
|
-
ok: true,
|
|
2797
|
-
detail
|
|
2798
|
-
};
|
|
2799
|
-
return {
|
|
2800
|
-
ok: false,
|
|
2801
|
-
detail,
|
|
2802
|
-
timedOut
|
|
2803
|
-
};
|
|
2804
2843
|
}
|
|
2805
2844
|
function buildTailscaleLoginWaitCommand(command) {
|
|
2806
2845
|
return [
|
|
@@ -2827,9 +2866,13 @@ function buildTailscaleLoginWaitCommand(command) {
|
|
|
2827
2866
|
"exit 124"
|
|
2828
2867
|
].join("\n");
|
|
2829
2868
|
}
|
|
2830
|
-
function runInteractiveTailscaleLogin(command, logPath) {
|
|
2831
|
-
if (logPath) appendHostSecurityLog(logPath, command, "interactive Tailscale login started;
|
|
2832
|
-
const result = runInteractive(buildTailscaleLoginWaitCommand(command), void 0, {
|
|
2869
|
+
async function runInteractiveTailscaleLogin(command, logPath, prompter) {
|
|
2870
|
+
if (logPath) appendHostSecurityLog(logPath, command, "interactive Tailscale login started; login URL shown in framed wizard note");
|
|
2871
|
+
const result = await runInteractive(buildTailscaleLoginWaitCommand(command), void 0, {
|
|
2872
|
+
timeoutMs: TAILSCALE_INTERACTIVE_TIMEOUT_MS,
|
|
2873
|
+
prompter,
|
|
2874
|
+
noteTitle: "Tailscale login URL"
|
|
2875
|
+
});
|
|
2833
2876
|
if (logPath) appendHostSecurityLog(logPath, "tailscale login result", result.ok ? "tailnet IP appeared or tailscale up completed" : result.detail ?? "tailscale login failed");
|
|
2834
2877
|
if (result.ok) return {
|
|
2835
2878
|
ok: true,
|
|
@@ -3088,7 +3131,7 @@ async function confirmTailnetSshBeforeLockdown(params) {
|
|
|
3088
3131
|
return false;
|
|
3089
3132
|
}
|
|
3090
3133
|
await prompter.note(formatTailscaleAccountBrowserLoginNote(), "Tailscale login");
|
|
3091
|
-
const tsReset = interactiveRunner("sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset", logPath);
|
|
3134
|
+
const tsReset = await interactiveRunner("sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset", logPath, prompter);
|
|
3092
3135
|
const acceptedTimedOutLogin = tailscaleTimedOutButReady(tsReset, logPath, runner);
|
|
3093
3136
|
if (!tsReset.ok && !acceptedTimedOutLogin || !hasTailscaleIp(logPath, runner)) {
|
|
3094
3137
|
runtime.error("Hosting setup stopped before SSH/firewall lock-down.");
|
|
@@ -3245,7 +3288,7 @@ function automaticUpdatesCommand() {
|
|
|
3245
3288
|
" sudo -n systemctl enable --now apt-daily.timer apt-daily-upgrade.timer",
|
|
3246
3289
|
"elif command -v dnf >/dev/null 2>&1 || command -v dnf5 >/dev/null 2>&1; then",
|
|
3247
3290
|
" (" + packageInstallCommand(["dnf5-plugin-automatic"]) + ") || (" + packageInstallCommand(["dnf-automatic"]) + ")",
|
|
3248
|
-
" sudo -n sed -i 's/^apply_updates[[:space:]]*=.*/apply_updates = yes/' /etc/dnf/automatic.conf >/dev/null 2>&1 || true",
|
|
3291
|
+
" sudo -n /usr/local/sbin/fased-host-maintenance enable-dnf-automatic >/dev/null 2>&1 || sudo -n sed -i 's/^apply_updates[[:space:]]*=.*/apply_updates = yes/' /etc/dnf/automatic.conf >/dev/null 2>&1 || true",
|
|
3249
3292
|
" sudo -n systemctl enable --now dnf5-automatic.timer >/dev/null 2>&1 || sudo -n systemctl enable --now dnf-automatic.timer",
|
|
3250
3293
|
"elif command -v yum >/dev/null 2>&1; then",
|
|
3251
3294
|
" (" + packageInstallCommand(["dnf-automatic"]) + ") || (" + packageInstallCommand(["yum-cron"]) + ")",
|
|
@@ -3256,6 +3299,17 @@ function automaticUpdatesCommand() {
|
|
|
3256
3299
|
"fi"
|
|
3257
3300
|
].join("\n");
|
|
3258
3301
|
}
|
|
3302
|
+
function sshHardeningCommand() {
|
|
3303
|
+
return [
|
|
3304
|
+
"if sudo -n /usr/local/sbin/fased-host-maintenance harden-ssh >/dev/null 2>&1; then",
|
|
3305
|
+
" :",
|
|
3306
|
+
"else",
|
|
3307
|
+
" sudo -n sed -i 's/^#\\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config",
|
|
3308
|
+
" sudo -n sed -i 's/^#\\?PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config",
|
|
3309
|
+
" sudo -n systemctl restart ssh || sudo -n systemctl restart sshd",
|
|
3310
|
+
"fi"
|
|
3311
|
+
].join("\n");
|
|
3312
|
+
}
|
|
3259
3313
|
function failOrContinue(params) {
|
|
3260
3314
|
const { opts, runtime, step, detail } = params;
|
|
3261
3315
|
const body = detail ? `${step}: ${detail}` : step;
|
|
@@ -3301,7 +3355,7 @@ async function applyHostingSecurity(params) {
|
|
|
3301
3355
|
})).trim();
|
|
3302
3356
|
else await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
|
|
3303
3357
|
const resetCommand = tsAuthkey ? `sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset --authkey ${JSON.stringify(tsAuthkey)}` : "sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset";
|
|
3304
|
-
const tsReset = tsAuthkey ? run(resetCommand, logPath) : runInteractiveTailscaleLogin(resetCommand, logPath);
|
|
3358
|
+
const tsReset = tsAuthkey ? run(resetCommand, logPath) : await runInteractiveTailscaleLogin(resetCommand, logPath, prompter);
|
|
3305
3359
|
if (!tsReset.ok && !tailscaleTimedOutButReady(tsReset, logPath)) return {
|
|
3306
3360
|
ok: false,
|
|
3307
3361
|
detail: tsReset.detail ?? "tailscale account switch failed"
|
|
@@ -3433,7 +3487,7 @@ async function applyHostingSecurity(params) {
|
|
|
3433
3487
|
initialValue: false
|
|
3434
3488
|
})) {
|
|
3435
3489
|
if (prompter) await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
|
|
3436
|
-
const tsReset = runInteractiveTailscaleLogin("sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset", logPath);
|
|
3490
|
+
const tsReset = await runInteractiveTailscaleLogin("sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset", logPath, prompter);
|
|
3437
3491
|
if (!tsReset.ok && !tailscaleTimedOutButReady(tsReset, logPath)) {
|
|
3438
3492
|
checks.push({
|
|
3439
3493
|
name: "tailscale",
|
|
@@ -3520,7 +3574,7 @@ async function applyHostingSecurity(params) {
|
|
|
3520
3574
|
};
|
|
3521
3575
|
} else {
|
|
3522
3576
|
if (prompter) await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
|
|
3523
|
-
const tsUp = runInteractiveTailscaleLogin("sudo -n tailscale up --ssh", logPath);
|
|
3577
|
+
const tsUp = await runInteractiveTailscaleLogin("sudo -n tailscale up --ssh", logPath, prompter);
|
|
3524
3578
|
if (!tsUp.ok && !tailscaleTimedOutButReady(tsUp, logPath)) {
|
|
3525
3579
|
checks.push({
|
|
3526
3580
|
name: "tailscale",
|
|
@@ -3647,7 +3701,7 @@ async function applyHostingSecurity(params) {
|
|
|
3647
3701
|
ok: true,
|
|
3648
3702
|
detail: "default-deny public ingress with tailnet SSH/HTTPS access"
|
|
3649
3703
|
});
|
|
3650
|
-
const sshRes = run(
|
|
3704
|
+
const sshRes = run(sshHardeningCommand(), logPath);
|
|
3651
3705
|
if (!sshRes.ok) {
|
|
3652
3706
|
checks.push({
|
|
3653
3707
|
name: "ssh",
|
|
@@ -3722,7 +3776,7 @@ async function applyHostingSecurity(params) {
|
|
|
3722
3776
|
ok: true,
|
|
3723
3777
|
detail: "automatic security updates enabled"
|
|
3724
3778
|
});
|
|
3725
|
-
|
|
3779
|
+
appendHostSecurityLog(logPath, "hosting host hardening complete", "enforced");
|
|
3726
3780
|
return {
|
|
3727
3781
|
profile,
|
|
3728
3782
|
checks,
|
|
@@ -4214,7 +4268,6 @@ async function runOnboardingWizard(opts, runtime = defaultRuntime, prompter) {
|
|
|
4214
4268
|
await installPrivateGoForOnboarding();
|
|
4215
4269
|
};
|
|
4216
4270
|
printWizardHeader(runtime);
|
|
4217
|
-
await prompter.intro("FASED Setup");
|
|
4218
4271
|
await requireRiskAcknowledgement({
|
|
4219
4272
|
opts,
|
|
4220
4273
|
prompter
|
|
@@ -2,13 +2,13 @@ import { Ui as logWarn, wa as defaultRuntime } from "./agent-scope-Cb1u7HE7.js";
|
|
|
2
2
|
import "./github-copilot-token-DYrFvncE.js";
|
|
3
3
|
import "./send-vR6HwT94.js";
|
|
4
4
|
import "./send-BQMxv218.js";
|
|
5
|
-
import { $ as emitAgentEvent, B as DEFAULT_INPUT_IMAGE_MIMES, G as normalizeMimeList, H as DEFAULT_INPUT_TIMEOUT_MS, K as resolveInputFileLimits, U as extractFileContentFromSource, V as DEFAULT_INPUT_MAX_REDIRECTS, W as extractImageContentFromSource, a as agentCommand, at as setSseHeaders, et as onAgentEvent, i as resolveAssistantStreamDeltaText, it as sendJson, n as handleGatewayPostJsonEndpoint, nt as resolveAgentIdForRequest, ot as writeDone, r as buildAgentMessageFromConversationEntries, rt as resolveSessionKey, tt as createDefaultDeps, z as DEFAULT_INPUT_IMAGE_MAX_BYTES } from "./pi-embedded-
|
|
5
|
+
import { $ as emitAgentEvent, B as DEFAULT_INPUT_IMAGE_MIMES, G as normalizeMimeList, H as DEFAULT_INPUT_TIMEOUT_MS, K as resolveInputFileLimits, U as extractFileContentFromSource, V as DEFAULT_INPUT_MAX_REDIRECTS, W as extractImageContentFromSource, a as agentCommand, at as setSseHeaders, et as onAgentEvent, i as resolveAssistantStreamDeltaText, it as sendJson, n as handleGatewayPostJsonEndpoint, nt as resolveAgentIdForRequest, ot as writeDone, r as buildAgentMessageFromConversationEntries, rt as resolveSessionKey, tt as createDefaultDeps, z as DEFAULT_INPUT_IMAGE_MAX_BYTES } from "./pi-embedded-Dtw2m41q.js";
|
|
6
6
|
import "./diagnostic-D6XQAXl4.js";
|
|
7
7
|
import "./diagnostic-session-state-CexmAKza.js";
|
|
8
8
|
import "./send-Da1hCe1A.js";
|
|
9
9
|
import "./media-DUBmlR9u.js";
|
|
10
10
|
import "./pi-model-discovery-DYwyxntg.js";
|
|
11
|
-
import "./paths-
|
|
11
|
+
import "./paths-BGX-IMoI.js";
|
|
12
12
|
import "./ssrf-DYsl9qoS.js";
|
|
13
13
|
import "./reply-prefix-DwrVxkMY.js";
|
|
14
14
|
import "./path-alias-guards--dquYHnR.js";
|