@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.
Files changed (202) hide show
  1. package/dist/{agents-ET0n9FED.js → agents-BwDWbvDH.js} +10 -10
  2. package/dist/{attachment-normalize-DMabJMU0.js → attachment-normalize-C9F-gS4-.js} +1 -1
  3. package/dist/{attachment-normalize-CDK3Kj-a.js → attachment-normalize-C9w24bkb.js} +1 -1
  4. package/dist/{audio-preflight-CK4s7Cpe.js → audio-preflight-CTs9Ta27.js} +1 -1
  5. package/dist/{audio-preflight-CKsWKtOL.js → audio-preflight-DGoGnRdo.js} +1 -1
  6. package/dist/{audio-preflight-DnxL2DTu.js → audio-preflight-Dg10mePo.js} +4 -4
  7. package/dist/{audio-preflight-D4ml3rER.js → audio-preflight-DnHScDmF.js} +4 -4
  8. package/dist/{audio-preflight-CtOWrCYT.js → audio-preflight-QMOvUkXH.js} +1 -1
  9. package/dist/{audit-Cw2GhO1l.js → audit-DJOyIBeV.js} +1 -1
  10. package/dist/{audit-DBfVTWuR.js → audit-DmYUk4AC.js} +1 -1
  11. package/dist/{auth-D6aXaEgt.js → auth-7Dkf1_CI.js} +5 -5
  12. package/dist/{auth-choice-DCd_rmJr.js → auth-choice-D9LWnNpF.js} +1 -1
  13. package/dist/{auth-choice-CRcRJvDg.js → auth-choice-DbTYwdGn.js} +1 -1
  14. package/dist/{auth-choice-prompt-CHAO6E_x.js → auth-choice-prompt-D5YuCYf7.js} +1 -1
  15. package/dist/{auth-choice-prompt-BBY8vO5H.js → auth-choice-prompt-DFyVEU7J.js} +1 -1
  16. package/dist/build-info.json +3 -3
  17. package/dist/bundled/boot-md/handler.js +1 -1
  18. package/dist/bundled/session-memory/handler.js +1 -1
  19. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  20. package/dist/{channel-web-B90TOW9f.js → channel-web-CAJ_OiB2.js} +1 -1
  21. package/dist/{channel-web-rogzKqNR.js → channel-web-X3OJcLB2.js} +1 -1
  22. package/dist/{channels-CIVRD15I.js → channels-BqOjEy1R.js} +8 -8
  23. package/dist/{channels-BDdw6tRB.js → channels-D9Oj681h.js} +8 -8
  24. package/dist/{channels-cli-BlinY5L-.js → channels-cli-D5hZAzoE.js} +7 -7
  25. package/dist/{channels-cli-nB_AyrYg.js → channels-cli-DKRuJbjY.js} +7 -7
  26. package/dist/cli/daemon-cli.js +1 -1
  27. package/dist/{cli-BkrcbFie.js → cli-ClS8EuDK.js} +4 -4
  28. package/dist/{cli-DWyf6Ez0.js → cli-Dm0682Gu.js} +4 -4
  29. package/dist/{command-registry-D0xhHn9Z.js → command-registry-C2wqEo64.js} +10 -10
  30. package/dist/{completion-cli-BDgp9s2D.js → completion-cli-B9mW_que.js} +2 -2
  31. package/dist/{completion-cli-BpN_WF59.js → completion-cli-DCvm9Xp-.js} +1 -1
  32. package/dist/{config-cli-D51JAiE2.js → config-cli-1SYvQdhO.js} +1 -1
  33. package/dist/{config-cli-Di8fNvh8.js → config-cli-680jTQ3-.js} +1 -1
  34. package/dist/{configure-ZAJqoe8C.js → configure-BfhVLgNf.js} +14 -14
  35. package/dist/{configure-CLUalzZB.js → configure-DQLQp2nb.js} +14 -14
  36. package/dist/control-ui/assets/app-DXYMrRJ9.js.map +1 -1
  37. package/dist/{cron-cli-CCfMl1ch.js → cron-cli-C4hgRvYJ.js} +2 -2
  38. package/dist/{cron-cli-COETwgMD.js → cron-cli-DQjdHktC.js} +2 -2
  39. package/dist/{daemon-cli-DUfzwrLw.js → daemon-cli-B3OUkSy6.js} +1 -1
  40. package/dist/{daemon-cli-BwMJ_sub.js → daemon-cli-DWhAXx5H.js} +1 -1
  41. package/dist/daemon-cli.js +1 -1
  42. package/dist/{deps-BoCGz3bU.js → deps-DdP-Hmxc.js} +1 -1
  43. package/dist/{deps-vuWHR8ix.js → deps-RXAe1X5s.js} +1 -1
  44. package/dist/entry.js +1 -1
  45. package/dist/extensionAPI.js +1 -1
  46. package/dist/{gateway-cli-DAaMYDEy.js → gateway-cli-CHukRtBG.js} +30 -30
  47. package/dist/{gateway-cli-DcooukDx.js → gateway-cli-Y450jJFF.js} +30 -30
  48. package/dist/{health-c7sJIXY9.js → health-C-AsEUPg.js} +2 -2
  49. package/dist/{health-CD-e8iEW.js → health-Db548DTY.js} +2 -2
  50. package/dist/{heartbeat-runner-DZuApcd1.js → heartbeat-runner-CE9O7xVk.js} +1 -1
  51. package/dist/{heartbeat-runner-BTRTcwja.js → heartbeat-runner-DAPP5ojq.js} +1 -1
  52. package/dist/{hooks-cli-Bq6e41xH.js → hooks-cli-ApL31lTH.js} +5 -5
  53. package/dist/{hooks-cli--azOmGId.js → hooks-cli-DpllVSSB.js} +5 -5
  54. package/dist/index.js +9 -9
  55. package/dist/{ipv4-Bxa3Ql2B.js → ipv4-Bh1H98-c.js} +2 -2
  56. package/dist/{ipv4-BKbsAV5a.js → ipv4-D88X6kcK.js} +2 -2
  57. package/dist/{lifecycle-DE4kux0k.js → lifecycle-C5O_poBp.js} +1 -1
  58. package/dist/{lifecycle-DKOezW7h.js → lifecycle-D2VlrxY8.js} +1 -1
  59. package/dist/{list.auth-overview-DQlFpghW.js → list.auth-overview-DQUc2B2l.js} +1 -1
  60. package/dist/{list.auth-overview-SasQirvR.js → list.auth-overview-N9tbnvNE.js} +1 -1
  61. package/dist/llm-slug-generator.js +1 -1
  62. package/dist/{model-catalog-DHRVUWBf.js → model-catalog-BQ5G4eK6.js} +10 -10
  63. package/dist/{models-CIAvUTl5.js → models-BObC-MWx.js} +6 -6
  64. package/dist/{models-cli-CxRv-tjs.js → models-cli-Bcjaf4CI.js} +6 -6
  65. package/dist/{models-cli-BW4m-HHk.js → models-cli-r2llwGBO.js} +7 -7
  66. package/dist/{node-cli-CsYpYqHF.js → node-cli-B5TpzQ6U.js} +4 -4
  67. package/dist/{node-cli--1sHB0Pz.js → node-cli-B8V8ar0H.js} +4 -4
  68. package/dist/{onboard-lbl9C2gj.js → onboard-C6Z7OaQ8.js} +7 -7
  69. package/dist/{onboard-BoT3D8J9.js → onboard-D8EOxPOn.js} +7 -7
  70. package/dist/{onboard-channels-BREKCcFf.js → onboard-channels-C4gBvkYQ.js} +2 -2
  71. package/dist/{onboard-channels-fJXaj04M.js → onboard-channels-CDr6F5Rc.js} +2 -2
  72. package/dist/{onboard-search-C6A1sfph.js → onboard-search-BDLus6nY.js} +7 -7
  73. package/dist/{onboard-search-D-tM9Xrg.js → onboard-search-BzpbxIgm.js} +7 -7
  74. package/dist/{onboarding-Bejkgd8a.js → onboarding-CIjqOjDq.js} +56 -47
  75. package/dist/{onboarding-C8AUR3x1.js → onboarding-DjXH2-ro.js} +56 -47
  76. package/dist/{onboarding.wallet--7Yu2hFw.js → onboarding.wallet-B87UVKiT.js} +16 -10
  77. package/dist/{onboarding.wallet-CQG8MiG_.js → onboarding.wallet-BFJRJg77.js} +16 -10
  78. package/dist/{openresponses-http-BYKqYqIr.js → openresponses-http-BA2nkk7t.js} +1 -1
  79. package/dist/{openresponses-http-DNXaz2VR.js → openresponses-http-C9x0SEG6.js} +4 -4
  80. package/dist/{openresponses-http-CyP-RUzR.js → openresponses-http-DU9S_V_8.js} +1 -1
  81. package/dist/{openresponses-http-C8H-a3KL.js → openresponses-http-NFMdHWOs.js} +4 -4
  82. package/dist/{openresponses-http-BR0xNXbf.js → openresponses-http-eMouHu_v.js} +1 -1
  83. package/dist/{parent-default-help-B57KLY1o.js → parent-default-help-k4GD2-UF.js} +1 -1
  84. package/dist/{parent-default-help-B9-EyEJR.js → parent-default-help-zu6kW9Un.js} +1 -1
  85. package/dist/{pi-embedded-G-VYb-eT.js → pi-embedded-DPElH0OZ.js} +5 -5
  86. package/dist/{pi-embedded-Dtw2m41q.js → pi-embedded-Pkm2p81t.js} +5 -5
  87. package/dist/{plugin-registry-Dr7BDkEc.js → plugin-registry-DEewJtHt.js} +1 -1
  88. package/dist/{plugin-registry-C5c96kNk.js → plugin-registry-DfO1RfZv.js} +1 -1
  89. package/dist/plugin-sdk/{audio-preflight-jaSZX_On.js → audio-preflight-L8bE2tgB.js} +1 -1
  90. package/dist/plugin-sdk/{audio-preflight-Bf83dqiV.js → audio-preflight-a_1hr0Eg.js} +1 -1
  91. package/dist/plugin-sdk/{channel-web-Bu6Y92kC.js → channel-web-BNlpZrWA.js} +1 -1
  92. package/dist/plugin-sdk/command-status.js +1 -1
  93. package/dist/plugin-sdk/index.js +2 -2
  94. package/dist/plugin-sdk/{openresponses-http-gCxCNpHu.js → openresponses-http-BBdkt744.js} +1 -1
  95. package/dist/plugin-sdk/{openresponses-http-M74cHGFJ.js → openresponses-http-DuRGQn_a.js} +1 -1
  96. package/dist/plugin-sdk/{reply-Bu9GXy54.js → reply-DclM907b.js} +5 -5
  97. package/dist/plugin-sdk/src/brand.d.ts +2 -2
  98. package/dist/plugin-sdk/{status-DLh4u6pb.js → status-EnvYKAtO.js} +5 -5
  99. package/dist/plugin-sdk/{web-BLZesoTn.js → web-BrtGwPHN.js} +2 -2
  100. package/dist/plugin-sdk/{web-BqmhQeOi.js → web-C0nKlODk.js} +1 -1
  101. package/dist/{plugins-cli-CpElRRGB.js → plugins-cli-BU7lm9mm.js} +7 -7
  102. package/dist/{plugins-cli-hFcodPhF.js → plugins-cli-Be4GLYdI.js} +7 -7
  103. package/dist/{program-ByNjbwln.js → program-B78oSJVp.js} +9 -9
  104. package/dist/{program-context-BJ6EvoUW.js → program-context-DpABaPXE.js} +25 -25
  105. package/dist/{prompt-select-styled-DyUwhQR0.js → prompt-select-styled-DI5ODziX.js} +4 -4
  106. package/dist/{prompt-select-styled-yZlzGWDe.js → prompt-select-styled-DmcQ0_hv.js} +4 -4
  107. package/dist/{register.agent-DYThb3Qq.js → register.agent-DOychJ9q.js} +11 -11
  108. package/dist/{register.agent-QbjX69Zq.js → register.agent-FC9A__Az.js} +10 -10
  109. package/dist/{register.configure-CXn_6bwZ.js → register.configure-i3gbc5Cc.js} +14 -14
  110. package/dist/{register.configure-CGzVdNRF.js → register.configure-ybGicOMR.js} +14 -14
  111. package/dist/{register.maintenance-CiSlTmn6.js → register.maintenance-CYX_k6x1.js} +10 -10
  112. package/dist/{register.maintenance-Cf-qQw2A.js → register.maintenance-MPPzwTam.js} +11 -11
  113. package/dist/{register.message-CxejzCev.js → register.message-C_Q6o32_.js} +5 -5
  114. package/dist/{register.message-Bz8Q1BDo.js → register.message-D6NFTigk.js} +5 -5
  115. package/dist/{register.onboard-DUvd2gzi.js → register.onboard-DqR_m0_p.js} +16 -16
  116. package/dist/{register.onboard-D-DkLJKD.js → register.onboard-PbsAD-eY.js} +16 -16
  117. package/dist/{register.setup-CzJsqVIe.js → register.setup-COidGsw2.js} +16 -16
  118. package/dist/{register.setup-BotpXpFX.js → register.setup-DMqotP6N.js} +16 -16
  119. package/dist/{register.status-health-sessions-C9Zx-J4Y.js → register.status-health-sessions-CPBz-3k7.js} +8 -8
  120. package/dist/{register.status-health-sessions-IUpygKVu.js → register.status-health-sessions-CeY5Pzgk.js} +8 -8
  121. package/dist/{register.subclis-BtJ07gvR.js → register.subclis-Dxe0Sco3.js} +16 -16
  122. package/dist/{reply-BRoR6TOO.js → reply-701mJB_S.js} +10 -10
  123. package/dist/{run-main-J8mnTN8L.js → run-main-BvouUOJB.js} +16 -16
  124. package/dist/{runtime-helper-grants-CkoxSD6G.js → runtime-helper-grants-B5q5llgE.js} +1 -1
  125. package/dist/{runtime-helper-grants-DMNl5B0x.js → runtime-helper-grants-CjDNw01t.js} +1 -1
  126. package/dist/{sandbox-cli-CNyUbQKy.js → sandbox-cli-DKUHq66f.js} +4 -4
  127. package/dist/{sandbox-cli-DfarPDi7.js → sandbox-cli-MNviI01s.js} +4 -4
  128. package/dist/{security-cli-DYUEfOxV.js → security-cli-C4J7sHdd.js} +5 -5
  129. package/dist/{security-cli-DfH_yEpS.js → security-cli-D2jFeCER.js} +5 -5
  130. package/dist/{server-OnS0sRn3.js → server-BRsV4GHd.js} +4 -4
  131. package/dist/{server-3-CquHGG.js → server-CvQUqV31.js} +4 -4
  132. package/dist/{server-cron-BclI8dUt.js → server-cron-BV2pPZ-O.js} +2 -2
  133. package/dist/{server-cron-CB9ay7nN.js → server-cron-C-3djfm_.js} +2 -2
  134. package/dist/{server-node-events-B3wjSbTf.js → server-node-events-Bi8FQeYu.js} +5 -5
  135. package/dist/{server-node-events-CHH1pmQi.js → server-node-events-Ce-RXuis.js} +5 -5
  136. package/dist/{status-SrKDBHd_.js → status-BiHSisy7.js} +4 -4
  137. package/dist/{status-kfsSxAsl.js → status-CIb_4gfm.js} +4 -4
  138. package/dist/{status-Cf-x3WJB.js → status-D9As1GK-.js} +1 -1
  139. package/dist/{status-DhGsqqOx.js → status-DoLjTnlQ.js} +1 -1
  140. package/dist/{tui-Cvc1YA_t.js → tui-BpbyDMEE.js} +1 -1
  141. package/dist/{tui-CIzUfHHB.js → tui-D9armVLc.js} +1 -1
  142. package/dist/{tui-cli-BxyfSTll.js → tui-cli-A_j8l8a3.js} +5 -5
  143. package/dist/{tui-cli-D8ECRV-M.js → tui-cli-lN5CL6pA.js} +5 -5
  144. package/dist/{update-cli-C1i3_uQZ.js → update-cli-B8_evObo.js} +11 -11
  145. package/dist/{update-cli-TMwGWZhI.js → update-cli-DRefGXK8.js} +12 -12
  146. package/dist/{update-runner-C6krqlIN.js → update-runner-Bd7n68kz.js} +1 -1
  147. package/dist/{update-runner-ChBrrXIl.js → update-runner-DnLLf66O.js} +1 -1
  148. package/dist/{wallet-C95r3fvu.js → wallet-CJdBRqTq.js} +1 -1
  149. package/dist/{wallet-BguV7zPF.js → wallet-DZA0r3pV.js} +1 -1
  150. package/dist/{web-l7WkPuq4.js → web-778GrijN.js} +1 -1
  151. package/dist/{web-CnR4rHHv.js → web-CPKh7bSP.js} +1 -1
  152. package/dist/{web-CoSbILfi.js → web-D-SMykKz.js} +1 -1
  153. package/dist/{web-CjKdghAZ.js → web-DEuBtNld.js} +5 -5
  154. package/dist/{web-vOcMOS29.js → web-Z5JZl5Nc.js} +5 -5
  155. package/dist/{web-search-providers.runtime-BC_EmT37.js → web-search-providers.runtime-AAOfSU2b.js} +1 -1
  156. package/dist/{web-search-providers.runtime-B09rLDoa.js → web-search-providers.runtime-DcgcyEiV.js} +1 -1
  157. package/docs/install/installer.md +11 -11
  158. package/docs/install/node.md +9 -0
  159. package/docs/security/baseline-checklist.md +7 -2
  160. package/extensions/acpx/package.json +1 -1
  161. package/extensions/bluebubbles/package.json +1 -1
  162. package/extensions/copilot-proxy/package.json +1 -1
  163. package/extensions/diagnostics-otel/package.json +1 -1
  164. package/extensions/discord/package.json +1 -1
  165. package/extensions/fased-federation/package.json +1 -1
  166. package/extensions/feishu/package.json +1 -1
  167. package/extensions/google-gemini-cli-auth/package.json +1 -1
  168. package/extensions/googlechat/package.json +1 -1
  169. package/extensions/imessage/package.json +1 -1
  170. package/extensions/irc/package.json +1 -1
  171. package/extensions/line/package.json +1 -1
  172. package/extensions/llm-task/package.json +1 -1
  173. package/extensions/lobster/package.json +1 -1
  174. package/extensions/matrix/CHANGELOG.md +12 -0
  175. package/extensions/matrix/package.json +1 -1
  176. package/extensions/mattermost/package.json +1 -1
  177. package/extensions/memory-core/package.json +1 -1
  178. package/extensions/memory-lancedb/package.json +1 -1
  179. package/extensions/minimax-portal-auth/package.json +1 -1
  180. package/extensions/msteams/CHANGELOG.md +12 -0
  181. package/extensions/msteams/package.json +1 -1
  182. package/extensions/nextcloud-talk/package.json +1 -1
  183. package/extensions/nostr/CHANGELOG.md +12 -0
  184. package/extensions/nostr/package.json +1 -1
  185. package/extensions/open-prose/package.json +1 -1
  186. package/extensions/sat-mining/package.json +1 -1
  187. package/extensions/signal/package.json +1 -1
  188. package/extensions/slack/package.json +1 -1
  189. package/extensions/synology-chat/package.json +1 -1
  190. package/extensions/telegram/package.json +1 -1
  191. package/extensions/tlon/package.json +1 -1
  192. package/extensions/twitch/CHANGELOG.md +12 -0
  193. package/extensions/twitch/package.json +1 -1
  194. package/extensions/voice-call/CHANGELOG.md +12 -0
  195. package/extensions/voice-call/package.json +1 -1
  196. package/extensions/whatsapp/package.json +1 -1
  197. package/extensions/zalo/CHANGELOG.md +12 -0
  198. package/extensions/zalo/package.json +1 -1
  199. package/extensions/zalouser/CHANGELOG.md +12 -0
  200. package/extensions/zalouser/package.json +1 -1
  201. package/package.json +1 -1
  202. package/scripts/start-managed.sh +11 -6
