@fased/fased 0.1.19 → 0.1.21
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/dist/{agents-ET0n9FED.js → agents-BwDWbvDH.js} +10 -10
- package/dist/{attachment-normalize-DMabJMU0.js → attachment-normalize-C9F-gS4-.js} +1 -1
- package/dist/{attachment-normalize-CDK3Kj-a.js → attachment-normalize-C9w24bkb.js} +1 -1
- package/dist/{audio-preflight-CK4s7Cpe.js → audio-preflight-CTs9Ta27.js} +1 -1
- package/dist/{audio-preflight-CKsWKtOL.js → audio-preflight-DGoGnRdo.js} +1 -1
- package/dist/{audio-preflight-DnxL2DTu.js → audio-preflight-Dg10mePo.js} +4 -4
- package/dist/{audio-preflight-D4ml3rER.js → audio-preflight-DnHScDmF.js} +4 -4
- package/dist/{audio-preflight-CtOWrCYT.js → audio-preflight-QMOvUkXH.js} +1 -1
- package/dist/{audit-Cw2GhO1l.js → audit-DJOyIBeV.js} +1 -1
- package/dist/{audit-DBfVTWuR.js → audit-DmYUk4AC.js} +1 -1
- package/dist/{auth-D6aXaEgt.js → auth-7Dkf1_CI.js} +5 -5
- package/dist/{auth-choice-DCd_rmJr.js → auth-choice-D9LWnNpF.js} +1 -1
- package/dist/{auth-choice-CRcRJvDg.js → auth-choice-DbTYwdGn.js} +1 -1
- package/dist/{auth-choice-prompt-CHAO6E_x.js → auth-choice-prompt-D5YuCYf7.js} +1 -1
- package/dist/{auth-choice-prompt-BBY8vO5H.js → auth-choice-prompt-DFyVEU7J.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +1 -1
- package/dist/bundled/session-memory/handler.js +1 -1
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-web-B90TOW9f.js → channel-web-CAJ_OiB2.js} +1 -1
- package/dist/{channel-web-rogzKqNR.js → channel-web-X3OJcLB2.js} +1 -1
- package/dist/{channels-CIVRD15I.js → channels-BqOjEy1R.js} +8 -8
- package/dist/{channels-BDdw6tRB.js → channels-D9Oj681h.js} +8 -8
- package/dist/{channels-cli-BlinY5L-.js → channels-cli-D5hZAzoE.js} +7 -7
- package/dist/{channels-cli-nB_AyrYg.js → channels-cli-DKRuJbjY.js} +7 -7
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-BkrcbFie.js → cli-ClS8EuDK.js} +4 -4
- package/dist/{cli-DWyf6Ez0.js → cli-Dm0682Gu.js} +4 -4
- package/dist/{command-registry-D0xhHn9Z.js → command-registry-C2wqEo64.js} +10 -10
- package/dist/{completion-cli-BDgp9s2D.js → completion-cli-B9mW_que.js} +2 -2
- package/dist/{completion-cli-BpN_WF59.js → completion-cli-DCvm9Xp-.js} +1 -1
- package/dist/{config-cli-D51JAiE2.js → config-cli-1SYvQdhO.js} +1 -1
- package/dist/{config-cli-Di8fNvh8.js → config-cli-680jTQ3-.js} +1 -1
- package/dist/{configure-ZAJqoe8C.js → configure-BfhVLgNf.js} +14 -14
- package/dist/{configure-CLUalzZB.js → configure-DQLQp2nb.js} +14 -14
- package/dist/control-ui/assets/app-DXYMrRJ9.js.map +1 -1
- package/dist/{cron-cli-CCfMl1ch.js → cron-cli-C4hgRvYJ.js} +2 -2
- package/dist/{cron-cli-COETwgMD.js → cron-cli-DQjdHktC.js} +2 -2
- package/dist/{daemon-cli-DUfzwrLw.js → daemon-cli-B3OUkSy6.js} +1 -1
- package/dist/{daemon-cli-BwMJ_sub.js → daemon-cli-DWhAXx5H.js} +1 -1
- package/dist/daemon-cli.js +1 -1
- package/dist/{deps-BoCGz3bU.js → deps-DdP-Hmxc.js} +1 -1
- package/dist/{deps-vuWHR8ix.js → deps-RXAe1X5s.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +1 -1
- package/dist/{gateway-cli-DAaMYDEy.js → gateway-cli-CHukRtBG.js} +30 -30
- package/dist/{gateway-cli-DcooukDx.js → gateway-cli-Y450jJFF.js} +30 -30
- package/dist/{health-c7sJIXY9.js → health-C-AsEUPg.js} +2 -2
- package/dist/{health-CD-e8iEW.js → health-Db548DTY.js} +2 -2
- package/dist/{heartbeat-runner-DZuApcd1.js → heartbeat-runner-CE9O7xVk.js} +1 -1
- package/dist/{heartbeat-runner-BTRTcwja.js → heartbeat-runner-DAPP5ojq.js} +1 -1
- package/dist/{hooks-cli-Bq6e41xH.js → hooks-cli-ApL31lTH.js} +5 -5
- package/dist/{hooks-cli--azOmGId.js → hooks-cli-DpllVSSB.js} +5 -5
- package/dist/index.js +9 -9
- package/dist/{ipv4-Bxa3Ql2B.js → ipv4-Bh1H98-c.js} +2 -2
- package/dist/{ipv4-BKbsAV5a.js → ipv4-D88X6kcK.js} +2 -2
- package/dist/{lifecycle-DE4kux0k.js → lifecycle-C5O_poBp.js} +1 -1
- package/dist/{lifecycle-DKOezW7h.js → lifecycle-D2VlrxY8.js} +1 -1
- package/dist/{list.auth-overview-DQlFpghW.js → list.auth-overview-DQUc2B2l.js} +1 -1
- package/dist/{list.auth-overview-SasQirvR.js → list.auth-overview-N9tbnvNE.js} +1 -1
- package/dist/llm-slug-generator.js +1 -1
- package/dist/{model-catalog-DHRVUWBf.js → model-catalog-BQ5G4eK6.js} +10 -10
- package/dist/{models-CIAvUTl5.js → models-BObC-MWx.js} +6 -6
- package/dist/{models-cli-CxRv-tjs.js → models-cli-Bcjaf4CI.js} +6 -6
- package/dist/{models-cli-BW4m-HHk.js → models-cli-r2llwGBO.js} +7 -7
- package/dist/{node-cli-CsYpYqHF.js → node-cli-B5TpzQ6U.js} +4 -4
- package/dist/{node-cli--1sHB0Pz.js → node-cli-B8V8ar0H.js} +4 -4
- package/dist/{onboard-lbl9C2gj.js → onboard-C6Z7OaQ8.js} +7 -7
- package/dist/{onboard-BoT3D8J9.js → onboard-D8EOxPOn.js} +7 -7
- package/dist/{onboard-channels-BREKCcFf.js → onboard-channels-C4gBvkYQ.js} +2 -2
- package/dist/{onboard-channels-fJXaj04M.js → onboard-channels-CDr6F5Rc.js} +2 -2
- package/dist/{onboard-search-C6A1sfph.js → onboard-search-BDLus6nY.js} +7 -7
- package/dist/{onboard-search-D-tM9Xrg.js → onboard-search-BzpbxIgm.js} +7 -7
- package/dist/{onboarding-Bejkgd8a.js → onboarding-CIjqOjDq.js} +56 -47
- package/dist/{onboarding-C8AUR3x1.js → onboarding-DjXH2-ro.js} +56 -47
- 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-BYKqYqIr.js → openresponses-http-BA2nkk7t.js} +1 -1
- package/dist/{openresponses-http-DNXaz2VR.js → openresponses-http-C9x0SEG6.js} +4 -4
- package/dist/{openresponses-http-CyP-RUzR.js → openresponses-http-DU9S_V_8.js} +1 -1
- package/dist/{openresponses-http-C8H-a3KL.js → openresponses-http-NFMdHWOs.js} +4 -4
- package/dist/{openresponses-http-BR0xNXbf.js → openresponses-http-eMouHu_v.js} +1 -1
- package/dist/{parent-default-help-B57KLY1o.js → parent-default-help-k4GD2-UF.js} +1 -1
- package/dist/{parent-default-help-B9-EyEJR.js → parent-default-help-zu6kW9Un.js} +1 -1
- package/dist/{pi-embedded-G-VYb-eT.js → pi-embedded-DPElH0OZ.js} +5 -5
- package/dist/{pi-embedded-Dtw2m41q.js → pi-embedded-Pkm2p81t.js} +5 -5
- package/dist/{plugin-registry-Dr7BDkEc.js → plugin-registry-DEewJtHt.js} +1 -1
- package/dist/{plugin-registry-C5c96kNk.js → plugin-registry-DfO1RfZv.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-jaSZX_On.js → audio-preflight-L8bE2tgB.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-Bf83dqiV.js → audio-preflight-a_1hr0Eg.js} +1 -1
- package/dist/plugin-sdk/{channel-web-Bu6Y92kC.js → channel-web-BNlpZrWA.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-gCxCNpHu.js → openresponses-http-BBdkt744.js} +1 -1
- package/dist/plugin-sdk/{openresponses-http-M74cHGFJ.js → openresponses-http-DuRGQn_a.js} +1 -1
- package/dist/plugin-sdk/{reply-Bu9GXy54.js → reply-DclM907b.js} +5 -5
- package/dist/plugin-sdk/src/brand.d.ts +2 -2
- package/dist/plugin-sdk/{status-DLh4u6pb.js → status-EnvYKAtO.js} +5 -5
- package/dist/plugin-sdk/{web-BLZesoTn.js → web-BrtGwPHN.js} +2 -2
- package/dist/plugin-sdk/{web-BqmhQeOi.js → web-C0nKlODk.js} +1 -1
- package/dist/{plugins-cli-CpElRRGB.js → plugins-cli-BU7lm9mm.js} +7 -7
- package/dist/{plugins-cli-hFcodPhF.js → plugins-cli-Be4GLYdI.js} +7 -7
- package/dist/{program-ByNjbwln.js → program-B78oSJVp.js} +9 -9
- package/dist/{program-context-BJ6EvoUW.js → program-context-DpABaPXE.js} +25 -25
- package/dist/{prompt-select-styled-DyUwhQR0.js → prompt-select-styled-DI5ODziX.js} +4 -4
- package/dist/{prompt-select-styled-yZlzGWDe.js → prompt-select-styled-DmcQ0_hv.js} +4 -4
- package/dist/{register.agent-DYThb3Qq.js → register.agent-DOychJ9q.js} +11 -11
- package/dist/{register.agent-QbjX69Zq.js → register.agent-FC9A__Az.js} +10 -10
- package/dist/{register.configure-CXn_6bwZ.js → register.configure-i3gbc5Cc.js} +14 -14
- package/dist/{register.configure-CGzVdNRF.js → register.configure-ybGicOMR.js} +14 -14
- package/dist/{register.maintenance-CiSlTmn6.js → register.maintenance-CYX_k6x1.js} +10 -10
- package/dist/{register.maintenance-Cf-qQw2A.js → register.maintenance-MPPzwTam.js} +11 -11
- package/dist/{register.message-CxejzCev.js → register.message-C_Q6o32_.js} +5 -5
- package/dist/{register.message-Bz8Q1BDo.js → register.message-D6NFTigk.js} +5 -5
- package/dist/{register.onboard-DUvd2gzi.js → register.onboard-DqR_m0_p.js} +16 -16
- package/dist/{register.onboard-D-DkLJKD.js → register.onboard-PbsAD-eY.js} +16 -16
- package/dist/{register.setup-CzJsqVIe.js → register.setup-COidGsw2.js} +16 -16
- package/dist/{register.setup-BotpXpFX.js → register.setup-DMqotP6N.js} +16 -16
- package/dist/{register.status-health-sessions-C9Zx-J4Y.js → register.status-health-sessions-CPBz-3k7.js} +8 -8
- package/dist/{register.status-health-sessions-IUpygKVu.js → register.status-health-sessions-CeY5Pzgk.js} +8 -8
- package/dist/{register.subclis-BtJ07gvR.js → register.subclis-Dxe0Sco3.js} +16 -16
- package/dist/{reply-BRoR6TOO.js → reply-701mJB_S.js} +10 -10
- package/dist/{run-main-J8mnTN8L.js → run-main-BvouUOJB.js} +16 -16
- package/dist/{runtime-helper-grants-CkoxSD6G.js → runtime-helper-grants-B5q5llgE.js} +1 -1
- package/dist/{runtime-helper-grants-DMNl5B0x.js → runtime-helper-grants-CjDNw01t.js} +1 -1
- package/dist/{sandbox-cli-CNyUbQKy.js → sandbox-cli-DKUHq66f.js} +4 -4
- package/dist/{sandbox-cli-DfarPDi7.js → sandbox-cli-MNviI01s.js} +4 -4
- package/dist/{security-cli-DYUEfOxV.js → security-cli-C4J7sHdd.js} +5 -5
- package/dist/{security-cli-DfH_yEpS.js → security-cli-D2jFeCER.js} +5 -5
- package/dist/{server-OnS0sRn3.js → server-BRsV4GHd.js} +4 -4
- package/dist/{server-3-CquHGG.js → server-CvQUqV31.js} +4 -4
- package/dist/{server-cron-BclI8dUt.js → server-cron-BV2pPZ-O.js} +2 -2
- package/dist/{server-cron-CB9ay7nN.js → server-cron-C-3djfm_.js} +2 -2
- package/dist/{server-node-events-B3wjSbTf.js → server-node-events-Bi8FQeYu.js} +5 -5
- package/dist/{server-node-events-CHH1pmQi.js → server-node-events-Ce-RXuis.js} +5 -5
- package/dist/{status-SrKDBHd_.js → status-BiHSisy7.js} +4 -4
- package/dist/{status-kfsSxAsl.js → status-CIb_4gfm.js} +4 -4
- package/dist/{status-Cf-x3WJB.js → status-D9As1GK-.js} +1 -1
- package/dist/{status-DhGsqqOx.js → status-DoLjTnlQ.js} +1 -1
- package/dist/{tui-Cvc1YA_t.js → tui-BpbyDMEE.js} +1 -1
- package/dist/{tui-CIzUfHHB.js → tui-D9armVLc.js} +1 -1
- package/dist/{tui-cli-BxyfSTll.js → tui-cli-A_j8l8a3.js} +5 -5
- package/dist/{tui-cli-D8ECRV-M.js → tui-cli-lN5CL6pA.js} +5 -5
- package/dist/{update-cli-C1i3_uQZ.js → update-cli-B8_evObo.js} +11 -11
- package/dist/{update-cli-TMwGWZhI.js → update-cli-DRefGXK8.js} +12 -12
- package/dist/{update-runner-C6krqlIN.js → update-runner-Bd7n68kz.js} +1 -1
- package/dist/{update-runner-ChBrrXIl.js → update-runner-DnLLf66O.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-l7WkPuq4.js → web-778GrijN.js} +1 -1
- package/dist/{web-CnR4rHHv.js → web-CPKh7bSP.js} +1 -1
- package/dist/{web-CoSbILfi.js → web-D-SMykKz.js} +1 -1
- package/dist/{web-CjKdghAZ.js → web-DEuBtNld.js} +5 -5
- package/dist/{web-vOcMOS29.js → web-Z5JZl5Nc.js} +5 -5
- package/dist/{web-search-providers.runtime-BC_EmT37.js → web-search-providers.runtime-AAOfSU2b.js} +1 -1
- package/dist/{web-search-providers.runtime-B09rLDoa.js → web-search-providers.runtime-DcgcyEiV.js} +1 -1
- package/docs/install/installer.md +11 -11
- package/docs/install/node.md +9 -0
- package/docs/security/baseline-checklist.md +7 -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 +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/scripts/start-managed.sh +11 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { _ as normalizeE164, i as CONFIG_DIR, v as pathExists } from "./agent-paths-DmOVZE7g.js";
|
|
2
2
|
import { $l as runCommandWithTimeout, B as listChatChannels, Bd as listDiscordAccountIds, Dd as listSlackAccountIds, F as createSubsystemLogger, Fd as resolveSignalAccount, Hd as resolveDefaultDiscordAccountId, Hu as resolveDefaultWhatsAppAccountId, Id as listIMessageAccountIds, L as formatChannelPrimerLine, Ld as resolveDefaultIMessageAccountId, Mu as getChannelPlugin, Nd as listSignalAccountIds, Nu as listChannelPlugins, Od as resolveDefaultSlackAccountId, Pd as resolveDefaultSignalAccountId, R as formatChannelSelectionLine, Rd as resolveIMessageAccount, Ud as resolveDiscordAccount, Vu as listWhatsAppAccountIds, Wu as resolveWhatsAppAuthDir, _d as resolveDefaultTelegramAccountId, d as resolveDefaultAgentId, dd as formatCliCommand, gd as listTelegramAccountIds, kd as resolveSlackAccount, ld as stripAnsi, mo as resolveFasedAgentPackageRootSync, ou as extractArchive, u as resolveAgentWorkspaceDir, vd as resolveTelegramAccount, wl as installPluginFromNpmSpec } from "./agent-scope-DHrLr5OF.js";
|
|
3
|
-
import { Ft as resolveSlackUserAllowlist, It as resolveSlackChannelAllowlist, Nt as loadFasedAgentPlugins, la as createPluginLoaderLogger, mn as resolveDiscordChannelAllowlist, pn as resolveDiscordUserAllowlist, zt as detectBinary } from "./reply-
|
|
3
|
+
import { Ft as resolveSlackUserAllowlist, It as resolveSlackChannelAllowlist, Nt as loadFasedAgentPlugins, la as createPluginLoaderLogger, mn as resolveDiscordChannelAllowlist, pn as resolveDiscordUserAllowlist, zt as detectBinary } from "./reply-701mJB_S.js";
|
|
4
4
|
import { h as normalizeAccountId, m as DEFAULT_ACCOUNT_ID } from "./session-key-LmCHAJTQ.js";
|
|
5
5
|
import { dt as normalizeDiscordSlug } from "./send-jxmRy65D.js";
|
|
6
6
|
import { i as isBlockedHostnameOrIp } from "./ssrf-Blf4NrHS.js";
|
|
@@ -12,7 +12,7 @@ import { t as resolveBrewExecutable } from "./brew-C52GeCeh.js";
|
|
|
12
12
|
import { t as resolveChannelDefaultAccountId } from "./helpers-BvDnvwsE.js";
|
|
13
13
|
import { t as enablePluginInConfig } from "./enable-D3_YPNIT.js";
|
|
14
14
|
import { t as buildNpmResolutionInstallFields } from "./installs-DDbnXe4x.js";
|
|
15
|
-
import { o as finalizeInstalledPluginConfig } from "./lifecycle-
|
|
15
|
+
import { o as finalizeInstalledPluginConfig } from "./lifecycle-D2VlrxY8.js";
|
|
16
16
|
import { t as fetchTelegramChatId } from "./api-DLdLLQm_.js";
|
|
17
17
|
import fs, { createWriteStream, readFileSync } from "node:fs";
|
|
18
18
|
import os from "node:os";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $c as installPluginFromNpmSpec, $d as resolveDiscordAccount, $l as listWhatsAppAccountIds, Au as resolveTelegramAccount, Cu as formatCliCommand, Gd as resolveSignalAccount, Gl as listChannelPlugins, Gu as resolveDefaultAgentId, Jd as resolveIMessageAccount, Kd as listIMessageAccountIds, Ld as listSlackAccountIds, Ou as listTelegramAccountIds, Qd as resolveDefaultDiscordAccountId, Rd as resolveDefaultSlackAccountId, Ud as listSignalAccountIds, Wd as resolveDefaultSignalAccountId, Wl as getChannelPlugin, Wu as resolveAgentWorkspaceDir, Xd as listDiscordAccountIds, a as createSubsystemLogger, c as formatChannelSelectionLine, eu as resolveDefaultWhatsAppAccountId, ku as resolveDefaultTelegramAccountId, md as runCommandWithTimeout, nu as resolveWhatsAppAuthDir, pd as resolveFasedAgentPackageRootSync, qd as resolveDefaultIMessageAccountId, s as formatChannelPrimerLine, u as listChatChannels, xl as extractArchive, xu as stripAnsi, zd as resolveSlackAccount } from "./env-C77feXxI.js";
|
|
2
2
|
import { _ as pathExists, g as normalizeE164, i as CONFIG_DIR } from "./agent-paths-BI1hx-tF.js";
|
|
3
3
|
import { dt as normalizeDiscordSlug } from "./send-BFEd4vCM.js";
|
|
4
|
-
import { Oi as createPluginLoaderLogger, Qt as resolveDiscordUserAllowlist, V as resolveDiscordChannelAllowlist, Zt as resolveSlackUserAllowlist, c as loadFasedAgentPlugins, p as detectBinary, u as resolveSlackChannelAllowlist } from "./model-catalog-
|
|
4
|
+
import { Oi as createPluginLoaderLogger, Qt as resolveDiscordUserAllowlist, V as resolveDiscordChannelAllowlist, Zt as resolveSlackUserAllowlist, c as loadFasedAgentPlugins, p as detectBinary, u as resolveSlackChannelAllowlist } from "./model-catalog-BQ5G4eK6.js";
|
|
5
5
|
import { J as DEFAULT_ACCOUNT_ID, Y as normalizeAccountId } from "./entry.js";
|
|
6
6
|
import { i as isBlockedHostnameOrIp } from "./ssrf-CqV2hisj.js";
|
|
7
7
|
import { d as listChannelPluginCatalogEntries, f as resolveChannelPluginExpectedPluginIds, l as formatChannelPluginCatalogSelectionHint, s as isChannelConfigured, u as formatChannelPluginCatalogStatusLine } from "./dangerous-name-matching-CFRKz8Uq.js";
|
|
@@ -12,7 +12,7 @@ import { t as loginWeb } from "./login-CuawnITW.js";
|
|
|
12
12
|
import { t as resolveChannelDefaultAccountId } from "./helpers-BfdkoReO.js";
|
|
13
13
|
import { t as enablePluginInConfig } from "./enable-C4xB2A3x.js";
|
|
14
14
|
import { t as buildNpmResolutionInstallFields } from "./installs-Cha8QIzO.js";
|
|
15
|
-
import { o as finalizeInstalledPluginConfig } from "./lifecycle-
|
|
15
|
+
import { o as finalizeInstalledPluginConfig } from "./lifecycle-C5O_poBp.js";
|
|
16
16
|
import { t as fetchTelegramChatId } from "./api-uvDKewCP.js";
|
|
17
17
|
import { spawn } from "node:child_process";
|
|
18
18
|
import os from "node:os";
|
|
@@ -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-BQ5G4eK6.js";
|
|
6
6
|
import "./github-copilot-token-A9DiaCB0.js";
|
|
7
7
|
import "./reply-prefix-TUhpEtvr.js";
|
|
8
8
|
import "./memory-2keYbXkc.js";
|
|
@@ -30,10 +30,10 @@ import "./dangerous-tools-CusV9bcr.js";
|
|
|
30
30
|
import "./chrome-bxkNKPA7.js";
|
|
31
31
|
import "./pairing-token-C2iKEhFc.js";
|
|
32
32
|
import "./ws-DiFJ3zRB.js";
|
|
33
|
-
import "./onboarding.wallet
|
|
33
|
+
import "./onboarding.wallet-B87UVKiT.js";
|
|
34
34
|
import "./wallet-runtime-config-TjiNNY9x.js";
|
|
35
35
|
import "./wallet-provider-registry-CFNtQ2ZR.js";
|
|
36
|
-
import "./wallet-
|
|
36
|
+
import "./wallet-CJdBRqTq.js";
|
|
37
37
|
import "./wallet-approval-auth-BaVTLG5r.js";
|
|
38
38
|
import "./runtime-DXHXAPJA.js";
|
|
39
39
|
import "./device-identity-ZHUQ6a8N.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-DdP-Hmxc.js";
|
|
48
48
|
import "./frontmatter-D2UNJikU.js";
|
|
49
49
|
import "./skills-Dis31awJ.js";
|
|
50
50
|
import "./skills-remote-CIAB0AXm.js";
|
|
@@ -75,10 +75,10 @@ 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-DoLjTnlQ.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-C5O_poBp.js";
|
|
81
|
+
import { t as resolvePluginWebSearchProviders } from "./web-search-providers.runtime-AAOfSU2b.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-701mJB_S.js";
|
|
6
6
|
import "./errors-Dx3S3Nrp.js";
|
|
7
7
|
import "./send-C5_fB8YQ.js";
|
|
8
8
|
import "./send-jxmRy65D.js";
|
|
@@ -14,10 +14,10 @@ import "./chrome-mXtDMFyZ.js";
|
|
|
14
14
|
import "./pairing-token-BFGorDQo.js";
|
|
15
15
|
import "./ip-D_T5zbZS.js";
|
|
16
16
|
import "./ws-cvQhrVP3.js";
|
|
17
|
-
import "./onboarding.wallet-
|
|
17
|
+
import "./onboarding.wallet-BFJRJg77.js";
|
|
18
18
|
import "./wallet-runtime-config-BlRWvEER.js";
|
|
19
19
|
import "./wallet-provider-registry-ax0NJo0F.js";
|
|
20
|
-
import "./wallet-
|
|
20
|
+
import "./wallet-DZA0r3pV.js";
|
|
21
21
|
import "./wallet-approval-auth-DT-vofLs.js";
|
|
22
22
|
import "./reply-prefix-C2EEc3pc.js";
|
|
23
23
|
import "./media-C5BIKO-v.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-RXAe1X5s.js";
|
|
41
41
|
import "./memory-DDpj0IVA.js";
|
|
42
42
|
import "./memory-search-BwYkW6_V.js";
|
|
43
43
|
import "./manager-BmONwMiP.js";
|
|
@@ -78,10 +78,10 @@ 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-D9As1GK-.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-D2VlrxY8.js";
|
|
84
|
+
import { t as resolvePluginWebSearchProviders } from "./web-search-providers.runtime-DcgcyEiV.js";
|
|
85
85
|
import fs from "node:fs";
|
|
86
86
|
import path from "node:path";
|
|
87
87
|
|
|
@@ -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-701mJB_S.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-Bh1H98-c.js";
|
|
21
|
+
import { o as waitForHostedDashboardBrowserPath } from "./health-C-AsEUPg.js";
|
|
22
|
+
import { n as warnIfModelConfigLooksOff, r as applyAuthChoice } from "./auth-choice-D9LWnNpF.js";
|
|
23
|
+
import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-DFyVEU7J.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-C4gBvkYQ.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-D9armVLc.js";
|
|
28
28
|
import fs from "node:fs";
|
|
29
29
|
import os from "node:os";
|
|
30
30
|
import path from "node:path";
|
|
@@ -169,7 +169,7 @@ function isHostedSecurityCapableSession(explicitFlag = false) {
|
|
|
169
169
|
const sudoersPath = path.join("/etc/sudoers.d", `fased-host-maintenance-${currentUser}`);
|
|
170
170
|
if (fs.existsSync(sudoersPath)) return true;
|
|
171
171
|
}
|
|
172
|
-
return canRunHostedMaintenanceCommand("sudo -n tailscale
|
|
172
|
+
return canRunHostedMaintenanceCommand("sudo -n /usr/local/sbin/fased-host-maintenance tailscale-status >/dev/null 2>&1") || canRunHostedMaintenanceCommand("sudo -n /usr/local/sbin/fased-host-maintenance tailnet-ssh-ingress >/dev/null 2>&1") || canRunHostedMaintenanceCommand("sudo -n /usr/local/sbin/fased-host-maintenance firewall-baseline >/dev/null 2>&1") || canRunHostedMaintenanceCommand("sudo -n systemctl status fased-gateway.service >/dev/null 2>&1");
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
//#endregion
|
|
@@ -547,16 +547,18 @@ async function installRootServiceMaintenanceAccess(params) {
|
|
|
547
547
|
const sudoers = [
|
|
548
548
|
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl restart ${safeServiceName}.service`,
|
|
549
549
|
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl restart --no-block ${safeServiceName}.service`,
|
|
550
|
+
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl start --no-block ${safeServiceName}.service`,
|
|
551
|
+
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl enable --now ${safeServiceName}.service`,
|
|
550
552
|
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl status ${safeServiceName}.service`,
|
|
551
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl status ${safeServiceName}.service
|
|
552
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl status ${safeServiceName} *`,
|
|
553
|
+
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl status ${safeServiceName}.service --no-pager`,
|
|
553
554
|
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl is-active ${safeServiceName}.service`,
|
|
554
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl is-active ${safeServiceName}
|
|
555
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl
|
|
556
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl
|
|
557
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/
|
|
558
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName}.service
|
|
559
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName}
|
|
555
|
+
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl is-active ${safeServiceName}`,
|
|
556
|
+
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl show ${safeServiceName}.service -p ActiveState --value`,
|
|
557
|
+
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl cat ${safeServiceName}.service`,
|
|
558
|
+
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName}.service -n 50 --no-pager`,
|
|
559
|
+
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName}.service -n 120 --no-pager`,
|
|
560
|
+
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName} -n 50 --no-pager`,
|
|
561
|
+
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName} -n 120 --no-pager`
|
|
560
562
|
].join("\n");
|
|
561
563
|
return await runShell([
|
|
562
564
|
`echo '${Buffer.from(`${sudoers}\n`, "utf8").toString("base64")}' | base64 -d | sudo -n tee '${sudoersPath}' >/dev/null`,
|
|
@@ -1662,7 +1664,7 @@ async function finalizeOnboardingWizard(options) {
|
|
|
1662
1664
|
if (process.platform === "linux") {
|
|
1663
1665
|
const localSignerSync = resolveLocalSignerSyncForFinalize({ strictVps });
|
|
1664
1666
|
if (localSignerSync.sync) try {
|
|
1665
|
-
const { syncLocalSocketSignerFromConfig } = await import("./onboarding.wallet-
|
|
1667
|
+
const { syncLocalSocketSignerFromConfig } = await import("./onboarding.wallet-BFJRJg77.js").then((n) => n.i);
|
|
1666
1668
|
await syncLocalSocketSignerFromConfig({
|
|
1667
1669
|
config: nextConfig,
|
|
1668
1670
|
env: process.env,
|
|
@@ -2748,6 +2750,7 @@ const LOW_MEMORY_HOSTING_SWAP_GB = 4;
|
|
|
2748
2750
|
const HOSTING_SWAP_GB = 2;
|
|
2749
2751
|
const TAILSCALE_INTERACTIVE_TIMEOUT_MS = 120 * 1e3;
|
|
2750
2752
|
const TAILSCALE_LOGIN_URL_RE = /https:\/\/login\.tailscale\.com\/a\/[A-Za-z0-9_-]+/i;
|
|
2753
|
+
const HOST_MAINTENANCE_HELPER = "/usr/local/sbin/fased-host-maintenance";
|
|
2751
2754
|
function detectTotalMemoryMb() {
|
|
2752
2755
|
if (process.platform === "linux") try {
|
|
2753
2756
|
const match = fs.readFileSync("/proc/meminfo", "utf8").match(/^MemTotal:\s+(\d+)\s+kB/m);
|
|
@@ -2848,7 +2851,7 @@ function buildTailscaleLoginWaitCommand(command) {
|
|
|
2848
2851
|
`bash -lc ${shellQuote(command)} &`,
|
|
2849
2852
|
"ts_pid=$!",
|
|
2850
2853
|
"for _ in $(seq 1 55); do",
|
|
2851
|
-
|
|
2854
|
+
` if tailscale ip -4 >/dev/null 2>&1 || ${hostMaintenanceCommand("tailscale-ip4")} >/dev/null 2>&1 || sudo -n tailscale ip -4 >/dev/null 2>&1; then`,
|
|
2852
2855
|
" kill -INT \"$ts_pid\" >/dev/null 2>&1 || true",
|
|
2853
2856
|
" wait \"$ts_pid\" >/dev/null 2>&1 || true",
|
|
2854
2857
|
" exit 0",
|
|
@@ -2861,7 +2864,7 @@ function buildTailscaleLoginWaitCommand(command) {
|
|
|
2861
2864
|
"done",
|
|
2862
2865
|
"kill -INT \"$ts_pid\" >/dev/null 2>&1 || true",
|
|
2863
2866
|
"wait \"$ts_pid\" >/dev/null 2>&1 || true",
|
|
2864
|
-
|
|
2867
|
+
`if tailscale ip -4 >/dev/null 2>&1 || ${hostMaintenanceCommand("tailscale-ip4")} >/dev/null 2>&1 || sudo -n tailscale ip -4 >/dev/null 2>&1; then`,
|
|
2865
2868
|
" exit 0",
|
|
2866
2869
|
"fi",
|
|
2867
2870
|
"exit 124"
|
|
@@ -2914,21 +2917,29 @@ function tailscaleTimedOutButReady(result, logPath, runner = run) {
|
|
|
2914
2917
|
function shellQuote(value) {
|
|
2915
2918
|
return `'${value.replace(/'/g, "'\\''")}'`;
|
|
2916
2919
|
}
|
|
2920
|
+
function hostMaintenanceCommand(action) {
|
|
2921
|
+
return `sudo -n ${HOST_MAINTENANCE_HELPER} ${action}`;
|
|
2922
|
+
}
|
|
2923
|
+
function hostMaintenanceCommandWithInput(action, input) {
|
|
2924
|
+
return `printf '%s\\n' ${shellQuote(input)} | ${hostMaintenanceCommand(action)}`;
|
|
2925
|
+
}
|
|
2917
2926
|
function isTailscaleLoggedIn(logPath, runner = run) {
|
|
2918
|
-
return runner("tailscale status >/dev/null 2>&1", logPath).ok || runner("sudo -n tailscale status >/dev/null 2>&1", logPath).ok;
|
|
2927
|
+
return runner("tailscale status >/dev/null 2>&1", logPath).ok || runner(`${hostMaintenanceCommand("tailscale-status")} >/dev/null 2>&1`, logPath).ok || runner("sudo -n tailscale status >/dev/null 2>&1", logPath).ok;
|
|
2919
2928
|
}
|
|
2920
2929
|
function hasTailscaleIp(logPath, runner = run) {
|
|
2921
|
-
return runner("tailscale ip -4 >/dev/null 2>&1", logPath).ok || runner("sudo -n tailscale ip -4 >/dev/null 2>&1", logPath).ok;
|
|
2930
|
+
return runner("tailscale ip -4 >/dev/null 2>&1", logPath).ok || runner(`${hostMaintenanceCommand("tailscale-ip4")} >/dev/null 2>&1`, logPath).ok || runner("sudo -n tailscale ip -4 >/dev/null 2>&1", logPath).ok;
|
|
2922
2931
|
}
|
|
2923
2932
|
function readTailscaleIp(logPath, runner = run) {
|
|
2924
2933
|
const probe = runner("tailscale ip -4", logPath);
|
|
2925
|
-
const
|
|
2934
|
+
const helperProbe = probe.ok ? probe : runner(hostMaintenanceCommand("tailscale-ip4"), logPath);
|
|
2935
|
+
const sudoProbe = helperProbe.ok ? helperProbe : runner("sudo -n tailscale ip -4", logPath);
|
|
2926
2936
|
if (!sudoProbe.ok || !sudoProbe.detail) return;
|
|
2927
2937
|
return sudoProbe.detail.match(/\b\d{1,3}(?:\.\d{1,3}){3}\b/)?.[0];
|
|
2928
2938
|
}
|
|
2929
2939
|
function readTailscaleSelf(logPath, runner = run) {
|
|
2930
2940
|
const probe = runner("tailscale status --json", logPath);
|
|
2931
|
-
const
|
|
2941
|
+
const helperProbe = probe.ok ? probe : runner(hostMaintenanceCommand("tailscale-status-json"), logPath);
|
|
2942
|
+
const sudoProbe = helperProbe.ok ? helperProbe : runner("sudo -n tailscale status --json", logPath);
|
|
2932
2943
|
if (!sudoProbe.ok || !sudoProbe.detail) return { ipv4: readTailscaleIp(logPath, runner) };
|
|
2933
2944
|
try {
|
|
2934
2945
|
const parsed = JSON.parse(sudoProbe.detail);
|
|
@@ -3034,7 +3045,8 @@ function verifyTailnetSshServerPrerequisites(params) {
|
|
|
3034
3045
|
};
|
|
3035
3046
|
}
|
|
3036
3047
|
function ensureTailnetSshIngressForVerification(params) {
|
|
3037
|
-
const
|
|
3048
|
+
const runner = params.runner ?? run;
|
|
3049
|
+
const command = [
|
|
3038
3050
|
"if command -v ufw >/dev/null 2>&1; then",
|
|
3039
3051
|
" if sudo -n ufw status | grep -qi '^Status: active'; then",
|
|
3040
3052
|
" sudo -n ufw insert 1 allow in on tailscale0 to any port 22 proto tcp || sudo -n ufw allow in on tailscale0 to any port 22 proto tcp",
|
|
@@ -3045,7 +3057,9 @@ function ensureTailnetSshIngressForVerification(params) {
|
|
|
3045
3057
|
" sudo -n firewall-cmd --permanent --zone=trusted --add-interface=tailscale0 >/dev/null 2>&1 || true",
|
|
3046
3058
|
" sudo -n firewall-cmd --reload >/dev/null 2>&1 || true",
|
|
3047
3059
|
"fi"
|
|
3048
|
-
].join("\n")
|
|
3060
|
+
].join("\n");
|
|
3061
|
+
const helperResult = runner(hostMaintenanceCommand("tailnet-ssh-ingress"), params.logPath);
|
|
3062
|
+
const result = helperResult.ok ? helperResult : runner(command, params.logPath);
|
|
3049
3063
|
if (!result.ok) return {
|
|
3050
3064
|
ok: false,
|
|
3051
3065
|
detail: result.detail ?? "could not prepare tailnet SSH firewall rule before verification"
|
|
@@ -3132,7 +3146,7 @@ async function confirmTailnetSshBeforeLockdown(params) {
|
|
|
3132
3146
|
return false;
|
|
3133
3147
|
}
|
|
3134
3148
|
await prompter.note(formatTailscaleAccountBrowserLoginNote(), "Tailscale login");
|
|
3135
|
-
const tsReset = await interactiveRunner("
|
|
3149
|
+
const tsReset = await interactiveRunner(hostMaintenanceCommand("tailscale-up-reset-ssh"), logPath, prompter);
|
|
3136
3150
|
const acceptedTimedOutLogin = tailscaleTimedOutButReady(tsReset, logPath, runner);
|
|
3137
3151
|
if (!tsReset.ok && !acceptedTimedOutLogin || !hasTailscaleIp(logPath, runner)) {
|
|
3138
3152
|
runtime.error("Hosting setup stopped before SSH/firewall lock-down.");
|
|
@@ -3176,9 +3190,9 @@ function ensureTailscaleServe(port, logPath) {
|
|
|
3176
3190
|
ok: true,
|
|
3177
3191
|
detail: `tailscale serve --bg -> 127.0.0.1:${port}`
|
|
3178
3192
|
};
|
|
3179
|
-
if (run(
|
|
3193
|
+
if (run(hostMaintenanceCommandWithInput("tailscale-serve", String(port)), logPath).ok) return {
|
|
3180
3194
|
ok: true,
|
|
3181
|
-
detail: `
|
|
3195
|
+
detail: `host maintenance tailscale serve -> 127.0.0.1:${port}`
|
|
3182
3196
|
};
|
|
3183
3197
|
if (run(`tailscale serve https / http://127.0.0.1:${port}`, logPath).ok) return {
|
|
3184
3198
|
ok: true,
|
|
@@ -3202,7 +3216,7 @@ function isTailscaleServeReady(port) {
|
|
|
3202
3216
|
],
|
|
3203
3217
|
encoding: "utf8"
|
|
3204
3218
|
});
|
|
3205
|
-
if ((probe.status ?? 1) !== 0) probe = spawnSync("bash", ["-lc", "
|
|
3219
|
+
if ((probe.status ?? 1) !== 0) probe = spawnSync("bash", ["-lc", hostMaintenanceCommand("tailscale-serve-status")], {
|
|
3206
3220
|
stdio: [
|
|
3207
3221
|
"ignore",
|
|
3208
3222
|
"pipe",
|
|
@@ -3235,6 +3249,7 @@ function packageInstallCommand(packages) {
|
|
|
3235
3249
|
}
|
|
3236
3250
|
function tailscaleInstallCommand() {
|
|
3237
3251
|
return [
|
|
3252
|
+
`${hostMaintenanceCommand("tailscale-install-start")} && exit 0`,
|
|
3238
3253
|
"if command -v tailscale >/dev/null 2>&1; then",
|
|
3239
3254
|
" :",
|
|
3240
3255
|
"elif command -v apt-get >/dev/null 2>&1; then",
|
|
@@ -3260,6 +3275,7 @@ function tailscaleInstallCommand() {
|
|
|
3260
3275
|
}
|
|
3261
3276
|
function firewallBaselineCommand() {
|
|
3262
3277
|
return [
|
|
3278
|
+
`${hostMaintenanceCommand("firewall-baseline")} && exit 0`,
|
|
3263
3279
|
"if command -v ufw >/dev/null 2>&1 || command -v apt-get >/dev/null 2>&1; then",
|
|
3264
3280
|
" command -v ufw >/dev/null 2>&1 || { " + packageInstallCommand(["ufw"]) + "; }",
|
|
3265
3281
|
" sudo -n ufw default deny incoming",
|
|
@@ -3283,6 +3299,7 @@ function firewallBaselineCommand() {
|
|
|
3283
3299
|
}
|
|
3284
3300
|
function automaticUpdatesCommand() {
|
|
3285
3301
|
return [
|
|
3302
|
+
`${hostMaintenanceCommand("automatic-updates")} && exit 0`,
|
|
3286
3303
|
"if command -v apt-get >/dev/null 2>&1; then",
|
|
3287
3304
|
" " + packageInstallCommand(["unattended-upgrades"]),
|
|
3288
3305
|
" sudo -n systemctl enable --now unattended-upgrades >/dev/null 2>&1 || true",
|
|
@@ -3301,15 +3318,7 @@ function automaticUpdatesCommand() {
|
|
|
3301
3318
|
].join("\n");
|
|
3302
3319
|
}
|
|
3303
3320
|
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");
|
|
3321
|
+
return hostMaintenanceCommand("harden-ssh");
|
|
3313
3322
|
}
|
|
3314
3323
|
function failOrContinue(params) {
|
|
3315
3324
|
const { opts, runtime, step, detail } = params;
|
|
@@ -3355,7 +3364,7 @@ async function applyHostingSecurity(params) {
|
|
|
3355
3364
|
validate: (value) => value.trim() ? void 0 : "Required"
|
|
3356
3365
|
})).trim();
|
|
3357
3366
|
else await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
|
|
3358
|
-
const resetCommand = tsAuthkey ?
|
|
3367
|
+
const resetCommand = tsAuthkey ? hostMaintenanceCommandWithInput("tailscale-up-reset-authkey-ssh", tsAuthkey) : hostMaintenanceCommand("tailscale-up-reset-ssh");
|
|
3359
3368
|
const tsReset = tsAuthkey ? run(resetCommand, logPath) : await runInteractiveTailscaleLogin(resetCommand, logPath, prompter);
|
|
3360
3369
|
if (!tsReset.ok && !tailscaleTimedOutButReady(tsReset, logPath)) return {
|
|
3361
3370
|
ok: false,
|
|
@@ -3479,7 +3488,7 @@ async function applyHostingSecurity(params) {
|
|
|
3479
3488
|
logPath
|
|
3480
3489
|
};
|
|
3481
3490
|
}
|
|
3482
|
-
} else if (hasCommand("systemctl")) run("sudo -n systemctl enable --now tailscaled >/dev/null 2>&1 || true
|
|
3491
|
+
} else if (hasCommand("systemctl")) run(`${hostMaintenanceCommand("tailscale-install-start")} >/dev/null 2>&1 || sudo -n systemctl enable --now tailscaled >/dev/null 2>&1 || true`, logPath);
|
|
3483
3492
|
if (prompter && opts.nonInteractive !== true) await prompter.note(formatLocalDeviceTailnetRequirementNote(), "Local device requirement");
|
|
3484
3493
|
let tsHealthy = isTailscaleLoggedIn(logPath);
|
|
3485
3494
|
if (tsHealthy && prompter && opts.nonInteractive !== true) {
|
|
@@ -3488,7 +3497,7 @@ async function applyHostingSecurity(params) {
|
|
|
3488
3497
|
initialValue: false
|
|
3489
3498
|
})) {
|
|
3490
3499
|
if (prompter) await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
|
|
3491
|
-
const tsReset = await runInteractiveTailscaleLogin("
|
|
3500
|
+
const tsReset = await runInteractiveTailscaleLogin(hostMaintenanceCommand("tailscale-up-reset-ssh"), logPath, prompter);
|
|
3492
3501
|
if (!tsReset.ok && !tailscaleTimedOutButReady(tsReset, logPath)) {
|
|
3493
3502
|
checks.push({
|
|
3494
3503
|
name: "tailscale",
|
|
@@ -3531,7 +3540,7 @@ async function applyHostingSecurity(params) {
|
|
|
3531
3540
|
})).trim();
|
|
3532
3541
|
}
|
|
3533
3542
|
if (tsAuthkey) {
|
|
3534
|
-
const tsUp = run(
|
|
3543
|
+
const tsUp = run(hostMaintenanceCommandWithInput("tailscale-up-authkey-ssh", tsAuthkey), logPath);
|
|
3535
3544
|
if (!tsUp.ok) {
|
|
3536
3545
|
checks.push({
|
|
3537
3546
|
name: "tailscale",
|
|
@@ -3575,7 +3584,7 @@ async function applyHostingSecurity(params) {
|
|
|
3575
3584
|
};
|
|
3576
3585
|
} else {
|
|
3577
3586
|
if (prompter) await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
|
|
3578
|
-
const tsUp = await runInteractiveTailscaleLogin("
|
|
3587
|
+
const tsUp = await runInteractiveTailscaleLogin(hostMaintenanceCommand("tailscale-up-ssh"), logPath, prompter);
|
|
3579
3588
|
if (!tsUp.ok && !tailscaleTimedOutButReady(tsUp, logPath)) {
|
|
3580
3589
|
checks.push({
|
|
3581
3590
|
name: "tailscale",
|
|
@@ -3630,7 +3639,7 @@ async function applyHostingSecurity(params) {
|
|
|
3630
3639
|
detail: "tailnet IP present; verifying app SSH before lock-down"
|
|
3631
3640
|
});
|
|
3632
3641
|
const operatorUser = run("id -u app >/dev/null 2>&1", logPath).ok ? "app" : process.env.SUDO_USER?.trim() || process.env.USER?.trim() || process.env.LOGNAME?.trim();
|
|
3633
|
-
if (operatorUser) run(
|
|
3642
|
+
if (operatorUser) run(`${hostMaintenanceCommand("tailscale-set-operator-self")} >/dev/null 2>&1 || true`, logPath);
|
|
3634
3643
|
if (!await confirmTailnetSshBeforeLockdown({
|
|
3635
3644
|
opts,
|
|
3636
3645
|
runtime,
|
|
@@ -3727,7 +3736,7 @@ async function applyHostingSecurity(params) {
|
|
|
3727
3736
|
ok: true,
|
|
3728
3737
|
detail: "password auth/root login disabled and ssh restarted"
|
|
3729
3738
|
});
|
|
3730
|
-
const f2bRes = runHostSetupCommand(`${packageInstallCommand(["fail2ban"])}\nsudo -n systemctl enable --now fail2ban`);
|
|
3739
|
+
const f2bRes = runHostSetupCommand(`${hostMaintenanceCommand("fail2ban-enable")} || (${packageInstallCommand(["fail2ban"])}\nsudo -n systemctl enable --now fail2ban)`);
|
|
3731
3740
|
if (!f2bRes.ok) {
|
|
3732
3741
|
checks.push({
|
|
3733
3742
|
name: "fail2ban",
|