@fased/fased 0.1.61 → 0.1.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/README.md +38 -30
- package/config/dependency-ownership.json +1 -1
- package/config/signer-policies/README.md +49 -0
- package/config/signer-policies/agent.json.template +32 -0
- package/config/signer-policies/mining.json.template +69 -0
- package/config/signer-policies/network.json.template +5 -0
- package/config/signer-policies/vault.json.template +70 -0
- package/config/signer-protocol-v2.json +76 -0
- package/config/typescript-noemit-baseline.json +680 -0
- package/dist/acp/client.js +2 -2
- package/dist/acp/secret-file.js +2 -2
- package/dist/agents/agent-scope.js +2 -2
- package/dist/agents/apply-patch.js +8 -8
- package/dist/agents/auth-profiles/paths.js +2 -2
- package/dist/agents/auth-profiles/store.js +269 -33
- package/dist/agents/bash-tools.exec.js +10 -4
- package/dist/agents/bash-tools.shared.js +2 -2
- package/dist/agents/cli-credentials.js +4 -4
- package/dist/agents/current-model-catalog.js +3 -3
- package/dist/agents/docs-path.js +3 -3
- package/dist/agents/embedded-pi-mcp.js +4 -4
- package/dist/agents/identity-avatar.js +3 -3
- package/dist/agents/identity-file.js +2 -2
- package/dist/agents/memory-search.js +7 -1
- package/dist/agents/model-catalog-access.js +1 -2
- package/dist/agents/model-catalog-snapshot.js +1 -1
- package/dist/agents/model-catalog-source.js +1 -1
- package/dist/agents/model-metadata.js +1 -1
- package/dist/agents/model-selection.js +2 -28
- package/dist/agents/models-config.providers.js +6 -6
- package/dist/agents/openai-codex-app-server.js +5 -5
- package/dist/agents/pi-embedded-runner/compact.js +15 -7
- package/dist/agents/pi-embedded-runner/model.js +1 -1
- package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
- package/dist/agents/pi-embedded-runner/run.js +2 -0
- package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
- package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
- package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
- package/dist/agents/pi-model-discovery.js +6 -6
- package/dist/agents/pi-project-settings.js +3 -3
- package/dist/agents/pi-tool-definition-adapter.js +16 -1
- package/dist/agents/pi-tools.js +2 -1
- package/dist/agents/sandbox/config.js +1 -1
- package/dist/agents/sandbox/context.js +27 -2
- package/dist/agents/sandbox/fs-bridge.js +2 -2
- package/dist/agents/session-dirs.js +4 -4
- package/dist/agents/session-write-lock.js +13 -13
- package/dist/agents/shell-utils.js +5 -5
- package/dist/agents/skills/bundled-dir.js +4 -4
- package/dist/agents/skills/env-overrides.js +38 -28
- package/dist/agents/skills/local-loader.js +6 -6
- package/dist/agents/skills/plugin-skills.js +2 -2
- package/dist/agents/skills/trust.js +93 -0
- package/dist/agents/skills/workspace.js +141 -13
- package/dist/agents/skills-clawhub.js +36 -11
- package/dist/agents/skills-install-download.js +7 -7
- package/dist/agents/skills-install-plan.js +2 -2
- package/dist/agents/skills-install.js +2 -2
- package/dist/agents/skills-marketplace-scan.js +49 -0
- package/dist/agents/skills-status.js +2 -2
- package/dist/agents/subagent-depth.js +2 -2
- package/dist/agents/system-prompt-params.js +2 -2
- package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
- package/dist/agents/tools/mining-tool.js +1 -1
- package/dist/agents/tools/session-status-tool.js +1 -1
- package/dist/agents/tools/wallet-action-tool.js +172 -36
- package/dist/agents/tools/wallet-skill-policy.js +65 -23
- package/dist/agents/tools/wallet-tool.js +7 -11
- package/dist/agents/workspace.js +22 -22
- package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
- package/dist/auto-reply/reply/agent-runner.js +2 -2
- package/dist/auto-reply/reply/commands-export-session.js +7 -7
- package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
- package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
- package/dist/auto-reply/reply/directive-handling.model.js +2 -1
- package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
- package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
- package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
- package/dist/auto-reply/reply/model-selection.js +7 -4
- package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
- package/dist/auto-reply/reply/post-compaction-context.js +3 -3
- package/dist/auto-reply/reply/session-reset-model.js +4 -4
- package/dist/auto-reply/reply/session.js +3 -3
- package/dist/auto-reply/skill-commands.js +3 -3
- package/dist/auto-reply/status.js +6 -6
- package/dist/brand.js +1 -1
- package/dist/browser/chrome.executables.js +3 -3
- package/dist/browser/chrome.js +3 -3
- package/dist/browser/chrome.profile-decoration.js +6 -6
- package/dist/browser/profiles-service.js +2 -2
- package/dist/browser/server-context.js +2 -2
- package/dist/browser/trash.js +4 -4
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/canvas-host/server.js +4 -4
- package/dist/capabilities/catalog.js +3 -3
- package/dist/channel-web.js +2 -2
- package/dist/channels/plugins/catalog.js +3 -3
- package/dist/cli/browser-cli-extension.js +6 -6
- package/dist/cli/command-format.js +2 -2
- package/dist/cli/cron-cli/register.cron-simple.js +2 -2
- package/dist/cli/dns-cli.js +9 -9
- package/dist/cli/gateway-cli/dev.js +5 -5
- package/dist/cli/gateway-cli/run.js +10 -2
- package/dist/cli/hooks-cli.js +5 -5
- package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
- package/dist/cli/memory-cli.js +7 -7
- package/dist/cli/nodes-media-utils.js +2 -2
- package/dist/cli/plugins-cli.js +2 -2
- package/dist/cli/program/command-registry.js +1 -1
- package/dist/cli/program/register.onboard.js +2 -3
- package/dist/cli/program/register.wallet.js +16 -123
- package/dist/cli/providers-cli.js +1 -1
- package/dist/cli/sat-cli.js +129 -2
- package/dist/cli/secrets-cli.js +3 -3
- package/dist/cli/update-cli/update-command.js +260 -11
- package/dist/cli/windows-argv.js +2 -2
- package/dist/commands/auth-choice.apply.api-providers.js +3 -3
- package/dist/commands/dashboard-link.js +3 -3
- package/dist/commands/doctor-config-flow.js +1 -1
- package/dist/commands/doctor-install.js +5 -5
- package/dist/commands/doctor-legacy-config.js +2 -13
- package/dist/commands/doctor-memory-search.js +2 -2
- package/dist/commands/doctor-platform-notes.js +2 -2
- package/dist/commands/doctor-sandbox.js +2 -2
- package/dist/commands/doctor-state-integrity.js +23 -23
- package/dist/commands/doctor-workspace.js +3 -3
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/managed-up.js +2 -2
- package/dist/commands/model-picker.js +6 -6
- package/dist/commands/models/auth.js +1 -1
- package/dist/commands/onboard-auth.config-gateways.js +1 -1
- package/dist/commands/onboard-auth.credentials.js +35 -11
- package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
- package/dist/commands/onboard-non-interactive/local.js +5 -1
- package/dist/commands/onboarding/plugin-install.js +2 -2
- package/dist/commands/sessions-cleanup.js +2 -2
- package/dist/commands/signal-install.js +6 -6
- package/dist/commands/status-all/channels.js +2 -2
- package/dist/commands/wallet.js +570 -1913
- package/dist/config/cache-utils.js +2 -2
- package/dist/config/config.js +2 -2
- package/dist/config/includes.js +5 -5
- package/dist/config/io.js +66 -4
- package/dist/config/paths.js +3 -3
- package/dist/config/sat-runtime-ids.js +3 -3
- package/dist/config/schema.help.js +8 -7
- package/dist/config/schema.labels.js +5 -4
- package/dist/config/sessions/disk-budget.js +6 -6
- package/dist/config/sessions/paths.js +2 -2
- package/dist/config/sessions/store.js +17 -17
- package/dist/config/sessions/transcript.js +4 -4
- package/dist/config/talk.js +2 -2
- package/dist/config/zod-schema.agent-runtime.js +1 -0
- package/dist/config/zod-schema.js +5 -0
- package/dist/control-ui/assets/{app-BXA4gPvN.js → app-bR-fO5ty.js} +1511 -1555
- package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
- package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
- package/dist/control-ui/assets/{index-D2QbJhVg.js → index-ckCxHwjy.js} +3 -3
- package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
- package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
- package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
- package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
- package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- package/dist/cron/service/store.js +2 -2
- package/dist/cron/store.js +6 -6
- package/dist/daemon/systemd-system.js +60 -54
- package/dist/discord/monitor/thread-bindings.state.js +2 -2
- package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
- package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
- package/dist/extensions/sat-mining/src/sat-bond-layout.js +14 -11
- package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
- package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
- package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
- package/dist/federation/auto-connect.js +98 -8
- package/dist/federation/marketplace-capability-adapter.js +33 -7
- package/dist/federation/marketplace-delivery-outbox.js +196 -0
- package/dist/federation/marketplace-delivery.js +351 -215
- package/dist/federation/marketplace-direct-payment.js +272 -141
- package/dist/federation/marketplace-escrow.js +607 -249
- package/dist/federation/marketplace-settlement-ledger.js +352 -0
- package/dist/federation/offers.js +9 -7
- package/dist/federation/peer-auth-v2.js +529 -0
- package/dist/gateway/a2a-http.js +425 -96
- package/dist/gateway/a2a-settlement.js +259 -153
- package/dist/gateway/a2a-task-store.js +524 -0
- package/dist/gateway/auth.js +38 -2
- package/dist/gateway/config-reload.js +46 -33
- package/dist/gateway/control-ui-boot-check.js +6 -6
- package/dist/gateway/control-ui-login.js +7 -7
- package/dist/gateway/control-ui.js +9 -9
- package/dist/gateway/durable-capacity.js +31 -0
- package/dist/gateway/federation-http.js +540 -135
- package/dist/gateway/federation-marketplace-run-store.js +397 -0
- package/dist/gateway/federation-marketplace.js +535 -230
- package/dist/gateway/hooks-mapping.js +4 -4
- package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
- package/dist/gateway/security-path.js +1 -1
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +1088 -1209
- package/dist/gateway/server-methods/chat.js +3 -3
- package/dist/gateway/server-methods/models.js +1 -1
- package/dist/gateway/server-methods/secrets.js +40 -0
- package/dist/gateway/server-methods/sessions.js +6 -6
- package/dist/gateway/server-methods/usage.js +2 -2
- package/dist/gateway/server-methods.js +1 -2
- package/dist/gateway/server-reload-handlers.js +196 -66
- package/dist/gateway/server-runtime-config.js +1 -1
- package/dist/gateway/server-secrets-runtime.js +288 -0
- package/dist/gateway/server.impl.js +73 -42
- package/dist/gateway/session-compaction-checkpoints.js +4 -4
- package/dist/gateway/session-utils.fs.js +24 -24
- package/dist/gateway/session-utils.js +6 -6
- package/dist/gateway/sessions-patch.js +3 -5
- package/dist/hooks/bundled-dir.js +4 -4
- package/dist/hooks/gmail-setup-utils.js +6 -6
- package/dist/hooks/import-url.js +2 -2
- package/dist/hooks/loader.js +4 -4
- package/dist/hooks/workspace.js +7 -7
- package/dist/index.js +4 -2
- package/dist/infra/archive.js +17 -17
- package/dist/infra/boundary-file-read.js +2 -2
- package/dist/infra/boundary-path.js +15 -15
- package/dist/infra/brew.js +2 -2
- package/dist/infra/control-ui-assets.js +14 -14
- package/dist/infra/device-auth-store.js +8 -8
- package/dist/infra/device-identity.js +8 -8
- package/dist/infra/dotenv.js +2 -2
- package/dist/infra/exec-approvals.js +8 -8
- package/dist/infra/exec-command-resolution.js +4 -4
- package/dist/infra/exec-safe-bin-trust.js +2 -2
- package/dist/infra/fased-root.js +5 -5
- package/dist/infra/fasedhub.js +64 -1
- package/dist/infra/fs-safe.js +14 -14
- package/dist/infra/gateway-lock.js +11 -11
- package/dist/infra/git-commit.js +5 -5
- package/dist/infra/git-root.js +4 -4
- package/dist/infra/hosted-runtime-artifact.js +3 -3
- package/dist/infra/is-main.js +2 -2
- package/dist/infra/json-file.js +7 -7
- package/dist/infra/local-source-paired-update.js +538 -0
- package/dist/infra/managed-runtime-bootstrap.js +6 -6
- package/dist/infra/outbound/delivery-queue.js +16 -16
- package/dist/infra/path-env.js +3 -3
- package/dist/infra/ports-lsof.js +4 -4
- package/dist/infra/provider-usage.auth.js +3 -3
- package/dist/infra/restart.js +41 -10
- package/dist/infra/safe-open-sync.js +2 -2
- package/dist/infra/session-cost-usage.js +9 -9
- package/dist/infra/shell-env.js +2 -2
- package/dist/infra/state-migrations.fs.js +6 -6
- package/dist/infra/state-migrations.js +23 -23
- package/dist/infra/tmp-fased-dir.js +6 -6
- package/dist/infra/update-runner.js +96 -0
- package/dist/infra/widearea-dns.js +3 -3
- package/dist/infra/wsl.js +2 -2
- package/dist/light-update-status.js +11 -11
- package/dist/line/accounts.js +2 -2
- package/dist/line/download.js +2 -2
- package/dist/logging/config.js +3 -3
- package/dist/logging/logger.js +7 -7
- package/dist/managed/federation.js +3 -3
- package/dist/managed/tunnel.js +3 -3
- package/dist/media/store.js +13 -13
- package/dist/media-understanding/runner.js +3 -3
- package/dist/memory/backend-config.js +2 -1
- package/dist/memory/embeddings.js +2 -2
- package/dist/memory/internal.js +10 -10
- package/dist/memory/manager-sync-ops.js +7 -7
- package/dist/memory/repair-executor.js +17 -17
- package/dist/memory/session-files.js +16 -2
- package/dist/node-host/invoke-system-run-plan.js +8 -8
- package/dist/node-host/invoke.js +2 -2
- package/dist/node-host/runner.js +3 -3
- package/dist/pairing/pairing-store.js +3 -3
- package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
- package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
- package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-Bv0hUOWL.js → audio-preflight-BYxAt775.js} +27 -27
- package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
- package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
- package/dist/plugin-sdk/channel-plugin-common.js +4 -4
- package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-Bk--NU3E.js → chunk-items-DIRHG2gJ.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +27 -27
- package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
- package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
- package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
- package/dist/plugin-sdk/{config-schema-CGW6J3Pv.js → config-schema-BOT7kHb6.js} +6779 -3696
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +5 -5
- package/dist/plugin-sdk/discord.js +19 -19
- package/dist/plugin-sdk/file-lock.js +35 -4
- package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
- package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
- package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
- package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
- package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +9 -27
- package/dist/plugin-sdk/index.js +29 -29
- package/dist/plugin-sdk/json-store.js +6 -6
- package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
- package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
- package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
- package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
- package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
- package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
- package/dist/plugin-sdk/{monitor-B9Cmt_Je.js → monitor-BCFDaqJ-.js} +31 -31
- package/dist/plugin-sdk/{monitor-B71iwAgC.js → monitor-BgbjRiPM.js} +32 -32
- package/dist/plugin-sdk/{openresponses-http-Du4GMmwo.js → openresponses-http-DFf87SMM.js} +27 -27
- package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
- package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
- package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-BMkkS038.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
- package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
- package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
- package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
- package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
- package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
- package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
- package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
- package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
- package/dist/plugin-sdk/sat-runtime.js +29 -29
- package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
- package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
- package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
- package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
- package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
- package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
- package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
- package/dist/plugin-sdk/{slack-D_bbE6Yd.js → slack-BUTt8cxK.js} +39 -39
- package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
- package/dist/plugin-sdk/slack.d.ts +5 -5
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-Dqo9nRhi.js → sticker-cache-D0wHVqjt.js} +3 -3
- package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
- package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
- package/dist/plugin-sdk/{telegram-actions-Cnag7JTH.js → telegram-actions-CC_qN4v0.js} +30 -30
- package/dist/plugin-sdk/telegram.d.ts +5 -5
- package/dist/plugin-sdk/telegram.js +8 -8
- package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
- package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
- package/dist/plugin-sdk/{types-CLIvQaVg.d.ts → types-C3avNytw.d.ts} +3 -4
- package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
- package/dist/plugin-sdk/{types-BYDL6dQj.d.ts → types-DWfbSAaM.d.ts} +2 -2
- package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
- package/dist/plugin-sdk/{web-BInKQkc4.js → web-BXsJ1vqe.js} +32 -32
- package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +5 -5
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
- package/dist/plugins/bundled-dir.js +3 -3
- package/dist/plugins/discovery.js +11 -11
- package/dist/plugins/loader.js +13 -13
- package/dist/plugins/manifest-registry.js +2 -2
- package/dist/plugins/manifest.js +4 -4
- package/dist/plugins/path-safety.js +3 -3
- package/dist/plugins/status-cache.js +9 -9
- package/dist/plugins/update.js +3 -3
- package/dist/plugins/web-search-install-catalog.js +3 -3
- package/dist/providers/refresh.js +1 -1
- package/dist/providers/registry.js +1 -1
- package/dist/secrets/apply.js +17 -17
- package/dist/secrets/audit.js +11 -11
- package/dist/secrets/runtime.js +1 -1
- package/dist/secrets/shared.js +9 -9
- package/dist/security/scan-paths.js +2 -2
- package/dist/shared/config-eval.js +2 -2
- package/dist/shared/pid-alive.js +2 -2
- package/dist/tasks/standing-orders.js +5 -5
- package/dist/tasks/task-flow-registry.js +5 -5
- package/dist/tasks/task-registry.js +5 -5
- package/dist/tasks/workflow-definitions.js +6 -6
- package/dist/telegram/token.js +5 -5
- package/dist/utils.js +5 -5
- package/dist/wallet/external-submission-ledger.js +376 -0
- package/dist/wallet/legacy-embedded-keystore.js +40 -0
- package/dist/wallet/local-socket-signer-archive.js +30 -0
- package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
- package/dist/wallet/local-socket-signer-policy.js +166 -0
- package/dist/wallet/local-socket-signer-protocol.js +561 -118
- package/dist/wallet/native-signer-wallet-id.js +25 -0
- package/dist/wallet/providers/alchemy-adapter.js +3 -0
- package/dist/wallet/providers/local-socket-signer-adapter.js +382 -107
- package/dist/wallet/providers/turnkey-adapter.js +292 -34
- package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
- package/dist/wallet/signer-network-admin.js +184 -0
- package/dist/wallet/signer-protocol-v2.generated.js +90 -0
- package/dist/wallet/solana-bond-signing.js +157 -69
- package/dist/wallet/solana-reviewed-transaction.js +375 -0
- package/dist/wallet/solana-swap.js +520 -64
- package/dist/wallet/solana-transaction-inspection.js +106 -4
- package/dist/wallet/solana-trigger.js +658 -320
- package/dist/wallet/turnkey-reviewed-state.js +370 -0
- package/dist/wallet/wallet-approval-auth.js +20 -31
- package/dist/wallet/wallet-atomic-state.js +53 -0
- package/dist/wallet/wallet-audit-log.js +5 -5
- package/dist/wallet/wallet-canary.js +0 -1
- package/dist/wallet/wallet-inbound-events.js +19 -14
- package/dist/wallet/wallet-observability.js +5 -5
- package/dist/wallet/wallet-policy-simulation.js +1 -1
- package/dist/wallet/wallet-policy.js +95 -41
- package/dist/wallet/wallet-provider-capabilities.js +28 -4
- package/dist/wallet/wallet-provider-registry.js +64 -51
- package/dist/wallet/wallet-provider-resolver.js +62 -63
- package/dist/wallet/wallet-runtime-config.js +31 -44
- package/dist/wallet/wallet-secrets-store.js +44 -22
- package/dist/wallet/wallet-send-approvals.js +1894 -592
- package/dist/wallet/wallet-send-execution-ledger.js +292 -0
- package/dist/wallet/wallet-settlement-links.js +17 -16
- package/dist/wallet/wallet-standard-review.js +353 -0
- package/dist/wallet/wallet-status.js +0 -9
- package/dist/wallet/wallet-task-ledger.js +16 -2
- package/dist/web/accounts.js +3 -3
- package/dist/web/auth-store.js +18 -18
- package/dist/web/auto-reply/heartbeat-runner.js +1 -1
- package/dist/web/auto-reply/monitor.js +2 -2
- package/dist/web/session.js +4 -4
- package/dist/wizard/host-security-capability.js +15 -24
- package/dist/wizard/onboarding.finalize.js +63 -184
- package/dist/wizard/onboarding.host-security.js +118 -1368
- package/dist/wizard/onboarding.js +180 -242
- package/dist/wizard/onboarding.wallet.js +323 -829
- 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/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +18 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +18 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +18 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/index.ts +498 -153
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
- package/extensions/sat-mining/src/audit-store.ts +50 -5
- package/extensions/sat-mining/src/claim-service.ts +85 -14
- package/extensions/sat-mining/src/config.ts +9 -0
- package/extensions/sat-mining/src/cycle-progress.ts +16 -8
- package/extensions/sat-mining/src/epoch-service.ts +9 -5
- package/extensions/sat-mining/src/gateway-runner.ts +21 -1
- package/extensions/sat-mining/src/protocol-contract.ts +45 -1
- package/extensions/sat-mining/src/recovery-service.ts +312 -0
- package/extensions/sat-mining/src/round-watcher.ts +391 -81
- package/extensions/sat-mining/src/rpc-read.ts +330 -89
- package/extensions/sat-mining/src/runtime.ts +14 -0
- package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
- package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
- package/extensions/sat-mining/src/solana-submit.ts +1199 -428
- package/extensions/sat-mining/src/submission-ledger.ts +433 -0
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +18 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +18 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +18 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +18 -0
- package/extensions/zalouser/package.json +1 -1
- package/install.sh +4955 -0
- package/package.json +24 -5
- package/scripts/fased-host-updater.mjs +1421 -0
- package/scripts/fased-host-updaterctl.mjs +186 -0
- package/scripts/fased-managed-service.sh +36 -0
- package/scripts/fased-managed-updater.mjs +3065 -156
- package/scripts/fased-signer-enroll-hosting.sh +275 -0
- package/scripts/fased-signer-network-hosting.sh +143 -0
- package/scripts/fased-signer-owner-policy.mjs +1430 -0
- package/scripts/fased-signer-policy-hosting.sh +50 -0
- package/scripts/fased-signer-policy-local.sh +26 -0
- package/scripts/hosted-release-manifest.mjs +185 -0
- package/scripts/install-fased-signerd.sh +217 -0
- package/scripts/install-managed-runtime.mjs +212 -10
- package/scripts/managed-runtime-layout.mjs +75 -3
- package/scripts/migrate-hosted-signer-v2.mjs +58 -0
- package/scripts/start-managed.sh +169 -360
- package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
- package/dist/plugin-sdk/tmp-fased-dir-BdFQvrvw.d.ts +0 -77
- package/dist/wallet/local-socket-signer-broker.js +0 -224
- package/dist/wallet/local-socket-signer-custody.js +0 -42
- package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
- package/dist/wallet/providers/privy-adapter.js +0 -80
- package/dist/wallet/wallet-custody.js +0 -1836
|
@@ -211,49 +211,28 @@ async function runShell(command, options) {
|
|
|
211
211
|
});
|
|
212
212
|
}
|
|
213
213
|
async function installRootServiceMaintenanceAccess(params) {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
return { ok: true };
|
|
219
|
-
}
|
|
220
|
-
const sudoersPath = `/etc/sudoers.d/${safeServiceName}-${safeUser}-maintenance`;
|
|
221
|
-
const sudoers = [
|
|
222
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl restart ${safeServiceName}.service`,
|
|
223
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl restart --no-block ${safeServiceName}.service`,
|
|
224
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl start --no-block ${safeServiceName}.service`,
|
|
225
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl enable --now ${safeServiceName}.service`,
|
|
226
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl status ${safeServiceName}.service`,
|
|
227
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl status ${safeServiceName}.service --no-pager`,
|
|
228
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl is-active ${safeServiceName}.service`,
|
|
229
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl is-active ${safeServiceName}`,
|
|
230
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl show ${safeServiceName}.service -p ActiveState --value`,
|
|
231
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/systemctl cat ${safeServiceName}.service`,
|
|
232
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName}.service -n 50 --no-pager`,
|
|
233
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName}.service -n 120 --no-pager`,
|
|
234
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName} -n 50 --no-pager`,
|
|
235
|
-
`${safeUser} ALL=(root) NOPASSWD: /usr/bin/journalctl -u ${safeServiceName} -n 120 --no-pager`
|
|
236
|
-
].join("\n");
|
|
237
|
-
const b64 = Buffer.from(`${sudoers}\n`, "utf8").toString("base64");
|
|
238
|
-
const installCommand = [
|
|
239
|
-
`echo '${b64}' | base64 -d | sudo -n tee '${sudoersPath}' >/dev/null`,
|
|
240
|
-
`sudo -n chmod 440 '${sudoersPath}'`,
|
|
241
|
-
`if command -v visudo >/dev/null 2>&1; then sudo -n visudo -cf '${sudoersPath}' >/dev/null; fi`
|
|
242
|
-
].join(" && ");
|
|
243
|
-
return await runShell(installCommand);
|
|
214
|
+
return {
|
|
215
|
+
ok: false,
|
|
216
|
+
detail: `${params.runAsUser} is intentionally not granted sudo access to ${params.serviceName}`
|
|
217
|
+
};
|
|
244
218
|
}
|
|
245
219
|
async function installRootSystemdFallback(params) {
|
|
246
|
-
const safeServiceName = params.serviceName.replace(/[^A-Za-z0-9@_.-]/g, "");
|
|
247
|
-
const safeRunAsUser = params.runAsUser.replace(/[^A-Za-z0-9@_.-]/g, "");
|
|
248
|
-
const unitPath = `/etc/systemd/system/${safeServiceName}.service`;
|
|
249
220
|
const escapedUser = params.runAsUser.replace(/"/g, "\\\"");
|
|
250
221
|
const baseUnit = buildSystemdUnit({
|
|
251
222
|
description: "Fased Gateway (managed)",
|
|
252
223
|
programArguments: params.programArguments,
|
|
253
224
|
workingDirectory: params.workingDirectory,
|
|
254
|
-
environment:
|
|
225
|
+
environment: {
|
|
226
|
+
...params.environment,
|
|
227
|
+
FASED_HOST_PROFILE: "hosting",
|
|
228
|
+
FASED_WALLET_LOCAL_SIGNER_SOCKET: "/run/fased-signerd/app.sock"
|
|
229
|
+
}
|
|
255
230
|
});
|
|
256
231
|
const unitLines = baseUnit.split("\n");
|
|
232
|
+
const unitIndex = unitLines.findIndex((line) => line.trim() === "[Unit]");
|
|
233
|
+
if (unitIndex !== -1) {
|
|
234
|
+
unitLines.splice(unitIndex + 1, 0, "After=fased-signerd.service", "Wants=fased-signerd.service");
|
|
235
|
+
}
|
|
257
236
|
const installIndex = unitLines.findIndex((line) => line.trim() === "[Install]");
|
|
258
237
|
const wantedByIndex = unitLines.findIndex((line) => line.trim() === "WantedBy=default.target");
|
|
259
238
|
if (wantedByIndex !== -1) {
|
|
@@ -268,18 +247,14 @@ async function installRootSystemdFallback(params) {
|
|
|
268
247
|
}
|
|
269
248
|
const unit = unitLines.join("\n");
|
|
270
249
|
const b64 = Buffer.from(unit, "utf8").toString("base64");
|
|
271
|
-
|
|
250
|
+
void b64;
|
|
251
|
+
const helperInstallCommand = "false";
|
|
272
252
|
const helperResult = await runShell(helperInstallCommand);
|
|
273
|
-
const
|
|
274
|
-
`echo '${b64}' | base64 -d | sudo -n tee '${unitPath}' >/dev/null`,
|
|
275
|
-
"sudo -n systemctl daemon-reload",
|
|
276
|
-
`sudo -n systemctl enable --now '${safeServiceName}.service'`
|
|
277
|
-
].join(" && ");
|
|
278
|
-
const result = helperResult.ok ? helperResult : await runShell(installCommand);
|
|
253
|
+
const result = helperResult;
|
|
279
254
|
if (!result.ok) {
|
|
280
255
|
return {
|
|
281
256
|
ok: false,
|
|
282
|
-
detail: `systemd install failed (${result.detail ?? "unknown error"}). ` + `Installer helper result: ${helperResult.detail ?? (helperResult.ok ? "ok" : "unavailable")}. ` + "
|
|
257
|
+
detail: `systemd install failed (${result.detail ?? "unknown error"}). ` + `Installer helper result: ${helperResult.detail ?? (helperResult.ok ? "ok" : "unavailable")}. ` + "Repair only from the provider root console using the exact tagged, attested Hosting release; never run the app checkout with sudo."
|
|
283
258
|
};
|
|
284
259
|
}
|
|
285
260
|
if (params.runAsUser !== "root") {
|
|
@@ -290,7 +265,7 @@ async function installRootSystemdFallback(params) {
|
|
|
290
265
|
if (!maintenanceAccess.ok) {
|
|
291
266
|
return {
|
|
292
267
|
ok: false,
|
|
293
|
-
detail: `systemd install succeeded, but post-install maintenance access failed (${maintenanceAccess.detail ?? "unknown error"}). ` +
|
|
268
|
+
detail: `systemd install succeeded, but post-install maintenance access failed (${maintenanceAccess.detail ?? "unknown error"}). ` + "The hosted app must remain unable to elevate after installation."
|
|
294
269
|
};
|
|
295
270
|
}
|
|
296
271
|
}
|
|
@@ -339,7 +314,7 @@ function resolveVerifiedRootServiceReady(params) {
|
|
|
339
314
|
}
|
|
340
315
|
function resolveLocalSignerSyncForFinalize(params) {
|
|
341
316
|
return {
|
|
342
|
-
sync:
|
|
317
|
+
sync: !params.strictVps,
|
|
343
318
|
restart: !params.strictVps
|
|
344
319
|
};
|
|
345
320
|
}
|
|
@@ -370,7 +345,7 @@ function formatHostedRootServiceRequiredFailure(params) {
|
|
|
370
345
|
`Hosting requires the root-managed fased-gateway.service running as User=${runAsUser}.`,
|
|
371
346
|
"The installer will not fall back to an app-managed user service for the hosting profile.",
|
|
372
347
|
`Root service repair failed: ${detail}`,
|
|
373
|
-
"Repair
|
|
348
|
+
"Repair only from the provider root console using the exact tagged, attested Hosting release; never run the app checkout with sudo.",
|
|
374
349
|
"Inspect: sudo systemctl status fased-gateway --no-pager",
|
|
375
350
|
"Inspect logs: sudo journalctl -u fased-gateway -n 120 --no-pager"
|
|
376
351
|
].join("\n");
|
|
@@ -382,26 +357,20 @@ async function migrateStrictVpsGatewayServices() {
|
|
|
382
357
|
"rm -f ~/.config/systemd/user/fased-gateway.service 2>/dev/null || true",
|
|
383
358
|
"rm -rf ~/.config/systemd/user/fased-gateway.service.d 2>/dev/null || true",
|
|
384
359
|
"systemctl --user daemon-reload 2>/dev/null || true",
|
|
385
|
-
"sudo -n systemctl disable --now fased-gateway 2>/dev/null || true",
|
|
386
|
-
"sudo -n systemctl reset-failed fased-gateway 2>/dev/null || true",
|
|
387
|
-
"sudo -n rm -rf /etc/systemd/system/fased-gateway.service.d 2>/dev/null || true",
|
|
388
|
-
"sudo -n pkill -f 'start-managed.sh|start-vps.sh|run-node.mjs managed up|run-node.mjs gateway|dist/index.js managed up|fased.mjs start --mode managed|zrok share' 2>/dev/null || true",
|
|
389
|
-
"sleep 1",
|
|
390
|
-
"sudo -n systemctl daemon-reload 2>/dev/null || true",
|
|
391
360
|
"true"
|
|
392
361
|
].join(" ; "));
|
|
393
362
|
}
|
|
394
363
|
async function verifyStrictRootGatewayExecStart(serviceName = "fased-gateway", startupMode = "gateway", runAsUser) {
|
|
395
364
|
const safeRunAsUser = runAsUser?.trim();
|
|
396
365
|
return await runShell([
|
|
397
|
-
startupMode === "managed-up" ? `
|
|
398
|
-
`
|
|
399
|
-
...safeRunAsUser ? [`
|
|
366
|
+
startupMode === "managed-up" ? `systemctl cat ${serviceName}.service 2>/dev/null | grep -E '^ExecStart=' | grep -E ' managed up|start-(managed|vps)\\.sh|/usr/local/libexec/fased-gateway-launch' >/dev/null` : `systemctl cat ${serviceName}.service 2>/dev/null | grep -E '^ExecStart=' | grep -F ' gateway ' >/dev/null`,
|
|
367
|
+
`systemctl cat ${serviceName}.service 2>/dev/null | grep -F 'Environment=FASED_GATEWAY_PORT=' >/dev/null`,
|
|
368
|
+
...safeRunAsUser ? [`systemctl cat ${serviceName}.service 2>/dev/null | grep -F 'User=${safeRunAsUser}' >/dev/null`] : [],
|
|
400
369
|
"true"
|
|
401
370
|
].join(" ; "));
|
|
402
371
|
}
|
|
403
372
|
async function isSystemdServiceActive(params) {
|
|
404
|
-
const command = params.scope === "root" ? `
|
|
373
|
+
const command = params.scope === "root" ? `systemctl is-active ${params.name} 2>/dev/null` : `systemctl --user is-active ${params.name} 2>/dev/null`;
|
|
405
374
|
const result = await runShell(command, { timeoutMs: 5e3 });
|
|
406
375
|
return result;
|
|
407
376
|
}
|
|
@@ -431,13 +400,19 @@ async function verifyStrictVpsMaintenanceReadiness(params) {
|
|
|
431
400
|
if (!stateOwner.ok) {
|
|
432
401
|
throw new Error(`Hosting requires ${configDir} to be owned by ${runAsUser} before completion.`);
|
|
433
402
|
}
|
|
434
|
-
const
|
|
435
|
-
if (!
|
|
436
|
-
throw new Error("Hosting requires
|
|
403
|
+
const tailscaleStatus = await runShell("tailscale serve status >/dev/null 2>&1");
|
|
404
|
+
if (!tailscaleStatus.ok) {
|
|
405
|
+
throw new Error("Hosting requires the root-prepared Tailscale Serve route before completion.");
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
async function configureHostedSignerWebAuthnForTailscale() {
|
|
409
|
+
const result = await runShell("test -f /etc/fased/signerd-webauthn.env && test ! -L /etc/fased/signerd-webauthn.env && " + "test \"$(stat -c %u /etc/fased/signerd-webauthn.env)\" = 0 && " + "grep -Eq '^FASED_WALLET_WEBAUTHN_RP_ID=[a-z0-9.-]+$' /etc/fased/signerd-webauthn.env && " + "grep -Eq '^FASED_WALLET_WEBAUTHN_ORIGINS=https://[a-z0-9.-]+$' /etc/fased/signerd-webauthn.env");
|
|
410
|
+
if (!result.ok) {
|
|
411
|
+
throw new Error(`Hosting could not verify the root-persisted Tailscale WebAuthn RP configuration (${result.detail ?? "unknown error"}).`);
|
|
437
412
|
}
|
|
438
413
|
}
|
|
439
414
|
async function isSystemdServiceRunningOrStarting(params) {
|
|
440
|
-
const command = params.scope === "root" ? `
|
|
415
|
+
const command = params.scope === "root" ? `systemctl show ${params.name}.service -p ActiveState --value 2>/dev/null | grep -E '^(active|activating|deactivating)$' >/dev/null 2>&1` : `systemctl --user show ${params.name}.service -p ActiveState --value 2>/dev/null | grep -E '^(active|activating|deactivating)$' >/dev/null 2>&1`;
|
|
441
416
|
const result = await runShell(command, { timeoutMs: 5e3 });
|
|
442
417
|
return result.ok;
|
|
443
418
|
}
|
|
@@ -506,26 +481,12 @@ function buildGatewayServiceRestartAttempts(serviceName = "fased-gateway", profi
|
|
|
506
481
|
timeoutMs: 8e3,
|
|
507
482
|
timeoutIsProgress: true
|
|
508
483
|
}];
|
|
509
|
-
const rootAttempts = [
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
},
|
|
516
|
-
{
|
|
517
|
-
label: "root start",
|
|
518
|
-
command: `sudo -n systemctl start --no-block ${serviceName}.service >/dev/null 2>&1`,
|
|
519
|
-
timeoutMs: 8e3,
|
|
520
|
-
timeoutIsProgress: true
|
|
521
|
-
},
|
|
522
|
-
{
|
|
523
|
-
label: "root enable+start",
|
|
524
|
-
command: `sudo -n systemctl enable --now ${serviceName}.service >/dev/null 2>&1`,
|
|
525
|
-
timeoutMs: 12e3,
|
|
526
|
-
timeoutIsProgress: true
|
|
527
|
-
}
|
|
528
|
-
];
|
|
484
|
+
const rootAttempts = [{
|
|
485
|
+
label: "signal app-owned hosted Gateway",
|
|
486
|
+
command: `pid="$(systemctl show ${serviceName}.service --property MainPID --value 2>/dev/null)"; ` + "test \"$pid\" -gt 1; kill -TERM \"$pid\"",
|
|
487
|
+
timeoutMs: 8e3,
|
|
488
|
+
timeoutIsProgress: true
|
|
489
|
+
}];
|
|
529
490
|
return [...profile === "hosting" ? rootAttempts : userAttempts, ...profile === "hosting" ? [] : rootAttempts];
|
|
530
491
|
}
|
|
531
492
|
async function restartGatewayServiceOnce(serviceName = "fased-gateway", profile = "local") {
|
|
@@ -1206,7 +1167,9 @@ async function finalizeOnboardingWizard(options) {
|
|
|
1206
1167
|
config: nextConfig
|
|
1207
1168
|
});
|
|
1208
1169
|
let installDaemon;
|
|
1209
|
-
if (
|
|
1170
|
+
if (strictVps) {
|
|
1171
|
+
installDaemon = true;
|
|
1172
|
+
} else if (explicitInstallDaemon !== undefined) {
|
|
1210
1173
|
installDaemon = explicitInstallDaemon;
|
|
1211
1174
|
} else if (process.platform === "linux" && !systemdAvailable) {
|
|
1212
1175
|
installDaemon = false;
|
|
@@ -1218,121 +1181,34 @@ async function finalizeOnboardingWizard(options) {
|
|
|
1218
1181
|
initialValue: true
|
|
1219
1182
|
});
|
|
1220
1183
|
}
|
|
1221
|
-
if (process.platform === "linux" && !systemdAvailable && installDaemon) {
|
|
1184
|
+
if (process.platform === "linux" && !systemdAvailable && installDaemon && !strictVps) {
|
|
1222
1185
|
installDaemon = false;
|
|
1223
1186
|
}
|
|
1224
1187
|
if (installDaemon) {
|
|
1225
|
-
const
|
|
1226
|
-
const canUseRootService = process.platform === "linux" && sudoCheck.ok;
|
|
1227
|
-
const preferRootService = strictVps;
|
|
1188
|
+
const rootPrepared = strictVps && process.env.FASED_HOST_ROOT_PREPARED?.trim() === "1";
|
|
1228
1189
|
let rootServiceActiveSuccessfully = false;
|
|
1229
|
-
if (strictVps && !
|
|
1190
|
+
if (strictVps && !rootPrepared) {
|
|
1230
1191
|
throw new Error(formatHostedRootServiceRequiredFailure({
|
|
1231
1192
|
runAsUser: resolveGatewayServiceRunAsUser(),
|
|
1232
|
-
detail: "
|
|
1193
|
+
detail: "the provider-console root phase did not install the fixed root-owned service; the app has no sudo or root control socket"
|
|
1233
1194
|
}));
|
|
1234
1195
|
}
|
|
1235
|
-
if (
|
|
1196
|
+
if (rootPrepared) {
|
|
1236
1197
|
const runAsUser = resolveGatewayServiceRunAsUser();
|
|
1237
1198
|
if (!runAsUser) {
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
const patchHeap = await runShell([
|
|
1250
|
-
`sudo -n sed -i 's/FASED_GATEWAY_MAX_OLD_SPACE_MB=[0-9]*/FASED_GATEWAY_MAX_OLD_SPACE_MB=${recommendedGatewayMaxOldSpaceMb}/' /etc/systemd/system/fased-gateway.service`,
|
|
1251
|
-
`sudo -n sed -i 's/max-old-space-size=[0-9]*/max-old-space-size=${recommendedGatewayMaxOldSpaceMb}/' /etc/systemd/system/fased-gateway.service`,
|
|
1252
|
-
"sudo -n systemctl daemon-reload",
|
|
1253
|
-
"sudo -n systemctl restart --no-block fased-gateway.service"
|
|
1254
|
-
].join(" && "), { timeoutMs: 12e3 });
|
|
1255
|
-
if (!strictVps || flow !== "quickstart") {
|
|
1256
|
-
await prompter.note(["Root-managed gateway service already healthy; reusing existing service.", patchHeap.ok ? `Updated heap limit to ${recommendedGatewayMaxOldSpaceMb}MB and restarted.` : `Heap patch skipped (${patchHeap.detail ?? "unknown error"}); unit may need manual update.`].join("\n"), "Gateway service");
|
|
1257
|
-
}
|
|
1258
|
-
rootServiceActiveSuccessfully = true;
|
|
1259
|
-
} else {
|
|
1260
|
-
let rootRestartQueued = false;
|
|
1261
|
-
if (strictExec.ok && !rootActive.ok) {
|
|
1262
|
-
const restartExisting = await runShell("sudo -n systemctl restart --no-block fased-gateway.service");
|
|
1263
|
-
if (restartExisting.ok) {
|
|
1264
|
-
if (!strictVps || flow !== "quickstart") {
|
|
1265
|
-
await prompter.note("Started existing root-managed gateway service.", "Gateway service");
|
|
1266
|
-
}
|
|
1267
|
-
rootRestartQueued = true;
|
|
1268
|
-
}
|
|
1269
|
-
}
|
|
1270
|
-
const rootNowActive = await isSystemdServiceActive({
|
|
1271
|
-
name: "fased-gateway",
|
|
1272
|
-
scope: "root"
|
|
1273
|
-
});
|
|
1274
|
-
if (!rootNowActive.ok) {
|
|
1275
|
-
await withWizardProgress("Gateway service", { doneMessage: "Gateway service migration complete." }, async (progress) => {
|
|
1276
|
-
progress.update("Removing conflicting gateway services…");
|
|
1277
|
-
await migrateStrictVpsGatewayServices();
|
|
1278
|
-
});
|
|
1279
|
-
const rootInstallPlan = await buildOnboardingGatewayInstallPlan({
|
|
1280
|
-
port: settings.port,
|
|
1281
|
-
token: preferredGatewayToken,
|
|
1282
|
-
runtime: preferredDaemonRuntime,
|
|
1283
|
-
config: nextConfig,
|
|
1284
|
-
prompter,
|
|
1285
|
-
strictVps,
|
|
1286
|
-
startupMode: expectedGatewayStartupMode
|
|
1287
|
-
});
|
|
1288
|
-
const rootService = await installRootSystemdFallback({
|
|
1289
|
-
serviceName: "fased-gateway",
|
|
1290
|
-
runAsUser,
|
|
1291
|
-
programArguments: rootInstallPlan.programArguments,
|
|
1292
|
-
workingDirectory: rootInstallPlan.workingDirectory,
|
|
1293
|
-
environment: rootInstallPlan.environment
|
|
1294
|
-
});
|
|
1295
|
-
rootServiceActiveSuccessfully = resolveVerifiedRootServiceReady({
|
|
1296
|
-
restartQueued: rootRestartQueued,
|
|
1297
|
-
activeAfterRestart: rootNowActive.ok,
|
|
1298
|
-
repairInstalled: rootService.ok
|
|
1299
|
-
});
|
|
1300
|
-
if (!rootService.ok) {
|
|
1301
|
-
if (strictVps) {
|
|
1302
|
-
throw new Error(formatHostedRootServiceRequiredFailure({
|
|
1303
|
-
runAsUser,
|
|
1304
|
-
detail: rootService.detail
|
|
1305
|
-
}));
|
|
1306
|
-
}
|
|
1307
|
-
await prompter.note(`${strictVps ? "Hosting" : "Local"} root service install failed: ${rootService.detail ?? "unknown error"}. Falling back to non-root service.`, "Gateway service");
|
|
1308
|
-
}
|
|
1309
|
-
} else {
|
|
1310
|
-
rootServiceActiveSuccessfully = resolveVerifiedRootServiceReady({
|
|
1311
|
-
restartQueued: rootRestartQueued,
|
|
1312
|
-
activeAfterRestart: rootNowActive.ok,
|
|
1313
|
-
repairInstalled: false
|
|
1314
|
-
});
|
|
1315
|
-
}
|
|
1316
|
-
if (rootServiceActiveSuccessfully) {
|
|
1317
|
-
const strictExecAfter = await verifyStrictRootGatewayExecStart("fased-gateway", expectedGatewayStartupMode, runAsUser);
|
|
1318
|
-
if (!strictExecAfter.ok) {
|
|
1319
|
-
if (strictVps) {
|
|
1320
|
-
throw new Error(formatHostedRootServiceRequiredFailure({
|
|
1321
|
-
runAsUser,
|
|
1322
|
-
detail: strictExecAfter.detail || "unit ExecStart/User is not the canonical hosted service command"
|
|
1323
|
-
}));
|
|
1324
|
-
}
|
|
1325
|
-
await prompter.note(`${strictVps ? "Hosting" : "Local"} root service check failed: unit ExecStart is not the canonical hosted service command.`, "Gateway service");
|
|
1326
|
-
}
|
|
1327
|
-
}
|
|
1328
|
-
if (rootServiceActiveSuccessfully) {
|
|
1329
|
-
await runShell("systemctl --user disable --now fased-gateway 2>/dev/null || true && systemctl --user reset-failed fased-gateway 2>/dev/null || true");
|
|
1330
|
-
if (!strictVps || flow !== "quickstart") {
|
|
1331
|
-
await prompter.note("Root-managed gateway service ready (fased-gateway).", "Gateway service");
|
|
1332
|
-
}
|
|
1333
|
-
}
|
|
1334
|
-
}
|
|
1199
|
+
throw new Error(formatHostedRootServiceRequiredFailure({ detail: "runtime user could not be resolved" }));
|
|
1200
|
+
}
|
|
1201
|
+
const [strictExec, rootActive] = await Promise.all([verifyStrictRootGatewayExecStart("fased-gateway", expectedGatewayStartupMode, runAsUser), isSystemdServiceRunningOrStarting({
|
|
1202
|
+
name: "fased-gateway",
|
|
1203
|
+
scope: "root"
|
|
1204
|
+
})]);
|
|
1205
|
+
if (!strictExec.ok || !rootActive) {
|
|
1206
|
+
throw new Error(formatHostedRootServiceRequiredFailure({
|
|
1207
|
+
runAsUser,
|
|
1208
|
+
detail: strictExec.detail || "fixed root-owned Gateway unit is missing, inactive, or has an unexpected command"
|
|
1209
|
+
}));
|
|
1335
1210
|
}
|
|
1211
|
+
rootServiceActiveSuccessfully = true;
|
|
1336
1212
|
}
|
|
1337
1213
|
if (strictVps && !rootServiceActiveSuccessfully) {
|
|
1338
1214
|
throw new Error(formatHostedRootServiceRequiredFailure({
|
|
@@ -2084,6 +1960,9 @@ async function finalizeOnboardingWizard(options) {
|
|
|
2084
1960
|
].join("\n"), "Tailscale serve warmup");
|
|
2085
1961
|
});
|
|
2086
1962
|
}
|
|
1963
|
+
if (strictVps) {
|
|
1964
|
+
await configureHostedSignerWebAuthnForTailscale();
|
|
1965
|
+
}
|
|
2087
1966
|
let hostedDashboardBrowserVerified = false;
|
|
2088
1967
|
if (strictVps && settings.tailscaleMode !== "off") {
|
|
2089
1968
|
if (!tailscaleAdminUrl && !opts.allowInsecure) {
|