@@ -1,12 +1,12 @@
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-DHRVUWBf.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-BQ5G4eK6.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
- import { a as resolveSignerdBinaryPath, n as installSignerdBinary, o as restartLocalSocketSigner, r as migrateLocalSignerKeystoreToMaterialDir, t as configureWalletForOnboarding } from "./onboarding.wallet--7Yu2hFw.js";
6
+ import { a as resolveSignerdBinaryPath, n as installSignerdBinary, o as restartLocalSocketSigner, r as migrateLocalSignerKeystoreToMaterialDir, t as configureWalletForOnboarding } from "./onboarding.wallet-B87UVKiT.js";
7
7
  import { i as resolveLocalSignerRunAsUser, n as resolveLocalSignerBackendSocketPath, o as resolveLocalSignerSocketPath, r as resolveLocalSignerMaterialRootDir, t as ensureWalletStateDir } from "./wallet-runtime-config-TjiNNY9x.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-CFNtQ2ZR.js";
9
- import { C as walletSetupCommand, k as readWalletStatusSnapshot, t as collectWalletSignerDoctorReport } from "./wallet-C95r3fvu.js";
9
+ import { C as walletSetupCommand, k as readWalletStatusSnapshot, t as collectWalletSignerDoctorReport } from "./wallet-CJdBRqTq.js";
10
10
  import { c as loadPersistedFederationToken, i as resolveFederationBaseUrl, o as resolveFederationHandle, t as DEFAULT_FEDERATION_BASE_URL } from "./runtime-DXHXAPJA.js";
