@fased/fased 0.1.67 → 0.1.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +20 -22
  3. package/config/sat-runtime.env +6 -2
  4. package/config/signer-protocol-v2.json +10 -0
  5. package/dist/agents/tools/wallet-action-tool.js +2 -0
  6. package/dist/agents/tools/wallet-tool.js +5 -3
  7. package/dist/brand.js +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  10. package/dist/cli/program/register.wallet.js +119 -5
  11. package/dist/commands/wallet.js +1286 -74
  12. package/dist/config/sat-runtime-ids.js +6 -1
  13. package/dist/control-ui/assets/{app-De8gTtZU.js → app-BLFLoFPk.js} +1526 -1526
  14. package/dist/control-ui/assets/{federation-DgA9e-Pn.js → federation-SGMAnM_8.js} +2 -2
  15. package/dist/control-ui/assets/{index-DYYBRBOS.js → index-S88kp5ZQ.js} +3 -3
  16. package/dist/control-ui/assets/{mining-Dg-3ll0F.js → mining-ClI8RW4u.js} +2 -2
  17. package/dist/control-ui/assets/{wallet-DvStR_AT.js → wallet-CRIhDQbW.js} +325 -156
  18. package/dist/control-ui/index.html +1 -1
  19. package/dist/control-ui/version.json +1 -1
  20. package/dist/gateway/server-http.js +394 -55
  21. package/dist/mining/mainnet-sync.js +67 -5
  22. package/dist/operator/operator-readiness.js +1 -1
  23. package/dist/plugin-sdk/{actions-DRu135h0.js → actions-B-Vwj64K.js} +3 -3
  24. package/dist/plugin-sdk/{allow-list-DyAxs4yw.js → allow-list-Bf45HfoP.js} +1 -1
  25. package/dist/plugin-sdk/{audio-preflight-Dq_rJtqH.js → audio-preflight-CS7Q_7-R.js} +26 -25
  26. package/dist/plugin-sdk/{audit-C5d2z5U1.js → audit-CUULWG22.js} +1 -1
  27. package/dist/plugin-sdk/{channel-access-configure-DaI5wevh.js → channel-access-configure-BoUsC-Ys.js} +1 -1
  28. package/dist/plugin-sdk/{channel-adapters.discord-BS4S4Svh.js → channel-adapters.discord-DSiR4X2Y.js} +1 -1
  29. package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
  30. package/dist/plugin-sdk/channel-plugin-common.js +1 -1
  31. package/dist/plugin-sdk/{chunk-CyoyqpbG.js → chunk-CBpl-AiQ.js} +1 -1
  32. package/dist/plugin-sdk/{chunk-items-Dunoq4Er.js → chunk-items-BLBZNORg.js} +1 -1
  33. package/dist/plugin-sdk/command-status.js +26 -25
  34. package/dist/plugin-sdk/{commands-registry-BfqdEWdF.js → commands-registry-G5KXSi_y.js} +1 -1
  35. package/dist/plugin-sdk/{config-schema--vl89M7d.js → config-schema-BiBOUW89.js} +431 -125
  36. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  37. package/dist/plugin-sdk/{diagnostic-DLL_zekv.js → diagnostic-sYs6Agr-.js} +1 -1
  38. package/dist/plugin-sdk/{directory-live-CSuYxdwk.js → directory-live-BXMpuYAF.js} +1 -1
  39. package/dist/plugin-sdk/{directory-live-Dw7ZgC9_.js → directory-live-Rn1BzPof.js} +1 -1
  40. package/dist/plugin-sdk/discord.d.ts +4 -4
  41. package/dist/plugin-sdk/discord.js +20 -20
  42. package/dist/plugin-sdk/{draft-stream-controls-BqchW1vi.js → draft-stream-controls-CMNdKSx-.js} +1 -1
  43. package/dist/plugin-sdk/{guilds-CDhRIX57.js → guilds-Dkwl0yHv.js} +1 -1
  44. package/dist/plugin-sdk/{handle-action-hvwapMKg.js → handle-action-CRdM6B-8.js} +15 -15
  45. package/dist/plugin-sdk/index.d.ts +15 -15
  46. package/dist/plugin-sdk/index.js +28 -27
  47. package/dist/plugin-sdk/{login-Ca583Okc.js → login-D7WnK8-P.js} +1 -1
  48. package/dist/plugin-sdk/{login-qr-CGciBSNP.js → login-qr-CRueOKZK.js} +2 -114
  49. package/dist/plugin-sdk/{markdown-tables-DCOXEUfZ.js → markdown-tables-d7GlUs5R.js} +1 -1
  50. package/dist/plugin-sdk/{media-CAdQF5TG.js → media-BAoaxCrt.js} +1 -1
  51. package/dist/plugin-sdk/{monitor-DrTy_4CL.js → monitor-WXdn4mR-.js} +34 -33
  52. package/dist/plugin-sdk/{monitor-CV1sr0p2.js → monitor-xzVAPbg2.js} +44 -43
  53. package/dist/plugin-sdk/{openresponses-http-BAjgURZa.js → openresponses-http-DnI1LFgq.js} +26 -25
  54. package/dist/plugin-sdk/{outbound-attachment-QqTnIhZL.js → outbound-attachment-CyXM3cAv.js} +1 -1
  55. package/dist/plugin-sdk/{outbound-BgVDdHxx.js → outbound-zB6llMGW.js} +6 -6
  56. package/dist/plugin-sdk/{pairing-message-BjIJYVvp.d.ts → pairing-message-CiTcdD6m.d.ts} +1 -1
  57. package/dist/plugin-sdk/{pairing-store-BChahgI2.js → pairing-store-B6J2C0vP.js} +1 -1
  58. package/dist/plugin-sdk/{pi-model-discovery-runtime-DxTMz_XF.js → pi-model-discovery-runtime-6JzLw9Gk.js} +1 -1
  59. package/dist/plugin-sdk/{probe-CJb5uR8B.js → probe-BM7Oe40M.js} +2 -2
  60. package/dist/plugin-sdk/{probe-l_whvGLY.js → probe-CMPksimh.js} +1 -1
  61. package/dist/plugin-sdk/{probe-BFroeK3g.js → probe-oVp12D6L.js} +1 -1
  62. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
  63. package/dist/plugin-sdk/{pw-ai-DlxqX6Es.js → pw-ai-DZYLDC-S.js} +1 -1
  64. package/dist/plugin-sdk/qr-image-B4MlMG4N.js +115 -0
  65. package/dist/plugin-sdk/{replies-ChYo5ZQM.js → replies-CY-V0Zob.js} +3 -3
  66. package/dist/plugin-sdk/{resolve-channels-87LZrFk_.js → resolve-channels-1HtDcMqh.js} +2 -2
  67. package/dist/plugin-sdk/{resolve-channels-_-nV-EK2.js → resolve-channels-CU72Qh2j.js} +1 -1
  68. package/dist/plugin-sdk/{resolve-outbound-target-D-KGgHJZ.js → resolve-outbound-target-nQSBVYz9.js} +2 -2
  69. package/dist/plugin-sdk/{resolve-route-C8tvQm8Z.js → resolve-route-Dufnu2cT.js} +1 -1
  70. package/dist/plugin-sdk/{resolve-users-DN9VQBwv.js → resolve-users-Bk_ss2vC.js} +1 -1
  71. package/dist/plugin-sdk/{resolve-users-V6dHh_2B.js → resolve-users-IevCOk4W.js} +2 -2
  72. package/dist/plugin-sdk/{runtime-2B9_WKoI.js → runtime-CXSQwMaR.js} +1 -1
  73. package/dist/plugin-sdk/{runtime-dependency-nup8niQL.js → runtime-dependency-DczkvPxn.js} +9 -9
  74. package/dist/plugin-sdk/sat-runtime.d.ts +105 -10
  75. package/dist/plugin-sdk/sat-runtime.js +26 -25
  76. package/dist/plugin-sdk/{send-DCO441U7.js → send-BXBS_mRK.js} +8 -8
  77. package/dist/plugin-sdk/{send-CFzGKJXo.js → send-D-HfKQZm.js} +4 -4
  78. package/dist/plugin-sdk/{send-B6KkGKZD.js → send-D1j12ZgX.js} +5 -5
  79. package/dist/plugin-sdk/{send-q9HXrSwK.js → send-DWKm6yay.js} +10 -10
  80. package/dist/plugin-sdk/{send-gDoGA-7e.js → send-Di1Jit3L.js} +7 -7
  81. package/dist/plugin-sdk/{skill-commands-FKEPLS7T.js → skill-commands-iJtvpqgb.js} +2 -2
  82. package/dist/plugin-sdk/{slack-DSC6T2KW.js → slack-CkIRVDUK.js} +45 -44
  83. package/dist/plugin-sdk/{slack-actions-DhbMcp8M.js → slack-actions-BzUEszJa.js} +10 -10
  84. package/dist/plugin-sdk/slack.d.ts +4 -4
  85. package/dist/plugin-sdk/slack.js +6 -6
  86. package/dist/plugin-sdk/{sticker-cache-C0l_5IKg.js → sticker-cache-Dpap5ce_.js} +2 -2
  87. package/dist/plugin-sdk/{tables-B3jr0Pvq.js → tables-_1W36GII.js} +2 -2
  88. package/dist/plugin-sdk/{targets-CtSbTxYX.js → targets-DDbNnLnB.js} +2 -2
  89. package/dist/plugin-sdk/{telegram-actions-BwGBIVDE.js → telegram-actions-Cewdga8H.js} +30 -29
  90. package/dist/plugin-sdk/telegram.d.ts +4 -4
  91. package/dist/plugin-sdk/telegram.js +3 -3
  92. package/dist/plugin-sdk/{thread-bindings.lifecycle-QbkNl-m6.js → thread-bindings.lifecycle-Y9T3CQGf.js} +3 -3
  93. package/dist/plugin-sdk/{thread-bindings.state-D9hg_M1c.js → thread-bindings.state-D2oOWDpv.js} +1 -1
  94. package/dist/plugin-sdk/{tmp-fased-dir-DXnGKKgi.d.ts → tmp-fased-dir-BSEHc8MQ.d.ts} +8 -2
  95. package/dist/plugin-sdk/{types-eG9aYqXF.d.ts → types-BakzIzGN.d.ts} +1 -1
  96. package/dist/plugin-sdk/{types-Cegc86EP.d.ts → types-CzF0YQqK.d.ts} +3 -3
  97. package/dist/plugin-sdk/{web-C_AH5PyB.js → web-DGWi7i3B.js} +33 -32
  98. package/dist/plugin-sdk/{whatsapp-actions-Bj_rOncr.js → whatsapp-actions-Blu9-eX-.js} +9 -9
  99. package/dist/plugin-sdk/{whatsapp-heartbeat-B1WHkJIg.js → whatsapp-heartbeat-DjmQM7hq.js} +2 -2
  100. package/dist/plugin-sdk/whatsapp.d.ts +9 -9
  101. package/dist/plugin-sdk/whatsapp.js +7 -7
  102. package/dist/plugin-sdk/{wsl-J-HscWxS.js → wsl-CTvIWvZz.js} +1 -1
  103. package/dist/plugin-sdk/{zod-schema.providers-core-FaYR6KdD.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +61 -61
  104. package/dist/wallet/local-socket-signer-lifecycle.js +107 -3
  105. package/dist/wallet/local-socket-signer-protocol.js +97 -10
  106. package/dist/wallet/mining-wallet-retirement.js +256 -0
  107. package/dist/wallet/providers/local-socket-signer-adapter.js +10 -0
  108. package/dist/wallet/signer-network-admin.js +11 -118
  109. package/dist/wallet/signer-protocol-v2.generated.js +10 -0
  110. package/dist/wallet/solana-assets.js +9 -3
  111. package/dist/wallet/solana-rpc-read-fetch.js +65 -0
  112. package/dist/wallet/wallet-agent-selection.js +6 -10
  113. package/dist/wallet/wallet-provider-registry.js +70 -29
  114. package/dist/wallet/wallet-send-approvals.js +6 -2
  115. package/dist/wallet/wallet-status.js +63 -1
  116. package/dist/web/login-qr.js +1 -1
  117. package/dist/wizard/onboarding.js +86 -84
  118. package/dist/wizard/onboarding.wallet.js +10 -1
  119. package/extensions/acpx/package.json +1 -1
  120. package/extensions/bluebubbles/package.json +1 -1
  121. package/extensions/copilot-proxy/package.json +1 -1
  122. package/extensions/diagnostics-otel/package.json +1 -1
  123. package/extensions/fased-federation/package.json +1 -1
  124. package/extensions/google-gemini-cli-auth/package.json +1 -1
  125. package/extensions/imessage/package.json +1 -1
  126. package/extensions/irc/package.json +1 -1
  127. package/extensions/line/package.json +1 -1
  128. package/extensions/llm-task/package.json +1 -1
  129. package/extensions/lobster/package.json +1 -1
  130. package/extensions/matrix/CHANGELOG.md +12 -0
  131. package/extensions/matrix/package.json +1 -1
  132. package/extensions/mattermost/package.json +1 -1
  133. package/extensions/memory-core/package.json +2 -2
  134. package/extensions/memory-lancedb/package.json +1 -1
  135. package/extensions/minimax-portal-auth/package.json +1 -1
  136. package/extensions/msteams/CHANGELOG.md +12 -0
  137. package/extensions/msteams/package.json +1 -1
  138. package/extensions/nextcloud-talk/package.json +1 -1
  139. package/extensions/nostr/CHANGELOG.md +12 -0
  140. package/extensions/nostr/package.json +1 -1
  141. package/extensions/open-prose/package.json +1 -1
  142. package/extensions/sat-mining/package.json +1 -1
  143. package/extensions/signal/package.json +1 -1
  144. package/extensions/synology-chat/package.json +1 -1
  145. package/extensions/tlon/package.json +1 -1
  146. package/extensions/twitch/CHANGELOG.md +12 -0
  147. package/extensions/twitch/package.json +1 -1
  148. package/extensions/voice-call/CHANGELOG.md +12 -0
  149. package/extensions/voice-call/package.json +1 -1
  150. package/extensions/zalo/CHANGELOG.md +12 -0
  151. package/extensions/zalo/package.json +1 -1
  152. package/extensions/zalouser/CHANGELOG.md +12 -0
  153. package/extensions/zalouser/package.json +1 -1
  154. package/install.sh +286 -107
  155. package/package.json +4 -2
  156. package/scripts/fased-managed-updater.mjs +10 -2
  157. package/scripts/install-fased-signerd.sh +4 -8
  158. package/scripts/install-managed-runtime.mjs +10 -7
  159. package/scripts/install-runtime-profile.sh +27 -0
  160. package/scripts/start-managed.sh +13 -1
  161. /package/dist/plugin-sdk/{active-listener-B_NMtgPL.js → active-listener-p9Ooc1qj.js} +0 -0
  162. /package/dist/plugin-sdk/{blocks-input-Bg-8S2pl.js → blocks-input-DiZaqaN7.js} +0 -0
  163. /package/dist/plugin-sdk/{channel-access-CcFRdRPO.js → channel-access-B0aZBSd2.js} +0 -0
  164. /package/dist/plugin-sdk/{channel-activity-DBDMQ3yI.js → channel-activity-F07DjroV.js} +0 -0
  165. /package/dist/plugin-sdk/{channel-core-CFRs8LPy.js → channel-core-DoF4X04L.js} +0 -0
  166. /package/dist/plugin-sdk/{client-pI228AVT.js → client-DLY-kWF_.js} +0 -0
  167. /package/dist/plugin-sdk/{command-poll-backoff-yJU83wEq.js → command-poll-backoff-NAePk3eL.js} +0 -0
  168. /package/dist/plugin-sdk/{date-time-uUevHscU.js → date-time-ChY_tHoG.js} +0 -0
  169. /package/dist/plugin-sdk/{draft-stream-loop-CrOPfV3F.js → draft-stream-loop-DMBwjjd1.js} +0 -0
  170. /package/dist/plugin-sdk/{fetch-BtmoPIlf.js → fetch-B0v6OTUZ.js} +0 -0
  171. /package/dist/plugin-sdk/{filesystem-manager-DoI8IBNF.js → filesystem-manager-BzuIJ9K9.js} +0 -0
  172. /package/dist/plugin-sdk/{gateway-registry-DZDsqicG.js → gateway-registry-Bgl2GFgy.js} +0 -0
  173. /package/dist/plugin-sdk/{inbound-context-DrAcXE0y.js → inbound-context-CQnfFFQ9.js} +0 -0
  174. /package/dist/plugin-sdk/{pi-model-discovery-BX_JLcEJ.js → pi-model-discovery-BHNVyRny.js} +0 -0
  175. /package/dist/plugin-sdk/{polls-DKQXVfJp.js → polls-DXd67TD8.js} +0 -0
  176. /package/dist/plugin-sdk/{proxy-DWpYcsvR.js → proxy-CLRUdShp.js} +0 -0
  177. /package/dist/plugin-sdk/{qmd-manager-CgRaTxUq.js → qmd-manager-B8Vnu0ND.js} +0 -0
  178. /package/dist/plugin-sdk/{render-e7fENCYH.js → render-DrBfVs0u.js} +0 -0
  179. /package/dist/plugin-sdk/{reply-reference-Bqk-7HXE.js → reply-reference-BnAk5Wjb.js} +0 -0
  180. /package/dist/plugin-sdk/{retry-policy-C6SjKjQA.js → retry-policy-CXh1owkc.js} +0 -0
  181. /package/dist/plugin-sdk/{sandbox-paths-Dx2lUqCu.js → sandbox-paths-Bzh1CuZc.js} +0 -0
  182. /package/dist/plugin-sdk/{session-DHD4ZKyG.js → session-iuGR_rdi.js} +0 -0
  183. /package/dist/plugin-sdk/{shared-CBgp_GBw.js → shared-D1AD2Ejn.js} +0 -0
  184. /package/dist/plugin-sdk/{target-errors-Ckufe179.js → target-errors-DfS1sLR9.js} +0 -0
  185. /package/dist/plugin-sdk/{tool-loop-detection-Bp8bPJLs.js → tool-loop-detection-sDZl27w7.js} +0 -0
  186. /package/dist/plugin-sdk/{ui-Be8cLHIS.js → ui-GQDYm_jw.js} +0 -0
  187. /package/dist/plugin-sdk/{with-timeout-ckWB8rTo.js → with-timeout-CVV8tytk.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { SAT_RUNTIME_ENV_KEYS, resolveSatRuntimeIds, resolveWritableSatRuntimeDefaultsFile } from "../config/sat-runtime-ids.js";
1
+ import { SAT_RUNTIME_ENV_KEYS, SAT_RUNTIME_TRUST_ENV_KEYS, resolveSatRuntimeIds, resolveWritableSatRuntimeDefaultsFile } from "../config/sat-runtime-ids.js";
2
2
  import path from "node:path";
3
3
  import fs from "node:fs/promises";
4
4
  import { createHash, createPublicKey, verify } from "node:crypto";
@@ -180,24 +180,43 @@ function readLocalIds(env) {
180
180
  function idsEqual(left, right) {
181
181
  return Boolean(left && right && left.programId === right.programId && left.bondProgramId === right.bondProgramId && left.mintAddress === right.mintAddress && left.mintProgramId === right.mintProgramId);
182
182
  }
183
- function buildEnvFile(ids) {
183
+ function buildEnvFile(ids, trust) {
184
184
  return [
185
185
  "# Managed by Fased Agent official SAT mainnet sync.",
186
186
  `${SAT_RUNTIME_ENV_KEYS.programId}=${ids.programId}`,
187
187
  `${SAT_RUNTIME_ENV_KEYS.bondProgramId}=${ids.bondProgramId}`,
188
188
  `${SAT_RUNTIME_ENV_KEYS.mintAddress}=${ids.mintAddress}`,
189
189
  `${SAT_RUNTIME_ENV_KEYS.mintProgramId}=${ids.mintProgramId}`,
190
+ `${SAT_RUNTIME_TRUST_ENV_KEYS.manifestPath}=${trust.manifestPath}`,
191
+ `${SAT_RUNTIME_TRUST_ENV_KEYS.manifestSha256}=${trust.manifestSha256}`,
192
+ `${SAT_RUNTIME_TRUST_ENV_KEYS.manifestSignaturePath}=${trust.manifestSignaturePath}`,
190
193
  ""
191
194
  ].join("\n");
192
195
  }
193
- async function writeRuntimeIds(ids, env) {
196
+ async function writeRuntimeIds(ids, env, trust) {
194
197
  const runtimeFile = resolveWritableSatRuntimeDefaultsFile(env);
198
+ const manifestPath = `${runtimeFile}.manifest.json`;
199
+ const manifestSignaturePath = `${runtimeFile}.manifest.sig`;
195
200
  await fs.mkdir(path.dirname(runtimeFile), { recursive: true });
196
- await fs.writeFile(runtimeFile, buildEnvFile(ids), { mode: 384 });
201
+ await fs.writeFile(manifestPath, trust.rawManifest, { mode: 384 });
202
+ await fs.writeFile(manifestSignaturePath, `${trust.signature.trim()}\n`, { mode: 384 });
203
+ await fs.writeFile(runtimeFile, buildEnvFile(ids, {
204
+ manifestPath,
205
+ manifestSha256: trust.manifestSha256,
206
+ manifestSignaturePath
207
+ }), { mode: 384 });
208
+ await Promise.all([
209
+ fs.chmod(manifestPath, 384),
210
+ fs.chmod(manifestSignaturePath, 384),
211
+ fs.chmod(runtimeFile, 384)
212
+ ]);
197
213
  env[SAT_RUNTIME_ENV_KEYS.programId] = ids.programId;
198
214
  env[SAT_RUNTIME_ENV_KEYS.bondProgramId] = ids.bondProgramId;
199
215
  env[SAT_RUNTIME_ENV_KEYS.mintAddress] = ids.mintAddress;
200
216
  env[SAT_RUNTIME_ENV_KEYS.mintProgramId] = ids.mintProgramId;
217
+ env[SAT_RUNTIME_TRUST_ENV_KEYS.manifestPath] = manifestPath;
218
+ env[SAT_RUNTIME_TRUST_ENV_KEYS.manifestSha256] = trust.manifestSha256;
219
+ env[SAT_RUNTIME_TRUST_ENV_KEYS.manifestSignaturePath] = manifestSignaturePath;
201
220
  return runtimeFile;
202
221
  }
203
222
  async function getSatMainnetSyncStatus(opts) {
@@ -312,7 +331,50 @@ async function syncSatMainnetRuntimeIds(opts) {
312
331
  message: before.state === "not_live" ? "Satcoin mainnet is not live yet." : before.message || "SAT mainnet manifest is not ready to apply."
313
332
  };
314
333
  }
315
- const runtimeFile = await writeRuntimeIds(before.officialIds, env);
334
+ const manifestUrl = opts?.manifestUrl?.trim() || resolveManifestUrl(env);
335
+ const rawManifest = await fetchText(manifestUrl, { required: true });
336
+ const manifestSha256 = parseSha256(await fetchText(`${manifestUrl}.sha256`, { required: true }));
337
+ const signature = await fetchText(`${manifestUrl}.sig`, { required: true });
338
+ if (!rawManifest || !manifestSha256 || !signature?.trim()) {
339
+ return {
340
+ ...before,
341
+ ok: false,
342
+ state: "failed",
343
+ message: "Verified SAT manifest artifacts could not be persisted for the native signer.",
344
+ error: "signed SAT runtime manifest, hash, or detached signature is missing"
345
+ };
346
+ }
347
+ const finalVerification = await verifyLiveManifest({
348
+ manifestUrl,
349
+ raw: rawManifest,
350
+ env
351
+ });
352
+ if (finalVerification.verification.hash !== "valid" || finalVerification.verification.signature !== "valid" || sha256Hex(rawManifest) !== manifestSha256) {
353
+ return {
354
+ ...before,
355
+ ok: false,
356
+ state: "failed",
357
+ message: "SAT manifest changed before signer runtime persistence.",
358
+ verification: finalVerification.verification,
359
+ trustKeySource: finalVerification.trustKeySource,
360
+ error: "signed SAT runtime manifest verification raced or failed"
361
+ };
362
+ }
363
+ const persistedManifest = JSON.parse(rawManifest);
364
+ if (!idsEqual(readOfficialIds(persistedManifest), before.officialIds)) {
365
+ return {
366
+ ...before,
367
+ ok: false,
368
+ state: "failed",
369
+ message: "SAT manifest IDs changed before signer runtime persistence.",
370
+ error: "signed SAT runtime ID tuple changed during sync"
371
+ };
372
+ }
373
+ const runtimeFile = await writeRuntimeIds(before.officialIds, env, {
374
+ rawManifest,
375
+ manifestSha256,
376
+ signature
377
+ });
316
378
  const after = await getSatMainnetSyncStatus({
317
379
  env,
318
380
  manifestUrl: opts?.manifestUrl
@@ -56,7 +56,7 @@ function describeOperatorReadinessChecklist(input) {
56
56
  agentWallet ? {
57
57
  title: "Agent wallet set",
58
58
  summary: defaultWallet && firstAgentWallet && defaultWallet.id !== firstAgentWallet.id ? `${defaultWallet.name} · ${firstAgentWallet.name}` : agentWallet.name,
59
- detail: defaultWallet ? "This primary Agent wallet handles paid A2A sends, payment evidence publication, skill/plugin wallet actions, and routine transfers when no explicit @wallet handle is supplied." : "This Agent wallet can be selected by explicit @wallet handle. Set it as primary if it should be the fallback when no handle is supplied.",
59
+ detail: defaultWallet ? "This Default Agent wallet is the final fallback for paid A2A sends, payment evidence publication, skill/plugin wallet actions, and routine transfers after explicit, skill, and Agent assignment routing." : "This Agent wallet can be selected explicitly or assigned to an Agent or skill. Set it as the optional fallback only when global fallback behavior is wanted.",
60
60
  tone: "success"
61
61
  } : defaultWalletId ? {
62
62
  title: "Agent wallet set",
@@ -1,9 +1,9 @@
1
1
  import { i as logVerbose } from "./globals-B_jjtAje.js";
2
2
  import { r as loadConfig } from "./config-DlWVeLFB.js";
3
3
  import { i as resolveSlackAccount, s as resolveSlackBotToken } from "./accounts-CuqIKU8X.js";
4
- import { n as validateSlackBlocksArray } from "./blocks-input-Bg-8S2pl.js";
5
- import { i as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-gDoGA-7e.js";
6
- import { n as createSlackWebClient } from "./client-pI228AVT.js";
4
+ import { n as validateSlackBlocksArray } from "./blocks-input-DiZaqaN7.js";
5
+ import { i as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-Di1Jit3L.js";
6
+ import { n as createSlackWebClient } from "./client-DLY-kWF_.js";
7
7
 
8
8
  //#region src/slack/actions.ts
9
9
  function resolveToken(explicit, accountId) {
@@ -1,5 +1,5 @@
1
1
  import { n as retryAsync, t as resolveRetryConfig } from "./retry-DstNBhDW.js";
2
- import { t as resolveFetch } from "./fetch-BtmoPIlf.js";
2
+ import { t as resolveFetch } from "./fetch-B0v6OTUZ.js";
3
3
 
4
4
  //#region src/channels/channel-config.ts
5
5
  function applyChannelMatchMeta(result, match) {
@@ -1,5 +1,5 @@
1
- import { Et as isAudioAttachment, St as normalizeMediaAttachments, Tt as runCapability, bt as buildProviderRegistry, wt as resolveMediaAttachmentLocalRoots, xt as createMediaAttachmentCache } from "./config-schema--vl89M7d.js";
2
- import "./runtime-2B9_WKoI.js";
1
+ import { Et as isAudioAttachment, St as normalizeMediaAttachments, Tt as runCapability, bt as buildProviderRegistry, wt as resolveMediaAttachmentLocalRoots, xt as createMediaAttachmentCache } from "./config-schema-BiBOUW89.js";
2
+ import "./runtime-CXSQwMaR.js";
3
3
  import "./subsystem-DBPNbQDQ.js";
4
4
  import { i as logVerbose, s as shouldLogVerbose } from "./globals-B_jjtAje.js";
5
5
  import "./paths-BEmvSyOV.js";
@@ -11,23 +11,23 @@ import "./accounts-CuqIKU8X.js";
11
11
  import "./logger-BbFvCoKk.js";
12
12
  import "./exec-DQ8j4Fm3.js";
13
13
  import "./accounts-Brn3-uWN.js";
14
- import "./allow-list-DyAxs4yw.js";
14
+ import "./allow-list-Bf45HfoP.js";
15
15
  import "./redact-Bm8vu_ju.js";
16
16
  import "./github-copilot-token-CUK__1s1.js";
17
17
  import "./retry-DstNBhDW.js";
18
18
  import "./paths-CTZ2RS_E.js";
19
19
  import "./ssrf-fG4UHKBw.js";
20
20
  import "./fetch-guard-CeG6u6ld.js";
21
- import "./send-CFzGKJXo.js";
21
+ import "./send-D-HfKQZm.js";
22
22
  import "./helpers-DMBU4oTo.js";
23
- import "./wsl-J-HscWxS.js";
24
- import "./pairing-store-BChahgI2.js";
25
- import "./chunk-CyoyqpbG.js";
23
+ import "./wsl-CTvIWvZz.js";
24
+ import "./pairing-store-B6J2C0vP.js";
25
+ import "./chunk-CBpl-AiQ.js";
26
26
  import "./tailscale-status-DwpNdO3Z.js";
27
27
  import "./reply-prefix-CeVw7Mn2.js";
28
28
  import "./tokens-BbnqfVuu.js";
29
29
  import "./pairing-token-Cs3BRKc0.js";
30
- import "./diagnostic-DLL_zekv.js";
30
+ import "./diagnostic-sYs6Agr-.js";
31
31
  import "./diagnostic-session-state-DqgfGYqZ.js";
32
32
  import "./optional-runtime-dependency-0dznm3ZO.js";
33
33
  import "./image-ops-DQi0n_Tt.js";
@@ -35,25 +35,26 @@ import "./memory-search-CrFPOeTH.js";
35
35
  import "./manager-BegWxNYX.js";
36
36
  import "./query-expansion-BG3FgzF7.js";
37
37
  import "./common-HCcXU-NR.js";
38
- import "./commands-registry-BfqdEWdF.js";
39
- import "./runtime-dependency-nup8niQL.js";
38
+ import "./commands-registry-G5KXSi_y.js";
39
+ import "./runtime-dependency-DczkvPxn.js";
40
40
  import "./path-alias-guards-DjgDArrp.js";
41
41
  import "./fs-safe-g4g7GT02.js";
42
- import "./media-CAdQF5TG.js";
43
- import "./markdown-tables-DCOXEUfZ.js";
44
- import "./send-B6KkGKZD.js";
45
- import "./outbound-attachment-QqTnIhZL.js";
46
- import "./fetch-BtmoPIlf.js";
47
- import "./thread-bindings.state-D9hg_M1c.js";
48
- import "./skill-commands-FKEPLS7T.js";
49
- import "./sandbox-paths-Dx2lUqCu.js";
50
- import "./directory-live-CSuYxdwk.js";
51
- import "./targets-CtSbTxYX.js";
52
- import "./pi-model-discovery-BX_JLcEJ.js";
53
- import "./resolve-route-C8tvQm8Z.js";
54
- import "./render-e7fENCYH.js";
55
- import "./tables-B3jr0Pvq.js";
56
- import "./shared-CBgp_GBw.js";
42
+ import "./qr-image-B4MlMG4N.js";
43
+ import "./media-BAoaxCrt.js";
44
+ import "./markdown-tables-d7GlUs5R.js";
45
+ import "./send-D1j12ZgX.js";
46
+ import "./outbound-attachment-CyXM3cAv.js";
47
+ import "./fetch-B0v6OTUZ.js";
48
+ import "./thread-bindings.state-D2oOWDpv.js";
49
+ import "./skill-commands-iJtvpqgb.js";
50
+ import "./sandbox-paths-Bzh1CuZc.js";
51
+ import "./directory-live-BXMpuYAF.js";
52
+ import "./targets-DDbNnLnB.js";
53
+ import "./pi-model-discovery-BHNVyRny.js";
54
+ import "./resolve-route-Dufnu2cT.js";
55
+ import "./render-DrBfVs0u.js";
56
+ import "./tables-_1W36GII.js";
57
+ import "./shared-D1AD2Ejn.js";
57
58
 
58
59
  //#region src/media-understanding/audio-preflight.ts
59
60
  /**
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { c as isRecord } from "./utils-CYk9EKoq.js";
3
3
  import { a as resolveDiscordAccount } from "./accounts-RHZyaB73.js";
4
- import { $ as fetchChannelPermissionsDiscord } from "./send-DCO441U7.js";
4
+ import { $ as fetchChannelPermissionsDiscord } from "./send-BXBS_mRK.js";
5
5
 
6
6
  //#region src/discord/audit.ts
7
7
  var audit_exports = /* @__PURE__ */ __exportAll({
@@ -1,4 +1,4 @@
1
- import { t as promptChannelAccessConfig } from "./channel-access-CcFRdRPO.js";
1
+ import { t as promptChannelAccessConfig } from "./channel-access-B0aZBSd2.js";
2
2
 
3
3
  //#region src/channels/plugins/onboarding/channel-access-configure.ts
4
4
  async function configureChannelAccessWithAllowlist(params) {
@@ -1,5 +1,5 @@
1
1
  import "./accounts-RHZyaB73.js";
2
- import { t as DiscordUiContainer } from "./ui-Be8cLHIS.js";
2
+ import { t as DiscordUiContainer } from "./ui-GQDYm_jw.js";
3
3
  import { Separator, TextDisplay } from "@buape/carbon";
4
4
 
5
5
  //#region src/infra/outbound/channel-adapters.discord.ts
@@ -1,5 +1,5 @@
1
1
  import { n as DEFAULT_ACCOUNT_ID, r as normalizeAccountId } from "./session-key--_1zVBRB.js";
2
2
  import { Y as ChannelMessageActionContext, n as ChannelPlugin, ut as getChatChannelMeta } from "./types.plugin-BcSBq42x.js";
3
- import { _ as FasedAgentPluginApi, t as PluginRuntime } from "./types-eG9aYqXF.js";
4
- import { a as buildChannelConfigSchema, c as emptyPluginConfigSchema, i as setAccountEnabledInConfigSection, n as formatPairingApproveHint, o as applyAccountNameToChannelSection, r as deleteAccountFromConfigSection, s as migrateBaseNameToDefaultAccount, t as PAIRING_APPROVED_MESSAGE } from "./pairing-message-BjIJYVvp.js";
3
+ import { _ as FasedAgentPluginApi, t as PluginRuntime } from "./types-BakzIzGN.js";
4
+ import { a as buildChannelConfigSchema, c as emptyPluginConfigSchema, i as setAccountEnabledInConfigSection, n as formatPairingApproveHint, o as applyAccountNameToChannelSection, r as deleteAccountFromConfigSection, s as migrateBaseNameToDefaultAccount, t as PAIRING_APPROVED_MESSAGE } from "./pairing-message-CiTcdD6m.js";
5
5
  export { type ChannelMessageActionContext, type ChannelPlugin, DEFAULT_ACCOUNT_ID, type FasedAgentPluginApi, PAIRING_APPROVED_MESSAGE, type PluginRuntime, applyAccountNameToChannelSection, buildChannelConfigSchema, deleteAccountFromConfigSection, emptyPluginConfigSchema, formatPairingApproveHint, getChatChannelMeta, migrateBaseNameToDefaultAccount, normalizeAccountId, setAccountEnabledInConfigSection };
@@ -1,4 +1,4 @@
1
- import { Nn as getChatChannelMeta } from "./runtime-2B9_WKoI.js";
1
+ import { Nn as getChatChannelMeta } from "./runtime-CXSQwMaR.js";
2
2
  import "./subsystem-DBPNbQDQ.js";
3
3
  import "./globals-B_jjtAje.js";
4
4
  import "./paths-BEmvSyOV.js";
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { xn as INTERNAL_MESSAGE_CHANNEL } from "./runtime-2B9_WKoI.js";
2
+ import { xn as INTERNAL_MESSAGE_CHANNEL } from "./runtime-CXSQwMaR.js";
3
3
  import { n as resolveAccountEntry } from "./account-helpers-Bdfws46K.js";
4
4
  import { p as normalizeAccountId } from "./session-key-HSJ2KQTc.js";
5
5
 
@@ -1,4 +1,4 @@
1
- import { an as wrapExternalContent } from "./config-schema--vl89M7d.js";
1
+ import { an as wrapExternalContent } from "./config-schema-BiBOUW89.js";
2
2
 
3
3
  //#region src/security/channel-metadata.ts
4
4
  const DEFAULT_MAX_CHARS = 800;
@@ -1,5 +1,5 @@
1
- import { Ht as buildCommandsMessage, Ut as buildCommandsMessagePaginated, Wt as buildHelpMessage } from "./config-schema--vl89M7d.js";
2
- import "./runtime-2B9_WKoI.js";
1
+ import { Ht as buildCommandsMessage, Ut as buildCommandsMessagePaginated, Wt as buildHelpMessage } from "./config-schema-BiBOUW89.js";
2
+ import "./runtime-CXSQwMaR.js";
3
3
  import "./subsystem-DBPNbQDQ.js";
4
4
  import "./globals-B_jjtAje.js";
5
5
  import "./paths-BEmvSyOV.js";
@@ -11,23 +11,23 @@ import "./accounts-CuqIKU8X.js";
11
11
  import "./logger-BbFvCoKk.js";
12
12
  import "./exec-DQ8j4Fm3.js";
13
13
  import "./accounts-Brn3-uWN.js";
14
- import "./allow-list-DyAxs4yw.js";
14
+ import "./allow-list-Bf45HfoP.js";
15
15
  import "./redact-Bm8vu_ju.js";
16
16
  import "./github-copilot-token-CUK__1s1.js";
17
17
  import "./retry-DstNBhDW.js";
18
18
  import "./paths-CTZ2RS_E.js";
19
19
  import "./ssrf-fG4UHKBw.js";
20
20
  import "./fetch-guard-CeG6u6ld.js";
21
- import "./send-CFzGKJXo.js";
21
+ import "./send-D-HfKQZm.js";
22
22
  import "./helpers-DMBU4oTo.js";
23
- import "./wsl-J-HscWxS.js";
24
- import "./pairing-store-BChahgI2.js";
25
- import "./chunk-CyoyqpbG.js";
23
+ import "./wsl-CTvIWvZz.js";
24
+ import "./pairing-store-B6J2C0vP.js";
25
+ import "./chunk-CBpl-AiQ.js";
26
26
  import "./tailscale-status-DwpNdO3Z.js";
27
27
  import "./reply-prefix-CeVw7Mn2.js";
28
28
  import "./tokens-BbnqfVuu.js";
29
29
  import "./pairing-token-Cs3BRKc0.js";
30
- import "./diagnostic-DLL_zekv.js";
30
+ import "./diagnostic-sYs6Agr-.js";
31
31
  import "./diagnostic-session-state-DqgfGYqZ.js";
32
32
  import "./optional-runtime-dependency-0dznm3ZO.js";
33
33
  import "./image-ops-DQi0n_Tt.js";
@@ -35,24 +35,25 @@ import "./memory-search-CrFPOeTH.js";
35
35
  import "./manager-BegWxNYX.js";
36
36
  import "./query-expansion-BG3FgzF7.js";
37
37
  import "./common-HCcXU-NR.js";
38
- import "./commands-registry-BfqdEWdF.js";
39
- import "./runtime-dependency-nup8niQL.js";
38
+ import "./commands-registry-G5KXSi_y.js";
39
+ import "./runtime-dependency-DczkvPxn.js";
40
40
  import "./path-alias-guards-DjgDArrp.js";
41
41
  import "./fs-safe-g4g7GT02.js";
42
- import "./media-CAdQF5TG.js";
43
- import "./markdown-tables-DCOXEUfZ.js";
44
- import "./send-B6KkGKZD.js";
45
- import "./outbound-attachment-QqTnIhZL.js";
46
- import "./fetch-BtmoPIlf.js";
47
- import "./thread-bindings.state-D9hg_M1c.js";
48
- import "./skill-commands-FKEPLS7T.js";
49
- import "./sandbox-paths-Dx2lUqCu.js";
50
- import "./directory-live-CSuYxdwk.js";
51
- import "./targets-CtSbTxYX.js";
52
- import "./pi-model-discovery-BX_JLcEJ.js";
53
- import "./resolve-route-C8tvQm8Z.js";
54
- import "./render-e7fENCYH.js";
55
- import "./tables-B3jr0Pvq.js";
56
- import "./shared-CBgp_GBw.js";
42
+ import "./qr-image-B4MlMG4N.js";
43
+ import "./media-BAoaxCrt.js";
44
+ import "./markdown-tables-d7GlUs5R.js";
45
+ import "./send-D1j12ZgX.js";
46
+ import "./outbound-attachment-CyXM3cAv.js";
47
+ import "./fetch-B0v6OTUZ.js";
48
+ import "./thread-bindings.state-D2oOWDpv.js";
49
+ import "./skill-commands-iJtvpqgb.js";
50
+ import "./sandbox-paths-Bzh1CuZc.js";
51
+ import "./directory-live-BXMpuYAF.js";
52
+ import "./targets-DDbNnLnB.js";
53
+ import "./pi-model-discovery-BHNVyRny.js";
54
+ import "./resolve-route-Dufnu2cT.js";
55
+ import "./render-DrBfVs0u.js";
56
+ import "./tables-_1W36GII.js";
57
+ import "./shared-D1AD2Ejn.js";
57
58
 
58
59
  export { buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage };
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { Ot as listChannelDocks, lt as normalizeChannelId, t as getActivePluginRegistry } from "./runtime-2B9_WKoI.js";
2
+ import { Ot as listChannelDocks, lt as normalizeChannelId, t as getActivePluginRegistry } from "./runtime-CXSQwMaR.js";
3
3
  import { C as isPlainObject, o as escapeRegExp } from "./utils-CYk9EKoq.js";
4
4
  import { $i as DEFAULT_PROVIDER, Qi as DEFAULT_MODEL, Ui as listThinkingLevels, Yt as resolveConfiguredModelRef } from "./config-DlWVeLFB.js";
5
5