@fased/fased 0.1.62 → 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 (341) hide show
  1. package/CHANGELOG.md +32 -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/agents/auth-profiles/store.js +267 -31
  12. package/dist/agents/bash-tools.exec.js +10 -4
  13. package/dist/agents/current-model-catalog.js +3 -3
  14. package/dist/agents/memory-search.js +7 -1
  15. package/dist/agents/model-catalog-access.js +1 -2
  16. package/dist/agents/model-catalog-snapshot.js +1 -1
  17. package/dist/agents/model-catalog-source.js +1 -1
  18. package/dist/agents/model-metadata.js +1 -1
  19. package/dist/agents/model-selection.js +2 -28
  20. package/dist/agents/models-config.providers.js +6 -6
  21. package/dist/agents/pi-embedded-runner/compact.js +15 -7
  22. package/dist/agents/pi-embedded-runner/model.js +1 -1
  23. package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
  24. package/dist/agents/pi-embedded-runner/run.js +2 -0
  25. package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
  26. package/dist/agents/pi-tool-definition-adapter.js +16 -1
  27. package/dist/agents/pi-tools.js +2 -1
  28. package/dist/agents/sandbox/config.js +1 -1
  29. package/dist/agents/sandbox/context.js +27 -2
  30. package/dist/agents/skills/env-overrides.js +38 -28
  31. package/dist/agents/skills/trust.js +93 -0
  32. package/dist/agents/skills/workspace.js +128 -0
  33. package/dist/agents/skills-clawhub.js +36 -11
  34. package/dist/agents/skills-marketplace-scan.js +49 -0
  35. package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
  36. package/dist/agents/tools/mining-tool.js +1 -1
  37. package/dist/agents/tools/session-status-tool.js +1 -1
  38. package/dist/agents/tools/wallet-action-tool.js +172 -36
  39. package/dist/agents/tools/wallet-skill-policy.js +65 -23
  40. package/dist/agents/tools/wallet-tool.js +7 -11
  41. package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
  42. package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
  43. package/dist/auto-reply/reply/directive-handling.model.js +2 -1
  44. package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
  45. package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
  46. package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
  47. package/dist/auto-reply/reply/model-selection.js +7 -4
  48. package/dist/auto-reply/reply/session-reset-model.js +4 -4
  49. package/dist/brand.js +1 -1
  50. package/dist/build-info.json +3 -3
  51. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  52. package/dist/channel-web.js +2 -2
  53. package/dist/cli/gateway-cli/run.js +8 -0
  54. package/dist/cli/program/command-registry.js +1 -1
  55. package/dist/cli/program/register.onboard.js +2 -3
  56. package/dist/cli/program/register.wallet.js +16 -123
  57. package/dist/cli/providers-cli.js +1 -1
  58. package/dist/cli/sat-cli.js +129 -2
  59. package/dist/cli/update-cli/update-command.js +260 -11
  60. package/dist/commands/auth-choice.apply.api-providers.js +3 -3
  61. package/dist/commands/doctor-config-flow.js +1 -1
  62. package/dist/commands/doctor-legacy-config.js +2 -13
  63. package/dist/commands/model-picker.js +6 -6
  64. package/dist/commands/models/auth.js +1 -1
  65. package/dist/commands/onboard-auth.config-gateways.js +1 -1
  66. package/dist/commands/onboard-auth.credentials.js +32 -8
  67. package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
  68. package/dist/commands/onboard-non-interactive/local.js +5 -1
  69. package/dist/commands/wallet.js +568 -1911
  70. package/dist/config/config.js +2 -2
  71. package/dist/config/io.js +64 -2
  72. package/dist/config/schema.help.js +8 -7
  73. package/dist/config/schema.labels.js +5 -4
  74. package/dist/config/zod-schema.agent-runtime.js +1 -0
  75. package/dist/config/zod-schema.js +5 -0
  76. package/dist/control-ui/assets/{app-DLil9VO1.js → app-bR-fO5ty.js} +1511 -1555
  77. package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
  78. package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
  79. package/dist/control-ui/assets/{index-DdE_NIXo.js → index-ckCxHwjy.js} +3 -3
  80. package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
  81. package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
  82. package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
  83. package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
  84. package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
  85. package/dist/control-ui/index.html +1 -1
  86. package/dist/control-ui/version.json +1 -1
  87. package/dist/daemon/systemd-system.js +56 -50
  88. package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
  89. package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
  90. package/dist/extensions/sat-mining/src/sat-bond-layout.js +5 -2
  91. package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
  92. package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
  93. package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
  94. package/dist/federation/auto-connect.js +98 -8
  95. package/dist/federation/marketplace-capability-adapter.js +33 -7
  96. package/dist/federation/marketplace-delivery-outbox.js +196 -0
  97. package/dist/federation/marketplace-delivery.js +351 -215
  98. package/dist/federation/marketplace-direct-payment.js +272 -141
  99. package/dist/federation/marketplace-escrow.js +607 -249
  100. package/dist/federation/marketplace-settlement-ledger.js +352 -0
  101. package/dist/federation/offers.js +9 -7
  102. package/dist/federation/peer-auth-v2.js +529 -0
  103. package/dist/gateway/a2a-http.js +425 -96
  104. package/dist/gateway/a2a-settlement.js +259 -153
  105. package/dist/gateway/a2a-task-store.js +524 -0
  106. package/dist/gateway/auth.js +38 -2
  107. package/dist/gateway/config-reload.js +46 -33
  108. package/dist/gateway/durable-capacity.js +31 -0
  109. package/dist/gateway/federation-http.js +540 -135
  110. package/dist/gateway/federation-marketplace-run-store.js +397 -0
  111. package/dist/gateway/federation-marketplace.js +535 -230
  112. package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
  113. package/dist/gateway/security-path.js +1 -1
  114. package/dist/gateway/server-http.js +1084 -1205
  115. package/dist/gateway/server-methods/models.js +1 -1
  116. package/dist/gateway/server-methods/secrets.js +40 -0
  117. package/dist/gateway/server-methods.js +1 -2
  118. package/dist/gateway/server-reload-handlers.js +196 -66
  119. package/dist/gateway/server-runtime-config.js +1 -1
  120. package/dist/gateway/server-secrets-runtime.js +288 -0
  121. package/dist/gateway/server.impl.js +73 -42
  122. package/dist/gateway/sessions-patch.js +3 -5
  123. package/dist/index.js +4 -2
  124. package/dist/infra/fasedhub.js +64 -1
  125. package/dist/infra/local-source-paired-update.js +538 -0
  126. package/dist/infra/restart.js +41 -10
  127. package/dist/infra/update-runner.js +96 -0
  128. package/dist/light-update-status.js +11 -11
  129. package/dist/memory/backend-config.js +2 -1
  130. package/dist/memory/session-files.js +16 -2
  131. package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
  132. package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
  133. package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
  134. package/dist/plugin-sdk/{audio-preflight-Bwi2Oq03.js → audio-preflight-BYxAt775.js} +27 -27
  135. package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
  136. package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
  137. package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
  138. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  139. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  140. package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
  141. package/dist/plugin-sdk/{chunk-items-DzT4L4Ty.js → chunk-items-DIRHG2gJ.js} +1 -1
  142. package/dist/plugin-sdk/command-status.d.ts +2 -2
  143. package/dist/plugin-sdk/command-status.js +27 -27
  144. package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
  145. package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
  146. package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
  147. package/dist/plugin-sdk/{config-schema-BrkmtFxB.js → config-schema-BOT7kHb6.js} +6779 -3696
  148. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  149. package/dist/plugin-sdk/discord.d.ts +6 -6
  150. package/dist/plugin-sdk/discord.js +19 -19
  151. package/dist/plugin-sdk/file-lock.js +35 -4
  152. package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
  153. package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
  154. package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
  155. package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
  156. package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
  157. package/dist/plugin-sdk/index.d.ts +21 -39
  158. package/dist/plugin-sdk/index.js +29 -29
  159. package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
  160. package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
  161. package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
  162. package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
  163. package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
  164. package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
  165. package/dist/plugin-sdk/{monitor-M_ta2lMc.js → monitor-BCFDaqJ-.js} +31 -31
  166. package/dist/plugin-sdk/{monitor-wYVncM9w.js → monitor-BgbjRiPM.js} +32 -32
  167. package/dist/plugin-sdk/{openresponses-http-B2GmeSt4.js → openresponses-http-DFf87SMM.js} +27 -27
  168. package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
  169. package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
  170. package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
  171. package/dist/plugin-sdk/{pairing-message-B3bHYGaw.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
  172. package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
  173. package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
  174. package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
  175. package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
  176. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  177. package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
  178. package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
  179. package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
  180. package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
  181. package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
  182. package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
  183. package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
  184. package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
  185. package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
  186. package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
  187. package/dist/plugin-sdk/sat-runtime.js +29 -29
  188. package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
  189. package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
  190. package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
  191. package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
  192. package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
  193. package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
  194. package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
  195. package/dist/plugin-sdk/{slack-CxE1mfzj.js → slack-BUTt8cxK.js} +39 -39
  196. package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
  197. package/dist/plugin-sdk/slack.d.ts +6 -6
  198. package/dist/plugin-sdk/slack.js +9 -9
  199. package/dist/plugin-sdk/{sticker-cache-CGzGWu00.js → sticker-cache-D0wHVqjt.js} +3 -3
  200. package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
  201. package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
  202. package/dist/plugin-sdk/{telegram-actions-DaEcYQ8r.js → telegram-actions-CC_qN4v0.js} +30 -30
  203. package/dist/plugin-sdk/telegram.d.ts +6 -6
  204. package/dist/plugin-sdk/telegram.js +8 -8
  205. package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
  206. package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
  207. package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
  208. package/dist/plugin-sdk/{types-vcJrC_uv.d.ts → types-C3avNytw.d.ts} +3 -4
  209. package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
  210. package/dist/plugin-sdk/{types-DFAW-n1J.d.ts → types-DWfbSAaM.d.ts} +2 -2
  211. package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
  212. package/dist/plugin-sdk/{web-CInY-lCv.js → web-BXsJ1vqe.js} +32 -32
  213. package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
  214. package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
  215. package/dist/plugin-sdk/whatsapp.d.ts +13 -13
  216. package/dist/plugin-sdk/whatsapp.js +12 -12
  217. package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
  218. package/dist/plugin-sdk/{zod-schema.providers-core-BEbNizPe.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +61 -61
  219. package/dist/providers/refresh.js +1 -1
  220. package/dist/providers/registry.js +1 -1
  221. package/dist/secrets/apply.js +1 -1
  222. package/dist/secrets/runtime.js +1 -1
  223. package/dist/wallet/external-submission-ledger.js +376 -0
  224. package/dist/wallet/legacy-embedded-keystore.js +40 -0
  225. package/dist/wallet/local-socket-signer-archive.js +30 -0
  226. package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
  227. package/dist/wallet/local-socket-signer-policy.js +166 -0
  228. package/dist/wallet/local-socket-signer-protocol.js +561 -118
  229. package/dist/wallet/native-signer-wallet-id.js +25 -0
  230. package/dist/wallet/providers/alchemy-adapter.js +3 -0
  231. package/dist/wallet/providers/local-socket-signer-adapter.js +380 -105
  232. package/dist/wallet/providers/turnkey-adapter.js +292 -34
  233. package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
  234. package/dist/wallet/signer-network-admin.js +184 -0
  235. package/dist/wallet/signer-protocol-v2.generated.js +90 -0
  236. package/dist/wallet/solana-bond-signing.js +157 -69
  237. package/dist/wallet/solana-reviewed-transaction.js +375 -0
  238. package/dist/wallet/solana-swap.js +520 -64
  239. package/dist/wallet/solana-transaction-inspection.js +106 -4
  240. package/dist/wallet/solana-trigger.js +658 -320
  241. package/dist/wallet/turnkey-reviewed-state.js +370 -0
  242. package/dist/wallet/wallet-approval-auth.js +17 -28
  243. package/dist/wallet/wallet-atomic-state.js +53 -0
  244. package/dist/wallet/wallet-canary.js +0 -1
  245. package/dist/wallet/wallet-inbound-events.js +16 -11
  246. package/dist/wallet/wallet-policy-simulation.js +1 -1
  247. package/dist/wallet/wallet-policy.js +90 -36
  248. package/dist/wallet/wallet-provider-capabilities.js +28 -4
  249. package/dist/wallet/wallet-provider-registry.js +57 -44
  250. package/dist/wallet/wallet-provider-resolver.js +62 -63
  251. package/dist/wallet/wallet-runtime-config.js +28 -41
  252. package/dist/wallet/wallet-secrets-store.js +22 -0
  253. package/dist/wallet/wallet-send-approvals.js +1891 -589
  254. package/dist/wallet/wallet-send-execution-ledger.js +292 -0
  255. package/dist/wallet/wallet-settlement-links.js +14 -13
  256. package/dist/wallet/wallet-standard-review.js +353 -0
  257. package/dist/wallet/wallet-status.js +0 -9
  258. package/dist/wallet/wallet-task-ledger.js +16 -2
  259. package/dist/web/auto-reply/heartbeat-runner.js +1 -1
  260. package/dist/web/auto-reply/monitor.js +2 -2
  261. package/dist/wizard/host-security-capability.js +14 -23
  262. package/dist/wizard/onboarding.finalize.js +63 -184
  263. package/dist/wizard/onboarding.host-security.js +117 -1367
  264. package/dist/wizard/onboarding.js +172 -217
  265. package/dist/wizard/onboarding.wallet.js +232 -785
  266. package/extensions/acpx/package.json +1 -1
  267. package/extensions/bluebubbles/package.json +1 -1
  268. package/extensions/copilot-proxy/package.json +1 -1
  269. package/extensions/diagnostics-otel/package.json +1 -1
  270. package/extensions/fased-federation/package.json +1 -1
  271. package/extensions/google-gemini-cli-auth/package.json +1 -1
  272. package/extensions/imessage/package.json +1 -1
  273. package/extensions/irc/package.json +1 -1
  274. package/extensions/line/package.json +1 -1
  275. package/extensions/llm-task/package.json +1 -1
  276. package/extensions/lobster/package.json +1 -1
  277. package/extensions/matrix/CHANGELOG.md +12 -0
  278. package/extensions/matrix/package.json +1 -1
  279. package/extensions/mattermost/package.json +1 -1
  280. package/extensions/memory-core/package.json +2 -2
  281. package/extensions/memory-lancedb/package.json +1 -1
  282. package/extensions/minimax-portal-auth/package.json +1 -1
  283. package/extensions/msteams/CHANGELOG.md +12 -0
  284. package/extensions/msteams/package.json +1 -1
  285. package/extensions/nextcloud-talk/package.json +1 -1
  286. package/extensions/nostr/CHANGELOG.md +12 -0
  287. package/extensions/nostr/package.json +1 -1
  288. package/extensions/open-prose/package.json +1 -1
  289. package/extensions/sat-mining/index.ts +498 -153
  290. package/extensions/sat-mining/package.json +1 -1
  291. package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
  292. package/extensions/sat-mining/src/audit-store.ts +50 -5
  293. package/extensions/sat-mining/src/claim-service.ts +85 -14
  294. package/extensions/sat-mining/src/config.ts +9 -0
  295. package/extensions/sat-mining/src/cycle-progress.ts +16 -8
  296. package/extensions/sat-mining/src/epoch-service.ts +9 -5
  297. package/extensions/sat-mining/src/gateway-runner.ts +21 -1
  298. package/extensions/sat-mining/src/protocol-contract.ts +45 -1
  299. package/extensions/sat-mining/src/recovery-service.ts +312 -0
  300. package/extensions/sat-mining/src/round-watcher.ts +391 -81
  301. package/extensions/sat-mining/src/rpc-read.ts +330 -89
  302. package/extensions/sat-mining/src/runtime.ts +14 -0
  303. package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
  304. package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
  305. package/extensions/sat-mining/src/solana-submit.ts +1199 -428
  306. package/extensions/sat-mining/src/submission-ledger.ts +433 -0
  307. package/extensions/signal/package.json +1 -1
  308. package/extensions/synology-chat/package.json +1 -1
  309. package/extensions/tlon/package.json +1 -1
  310. package/extensions/twitch/CHANGELOG.md +12 -0
  311. package/extensions/twitch/package.json +1 -1
  312. package/extensions/voice-call/CHANGELOG.md +12 -0
  313. package/extensions/voice-call/package.json +1 -1
  314. package/extensions/zalo/CHANGELOG.md +12 -0
  315. package/extensions/zalo/package.json +1 -1
  316. package/extensions/zalouser/CHANGELOG.md +12 -0
  317. package/extensions/zalouser/package.json +1 -1
  318. package/install.sh +4955 -0
  319. package/package.json +23 -5
  320. package/scripts/fased-host-updater.mjs +1421 -0
  321. package/scripts/fased-host-updaterctl.mjs +186 -0
  322. package/scripts/fased-managed-service.sh +36 -0
  323. package/scripts/fased-managed-updater.mjs +3065 -156
  324. package/scripts/fased-signer-enroll-hosting.sh +275 -0
  325. package/scripts/fased-signer-network-hosting.sh +143 -0
  326. package/scripts/fased-signer-owner-policy.mjs +1430 -0
  327. package/scripts/fased-signer-policy-hosting.sh +50 -0
  328. package/scripts/fased-signer-policy-local.sh +26 -0
  329. package/scripts/hosted-release-manifest.mjs +185 -0
  330. package/scripts/install-fased-signerd.sh +183 -108
  331. package/scripts/install-managed-runtime.mjs +212 -10
  332. package/scripts/managed-runtime-layout.mjs +75 -3
  333. package/scripts/migrate-hosted-signer-v2.mjs +58 -0
  334. package/scripts/start-managed.sh +169 -360
  335. package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
  336. package/dist/plugin-sdk/tmp-fased-dir-CS6zsYEE.d.ts +0 -77
  337. package/dist/wallet/local-socket-signer-broker.js +0 -224
  338. package/dist/wallet/local-socket-signer-custody.js +0 -42
  339. package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
  340. package/dist/wallet/providers/privy-adapter.js +0 -80
  341. package/dist/wallet/wallet-custody.js +0 -1836
@@ -2,6 +2,7 @@ import { CONFIG_DIR, resolveUserPath } from "../../utils.js";
2
2
  import { createSubsystemLogger } from "../../logging/subsystem.js";
3
3
  import { normalizeSkillFilter } from "./filter.js";
4
4
  import { resolveEffectiveAgentSkillFilter } from "./agent-filter.js";
5
+ import { isMarketplaceSkillDir, marketplaceSkillIdsFromEntries } from "./trust.js";
5
6
  import { resolveSandboxPath } from "../sandbox-paths.js";
6
7
  import { parseFrontmatter, resolveFasedAgentMetadata, resolveSkillInvocationPolicy, resolveSkillKey } from "./frontmatter.js";
7
8
  import { shouldIncludeSkill } from "./config.js";
@@ -17,6 +18,7 @@ import { formatSkillsForPrompt, loadSkillsFromDir } from "@mariozechner/pi-codin
17
18
  const fsp = syncFs.promises;
18
19
  const skillsLogger = createSubsystemLogger("skills");
19
20
  const skillCommandDebugOnce = new Set();
21
+ const CLAUDE_BUNDLE_MANIFEST_MAX_BYTES = 64 * 1024;
20
22
  /**
21
23
  * Replace the user's home directory prefix with `~` in skill file paths
22
24
  * to reduce system prompt token usage. Models understand `~` expansion,
@@ -392,6 +394,7 @@ function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
392
394
  })),
393
395
  ...skillFilter === undefined ? {} : { skillFilter },
394
396
  resolvedSkills,
397
+ marketplaceSkillIds: marketplaceSkillIdsFromEntries(eligible),
395
398
  version: opts?.snapshotVersion
396
399
  };
397
400
  }
@@ -407,6 +410,116 @@ function resolveEffectiveSkillFilter(opts) {
407
410
  }
408
411
  return undefined;
409
412
  }
413
+ function isExplicitlyEnabledClaudeBundle(pluginId, config) {
414
+ const plugins = config?.plugins;
415
+ if (plugins?.enabled === false || plugins?.deny?.includes(pluginId)) {
416
+ return false;
417
+ }
418
+ if (plugins?.allow?.length && !plugins.allow.includes(pluginId)) {
419
+ return false;
420
+ }
421
+ return plugins?.entries?.[pluginId]?.enabled === true;
422
+ }
423
+ function stripMarkdownFrontmatter(content) {
424
+ const normalized = content.replace(/\r\n?/gu, "\n");
425
+ if (!normalized.startsWith("---\n")) {
426
+ return normalized.trim();
427
+ }
428
+ const end = normalized.indexOf("\n---", 4);
429
+ if (end < 0) {
430
+ return "";
431
+ }
432
+ return normalized.slice(end + 4).replace(/^\n/u, "").trim();
433
+ }
434
+ function listImmediateDirectories(root) {
435
+ try {
436
+ return syncFs.readdirSync(root, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.isSymbolicLink()).map((entry) => path.join(root, entry.name));
437
+ } catch {
438
+ return [];
439
+ }
440
+ }
441
+ function loadClaudeBundleCommandSpecs(params) {
442
+ const roots = [
443
+ ...listImmediateDirectories(path.join(CONFIG_DIR, "extensions")),
444
+ ...listImmediateDirectories(path.join(params.workspaceDir, ".fased", "extensions")),
445
+ ...(params.config?.plugins?.load?.paths ?? []).map((entry) => resolveUserPath(entry))
446
+ ];
447
+ const seen = new Set();
448
+ const specs = [];
449
+ for (const unresolvedRoot of roots) {
450
+ let root;
451
+ try {
452
+ const stat = syncFs.lstatSync(unresolvedRoot);
453
+ if (!stat.isDirectory() || stat.isSymbolicLink()) {
454
+ continue;
455
+ }
456
+ root = syncFs.realpathSync(unresolvedRoot);
457
+ } catch {
458
+ continue;
459
+ }
460
+ if (seen.has(root) || isMarketplaceSkillDir(root)) {
461
+ continue;
462
+ }
463
+ seen.add(root);
464
+ const manifestPath = path.join(root, ".claude-plugin", "plugin.json");
465
+ let pluginId = "";
466
+ try {
467
+ const stat = syncFs.lstatSync(manifestPath);
468
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.size <= 0 || stat.size > CLAUDE_BUNDLE_MANIFEST_MAX_BYTES) {
469
+ continue;
470
+ }
471
+ const manifest = JSON.parse(syncFs.readFileSync(manifestPath, "utf8"));
472
+ pluginId = typeof manifest.name === "string" ? manifest.name.trim() : "";
473
+ } catch {
474
+ continue;
475
+ }
476
+ if (!pluginId || !isExplicitlyEnabledClaudeBundle(pluginId, params.config)) {
477
+ continue;
478
+ }
479
+ const commandsDir = path.join(root, "commands");
480
+ let entries;
481
+ try {
482
+ const stat = syncFs.lstatSync(commandsDir);
483
+ if (!stat.isDirectory() || stat.isSymbolicLink()) {
484
+ continue;
485
+ }
486
+ entries = syncFs.readdirSync(commandsDir, { withFileTypes: true });
487
+ } catch {
488
+ continue;
489
+ }
490
+ for (const entry of entries.filter((candidate) => candidate.isFile() && !candidate.isSymbolicLink()).toSorted((left, right) => left.name.localeCompare(right.name)).slice(0, params.maxCandidates)) {
491
+ if (path.extname(entry.name).toLowerCase() !== ".md") {
492
+ continue;
493
+ }
494
+ const filePath = path.join(commandsDir, entry.name);
495
+ let content;
496
+ try {
497
+ const stat = syncFs.lstatSync(filePath);
498
+ if (stat.size <= 0 || stat.size > params.maxFileBytes) {
499
+ continue;
500
+ }
501
+ content = syncFs.readFileSync(filePath, "utf8");
502
+ } catch {
503
+ continue;
504
+ }
505
+ const frontmatter = parseFrontmatter(content);
506
+ const skillName = frontmatter.name?.trim();
507
+ const description = frontmatter.description?.trim();
508
+ const promptTemplate = stripMarkdownFrontmatter(content);
509
+ if (!skillName || !description || !promptTemplate) {
510
+ continue;
511
+ }
512
+ specs.push({
513
+ name: sanitizeSkillCommandName(skillName),
514
+ skillName,
515
+ description: description.length > SKILL_COMMAND_DESCRIPTION_MAX_LENGTH ? `${description.slice(0, SKILL_COMMAND_DESCRIPTION_MAX_LENGTH - 1)}…` : description,
516
+ promptTemplate,
517
+ sourceFilePath: filePath
518
+ });
519
+ }
520
+ }
521
+ return specs;
522
+ }
410
523
  function resolveWorkspaceSkillPromptState(workspaceDir, opts) {
411
524
  const skillEntries = opts?.entries ?? loadSkillEntries(workspaceDir, opts);
412
525
  const eligible = filterSkillEntries(skillEntries, opts?.config, resolveEffectiveSkillFilter(opts), opts?.eligibility);
@@ -599,9 +712,24 @@ function buildWorkspaceSkillCommandSpecs(workspaceDir, opts) {
599
712
  name: unique,
600
713
  skillName: rawName,
601
714
  description,
715
+ sourceFilePath: entry.skill.filePath,
602
716
  ...dispatch ? { dispatch } : {}
603
717
  });
604
718
  }
719
+ const limits = resolveSkillsLimits(opts?.config);
720
+ for (const bundleCommand of loadClaudeBundleCommandSpecs({
721
+ workspaceDir,
722
+ config: opts?.config,
723
+ maxCandidates: limits.maxCandidatesPerRoot,
724
+ maxFileBytes: limits.maxSkillFileBytes
725
+ })) {
726
+ const unique = resolveUniqueSkillCommandName(bundleCommand.name, used);
727
+ used.add(unique.toLowerCase());
728
+ specs.push({
729
+ ...bundleCommand,
730
+ name: unique
731
+ });
732
+ }
605
733
  return specs;
606
734
  }
607
735
 
@@ -163,9 +163,17 @@ async function resolveInstallVersion(params) {
163
163
  if (!resolvedVersion) {
164
164
  throw new Error(`Skill "${params.slug}" has no installable version.`);
165
165
  }
166
+ const versionMetadataMatches = detail.latestVersion?.version === resolvedVersion;
167
+ const expectedIntegrity = versionMetadataMatches ? detail.latestVersion?.integrity : undefined;
168
+ const expectedSha256 = versionMetadataMatches ? detail.latestVersion?.sha256 : undefined;
169
+ if (!expectedIntegrity && !expectedSha256) {
170
+ throw new Error(`Skill "${params.slug}"@${resolvedVersion} has no registry-published archive digest; refusing an unverifiable install.`);
171
+ }
166
172
  return {
167
173
  detail,
168
- version: resolvedVersion
174
+ version: resolvedVersion,
175
+ expectedIntegrity,
176
+ expectedSha256
169
177
  };
170
178
  }
171
179
  async function installExtractedSkill(params) {
@@ -259,10 +267,10 @@ function buildMarketplaceUpdateReview(params) {
259
267
  message: finding.message
260
268
  }));
261
269
  const reasons = [];
262
- if (params.isUpdate && params.permissions.risky && permissionDigestChanged) {
270
+ if (params.permissions.risky && permissionDigestChanged) {
263
271
  reasons.push("requested permissions changed");
264
272
  }
265
- if (params.isUpdate && addedScanFindings.length > 0) {
273
+ if (addedScanFindings.length > 0) {
266
274
  reasons.push("archive scan added reviewable findings");
267
275
  }
268
276
  return {
@@ -278,7 +286,7 @@ function buildMarketplaceUpdateReview(params) {
278
286
  }
279
287
  function assertUpdateReviewAllowed(params) {
280
288
  if (params.review.approvalRequired && params.allowPermissionChanges !== true) {
281
- throw new Error(`ClawHub skill update requires permission review (${params.review.reasons.join(", ")}); rerun with explicit permission-change approval.`);
289
+ throw new Error(`ClawHub skill install or update requires permission review (${params.review.reasons.join(", ")}); rerun with explicit permission-change approval.`);
282
290
  }
283
291
  }
284
292
  async function performClawHubSkillInstall(params) {
@@ -289,7 +297,7 @@ async function performClawHubSkillInstall(params) {
289
297
  allowRegistries: params.allowRegistries,
290
298
  allowTrackedLegacyOrigin: params.force && Boolean(params.previousOrigin)
291
299
  });
292
- const { detail, version } = await resolveInstallVersion({
300
+ const { detail, version, expectedIntegrity, expectedSha256 } = await resolveInstallVersion({
293
301
  slug: params.slug,
294
302
  version: params.version,
295
303
  baseUrl: params.baseUrl
@@ -305,12 +313,15 @@ async function performClawHubSkillInstall(params) {
305
313
  const archive = await downloadClawHubSkillArchive({
306
314
  slug: params.slug,
307
315
  version,
308
- baseUrl: params.baseUrl
316
+ baseUrl: params.baseUrl,
317
+ expectedIntegrity,
318
+ expectedSha256
309
319
  });
310
320
  try {
311
321
  let extractedPermissions = null;
312
322
  let archiveScan = null;
313
323
  let updateReview = null;
324
+ let contentSha256 = null;
314
325
  const install = await withExtractedArchiveRoot({
315
326
  archivePath: archive.archivePath,
316
327
  tempDirPrefix: "fased-skill-clawhub-",
@@ -327,6 +338,7 @@ async function performClawHubSkillInstall(params) {
327
338
  }
328
339
  params.logger?.info?.(`Marketplace archive scan for ${params.slug}: ${formatArchiveScanFindings(scan)}`);
329
340
  const inspection = await inspectSkillMarketplaceManifest(rootDir);
341
+ contentSha256 = await computeSkillFingerprint(rootDir);
330
342
  extractedPermissions = inspection.permissions;
331
343
  updateReview = buildMarketplaceUpdateReview({
332
344
  previousOrigin: params.previousOrigin,
@@ -360,6 +372,9 @@ async function performClawHubSkillInstall(params) {
360
372
  if (!updateReview) {
361
373
  throw new Error("failed to review marketplace skill update");
362
374
  }
375
+ if (!contentSha256) {
376
+ throw new Error("failed to fingerprint marketplace skill content");
377
+ }
363
378
  const installedAt = Date.now();
364
379
  await writeClawHubSkillOrigin(install.targetDir, {
365
380
  version: 1,
@@ -367,6 +382,9 @@ async function performClawHubSkillInstall(params) {
367
382
  slug: params.slug,
368
383
  installedVersion: version,
369
384
  installedAt,
385
+ archiveSha256: archive.sha256,
386
+ archiveIntegrityVerified: archive.integrityVerified,
387
+ contentSha256,
370
388
  permissions: extractedPermissions,
371
389
  installScan: archiveScan,
372
390
  lastUpdateReview: updateReview
@@ -374,7 +392,10 @@ async function performClawHubSkillInstall(params) {
374
392
  const lock = await readClawHubSkillsLockfile(params.workspaceDir);
375
393
  lock.skills[params.slug] = {
376
394
  version,
377
- installedAt
395
+ installedAt,
396
+ archiveSha256: archive.sha256,
397
+ archiveIntegrityVerified: archive.integrityVerified,
398
+ contentSha256
378
399
  };
379
400
  await writeClawHubSkillsLockfile(params.workspaceDir, lock);
380
401
  return {
@@ -432,7 +453,7 @@ async function previewTrackedSkillUpdateFromClawHub(params) {
432
453
  allowRegistries: params.allowRegistries,
433
454
  allowTrackedLegacyOrigin: Boolean(params.previousOrigin)
434
455
  });
435
- const { version } = await resolveInstallVersion({
456
+ const { version, expectedIntegrity, expectedSha256 } = await resolveInstallVersion({
436
457
  slug: params.slug,
437
458
  baseUrl: params.baseUrl
438
459
  });
@@ -440,7 +461,9 @@ async function previewTrackedSkillUpdateFromClawHub(params) {
440
461
  const archive = await downloadClawHubSkillArchive({
441
462
  slug: params.slug,
442
463
  version,
443
- baseUrl: params.baseUrl
464
+ baseUrl: params.baseUrl,
465
+ expectedIntegrity,
466
+ expectedSha256
444
467
  });
445
468
  try {
446
469
  const targetDir = resolveSkillInstallDir(params.workspaceDir, params.slug);
@@ -505,7 +528,7 @@ async function previewSkillInstallFromClawHub(params) {
505
528
  registry,
506
529
  allowRegistries: params.allowRegistries
507
530
  });
508
- const { detail, version } = await resolveInstallVersion({
531
+ const { detail, version, expectedIntegrity, expectedSha256 } = await resolveInstallVersion({
509
532
  slug,
510
533
  version: params.version,
511
534
  baseUrl: params.baseUrl
@@ -521,7 +544,9 @@ async function previewSkillInstallFromClawHub(params) {
521
544
  const archive = await downloadClawHubSkillArchive({
522
545
  slug,
523
546
  version,
524
- baseUrl: params.baseUrl
547
+ baseUrl: params.baseUrl,
548
+ expectedIntegrity,
549
+ expectedSha256
525
550
  });
526
551
  try {
527
552
  let permissions = null;
@@ -76,6 +76,25 @@ const SUSPICIOUS_SCRIPT_EXTENSIONS = new Set([
76
76
  ".sh",
77
77
  ".zsh"
78
78
  ]);
79
+ const REVIEWABLE_CODE_EXTENSIONS = new Set([
80
+ ".cjs",
81
+ ".go",
82
+ ".js",
83
+ ".jsx",
84
+ ".mjs",
85
+ ".py",
86
+ ".rb",
87
+ ".rs",
88
+ ".ts",
89
+ ".tsx"
90
+ ]);
91
+ const MARKDOWN_EXTENSIONS = new Set([".md", ".mdx"]);
92
+ const MARKDOWN_INSTRUCTION_RISKS = [
93
+ /ignore\s+(?:all\s+)?(?:previous|prior|system|developer)\s+instructions?/iu,
94
+ /(?:upload|send|exfiltrat|leak)[^\n]{0,80}(?:secret|credential|token|private\s+key|seed\s+phrase)/iu,
95
+ /(?:\.ssh|\.aws|\.gnupg|\.env|process\.env|private\s+key|seed\s+phrase)/iu,
96
+ /curl\s+[^\n|]{0,160}\|\s*(?:ba)?sh/iu
97
+ ];
79
98
  const DEPENDENCY_MANIFEST_FILE_NAMES = new Set([
80
99
  "Cargo.toml",
81
100
  "Gemfile",
@@ -132,6 +151,13 @@ function inspectMarketplaceFilePath(params) {
132
151
  path: params.path,
133
152
  message: `skill archive contains script file "${basename}"`
134
153
  });
154
+ } else if (REVIEWABLE_CODE_EXTENSIONS.has(ext)) {
155
+ addFinding(params.findings, {
156
+ severity: "warn",
157
+ code: "executable_source_file",
158
+ path: params.path,
159
+ message: `skill archive contains executable source file "${basename}"; review it before granting tools`
160
+ });
135
161
  }
136
162
  if (DEPENDENCY_MANIFEST_FILE_NAMES.has(basename)) {
137
163
  addFinding(params.findings, {
@@ -142,6 +168,22 @@ function inspectMarketplaceFilePath(params) {
142
168
  });
143
169
  }
144
170
  }
171
+ async function inspectMarketplaceMarkdown(params) {
172
+ const fullPath = path.join(params.rootDir, params.relativePath);
173
+ const stat = await fs.stat(fullPath);
174
+ if (stat.size > MAX_FILE_BYTES) {
175
+ return;
176
+ }
177
+ const content = await fs.readFile(fullPath, "utf8");
178
+ if (MARKDOWN_INSTRUCTION_RISKS.some((pattern) => pattern.test(content))) {
179
+ addFinding(params.findings, {
180
+ severity: "warn",
181
+ code: "instruction_risk",
182
+ path: toPosix(params.relativePath),
183
+ message: "skill instructions reference prompt overrides, secrets, sensitive paths, or shell-pipe execution; manual review is required"
184
+ });
185
+ }
186
+ }
145
187
  async function inspectMarketplaceSourceCode(params) {
146
188
  try {
147
189
  const summary = await scanDirectoryWithSummary(params.rootDir, {
@@ -289,6 +331,13 @@ async function scanSkillMarketplaceArchive(rootDir) {
289
331
  path: posixPath,
290
332
  findings
291
333
  });
334
+ if (MARKDOWN_EXTENSIONS.has(path.posix.extname(entry.name.toLowerCase()))) {
335
+ await inspectMarketplaceMarkdown({
336
+ rootDir,
337
+ relativePath,
338
+ findings
339
+ });
340
+ }
292
341
  }
293
342
  }
294
343
  await inspectMarketplaceSourceCode({
@@ -417,7 +417,7 @@ function createMarketplaceSearchTool(params) {
417
417
  orders: orders.filter((entry) => {
418
418
  const paymentStatus = entry.order.paymentIntent?.status;
419
419
  const settlementStatus = entry.order.settlement?.status;
420
- return paymentStatus === "verified" || settlementStatus === "settled" || Boolean(entry.order.invoiceId || entry.order.receiptId || entry.order.txRef);
420
+ return paymentStatus === "verified" || settlementStatus === "settled" || settlementStatus === "verified";
421
421
  })
422
422
  });
423
423
  }
@@ -447,7 +447,7 @@ For scheduled or conditional automation, create a scheduled task whose isolated
447
447
  });
448
448
  }
449
449
  case "capital_init": return jsonResult(await callGateway("sat.initMinerCapital", gatewayOpts, { authority: readStringParam(params, "authority") }));
450
- case "reserve_top_up": return jsonResult(await callGateway("sat.bootstrapRegistryReserve", gatewayOpts, {}));
450
+ case "reserve_top_up": return jsonResult(await callGateway("sat.topUpRegistryReserve", gatewayOpts, { targetBalanceLamports: 0 }));
451
451
  case "deposit_capital": return jsonResult(await callGateway("sat.depositMinerCapital", gatewayOpts, { lamports: parseLamportsInput(params) }));
452
452
  case "withdraw_capital": return jsonResult(await callGateway("sat.withdrawMinerCapital", gatewayOpts, { lamports: parseLamportsInput(params) }));
453
453
  case "set_commit": return jsonResult(await callGateway("sat.setActiveCommit", gatewayOpts, {
@@ -119,7 +119,7 @@ async function resolveModelOverride(params) {
119
119
  throw new Error(`Unrecognized model "${raw}".`);
120
120
  }
121
121
  const key = modelKey(resolved.ref.provider, resolved.ref.model);
122
- if (allowed.allowedKeys.size > 0 && !allowed.allowedKeys.has(key)) {
122
+ if (!allowed.allowAny && !allowed.allowedKeys.has(key)) {
123
123
  throw new Error(`Model "${key}" is not allowed.`);
124
124
  }
125
125
  const isDefault = resolved.ref.provider === configDefault.provider && resolved.ref.model === configDefault.model;