11
11
  import { t as readManagedFederationTokenSummary } from "./federation-8sW60I4p.js";
12
12
  import { or as clearDeviceAuthStore } from "./call-B9EvxMq6.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-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";
19
+ import { a as promptRemoteGatewayConfig, n as getTailscaleMissingBinNoteLines, r as setupSkills, t as validateIPv4AddressInput, u as promptCustomApiConfig } from "./ipv4-D88X6kcK.js";
20
+ import { s as waitForHostedDashboardBrowserPath } from "./health-Db548DTY.js";
21
+ import { n as warnIfModelConfigLooksOff, r as applyAuthChoice } from "./auth-choice-DbTYwdGn.js";
22
+ import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-D5YuCYf7.js";
23
23
  import { n as logConfigUpdated } from "./logging-DZ32I_SP.js";
24
- import { n as setupChannels } from "./onboard-channels-fJXaj04M.js";
24
+ import { n as setupChannels } from "./onboard-channels-CDr6F5Rc.js";
25
25
  import { t as buildWorkspaceHookStatus } from "./hooks-status-DRZciWMZ.js";
26
- import { t as runTui } from "./tui-Cvc1YA_t.js";
26
+ import { t as runTui } from "./tui-BpbyDMEE.js";
27
27
  import { spawn, spawnSync } from "node:child_process";
28
28
  import os from "node:os";
29
29
  import path from "node:path";
@@ -168,7 +168,7 @@ function isHostedSecurityCapableSession(explicitFlag = false) {
168
168
  const sudoersPath = path.join("/etc/sudoers.d", `fased-host-maintenance-${currentUser}`);
169
169
  if (fs.existsSync(sudoersPath)) return true;
170
170
  }
171
- return canRunHostedMaintenanceCommand("sudo -n tailscale status >/dev/null 2>&1") || canRunHostedMaintenanceCommand("sudo -n ufw status >/dev/null 2>&1") || canRunHostedMaintenanceCommand("sudo -n firewall-cmd --state >/dev/null 2>&1") || canRunHostedMaintenanceCommand("sudo -n systemctl is-active --quiet firewalld >/dev/null 2>&1") || canRunHostedMaintenanceCommand("sudo -n systemctl status fased-gateway.service >/dev/null 2>&1");
171
+ 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");
172
172
  }
173
173
 
174
174
  //#endregion
