@fased/fased 0.1.47 → 0.1.49

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 (151) hide show
  1. package/dist/agents/auth-health.js +11 -5
  2. package/dist/agents/current-model-catalog.js +21 -3
  3. package/dist/brand.js +1 -1
  4. package/dist/build-info.json +3 -3
  5. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  6. package/dist/commands/doctor-state-integrity.js +25 -2
  7. package/dist/config/sessions/transcript.js +30 -16
  8. package/dist/config/sessions.js +2 -2
  9. package/dist/control-ui/assets/{app-CHqTx3P_.js → app-6iCry787.js} +1274 -1259
  10. package/dist/control-ui/assets/{chat-model-ref-BbrdMKjQ.js → chat-model-ref-C6CFR-GR.js} +2 -2
  11. package/dist/control-ui/assets/{config-FFZLTSLS.js → config-CU5Zi8Dh.js} +2 -2
  12. package/dist/control-ui/assets/{index-CFHfNlLv.js → index-CNFgocD9.js} +3 -3
  13. package/dist/control-ui/assets/{mining-D_VAMFMY.js → mining-BdhMn18r.js} +3 -3
  14. package/dist/control-ui/assets/{providers-DqFL6WrJ.js → providers-WTJ1kMKy.js} +14 -3
  15. package/dist/control-ui/index.html +1 -1
  16. package/dist/extensions/sat-mining/src/protocol-contract.js +63 -0
  17. package/dist/extensions/sat-mining/src/solana-submit.js +3 -52
  18. package/dist/gateway/protocol/schema/agents-models-skills.js +1 -0
  19. package/dist/gateway/protocol/schema/frames.js +5 -0
  20. package/dist/gateway/protocol/schema/snapshot.js +1 -0
  21. package/dist/gateway/server/ws-connection/message-handler.js +2 -1
  22. package/dist/gateway/server-http.js +1 -0
  23. package/dist/gateway/server-methods/chat.js +4 -29
  24. package/dist/infra/system-presence.js +4 -2
  25. package/dist/light-update-status.js +1 -1
  26. package/dist/memory/inventory.js +44 -4
  27. package/dist/mining/mainnet-sync.js +70 -26
  28. package/dist/plugin-sdk/{accounts-DzLdrOVC.js → accounts-B5fY9hZy.js} +1 -1
  29. package/dist/plugin-sdk/{actions-PhofTgnO.js → actions-D-9SsSEy.js} +2 -2
  30. package/dist/plugin-sdk/{active-listener-C8a74qPO.js → active-listener-BH7rDR47.js} +1 -1
  31. package/dist/plugin-sdk/{audio-preflight-CARAVcz-.js → audio-preflight-4faayz5S.js} +26 -26
  32. package/dist/plugin-sdk/{audit-ByK45Q1d.js → audit-BQfsboqd.js} +1 -1
  33. package/dist/plugin-sdk/{channel-access-BEin0yA4.js → channel-access-CDZ-cJPq.js} +1 -1
  34. package/dist/plugin-sdk/{channel-access-configure-Di_DoR-Q.js → channel-access-configure-DlpuhlH6.js} +1 -1
  35. package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
  36. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  37. package/dist/plugin-sdk/{chunk-CwN3c1Fq.js → chunk-CZuCyS7k.js} +1 -1
  38. package/dist/plugin-sdk/{chunk-items-DH7ooQBZ.js → chunk-items-Cyc4Kl6A.js} +1 -1
  39. package/dist/plugin-sdk/command-status.js +26 -26
  40. package/dist/plugin-sdk/{commands-registry-Bea-V_lR.js → commands-registry-COIbIjGO.js} +2 -2
  41. package/dist/plugin-sdk/{common-BJPuBxmx.js → common-LMHJe8KW.js} +1 -1
  42. package/dist/plugin-sdk/{config-BxOWD3gF.js → config-ZMbTT0kM.js} +22 -4
  43. package/dist/plugin-sdk/{config-schema-ChJcPn7x.js → config-schema-Cku0a8Tm.js} +100 -64
  44. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  45. package/dist/plugin-sdk/discord.d.ts +4 -4
  46. package/dist/plugin-sdk/discord.js +19 -19
  47. package/dist/plugin-sdk/{handle-action-Bk-L2J84.js → handle-action-C8ZZfORB.js} +13 -13
  48. package/dist/plugin-sdk/{helpers-0E444CR0.js → helpers-vfzH9tBn.js} +1 -1
  49. package/dist/plugin-sdk/{image-ops-BYc-Ol7C.js → image-ops-BnOmQA5d.js} +1 -1
  50. package/dist/plugin-sdk/index.d.ts +9 -9
  51. package/dist/plugin-sdk/index.js +28 -28
  52. package/dist/plugin-sdk/{login-B_At7IVI.js → login-C73Wpiw8.js} +3 -3
  53. package/dist/plugin-sdk/{login-qr-BlSQ8QJF.js → login-qr-CRKHA7i8.js} +3 -3
  54. package/dist/plugin-sdk/{manager-VNI6sxbG.js → manager-CHYhpKHn.js} +2 -2
  55. package/dist/plugin-sdk/{markdown-tables-CpNefu6e.js → markdown-tables-B84dPWNG.js} +1 -1
  56. package/dist/plugin-sdk/{media-QBCmvhBQ.js → media-4daDcNER.js} +2 -2
  57. package/dist/plugin-sdk/{monitor-BhHlerHI.js → monitor-CChc6bQV.js} +30 -30
  58. package/dist/plugin-sdk/{monitor-C9UczH5N.js → monitor-DJhU-J5u.js} +31 -31
  59. package/dist/plugin-sdk/{openresponses-http-CtuFHD5w.js → openresponses-http-Dvyczr35.js} +26 -26
  60. package/dist/plugin-sdk/{optional-runtime-dependency-BaVO1F3i.js → optional-runtime-dependency-BFpqaCzp.js} +1 -1
  61. package/dist/plugin-sdk/{outbound-CWrcAWpE.js → outbound-C1xBxfNb.js} +6 -6
  62. package/dist/plugin-sdk/{outbound-attachment-Dhi2Q-_f.js → outbound-attachment-DvcxPP7b.js} +2 -2
  63. package/dist/plugin-sdk/{pairing-message-6XVXW554.d.ts → pairing-message-DWXHX-jt.d.ts} +1 -1
  64. package/dist/plugin-sdk/{pairing-message-D01_6FkJ.js → pairing-message-DpYT614h.js} +1 -1
  65. package/dist/plugin-sdk/{pairing-store-DADXOv-J.js → pairing-store-CprpGco9.js} +2 -2
  66. package/dist/plugin-sdk/{pi-model-discovery-D9-CQFS2.js → pi-model-discovery-BQ6fFRBA.js} +1 -1
  67. package/dist/plugin-sdk/{pi-model-discovery-runtime-DhNNXQgq.js → pi-model-discovery-runtime-BF_89lVj.js} +2 -2
  68. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
  69. package/dist/plugin-sdk/{pw-ai-CQG7vp-Y.js → pw-ai-xgpIbHOr.js} +3 -3
  70. package/dist/plugin-sdk/{replies-C_FeIOF4.js → replies-AzJ6U6Ut.js} +2 -2
  71. package/dist/plugin-sdk/{resolve-outbound-target-DD8edEdz.js → resolve-outbound-target-COo_TR7B.js} +1 -1
  72. package/dist/plugin-sdk/{resolve-route-BPkfG5Pg.js → resolve-route-CZFzHOIe.js} +1 -1
  73. package/dist/plugin-sdk/{retry-policy-C0YsRX_6.js → retry-policy-BSdqqXsI.js} +1 -1
  74. package/dist/plugin-sdk/{runtime-CyTWeylK.js → runtime-CeoGffDi.js} +31 -18
  75. package/dist/plugin-sdk/{runtime-dependency-D6tYtvtU.js → runtime-dependency-Cvbs0GXf.js} +2 -2
  76. package/dist/plugin-sdk/sat-runtime.d.ts +3 -2
  77. package/dist/plugin-sdk/sat-runtime.js +5 -5
  78. package/dist/plugin-sdk/{send-CNxLDNQ9.js → send-B_-UtG9F.js} +6 -6
  79. package/dist/plugin-sdk/{send-Qckp3h4k.js → send-C0Q1u7N1.js} +8 -8
  80. package/dist/plugin-sdk/{send-BtFuV6zU.js → send-CGE7OgsA.js} +5 -5
  81. package/dist/plugin-sdk/{send-FcEJfLTd.js → send-DCxAv7bV.js} +6 -6
  82. package/dist/plugin-sdk/{send-BedQ8ekw.js → send-DVpCBUuL.js} +7 -7
  83. package/dist/plugin-sdk/{session-C3Ul4abD.js → session-ETYBbhLn.js} +2 -2
  84. package/dist/plugin-sdk/{skill-commands-C2CnUTPX.js → skill-commands-BQL6TBIv.js} +2 -2
  85. package/dist/plugin-sdk/{slack-bSeSOI9d.js → slack-Bs_4uivd.js} +38 -38
  86. package/dist/plugin-sdk/{slack-actions-CLyEd8FK.js → slack-actions-CBPZkfTS.js} +11 -11
  87. package/dist/plugin-sdk/slack.d.ts +4 -4
  88. package/dist/plugin-sdk/slack.js +9 -9
  89. package/dist/plugin-sdk/{sticker-cache-DBnS3hHh.js → sticker-cache-BBZMp-oQ.js} +3 -3
  90. package/dist/plugin-sdk/{tables-L5mXZ5y_.js → tables-B-G7Bb0l.js} +1 -1
  91. package/dist/plugin-sdk/{targets-eG595pY0.js → targets-D8UaoWHd.js} +1 -1
  92. package/dist/plugin-sdk/{telegram-actions-D0Kyqy_e.js → telegram-actions-BARLx9zc.js} +29 -29
  93. package/dist/plugin-sdk/telegram.d.ts +4 -4
  94. package/dist/plugin-sdk/telegram.js +8 -8
  95. package/dist/plugin-sdk/{thread-bindings.lifecycle-C_5BEWmL.js → thread-bindings.lifecycle-DwYKCLLq.js} +3 -3
  96. package/dist/plugin-sdk/{thread-bindings.state-DRZAbcUu.js → thread-bindings.state-BNWfHA0f.js} +2 -2
  97. package/dist/plugin-sdk/{tmp-fased-dir-BpMLNd4L.d.ts → tmp-fased-dir-Be1wBhVz.d.ts} +1 -1
  98. package/dist/plugin-sdk/{types-0CsXVmg8.d.ts → types-CJGVZX6j.d.ts} +1 -1
  99. package/dist/plugin-sdk/{types-DMLEeE52.d.ts → types-CXLEOrJX.d.ts} +1 -1
  100. package/dist/plugin-sdk/{wallet-status-2yrXvqSS.js → wallet-status-Coekn_SJ.js} +77 -28
  101. package/dist/plugin-sdk/{web-CSRe4zy2.js → web-BwolzGVF.js} +31 -31
  102. package/dist/plugin-sdk/{whatsapp-actions-CkLkpg8M.js → whatsapp-actions-CSvf6eev.js} +13 -13
  103. package/dist/plugin-sdk/{whatsapp-heartbeat-DuAE9_88.js → whatsapp-heartbeat-Bw7OtTe6.js} +2 -2
  104. package/dist/plugin-sdk/whatsapp.d.ts +3 -3
  105. package/dist/plugin-sdk/whatsapp.js +12 -12
  106. package/dist/plugin-sdk/{wsl-CXVwPntb.js → wsl-By1Mc-oS.js} +3 -3
  107. package/dist/plugin-sdk/{zod-schema.providers-core-FaYR6KdD.d.ts → zod-schema.providers-core-TI6sL-6B.d.ts} +16 -16
  108. package/dist/providers/registry.js +1 -1
  109. package/dist/version.js +11 -1
  110. package/extensions/acpx/package.json +1 -1
  111. package/extensions/bluebubbles/package.json +1 -1
  112. package/extensions/copilot-proxy/package.json +1 -1
  113. package/extensions/diagnostics-otel/package.json +1 -1
  114. package/extensions/fased-federation/package.json +1 -1
  115. package/extensions/google-gemini-cli-auth/package.json +1 -1
  116. package/extensions/imessage/package.json +1 -1
  117. package/extensions/irc/package.json +1 -1
  118. package/extensions/line/package.json +1 -1
  119. package/extensions/llm-task/package.json +1 -1
  120. package/extensions/lobster/package.json +1 -1
  121. package/extensions/matrix/CHANGELOG.md +12 -0
  122. package/extensions/matrix/package.json +1 -1
  123. package/extensions/mattermost/package.json +1 -1
  124. package/extensions/memory-core/package.json +2 -2
  125. package/extensions/memory-lancedb/package.json +1 -1
  126. package/extensions/minimax-portal-auth/package.json +1 -1
  127. package/extensions/msteams/CHANGELOG.md +12 -0
  128. package/extensions/msteams/package.json +1 -1
  129. package/extensions/nextcloud-talk/package.json +1 -1
  130. package/extensions/nostr/CHANGELOG.md +12 -0
  131. package/extensions/nostr/package.json +1 -1
  132. package/extensions/open-prose/package.json +1 -1
  133. package/extensions/sat-mining/index.ts +122 -13
  134. package/extensions/sat-mining/package.json +1 -1
  135. package/extensions/sat-mining/src/protocol-contract.ts +64 -0
  136. package/extensions/sat-mining/src/round-watcher.ts +6 -4
  137. package/extensions/sat-mining/src/runtime.ts +9 -3
  138. package/extensions/sat-mining/src/solana-submit.ts +7 -53
  139. package/extensions/signal/package.json +1 -1
  140. package/extensions/synology-chat/package.json +1 -1
  141. package/extensions/tlon/package.json +1 -1
  142. package/extensions/twitch/CHANGELOG.md +12 -0
  143. package/extensions/twitch/package.json +1 -1
  144. package/extensions/voice-call/CHANGELOG.md +12 -0
  145. package/extensions/voice-call/package.json +1 -1
  146. package/extensions/zalo/CHANGELOG.md +12 -0
  147. package/extensions/zalo/package.json +1 -1
  148. package/extensions/zalouser/CHANGELOG.md +12 -0
  149. package/extensions/zalouser/package.json +1 -1
  150. package/package.json +1 -1
  151. package/scripts/start-managed.sh +21 -1
