@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
@@ -1,4 +1,4 @@
1
- import fs from "node:fs";
1
+ import syncFs from "node:fs";
2
2
 
3
3
  //#region src/config/cache-utils.ts
4
4
  function resolveCacheTtlMs(params) {
@@ -16,7 +16,7 @@ function isCacheEnabled(ttlMs) {
16
16
  }
17
17
  function getFileMtimeMs(filePath) {
18
18
  try {
19
- return fs.statSync(filePath).mtimeMs;
19
+ return syncFs.statSync(filePath).mtimeMs;
20
20
  } catch {
21
21
  return undefined;
22
22
  }
@@ -4,9 +4,9 @@ import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConf
4
4
  import { MODEL_APIS } from "./types.models.js";
5
5
  import { FasedAgentSchema } from "./zod-schema.js";
6
6
  import { validateConfigObject, validateConfigObjectRaw, validateConfigObjectRawWithPlugins, validateConfigObjectWithPlugins } from "./validation.js";
7
- import { clearConfigCache, clearRuntimeConfigSnapshot, createConfigIO, getRuntimeConfigSnapshot, loadConfig, parseConfigJson5, readConfigFileSnapshot, readConfigFileSnapshotForWrite, resolveConfigSnapshotHash, setRuntimeConfigSnapshot, writeConfigFile } from "./io.js";
7
+ import { clearConfigCache, clearRuntimeConfigSnapshot, createConfigIO, getRuntimeConfigSnapshot, loadConfig, parseConfigJson5, readConfigFileSnapshot, readConfigFileSnapshotForWrite, resolveConfigSnapshotHash, setRuntimeConfigSnapshot, updateConfigFile, writeConfigFile } from "./io.js";
8
8
  import { migrateLegacyConfig } from "./legacy-migrate.js";
9
9
  import { TOOLS_BY_SENDER_KEY_TYPES, parseToolsBySenderTypedKey } from "./types.tools.js";
10
10
  import "./types.js";
11
11
 
12
- export { CONFIG_PATH, DEFAULT_GATEWAY_PORT, DEFAULT_SECRET_PROVIDER_ALIAS, FasedAgentSchema, MODEL_APIS, STATE_DIR, TOOLS_BY_SENDER_KEY_TYPES, applyConfigOverrides, assertSecretInputResolved, clearConfigCache, clearRuntimeConfigSnapshot, coerceSecretRef, createConfigIO, getConfigOverrides, getRuntimeConfigSnapshot, isNixMode, isSecretRef, loadConfig, migrateLegacyConfig, parseConfigJson5, parseEnvTemplateSecretRef, parseToolsBySenderTypedKey, readConfigFileSnapshot, readConfigFileSnapshotForWrite, resetConfigOverrides, resolveCanonicalConfigPath, resolveConfigPath, resolveConfigPathCandidate, resolveConfigSnapshotHash, resolveDefaultConfigCandidates, resolveGatewayLockDir, resolveGatewayPort, resolveIsNixMode, resolveLegacyStateDir, resolveLegacyStateDirs, resolveNewStateDir, resolveOAuthDir, resolveOAuthPath, resolveStateDir, setConfigOverride, setRuntimeConfigSnapshot, unsetConfigOverride, validateConfigObject, validateConfigObjectRaw, validateConfigObjectRawWithPlugins, validateConfigObjectWithPlugins, writeConfigFile };
12
+ export { CONFIG_PATH, DEFAULT_GATEWAY_PORT, DEFAULT_SECRET_PROVIDER_ALIAS, FasedAgentSchema, MODEL_APIS, STATE_DIR, TOOLS_BY_SENDER_KEY_TYPES, applyConfigOverrides, assertSecretInputResolved, clearConfigCache, clearRuntimeConfigSnapshot, coerceSecretRef, createConfigIO, getConfigOverrides, getRuntimeConfigSnapshot, isNixMode, isSecretRef, loadConfig, migrateLegacyConfig, parseConfigJson5, parseEnvTemplateSecretRef, parseToolsBySenderTypedKey, readConfigFileSnapshot, readConfigFileSnapshotForWrite, resetConfigOverrides, resolveCanonicalConfigPath, resolveConfigPath, resolveConfigPathCandidate, resolveConfigSnapshotHash, resolveDefaultConfigCandidates, resolveGatewayLockDir, resolveGatewayPort, resolveIsNixMode, resolveLegacyStateDir, resolveLegacyStateDirs, resolveNewStateDir, resolveOAuthDir, resolveOAuthPath, resolveStateDir, setConfigOverride, setRuntimeConfigSnapshot, unsetConfigOverride, updateConfigFile, validateConfigObject, validateConfigObjectRaw, validateConfigObjectRawWithPlugins, validateConfigObjectWithPlugins, writeConfigFile };
@@ -4,7 +4,7 @@ import { isBlockedObjectKey } from "../infra/prototype-keys.js";
4
4
  import { canUseBoundaryFileOpen, openBoundaryFileSync } from "../infra/boundary-file-read.js";
5
5
  import { isPathInside } from "../security/scan-paths.js";
6
6
  import "./prototype-keys.js";
7
- import fs from "node:fs";
7
+ import syncFs from "node:fs";
8
8
  import path from "node:path";
9
9
  import JSON5 from "json5";
10
10
 
@@ -130,7 +130,7 @@ var IncludeProcessor = class IncludeProcessor {
130
130
  throw new ConfigIncludeError(`Include path escapes config directory: ${includePath} (root: ${this.rootDir})`, includePath);
131
131
  }
132
132
  try {
133
- const real = fs.realpathSync(normalized);
133
+ const real = syncFs.realpathSync(normalized);
134
134
  if (!isPathInside(this.rootRealDir, real)) {
135
135
  throw new ConfigIncludeError(`Include path resolves outside config directory (symlink): ${includePath} (root: ${this.rootDir})`, includePath);
136
136
  }
@@ -184,13 +184,13 @@ var IncludeProcessor = class IncludeProcessor {
184
184
  };
185
185
  function safeRealpath(target) {
186
186
  try {
187
- return fs.realpathSync(target);
187
+ return syncFs.realpathSync(target);
188
188
  } catch {
189
189
  return target;
190
190
  }
191
191
  }
192
192
  function readConfigIncludeFileWithGuards(params) {
193
- const ioFs = params.ioFs ?? fs;
193
+ const ioFs = params.ioFs ?? syncFs;
194
194
  const maxBytes = params.maxBytes ?? MAX_INCLUDE_FILE_BYTES;
195
195
  if (!canUseBoundaryFileOpen(ioFs)) {
196
196
  return ioFs.readFileSync(params.resolvedPath, "utf-8");
@@ -217,7 +217,7 @@ function readConfigIncludeFileWithGuards(params) {
217
217
  }
218
218
  }
219
219
  const defaultResolver = {
220
- readFile: (p) => fs.readFileSync(p, "utf-8"),
220
+ readFile: (p) => syncFs.readFileSync(p, "utf-8"),
221
221
  readFileWithGuards: ({ includePath, resolvedPath, rootRealDir }) => readConfigIncludeFileWithGuards({
222
222
  includePath,
223
223
  resolvedPath,
package/dist/config/io.js CHANGED
@@ -2,6 +2,8 @@ import { resolveRequiredHomeDir } from "../infra/home-dir.js";
2
2
  import { resolveConfigPath, resolveDefaultConfigCandidates, resolveStateDir } from "./paths.js";
3
3
  import { isBlockedObjectKey } from "../infra/prototype-keys.js";
4
4
  import { VERSION } from "../version.js";
5
+ import { withFileLock } from "../plugin-sdk/file-lock.js";
6
+ import "../infra/file-lock.js";
5
7
  import { ensureOwnerDisplaySecret } from "../agents/owner-display.js";
6
8
  import { loadDotEnv } from "../infra/dotenv.js";
7
9
  import { loadShellEnvFallback, resolveShellEnvFallbackTimeoutMs, shouldDeferShellEnvFallback, shouldEnableShellEnvFallback } from "../infra/shell-env.js";
@@ -22,7 +24,7 @@ import { repairInstalledPluginAllowlist } from "./plugins-allowlist.js";
22
24
  import { applyConfigOverrides } from "./runtime-overrides.js";
23
25
  import { validateConfigObjectRawWithPlugins, validateConfigObjectWithPlugins } from "./validation.js";
24
26
  import { compareFasedAgentVersions } from "./version.js";
25
- import fs from "node:fs";
27
+ import syncFs from "node:fs";
26
28
  import os from "node:os";
27
29
  import path from "node:path";
28
30
  import JSON5 from "json5";
@@ -71,6 +73,36 @@ function pruneLegacyRemovedPlugins(cfg) {
71
73
  const OPEN_DM_POLICY_ALLOW_FROM_RE = /^(?<policyPath>[a-z0-9_.-]+)\s*=\s*"open"\s+requires\s+(?<allowPath>[a-z0-9_.-]+)(?:\s+\(or\s+[a-z0-9_.-]+\))?\s+to include "\*"$/i;
72
74
  const CONFIG_AUDIT_LOG_FILENAME = "config-audit.jsonl";
73
75
  const loggedInvalidConfigs = new Set();
76
+ const CONFIG_WRITE_QUEUES = new Map();
77
+ async function inConfigWriteQueue(configPath, fn) {
78
+ const previous = CONFIG_WRITE_QUEUES.get(configPath) ?? Promise.resolve();
79
+ let release;
80
+ const current = new Promise((resolve) => {
81
+ release = resolve;
82
+ });
83
+ CONFIG_WRITE_QUEUES.set(configPath, current);
84
+ await previous.catch(() => undefined);
85
+ try {
86
+ return await fn();
87
+ } finally {
88
+ release?.();
89
+ if (CONFIG_WRITE_QUEUES.get(configPath) === current) {
90
+ CONFIG_WRITE_QUEUES.delete(configPath);
91
+ }
92
+ }
93
+ }
94
+ async function withConfigWriteLock(configPath, fn) {
95
+ return await inConfigWriteQueue(configPath, async () => await withFileLock(configPath, {
96
+ retries: {
97
+ retries: 160,
98
+ factor: 1.08,
99
+ minTimeout: 10,
100
+ maxTimeout: 250,
101
+ randomize: true
102
+ },
103
+ stale: 12e4
104
+ }, fn));
105
+ }
74
106
  function hashConfigRaw(raw) {
75
107
  return crypto.createHash("sha256").update(raw ?? "").digest("hex");
76
108
  }
@@ -477,7 +509,7 @@ function resolveConfigPathForDeps(deps) {
477
509
  }
478
510
  function normalizeDeps(overrides = {}) {
479
511
  return {
480
- fs: overrides.fs ?? fs,
512
+ fs: overrides.fs ?? syncFs,
481
513
  json5: overrides.json5 ?? JSON5,
482
514
  env: overrides.env ?? process.env,
483
515
  homedir: overrides.homedir ?? (() => resolveRequiredHomeDir(overrides.env ?? process.env, os.homedir)),
@@ -857,7 +889,7 @@ function createConfigIO(overrides = {}) {
857
889
  }
858
890
  };
859
891
  }
860
- async function writeConfigFile(cfg, options = {}) {
892
+ async function writeConfigFileUnlocked(cfg, options = {}) {
861
893
  clearConfigCache();
862
894
  let persistCandidate = cfg;
863
895
  const { snapshot } = await readConfigFileSnapshotInternal();
@@ -1047,11 +1079,38 @@ function createConfigIO(overrides = {}) {
1047
1079
  throw err;
1048
1080
  }
1049
1081
  }
1082
+ async function writeConfigFile(cfg, options = {}) {
1083
+ await withConfigWriteLock(configPath, async () => {
1084
+ await writeConfigFileUnlocked(cfg, options);
1085
+ });
1086
+ }
1087
+ async function updateConfigFile(mutator) {
1088
+ return await withConfigWriteLock(configPath, async () => {
1089
+ const read = await readConfigFileSnapshotInternal();
1090
+ if (!read.snapshot.valid) {
1091
+ throw new Error("Config update transaction refused an invalid config snapshot");
1092
+ }
1093
+ const decision = await mutator(structuredClone(read.snapshot.config), read.snapshot);
1094
+ const shouldWrite = decision.write !== false;
1095
+ if (shouldWrite) {
1096
+ await writeConfigFileUnlocked(decision.config, {
1097
+ envSnapshotForRestore: read.envSnapshotForRestore,
1098
+ expectedConfigPath: configPath
1099
+ });
1100
+ }
1101
+ return {
1102
+ config: shouldWrite ? decision.config : read.snapshot.config,
1103
+ result: decision.result,
1104
+ written: shouldWrite
1105
+ };
1106
+ });
1107
+ }
1050
1108
  return {
1051
1109
  configPath,
1052
1110
  loadConfig,
1053
1111
  readConfigFileSnapshot,
1054
1112
  readConfigFileSnapshotForWrite,
1113
+ updateConfigFile,
1055
1114
  writeConfigFile
1056
1115
  };
1057
1116
  }
@@ -1145,6 +1204,9 @@ async function writeConfigFile(cfg, options = {}) {
1145
1204
  unsetPaths: options.unsetPaths
1146
1205
  });
1147
1206
  }
1207
+ async function updateConfigFile(mutator) {
1208
+ return await createConfigIO().updateConfigFile(mutator);
1209
+ }
1148
1210
 
1149
1211
  //#endregion
1150
- export { clearConfigCache, clearRuntimeConfigSnapshot, createConfigIO, getRuntimeConfigSnapshot, loadConfig, parseConfigJson5, readConfigFileSnapshot, readConfigFileSnapshotForWrite, resolveConfigSnapshotHash, setRuntimeConfigSnapshot, writeConfigFile };
1212
+ export { clearConfigCache, clearRuntimeConfigSnapshot, createConfigIO, getRuntimeConfigSnapshot, loadConfig, parseConfigJson5, readConfigFileSnapshot, readConfigFileSnapshotForWrite, resolveConfigSnapshotHash, setRuntimeConfigSnapshot, updateConfigFile, writeConfigFile };
@@ -1,5 +1,5 @@
1
1
  import { expandHomePrefix, resolveRequiredHomeDir } from "../infra/home-dir.js";
2
- import fs from "node:fs";
2
+ import syncFs from "node:fs";
3
3
  import os from "node:os";
4
4
  import path from "node:path";
5
5
 
@@ -86,7 +86,7 @@ function resolveConfigPathCandidate(env = process.env, homedir = envHomedir(env)
86
86
  const candidates = resolveDefaultConfigCandidates(env, homedir);
87
87
  const existing = candidates.find((candidate) => {
88
88
  try {
89
- return fs.existsSync(candidate);
89
+ return syncFs.existsSync(candidate);
90
90
  } catch {
91
91
  return false;
92
92
  }
@@ -108,7 +108,7 @@ function resolveConfigPath(env = process.env, stateDir = resolveStateDir(env, en
108
108
  const candidates = [path.join(stateDir, CONFIG_FILENAME)];
109
109
  const existing = candidates.find((candidate) => {
110
110
  try {
111
- return fs.existsSync(candidate);
111
+ return syncFs.existsSync(candidate);
112
112
  } catch {
113
113
  return false;
114
114
  }
@@ -1,4 +1,4 @@
1
- import fs from "node:fs";
1
+ import syncFs from "node:fs";
2
2
  import path from "node:path";
3
3
 
4
4
  //#region src/config/sat-runtime-ids.ts
@@ -63,7 +63,7 @@ function resolveSatRuntimeDefaultsFile(env = process.env) {
63
63
  path.resolve(import.meta.dirname, "..", "..", "..", "config", "sat-runtime.env")
64
64
  ];
65
65
  for (const candidate of candidates) {
66
- if (candidate && fs.existsSync(candidate)) {
66
+ if (candidate && syncFs.existsSync(candidate)) {
67
67
  return candidate;
68
68
  }
69
69
  }
@@ -82,7 +82,7 @@ function loadSatRuntimeDefaults(env = process.env) {
82
82
  if (!file) {
83
83
  return null;
84
84
  }
85
- const parsed = parseEnvFile(fs.readFileSync(file, "utf8"));
85
+ const parsed = parseEnvFile(syncFs.readFileSync(file, "utf8"));
86
86
  if (!parsed.programId || !parsed.bondProgramId || !parsed.mintAddress || !parsed.mintProgramId) {
87
87
  return null;
88
88
  }
@@ -178,6 +178,7 @@ const FIELD_HELP_BASE = {
178
178
  "agents.defaults.memorySearch.remote.baseUrl": "Custom base URL for remote embeddings (OpenAI-compatible proxies or Gemini overrides).",
179
179
  "agents.defaults.memorySearch.remote.apiKey": "Custom API key for the remote embedding provider.",
180
180
  "agents.defaults.memorySearch.remote.headers": "Extra headers for remote embeddings (merged; remote overrides OpenAI headers).",
181
+ "agents.defaults.memorySearch.remote.allowSessionContent": "Explicitly allow sanitized session transcript text to leave this host for remote embedding. Default: false.",
181
182
  "agents.defaults.memorySearch.remote.batch.enabled": "Enable batch API for memory embeddings (OpenAI/Gemini; default: true).",
182
183
  "agents.defaults.memorySearch.remote.batch.wait": "Wait for batch completion when indexing (default: true).",
183
184
  "agents.defaults.memorySearch.remote.batch.concurrency": "Max concurrent embedding batch jobs for memory indexing (default: 2).",
@@ -219,15 +220,15 @@ const FIELD_HELP_BASE = {
219
220
  "memory.qmd.limits.timeoutMs": "Per-query timeout for QMD searches (default: 4000).",
220
221
  "memory.qmd.scope": "Session/channel scope for QMD recall (same syntax as session.sendPolicy; default: direct-only). Use match.rawKeyPrefix to match full agent-prefixed session keys.",
221
222
  wallet: "Wallet subsystem configuration.",
222
- "wallet.provider.id": "Wallet backend provider id for the current self-hosted runtime (\"local-socket-signer\" preferred; \"embedded-keystore\" legacy). Hosted provider ids are CLI/admin-only compatibility plumbing.",
223
+ "wallet.provider.id": "Wallet backend provider id. Local, WSL2, macOS, and Hosting use \"local-socket-signer\"; Wallet Standard and Turnkey remain supported. Legacy \"embedded-keystore\" values are migration-only and fail closed.",
223
224
  "wallet.execution.mode": "Wallet send execution mode (\"manual\" queues approvals; \"autonomous\" executes immediately when policy allows).",
224
225
  "wallet.approvalAuth.mode": "Approval auth mode for sensitive wallet actions (\"none\" or \"webauthn\").",
225
226
  "wallet.approvalAuth.challengeTtlSeconds": "Wallet WebAuthn challenge TTL in seconds (default: 300).",
226
227
  "wallet.approvalAuth.grantTtlSeconds": "Wallet approval grant TTL in seconds (default: 120).",
227
- "wallet.keystore.enabled": "Enable embedded encrypted keystore provider for local self-hosted signing.",
228
- "wallet.keystore.path": "Path to encrypted embedded keystore file (defaults under wallet state dir).",
229
- "wallet.keystore.chainSupport": "Enabled chains for embedded keystore. Normal Fased wallet setup is Solana-first.",
230
- "wallet.keystore.autoLockSeconds": "Optional idle auto-lock timeout for embedded keystore.",
228
+ "wallet.keystore.enabled": "Retired legacy field. Embedded keystores are migration-only and fail closed.",
229
+ "wallet.keystore.path": "Retired legacy path retained only so the native signer migration can be performed explicitly.",
230
+ "wallet.keystore.chainSupport": "Retired legacy field; production wallet keys are signer/provider-owned.",
231
+ "wallet.keystore.autoLockSeconds": "Retired legacy embedded-keystore field.",
231
232
  "wallet.runtime.enabled": "Enable wallet runtime compatibility settings (provider-agnostic replacement for legacy wallet runtime config).",
232
233
  "wallet.runtime.mode": "Wallet runtime mode (\"managed\" or \"external\").",
233
234
  "wallet.runtime.runtime": "Wallet runtime source (\"external-docker\" or \"external-custom\").",
@@ -241,8 +242,8 @@ const FIELD_HELP_BASE = {
241
242
  "wallet.runtime.install.enabled": "Whether onboarding/install flows should record wallet runtime install metadata.",
242
243
  "wallet.runtime.install.version": "Installed wallet runtime version recorded by onboarding/install flows.",
243
244
  "wallet.runtime.policy.directSigning": "Allow background/agent wallet execution from wallet tooling (must be paired with caps/allowlists). Manual reviewed sends are separate.",
244
- "wallet.runtime.policy.capsEnabled": "Enable wallet spend cap enforcement. When false, role, custody, signer, allowlist, and audit gates still apply, but SOL/token cap comparisons are skipped.",
245
- "wallet.runtime.policy.solana.allowPrograms": "Optional Solana program allowlist. For Agent market swaps this restricts inspected Jupiter DEX route programs; empty allows inspected routes.",
245
+ "wallet.runtime.policy.capsEnabled": "Enable wallet spend cap enforcement. When false, role, signer policy, allowlist, and audit gates still apply, but SOL/token cap comparisons are skipped.",
246
+ "wallet.runtime.policy.solana.allowPrograms": "Explicit Solana program/token allowlist. Empty denies program and token execution; Agent market swaps also require every inspected Jupiter route program.",
246
247
  "wallet.runtime.policy.solana.tokenCaps": "Per-mint SPL token caps for token sends, token-input swaps, and token-input limit orders. Keys are mint addresses; values are base-unit maxPerTx/maxDaily strings.",
247
248
  "wallet.runtime.policy.solana.maxPerTx": "Maximum Solana value allowed per transaction (base unit string; e.g. lamports).",
248
249
  "wallet.runtime.policy.solana.maxDaily": "Maximum cumulative Solana value allowed per UTC day (base unit string).",
@@ -194,6 +194,7 @@ const FIELD_LABELS_BASE = {
194
194
  "agents.defaults.memorySearch.remote.baseUrl": "Remote Embedding Base URL",
195
195
  "agents.defaults.memorySearch.remote.apiKey": "Remote Embedding API Key",
196
196
  "agents.defaults.memorySearch.remote.headers": "Remote Embedding Headers",
197
+ "agents.defaults.memorySearch.remote.allowSessionContent": "Allow Session Content in Remote Embeddings",
197
198
  "models.providers.*.request.allowPrivateNetwork": "Allow Private Model Network",
198
199
  "agents.defaults.memorySearch.remote.batch.concurrency": "Remote Batch Concurrency",
199
200
  "agents.defaults.memorySearch.model": "Memory Search Model",
@@ -249,10 +250,10 @@ const FIELD_LABELS_BASE = {
249
250
  "wallet.approvalAuth.mode": "Wallet Approval Auth Mode",
250
251
  "wallet.approvalAuth.challengeTtlSeconds": "Wallet Approval Challenge TTL (sec)",
251
252
  "wallet.approvalAuth.grantTtlSeconds": "Wallet Approval Grant TTL (sec)",
252
- "wallet.keystore.enabled": "Embedded Keystore Enabled",
253
- "wallet.keystore.path": "Embedded Keystore Path",
254
- "wallet.keystore.chainSupport": "Embedded Keystore Chains",
255
- "wallet.keystore.autoLockSeconds": "Embedded Keystore Auto Lock (sec)",
253
+ "wallet.keystore.enabled": "Legacy Keystore (Retired)",
254
+ "wallet.keystore.path": "Legacy Keystore Migration Path",
255
+ "wallet.keystore.chainSupport": "Legacy Keystore Chains",
256
+ "wallet.keystore.autoLockSeconds": "Legacy Keystore Auto Lock (Retired)",
256
257
  "wallet.runtime.enabled": "Wallet Runtime Enabled",
257
258
  "wallet.runtime.mode": "Wallet Runtime Mode",
258
259
  "wallet.runtime.runtime": "Wallet Runtime Kind",
@@ -1,6 +1,6 @@
1
1
  import { isPrimarySessionTranscriptFileName, isSessionArchiveArtifactName } from "./artifacts.js";
2
2
  import { resolveSessionFilePath } from "./paths.js";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
  import path from "node:path";
5
5
 
6
6
  //#region src/config/sessions/disk-budget.ts
@@ -11,7 +11,7 @@ const NOOP_LOGGER = {
11
11
  function canonicalizePathForComparison(filePath) {
12
12
  const resolved = path.resolve(filePath);
13
13
  try {
14
- return fs.realpathSync(resolved);
14
+ return syncFs.realpathSync(resolved);
15
15
  } catch {
16
16
  return resolved;
17
17
  }
@@ -83,14 +83,14 @@ function resolveReferencedSessionTranscriptPaths(params) {
83
83
  return referenced;
84
84
  }
85
85
  async function readSessionsDirFiles(sessionsDir) {
86
- const dirEntries = await fs.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
86
+ const dirEntries = await syncFs.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
87
87
  const files = [];
88
88
  for (const dirent of dirEntries) {
89
89
  if (!dirent.isFile()) {
90
90
  continue;
91
91
  }
92
92
  const filePath = path.join(sessionsDir, dirent.name);
93
- const stat = await fs.promises.stat(filePath).catch(() => null);
93
+ const stat = await syncFs.promises.stat(filePath).catch(() => null);
94
94
  if (!stat?.isFile()) {
95
95
  continue;
96
96
  }
@@ -105,11 +105,11 @@ async function readSessionsDirFiles(sessionsDir) {
105
105
  return files;
106
106
  }
107
107
  async function removeFileIfExists(filePath) {
108
- const stat = await fs.promises.stat(filePath).catch(() => null);
108
+ const stat = await syncFs.promises.stat(filePath).catch(() => null);
109
109
  if (!stat?.isFile()) {
110
110
  return 0;
111
111
  }
112
- await fs.promises.rm(filePath, { force: true }).catch(() => undefined);
112
+ await syncFs.promises.rm(filePath, { force: true }).catch(() => undefined);
113
113
  return stat.size;
114
114
  }
115
115
  async function removeFileForBudget(params) {
@@ -1,7 +1,7 @@
1
1
  import { expandHomePrefix, resolveRequiredHomeDir } from "../../infra/home-dir.js";
2
2
  import { resolveStateDir } from "../paths.js";
3
3
  import { DEFAULT_AGENT_ID, normalizeAgentId } from "../../routing/session-key.js";
4
- import fs from "node:fs";
4
+ import syncFs from "node:fs";
5
5
  import os from "node:os";
6
6
  import path from "node:path";
7
7
 
@@ -112,7 +112,7 @@ function resolveStructuralSessionFallbackPath(candidateAbsPath, expectedAgentId)
112
112
  }
113
113
  function safeRealpathSync(filePath) {
114
114
  try {
115
- return fs.realpathSync(filePath);
115
+ return syncFs.realpathSync(filePath);
116
116
  } catch {
117
117
  return undefined;
118
118
  }
@@ -10,7 +10,7 @@ import { archiveSessionTranscripts, cleanupArchivedSessionTranscripts } from "..
10
10
  import { deliveryContextFromSession, mergeDeliveryContext, normalizeDeliveryContext, normalizeSessionDeliveryFields } from "../../utils/delivery-context.js";
11
11
  import { getFileMtimeMs, isCacheEnabled, resolveCacheTtlMs } from "../cache-utils.js";
12
12
  import { enforceSessionDiskBudget } from "./disk-budget.js";
13
- import fs from "node:fs";
13
+ import syncFs from "node:fs";
14
14
  import path from "node:path";
15
15
  import crypto from "node:crypto";
16
16
 
@@ -155,7 +155,7 @@ function loadSessionStore(storePath, opts = {}) {
155
155
  const retryBuf = maxReadAttempts > 1 ? new Int32Array(new SharedArrayBuffer(4)) : undefined;
156
156
  for (let attempt = 0; attempt < maxReadAttempts; attempt++) {
157
157
  try {
158
- const raw = fs.readFileSync(storePath, "utf-8");
158
+ const raw = syncFs.readFileSync(storePath, "utf-8");
159
159
  if (raw.length === 0 && attempt < maxReadAttempts - 1) {
160
160
  Atomics.wait(retryBuf, 0, 0, 50);
161
161
  continue;
@@ -406,7 +406,7 @@ function capEntryCount(store, overrideMax, opts = {}) {
406
406
  }
407
407
  async function getSessionFileSize(storePath) {
408
408
  try {
409
- const stat = await fs.promises.stat(storePath);
409
+ const stat = await syncFs.promises.stat(storePath);
410
410
  return stat.size;
411
411
  } catch {
412
412
  return null;
@@ -428,7 +428,7 @@ async function rotateSessionFile(storePath, overrideBytes) {
428
428
  }
429
429
  const backupPath = `${storePath}.bak.${Date.now()}`;
430
430
  try {
431
- await fs.promises.rename(storePath, backupPath);
431
+ await syncFs.promises.rename(storePath, backupPath);
432
432
  log.info("rotated session store file", {
433
433
  backupPath: path.basename(backupPath),
434
434
  sizeBytes: fileSize
@@ -439,13 +439,13 @@ async function rotateSessionFile(storePath, overrideBytes) {
439
439
  try {
440
440
  const dir = path.dirname(storePath);
441
441
  const baseName = path.basename(storePath);
442
- const files = await fs.promises.readdir(dir);
442
+ const files = await syncFs.promises.readdir(dir);
443
443
  const backups = files.filter((f) => f.startsWith(`${baseName}.bak.`)).toSorted().toReversed();
444
444
  const maxBackups = 3;
445
445
  if (backups.length > maxBackups) {
446
446
  const toDelete = backups.slice(maxBackups);
447
447
  for (const old of toDelete) {
448
- await fs.promises.unlink(path.join(dir, old)).catch(() => undefined);
448
+ await syncFs.promises.unlink(path.join(dir, old)).catch(() => undefined);
449
449
  }
450
450
  log.info("cleaned up old session store backups", { deleted: toDelete.length });
451
451
  }
@@ -561,15 +561,15 @@ async function saveSessionStoreUnlocked(storePath, store, opts) {
561
561
  });
562
562
  }
563
563
  }
564
- await fs.promises.mkdir(path.dirname(storePath), { recursive: true });
564
+ await syncFs.promises.mkdir(path.dirname(storePath), { recursive: true });
565
565
  const json = JSON.stringify(store, null, 2);
566
566
  if (process.platform === "win32") {
567
567
  const tmp = `${storePath}.${process.pid}.${crypto.randomUUID()}.tmp`;
568
568
  try {
569
- await fs.promises.writeFile(tmp, json, "utf-8");
569
+ await syncFs.promises.writeFile(tmp, json, "utf-8");
570
570
  for (let i = 0; i < 5; i++) {
571
571
  try {
572
- await fs.promises.rename(tmp, storePath);
572
+ await syncFs.promises.rename(tmp, storePath);
573
573
  break;
574
574
  } catch {
575
575
  if (i < 4) {
@@ -587,28 +587,28 @@ async function saveSessionStoreUnlocked(storePath, store, opts) {
587
587
  }
588
588
  throw err;
589
589
  } finally {
590
- await fs.promises.rm(tmp, { force: true }).catch(() => undefined);
590
+ await syncFs.promises.rm(tmp, { force: true }).catch(() => undefined);
591
591
  }
592
592
  return;
593
593
  }
594
594
  const tmp = `${storePath}.${process.pid}.${crypto.randomUUID()}.tmp`;
595
595
  try {
596
- await fs.promises.writeFile(tmp, json, {
596
+ await syncFs.promises.writeFile(tmp, json, {
597
597
  mode: 384,
598
598
  encoding: "utf-8"
599
599
  });
600
- await fs.promises.rename(tmp, storePath);
601
- await fs.promises.chmod(storePath, 384);
600
+ await syncFs.promises.rename(tmp, storePath);
601
+ await syncFs.promises.chmod(storePath, 384);
602
602
  } catch (err) {
603
603
  const code = err && typeof err === "object" && "code" in err ? String(err.code) : null;
604
604
  if (code === "ENOENT") {
605
605
  try {
606
- await fs.promises.mkdir(path.dirname(storePath), { recursive: true });
607
- await fs.promises.writeFile(storePath, json, {
606
+ await syncFs.promises.mkdir(path.dirname(storePath), { recursive: true });
607
+ await syncFs.promises.writeFile(storePath, json, {
608
608
  mode: 384,
609
609
  encoding: "utf-8"
610
610
  });
611
- await fs.promises.chmod(storePath, 384);
611
+ await syncFs.promises.chmod(storePath, 384);
612
612
  } catch (err2) {
613
613
  const code2 = err2 && typeof err2 === "object" && "code" in err2 ? String(err2.code) : null;
614
614
  if (code2 === "ENOENT") {
@@ -620,7 +620,7 @@ async function saveSessionStoreUnlocked(storePath, store, opts) {
620
620
  }
621
621
  throw err;
622
622
  } finally {
623
- await fs.promises.rm(tmp, { force: true });
623
+ await syncFs.promises.rm(tmp, { force: true });
624
624
  }
625
625
  }
626
626
  async function saveSessionStore(storePath, store, opts) {
@@ -2,7 +2,7 @@ import { resolveDefaultSessionStorePath, resolveSessionTranscriptPathInDir } fro
2
2
  import { loadSessionStore } from "./store.js";
3
3
  import { emitSessionTranscriptUpdate } from "../../sessions/transcript-events.js";
4
4
  import { resolveAndPersistSessionFile } from "./session-file.js";
5
- import fs from "node:fs";
5
+ import syncFs from "node:fs";
6
6
  import path from "node:path";
7
7
  import { CURRENT_SESSION_VERSION, SessionManager } from "@mariozechner/pi-coding-agent";
8
8
 
@@ -65,11 +65,11 @@ async function resolveSessionTranscriptFile(params) {
65
65
  });
66
66
  }
67
67
  function ensureSessionTranscriptHeader(params) {
68
- if (fs.existsSync(params.sessionFile)) {
68
+ if (syncFs.existsSync(params.sessionFile)) {
69
69
  return { created: false };
70
70
  }
71
71
  try {
72
- fs.mkdirSync(path.dirname(params.sessionFile), { recursive: true });
72
+ syncFs.mkdirSync(path.dirname(params.sessionFile), { recursive: true });
73
73
  const header = {
74
74
  type: "session",
75
75
  version: CURRENT_SESSION_VERSION,
@@ -77,7 +77,7 @@ function ensureSessionTranscriptHeader(params) {
77
77
  timestamp: new Date().toISOString(),
78
78
  cwd: process.cwd()
79
79
  };
80
- fs.writeFileSync(params.sessionFile, `${JSON.stringify(header)}\n`, {
80
+ syncFs.writeFileSync(params.sessionFile, `${JSON.stringify(header)}\n`, {
81
81
  encoding: "utf-8",
82
82
  mode: 384
83
83
  });
@@ -1,5 +1,5 @@
1
1
  import { coerceSecretRef } from "./types.secrets.js";
2
- import fs from "node:fs";
2
+ import syncFs from "node:fs";
3
3
  import os from "node:os";
4
4
  import path from "node:path";
5
5
 
@@ -254,7 +254,7 @@ function buildTalkConfigResponse(value) {
254
254
  return Object.keys(payload).length > 0 ? payload : undefined;
255
255
  }
256
256
  function readTalkApiKeyFromProfile(deps = {}) {
257
- const fsImpl = deps.fs ?? fs;
257
+ const fsImpl = deps.fs ?? syncFs;
258
258
  const osImpl = deps.os ?? os;
259
259
  const pathImpl = deps.path ?? path;
260
260
  const home = osImpl.homedir();
@@ -458,6 +458,7 @@ const MemorySearchSchema = z.object({
458
458
  baseUrl: z.string().optional(),
459
459
  apiKey: z.string().optional().register(sensitive),
460
460
  headers: z.record(z.string(), z.string()).optional(),
461
+ allowSessionContent: z.boolean().optional(),
461
462
  batch: z.object({
462
463
  enabled: z.boolean().optional(),
463
464
  wait: z.boolean().optional(),
@@ -522,6 +522,10 @@ const FederationMarketplaceOrderSchema = z.object({
522
522
  sellerSyncError: z.string().optional(),
523
523
  sellerSyncedAt: z.string().optional(),
524
524
  sellerAcceptedAt: z.string().optional(),
525
+ peerNodeId: z.string().optional(),
526
+ peerRemoteOrderId: z.string().optional(),
527
+ peerRequestDigest: z.string().optional(),
528
+ peerDeliveryDigest: z.string().optional(),
525
529
  serviceKind: z.string().optional(),
526
530
  title: z.string().optional(),
527
531
  pricing: FederationOfferPricingSchema,
@@ -555,6 +559,7 @@ const WalletSchema = z.object({
555
559
  z.literal("local-socket-signer"),
556
560
  z.literal("alchemy"),
557
561
  z.literal("turnkey"),
562
+ z.literal("wallet-standard"),
558
563
  z.literal("privy")
559
564
  ]).optional() }).strict().optional(),
560
565
  execution: z.object({ mode: z.union([z.literal("manual"), z.literal("autonomous")]).optional() }).strict().optional(),