@@ -546,16 +546,18 @@ async function installRootServiceMaintenanceAccess(params) {
546
546
  const sudoers = [
547
547
  `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl restart ${safeServiceName}.service`,
548
548
  `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl restart --no-block ${safeServiceName}.service`,
549
+ `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl start --no-block ${safeServiceName}.service`,
550
+ `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl enable --now ${safeServiceName}.service`,
549
551
  `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl status ${safeServiceName}.service`,
550
- `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl status ${safeServiceName}.service *`,
551
- `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl status ${safeServiceName} *`,
552
+ `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl status ${safeServiceName}.service --no-pager`,
552
553
  `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl is-active ${safeServiceName}.service`,
553
- `${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 show ${safeServiceName}.service *`,
556
- `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl show ${safeServiceName} *`,
557
- `${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName}.service *`,
558
- `${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName} *`
554
+ `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl is-active ${safeServiceName}`,
555
+ `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl show ${safeServiceName}.service -p ActiveState --value`,
556
+ `${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl cat ${safeServiceName}.service`,
557
+ `${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName}.service -n 50 --no-pager`,
558
+ `${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName}.service -n 120 --no-pager`,
559
+ `${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName} -n 50 --no-pager`,
560
+ `${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName} -n 120 --no-pager`
559
561
  ].join("\n");
560
562
  return await runShell([
561
563
  `echo '${Buffer.from(`${sudoers}\n`, "utf8").toString("base64")}' | base64 -d | sudo -n tee '${sudoersPath}' >/dev/null`,
@@ -1661,7 +1663,7 @@ async function finalizeOnboardingWizard(options) {
1661
1663
  if (process.platform === "linux") {
1662
1664
  const localSignerSync = resolveLocalSignerSyncForFinalize({ strictVps });
1663
1665
  if (localSignerSync.sync) try {
1664
- const { syncLocalSocketSignerFromConfig } = await import("./onboarding.wallet--7Yu2hFw.js").then((n) => n.i);
1666
+ const { syncLocalSocketSignerFromConfig } = await import("./onboarding.wallet-B87UVKiT.js").then((n) => n.i);
1665
1667
  await syncLocalSocketSignerFromConfig({
1666
1668
  config: nextConfig,
1667
1669
  env: process.env,
@@ -2747,6 +2749,7 @@ const LOW_MEMORY_HOSTING_SWAP_GB = 4;
2747
2749
  const HOSTING_SWAP_GB = 2;
2748
2750
  const TAILSCALE_INTERACTIVE_TIMEOUT_MS = 120 * 1e3;
2749
2751
  const TAILSCALE_LOGIN_URL_RE = /https:\/\/login\.tailscale\.com\/a\/[A-Za-z0-9_-]+/i;
2752
+ const HOST_MAINTENANCE_HELPER = "/usr/local/sbin/fased-host-maintenance";
2750
2753
  function detectTotalMemoryMb() {
2751
2754
  if (process.platform === "linux") try {
2752
2755
  const match = fs.readFileSync("/proc/meminfo", "utf8").match(/^MemTotal:\s+(\d+)\s+kB/m);
@@ -2847,7 +2850,7 @@ function buildTailscaleLoginWaitCommand(command) {
2847
2850
  `bash -lc ${shellQuote(command)} &`,
2848
2851
  "ts_pid=$!",
2849
2852
  "for _ in $(seq 1 55); do",
2850
- " if tailscale ip -4 >/dev/null 2>&1 || sudo -n tailscale ip -4 >/dev/null 2>&1; then",
2853
+ ` 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`,
2851
2854
  " kill -INT \"$ts_pid\" >/dev/null 2>&1 || true",
2852
2855
  " wait \"$ts_pid\" >/dev/null 2>&1 || true",
2853
2856
  " exit 0",
@@ -2860,7 +2863,7 @@ function buildTailscaleLoginWaitCommand(command) {
2860
2863
  "done",
2861
2864
  "kill -INT \"$ts_pid\" >/dev/null 2>&1 || true",
2862
2865
  "wait \"$ts_pid\" >/dev/null 2>&1 || true",
2863
- "if tailscale ip -4 >/dev/null 2>&1 || sudo -n tailscale ip -4 >/dev/null 2>&1; then",
2866
+ `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`,
2864
2867
  " exit 0",
2865
2868
  "fi",
2866
2869
  "exit 124"
@@ -2913,21 +2916,29 @@ function tailscaleTimedOutButReady(result, logPath, runner = run) {
2913
2916
  function shellQuote(value) {
2914
2917
  return `'${value.replace(/'/g, "'\\''")}'`;
2915
2918
  }
2919
+ function hostMaintenanceCommand(action) {
2920
+ return `sudo -n ${HOST_MAINTENANCE_HELPER} ${action}`;
2921
+ }
2922
+ function hostMaintenanceCommandWithInput(action, input) {
2923
+ return `printf '%s\\n' ${shellQuote(input)} | ${hostMaintenanceCommand(action)}`;
2924
+ }
2916
2925
  function isTailscaleLoggedIn(logPath, runner = run) {
2917
- return runner("tailscale status >/dev/null 2>&1", logPath).ok || runner("sudo -n tailscale status >/dev/null 2>&1", logPath).ok;
2926
+ 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;
2918
2927
  }
2919
2928
  function hasTailscaleIp(logPath, runner = run) {
2920
- return runner("tailscale ip -4 >/dev/null 2>&1", logPath).ok || runner("sudo -n tailscale ip -4 >/dev/null 2>&1", logPath).ok;
2929
+ 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;
2921
2930
  }
2922
2931
  function readTailscaleIp(logPath, runner = run) {
2923
2932
  const probe = runner("tailscale ip -4", logPath);
2924
- const sudoProbe = probe.ok ? probe : runner("sudo -n tailscale ip -4", logPath);
2933
+ const helperProbe = probe.ok ? probe : runner(hostMaintenanceCommand("tailscale-ip4"), logPath);
2934
+ const sudoProbe = helperProbe.ok ? helperProbe : runner("sudo -n tailscale ip -4", logPath);
2925
2935
  if (!sudoProbe.ok || !sudoProbe.detail) return;
2926
2936
  return sudoProbe.detail.match(/\b\d{1,3}(?:\.\d{1,3}){3}\b/)?.[0];
2927
2937
  }
2928
2938
  function readTailscaleSelf(logPath, runner = run) {
2929
2939
  const probe = runner("tailscale status --json", logPath);
2930
- const sudoProbe = probe.ok ? probe : runner("sudo -n tailscale status --json", logPath);
2940
+ const helperProbe = probe.ok ? probe : runner(hostMaintenanceCommand("tailscale-status-json"), logPath);
2941
+ const sudoProbe = helperProbe.ok ? helperProbe : runner("sudo -n tailscale status --json", logPath);
2931
2942
  if (!sudoProbe.ok || !sudoProbe.detail) return { ipv4: readTailscaleIp(logPath, runner) };
2932
2943
  try {
2933
2944
  const parsed = JSON.parse(sudoProbe.detail);
@@ -3033,7 +3044,8 @@ function verifyTailnetSshServerPrerequisites(params) {
3033
3044
  };
3034
3045
  }
3035
3046
  function ensureTailnetSshIngressForVerification(params) {
3036
- const result = (params.runner ?? run)([
3047
+ const runner = params.runner ?? run;
3048
+ const command = [
3037
3049
  "if command -v ufw >/dev/null 2>&1; then",
3038
3050
  " if sudo -n ufw status | grep -qi '^Status: active'; then",
3039
3051
  " 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",
@@ -3044,7 +3056,9 @@ function ensureTailnetSshIngressForVerification(params) {
3044
3056
  " sudo -n firewall-cmd --permanent --zone=trusted --add-interface=tailscale0 >/dev/null 2>&1 || true",
3045
3057
  " sudo -n firewall-cmd --reload >/dev/null 2>&1 || true",
3046
3058
  "fi"
3047
- ].join("\n"), params.logPath);
3059
+ ].join("\n");
3060
+ const helperResult = runner(hostMaintenanceCommand("tailnet-ssh-ingress"), params.logPath);
3061
+ const result = helperResult.ok ? helperResult : runner(command, params.logPath);
3048
3062
  if (!result.ok) return {
3049
3063
  ok: false,
3050
3064
  detail: result.detail ?? "could not prepare tailnet SSH firewall rule before verification"
@@ -3131,7 +3145,7 @@ async function confirmTailnetSshBeforeLockdown(params) {
3131
3145
  return false;
3132
3146
  }
3133
3147
  await prompter.note(formatTailscaleAccountBrowserLoginNote(), "Tailscale login");
3134
- const tsReset = await interactiveRunner("sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset", logPath, prompter);
3148
+ const tsReset = await interactiveRunner(hostMaintenanceCommand("tailscale-up-reset-ssh"), logPath, prompter);
3135
3149
  const acceptedTimedOutLogin = tailscaleTimedOutButReady(tsReset, logPath, runner);
3136
3150
  if (!tsReset.ok && !acceptedTimedOutLogin || !hasTailscaleIp(logPath, runner)) {
3137
3151
  runtime.error("Hosting setup stopped before SSH/firewall lock-down.");
@@ -3175,9 +3189,9 @@ function ensureTailscaleServe(port, logPath) {
3175
3189
  ok: true,
3176
3190
  detail: `tailscale serve --bg -> 127.0.0.1:${port}`
3177
3191
  };
3178
- if (run(`sudo -n tailscale serve --bg http://127.0.0.1:${port}`, logPath).ok) return {
3192
+ if (run(hostMaintenanceCommandWithInput("tailscale-serve", String(port)), logPath).ok) return {
3179
3193
  ok: true,
3180
- detail: `sudo tailscale serve --bg -> 127.0.0.1:${port}`
3194
+ detail: `host maintenance tailscale serve -> 127.0.0.1:${port}`
3181
3195
  };
3182
3196
  if (run(`tailscale serve https / http://127.0.0.1:${port}`, logPath).ok) return {
3183
3197
  ok: true,
@@ -3201,7 +3215,7 @@ function isTailscaleServeReady(port) {
3201
3215
  ],
3202
3216
  encoding: "utf8"
3203
3217
  });
3204
- if ((probe.status ?? 1) !== 0) probe = spawnSync("bash", ["-lc", "sudo -n tailscale serve status"], {
3218
+ if ((probe.status ?? 1) !== 0) probe = spawnSync("bash", ["-lc", hostMaintenanceCommand("tailscale-serve-status")], {
3205
3219
  stdio: [
3206
3220
  "ignore",
3207
3221
  "pipe",
@@ -3234,6 +3248,7 @@ function packageInstallCommand(packages) {
3234
3248
  }
3235
3249
  function tailscaleInstallCommand() {
3236
3250
  return [
3251
+ `${hostMaintenanceCommand("tailscale-install-start")} && exit 0`,
3237
3252
  "if command -v tailscale >/dev/null 2>&1; then",
3238
3253
  " :",
3239
3254
  "elif command -v apt-get >/dev/null 2>&1; then",
@@ -3259,6 +3274,7 @@ function tailscaleInstallCommand() {
3259
3274
  }
3260
3275
  function firewallBaselineCommand() {
3261
3276
  return [
3277
+ `${hostMaintenanceCommand("firewall-baseline")} && exit 0`,
3262
3278
  "if command -v ufw >/dev/null 2>&1 || command -v apt-get >/dev/null 2>&1; then",
3263
3279
  " command -v ufw >/dev/null 2>&1 || { " + packageInstallCommand(["ufw"]) + "; }",
3264
3280
  " sudo -n ufw default deny incoming",
@@ -3282,6 +3298,7 @@ function firewallBaselineCommand() {
3282
3298
  }
3283
3299
  function automaticUpdatesCommand() {
3284
3300
  return [
3301
+ `${hostMaintenanceCommand("automatic-updates")} && exit 0`,
3285
3302
  "if command -v apt-get >/dev/null 2>&1; then",
3286
3303
  " " + packageInstallCommand(["unattended-upgrades"]),
3287
3304
  " sudo -n systemctl enable --now unattended-upgrades >/dev/null 2>&1 || true",
@@ -3300,15 +3317,7 @@ function automaticUpdatesCommand() {
3300
3317
  ].join("\n");
3301
3318
  }
3302
3319
  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");
3320
+ return hostMaintenanceCommand("harden-ssh");
3312
3321
  }
3313
3322
  function failOrContinue(params) {
3314
3323
  const { opts, runtime, step, detail } = params;
@@ -3354,7 +3363,7 @@ async function applyHostingSecurity(params) {
3354
3363
  validate: (value) => value.trim() ? void 0 : "Required"
3355
3364
  })).trim();
3356
3365
  else await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
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";
3366
+ const resetCommand = tsAuthkey ? hostMaintenanceCommandWithInput("tailscale-up-reset-authkey-ssh", tsAuthkey) : hostMaintenanceCommand("tailscale-up-reset-ssh");
3358
3367
  const tsReset = tsAuthkey ? run(resetCommand, logPath) : await runInteractiveTailscaleLogin(resetCommand, logPath, prompter);
3359
3368
  if (!tsReset.ok && !tailscaleTimedOutButReady(tsReset, logPath)) return {
3360
3369
  ok: false,
@@ -3478,7 +3487,7 @@ async function applyHostingSecurity(params) {
3478
3487
  logPath
3479
3488
  };
3480
3489
  }
3481
- } else if (hasCommand("systemctl")) run("sudo -n systemctl enable --now tailscaled >/dev/null 2>&1 || true", logPath);
3490
+ } 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);
3482
3491
  if (prompter && opts.nonInteractive !== true) await prompter.note(formatLocalDeviceTailnetRequirementNote(), "Local device requirement");
3483
3492
  let tsHealthy = isTailscaleLoggedIn(logPath);
3484
3493
  if (tsHealthy && prompter && opts.nonInteractive !== true) {
@@ -3487,7 +3496,7 @@ async function applyHostingSecurity(params) {
3487
3496
  initialValue: false
3488
3497
  })) {
3489
3498
  if (prompter) await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
3490
- const tsReset = await runInteractiveTailscaleLogin("sudo -n tailscale logout && sudo -n tailscale up --ssh --accept-routes --reset", logPath, prompter);
3499
+ const tsReset = await runInteractiveTailscaleLogin(hostMaintenanceCommand("tailscale-up-reset-ssh"), logPath, prompter);
3491
3500
  if (!tsReset.ok && !tailscaleTimedOutButReady(tsReset, logPath)) {
3492
3501
  checks.push({
3493
3502
  name: "tailscale",
@@ -3530,7 +3539,7 @@ async function applyHostingSecurity(params) {
3530
3539
  })).trim();
3531
3540
  }
3532
3541
  if (tsAuthkey) {
3533
- const tsUp = run(`sudo -n tailscale up --authkey ${JSON.stringify(tsAuthkey)} --ssh`, logPath);
3542
+ const tsUp = run(hostMaintenanceCommandWithInput("tailscale-up-authkey-ssh", tsAuthkey), logPath);
3534
3543
  if (!tsUp.ok) {
3535
3544
  checks.push({
3536
3545
  name: "tailscale",
@@ -3574,7 +3583,7 @@ async function applyHostingSecurity(params) {
3574
3583
  };
3575
3584
  } else {
3576
3585
  if (prompter) await prompter.note(formatTailscaleBrowserLoginNote(), "Tailscale login");
3577
- const tsUp = await runInteractiveTailscaleLogin("sudo -n tailscale up --ssh", logPath, prompter);
3586
+ const tsUp = await runInteractiveTailscaleLogin(hostMaintenanceCommand("tailscale-up-ssh"), logPath, prompter);
3578
3587
  if (!tsUp.ok && !tailscaleTimedOutButReady(tsUp, logPath)) {
3579
3588
  checks.push({
3580
3589
  name: "tailscale",
@@ -3629,7 +3638,7 @@ async function applyHostingSecurity(params) {
3629
3638
  detail: "tailnet IP present; verifying app SSH before lock-down"
3630
3639
  });
3631
3640
  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();
3632
- if (operatorUser) run(`sudo -n tailscale set --operator='${operatorUser}' >/dev/null 2>&1 || true`, logPath);
3641
+ if (operatorUser) run(`${hostMaintenanceCommand("tailscale-set-operator-self")} >/dev/null 2>&1 || true`, logPath);
3633
3642
  if (!await confirmTailnetSshBeforeLockdown({
3634
3643
  opts,
3635
3644
  runtime,
@@ -3726,7 +3735,7 @@ async function applyHostingSecurity(params) {
3726
3735
  ok: true,
3727
3736
  detail: "password auth/root login disabled and ssh restarted"
3728
3737
  });
3729
- const f2bRes = runHostSetupCommand(`${packageInstallCommand(["fail2ban"])}\nsudo -n systemctl enable --now fail2ban`);
3738
+ const f2bRes = runHostSetupCommand(`${hostMaintenanceCommand("fail2ban-enable")} || (${packageInstallCommand(["fail2ban"])}\nsudo -n systemctl enable --now fail2ban)`);
3730
3739
  if (!f2bRes.ok) {
3731
3740
  checks.push({
3732
3741
  name: "fail2ban",
@@ -3237,6 +3237,7 @@ const INSTALL_SCRIPT_RELPATHS = ["scripts/install-fased-signerd.sh", "../scripts
3237
3237
  const BUILD_SCRIPT_RELPATHS = ["scripts/build-fased-signerd.sh", "../scripts/build-fased-signerd.sh"];
3238
3238
  const BROKER_CLI_RELPATHS = ["./index.js", "../../dist/index.js"];
3239
3239
  const DEFAULT_SIGNER_RELEASE_DOWNLOAD_BASE = "https://github.com/fased-ai/fased/releases/download";
3240
+ const SIGNER_MAINTENANCE_HELPER = "/usr/local/sbin/fased-signer-maintenance";
3240
3241
  const SIGNER_ISOLATION_HELPER = "/usr/local/sbin/fased-signer-isolation";
3241
3242
  function runCommand(params) {
3242
3243
  const child = spawnSync(params.command, params.args, {
@@ -3768,17 +3769,15 @@ function resolveCurrentUnixUser() {
3768
3769
  }
3769
3770
  }
3770
3771
  function runSignerIsolationHelper(runAsUser, args, opts) {
3771
- if (!fs.existsSync(SIGNER_ISOLATION_HELPER)) return;
3772
+ const helperArgs = signerMaintenanceHelperArgs(runAsUser, args);
3773
+ if (!helperArgs) return;
3772
3774
  try {
3773
3775
  return runCommand({
3774
3776
  command: "sudo",
3775
3777
  args: [
3776
3778
  "-n",
3777
3779
  "-E",
3778
- SIGNER_ISOLATION_HELPER,
3779
- resolveCurrentUnixUser(),
3780
- runAsUser,
3781
- ...args
3780
+ ...helperArgs
3782
3781
  ],
3783
3782
  capture: opts?.capture
3784
3783
  });
@@ -3788,15 +3787,13 @@ function runSignerIsolationHelper(runAsUser, args, opts) {
3788
3787
  }
3789
3788
  }
3790
3789
  function startSignerIsolationHelperBackground(runAsUser, args, logPath, env = process.env) {
3791
- if (!fs.existsSync(SIGNER_ISOLATION_HELPER)) return false;
3790
+ const helperArgs = signerMaintenanceHelperArgs(runAsUser, args);
3791
+ if (!helperArgs) return false;
3792
3792
  const out = fs.openSync(logPath, "a", 384);
3793
3793
  spawn("sudo", [
3794
3794
  "-n",
3795
3795
  "-E",
3796
- SIGNER_ISOLATION_HELPER,
3797
- resolveCurrentUnixUser(),
3798
- runAsUser,
3799
- ...args
3796
+ ...helperArgs
3800
3797
  ], {
3801
3798
  detached: true,
3802
3799
  stdio: [
@@ -3811,6 +3808,15 @@ function startSignerIsolationHelperBackground(runAsUser, args, logPath, env = pr
3811
3808
  }).unref();
3812
3809
  return true;
3813
3810
  }
3811
+ function signerMaintenanceHelperArgs(runAsUser, args) {
3812
+ if (fs.existsSync(SIGNER_MAINTENANCE_HELPER)) return [SIGNER_MAINTENANCE_HELPER, ...args];
3813
+ if (fs.existsSync(SIGNER_ISOLATION_HELPER)) return [
3814
+ SIGNER_ISOLATION_HELPER,
3815
+ resolveCurrentUnixUser(),
3816
+ runAsUser,
3817
+ ...args
3818
+ ];
3819
+ }
3814
3820
  function ensureIsolatedSignerPaths(materialDir, backendSocketPath, appSocketPath, runAsUser) {
3815
3821
  if (runSignerIsolationHelper(runAsUser, [
3816
3822
  "prepare",
@@ -3238,6 +3238,7 @@ const INSTALL_SCRIPT_RELPATHS = ["scripts/install-fased-signerd.sh", "../scripts
3238
3238
  const BUILD_SCRIPT_RELPATHS = ["scripts/build-fased-signerd.sh", "../scripts/build-fased-signerd.sh"];
3239
3239
  const BROKER_CLI_RELPATHS = ["./index.js", "../../dist/index.js"];
3240
3240
  const DEFAULT_SIGNER_RELEASE_DOWNLOAD_BASE = "https://github.com/fased-ai/fased/releases/download";
3241
+ const SIGNER_MAINTENANCE_HELPER = "/usr/local/sbin/fased-signer-maintenance";
3241
3242
  const SIGNER_ISOLATION_HELPER = "/usr/local/sbin/fased-signer-isolation";
3242
3243
  function runCommand(params) {
3243
3244
  const child = spawnSync(params.command, params.args, {
@@ -3769,17 +3770,15 @@ function resolveCurrentUnixUser() {
3769
3770
  }
3770
3771
  }
3771
3772
  function runSignerIsolationHelper(runAsUser, args, opts) {
3772
- if (!fs.existsSync(SIGNER_ISOLATION_HELPER)) return;
3773
+ const helperArgs = signerMaintenanceHelperArgs(runAsUser, args);
3774
+ if (!helperArgs) return;
3773
3775
  try {
3774
3776
  return runCommand({
3775
3777
  command: "sudo",
3776
3778
  args: [
3777
3779
  "-n",
3778
3780
  "-E",
3779
- SIGNER_ISOLATION_HELPER,
3780
- resolveCurrentUnixUser(),
3781
- runAsUser,
3782
- ...args
3781
+ ...helperArgs
3783
3782
  ],
3784
3783
  capture: opts?.capture
3785
3784
  });
@@ -3789,15 +3788,13 @@ function runSignerIsolationHelper(runAsUser, args, opts) {
3789
3788
  }
3790
3789
  }
3791
3790
  function startSignerIsolationHelperBackground(runAsUser, args, logPath, env = process.env) {
3792
- if (!fs.existsSync(SIGNER_ISOLATION_HELPER)) return false;
3791
+ const helperArgs = signerMaintenanceHelperArgs(runAsUser, args);
3792
+ if (!helperArgs) return false;
3793
3793
  const out = fs.openSync(logPath, "a", 384);
3794
3794
  spawn("sudo", [
3795
3795
  "-n",
3796
3796
  "-E",
3797
- SIGNER_ISOLATION_HELPER,
3798
- resolveCurrentUnixUser(),
3799
- runAsUser,
3800
- ...args
3797
+ ...helperArgs
3801
3798
  ], {
3802
3799
  detached: true,
3803
3800
  stdio: [
@@ -3812,6 +3809,15 @@ function startSignerIsolationHelperBackground(runAsUser, args, logPath, env = pr
3812
3809
  }).unref();
3813
3810
  return true;
3814
3811
  }
3812
+ function signerMaintenanceHelperArgs(runAsUser, args) {
3813
+ if (fs.existsSync(SIGNER_MAINTENANCE_HELPER)) return [SIGNER_MAINTENANCE_HELPER, ...args];
3814
+ if (fs.existsSync(SIGNER_ISOLATION_HELPER)) return [
3815
+ SIGNER_ISOLATION_HELPER,
3816
+ resolveCurrentUnixUser(),
3817
+ runAsUser,
3818
+ ...args
3819
+ ];
3820
+ }
3815
3821
  function ensureIsolatedSignerPaths(materialDir, backendSocketPath, appSocketPath, runAsUser) {
3816
3822
  if (runSignerIsolationHelper(runAsUser, [
3817
3823
  "prepare",
@@ -1,6 +1,6 @@
1
1
  import "./github-copilot-token-Dy7Y_jbI.js";
2
2
  import { la as logWarn, qo as defaultRuntime } from "./paths-OUJyk-5R.js";
3
- import { B as extractImageContentFromSource, F as DEFAULT_INPUT_IMAGE_MAX_BYTES, H as resolveInputFileLimits, I as DEFAULT_INPUT_IMAGE_MIMES, L as DEFAULT_INPUT_MAX_REDIRECTS, R as DEFAULT_INPUT_TIMEOUT_MS, V as normalizeMimeList, X as emitAgentEvent, Z as onAgentEvent, a as agentCommand, at as sendJson, i as resolveAssistantStreamDeltaText, it as resolveSessionKey, n as handleGatewayPostJsonEndpoint, nt as createDefaultDeps, ot as setSseHeaders, r as buildAgentMessageFromConversationEntries, rt as resolveAgentIdForRequest, st as writeDone, z as extractFileContentFromSource } from "./auth-D6aXaEgt.js";
3
+ import { B as extractImageContentFromSource, F as DEFAULT_INPUT_IMAGE_MAX_BYTES, H as resolveInputFileLimits, I as DEFAULT_INPUT_IMAGE_MIMES, L as DEFAULT_INPUT_MAX_REDIRECTS, R as DEFAULT_INPUT_TIMEOUT_MS, V as normalizeMimeList, X as emitAgentEvent, Z as onAgentEvent, a as agentCommand, at as sendJson, i as resolveAssistantStreamDeltaText, it as resolveSessionKey, n as handleGatewayPostJsonEndpoint, nt as createDefaultDeps, ot as setSseHeaders, r as buildAgentMessageFromConversationEntries, rt as resolveAgentIdForRequest, st as writeDone, z as extractFileContentFromSource } from "./auth-7Dkf1_CI.js";
4
4
  import "./send-D96gGRQz.js";
5
5
  import "./send-BFoI9HuU.js";
6
6
  import "./skill-commands-DvoCSQnx.js";
@@ -2,7 +2,7 @@ import { bd as logWarn } from "./env-C77feXxI.js";
2
2
  import "./agent-paths-BI1hx-tF.js";
3
3
  import "./send-D7X0_iFp.js";
4
4
  import "./send-BFEd4vCM.js";
5
- import { Ai as buildAgentMessageFromConversationEntries, Ii as resolveAssistantStreamDeltaText, Li as agentCommand, _a as resolveAgentIdForRequest, an as DEFAULT_INPUT_IMAGE_MAX_BYTES, ba as setSseHeaders, cn as DEFAULT_INPUT_TIMEOUT_MS, dn as normalizeMimeList, fn as resolveInputFileLimits, ia as emitAgentEvent, ki as handleGatewayPostJsonEndpoint, ln as extractFileContentFromSource, oa as onAgentEvent, on as DEFAULT_INPUT_IMAGE_MIMES, sn as DEFAULT_INPUT_MAX_REDIRECTS, un as extractImageContentFromSource, va as resolveSessionKey, xa as writeDone, ya as sendJson } from "./model-catalog-DHRVUWBf.js";
5
+ import { Ai as buildAgentMessageFromConversationEntries, Ii as resolveAssistantStreamDeltaText, Li as agentCommand, _a as resolveAgentIdForRequest, an as DEFAULT_INPUT_IMAGE_MAX_BYTES, ba as setSseHeaders, cn as DEFAULT_INPUT_TIMEOUT_MS, dn as normalizeMimeList, fn as resolveInputFileLimits, ia as emitAgentEvent, ki as handleGatewayPostJsonEndpoint, ln as extractFileContentFromSource, oa as onAgentEvent, on as DEFAULT_INPUT_IMAGE_MIMES, sn as DEFAULT_INPUT_MAX_REDIRECTS, un as extractImageContentFromSource, va as resolveSessionKey, xa as writeDone, ya as sendJson } from "./model-catalog-BQ5G4eK6.js";
6
6
  import "./github-copilot-token-A9DiaCB0.js";
7
7
  import { A as defaultRuntime } from "./entry.js";
8
8
  import "./reply-prefix-TUhpEtvr.js";
@@ -31,10 +31,10 @@ import "./dangerous-tools-CusV9bcr.js";
31
31
  import "./chrome-bxkNKPA7.js";
32
32
  import "./pairing-token-C2iKEhFc.js";
33
33
  import "./ws-DiFJ3zRB.js";
34
- import "./onboarding.wallet--7Yu2hFw.js";
34
+ import "./onboarding.wallet-B87UVKiT.js";
35
35
  import "./wallet-runtime-config-TjiNNY9x.js";
36
36
  import "./wallet-provider-registry-CFNtQ2ZR.js";
37
- import "./wallet-C95r3fvu.js";
37
+ import "./wallet-CJdBRqTq.js";
38
38
  import "./wallet-approval-auth-BaVTLG5r.js";
39
39
  import "./runtime-DXHXAPJA.js";
40
40
  import "./device-identity-ZHUQ6a8N.js";
@@ -45,7 +45,7 @@ import "./send-C-su1wPZ.js";
45
45
  import "./outbound-attachment-Bh4FmcYg.js";
46
46
  import "./fetch-BVvWzHT_.js";
47
47
  import "./delivery-queue-55Cityuq.js";
48
- import { t as createDefaultDeps } from "./deps-BoCGz3bU.js";
48
+ import { t as createDefaultDeps } from "./deps-DdP-Hmxc.js";
49
49
  import "./frontmatter-D2UNJikU.js";
50
50
  import "./skills-Dis31awJ.js";
51
51
  import "./skills-remote-CIAB0AXm.js";
@@ -2,7 +2,7 @@ import { Sa as defaultRuntime, Vi as logWarn } from "./agent-scope-DUKEZjqM.js";
2
2
  import "./github-copilot-token-CNsqwfnE.js";
3
3
  import "./send-CFSRf7De.js";
4
4
  import "./send-gtmn6YeH.js";
5
- import { 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 sendJson, et as emitAgentEvent, i as resolveAssistantStreamDeltaText, it as resolveSessionKey, n as handleGatewayPostJsonEndpoint, nt as createDefaultDeps, ot as setSseHeaders, r as buildAgentMessageFromConversationEntries, rt as resolveAgentIdForRequest, st as writeDone, tt as onAgentEvent, z as DEFAULT_INPUT_IMAGE_MAX_BYTES } from "./pi-embedded-G-VYb-eT.js";
5
+ import { 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 sendJson, et as emitAgentEvent, i as resolveAssistantStreamDeltaText, it as resolveSessionKey, n as handleGatewayPostJsonEndpoint, nt as createDefaultDeps, ot as setSseHeaders, r as buildAgentMessageFromConversationEntries, rt as resolveAgentIdForRequest, st as writeDone, tt as onAgentEvent, z as DEFAULT_INPUT_IMAGE_MAX_BYTES } from "./pi-embedded-DPElH0OZ.js";
6
6
  import "./reply-prefix-Bitnsmpd.js";
7
7
  import "./diagnostic-_BiQ6GgD.js";
8
8
  import "./diagnostic-session-state-CL_QxyRg.js";
@@ -2,7 +2,7 @@ import "./paths-C9FmTW1x.js";
2
2
  import "./agent-paths-DmOVZE7g.js";
3
3
  import { au as logWarn } from "./agent-scope-DHrLr5OF.js";
4
4
  import "./commands-registry-BRvZQ1jh.js";
5
- import { Er as onAgentEvent, G as DEFAULT_INPUT_TIMEOUT_MS, H as DEFAULT_INPUT_IMAGE_MAX_BYTES, J as normalizeMimeList, Ja as sendJson, K as extractFileContentFromSource, Ka as resolveAgentIdForRequest, U as DEFAULT_INPUT_IMAGE_MIMES, W as DEFAULT_INPUT_MAX_REDIRECTS, Xa as writeDone, Y as resolveInputFileLimits, Ya as setSseHeaders, ft as handleGatewayPostJsonEndpoint, ht as agentCommand, mt as resolveAssistantStreamDeltaText, pt as buildAgentMessageFromConversationEntries, q as extractImageContentFromSource, qa as resolveSessionKey, wr as emitAgentEvent } from "./reply-BRoR6TOO.js";
5
+ import { Er as onAgentEvent, G as DEFAULT_INPUT_TIMEOUT_MS, H as DEFAULT_INPUT_IMAGE_MAX_BYTES, J as normalizeMimeList, Ja as sendJson, K as extractFileContentFromSource, Ka as resolveAgentIdForRequest, U as DEFAULT_INPUT_IMAGE_MIMES, W as DEFAULT_INPUT_MAX_REDIRECTS, Xa as writeDone, Y as resolveInputFileLimits, Ya as setSseHeaders, ft as handleGatewayPostJsonEndpoint, ht as agentCommand, mt as resolveAssistantStreamDeltaText, pt as buildAgentMessageFromConversationEntries, q as extractImageContentFromSource, qa as resolveSessionKey, wr as emitAgentEvent } from "./reply-701mJB_S.js";
6
6
  import { d as defaultRuntime } from "./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-CQG8MiG_.js";
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-BguV7zPF.js";
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 { t as createDefaultDeps } from "./deps-vuWHR8ix.js";
40
+ import { t as createDefaultDeps } from "./deps-RXAe1X5s.js";
41
41
  import "./memory-DDpj0IVA.js";
42
42
  import "./memory-search-BwYkW6_V.js";
43
43
  import "./manager-BmONwMiP.js";
@@ -2,7 +2,7 @@ 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-Dtw2m41q.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-Pkm2p81t.js";
6
6
  import "./diagnostic-D6XQAXl4.js";
7
7
  import "./diagnostic-session-state-CexmAKza.js";
8
8
  import "./send-Da1hCe1A.js";
@@ -1,6 +1,6 @@
1
1
  import { Cd as isTruthyEnvValue, Nu as listChannelPlugins, jf as CHAT_CHANNEL_ORDER } from "./agent-scope-DHrLr5OF.js";
2
2
  import { c as listChannelPluginCatalogEntries } from "./dangerous-name-matching-CnyEIiOk.js";
3
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-C5c96kNk.js";
3
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-DfO1RfZv.js";
4
4
 
5
5
  //#region src/cli/channel-options.ts
6
6
  function dedupe(values) {
@@ -1,6 +1,6 @@
1
1
  import { Gl as listChannelPlugins, Vf as CHAT_CHANNEL_ORDER, t as isTruthyEnvValue } from "./env-C77feXxI.js";
2
2
  import { d as listChannelPluginCatalogEntries } from "./dangerous-name-matching-CFRKz8Uq.js";
3
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-Dr7BDkEc.js";
3
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-DEewJtHt.js";
4
4
 
5
5
  //#region src/cli/channel-options.ts
6
6
  function dedupe(values) {
@@ -19121,7 +19121,7 @@ function createOutboundSendDepsFromCliSource(deps) {
19121
19121
  function createDefaultDeps() {
19122
19122
  return {
19123
19123
  sendMessageWhatsApp: async (...args) => {
19124
- const { sendMessageWhatsApp } = await import("./web-l7WkPuq4.js");
19124
+ const { sendMessageWhatsApp } = await import("./web-778GrijN.js");
19125
19125
  return await sendMessageWhatsApp(...args);
19126
19126
  },
19127
19127
  sendMessageTelegram: async (...args) => {
@@ -91767,7 +91767,7 @@ async function preflightDiscordMessage(params) {
91767
91767
  let preflightTranscript;
91768
91768
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
91769
91769
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
91770
- const { transcribeFirstAudio } = await import("./audio-preflight-CtOWrCYT.js");
91770
+ const { transcribeFirstAudio } = await import("./audio-preflight-QMOvUkXH.js");
91771
91771
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
91772
91772
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
91773
91773
  ctx: {
@@ -99064,7 +99064,7 @@ async function waitForTransportReady(params) {
99064
99064
 
99065
99065
  //#endregion
99066
99066
  //#region src/brand.ts
99067
- const FASED_PRODUCT_VERSION = "0.1.19";
99067
+ const FASED_PRODUCT_VERSION = "0.1.21";
99068
99068
  const FASED_DISPLAY_VERSION = `v${FASED_PRODUCT_VERSION}`;
99069
99069
 
99070
99070
  //#endregion
@@ -108687,7 +108687,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, replyMedia =
108687
108687
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
108688
108688
  let preflightTranscript;
108689
108689
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
108690
- const { transcribeFirstAudio } = await import("./audio-preflight-CtOWrCYT.js");
108690
+ const { transcribeFirstAudio } = await import("./audio-preflight-QMOvUkXH.js");
108691
108691
  preflightTranscript = await transcribeFirstAudio({
108692
108692
  ctx: {
108693
108693
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -111313,7 +111313,7 @@ function loadWebLoginQr() {
111313
111313
  return webLoginQrPromise;
111314
111314
  }
111315
111315
  function loadWebChannel() {
111316
- webChannelPromise ??= import("./web-l7WkPuq4.js");
111316
+ webChannelPromise ??= import("./web-778GrijN.js");
111317
111317
  return webChannelPromise;
111318
111318
  }
111319
111319
  function loadWhatsAppActions() {
@@ -19122,7 +19122,7 @@ function createOutboundSendDepsFromCliSource(deps) {
19122
19122
  function createDefaultDeps() {
19123
19123
  return {
19124
19124
  sendMessageWhatsApp: async (...args) => {
19125
- const { sendMessageWhatsApp } = await import("./web-CoSbILfi.js");
19125
+ const { sendMessageWhatsApp } = await import("./web-D-SMykKz.js");
19126
19126
  return await sendMessageWhatsApp(...args);
19127
19127
  },
19128
19128
  sendMessageTelegram: async (...args) => {
@@ -91758,7 +91758,7 @@ async function preflightDiscordMessage(params) {
91758
91758
  let preflightTranscript;
91759
91759
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
91760
91760
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
91761
- const { transcribeFirstAudio } = await import("./audio-preflight-CKsWKtOL.js");
91761
+ const { transcribeFirstAudio } = await import("./audio-preflight-DGoGnRdo.js");
91762
91762
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
91763
91763
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
91764
91764
  ctx: {
@@ -99055,7 +99055,7 @@ async function waitForTransportReady(params) {
99055
99055
 
99056
99056
  //#endregion
99057
99057
  //#region src/brand.ts
99058
- const FASED_PRODUCT_VERSION = "0.1.19";
99058
+ const FASED_PRODUCT_VERSION = "0.1.21";
99059
99059
  const FASED_DISPLAY_VERSION = `v${FASED_PRODUCT_VERSION}`;
99060
99060
 
99061
99061
  //#endregion
@@ -108678,7 +108678,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, replyMedia =
108678
108678
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
108679
108679
  let preflightTranscript;
108680
108680
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
108681
- const { transcribeFirstAudio } = await import("./audio-preflight-CKsWKtOL.js");
108681
+ const { transcribeFirstAudio } = await import("./audio-preflight-DGoGnRdo.js");
108682
108682
  preflightTranscript = await transcribeFirstAudio({
108683
108683
  ctx: {
108684
108684
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -111304,7 +111304,7 @@ function loadWebLoginQr() {
111304
111304
  return webLoginQrPromise;
111305
111305
  }
111306
111306
  function loadWebChannel() {
111307
- webChannelPromise ??= import("./web-CoSbILfi.js");
111307
+ webChannelPromise ??= import("./web-D-SMykKz.js");
111308
111308
  return webChannelPromise;
111309
111309
  }
111310
111310
  function loadWhatsAppActions() {