@fased/fased 0.1.67 → 0.1.69

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 (187) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +20 -22
  3. package/config/sat-runtime.env +6 -2
  4. package/config/signer-protocol-v2.json +10 -0
  5. package/dist/agents/tools/wallet-action-tool.js +2 -0
  6. package/dist/agents/tools/wallet-tool.js +5 -3
  7. package/dist/brand.js +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  10. package/dist/cli/program/register.wallet.js +119 -5
  11. package/dist/commands/wallet.js +1286 -74
  12. package/dist/config/sat-runtime-ids.js +6 -1
  13. package/dist/control-ui/assets/{app-De8gTtZU.js → app-BLFLoFPk.js} +1526 -1526
  14. package/dist/control-ui/assets/{federation-DgA9e-Pn.js → federation-SGMAnM_8.js} +2 -2
  15. package/dist/control-ui/assets/{index-DYYBRBOS.js → index-S88kp5ZQ.js} +3 -3
  16. package/dist/control-ui/assets/{mining-Dg-3ll0F.js → mining-ClI8RW4u.js} +2 -2
  17. package/dist/control-ui/assets/{wallet-DvStR_AT.js → wallet-CRIhDQbW.js} +325 -156
  18. package/dist/control-ui/index.html +1 -1
  19. package/dist/control-ui/version.json +1 -1
  20. package/dist/gateway/server-http.js +394 -55
  21. package/dist/mining/mainnet-sync.js +67 -5
  22. package/dist/operator/operator-readiness.js +1 -1
  23. package/dist/plugin-sdk/{actions-DRu135h0.js → actions-B-Vwj64K.js} +3 -3
  24. package/dist/plugin-sdk/{allow-list-DyAxs4yw.js → allow-list-Bf45HfoP.js} +1 -1
  25. package/dist/plugin-sdk/{audio-preflight-Dq_rJtqH.js → audio-preflight-CS7Q_7-R.js} +26 -25
  26. package/dist/plugin-sdk/{audit-C5d2z5U1.js → audit-CUULWG22.js} +1 -1
  27. package/dist/plugin-sdk/{channel-access-configure-DaI5wevh.js → channel-access-configure-BoUsC-Ys.js} +1 -1
  28. package/dist/plugin-sdk/{channel-adapters.discord-BS4S4Svh.js → channel-adapters.discord-DSiR4X2Y.js} +1 -1
  29. package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
  30. package/dist/plugin-sdk/channel-plugin-common.js +1 -1
  31. package/dist/plugin-sdk/{chunk-CyoyqpbG.js → chunk-CBpl-AiQ.js} +1 -1
  32. package/dist/plugin-sdk/{chunk-items-Dunoq4Er.js → chunk-items-BLBZNORg.js} +1 -1
  33. package/dist/plugin-sdk/command-status.js +26 -25
  34. package/dist/plugin-sdk/{commands-registry-BfqdEWdF.js → commands-registry-G5KXSi_y.js} +1 -1
  35. package/dist/plugin-sdk/{config-schema--vl89M7d.js → config-schema-BiBOUW89.js} +431 -125
  36. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  37. package/dist/plugin-sdk/{diagnostic-DLL_zekv.js → diagnostic-sYs6Agr-.js} +1 -1
  38. package/dist/plugin-sdk/{directory-live-CSuYxdwk.js → directory-live-BXMpuYAF.js} +1 -1
  39. package/dist/plugin-sdk/{directory-live-Dw7ZgC9_.js → directory-live-Rn1BzPof.js} +1 -1
  40. package/dist/plugin-sdk/discord.d.ts +4 -4
  41. package/dist/plugin-sdk/discord.js +20 -20
  42. package/dist/plugin-sdk/{draft-stream-controls-BqchW1vi.js → draft-stream-controls-CMNdKSx-.js} +1 -1
  43. package/dist/plugin-sdk/{guilds-CDhRIX57.js → guilds-Dkwl0yHv.js} +1 -1
  44. package/dist/plugin-sdk/{handle-action-hvwapMKg.js → handle-action-CRdM6B-8.js} +15 -15
  45. package/dist/plugin-sdk/index.d.ts +15 -15
  46. package/dist/plugin-sdk/index.js +28 -27
  47. package/dist/plugin-sdk/{login-Ca583Okc.js → login-D7WnK8-P.js} +1 -1
  48. package/dist/plugin-sdk/{login-qr-CGciBSNP.js → login-qr-CRueOKZK.js} +2 -114
  49. package/dist/plugin-sdk/{markdown-tables-DCOXEUfZ.js → markdown-tables-d7GlUs5R.js} +1 -1
  50. package/dist/plugin-sdk/{media-CAdQF5TG.js → media-BAoaxCrt.js} +1 -1
  51. package/dist/plugin-sdk/{monitor-DrTy_4CL.js → monitor-WXdn4mR-.js} +34 -33
  52. package/dist/plugin-sdk/{monitor-CV1sr0p2.js → monitor-xzVAPbg2.js} +44 -43
  53. package/dist/plugin-sdk/{openresponses-http-BAjgURZa.js → openresponses-http-DnI1LFgq.js} +26 -25
  54. package/dist/plugin-sdk/{outbound-attachment-QqTnIhZL.js → outbound-attachment-CyXM3cAv.js} +1 -1
  55. package/dist/plugin-sdk/{outbound-BgVDdHxx.js → outbound-zB6llMGW.js} +6 -6
  56. package/dist/plugin-sdk/{pairing-message-BjIJYVvp.d.ts → pairing-message-CiTcdD6m.d.ts} +1 -1
  57. package/dist/plugin-sdk/{pairing-store-BChahgI2.js → pairing-store-B6J2C0vP.js} +1 -1
  58. package/dist/plugin-sdk/{pi-model-discovery-runtime-DxTMz_XF.js → pi-model-discovery-runtime-6JzLw9Gk.js} +1 -1
  59. package/dist/plugin-sdk/{probe-CJb5uR8B.js → probe-BM7Oe40M.js} +2 -2
  60. package/dist/plugin-sdk/{probe-l_whvGLY.js → probe-CMPksimh.js} +1 -1
  61. package/dist/plugin-sdk/{probe-BFroeK3g.js → probe-oVp12D6L.js} +1 -1
  62. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
  63. package/dist/plugin-sdk/{pw-ai-DlxqX6Es.js → pw-ai-DZYLDC-S.js} +1 -1
  64. package/dist/plugin-sdk/qr-image-B4MlMG4N.js +115 -0
  65. package/dist/plugin-sdk/{replies-ChYo5ZQM.js → replies-CY-V0Zob.js} +3 -3
  66. package/dist/plugin-sdk/{resolve-channels-87LZrFk_.js → resolve-channels-1HtDcMqh.js} +2 -2
  67. package/dist/plugin-sdk/{resolve-channels-_-nV-EK2.js → resolve-channels-CU72Qh2j.js} +1 -1
  68. package/dist/plugin-sdk/{resolve-outbound-target-D-KGgHJZ.js → resolve-outbound-target-nQSBVYz9.js} +2 -2
  69. package/dist/plugin-sdk/{resolve-route-C8tvQm8Z.js → resolve-route-Dufnu2cT.js} +1 -1
  70. package/dist/plugin-sdk/{resolve-users-DN9VQBwv.js → resolve-users-Bk_ss2vC.js} +1 -1
  71. package/dist/plugin-sdk/{resolve-users-V6dHh_2B.js → resolve-users-IevCOk4W.js} +2 -2
  72. package/dist/plugin-sdk/{runtime-2B9_WKoI.js → runtime-CXSQwMaR.js} +1 -1
  73. package/dist/plugin-sdk/{runtime-dependency-nup8niQL.js → runtime-dependency-DczkvPxn.js} +9 -9
  74. package/dist/plugin-sdk/sat-runtime.d.ts +105 -10
  75. package/dist/plugin-sdk/sat-runtime.js +26 -25
  76. package/dist/plugin-sdk/{send-DCO441U7.js → send-BXBS_mRK.js} +8 -8
  77. package/dist/plugin-sdk/{send-CFzGKJXo.js → send-D-HfKQZm.js} +4 -4
  78. package/dist/plugin-sdk/{send-B6KkGKZD.js → send-D1j12ZgX.js} +5 -5
  79. package/dist/plugin-sdk/{send-q9HXrSwK.js → send-DWKm6yay.js} +10 -10
  80. package/dist/plugin-sdk/{send-gDoGA-7e.js → send-Di1Jit3L.js} +7 -7
  81. package/dist/plugin-sdk/{skill-commands-FKEPLS7T.js → skill-commands-iJtvpqgb.js} +2 -2
  82. package/dist/plugin-sdk/{slack-DSC6T2KW.js → slack-CkIRVDUK.js} +45 -44
  83. package/dist/plugin-sdk/{slack-actions-DhbMcp8M.js → slack-actions-BzUEszJa.js} +10 -10
  84. package/dist/plugin-sdk/slack.d.ts +4 -4
  85. package/dist/plugin-sdk/slack.js +6 -6
  86. package/dist/plugin-sdk/{sticker-cache-C0l_5IKg.js → sticker-cache-Dpap5ce_.js} +2 -2
  87. package/dist/plugin-sdk/{tables-B3jr0Pvq.js → tables-_1W36GII.js} +2 -2
  88. package/dist/plugin-sdk/{targets-CtSbTxYX.js → targets-DDbNnLnB.js} +2 -2
  89. package/dist/plugin-sdk/{telegram-actions-BwGBIVDE.js → telegram-actions-Cewdga8H.js} +30 -29
  90. package/dist/plugin-sdk/telegram.d.ts +4 -4
  91. package/dist/plugin-sdk/telegram.js +3 -3
  92. package/dist/plugin-sdk/{thread-bindings.lifecycle-QbkNl-m6.js → thread-bindings.lifecycle-Y9T3CQGf.js} +3 -3
  93. package/dist/plugin-sdk/{thread-bindings.state-D9hg_M1c.js → thread-bindings.state-D2oOWDpv.js} +1 -1
  94. package/dist/plugin-sdk/{tmp-fased-dir-DXnGKKgi.d.ts → tmp-fased-dir-BSEHc8MQ.d.ts} +8 -2
  95. package/dist/plugin-sdk/{types-eG9aYqXF.d.ts → types-BakzIzGN.d.ts} +1 -1
  96. package/dist/plugin-sdk/{types-Cegc86EP.d.ts → types-CzF0YQqK.d.ts} +3 -3
  97. package/dist/plugin-sdk/{web-C_AH5PyB.js → web-DGWi7i3B.js} +33 -32
  98. package/dist/plugin-sdk/{whatsapp-actions-Bj_rOncr.js → whatsapp-actions-Blu9-eX-.js} +9 -9
  99. package/dist/plugin-sdk/{whatsapp-heartbeat-B1WHkJIg.js → whatsapp-heartbeat-DjmQM7hq.js} +2 -2
  100. package/dist/plugin-sdk/whatsapp.d.ts +9 -9
  101. package/dist/plugin-sdk/whatsapp.js +7 -7
  102. package/dist/plugin-sdk/{wsl-J-HscWxS.js → wsl-CTvIWvZz.js} +1 -1
  103. package/dist/plugin-sdk/{zod-schema.providers-core-FaYR6KdD.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +61 -61
  104. package/dist/wallet/local-socket-signer-lifecycle.js +107 -3
  105. package/dist/wallet/local-socket-signer-protocol.js +97 -10
  106. package/dist/wallet/mining-wallet-retirement.js +256 -0
  107. package/dist/wallet/providers/local-socket-signer-adapter.js +10 -0
  108. package/dist/wallet/signer-network-admin.js +11 -118
  109. package/dist/wallet/signer-protocol-v2.generated.js +10 -0
  110. package/dist/wallet/solana-assets.js +9 -3
  111. package/dist/wallet/solana-rpc-read-fetch.js +65 -0
  112. package/dist/wallet/wallet-agent-selection.js +6 -10
  113. package/dist/wallet/wallet-provider-registry.js +70 -29
  114. package/dist/wallet/wallet-send-approvals.js +6 -2
  115. package/dist/wallet/wallet-status.js +63 -1
  116. package/dist/web/login-qr.js +1 -1
  117. package/dist/wizard/onboarding.js +86 -84
  118. package/dist/wizard/onboarding.wallet.js +10 -1
  119. package/extensions/acpx/package.json +1 -1
  120. package/extensions/bluebubbles/package.json +1 -1
  121. package/extensions/copilot-proxy/package.json +1 -1
  122. package/extensions/diagnostics-otel/package.json +1 -1
  123. package/extensions/fased-federation/package.json +1 -1
  124. package/extensions/google-gemini-cli-auth/package.json +1 -1
  125. package/extensions/imessage/package.json +1 -1
  126. package/extensions/irc/package.json +1 -1
  127. package/extensions/line/package.json +1 -1
  128. package/extensions/llm-task/package.json +1 -1
  129. package/extensions/lobster/package.json +1 -1
  130. package/extensions/matrix/CHANGELOG.md +12 -0
  131. package/extensions/matrix/package.json +1 -1
  132. package/extensions/mattermost/package.json +1 -1
  133. package/extensions/memory-core/package.json +2 -2
  134. package/extensions/memory-lancedb/package.json +1 -1
  135. package/extensions/minimax-portal-auth/package.json +1 -1
  136. package/extensions/msteams/CHANGELOG.md +12 -0
  137. package/extensions/msteams/package.json +1 -1
  138. package/extensions/nextcloud-talk/package.json +1 -1
  139. package/extensions/nostr/CHANGELOG.md +12 -0
  140. package/extensions/nostr/package.json +1 -1
  141. package/extensions/open-prose/package.json +1 -1
  142. package/extensions/sat-mining/package.json +1 -1
  143. package/extensions/signal/package.json +1 -1
  144. package/extensions/synology-chat/package.json +1 -1
  145. package/extensions/tlon/package.json +1 -1
  146. package/extensions/twitch/CHANGELOG.md +12 -0
  147. package/extensions/twitch/package.json +1 -1
  148. package/extensions/voice-call/CHANGELOG.md +12 -0
  149. package/extensions/voice-call/package.json +1 -1
  150. package/extensions/zalo/CHANGELOG.md +12 -0
  151. package/extensions/zalo/package.json +1 -1
  152. package/extensions/zalouser/CHANGELOG.md +12 -0
  153. package/extensions/zalouser/package.json +1 -1
  154. package/install.sh +286 -107
  155. package/package.json +4 -2
  156. package/scripts/fased-managed-updater.mjs +10 -2
  157. package/scripts/install-fased-signerd.sh +4 -8
  158. package/scripts/install-managed-runtime.mjs +10 -7
  159. package/scripts/install-runtime-profile.sh +27 -0
  160. package/scripts/start-managed.sh +13 -1
  161. /package/dist/plugin-sdk/{active-listener-B_NMtgPL.js → active-listener-p9Ooc1qj.js} +0 -0
  162. /package/dist/plugin-sdk/{blocks-input-Bg-8S2pl.js → blocks-input-DiZaqaN7.js} +0 -0
  163. /package/dist/plugin-sdk/{channel-access-CcFRdRPO.js → channel-access-B0aZBSd2.js} +0 -0
  164. /package/dist/plugin-sdk/{channel-activity-DBDMQ3yI.js → channel-activity-F07DjroV.js} +0 -0
  165. /package/dist/plugin-sdk/{channel-core-CFRs8LPy.js → channel-core-DoF4X04L.js} +0 -0
  166. /package/dist/plugin-sdk/{client-pI228AVT.js → client-DLY-kWF_.js} +0 -0
  167. /package/dist/plugin-sdk/{command-poll-backoff-yJU83wEq.js → command-poll-backoff-NAePk3eL.js} +0 -0
  168. /package/dist/plugin-sdk/{date-time-uUevHscU.js → date-time-ChY_tHoG.js} +0 -0
  169. /package/dist/plugin-sdk/{draft-stream-loop-CrOPfV3F.js → draft-stream-loop-DMBwjjd1.js} +0 -0
  170. /package/dist/plugin-sdk/{fetch-BtmoPIlf.js → fetch-B0v6OTUZ.js} +0 -0
  171. /package/dist/plugin-sdk/{filesystem-manager-DoI8IBNF.js → filesystem-manager-BzuIJ9K9.js} +0 -0
  172. /package/dist/plugin-sdk/{gateway-registry-DZDsqicG.js → gateway-registry-Bgl2GFgy.js} +0 -0
  173. /package/dist/plugin-sdk/{inbound-context-DrAcXE0y.js → inbound-context-CQnfFFQ9.js} +0 -0
  174. /package/dist/plugin-sdk/{pi-model-discovery-BX_JLcEJ.js → pi-model-discovery-BHNVyRny.js} +0 -0
  175. /package/dist/plugin-sdk/{polls-DKQXVfJp.js → polls-DXd67TD8.js} +0 -0
  176. /package/dist/plugin-sdk/{proxy-DWpYcsvR.js → proxy-CLRUdShp.js} +0 -0
  177. /package/dist/plugin-sdk/{qmd-manager-CgRaTxUq.js → qmd-manager-B8Vnu0ND.js} +0 -0
  178. /package/dist/plugin-sdk/{render-e7fENCYH.js → render-DrBfVs0u.js} +0 -0
  179. /package/dist/plugin-sdk/{reply-reference-Bqk-7HXE.js → reply-reference-BnAk5Wjb.js} +0 -0
  180. /package/dist/plugin-sdk/{retry-policy-C6SjKjQA.js → retry-policy-CXh1owkc.js} +0 -0
  181. /package/dist/plugin-sdk/{sandbox-paths-Dx2lUqCu.js → sandbox-paths-Bzh1CuZc.js} +0 -0
  182. /package/dist/plugin-sdk/{session-DHD4ZKyG.js → session-iuGR_rdi.js} +0 -0
  183. /package/dist/plugin-sdk/{shared-CBgp_GBw.js → shared-D1AD2Ejn.js} +0 -0
  184. /package/dist/plugin-sdk/{target-errors-Ckufe179.js → target-errors-DfS1sLR9.js} +0 -0
  185. /package/dist/plugin-sdk/{tool-loop-detection-Bp8bPJLs.js → tool-loop-detection-sDZl27w7.js} +0 -0
  186. /package/dist/plugin-sdk/{ui-Be8cLHIS.js → ui-GQDYm_jw.js} +0 -0
  187. /package/dist/plugin-sdk/{with-timeout-ckWB8rTo.js → with-timeout-CVV8tytk.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fased/fased",
3
- "version": "0.1.67",
3
+ "version": "0.1.69",
4
4
  "description": "Fased Agent self-hosted AI gateway with channels, tools, plugins, and operator modules",
5
5
  "keywords": [
6
6
  "ai-agent",
@@ -52,6 +52,7 @@
52
52
  "scripts/migrate-hosted-signer-v2.mjs",
53
53
  "scripts/fased-launcher-runtime.mjs",
54
54
  "scripts/install-fased-signerd.sh",
55
+ "scripts/install-runtime-profile.sh",
55
56
  "scripts/install-managed-runtime.mjs",
56
57
  "scripts/managed-runtime-layout.mjs",
57
58
  "scripts/hosted-release-manifest.mjs",
@@ -155,7 +156,7 @@
155
156
  "check": "pnpm check:ci",
156
157
  "check:ci": "pnpm signer:protocol:check && pnpm sat:signer-codecs:check && pnpm format:check && pnpm lint && pnpm lint:tmp:no-random-messaging && pnpm lint:tmp:channel-agnostic-boundaries && pnpm lint:tmp:no-raw-channel-fetch && pnpm lint:auth:no-pairing-store-group && pnpm lint:auth:pairing-account-scope && pnpm check:host-env-policy:swift",
157
158
  "check:dependency-ownership": "node --import tsx scripts/dependency-ownership-report.ts --check",
158
- "check:docs": "pnpm format:docs:check && pnpm lint:docs && pnpm docs:check-links",
159
+ "check:docs": "pnpm format:docs:check && pnpm lint:docs && pnpm docs:check-links && pnpm docs:check-product-contract",
159
160
  "check:host-env-policy:swift": "node scripts/generate-host-env-security-policy-swift.mjs --check",
160
161
  "check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500",
161
162
  "check:plugin-sdk:types": "tsc --noEmit --skipLibCheck --module NodeNext --moduleResolution NodeNext --target ES2023 scripts/smoke-plugin-sdk-types.ts",
@@ -176,6 +177,7 @@
176
177
  "dev": "node scripts/run-node.mjs",
177
178
  "docs:bin": "node scripts/build-docs-list.mjs",
178
179
  "docs:check-links": "node scripts/docs-link-audit.mjs",
180
+ "docs:check-product-contract": "node scripts/docs-product-contract.mjs",
179
181
  "docs:dev": "cd docs && mint dev",
180
182
  "docs:list": "node scripts/docs-list.js",
181
183
  "docs:spellcheck": "bash scripts/docs-spellcheck.sh",
@@ -291,7 +291,9 @@ async function downloadToFile(url, destination, timeoutMs) {
291
291
  cache: "no-store",
292
292
  });
293
293
  if (!response.ok || !response.body) {
294
- throw new Error(`Download failed (${response.status}): ${url}`);
294
+ const error = new Error(`Download failed (${response.status}): ${url}`);
295
+ error.statusCode = response.status;
296
+ throw error;
295
297
  }
296
298
  await fsp.mkdir(path.dirname(destination), { recursive: true });
297
299
  await pipeline(
@@ -3372,7 +3374,7 @@ async function updateManagedRuntime(options) {
3372
3374
  try {
3373
3375
  let unifiedRelease = null;
3374
3376
  let unifiedReleasePath = null;
3375
- if (existingManifest.profile === "hosting") {
3377
+ try {
3376
3378
  unifiedReleasePath = path.join(temporaryRoot, "fased-hosted-release-v2.json");
3377
3379
  await measureStage(timings, "unified release manifest", async () => {
3378
3380
  await downloadToFile(
@@ -3387,6 +3389,12 @@ async function updateManagedRuntime(options) {
3387
3389
  await readHostedReleaseManifestV2(unifiedReleasePath, { version: targetVersion })
3388
3390
  ).manifest;
3389
3391
  });
3392
+ } catch (error) {
3393
+ if (existingManifest.profile === "hosting" || error?.statusCode !== 404) {
3394
+ throw error;
3395
+ }
3396
+ unifiedReleasePath = null;
3397
+ unifiedRelease = null;
3390
3398
  }
3391
3399
  const appArtifact = unifiedRelease?.application?.linux?.[arch]?.artifact;
3392
3400
  const assetName =
@@ -206,12 +206,8 @@ echo "Installed signer enrollment launcher: $INSTALL_DIR/fased-signer-enroll"
206
206
  echo "Installed signer policy launcher: $POLICY_LAUNCHER_PATH"
207
207
  echo "Installed fail-closed policy templates: $POLICY_TEMPLATE_DIR"
208
208
  cat <<EOF
209
- Fresh signer-owned wallets remain deny-all. After wallet setup creates a wallet,
210
- enroll the owner authenticator and apply an explicit reviewed policy as this user:
211
- 1. $INSTALL_DIR/fased-signer-enroll [authenticator-label]
212
- 2. Copy the matching owner-only template from $POLICY_TEMPLATE_DIR and replace
213
- every REPLACE_WITH_ value.
214
- 3. $POLICY_LAUNCHER_PATH --initial-install --policy-file /absolute/path/to/policy.json
215
-
216
- Enrollment never enables signing, and copying a template never applies it.
209
+ Fresh signer-owned wallets receive their versioned Agent, Mining, or Vault
210
+ baseline during normal wallet setup after the primary RPC is verified. Optional
211
+ authenticator enrollment and $POLICY_LAUNCHER_PATH remain available for advanced
212
+ owner-reviewed customization; copying a template never applies it.
217
213
  EOF
@@ -220,15 +220,15 @@ export async function installManagedRuntime(params, dependencyOverrides = {}) {
220
220
  ...dependencyOverrides,
221
221
  };
222
222
  const paths = resolveManagedRuntimePaths(params);
223
+ const profile = normalizeManagedProfile(params.profile);
223
224
  const existingManifest = readManagedInstallManifest(paths.manifestPath);
224
225
  const version = await assertManagedRuntime(params.packageRoot);
225
226
  const metadata = await readHostedRuntimeMetadata(params.packageRoot);
226
- const hostedRelease = await readHostedReleaseBinding(params.packageRoot, metadata, version);
227
- if (
228
- normalizeManagedProfile(params.profile) === "hosting" &&
229
- params.hostTransactionId &&
230
- !hostedRelease
231
- ) {
227
+ const hostedRelease =
228
+ profile === "hosting"
229
+ ? await readHostedReleaseBinding(params.packageRoot, metadata, version)
230
+ : null;
231
+ if (profile === "hosting" && params.hostTransactionId && !hostedRelease) {
232
232
  throw new Error(
233
233
  "Maintained Hosting requires an attested unified app and signer release manifest.",
234
234
  );
@@ -399,7 +399,10 @@ export async function rollbackManagedRuntime(params) {
399
399
  const previousVersion = await assertManagedRuntime(previousRoot);
400
400
  const currentVersion = await readPackageVersion(currentRoot);
401
401
  const metadata = await readHostedRuntimeMetadata(previousRoot);
402
- const hostedRelease = await readHostedReleaseBinding(previousRoot, metadata, previousVersion);
402
+ const hostedRelease =
403
+ normalizeManagedProfile(manifest.profile) === "hosting"
404
+ ? await readHostedReleaseBinding(previousRoot, metadata, previousVersion)
405
+ : null;
403
406
 
404
407
  await atomicSymlink(currentRoot, paths.previousLink);
405
408
  await atomicSymlink(previousRoot, paths.currentLink);
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env bash
2
+
3
+ fased_supports_prebuilt_release_runtime() {
4
+ local os_name="$1"
5
+ local architecture="$2"
6
+ [[ "$os_name" == "Linux" ]] || return 1
7
+ case "$architecture" in
8
+ x86_64|amd64|aarch64|arm64) return 0 ;;
9
+ *) return 1 ;;
10
+ esac
11
+ }
12
+
13
+ fased_should_use_prebuilt_release_runtime() {
14
+ local profile="$1"
15
+ local source_requested="$2"
16
+ local source_env="$3"
17
+ local hosting_source_env="$4"
18
+ local os_name="$5"
19
+ local architecture="$6"
20
+
21
+ [[ "$source_requested" != "1" ]] || return 1
22
+ [[ "$source_env" != "1" ]] || return 1
23
+ if [[ "$profile" == "hosting" && "$hosting_source_env" == "1" ]]; then
24
+ return 1
25
+ fi
26
+ fased_supports_prebuilt_release_runtime "$os_name" "$architecture"
27
+ }
@@ -538,6 +538,12 @@ load_wallet_signer_env_from_config() {
538
538
  || [[ "$key" == "FASED_WALLET_SIGNER_STATE_DIR" ]] \
539
539
  || [[ "$key" == "FASED_WALLET_LOCAL_SIGNER_BIN" ]] \
540
540
  || [[ "$key" == "FASED_SAT_PROGRAM_ID" ]] \
541
+ || [[ "$key" == "FASED_SAT_BOND_PROGRAM_ID" ]] \
542
+ || [[ "$key" == "FASED_SAT_MINT_ADDRESS" ]] \
543
+ || [[ "$key" == "FASED_SAT_MINT_PROGRAM_ID" ]] \
544
+ || [[ "$key" == "FASED_SAT_RUNTIME_MANIFEST_PATH" ]] \
545
+ || [[ "$key" == "FASED_SAT_RUNTIME_MANIFEST_SHA256" ]] \
546
+ || [[ "$key" == "FASED_SAT_RUNTIME_MANIFEST_SIGNATURE_PATH" ]] \
541
547
  || [[ "$key" == "FASED_SAT_ENABLE_ALT_V0" ]] \
542
548
  || [[ "$key" =~ ^FASED_WALLET_LOCAL_SIGNER_(ROLE|DIRECT_SIGNING|CAPS_ENABLED|SOLANA_MAX_PER_TX|SOLANA_MAX_DAILY|SOLANA_ALLOW_PROGRAMS)(__[A-Za-z0-9_-]+)?$ ]]; then
543
549
  export "$key=$value"
@@ -557,6 +563,12 @@ load_wallet_signer_env_from_config() {
557
563
  or . == "FASED_WALLET_SIGNER_STATE_DIR"
558
564
  or . == "FASED_WALLET_LOCAL_SIGNER_BIN"
559
565
  or . == "FASED_SAT_PROGRAM_ID"
566
+ or . == "FASED_SAT_BOND_PROGRAM_ID"
567
+ or . == "FASED_SAT_MINT_ADDRESS"
568
+ or . == "FASED_SAT_MINT_PROGRAM_ID"
569
+ or . == "FASED_SAT_RUNTIME_MANIFEST_PATH"
570
+ or . == "FASED_SAT_RUNTIME_MANIFEST_SHA256"
571
+ or . == "FASED_SAT_RUNTIME_MANIFEST_SIGNATURE_PATH"
560
572
  or . == "FASED_SAT_ENABLE_ALT_V0"
561
573
  or test("^FASED_WALLET_LOCAL_SIGNER_(ROLE|DIRECT_SIGNING|CAPS_ENABLED|SOLANA_MAX_PER_TX|SOLANA_MAX_DAILY|SOLANA_ALLOW_PROGRAMS)(__[A-Za-z0-9_-]+)?$")
562
574
  )
@@ -574,7 +586,7 @@ load_wallet_signer_env_file() {
574
586
  # Older signer.env files may contain Node-era key/passphrase variables. Import only
575
587
  # the non-custody settings required by the native signer, never every wallet variable.
576
588
  source <(
577
- grep -E '^export FASED_WALLET_(SOLANA_RPC_URL(__[A-Za-z0-9_-]+)?|CHAINS|SIGNER_STATE_DIR|WEBAUTHN_(RP_ID|ORIGINS)|LOCAL_SIGNER_(SOCKET|CONTROL_SOCKET|STATE_DB|MASTER_KEY|BIN|ROLE|DIRECT_SIGNING|CAPS_ENABLED|SOLANA_MAX_PER_TX|SOLANA_MAX_DAILY|SOLANA_ALLOW_PROGRAMS)(__[A-Za-z0-9_-]+)?)=' "$SIGNERD_ENV_FILE" || true
589
+ grep -E '^export (FASED_WALLET_(SOLANA_RPC_URL(__[A-Za-z0-9_-]+)?|CHAINS|SIGNER_STATE_DIR|WEBAUTHN_(RP_ID|ORIGINS)|LOCAL_SIGNER_(SOCKET|CONTROL_SOCKET|STATE_DB|MASTER_KEY|BIN|ROLE|DIRECT_SIGNING|CAPS_ENABLED|SOLANA_MAX_PER_TX|SOLANA_MAX_DAILY|SOLANA_ALLOW_PROGRAMS)(__[A-Za-z0-9_-]+)?)|FASED_SAT_(PROGRAM_ID|BOND_PROGRAM_ID|MINT_ADDRESS|MINT_PROGRAM_ID|RUNTIME_MANIFEST_(PATH|SHA256|SIGNATURE_PATH)))=' "$SIGNERD_ENV_FILE" || true
578
590
  )
579
591
  set +a
580
592
  }