@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.
Files changed (514) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +38 -30
  3. package/config/dependency-ownership.json +1 -1
  4. package/config/signer-policies/README.md +49 -0
  5. package/config/signer-policies/agent.json.template +32 -0
  6. package/config/signer-policies/mining.json.template +69 -0
  7. package/config/signer-policies/network.json.template +5 -0
  8. package/config/signer-policies/vault.json.template +70 -0
  9. package/config/signer-protocol-v2.json +76 -0
  10. package/config/typescript-noemit-baseline.json +680 -0
  11. package/dist/acp/client.js +2 -2
  12. package/dist/acp/secret-file.js +2 -2
  13. package/dist/agents/agent-scope.js +2 -2
  14. package/dist/agents/apply-patch.js +8 -8
  15. package/dist/agents/auth-profiles/paths.js +2 -2
  16. package/dist/agents/auth-profiles/store.js +269 -33
  17. package/dist/agents/bash-tools.exec.js +10 -4
  18. package/dist/agents/bash-tools.shared.js +2 -2
  19. package/dist/agents/cli-credentials.js +4 -4
  20. package/dist/agents/current-model-catalog.js +3 -3
  21. package/dist/agents/docs-path.js +3 -3
  22. package/dist/agents/embedded-pi-mcp.js +4 -4
  23. package/dist/agents/identity-avatar.js +3 -3
  24. package/dist/agents/identity-file.js +2 -2
  25. package/dist/agents/memory-search.js +7 -1
  26. package/dist/agents/model-catalog-access.js +1 -2
  27. package/dist/agents/model-catalog-snapshot.js +1 -1
  28. package/dist/agents/model-catalog-source.js +1 -1
  29. package/dist/agents/model-metadata.js +1 -1
  30. package/dist/agents/model-selection.js +2 -28
  31. package/dist/agents/models-config.providers.js +6 -6
  32. package/dist/agents/openai-codex-app-server.js +5 -5
  33. package/dist/agents/pi-embedded-runner/compact.js +15 -7
  34. package/dist/agents/pi-embedded-runner/model.js +1 -1
  35. package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
  36. package/dist/agents/pi-embedded-runner/run.js +2 -0
  37. package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
  38. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  39. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  40. package/dist/agents/pi-model-discovery.js +6 -6
  41. package/dist/agents/pi-project-settings.js +3 -3
  42. package/dist/agents/pi-tool-definition-adapter.js +16 -1
  43. package/dist/agents/pi-tools.js +2 -1
  44. package/dist/agents/sandbox/config.js +1 -1
  45. package/dist/agents/sandbox/context.js +27 -2
  46. package/dist/agents/sandbox/fs-bridge.js +2 -2
  47. package/dist/agents/session-dirs.js +4 -4
  48. package/dist/agents/session-write-lock.js +13 -13
  49. package/dist/agents/shell-utils.js +5 -5
  50. package/dist/agents/skills/bundled-dir.js +4 -4
  51. package/dist/agents/skills/env-overrides.js +38 -28
  52. package/dist/agents/skills/local-loader.js +6 -6
  53. package/dist/agents/skills/plugin-skills.js +2 -2
  54. package/dist/agents/skills/trust.js +93 -0
  55. package/dist/agents/skills/workspace.js +141 -13
  56. package/dist/agents/skills-clawhub.js +36 -11
  57. package/dist/agents/skills-install-download.js +7 -7
  58. package/dist/agents/skills-install-plan.js +2 -2
  59. package/dist/agents/skills-install.js +2 -2
  60. package/dist/agents/skills-marketplace-scan.js +49 -0
  61. package/dist/agents/skills-status.js +2 -2
  62. package/dist/agents/subagent-depth.js +2 -2
  63. package/dist/agents/system-prompt-params.js +2 -2
  64. package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
  65. package/dist/agents/tools/mining-tool.js +1 -1
  66. package/dist/agents/tools/session-status-tool.js +1 -1
  67. package/dist/agents/tools/wallet-action-tool.js +172 -36
  68. package/dist/agents/tools/wallet-skill-policy.js +65 -23
  69. package/dist/agents/tools/wallet-tool.js +7 -11
  70. package/dist/agents/workspace.js +22 -22
  71. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  72. package/dist/auto-reply/reply/agent-runner.js +2 -2
  73. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  74. package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
  75. package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
  76. package/dist/auto-reply/reply/directive-handling.model.js +2 -1
  77. package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
  78. package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
  79. package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
  80. package/dist/auto-reply/reply/model-selection.js +7 -4
  81. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  82. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  83. package/dist/auto-reply/reply/session-reset-model.js +4 -4
  84. package/dist/auto-reply/reply/session.js +3 -3
  85. package/dist/auto-reply/skill-commands.js +3 -3
  86. package/dist/auto-reply/status.js +6 -6
  87. package/dist/brand.js +1 -1
  88. package/dist/browser/chrome.executables.js +3 -3
  89. package/dist/browser/chrome.js +3 -3
  90. package/dist/browser/chrome.profile-decoration.js +6 -6
  91. package/dist/browser/profiles-service.js +2 -2
  92. package/dist/browser/server-context.js +2 -2
  93. package/dist/browser/trash.js +4 -4
  94. package/dist/build-info.json +3 -3
  95. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  96. package/dist/canvas-host/server.js +4 -4
  97. package/dist/capabilities/catalog.js +3 -3
  98. package/dist/channel-web.js +2 -2
  99. package/dist/channels/plugins/catalog.js +3 -3
  100. package/dist/cli/browser-cli-extension.js +6 -6
  101. package/dist/cli/command-format.js +2 -2
  102. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  103. package/dist/cli/dns-cli.js +9 -9
  104. package/dist/cli/gateway-cli/dev.js +5 -5
  105. package/dist/cli/gateway-cli/run.js +10 -2
  106. package/dist/cli/hooks-cli.js +5 -5
  107. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  108. package/dist/cli/memory-cli.js +7 -7
  109. package/dist/cli/nodes-media-utils.js +2 -2
  110. package/dist/cli/plugins-cli.js +2 -2
  111. package/dist/cli/program/command-registry.js +1 -1
  112. package/dist/cli/program/register.onboard.js +2 -3
  113. package/dist/cli/program/register.wallet.js +16 -123
  114. package/dist/cli/providers-cli.js +1 -1
  115. package/dist/cli/sat-cli.js +129 -2
  116. package/dist/cli/secrets-cli.js +3 -3
  117. package/dist/cli/update-cli/update-command.js +260 -11
  118. package/dist/cli/windows-argv.js +2 -2
  119. package/dist/commands/auth-choice.apply.api-providers.js +3 -3
  120. package/dist/commands/dashboard-link.js +3 -3
  121. package/dist/commands/doctor-config-flow.js +1 -1
  122. package/dist/commands/doctor-install.js +5 -5
  123. package/dist/commands/doctor-legacy-config.js +2 -13
  124. package/dist/commands/doctor-memory-search.js +2 -2
  125. package/dist/commands/doctor-platform-notes.js +2 -2
  126. package/dist/commands/doctor-sandbox.js +2 -2
  127. package/dist/commands/doctor-state-integrity.js +23 -23
  128. package/dist/commands/doctor-workspace.js +3 -3
  129. package/dist/commands/doctor.js +3 -3
  130. package/dist/commands/managed-up.js +2 -2
  131. package/dist/commands/model-picker.js +6 -6
  132. package/dist/commands/models/auth.js +1 -1
  133. package/dist/commands/onboard-auth.config-gateways.js +1 -1
  134. package/dist/commands/onboard-auth.credentials.js +35 -11
  135. package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
  136. package/dist/commands/onboard-non-interactive/local.js +5 -1
  137. package/dist/commands/onboarding/plugin-install.js +2 -2
  138. package/dist/commands/sessions-cleanup.js +2 -2
  139. package/dist/commands/signal-install.js +6 -6
  140. package/dist/commands/status-all/channels.js +2 -2
  141. package/dist/commands/wallet.js +570 -1913
  142. package/dist/config/cache-utils.js +2 -2
  143. package/dist/config/config.js +2 -2
  144. package/dist/config/includes.js +5 -5
  145. package/dist/config/io.js +66 -4
  146. package/dist/config/paths.js +3 -3
  147. package/dist/config/sat-runtime-ids.js +3 -3
  148. package/dist/config/schema.help.js +8 -7
  149. package/dist/config/schema.labels.js +5 -4
  150. package/dist/config/sessions/disk-budget.js +6 -6
  151. package/dist/config/sessions/paths.js +2 -2
  152. package/dist/config/sessions/store.js +17 -17
  153. package/dist/config/sessions/transcript.js +4 -4
  154. package/dist/config/talk.js +2 -2
  155. package/dist/config/zod-schema.agent-runtime.js +1 -0
  156. package/dist/config/zod-schema.js +5 -0
  157. package/dist/control-ui/assets/{app-BXA4gPvN.js → app-bR-fO5ty.js} +1511 -1555
  158. package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
  159. package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
  160. package/dist/control-ui/assets/{index-D2QbJhVg.js → index-ckCxHwjy.js} +3 -3
  161. package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
  162. package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
  163. package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
  164. package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
  165. package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
  166. package/dist/control-ui/index.html +1 -1
  167. package/dist/control-ui/version.json +1 -1
  168. package/dist/cron/service/store.js +2 -2
  169. package/dist/cron/store.js +6 -6
  170. package/dist/daemon/systemd-system.js +60 -54
  171. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  172. package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
  173. package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
  174. package/dist/extensions/sat-mining/src/sat-bond-layout.js +14 -11
  175. package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
  176. package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
  177. package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
  178. package/dist/federation/auto-connect.js +98 -8
  179. package/dist/federation/marketplace-capability-adapter.js +33 -7
  180. package/dist/federation/marketplace-delivery-outbox.js +196 -0
  181. package/dist/federation/marketplace-delivery.js +351 -215
  182. package/dist/federation/marketplace-direct-payment.js +272 -141
  183. package/dist/federation/marketplace-escrow.js +607 -249
  184. package/dist/federation/marketplace-settlement-ledger.js +352 -0
  185. package/dist/federation/offers.js +9 -7
  186. package/dist/federation/peer-auth-v2.js +529 -0
  187. package/dist/gateway/a2a-http.js +425 -96
  188. package/dist/gateway/a2a-settlement.js +259 -153
  189. package/dist/gateway/a2a-task-store.js +524 -0
  190. package/dist/gateway/auth.js +38 -2
  191. package/dist/gateway/config-reload.js +46 -33
  192. package/dist/gateway/control-ui-boot-check.js +6 -6
  193. package/dist/gateway/control-ui-login.js +7 -7
  194. package/dist/gateway/control-ui.js +9 -9
  195. package/dist/gateway/durable-capacity.js +31 -0
  196. package/dist/gateway/federation-http.js +540 -135
  197. package/dist/gateway/federation-marketplace-run-store.js +397 -0
  198. package/dist/gateway/federation-marketplace.js +535 -230
  199. package/dist/gateway/hooks-mapping.js +4 -4
  200. package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
  201. package/dist/gateway/security-path.js +1 -1
  202. package/dist/gateway/server-discovery.js +2 -2
  203. package/dist/gateway/server-http.js +1088 -1209
  204. package/dist/gateway/server-methods/chat.js +3 -3
  205. package/dist/gateway/server-methods/models.js +1 -1
  206. package/dist/gateway/server-methods/secrets.js +40 -0
  207. package/dist/gateway/server-methods/sessions.js +6 -6
  208. package/dist/gateway/server-methods/usage.js +2 -2
  209. package/dist/gateway/server-methods.js +1 -2
  210. package/dist/gateway/server-reload-handlers.js +196 -66
  211. package/dist/gateway/server-runtime-config.js +1 -1
  212. package/dist/gateway/server-secrets-runtime.js +288 -0
  213. package/dist/gateway/server.impl.js +73 -42
  214. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  215. package/dist/gateway/session-utils.fs.js +24 -24
  216. package/dist/gateway/session-utils.js +6 -6
  217. package/dist/gateway/sessions-patch.js +3 -5
  218. package/dist/hooks/bundled-dir.js +4 -4
  219. package/dist/hooks/gmail-setup-utils.js +6 -6
  220. package/dist/hooks/import-url.js +2 -2
  221. package/dist/hooks/loader.js +4 -4
  222. package/dist/hooks/workspace.js +7 -7
  223. package/dist/index.js +4 -2
  224. package/dist/infra/archive.js +17 -17
  225. package/dist/infra/boundary-file-read.js +2 -2
  226. package/dist/infra/boundary-path.js +15 -15
  227. package/dist/infra/brew.js +2 -2
  228. package/dist/infra/control-ui-assets.js +14 -14
  229. package/dist/infra/device-auth-store.js +8 -8
  230. package/dist/infra/device-identity.js +8 -8
  231. package/dist/infra/dotenv.js +2 -2
  232. package/dist/infra/exec-approvals.js +8 -8
  233. package/dist/infra/exec-command-resolution.js +4 -4
  234. package/dist/infra/exec-safe-bin-trust.js +2 -2
  235. package/dist/infra/fased-root.js +5 -5
  236. package/dist/infra/fasedhub.js +64 -1
  237. package/dist/infra/fs-safe.js +14 -14
  238. package/dist/infra/gateway-lock.js +11 -11
  239. package/dist/infra/git-commit.js +5 -5
  240. package/dist/infra/git-root.js +4 -4
  241. package/dist/infra/hosted-runtime-artifact.js +3 -3
  242. package/dist/infra/is-main.js +2 -2
  243. package/dist/infra/json-file.js +7 -7
  244. package/dist/infra/local-source-paired-update.js +538 -0
  245. package/dist/infra/managed-runtime-bootstrap.js +6 -6
  246. package/dist/infra/outbound/delivery-queue.js +16 -16
  247. package/dist/infra/path-env.js +3 -3
  248. package/dist/infra/ports-lsof.js +4 -4
  249. package/dist/infra/provider-usage.auth.js +3 -3
  250. package/dist/infra/restart.js +41 -10
  251. package/dist/infra/safe-open-sync.js +2 -2
  252. package/dist/infra/session-cost-usage.js +9 -9
  253. package/dist/infra/shell-env.js +2 -2
  254. package/dist/infra/state-migrations.fs.js +6 -6
  255. package/dist/infra/state-migrations.js +23 -23
  256. package/dist/infra/tmp-fased-dir.js +6 -6
  257. package/dist/infra/update-runner.js +96 -0
  258. package/dist/infra/widearea-dns.js +3 -3
  259. package/dist/infra/wsl.js +2 -2
  260. package/dist/light-update-status.js +11 -11
  261. package/dist/line/accounts.js +2 -2
  262. package/dist/line/download.js +2 -2
  263. package/dist/logging/config.js +3 -3
  264. package/dist/logging/logger.js +7 -7
  265. package/dist/managed/federation.js +3 -3
  266. package/dist/managed/tunnel.js +3 -3
  267. package/dist/media/store.js +13 -13
  268. package/dist/media-understanding/runner.js +3 -3
  269. package/dist/memory/backend-config.js +2 -1
  270. package/dist/memory/embeddings.js +2 -2
  271. package/dist/memory/internal.js +10 -10
  272. package/dist/memory/manager-sync-ops.js +7 -7
  273. package/dist/memory/repair-executor.js +17 -17
  274. package/dist/memory/session-files.js +16 -2
  275. package/dist/node-host/invoke-system-run-plan.js +8 -8
  276. package/dist/node-host/invoke.js +2 -2
  277. package/dist/node-host/runner.js +3 -3
  278. package/dist/pairing/pairing-store.js +3 -3
  279. package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
  280. package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
  281. package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
  282. package/dist/plugin-sdk/{audio-preflight-Bv0hUOWL.js → audio-preflight-BYxAt775.js} +27 -27
  283. package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
  284. package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
  285. package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
  286. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  287. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  288. package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
  289. package/dist/plugin-sdk/{chunk-items-Bk--NU3E.js → chunk-items-DIRHG2gJ.js} +1 -1
  290. package/dist/plugin-sdk/command-status.d.ts +2 -2
  291. package/dist/plugin-sdk/command-status.js +27 -27
  292. package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
  293. package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
  294. package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
  295. package/dist/plugin-sdk/{config-schema-CGW6J3Pv.js → config-schema-BOT7kHb6.js} +6779 -3696
  296. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  297. package/dist/plugin-sdk/discord.d.ts +5 -5
  298. package/dist/plugin-sdk/discord.js +19 -19
  299. package/dist/plugin-sdk/file-lock.js +35 -4
  300. package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
  301. package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
  302. package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
  303. package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
  304. package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
  305. package/dist/plugin-sdk/index.d.ts +9 -27
  306. package/dist/plugin-sdk/index.js +29 -29
  307. package/dist/plugin-sdk/json-store.js +6 -6
  308. package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
  309. package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
  310. package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
  311. package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
  312. package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
  313. package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
  314. package/dist/plugin-sdk/{monitor-B9Cmt_Je.js → monitor-BCFDaqJ-.js} +31 -31
  315. package/dist/plugin-sdk/{monitor-B71iwAgC.js → monitor-BgbjRiPM.js} +32 -32
  316. package/dist/plugin-sdk/{openresponses-http-Du4GMmwo.js → openresponses-http-DFf87SMM.js} +27 -27
  317. package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
  318. package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
  319. package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
  320. package/dist/plugin-sdk/{pairing-message-BMkkS038.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
  321. package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
  322. package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
  323. package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
  324. package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
  325. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  326. package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
  327. package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
  328. package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
  329. package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
  330. package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
  331. package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
  332. package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
  333. package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
  334. package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
  335. package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
  336. package/dist/plugin-sdk/sat-runtime.js +29 -29
  337. package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
  338. package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
  339. package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
  340. package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
  341. package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
  342. package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
  343. package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
  344. package/dist/plugin-sdk/{slack-D_bbE6Yd.js → slack-BUTt8cxK.js} +39 -39
  345. package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
  346. package/dist/plugin-sdk/slack.d.ts +5 -5
  347. package/dist/plugin-sdk/slack.js +9 -9
  348. package/dist/plugin-sdk/{sticker-cache-Dqo9nRhi.js → sticker-cache-D0wHVqjt.js} +3 -3
  349. package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
  350. package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
  351. package/dist/plugin-sdk/{telegram-actions-Cnag7JTH.js → telegram-actions-CC_qN4v0.js} +30 -30
  352. package/dist/plugin-sdk/telegram.d.ts +5 -5
  353. package/dist/plugin-sdk/telegram.js +8 -8
  354. package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
  355. package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
  356. package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
  357. package/dist/plugin-sdk/{types-CLIvQaVg.d.ts → types-C3avNytw.d.ts} +3 -4
  358. package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
  359. package/dist/plugin-sdk/{types-BYDL6dQj.d.ts → types-DWfbSAaM.d.ts} +2 -2
  360. package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
  361. package/dist/plugin-sdk/{web-BInKQkc4.js → web-BXsJ1vqe.js} +32 -32
  362. package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
  363. package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
  364. package/dist/plugin-sdk/whatsapp.d.ts +5 -5
  365. package/dist/plugin-sdk/whatsapp.js +12 -12
  366. package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
  367. package/dist/plugins/bundled-dir.js +3 -3
  368. package/dist/plugins/discovery.js +11 -11
  369. package/dist/plugins/loader.js +13 -13
  370. package/dist/plugins/manifest-registry.js +2 -2
  371. package/dist/plugins/manifest.js +4 -4
  372. package/dist/plugins/path-safety.js +3 -3
  373. package/dist/plugins/status-cache.js +9 -9
  374. package/dist/plugins/update.js +3 -3
  375. package/dist/plugins/web-search-install-catalog.js +3 -3
  376. package/dist/providers/refresh.js +1 -1
  377. package/dist/providers/registry.js +1 -1
  378. package/dist/secrets/apply.js +17 -17
  379. package/dist/secrets/audit.js +11 -11
  380. package/dist/secrets/runtime.js +1 -1
  381. package/dist/secrets/shared.js +9 -9
  382. package/dist/security/scan-paths.js +2 -2
  383. package/dist/shared/config-eval.js +2 -2
  384. package/dist/shared/pid-alive.js +2 -2
  385. package/dist/tasks/standing-orders.js +5 -5
  386. package/dist/tasks/task-flow-registry.js +5 -5
  387. package/dist/tasks/task-registry.js +5 -5
  388. package/dist/tasks/workflow-definitions.js +6 -6
  389. package/dist/telegram/token.js +5 -5
  390. package/dist/utils.js +5 -5
  391. package/dist/wallet/external-submission-ledger.js +376 -0
  392. package/dist/wallet/legacy-embedded-keystore.js +40 -0
  393. package/dist/wallet/local-socket-signer-archive.js +30 -0
  394. package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
  395. package/dist/wallet/local-socket-signer-policy.js +166 -0
  396. package/dist/wallet/local-socket-signer-protocol.js +561 -118
  397. package/dist/wallet/native-signer-wallet-id.js +25 -0
  398. package/dist/wallet/providers/alchemy-adapter.js +3 -0
  399. package/dist/wallet/providers/local-socket-signer-adapter.js +382 -107
  400. package/dist/wallet/providers/turnkey-adapter.js +292 -34
  401. package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
  402. package/dist/wallet/signer-network-admin.js +184 -0
  403. package/dist/wallet/signer-protocol-v2.generated.js +90 -0
  404. package/dist/wallet/solana-bond-signing.js +157 -69
  405. package/dist/wallet/solana-reviewed-transaction.js +375 -0
  406. package/dist/wallet/solana-swap.js +520 -64
  407. package/dist/wallet/solana-transaction-inspection.js +106 -4
  408. package/dist/wallet/solana-trigger.js +658 -320
  409. package/dist/wallet/turnkey-reviewed-state.js +370 -0
  410. package/dist/wallet/wallet-approval-auth.js +20 -31
  411. package/dist/wallet/wallet-atomic-state.js +53 -0
  412. package/dist/wallet/wallet-audit-log.js +5 -5
  413. package/dist/wallet/wallet-canary.js +0 -1
  414. package/dist/wallet/wallet-inbound-events.js +19 -14
  415. package/dist/wallet/wallet-observability.js +5 -5
  416. package/dist/wallet/wallet-policy-simulation.js +1 -1
  417. package/dist/wallet/wallet-policy.js +95 -41
  418. package/dist/wallet/wallet-provider-capabilities.js +28 -4
  419. package/dist/wallet/wallet-provider-registry.js +64 -51
  420. package/dist/wallet/wallet-provider-resolver.js +62 -63
  421. package/dist/wallet/wallet-runtime-config.js +31 -44
  422. package/dist/wallet/wallet-secrets-store.js +44 -22
  423. package/dist/wallet/wallet-send-approvals.js +1894 -592
  424. package/dist/wallet/wallet-send-execution-ledger.js +292 -0
  425. package/dist/wallet/wallet-settlement-links.js +17 -16
  426. package/dist/wallet/wallet-standard-review.js +353 -0
  427. package/dist/wallet/wallet-status.js +0 -9
  428. package/dist/wallet/wallet-task-ledger.js +16 -2
  429. package/dist/web/accounts.js +3 -3
  430. package/dist/web/auth-store.js +18 -18
  431. package/dist/web/auto-reply/heartbeat-runner.js +1 -1
  432. package/dist/web/auto-reply/monitor.js +2 -2
  433. package/dist/web/session.js +4 -4
  434. package/dist/wizard/host-security-capability.js +15 -24
  435. package/dist/wizard/onboarding.finalize.js +63 -184
  436. package/dist/wizard/onboarding.host-security.js +118 -1368
  437. package/dist/wizard/onboarding.js +180 -242
  438. package/dist/wizard/onboarding.wallet.js +323 -829
  439. package/extensions/acpx/package.json +1 -1
  440. package/extensions/bluebubbles/package.json +1 -1
  441. package/extensions/copilot-proxy/package.json +1 -1
  442. package/extensions/diagnostics-otel/package.json +1 -1
  443. package/extensions/fased-federation/package.json +1 -1
  444. package/extensions/google-gemini-cli-auth/package.json +1 -1
  445. package/extensions/imessage/package.json +1 -1
  446. package/extensions/irc/package.json +1 -1
  447. package/extensions/line/package.json +1 -1
  448. package/extensions/llm-task/package.json +1 -1
  449. package/extensions/lobster/package.json +1 -1
  450. package/extensions/matrix/CHANGELOG.md +18 -0
  451. package/extensions/matrix/package.json +1 -1
  452. package/extensions/mattermost/package.json +1 -1
  453. package/extensions/memory-core/package.json +2 -2
  454. package/extensions/memory-lancedb/package.json +1 -1
  455. package/extensions/minimax-portal-auth/package.json +1 -1
  456. package/extensions/msteams/CHANGELOG.md +18 -0
  457. package/extensions/msteams/package.json +1 -1
  458. package/extensions/nextcloud-talk/package.json +1 -1
  459. package/extensions/nostr/CHANGELOG.md +18 -0
  460. package/extensions/nostr/package.json +1 -1
  461. package/extensions/open-prose/package.json +1 -1
  462. package/extensions/sat-mining/index.ts +498 -153
  463. package/extensions/sat-mining/package.json +1 -1
  464. package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
  465. package/extensions/sat-mining/src/audit-store.ts +50 -5
  466. package/extensions/sat-mining/src/claim-service.ts +85 -14
  467. package/extensions/sat-mining/src/config.ts +9 -0
  468. package/extensions/sat-mining/src/cycle-progress.ts +16 -8
  469. package/extensions/sat-mining/src/epoch-service.ts +9 -5
  470. package/extensions/sat-mining/src/gateway-runner.ts +21 -1
  471. package/extensions/sat-mining/src/protocol-contract.ts +45 -1
  472. package/extensions/sat-mining/src/recovery-service.ts +312 -0
  473. package/extensions/sat-mining/src/round-watcher.ts +391 -81
  474. package/extensions/sat-mining/src/rpc-read.ts +330 -89
  475. package/extensions/sat-mining/src/runtime.ts +14 -0
  476. package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
  477. package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
  478. package/extensions/sat-mining/src/solana-submit.ts +1199 -428
  479. package/extensions/sat-mining/src/submission-ledger.ts +433 -0
  480. package/extensions/signal/package.json +1 -1
  481. package/extensions/synology-chat/package.json +1 -1
  482. package/extensions/tlon/package.json +1 -1
  483. package/extensions/twitch/CHANGELOG.md +18 -0
  484. package/extensions/twitch/package.json +1 -1
  485. package/extensions/voice-call/CHANGELOG.md +18 -0
  486. package/extensions/voice-call/package.json +1 -1
  487. package/extensions/zalo/CHANGELOG.md +18 -0
  488. package/extensions/zalo/package.json +1 -1
  489. package/extensions/zalouser/CHANGELOG.md +18 -0
  490. package/extensions/zalouser/package.json +1 -1
  491. package/install.sh +4955 -0
  492. package/package.json +24 -5
  493. package/scripts/fased-host-updater.mjs +1421 -0
  494. package/scripts/fased-host-updaterctl.mjs +186 -0
  495. package/scripts/fased-managed-service.sh +36 -0
  496. package/scripts/fased-managed-updater.mjs +3065 -156
  497. package/scripts/fased-signer-enroll-hosting.sh +275 -0
  498. package/scripts/fased-signer-network-hosting.sh +143 -0
  499. package/scripts/fased-signer-owner-policy.mjs +1430 -0
  500. package/scripts/fased-signer-policy-hosting.sh +50 -0
  501. package/scripts/fased-signer-policy-local.sh +26 -0
  502. package/scripts/hosted-release-manifest.mjs +185 -0
  503. package/scripts/install-fased-signerd.sh +217 -0
  504. package/scripts/install-managed-runtime.mjs +212 -10
  505. package/scripts/managed-runtime-layout.mjs +75 -3
  506. package/scripts/migrate-hosted-signer-v2.mjs +58 -0
  507. package/scripts/start-managed.sh +169 -360
  508. package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
  509. package/dist/plugin-sdk/tmp-fased-dir-BdFQvrvw.d.ts +0 -77
  510. package/dist/wallet/local-socket-signer-broker.js +0 -224
  511. package/dist/wallet/local-socket-signer-custody.js +0 -42
  512. package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
  513. package/dist/wallet/providers/privy-adapter.js +0 -80
  514. package/dist/wallet/wallet-custody.js +0 -1836
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ umask 077
5
+
6
+ if [[ "${EUID}" != "0" ]]; then
7
+ echo "Hosted signer policy setup must run as root from a root SSH or provider-console session." >&2
8
+ exit 1
9
+ fi
10
+
11
+ PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
12
+ export PATH
13
+ NODE_BIN="$(command -v node || true)"
14
+ HELPER="/usr/local/libexec/fased-signer-owner-policy.mjs"
15
+ STAT_BIN="/usr/bin/stat"
16
+
17
+ case "$NODE_BIN" in
18
+ /usr/bin/node|/usr/local/bin/node|/bin/node) ;;
19
+ *)
20
+ echo "A supported system Node.js executable is unavailable." >&2
21
+ exit 1
22
+ ;;
23
+ esac
24
+
25
+ for executable in "$NODE_BIN" "$STAT_BIN"; do
26
+ [[ -f "$executable" && -x "$executable" ]] || {
27
+ echo "Required root-controlled executable is missing: $executable" >&2
28
+ exit 1
29
+ }
30
+ read -r owner mode <<<"$($STAT_BIN -Lc '%u %a' "$executable")"
31
+ [[ "$owner" == "0" && $((8#$mode & 8#22)) -eq 0 ]] || {
32
+ echo "Required executable is not root-owned and non-writable: $executable" >&2
33
+ exit 1
34
+ }
35
+ done
36
+
37
+ [[ -f "$HELPER" && ! -L "$HELPER" ]] || {
38
+ echo "Installed Hosted signer policy helper is missing or unsafe: $HELPER" >&2
39
+ exit 1
40
+ }
41
+ read -r helper_owner helper_mode helper_links <<<"$($STAT_BIN -c '%u %a %h' "$HELPER")"
42
+ [[ "$helper_owner" == "0" && "$helper_links" -eq 1 && $((8#$helper_mode & 8#22)) -eq 0 ]] || {
43
+ echo "Hosted signer policy helper must be a single-link root-owned non-writable file." >&2
44
+ exit 1
45
+ }
46
+ if [[ $# -eq 1 && "$1" == "--help" ]]; then
47
+ exec "$NODE_BIN" "$HELPER" --help
48
+ fi
49
+
50
+ exec "$NODE_BIN" "$HELPER" --profile hosting "$@"
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ umask 077
5
+
6
+ if [[ "${EUID}" == "0" ]]; then
7
+ echo "Local signer policy setup must run as the non-root user that owns the signer." >&2
8
+ exit 1
9
+ fi
10
+
11
+ INSTALL_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
12
+ HELPER="${INSTALL_DIR}/fased-signer-owner-policy.mjs"
13
+
14
+ if [[ ! -f "$HELPER" || -L "$HELPER" ]]; then
15
+ echo "Installed Local signer policy helper is missing or unsafe: $HELPER" >&2
16
+ exit 1
17
+ fi
18
+ if ! command -v node >/dev/null 2>&1; then
19
+ echo "Node.js is required to run the Local signer policy helper." >&2
20
+ exit 1
21
+ fi
22
+ if [[ $# -eq 1 && "$1" == "--help" ]]; then
23
+ exec node "$HELPER" --help
24
+ fi
25
+
26
+ exec node "$HELPER" --profile local "$@"
@@ -0,0 +1,185 @@
1
+ import { createHash } from "node:crypto";
2
+ import fsp from "node:fs/promises";
3
+
4
+ const VERSION_PATTERN = /^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z]+(?:[.-][0-9A-Za-z]+)*)?$/u;
5
+ const COMMIT_PATTERN = /^[a-f0-9]{40}$/u;
6
+ const SHA256_PATTERN = /^[a-f0-9]{64}$/u;
7
+ const PREFIXED_SHA256_PATTERN = /^sha256:[a-f0-9]{64}$/u;
8
+
9
+ function exactKeys(value, expected, label) {
10
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
11
+ throw new Error(`${label} must be an object`);
12
+ }
13
+ if (
14
+ Object.keys(value).toSorted().join(",") !==
15
+ [...expected].toSorted((left, right) => left.localeCompare(right)).join(",")
16
+ ) {
17
+ throw new Error(`${label} contains unsupported or missing fields`);
18
+ }
19
+ }
20
+
21
+ function canonicalJSON(value) {
22
+ if (Array.isArray(value)) {
23
+ return `[${value.map((entry) => canonicalJSON(entry)).join(",")}]`;
24
+ }
25
+ if (value && typeof value === "object") {
26
+ return `{${Object.keys(value)
27
+ .toSorted()
28
+ .map((key) => `${JSON.stringify(key)}:${canonicalJSON(value[key])}`)
29
+ .join(",")}}`;
30
+ }
31
+ return JSON.stringify(value);
32
+ }
33
+
34
+ export function sha256Bytes(value) {
35
+ return createHash("sha256").update(value).digest("hex");
36
+ }
37
+
38
+ export function capabilitiesDigest(value) {
39
+ return `sha256:${sha256Bytes(canonicalJSON(value))}`;
40
+ }
41
+
42
+ function parseArtifact(value, label) {
43
+ exactKeys(value, ["asset", "sha256"], label);
44
+ if (
45
+ typeof value.asset !== "string" ||
46
+ !/^[A-Za-z0-9][A-Za-z0-9._-]+$/u.test(value.asset) ||
47
+ !SHA256_PATTERN.test(value.sha256 || "")
48
+ ) {
49
+ throw new Error(`${label} is invalid`);
50
+ }
51
+ return Object.freeze({ asset: value.asset, sha256: value.sha256 });
52
+ }
53
+
54
+ function parseCapabilities(value, claimedDigest) {
55
+ exactKeys(
56
+ value,
57
+ ["protocol", "nativeFeeReservationLamports", "intentTypes", "operationStates", "features"],
58
+ "signer capabilities",
59
+ );
60
+ exactKeys(value.protocol, ["current", "min", "max"], "signer protocol range");
61
+ if (
62
+ value.protocol.current !== 2 ||
63
+ value.protocol.min !== 2 ||
64
+ value.protocol.max !== 2 ||
65
+ value.nativeFeeReservationLamports !== 5_000_000 ||
66
+ !Array.isArray(value.intentTypes) ||
67
+ !Array.isArray(value.operationStates) ||
68
+ !Array.isArray(value.features) ||
69
+ [...value.intentTypes, ...value.operationStates, ...value.features].some(
70
+ (entry) => typeof entry !== "string" || !entry,
71
+ ) ||
72
+ new Set(value.intentTypes).size !== value.intentTypes.length ||
73
+ new Set(value.operationStates).size !== value.operationStates.length ||
74
+ new Set(value.features).size !== value.features.length
75
+ ) {
76
+ throw new Error("signer capabilities are malformed or not protocol v2");
77
+ }
78
+ const actualDigest = capabilitiesDigest(value);
79
+ if (!PREFIXED_SHA256_PATTERN.test(claimedDigest || "") || actualDigest !== claimedDigest) {
80
+ throw new Error("signer capability digest does not match its canonical capability contract");
81
+ }
82
+ return Object.freeze({ ...value, protocol: Object.freeze({ ...value.protocol }) });
83
+ }
84
+
85
+ export function parseHostedReleaseManifestV2(value, expected = {}) {
86
+ exactKeys(
87
+ value,
88
+ ["schemaVersion", "release", "application", "signer"],
89
+ "hosted release manifest",
90
+ );
91
+ if (value.schemaVersion !== 2) {
92
+ throw new Error("hosted release manifest schema must be v2");
93
+ }
94
+ exactKeys(value.release, ["version", "tag", "commit"], "hosted release identity");
95
+ const version = String(value.release.version || "");
96
+ const commit = String(value.release.commit || "");
97
+ if (
98
+ !VERSION_PATTERN.test(version) ||
99
+ value.release.tag !== `v${version}` ||
100
+ !COMMIT_PATTERN.test(commit) ||
101
+ (expected.version && version !== expected.version) ||
102
+ (expected.commit && commit !== expected.commit)
103
+ ) {
104
+ throw new Error("hosted release version, tag, or commit is malformed or mismatched");
105
+ }
106
+
107
+ exactKeys(value.application, ["linux"], "hosted application platforms");
108
+ exactKeys(value.application.linux, ["x64", "arm64"], "hosted Linux architectures");
109
+ const application = { linux: {} };
110
+ for (const architecture of ["x64", "arm64"]) {
111
+ const entry = value.application.linux[architecture];
112
+ exactKeys(entry, ["artifact", "dependencies"], `hosted Linux ${architecture} entry`);
113
+ exactKeys(
114
+ entry.dependencies,
115
+ ["asset", "sha256", "dependencyHash"],
116
+ `hosted Linux ${architecture} dependencies`,
117
+ );
118
+ if (!SHA256_PATTERN.test(entry.dependencies.dependencyHash || "")) {
119
+ throw new Error(`hosted Linux ${architecture} dependency hash is invalid`);
120
+ }
121
+ application.linux[architecture] = Object.freeze({
122
+ artifact: parseArtifact(entry.artifact, `hosted Linux ${architecture} app artifact`),
123
+ dependencies: Object.freeze({
124
+ ...parseArtifact(
125
+ { asset: entry.dependencies.asset, sha256: entry.dependencies.sha256 },
126
+ `hosted Linux ${architecture} dependency artifact`,
127
+ ),
128
+ dependencyHash: entry.dependencies.dependencyHash,
129
+ }),
130
+ });
131
+ }
132
+
133
+ exactKeys(
134
+ value.signer,
135
+ ["release", "capabilities", "capabilitiesDigest", "platforms"],
136
+ "hosted signer release",
137
+ );
138
+ exactKeys(
139
+ value.signer.release,
140
+ ["version", "commit", "buildInputDigest", "development"],
141
+ "hosted signer build identity",
142
+ );
143
+ if (
144
+ value.signer.release.version !== version ||
145
+ value.signer.release.commit !== commit ||
146
+ !PREFIXED_SHA256_PATTERN.test(value.signer.release.buildInputDigest || "") ||
147
+ value.signer.release.development !== false
148
+ ) {
149
+ throw new Error("hosted app and signer release identities do not match");
150
+ }
151
+ exactKeys(
152
+ value.signer.platforms,
153
+ ["linux-amd64", "linux-arm64", "darwin-amd64", "darwin-arm64"],
154
+ "hosted signer platforms",
155
+ );
156
+ const platforms = {};
157
+ for (const platform of ["linux-amd64", "linux-arm64", "darwin-amd64", "darwin-arm64"]) {
158
+ platforms[platform] = parseArtifact(value.signer.platforms[platform], `signer ${platform}`);
159
+ }
160
+ return Object.freeze({
161
+ schemaVersion: 2,
162
+ release: Object.freeze({ version, tag: `v${version}`, commit }),
163
+ application: Object.freeze({ linux: Object.freeze(application.linux) }),
164
+ signer: Object.freeze({
165
+ release: Object.freeze({ ...value.signer.release }),
166
+ capabilities: parseCapabilities(value.signer.capabilities, value.signer.capabilitiesDigest),
167
+ capabilitiesDigest: value.signer.capabilitiesDigest,
168
+ platforms: Object.freeze(platforms),
169
+ }),
170
+ });
171
+ }
172
+
173
+ export async function readHostedReleaseManifestV2(filePath, expected = {}) {
174
+ const bytes = await fsp.readFile(filePath);
175
+ const manifest = parseHostedReleaseManifestV2(JSON.parse(bytes.toString("utf8")), expected);
176
+ return { manifest, digest: `sha256:${sha256Bytes(bytes)}` };
177
+ }
178
+
179
+ export async function verifyManifestArtifact(filePath, artifact, label = artifact?.asset) {
180
+ const actual = sha256Bytes(await fsp.readFile(filePath));
181
+ if (actual !== artifact?.sha256) {
182
+ throw new Error(`${label || "release artifact"} does not match the attested release manifest`);
183
+ }
184
+ return actual;
185
+ }
@@ -0,0 +1,217 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ INSTALL_DIR_DEFAULT="${HOME}/.fased/bin"
6
+ INSTALL_DIR="${FASED_LOCAL_SIGNER_BIN_DIR:-$INSTALL_DIR_DEFAULT}"
7
+ VERSION="${FASED_LOCAL_SIGNER_VERSION:-}"
8
+ POLICY_TEMPLATE_DIR="${FASED_LOCAL_SIGNER_POLICY_TEMPLATE_DIR:-$(dirname "$INSTALL_DIR")/share/signer-policies}"
9
+ UPDATER="$ROOT/scripts/fased-managed-updater.mjs"
10
+ ACTION="install"
11
+ DEFER_COMMIT=0
12
+ CONFIRM_DOWNGRADE=""
13
+ EXPECTED_COMMIT="${FASED_LOCAL_SIGNER_EXPECTED_COMMIT:-}"
14
+
15
+ usage() {
16
+ cat <<'EOF'
17
+ Usage: install-fased-signerd.sh [options]
18
+
19
+ Installs the exact version-matched native signer for Local Linux, WSL2, or
20
+ native macOS using an offline snapshot and crash-recoverable transaction.
21
+
22
+ Options:
23
+ --version vX.Y.Z Exact signer release (defaults to package version)
24
+ --expected-commit SHA Require the signer release to match this app commit
25
+ --defer-commit Leave the verified candidate open for paired app health
26
+ --confirm-downgrade X.Y.Z Explicitly confirm one exact reviewed downgrade target
27
+ --verify Verify the exact running binary, release, and protocol-v2 health
28
+ --commit Commit a deferred verified transaction
29
+ --rollback Restore the exact verified pre-update snapshot
30
+ --recover Recover an interrupted transaction deterministically
31
+ --status Print the current signer transaction journal
32
+ -h, --help Show this help
33
+
34
+ Native Windows is unsupported. Run this installer inside Ubuntu on WSL2.
35
+ Official installs require gh with `gh attestation verify`; Go is not required.
36
+ EOF
37
+ }
38
+
39
+ while [[ $# -gt 0 ]]; do
40
+ case "$1" in
41
+ --version)
42
+ VERSION="${2:-}"
43
+ shift 2
44
+ ;;
45
+ --expected-commit)
46
+ EXPECTED_COMMIT="${2:-}"
47
+ shift 2
48
+ ;;
49
+ --defer-commit)
50
+ DEFER_COMMIT=1
51
+ shift
52
+ ;;
53
+ --confirm-downgrade)
54
+ CONFIRM_DOWNGRADE="${2:-}"
55
+ shift 2
56
+ ;;
57
+ --commit)
58
+ ACTION="commit"
59
+ shift
60
+ ;;
61
+ --verify)
62
+ ACTION="verify"
63
+ shift
64
+ ;;
65
+ --rollback)
66
+ ACTION="rollback"
67
+ shift
68
+ ;;
69
+ --recover)
70
+ ACTION="recover"
71
+ shift
72
+ ;;
73
+ --status)
74
+ ACTION="status"
75
+ shift
76
+ ;;
77
+ -h|--help)
78
+ usage
79
+ exit 0
80
+ ;;
81
+ *)
82
+ echo "Unknown signer installer option: $1" >&2
83
+ usage >&2
84
+ exit 2
85
+ ;;
86
+ esac
87
+ done
88
+
89
+ OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
90
+ case "$OS" in
91
+ linux|darwin) ;;
92
+ mingw*|msys*|cygwin*)
93
+ echo "Native Windows is unsupported. Install and run Fased inside Ubuntu on WSL2." >&2
94
+ exit 1
95
+ ;;
96
+ *)
97
+ echo "Unsupported OS for fased-signerd: $OS" >&2
98
+ exit 1
99
+ ;;
100
+ esac
101
+
102
+ command -v node >/dev/null 2>&1 || {
103
+ echo "Node.js is required to run the transactional signer installer." >&2
104
+ exit 1
105
+ }
106
+ [[ -f "$UPDATER" && ! -L "$UPDATER" ]] || {
107
+ echo "Packaged transactional signer updater is missing: $UPDATER" >&2
108
+ exit 1
109
+ }
110
+
111
+ if [[ "$ACTION" == "install" || "$ACTION" == "verify" ]]; then
112
+ if [[ -z "$VERSION" || "$VERSION" == "latest" ]]; then
113
+ VERSION="$(node -p "require(process.argv[1]).version" "$ROOT/package.json" 2>/dev/null || true)"
114
+ fi
115
+ VERSION="${VERSION#v}"
116
+ if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z]+([.-][0-9A-Za-z]+)*)?$ ]]; then
117
+ echo "An exact signer release version X.Y.Z is required; latest is not accepted." >&2
118
+ exit 1
119
+ fi
120
+ fi
121
+
122
+ if [[ -n "$EXPECTED_COMMIT" && ! "$EXPECTED_COMMIT" =~ ^[a-f0-9]{40}$ ]]; then
123
+ echo "--expected-commit must be one exact 40-character Git commit." >&2
124
+ exit 1
125
+ fi
126
+
127
+ mkdir -p "$INSTALL_DIR"
128
+ chmod 700 "$INSTALL_DIR" 2>/dev/null || true
129
+ export FASED_LOCAL_SIGNER_BIN_DIR="$INSTALL_DIR"
130
+ export FASED_WALLET_LOCAL_SIGNER_BIN="$INSTALL_DIR/fased-signerd"
131
+
132
+ args=(local-signer "$ACTION")
133
+ if [[ "$ACTION" == "install" || "$ACTION" == "verify" ]]; then
134
+ args+=(--version "$VERSION")
135
+ if [[ -n "$EXPECTED_COMMIT" ]]; then
136
+ args+=(--expected-commit "$EXPECTED_COMMIT")
137
+ fi
138
+ fi
139
+ if [[ "$ACTION" == "install" ]]; then
140
+ # Keep the candidate read-only and the rollback journal open until all
141
+ # packaged policy helpers/templates are installed successfully.
142
+ args+=(--defer-commit)
143
+ if [[ -n "$CONFIRM_DOWNGRADE" ]]; then
144
+ args+=(--confirm-downgrade "${CONFIRM_DOWNGRADE#v}")
145
+ fi
146
+ fi
147
+
148
+ TRANSACTION_OPEN=0
149
+ rollback_failed_install() {
150
+ local status=$?
151
+ if [[ "$status" -ne 0 && "$TRANSACTION_OPEN" -eq 1 ]]; then
152
+ node "$UPDATER" local-signer rollback >/dev/null 2>&1 || true
153
+ fi
154
+ return "$status"
155
+ }
156
+ trap rollback_failed_install EXIT
157
+
158
+ node "$UPDATER" "${args[@]}"
159
+
160
+ if [[ "$ACTION" != "install" ]]; then
161
+ trap - EXIT
162
+ exit 0
163
+ fi
164
+ TRANSACTION_OPEN=1
165
+
166
+ POLICY_HELPER_PATH="${INSTALL_DIR}/fased-signer-owner-policy.mjs"
167
+ POLICY_LAUNCHER_PATH="${INSTALL_DIR}/fased-signer-policy"
168
+ POLICY_HELPER_SOURCE="${ROOT}/scripts/fased-signer-owner-policy.mjs"
169
+ POLICY_LAUNCHER_SOURCE="${ROOT}/scripts/fased-signer-policy-local.sh"
170
+ POLICY_TEMPLATE_SOURCE="${ROOT}/config/signer-policies"
171
+
172
+ required_assets=(
173
+ "$POLICY_HELPER_SOURCE"
174
+ "$POLICY_LAUNCHER_SOURCE"
175
+ "$POLICY_TEMPLATE_SOURCE/README.md"
176
+ "$POLICY_TEMPLATE_SOURCE/agent.json.template"
177
+ "$POLICY_TEMPLATE_SOURCE/mining.json.template"
178
+ "$POLICY_TEMPLATE_SOURCE/vault.json.template"
179
+ )
180
+ if [[ -f "$POLICY_TEMPLATE_SOURCE/network.json.template" ]]; then
181
+ required_assets+=("$POLICY_TEMPLATE_SOURCE/network.json.template")
182
+ fi
183
+ for required_path in "${required_assets[@]}"; do
184
+ [[ -f "$required_path" && ! -L "$required_path" ]] || {
185
+ echo "Packaged signer policy asset is missing or unsafe: $required_path" >&2
186
+ exit 1
187
+ }
188
+ done
189
+
190
+ install -d -m 0700 "$INSTALL_DIR" "$POLICY_TEMPLATE_DIR"
191
+ install -m 0700 "$POLICY_HELPER_SOURCE" "$POLICY_HELPER_PATH"
192
+ install -m 0700 "$POLICY_LAUNCHER_SOURCE" "$POLICY_LAUNCHER_PATH"
193
+ for template in README.md agent.json.template mining.json.template vault.json.template network.json.template; do
194
+ [[ -f "$POLICY_TEMPLATE_SOURCE/$template" ]] || continue
195
+ install -m 0600 "$POLICY_TEMPLATE_SOURCE/$template" "$POLICY_TEMPLATE_DIR/$template"
196
+ done
197
+
198
+ if [[ "$DEFER_COMMIT" -eq 0 ]]; then
199
+ node "$UPDATER" local-signer commit
200
+ TRANSACTION_OPEN=0
201
+ fi
202
+ trap - EXIT
203
+
204
+ echo "Installed exact transactional signer: $INSTALL_DIR/fased-signerd"
205
+ echo "Installed signer enrollment launcher: $INSTALL_DIR/fased-signer-enroll"
206
+ echo "Installed signer policy launcher: $POLICY_LAUNCHER_PATH"
207
+ echo "Installed fail-closed policy templates: $POLICY_TEMPLATE_DIR"
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.
217
+ EOF