@@ -23,7 +23,7 @@ async function buildMemoryInventory(params) {
23
23
  const qmdIndexPath = path.join(qmdDir, "xdg-cache", "qmd", "index.sqlite");
24
24
  const memoryDir = path.join(workspaceDir, "memory");
25
25
  const hookConfig = resolveHookConfig(cfg, "session-memory");
26
- const activePlugin = resolveActiveMemoryPlugin(cfg);
26
+ const activePlugin = resolveActiveMemoryPlugin(cfg, providerStatus);
27
27
  const workspaceStatus = await summarizePath(workspaceDir, roots);
28
28
  const memoryRootSpecs = [
29
29
  {
@@ -81,6 +81,9 @@ async function buildMemoryInventory(params) {
81
81
  ...typeof providerStatus?.files === "number" ? { files: providerStatus.files } : {},
82
82
  ...typeof providerStatus?.chunks === "number" ? { chunks: providerStatus.chunks } : {},
83
83
  ...typeof providerStatus?.dirty === "boolean" ? { dirty: providerStatus.dirty } : {},
84
+ ...providerStatus?.fts ? { fts: providerStatus.fts } : {},
85
+ ...providerStatus?.vector ? { vector: providerStatus.vector } : {},
86
+ ...providerStatus?.fallback ? { fallback: providerStatus.fallback } : {},
84
87
  ...providerStatus?.dbPath ? { db: await summarizePath(providerStatus.dbPath, roots) } : {},
85
88
  ...providerStatus?.sources ? { sources: providerStatus.sources } : {},
86
89
  ...providerStatus?.sourceCounts ? { sourceCounts: providerStatus.sourceCounts } : {},
@@ -144,6 +147,22 @@ function validateMemoryInventory(inventory) {
144
147
  message: inventory.backend.error
145
148
  });
146
149
  }
150
+ if (inventory.backend.dirty) {
151
+ push({
152
+ severity: "warn",
153
+ code: "backend.index.dirty",
154
+ area: "backend",
155
+ message: "The memory index is stale and needs a rebuild before recall is current."
156
+ });
157
+ }
158
+ if (inventory.backend.vector?.enabled && inventory.backend.vector.available !== true) {
159
+ push({
160
+ severity: "warn",
161
+ code: "backend.semantic.unavailable",
162
+ area: "backend",
163
+ message: inventory.backend.vector.loadError ?? "Semantic recall is configured but vector search is not available."
164
+ });
165
+ }
147
166
  if (inventory.backend.configured !== inventory.backend.active && inventory.backend.active) {
148
167
  push({
149
168
  severity: "warn",
@@ -467,15 +486,36 @@ function validatePathStatus(params) {
467
486
  });
468
487
  }
469
488
  }
470
- function resolveActiveMemoryPlugin(cfg) {
489
+ function resolveActiveMemoryPlugin(cfg, providerStatus) {
471
490
  const normalized = normalizePluginsConfig(cfg.plugins);
472
491
  const slot = normalized.slots.memory ?? null;
473
492
  const registry = getActivePluginRegistry();
474
- const active = slot ? registry?.plugins.find((plugin) => plugin.id === slot) : undefined;
493
+ const registryActive = slot ? registry?.plugins.find((plugin) => plugin.id === slot) : undefined;
494
+ const providerBackedMemoryCore = slot === "memory-core" && providerStatus?.backend === "builtin" ? {
495
+ id: "memory-core",
496
+ name: "Memory Core",
497
+ kind: "memory",
498
+ source: "builtin memory backend",
499
+ origin: "bundled",
500
+ status: "loaded",
501
+ enabled: true,
502
+ toolNames: [],
503
+ hookNames: [],
504
+ channelIds: [],
505
+ providerIds: [],
506
+ gatewayMethods: [],
507
+ cliCommands: [],
508
+ services: [],
509
+ commands: [],
510
+ httpHandlers: 0,
511
+ hookCount: 0,
512
+ configSchema: false
513
+ } : undefined;
514
+ const active = registryActive ?? providerBackedMemoryCore;
475
515
  return {
476
516
  configuredSlot: slot,
477
517
  enabled: normalized.enabled && Boolean(slot) && active?.enabled === true && active.status === "loaded",
478
- registryLoaded: Boolean(registry),
518
+ registryLoaded: Boolean(registry || providerBackedMemoryCore),
479
519
  ...active ? { active: {
480
520
  id: active.id,
481
521
  name: active.name,
@@ -6,20 +6,43 @@ import { createHash, createPublicKey, verify } from "node:crypto";
6
6
  //#region src/mining/mainnet-sync.ts
7
7
  const DEFAULT_MANIFEST_URL = "https://satcoin.app/.well-known/sat-mainnet-addresses.json";
8
8
  const DEFAULT_TIMEOUT_MS = 12e3;
9
- const EMBEDDED_TRUSTED_KEYS = [];
9
+ const EMBEDDED_TRUSTED_KEYS = [{
10
+ id: "sat-mainnet-2026-01",
11
+ publicKeyBase64Url: "F-Kv6SBcZHvs1LQ0LNHwYQ6VuKidpkv1nkgRqggn1kk",
12
+ fingerprintSha256: "7fc6f335e13fbba3cee2f833e4ab656a19fd8c0715b9d9097a3e196f0e3a0ebd"
13
+ }];
14
+ for (const key of EMBEDDED_TRUSTED_KEYS) {
15
+ const publicKeyBytes = Buffer.from(key.publicKeyBase64Url, "base64url");
16
+ const fingerprint = createHash("sha256").update(publicKeyBytes).digest("hex");
17
+ if (publicKeyBytes.length !== 32 || fingerprint !== key.fingerprintSha256) {
18
+ throw new Error(`Invalid embedded SAT mainnet manifest key: ${key.id}`);
19
+ }
20
+ }
10
21
  function trustedKeysFromEnv(env) {
11
22
  const raw = String(env.FASED_SAT_MAINNET_MANIFEST_PUBLIC_KEY ?? "").trim();
12
- if (!raw) {
13
- return [];
14
- }
15
23
  const id = String(env.FASED_SAT_MAINNET_MANIFEST_PUBLIC_KEY_ID ?? "env").trim() || "env";
16
- return [{
24
+ const rotated = String(env.FASED_SAT_MAINNET_MANIFEST_PUBLIC_KEYS ?? "").split(",").map((entry) => entry.trim()).filter(Boolean).map((publicKeyBase64Url, index) => ({
25
+ id: `${id}-${index + 1}`,
26
+ publicKeyBase64Url,
27
+ source: "environment"
28
+ }));
29
+ return [...raw ? [{
17
30
  id,
18
- publicKeyBase64Url: raw
19
- }];
31
+ publicKeyBase64Url: raw,
32
+ source: "environment"
33
+ }] : [], ...rotated];
20
34
  }
21
35
  function resolveTrustedKeys(env) {
22
- return [...EMBEDDED_TRUSTED_KEYS, ...trustedKeysFromEnv(env)];
36
+ return [...EMBEDDED_TRUSTED_KEYS.map((key) => ({
37
+ ...key,
38
+ source: "embedded"
39
+ })), ...trustedKeysFromEnv(env)];
40
+ }
41
+ function resolveConfiguredTrustKeySource(env) {
42
+ if (EMBEDDED_TRUSTED_KEYS.length > 0) {
43
+ return "embedded";
44
+ }
45
+ return trustedKeysFromEnv(env).length > 0 ? "environment" : "missing";
23
46
  }
24
47
  function resolveManifestUrl(env) {
25
48
  return String(env.FASED_SAT_MAINNET_MANIFEST_URL ?? "").trim() || DEFAULT_MANIFEST_URL;
@@ -87,47 +110,64 @@ function verifyDetachedEd25519Signature(params) {
87
110
  }
88
111
  });
89
112
  if (verify(null, Buffer.from(params.payload), publicKey, signature)) {
90
- return true;
113
+ return trustedKey;
91
114
  }
92
115
  } catch {}
93
116
  }
94
- return false;
117
+ return null;
95
118
  }
96
119
  async function verifyLiveManifest(params) {
120
+ const configuredTrustKeySource = resolveConfiguredTrustKeySource(params.env);
97
121
  const expectedHash = parseSha256(await fetchText(`${params.manifestUrl}.sha256`, { required: false }).catch(() => null));
98
122
  if (!expectedHash) {
99
123
  return {
100
- hash: "missing",
101
- signature: "missing"
124
+ verification: {
125
+ hash: "missing",
126
+ signature: "missing"
127
+ },
128
+ trustKeySource: configuredTrustKeySource
102
129
  };
103
130
  }
104
131
  if (sha256Hex(params.raw) !== expectedHash) {
105
132
  return {
106
- hash: "invalid",
107
- signature: "missing"
133
+ verification: {
134
+ hash: "invalid",
135
+ signature: "missing"
136
+ },
137
+ trustKeySource: configuredTrustKeySource
108
138
  };
109
139
  }
110
140
  const signature = await fetchText(`${params.manifestUrl}.sig`, { required: false }).catch(() => null);
111
141
  if (!signature?.trim()) {
112
142
  return {
113
- hash: "valid",
114
- signature: "missing"
143
+ verification: {
144
+ hash: "valid",
145
+ signature: "missing"
146
+ },
147
+ trustKeySource: configuredTrustKeySource
115
148
  };
116
149
  }
117
150
  const trustedKeys = resolveTrustedKeys(params.env);
118
- if (!trustedKeys.length || !verifyDetachedEd25519Signature({
151
+ const verifiedKey = verifyDetachedEd25519Signature({
119
152
  payload: params.raw,
120
153
  signatureBase64: signature.trim(),
121
154
  trustedKeys
122
- })) {
155
+ });
156
+ if (!verifiedKey) {
123
157
  return {
124
- hash: "valid",
125
- signature: "invalid"
158
+ verification: {
159
+ hash: "valid",
160
+ signature: "invalid"
161
+ },
162
+ trustKeySource: configuredTrustKeySource
126
163
  };
127
164
  }
128
165
  return {
129
- hash: "valid",
130
- signature: "valid"
166
+ verification: {
167
+ hash: "valid",
168
+ signature: "valid"
169
+ },
170
+ trustKeySource: verifiedKey.source
131
171
  };
132
172
  }
133
173
  function readLocalIds(env) {
@@ -191,18 +231,20 @@ async function getSatMainnetSyncStatus(opts) {
191
231
  verification: {
192
232
  hash: "not_required",
193
233
  signature: "not_required"
194
- }
234
+ },
235
+ trustKeySource: "not_required"
195
236
  };
196
237
  }
197
238
  const officialIds = readOfficialIds(manifest);
198
239
  if (!officialIds) {
199
240
  throw new Error("live manifest is missing the complete SAT runtime id tuple");
200
241
  }
201
- const verification = await verifyLiveManifest({
242
+ const verifiedManifest = await verifyLiveManifest({
202
243
  manifestUrl,
203
244
  raw,
204
245
  env
205
246
  });
247
+ const { verification, trustKeySource } = verifiedManifest;
206
248
  const localIds = readLocalIds(env);
207
249
  if (verification.hash !== "valid" || verification.signature !== "valid") {
208
250
  return {
@@ -218,7 +260,8 @@ async function getSatMainnetSyncStatus(opts) {
218
260
  officialIds,
219
261
  needsSync: false,
220
262
  verification,
221
- error: "Signed manifest verification failed."
263
+ trustKeySource,
264
+ error: trustKeySource === "missing" ? "This Fased release has no trusted SAT mainnet manifest key. Update Fased before syncing or mining." : "Signed manifest verification failed."
222
265
  };
223
266
  }
224
267
  const synced = idsEqual(localIds, officialIds);
@@ -235,7 +278,8 @@ async function getSatMainnetSyncStatus(opts) {
235
278
  officialIds,
236
279
  needsSync: !synced,
237
280
  runtimeFile: resolveWritableSatRuntimeDefaultsFile(env),
238
- verification
281
+ verification,
282
+ trustKeySource
239
283
  };
240
284
  } catch (error) {
241
285
  return {
@@ -2,7 +2,7 @@ import { i as defaultRuntime } from "./subsystem-DBPNbQDQ.js";
2
2
  import { c as success, n as info, p as getChildLogger } from "./globals-B_jjtAje.js";
3
3
  import { a as resolveOAuthDir, c as expandHomePrefix, u as resolveRequiredHomeDir } from "./paths-BEmvSyOV.js";
4
4
  import { h as resolveUserPath } from "./utils-CYk9EKoq.js";
5
- import { Cr as formatCliCommand } from "./config-BxOWD3gF.js";
5
+ import { Cr as formatCliCommand } from "./config-ZMbTT0kM.js";
6
6
  import { n as resolveAccountEntry, t as createAccountListHelpers } from "./account-helpers-Bdfws46K.js";
7
7
  import { f as DEFAULT_ACCOUNT_ID, p as normalizeAccountId } from "./session-key-HSJ2KQTc.js";
8
8
  import path from "node:path";
@@ -1,8 +1,8 @@
1
1
  import { i as logVerbose } from "./globals-B_jjtAje.js";
2
- import { n as loadConfig } from "./config-BxOWD3gF.js";
2
+ import { n as loadConfig } from "./config-ZMbTT0kM.js";
3
3
  import { i as resolveSlackAccount, s as resolveSlackBotToken } from "./accounts-CuqIKU8X.js";
4
4
  import { n as validateSlackBlocksArray } from "./blocks-input-Dcitfh7h.js";
5
- import { i as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-BtFuV6zU.js";
5
+ import { i as buildSlackBlocksFallbackText, t as sendMessageSlack } from "./send-CGE7OgsA.js";
6
6
  import { n as createSlackWebClient } from "./client-D2N7hqVu.js";
7
7
 
8
8
  //#region src/slack/actions.ts
@@ -1,4 +1,4 @@
1
- import { Cr as formatCliCommand } from "./config-BxOWD3gF.js";
1
+ import { Cr as formatCliCommand } from "./config-ZMbTT0kM.js";
2
2
  import { f as DEFAULT_ACCOUNT_ID } from "./session-key-HSJ2KQTc.js";
3
3
 
4
4
  //#region src/web/active-listener.ts
@@ -1,16 +1,16 @@
1
- import { Gt as createMediaAttachmentCache, Jt as resolveMediaAttachmentLocalRoots, Kt as normalizeMediaAttachments, Wt as buildProviderRegistry, Xt as isAudioAttachment, Yt as runCapability } from "./config-schema-ChJcPn7x.js";
2
- import "./runtime-CyTWeylK.js";
1
+ import { Gt as createMediaAttachmentCache, Jt as resolveMediaAttachmentLocalRoots, Kt as normalizeMediaAttachments, Wt as buildProviderRegistry, Xt as isAudioAttachment, Yt as runCapability } from "./config-schema-Cku0a8Tm.js";
2
+ import "./runtime-CeoGffDi.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";
6
6
  import "./utils-CYk9EKoq.js";
7
- import "./config-BxOWD3gF.js";
7
+ import "./config-ZMbTT0kM.js";
8
8
  import "./agent-scope-BbgPlhtw.js";
9
9
  import "./accounts-RHZyaB73.js";
10
10
  import "./accounts-CuqIKU8X.js";
11
11
  import "./logger-BbFvCoKk.js";
12
12
  import "./exec-DQ8j4Fm3.js";
13
- import "./accounts-DzLdrOVC.js";
13
+ import "./accounts-B5fY9hZy.js";
14
14
  import "./allow-list-BYeKk0Sy.js";
15
15
  import "./redact-Bm8vu_ju.js";
16
16
  import "./github-copilot-token-CUK__1s1.js";
@@ -19,11 +19,11 @@ import "./paths-CTZ2RS_E.js";
19
19
  import "./ip-C70a-YlD.js";
20
20
  import "./ssrf-BZG8Ztod.js";
21
21
  import "./fetch-guard-BuYrl6q2.js";
22
- import "./send-FcEJfLTd.js";
23
- import "./helpers-0E444CR0.js";
24
- import "./wsl-CXVwPntb.js";
25
- import "./pairing-store-DADXOv-J.js";
26
- import "./chunk-CwN3c1Fq.js";
22
+ import "./send-DCxAv7bV.js";
23
+ import "./helpers-vfzH9tBn.js";
24
+ import "./wsl-By1Mc-oS.js";
25
+ import "./pairing-store-CprpGco9.js";
26
+ import "./chunk-CZuCyS7k.js";
27
27
  import "./tailscale-status-ClsquRGs.js";
28
28
  import "./reply-prefix-Bqzm6DC1.js";
29
29
  import "./tokens-BvtlOzVP.js";
@@ -31,32 +31,32 @@ import "./device-pairing-D2Yq-_U6.js";
31
31
  import "./pairing-token-N_6Jbt1L.js";
32
32
  import "./diagnostic-Dfn1iERm.js";
33
33
  import "./diagnostic-session-state-HO94DMou.js";
34
- import "./optional-runtime-dependency-BaVO1F3i.js";
35
- import "./image-ops-BYc-Ol7C.js";
36
- import "./wallet-status-2yrXvqSS.js";
37
- import "./pi-model-discovery-D9-CQFS2.js";
38
- import "./runtime-dependency-D6tYtvtU.js";
34
+ import "./optional-runtime-dependency-BFpqaCzp.js";
35
+ import "./image-ops-BnOmQA5d.js";
36
+ import "./wallet-status-Coekn_SJ.js";
37
+ import "./pi-model-discovery-BQ6fFRBA.js";
38
+ import "./runtime-dependency-Cvbs0GXf.js";
39
39
  import "./ws-CocpWGhl.js";
40
40
  import "./path-alias-guards-Dg3gU-MA.js";
41
41
  import "./fs-safe-BG-VzVkL.js";
42
- import "./markdown-tables-CpNefu6e.js";
43
- import "./media-QBCmvhBQ.js";
44
- import "./send-CNxLDNQ9.js";
45
- import "./outbound-attachment-Dhi2Q-_f.js";
42
+ import "./markdown-tables-B84dPWNG.js";
43
+ import "./media-4daDcNER.js";
44
+ import "./send-B_-UtG9F.js";
45
+ import "./outbound-attachment-DvcxPP7b.js";
46
46
  import "./fetch-Cu-ahkie.js";
47
- import "./thread-bindings.state-DRZAbcUu.js";
47
+ import "./thread-bindings.state-BNWfHA0f.js";
48
48
  import "./memory-search-C3C0bD2H.js";
49
- import "./manager-VNI6sxbG.js";
49
+ import "./manager-CHYhpKHn.js";
50
50
  import "./query-expansion-Zr9qQixm.js";
51
- import "./common-BJPuBxmx.js";
52
- import "./commands-registry-Bea-V_lR.js";
53
- import "./skill-commands-C2CnUTPX.js";
51
+ import "./common-LMHJe8KW.js";
52
+ import "./commands-registry-COIbIjGO.js";
53
+ import "./skill-commands-BQL6TBIv.js";
54
54
  import "./directory-live-DatqU-eS.js";
55
- import "./targets-eG595pY0.js";
55
+ import "./targets-D8UaoWHd.js";
56
56
  import "./sandbox-paths-lj7_EVuA.js";
57
- import "./resolve-route-BPkfG5Pg.js";
57
+ import "./resolve-route-CZFzHOIe.js";
58
58
  import "./render-Bwu_WxwA.js";
59
- import "./tables-L5mXZ5y_.js";
59
+ import "./tables-B-G7Bb0l.js";
60
60
  import "./shared-clhhbWN3.js";
61
61
 
62
62
  //#region src/media-understanding/audio-preflight.ts
@@ -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-Qckp3h4k.js";
4
+ import { $ as fetchChannelPermissionsDiscord } from "./send-C0Q1u7N1.js";
5
5
 
6
6
  //#region src/discord/audit.ts
7
7
  var audit_exports = /* @__PURE__ */ __exportAll({
@@ -1,4 +1,4 @@
1
- import { x as splitOnboardingEntries } from "./helpers-0E444CR0.js";
1
+ import { x as splitOnboardingEntries } from "./helpers-vfzH9tBn.js";
2
2
 
3
3
  //#region src/channels/plugins/onboarding/channel-access.ts
4
4
  function parseAllowlistEntries(raw) {
@@ -1,4 +1,4 @@
1
- import { t as promptChannelAccessConfig } from "./channel-access-BEin0yA4.js";
1
+ import { t as promptChannelAccessConfig } from "./channel-access-CDZ-cJPq.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 { 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-CvUiB3Kh.js";
3
- import { _ as FasedAgentPluginApi, t as PluginRuntime } from "./types-DMLEeE52.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-6XVXW554.js";
3
+ import { _ as FasedAgentPluginApi, t as PluginRuntime } from "./types-CXLEOrJX.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-DWXHX-jt.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,20 +1,20 @@
1
- import { Nn as getChatChannelMeta } from "./runtime-CyTWeylK.js";
1
+ import { Nn as getChatChannelMeta } from "./runtime-CeoGffDi.js";
2
2
  import "./subsystem-DBPNbQDQ.js";
3
3
  import "./globals-B_jjtAje.js";
4
4
  import "./paths-BEmvSyOV.js";
5
5
  import "./utils-CYk9EKoq.js";
6
- import "./config-BxOWD3gF.js";
6
+ import "./config-ZMbTT0kM.js";
7
7
  import "./agent-scope-BbgPlhtw.js";
8
8
  import { f as DEFAULT_ACCOUNT_ID, p as normalizeAccountId } from "./session-key-HSJ2KQTc.js";
9
9
  import "./accounts-RHZyaB73.js";
10
10
  import "./accounts-CuqIKU8X.js";
11
11
  import "./logger-BbFvCoKk.js";
12
12
  import "./exec-DQ8j4Fm3.js";
13
- import "./accounts-DzLdrOVC.js";
13
+ import "./accounts-B5fY9hZy.js";
14
14
  import "./redact-Bm8vu_ju.js";
15
15
  import "./github-copilot-token-CUK__1s1.js";
16
16
  import "./retry-DstNBhDW.js";
17
17
  import "./paths-CTZ2RS_E.js";
18
- import { a as deleteAccountFromConfigSection, c as formatPairingApproveHint, n as applyAccountNameToChannelSection, o as setAccountEnabledInConfigSection, r as migrateBaseNameToDefaultAccount, s as buildChannelConfigSchema, t as PAIRING_APPROVED_MESSAGE, u as emptyPluginConfigSchema } from "./pairing-message-D01_6FkJ.js";
18
+ import { a as deleteAccountFromConfigSection, c as formatPairingApproveHint, n as applyAccountNameToChannelSection, o as setAccountEnabledInConfigSection, r as migrateBaseNameToDefaultAccount, s as buildChannelConfigSchema, t as PAIRING_APPROVED_MESSAGE, u as emptyPluginConfigSchema } from "./pairing-message-DpYT614h.js";
19
19
 
20
20
  export { DEFAULT_ACCOUNT_ID, PAIRING_APPROVED_MESSAGE, applyAccountNameToChannelSection, buildChannelConfigSchema, deleteAccountFromConfigSection, emptyPluginConfigSchema, formatPairingApproveHint, getChatChannelMeta, migrateBaseNameToDefaultAccount, normalizeAccountId, setAccountEnabledInConfigSection };
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { xn as INTERNAL_MESSAGE_CHANNEL } from "./runtime-CyTWeylK.js";
2
+ import { xn as INTERNAL_MESSAGE_CHANNEL } from "./runtime-CeoGffDi.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 { It as wrapExternalContent } from "./config-schema-ChJcPn7x.js";
1
+ import { It as wrapExternalContent } from "./config-schema-Cku0a8Tm.js";
2
2
 
3
3
  //#region src/security/channel-metadata.ts
4
4
  const DEFAULT_MAX_CHARS = 800;
@@ -1,16 +1,16 @@
1
- import { Lt as buildCommandsMessage, Rt as buildCommandsMessagePaginated, zt as buildHelpMessage } from "./config-schema-ChJcPn7x.js";
2
- import "./runtime-CyTWeylK.js";
1
+ import { Lt as buildCommandsMessage, Rt as buildCommandsMessagePaginated, zt as buildHelpMessage } from "./config-schema-Cku0a8Tm.js";
2
+ import "./runtime-CeoGffDi.js";
3
3
  import "./subsystem-DBPNbQDQ.js";
4
4
  import "./globals-B_jjtAje.js";
5
5
  import "./paths-BEmvSyOV.js";
6
6
  import "./utils-CYk9EKoq.js";
7
- import "./config-BxOWD3gF.js";
7
+ import "./config-ZMbTT0kM.js";
8
8
  import "./agent-scope-BbgPlhtw.js";
9
9
  import "./accounts-RHZyaB73.js";
10
10
  import "./accounts-CuqIKU8X.js";
11
11
  import "./logger-BbFvCoKk.js";
12
12
  import "./exec-DQ8j4Fm3.js";
13
- import "./accounts-DzLdrOVC.js";
13
+ import "./accounts-B5fY9hZy.js";
14
14
  import "./allow-list-BYeKk0Sy.js";
15
15
  import "./redact-Bm8vu_ju.js";
16
16
  import "./github-copilot-token-CUK__1s1.js";
@@ -19,11 +19,11 @@ import "./paths-CTZ2RS_E.js";
19
19
  import "./ip-C70a-YlD.js";
20
20
  import "./ssrf-BZG8Ztod.js";
21
21
  import "./fetch-guard-BuYrl6q2.js";
22
- import "./send-FcEJfLTd.js";
23
- import "./helpers-0E444CR0.js";
24
- import "./wsl-CXVwPntb.js";
25
- import "./pairing-store-DADXOv-J.js";
26
- import "./chunk-CwN3c1Fq.js";
22
+ import "./send-DCxAv7bV.js";
23
+ import "./helpers-vfzH9tBn.js";
24
+ import "./wsl-By1Mc-oS.js";
25
+ import "./pairing-store-CprpGco9.js";
26
+ import "./chunk-CZuCyS7k.js";
27
27
  import "./tailscale-status-ClsquRGs.js";
28
28
  import "./reply-prefix-Bqzm6DC1.js";
29
29
  import "./tokens-BvtlOzVP.js";
@@ -31,32 +31,32 @@ import "./device-pairing-D2Yq-_U6.js";
31
31
  import "./pairing-token-N_6Jbt1L.js";
32
32
  import "./diagnostic-Dfn1iERm.js";
33
33
  import "./diagnostic-session-state-HO94DMou.js";
34
- import "./optional-runtime-dependency-BaVO1F3i.js";
35
- import "./image-ops-BYc-Ol7C.js";
36
- import "./wallet-status-2yrXvqSS.js";
37
- import "./pi-model-discovery-D9-CQFS2.js";
38
- import "./runtime-dependency-D6tYtvtU.js";
34
+ import "./optional-runtime-dependency-BFpqaCzp.js";
35
+ import "./image-ops-BnOmQA5d.js";
36
+ import "./wallet-status-Coekn_SJ.js";
37
+ import "./pi-model-discovery-BQ6fFRBA.js";
38
+ import "./runtime-dependency-Cvbs0GXf.js";
39
39
  import "./ws-CocpWGhl.js";
40
40
  import "./path-alias-guards-Dg3gU-MA.js";
41
41
  import "./fs-safe-BG-VzVkL.js";
42
- import "./markdown-tables-CpNefu6e.js";
43
- import "./media-QBCmvhBQ.js";
44
- import "./send-CNxLDNQ9.js";
45
- import "./outbound-attachment-Dhi2Q-_f.js";
42
+ import "./markdown-tables-B84dPWNG.js";
43
+ import "./media-4daDcNER.js";
44
+ import "./send-B_-UtG9F.js";
45
+ import "./outbound-attachment-DvcxPP7b.js";
46
46
  import "./fetch-Cu-ahkie.js";
47
- import "./thread-bindings.state-DRZAbcUu.js";
47
+ import "./thread-bindings.state-BNWfHA0f.js";
48
48
  import "./memory-search-C3C0bD2H.js";
49
- import "./manager-VNI6sxbG.js";
49
+ import "./manager-CHYhpKHn.js";
50
50
  import "./query-expansion-Zr9qQixm.js";
51
- import "./common-BJPuBxmx.js";
52
- import "./commands-registry-Bea-V_lR.js";
53
- import "./skill-commands-C2CnUTPX.js";
51
+ import "./common-LMHJe8KW.js";
52
+ import "./commands-registry-COIbIjGO.js";
53
+ import "./skill-commands-BQL6TBIv.js";
54
54
  import "./directory-live-DatqU-eS.js";
55
- import "./targets-eG595pY0.js";
55
+ import "./targets-D8UaoWHd.js";
56
56
  import "./sandbox-paths-lj7_EVuA.js";
57
- import "./resolve-route-BPkfG5Pg.js";
57
+ import "./resolve-route-CZFzHOIe.js";
58
58
  import "./render-Bwu_WxwA.js";
59
- import "./tables-L5mXZ5y_.js";
59
+ import "./tables-B-G7Bb0l.js";
60
60
  import "./shared-clhhbWN3.js";
61
61
 
62
62
  export { buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage };
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { Ot as listChannelDocks, lt as normalizeChannelId, t as getActivePluginRegistry } from "./runtime-CyTWeylK.js";
2
+ import { Ot as listChannelDocks, lt as normalizeChannelId, t as getActivePluginRegistry } from "./runtime-CeoGffDi.js";
3
3
  import { C as isPlainObject, o as escapeRegExp } from "./utils-CYk9EKoq.js";
4
- import { Jt as resolveConfiguredModelRef, ar as DEFAULT_MODEL, er as listThinkingLevels, or as DEFAULT_PROVIDER } from "./config-BxOWD3gF.js";
4
+ import { Jt as resolveConfiguredModelRef, ar as DEFAULT_MODEL, er as listThinkingLevels, or as DEFAULT_PROVIDER } from "./config-ZMbTT0kM.js";
5
5
 
6
6
  //#region src/config/commands.ts
7
7
  function resolveAutoDefault(providerId) {
@@ -1,5 +1,5 @@
1
1
  import { t as createSubsystemLogger } from "./subsystem-DBPNbQDQ.js";
2
- import { c as detectMime, i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-BYc-Ol7C.js";
2
+ import { c as detectMime, i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-BnOmQA5d.js";
3
3
  import fs from "node:fs/promises";
4
4
 
5
5
  //#region src/media/base64.ts
@@ -4804,7 +4804,7 @@ const ANTHROPIC_MODEL_CAPABILITY_OVERRIDES = {
4804
4804
  thinkingLevels: ANTHROPIC_THINKING_LEVELS,
4805
4805
  defaultThinkingLevel: "low",
4806
4806
  thinkingMode: "anthropic-adaptive",
4807
- reasoningBudgetSupported: true
4807
+ reasoningBudgetSupported: false
4808
4808
  },
4809
4809
  "anthropic/claude-haiku-4-5": {
4810
4810
  thinkingLevels: ANTHROPIC_THINKING_LEVELS,
@@ -11121,7 +11121,13 @@ const ANTHROPIC_MODELS = [
11121
11121
  reasoning: true,
11122
11122
  input: ["text", "image"],
11123
11123
  contextWindow: 1e6,
11124
- maxTokens: 128e3
11124
+ maxTokens: 128e3,
11125
+ cost: {
11126
+ input: 10,
11127
+ output: 50,
11128
+ cacheRead: 1,
11129
+ cacheWrite: 12.5
11130
+ }
11125
11131
  }),
11126
11132
  model({
11127
11133
  id: "claude-opus-4-8",
@@ -11129,7 +11135,13 @@ const ANTHROPIC_MODELS = [
11129
11135
  reasoning: true,
11130
11136
  input: ["text", "image"],
11131
11137
  contextWindow: 1e6,
11132
- maxTokens: 128e3
11138
+ maxTokens: 128e3,
11139
+ cost: {
11140
+ input: 5,
11141
+ output: 25,
11142
+ cacheRead: .5,
11143
+ cacheWrite: 6.25
11144
+ }
11133
11145
  }),
11134
11146
  model({
11135
11147
  id: "claude-sonnet-5",
@@ -11137,7 +11149,13 @@ const ANTHROPIC_MODELS = [
11137
11149
  reasoning: true,
11138
11150
  input: ["text", "image"],
11139
11151
  contextWindow: 1e6,
11140
- maxTokens: 128e3
11152
+ maxTokens: 128e3,
11153
+ cost: {
11154
+ input: 2,
11155
+ output: 10,
11156
+ cacheRead: .2,
11157
+ cacheWrite: 2.5
11158
+ }
11141
11159
  }),
11142
11160
  model({
11143
11161
  id: "claude-haiku-4-5",