@fased/fased 0.1.65 → 0.1.66

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 (893) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +0 -0
  3. package/assets/avatar-placeholder.svg +0 -0
  4. package/assets/chrome-extension/README.md +0 -0
  5. package/assets/chrome-extension/background-utils.js +0 -0
  6. package/assets/chrome-extension/background.js +0 -0
  7. package/assets/chrome-extension/icons/icon128.png +0 -0
  8. package/assets/chrome-extension/icons/icon16.png +0 -0
  9. package/assets/chrome-extension/icons/icon32.png +0 -0
  10. package/assets/chrome-extension/icons/icon48.png +0 -0
  11. package/assets/chrome-extension/manifest.json +0 -0
  12. package/assets/chrome-extension/options-validation.js +0 -0
  13. package/assets/chrome-extension/options.html +0 -0
  14. package/assets/chrome-extension/options.js +0 -0
  15. package/config/official-external-plugin-catalog.json +0 -0
  16. package/config/sat-runtime.env +0 -0
  17. package/dist/acp/client.js +2 -2
  18. package/dist/acp/secret-file.js +2 -2
  19. package/dist/agents/agent-scope.js +2 -2
  20. package/dist/agents/apply-patch.js +8 -8
  21. package/dist/agents/auth-profiles/paths.js +2 -2
  22. package/dist/agents/auth-profiles/store.js +4 -4
  23. package/dist/agents/bash-tools.shared.js +2 -2
  24. package/dist/agents/cli-credentials.js +4 -4
  25. package/dist/agents/docs-path.js +3 -3
  26. package/dist/agents/embedded-pi-mcp.js +4 -4
  27. package/dist/agents/identity-avatar.js +3 -3
  28. package/dist/agents/identity-file.js +2 -2
  29. package/dist/agents/openai-codex-app-server.js +5 -5
  30. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  31. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  32. package/dist/agents/pi-model-discovery.js +6 -6
  33. package/dist/agents/pi-project-settings.js +3 -3
  34. package/dist/agents/sandbox/fs-bridge.js +2 -2
  35. package/dist/agents/session-dirs.js +4 -4
  36. package/dist/agents/session-write-lock.js +13 -13
  37. package/dist/agents/shell-utils.js +5 -5
  38. package/dist/agents/skills/bundled-dir.js +4 -4
  39. package/dist/agents/skills/local-loader.js +6 -6
  40. package/dist/agents/skills/plugin-skills.js +2 -2
  41. package/dist/agents/skills/trust.js +6 -6
  42. package/dist/agents/skills/workspace.js +22 -22
  43. package/dist/agents/skills-install-download.js +7 -7
  44. package/dist/agents/skills-install-plan.js +2 -2
  45. package/dist/agents/skills-install.js +2 -2
  46. package/dist/agents/skills-status.js +2 -2
  47. package/dist/agents/subagent-depth.js +2 -2
  48. package/dist/agents/system-prompt-params.js +2 -2
  49. package/dist/agents/workspace.js +22 -22
  50. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  51. package/dist/auto-reply/reply/agent-runner.js +2 -2
  52. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  53. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  54. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  55. package/dist/auto-reply/reply/session.js +3 -3
  56. package/dist/auto-reply/skill-commands.js +3 -3
  57. package/dist/auto-reply/status.js +6 -6
  58. package/dist/brand.js +1 -1
  59. package/dist/browser/chrome.executables.js +3 -3
  60. package/dist/browser/chrome.js +3 -3
  61. package/dist/browser/chrome.profile-decoration.js +6 -6
  62. package/dist/browser/profiles-service.js +2 -2
  63. package/dist/browser/server-context.js +2 -2
  64. package/dist/browser/trash.js +4 -4
  65. package/dist/build-info.json +3 -3
  66. package/dist/bundled/boot-md/HOOK.md +0 -0
  67. package/dist/bundled/bootstrap-extra-files/HOOK.md +0 -0
  68. package/dist/bundled/command-logger/HOOK.md +0 -0
  69. package/dist/bundled/session-memory/HOOK.md +0 -0
  70. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  71. package/dist/canvas-host/a2ui/index.html +0 -0
  72. package/dist/canvas-host/server.js +4 -4
  73. package/dist/capabilities/catalog.js +3 -3
  74. package/dist/channels/plugins/catalog.js +3 -3
  75. package/dist/cli/browser-cli-extension.js +6 -6
  76. package/dist/cli/command-format.js +2 -2
  77. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  78. package/dist/cli/dns-cli.js +9 -9
  79. package/dist/cli/gateway-cli/dev.js +5 -5
  80. package/dist/cli/gateway-cli/run.js +2 -2
  81. package/dist/cli/hooks-cli.js +5 -5
  82. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  83. package/dist/cli/memory-cli.js +7 -7
  84. package/dist/cli/nodes-media-utils.js +2 -2
  85. package/dist/cli/plugins-cli.js +2 -2
  86. package/dist/cli/secrets-cli.js +3 -3
  87. package/dist/cli/windows-argv.js +2 -2
  88. package/dist/commands/dashboard-link.js +3 -3
  89. package/dist/commands/doctor-install.js +5 -5
  90. package/dist/commands/doctor-memory-search.js +2 -2
  91. package/dist/commands/doctor-platform-notes.js +2 -2
  92. package/dist/commands/doctor-sandbox.js +2 -2
  93. package/dist/commands/doctor-state-integrity.js +23 -23
  94. package/dist/commands/doctor-workspace.js +3 -3
  95. package/dist/commands/doctor.js +3 -3
  96. package/dist/commands/managed-up.js +2 -2
  97. package/dist/commands/onboard-auth.credentials.js +3 -3
  98. package/dist/commands/onboarding/plugin-install.js +2 -2
  99. package/dist/commands/sessions-cleanup.js +2 -2
  100. package/dist/commands/signal-install.js +6 -6
  101. package/dist/commands/status-all/channels.js +2 -2
  102. package/dist/commands/wallet.js +10 -10
  103. package/dist/config/cache-utils.js +2 -2
  104. package/dist/config/includes.js +5 -5
  105. package/dist/config/io.js +2 -2
  106. package/dist/config/paths.js +3 -3
  107. package/dist/config/sat-runtime-ids.js +3 -3
  108. package/dist/config/sessions/disk-budget.js +6 -6
  109. package/dist/config/sessions/paths.js +2 -2
  110. package/dist/config/sessions/store.js +17 -17
  111. package/dist/config/sessions/transcript.js +4 -4
  112. package/dist/config/talk.js +2 -2
  113. package/dist/control-ui/apple-touch-icon.png +0 -0
  114. package/dist/control-ui/assets/{app-MaQnPa5G.js → app-DYxADzeH.js} +5 -5
  115. package/dist/control-ui/assets/{index-D4YMr1fA.js → index-vw_10Zeo.js} +3 -3
  116. package/dist/control-ui/assets/{mining-qMYs4aD-.js → mining-Dg-3ll0F.js} +70 -70
  117. package/dist/control-ui/boot-watchdog.js +0 -0
  118. package/dist/control-ui/fased-logo.svg +0 -0
  119. package/dist/control-ui/favicon-32.png +0 -0
  120. package/dist/control-ui/favicon.ico +0 -0
  121. package/dist/control-ui/favicon.svg +0 -0
  122. package/dist/control-ui/index.html +1 -1
  123. package/dist/control-ui/manifest.webmanifest +0 -0
  124. package/dist/control-ui/version.json +1 -1
  125. package/dist/cron/service/store.js +2 -2
  126. package/dist/cron/store.js +6 -6
  127. package/dist/daemon/systemd-system.js +5 -5
  128. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  129. package/dist/export-html/template.css +0 -0
  130. package/dist/export-html/template.html +0 -0
  131. package/dist/export-html/template.js +0 -0
  132. package/dist/export-html/vendor/highlight.min.js +0 -0
  133. package/dist/export-html/vendor/marked.min.js +0 -0
  134. package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
  135. package/dist/extensions/sat-mining/src/solana-submit.js +191 -47
  136. package/dist/extensions/sat-mining/src/submission-ledger.js +23 -3
  137. package/dist/federation/marketplace-delivery-outbox.js +5 -5
  138. package/dist/federation/marketplace-settlement-ledger.js +4 -4
  139. package/dist/gateway/a2a-task-store.js +22 -22
  140. package/dist/gateway/control-ui-boot-check.js +6 -6
  141. package/dist/gateway/control-ui-login.js +7 -7
  142. package/dist/gateway/control-ui.js +9 -9
  143. package/dist/gateway/federation-marketplace-run-store.js +14 -14
  144. package/dist/gateway/hooks-mapping.js +4 -4
  145. package/dist/gateway/server-discovery.js +2 -2
  146. package/dist/gateway/server-http.js +4 -4
  147. package/dist/gateway/server-methods/chat.js +3 -3
  148. package/dist/gateway/server-methods/sessions.js +6 -6
  149. package/dist/gateway/server-methods/usage.js +2 -2
  150. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  151. package/dist/gateway/session-utils.fs.js +24 -24
  152. package/dist/gateway/session-utils.js +6 -6
  153. package/dist/hooks/bundled-dir.js +4 -4
  154. package/dist/hooks/gmail-setup-utils.js +6 -6
  155. package/dist/hooks/import-url.js +2 -2
  156. package/dist/hooks/loader.js +4 -4
  157. package/dist/hooks/workspace.js +7 -7
  158. package/dist/infra/archive.js +17 -17
  159. package/dist/infra/boundary-file-read.js +2 -2
  160. package/dist/infra/boundary-path.js +15 -15
  161. package/dist/infra/brew.js +2 -2
  162. package/dist/infra/control-ui-assets.js +14 -14
  163. package/dist/infra/device-auth-store.js +8 -8
  164. package/dist/infra/device-identity.js +8 -8
  165. package/dist/infra/dotenv.js +2 -2
  166. package/dist/infra/exec-approvals.js +8 -8
  167. package/dist/infra/exec-command-resolution.js +4 -4
  168. package/dist/infra/exec-safe-bin-trust.js +2 -2
  169. package/dist/infra/fased-root.js +5 -5
  170. package/dist/infra/fs-safe.js +14 -14
  171. package/dist/infra/gateway-lock.js +11 -11
  172. package/dist/infra/git-commit.js +5 -5
  173. package/dist/infra/git-root.js +4 -4
  174. package/dist/infra/hosted-runtime-artifact.js +3 -3
  175. package/dist/infra/is-main.js +2 -2
  176. package/dist/infra/json-file.js +7 -7
  177. package/dist/infra/managed-runtime-bootstrap.js +6 -6
  178. package/dist/infra/outbound/delivery-queue.js +16 -16
  179. package/dist/infra/path-env.js +3 -3
  180. package/dist/infra/ports-lsof.js +4 -4
  181. package/dist/infra/provider-usage.auth.js +3 -3
  182. package/dist/infra/safe-open-sync.js +2 -2
  183. package/dist/infra/session-cost-usage.js +9 -9
  184. package/dist/infra/shell-env.js +2 -2
  185. package/dist/infra/state-migrations.fs.js +6 -6
  186. package/dist/infra/state-migrations.js +23 -23
  187. package/dist/infra/tmp-fased-dir.js +6 -6
  188. package/dist/infra/widearea-dns.js +3 -3
  189. package/dist/infra/wsl.js +2 -2
  190. package/dist/line/accounts.js +2 -2
  191. package/dist/line/download.js +2 -2
  192. package/dist/logging/config.js +3 -3
  193. package/dist/logging/logger.js +7 -7
  194. package/dist/managed/federation.js +3 -3
  195. package/dist/managed/tunnel.js +3 -3
  196. package/dist/media/store.js +13 -13
  197. package/dist/media-understanding/runner.js +3 -3
  198. package/dist/memory/embeddings.js +2 -2
  199. package/dist/memory/internal.js +10 -10
  200. package/dist/memory/manager-sync-ops.js +7 -7
  201. package/dist/memory/repair-executor.js +17 -17
  202. package/dist/node-host/invoke-system-run-plan.js +8 -8
  203. package/dist/node-host/invoke.js +2 -2
  204. package/dist/node-host/runner.js +3 -3
  205. package/dist/pairing/pairing-store.js +3 -3
  206. package/dist/plugin-sdk/{audio-preflight-I4IngVlJ.js → audio-preflight-BFLoas5R.js} +1 -1
  207. package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
  208. package/dist/plugin-sdk/{chunk-items-DLQ6_lLK.js → chunk-items-TErs62MC.js} +1 -1
  209. package/dist/plugin-sdk/command-status.js +1 -1
  210. package/dist/plugin-sdk/{config-schema-D_8FVI1C.js → config-schema-BPnaDBwZ.js} +43 -8
  211. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  212. package/dist/plugin-sdk/discord.d.ts +3 -3
  213. package/dist/plugin-sdk/file-lock.js +10 -10
  214. package/dist/plugin-sdk/index.d.ts +5 -5
  215. package/dist/plugin-sdk/index.js +1 -1
  216. package/dist/plugin-sdk/json-store.js +6 -6
  217. package/dist/plugin-sdk/{monitor-B4KF4Kpo.js → monitor-FuBPk-AL.js} +3 -3
  218. package/dist/plugin-sdk/{monitor-Bb6x1KAG.js → monitor-sW6dQdX1.js} +3 -3
  219. package/dist/plugin-sdk/{openresponses-http-DCTO8JkL.js → openresponses-http-CVZq0H-P.js} +1 -1
  220. package/dist/plugin-sdk/{pairing-message-DHPDFZbC.d.ts → pairing-message-L6L6L2YF.d.ts} +1 -1
  221. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
  222. package/dist/plugin-sdk/sat-runtime.d.ts +53 -2
  223. package/dist/plugin-sdk/sat-runtime.js +1 -1
  224. package/dist/plugin-sdk/{slack-BHmvqgjH.js → slack-BZISDxDd.js} +3 -3
  225. package/dist/plugin-sdk/slack.d.ts +3 -3
  226. package/dist/plugin-sdk/{sticker-cache-By5AcorL.js → sticker-cache-B0aPv6Lg.js} +2 -2
  227. package/dist/plugin-sdk/{telegram-actions-DGnBz1YT.js → telegram-actions-H3gePEn6.js} +2 -2
  228. package/dist/plugin-sdk/telegram.d.ts +3 -3
  229. package/dist/plugin-sdk/{tmp-fased-dir-EJGTmL1Q.d.ts → tmp-fased-dir-d1CmFAnJ.d.ts} +1 -1
  230. package/dist/plugin-sdk/{types-BdwdFCD6.d.ts → types-DUjYaWB2.d.ts} +3 -3
  231. package/dist/plugin-sdk/{types-BrCpYMxn.d.ts → types-xWjHXl1z.d.ts} +1 -1
  232. package/dist/plugin-sdk/{web-DUJwrTYs.js → web-JwP9PAZR.js} +1 -1
  233. package/dist/plugin-sdk/whatsapp.d.ts +3 -3
  234. package/dist/plugins/bundled-dir.js +3 -3
  235. package/dist/plugins/discovery.js +11 -11
  236. package/dist/plugins/loader.js +13 -13
  237. package/dist/plugins/manifest-registry.js +2 -2
  238. package/dist/plugins/manifest.js +4 -4
  239. package/dist/plugins/path-safety.js +3 -3
  240. package/dist/plugins/status-cache.js +9 -9
  241. package/dist/plugins/update.js +3 -3
  242. package/dist/plugins/web-search-install-catalog.js +3 -3
  243. package/dist/secrets/apply.js +16 -16
  244. package/dist/secrets/audit.js +11 -11
  245. package/dist/secrets/shared.js +9 -9
  246. package/dist/security/scan-paths.js +2 -2
  247. package/dist/shared/config-eval.js +2 -2
  248. package/dist/shared/pid-alive.js +2 -2
  249. package/dist/tasks/standing-orders.js +5 -5
  250. package/dist/tasks/task-flow-registry.js +5 -5
  251. package/dist/tasks/task-registry.js +5 -5
  252. package/dist/tasks/workflow-definitions.js +6 -6
  253. package/dist/telegram/token.js +5 -5
  254. package/dist/utils.js +5 -5
  255. package/dist/wallet/external-submission-ledger.js +14 -14
  256. package/dist/wallet/local-socket-signer-protocol.js +35 -1
  257. package/dist/wallet/providers/local-socket-signer-adapter.js +3 -2
  258. package/dist/wallet/signer-network-admin.js +9 -3
  259. package/dist/wallet/solana-network-discovery.js +113 -0
  260. package/dist/wallet/turnkey-reviewed-state.js +14 -14
  261. package/dist/wallet/wallet-approval-auth.js +3 -3
  262. package/dist/wallet/wallet-atomic-state.js +12 -12
  263. package/dist/wallet/wallet-audit-log.js +5 -5
  264. package/dist/wallet/wallet-inbound-events.js +3 -3
  265. package/dist/wallet/wallet-observability.js +5 -5
  266. package/dist/wallet/wallet-policy.js +5 -5
  267. package/dist/wallet/wallet-provider-registry.js +7 -7
  268. package/dist/wallet/wallet-runtime-config.js +3 -3
  269. package/dist/wallet/wallet-secrets-store.js +22 -22
  270. package/dist/wallet/wallet-send-approvals.js +21 -21
  271. package/dist/wallet/wallet-send-execution-ledger.js +3 -3
  272. package/dist/wallet/wallet-settlement-links.js +3 -3
  273. package/dist/wallet/wallet-standard-review.js +14 -14
  274. package/dist/web/accounts.js +3 -3
  275. package/dist/web/auth-store.js +18 -18
  276. package/dist/web/session.js +4 -4
  277. package/dist/wizard/host-security-capability.js +3 -3
  278. package/dist/wizard/onboarding.host-security.js +3 -3
  279. package/dist/wizard/onboarding.js +17 -15
  280. package/dist/wizard/onboarding.wallet.js +27 -27
  281. package/docs/reference/templates/AGENTS.dev.md +0 -0
  282. package/docs/reference/templates/AGENTS.md +0 -0
  283. package/docs/reference/templates/BOOT.md +0 -0
  284. package/docs/reference/templates/BOOTSTRAP.md +0 -0
  285. package/docs/reference/templates/HEARTBEAT.md +0 -0
  286. package/docs/reference/templates/IDENTITY.dev.md +0 -0
  287. package/docs/reference/templates/IDENTITY.md +0 -0
  288. package/docs/reference/templates/SOUL.dev.md +0 -0
  289. package/docs/reference/templates/SOUL.md +0 -0
  290. package/docs/reference/templates/TOOLS.dev.md +0 -0
  291. package/docs/reference/templates/TOOLS.md +0 -0
  292. package/docs/reference/templates/USER.dev.md +0 -0
  293. package/docs/reference/templates/USER.md +0 -0
  294. package/extensions/acpx/fased.plugin.json +0 -0
  295. package/extensions/acpx/package.json +1 -1
  296. package/extensions/acpx/skills/acp-router/SKILL.md +0 -0
  297. package/extensions/acpx/src/config.ts +0 -0
  298. package/extensions/acpx/src/ensure.ts +0 -0
  299. package/extensions/acpx/src/mcp-readonly-tool-registry.ts +0 -0
  300. package/extensions/acpx/src/mcp-status-adapter.ts +0 -0
  301. package/extensions/acpx/src/runtime-internals/events.ts +0 -0
  302. package/extensions/acpx/src/runtime-internals/process.ts +0 -0
  303. package/extensions/acpx/src/runtime-internals/shared.ts +0 -0
  304. package/extensions/acpx/src/runtime.ts +0 -0
  305. package/extensions/acpx/src/service.ts +0 -0
  306. package/extensions/bluebubbles/README.md +0 -0
  307. package/extensions/bluebubbles/fased.plugin.json +0 -0
  308. package/extensions/bluebubbles/package.json +1 -1
  309. package/extensions/bluebubbles/src/account-resolve.ts +0 -0
  310. package/extensions/bluebubbles/src/accounts.ts +0 -0
  311. package/extensions/bluebubbles/src/actions.ts +0 -0
  312. package/extensions/bluebubbles/src/attachments.ts +0 -0
  313. package/extensions/bluebubbles/src/channel.ts +0 -0
  314. package/extensions/bluebubbles/src/chat.ts +0 -0
  315. package/extensions/bluebubbles/src/config-schema.ts +0 -0
  316. package/extensions/bluebubbles/src/history.ts +0 -0
  317. package/extensions/bluebubbles/src/media-send.ts +0 -0
  318. package/extensions/bluebubbles/src/monitor-normalize.ts +0 -0
  319. package/extensions/bluebubbles/src/monitor-processing.ts +0 -0
  320. package/extensions/bluebubbles/src/monitor-reply-cache.ts +0 -0
  321. package/extensions/bluebubbles/src/monitor-shared.ts +0 -0
  322. package/extensions/bluebubbles/src/monitor.ts +0 -0
  323. package/extensions/bluebubbles/src/multipart.ts +0 -0
  324. package/extensions/bluebubbles/src/onboarding.ts +0 -0
  325. package/extensions/bluebubbles/src/probe.ts +0 -0
  326. package/extensions/bluebubbles/src/reactions.ts +0 -0
  327. package/extensions/bluebubbles/src/request-url.ts +0 -0
  328. package/extensions/bluebubbles/src/runtime.ts +0 -0
  329. package/extensions/bluebubbles/src/send-helpers.ts +0 -0
  330. package/extensions/bluebubbles/src/send.ts +0 -0
  331. package/extensions/bluebubbles/src/targets.ts +0 -0
  332. package/extensions/bluebubbles/src/test-mocks.ts +0 -0
  333. package/extensions/bluebubbles/src/types.ts +0 -0
  334. package/extensions/copilot-proxy/README.md +0 -0
  335. package/extensions/copilot-proxy/fased.plugin.json +0 -0
  336. package/extensions/copilot-proxy/package.json +1 -1
  337. package/extensions/device-pair/fased.plugin.json +0 -0
  338. package/extensions/diagnostics-otel/fased.plugin.json +0 -0
  339. package/extensions/diagnostics-otel/package.json +1 -1
  340. package/extensions/diagnostics-otel/src/service.ts +0 -0
  341. package/extensions/fased-federation/README.md +0 -0
  342. package/extensions/fased-federation/fased.plugin.json +0 -0
  343. package/extensions/fased-federation/package.json +1 -1
  344. package/extensions/google-gemini-cli-auth/README.md +0 -0
  345. package/extensions/google-gemini-cli-auth/fased.plugin.json +0 -0
  346. package/extensions/google-gemini-cli-auth/oauth.ts +0 -0
  347. package/extensions/google-gemini-cli-auth/package.json +1 -1
  348. package/extensions/imessage/fased.plugin.json +0 -0
  349. package/extensions/imessage/package.json +1 -1
  350. package/extensions/imessage/src/channel.ts +0 -0
  351. package/extensions/imessage/src/runtime.ts +0 -0
  352. package/extensions/irc/fased.plugin.json +0 -0
  353. package/extensions/irc/package.json +1 -1
  354. package/extensions/irc/src/accounts.ts +0 -0
  355. package/extensions/irc/src/channel.ts +0 -0
  356. package/extensions/irc/src/client.ts +0 -0
  357. package/extensions/irc/src/config-schema.ts +0 -0
  358. package/extensions/irc/src/connect-options.ts +0 -0
  359. package/extensions/irc/src/control-chars.ts +0 -0
  360. package/extensions/irc/src/inbound.ts +0 -0
  361. package/extensions/irc/src/monitor.ts +0 -0
  362. package/extensions/irc/src/normalize.ts +0 -0
  363. package/extensions/irc/src/onboarding.ts +0 -0
  364. package/extensions/irc/src/policy.ts +0 -0
  365. package/extensions/irc/src/probe.ts +0 -0
  366. package/extensions/irc/src/protocol.ts +0 -0
  367. package/extensions/irc/src/runtime.ts +0 -0
  368. package/extensions/irc/src/send.ts +0 -0
  369. package/extensions/irc/src/types.ts +0 -0
  370. package/extensions/line/fased.plugin.json +0 -0
  371. package/extensions/line/package.json +1 -1
  372. package/extensions/line/src/card-command.ts +0 -0
  373. package/extensions/line/src/channel.ts +0 -0
  374. package/extensions/line/src/runtime.ts +0 -0
  375. package/extensions/llm-task/README.md +0 -0
  376. package/extensions/llm-task/fased.plugin.json +0 -0
  377. package/extensions/llm-task/package.json +1 -1
  378. package/extensions/lobster/README.md +0 -0
  379. package/extensions/lobster/SKILL.md +0 -0
  380. package/extensions/lobster/fased.plugin.json +0 -0
  381. package/extensions/lobster/package.json +1 -1
  382. package/extensions/lobster/src/test-helpers.ts +0 -0
  383. package/extensions/lobster/src/windows-spawn.ts +0 -0
  384. package/extensions/matrix/CHANGELOG.md +6 -0
  385. package/extensions/matrix/fased.plugin.json +0 -0
  386. package/extensions/matrix/package.json +1 -1
  387. package/extensions/matrix/src/actions.ts +0 -0
  388. package/extensions/matrix/src/channel.ts +0 -0
  389. package/extensions/matrix/src/config-schema.ts +0 -0
  390. package/extensions/matrix/src/directory-live.ts +0 -0
  391. package/extensions/matrix/src/group-mentions.ts +0 -0
  392. package/extensions/matrix/src/matrix/accounts.ts +0 -0
  393. package/extensions/matrix/src/matrix/actions/client.ts +0 -0
  394. package/extensions/matrix/src/matrix/actions/limits.ts +0 -0
  395. package/extensions/matrix/src/matrix/actions/messages.ts +0 -0
  396. package/extensions/matrix/src/matrix/actions/pins.ts +0 -0
  397. package/extensions/matrix/src/matrix/actions/reactions.ts +0 -0
  398. package/extensions/matrix/src/matrix/actions/room.ts +0 -0
  399. package/extensions/matrix/src/matrix/actions/summary.ts +0 -0
  400. package/extensions/matrix/src/matrix/actions/types.ts +0 -0
  401. package/extensions/matrix/src/matrix/actions.ts +0 -0
  402. package/extensions/matrix/src/matrix/active-client.ts +0 -0
  403. package/extensions/matrix/src/matrix/client/config.ts +0 -0
  404. package/extensions/matrix/src/matrix/client/create-client.ts +0 -0
  405. package/extensions/matrix/src/matrix/client/logging.ts +0 -0
  406. package/extensions/matrix/src/matrix/client/runtime.ts +0 -0
  407. package/extensions/matrix/src/matrix/client/shared.ts +0 -0
  408. package/extensions/matrix/src/matrix/client/storage.ts +0 -0
  409. package/extensions/matrix/src/matrix/client/types.ts +0 -0
  410. package/extensions/matrix/src/matrix/client-bootstrap.ts +0 -0
  411. package/extensions/matrix/src/matrix/client.ts +0 -0
  412. package/extensions/matrix/src/matrix/credentials.ts +0 -0
  413. package/extensions/matrix/src/matrix/deps.ts +0 -0
  414. package/extensions/matrix/src/matrix/format.ts +0 -0
  415. package/extensions/matrix/src/matrix/monitor/access-policy.ts +0 -0
  416. package/extensions/matrix/src/matrix/monitor/allowlist.ts +0 -0
  417. package/extensions/matrix/src/matrix/monitor/auto-join.ts +0 -0
  418. package/extensions/matrix/src/matrix/monitor/direct.ts +0 -0
  419. package/extensions/matrix/src/matrix/monitor/events.ts +0 -0
  420. package/extensions/matrix/src/matrix/monitor/handler.ts +0 -0
  421. package/extensions/matrix/src/matrix/monitor/inbound-body.ts +0 -0
  422. package/extensions/matrix/src/matrix/monitor/location.ts +0 -0
  423. package/extensions/matrix/src/matrix/monitor/media.ts +0 -0
  424. package/extensions/matrix/src/matrix/monitor/mentions.ts +0 -0
  425. package/extensions/matrix/src/matrix/monitor/replies.ts +0 -0
  426. package/extensions/matrix/src/matrix/monitor/room-info.ts +0 -0
  427. package/extensions/matrix/src/matrix/monitor/rooms.ts +0 -0
  428. package/extensions/matrix/src/matrix/monitor/threads.ts +0 -0
  429. package/extensions/matrix/src/matrix/monitor/types.ts +0 -0
  430. package/extensions/matrix/src/matrix/poll-types.ts +0 -0
  431. package/extensions/matrix/src/matrix/probe.ts +0 -0
  432. package/extensions/matrix/src/matrix/send/client.ts +0 -0
  433. package/extensions/matrix/src/matrix/send/formatting.ts +0 -0
  434. package/extensions/matrix/src/matrix/send/media.ts +0 -0
  435. package/extensions/matrix/src/matrix/send/targets.ts +0 -0
  436. package/extensions/matrix/src/matrix/send/types.ts +0 -0
  437. package/extensions/matrix/src/matrix/send-queue.ts +0 -0
  438. package/extensions/matrix/src/matrix/send.ts +0 -0
  439. package/extensions/matrix/src/onboarding.ts +0 -0
  440. package/extensions/matrix/src/outbound.ts +0 -0
  441. package/extensions/matrix/src/resolve-targets.ts +0 -0
  442. package/extensions/matrix/src/runtime.ts +0 -0
  443. package/extensions/matrix/src/tool-actions.ts +0 -0
  444. package/extensions/matrix/src/types.ts +0 -0
  445. package/extensions/mattermost/fased.plugin.json +0 -0
  446. package/extensions/mattermost/package.json +1 -1
  447. package/extensions/mattermost/src/channel.ts +0 -0
  448. package/extensions/mattermost/src/config-schema.ts +0 -0
  449. package/extensions/mattermost/src/group-mentions.ts +0 -0
  450. package/extensions/mattermost/src/mattermost/accounts.ts +0 -0
  451. package/extensions/mattermost/src/mattermost/client.ts +0 -0
  452. package/extensions/mattermost/src/mattermost/monitor-auth.ts +0 -0
  453. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -0
  454. package/extensions/mattermost/src/mattermost/monitor-onchar.ts +0 -0
  455. package/extensions/mattermost/src/mattermost/monitor-websocket.ts +0 -0
  456. package/extensions/mattermost/src/mattermost/monitor.ts +0 -0
  457. package/extensions/mattermost/src/mattermost/probe.ts +0 -0
  458. package/extensions/mattermost/src/mattermost/reactions.test-helpers.ts +0 -0
  459. package/extensions/mattermost/src/mattermost/reactions.ts +0 -0
  460. package/extensions/mattermost/src/mattermost/reconnect.ts +0 -0
  461. package/extensions/mattermost/src/mattermost/send.ts +0 -0
  462. package/extensions/mattermost/src/normalize.ts +0 -0
  463. package/extensions/mattermost/src/onboarding-helpers.ts +0 -0
  464. package/extensions/mattermost/src/onboarding.ts +0 -0
  465. package/extensions/mattermost/src/runtime.ts +0 -0
  466. package/extensions/mattermost/src/types.ts +0 -0
  467. package/extensions/memory-core/fased.plugin.json +0 -0
  468. package/extensions/memory-core/package.json +2 -2
  469. package/extensions/memory-lancedb/config.ts +0 -0
  470. package/extensions/memory-lancedb/fased.plugin.json +0 -0
  471. package/extensions/memory-lancedb/package.json +1 -1
  472. package/extensions/minimax-portal-auth/README.md +0 -0
  473. package/extensions/minimax-portal-auth/fased.plugin.json +0 -0
  474. package/extensions/minimax-portal-auth/oauth.ts +0 -0
  475. package/extensions/minimax-portal-auth/package.json +1 -1
  476. package/extensions/msteams/CHANGELOG.md +6 -0
  477. package/extensions/msteams/fased.plugin.json +0 -0
  478. package/extensions/msteams/package.json +1 -1
  479. package/extensions/msteams/src/attachments/download.ts +0 -0
  480. package/extensions/msteams/src/attachments/graph.ts +0 -0
  481. package/extensions/msteams/src/attachments/html.ts +0 -0
  482. package/extensions/msteams/src/attachments/payload.ts +0 -0
  483. package/extensions/msteams/src/attachments/remote-media.ts +0 -0
  484. package/extensions/msteams/src/attachments/shared.ts +0 -0
  485. package/extensions/msteams/src/attachments/types.ts +0 -0
  486. package/extensions/msteams/src/attachments.ts +0 -0
  487. package/extensions/msteams/src/channel.ts +0 -0
  488. package/extensions/msteams/src/conversation-store-fs.ts +0 -0
  489. package/extensions/msteams/src/conversation-store-memory.ts +0 -0
  490. package/extensions/msteams/src/conversation-store.ts +0 -0
  491. package/extensions/msteams/src/directory-live.ts +0 -0
  492. package/extensions/msteams/src/errors.ts +0 -0
  493. package/extensions/msteams/src/file-consent-helpers.ts +0 -0
  494. package/extensions/msteams/src/file-consent.ts +0 -0
  495. package/extensions/msteams/src/file-lock.ts +0 -0
  496. package/extensions/msteams/src/graph-chat.ts +0 -0
  497. package/extensions/msteams/src/graph-upload.ts +0 -0
  498. package/extensions/msteams/src/graph-users.ts +0 -0
  499. package/extensions/msteams/src/graph.ts +0 -0
  500. package/extensions/msteams/src/inbound.ts +0 -0
  501. package/extensions/msteams/src/media-helpers.ts +0 -0
  502. package/extensions/msteams/src/mentions.ts +0 -0
  503. package/extensions/msteams/src/messenger.ts +0 -0
  504. package/extensions/msteams/src/monitor-handler/inbound-media.ts +0 -0
  505. package/extensions/msteams/src/monitor-handler/message-handler.ts +0 -0
  506. package/extensions/msteams/src/monitor-handler.ts +0 -0
  507. package/extensions/msteams/src/monitor-types.ts +0 -0
  508. package/extensions/msteams/src/monitor.ts +0 -0
  509. package/extensions/msteams/src/onboarding.ts +0 -0
  510. package/extensions/msteams/src/outbound.ts +0 -0
  511. package/extensions/msteams/src/pending-uploads.ts +0 -0
  512. package/extensions/msteams/src/policy.ts +0 -0
  513. package/extensions/msteams/src/polls-store-memory.ts +0 -0
  514. package/extensions/msteams/src/polls.ts +0 -0
  515. package/extensions/msteams/src/probe.ts +0 -0
  516. package/extensions/msteams/src/reply-dispatcher.ts +0 -0
  517. package/extensions/msteams/src/resolve-allowlist.ts +0 -0
  518. package/extensions/msteams/src/runtime.ts +0 -0
  519. package/extensions/msteams/src/sdk-types.ts +0 -0
  520. package/extensions/msteams/src/sdk.ts +0 -0
  521. package/extensions/msteams/src/send-context.ts +0 -0
  522. package/extensions/msteams/src/send.ts +0 -0
  523. package/extensions/msteams/src/sent-message-cache.ts +0 -0
  524. package/extensions/msteams/src/storage.ts +0 -0
  525. package/extensions/msteams/src/store-fs.ts +0 -0
  526. package/extensions/msteams/src/test-runtime.ts +0 -0
  527. package/extensions/msteams/src/token-response.ts +0 -0
  528. package/extensions/msteams/src/token.ts +0 -0
  529. package/extensions/nextcloud-talk/fased.plugin.json +0 -0
  530. package/extensions/nextcloud-talk/package.json +1 -1
  531. package/extensions/nextcloud-talk/src/accounts.ts +0 -0
  532. package/extensions/nextcloud-talk/src/config-schema.ts +0 -0
  533. package/extensions/nextcloud-talk/src/format.ts +0 -0
  534. package/extensions/nextcloud-talk/src/inbound.ts +0 -0
  535. package/extensions/nextcloud-talk/src/monitor.ts +0 -0
  536. package/extensions/nextcloud-talk/src/normalize.ts +0 -0
  537. package/extensions/nextcloud-talk/src/onboarding.ts +0 -0
  538. package/extensions/nextcloud-talk/src/policy.ts +0 -0
  539. package/extensions/nextcloud-talk/src/replay-guard.ts +0 -0
  540. package/extensions/nextcloud-talk/src/room-info.ts +0 -0
  541. package/extensions/nextcloud-talk/src/runtime.ts +0 -0
  542. package/extensions/nextcloud-talk/src/send.ts +0 -0
  543. package/extensions/nextcloud-talk/src/signature.ts +0 -0
  544. package/extensions/nextcloud-talk/src/types.ts +0 -0
  545. package/extensions/nostr/CHANGELOG.md +6 -0
  546. package/extensions/nostr/README.md +0 -0
  547. package/extensions/nostr/fased.plugin.json +0 -0
  548. package/extensions/nostr/package.json +1 -1
  549. package/extensions/nostr/src/channel.ts +0 -0
  550. package/extensions/nostr/src/config-schema.ts +0 -0
  551. package/extensions/nostr/src/metrics.ts +0 -0
  552. package/extensions/nostr/src/nostr-bus.ts +0 -0
  553. package/extensions/nostr/src/nostr-profile-http.ts +0 -0
  554. package/extensions/nostr/src/nostr-profile-import.ts +0 -0
  555. package/extensions/nostr/src/nostr-profile.ts +0 -0
  556. package/extensions/nostr/src/nostr-state-store.ts +0 -0
  557. package/extensions/nostr/src/onboarding.ts +0 -0
  558. package/extensions/nostr/src/runtime.ts +0 -0
  559. package/extensions/nostr/src/seen-tracker.ts +0 -0
  560. package/extensions/nostr/src/types.ts +0 -0
  561. package/extensions/nostr/test/setup.ts +0 -0
  562. package/extensions/open-prose/README.md +0 -0
  563. package/extensions/open-prose/fased.plugin.json +0 -0
  564. package/extensions/open-prose/package.json +1 -1
  565. package/extensions/open-prose/skills/prose/LICENSE +0 -0
  566. package/extensions/open-prose/skills/prose/SKILL.md +0 -0
  567. package/extensions/open-prose/skills/prose/alt-borges.md +0 -0
  568. package/extensions/open-prose/skills/prose/alts/arabian-nights.md +0 -0
  569. package/extensions/open-prose/skills/prose/alts/borges.md +0 -0
  570. package/extensions/open-prose/skills/prose/alts/folk.md +0 -0
  571. package/extensions/open-prose/skills/prose/alts/homer.md +0 -0
  572. package/extensions/open-prose/skills/prose/alts/kafka.md +0 -0
  573. package/extensions/open-prose/skills/prose/compiler.md +0 -0
  574. package/extensions/open-prose/skills/prose/examples/01-hello-world.prose +0 -0
  575. package/extensions/open-prose/skills/prose/examples/02-research-and-summarize.prose +0 -0
  576. package/extensions/open-prose/skills/prose/examples/03-code-review.prose +0 -0
  577. package/extensions/open-prose/skills/prose/examples/04-write-and-refine.prose +0 -0
  578. package/extensions/open-prose/skills/prose/examples/05-debug-issue.prose +0 -0
  579. package/extensions/open-prose/skills/prose/examples/06-explain-codebase.prose +0 -0
  580. package/extensions/open-prose/skills/prose/examples/07-refactor.prose +0 -0
  581. package/extensions/open-prose/skills/prose/examples/08-blog-post.prose +0 -0
  582. package/extensions/open-prose/skills/prose/examples/09-research-with-agents.prose +0 -0
  583. package/extensions/open-prose/skills/prose/examples/10-code-review-agents.prose +0 -0
  584. package/extensions/open-prose/skills/prose/examples/11-skills-and-imports.prose +0 -0
  585. package/extensions/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +0 -0
  586. package/extensions/open-prose/skills/prose/examples/13-variables-and-context.prose +0 -0
  587. package/extensions/open-prose/skills/prose/examples/14-composition-blocks.prose +0 -0
  588. package/extensions/open-prose/skills/prose/examples/15-inline-sequences.prose +0 -0
  589. package/extensions/open-prose/skills/prose/examples/16-parallel-reviews.prose +0 -0
  590. package/extensions/open-prose/skills/prose/examples/17-parallel-research.prose +0 -0
  591. package/extensions/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +0 -0
  592. package/extensions/open-prose/skills/prose/examples/19-advanced-parallel.prose +0 -0
  593. package/extensions/open-prose/skills/prose/examples/20-fixed-loops.prose +0 -0
  594. package/extensions/open-prose/skills/prose/examples/21-pipeline-operations.prose +0 -0
  595. package/extensions/open-prose/skills/prose/examples/22-error-handling.prose +0 -0
  596. package/extensions/open-prose/skills/prose/examples/23-retry-with-backoff.prose +0 -0
  597. package/extensions/open-prose/skills/prose/examples/24-choice-blocks.prose +0 -0
  598. package/extensions/open-prose/skills/prose/examples/25-conditionals.prose +0 -0
  599. package/extensions/open-prose/skills/prose/examples/26-parameterized-blocks.prose +0 -0
  600. package/extensions/open-prose/skills/prose/examples/27-string-interpolation.prose +0 -0
  601. package/extensions/open-prose/skills/prose/examples/28-automated-pr-review.prose +0 -0
  602. package/extensions/open-prose/skills/prose/examples/28-gas-town.prose +0 -0
  603. package/extensions/open-prose/skills/prose/examples/29-captains-chair.prose +0 -0
  604. package/extensions/open-prose/skills/prose/examples/30-captains-chair-simple.prose +0 -0
  605. package/extensions/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +0 -0
  606. package/extensions/open-prose/skills/prose/examples/33-pr-review-autofix.prose +0 -0
  607. package/extensions/open-prose/skills/prose/examples/34-content-pipeline.prose +0 -0
  608. package/extensions/open-prose/skills/prose/examples/35-feature-factory.prose +0 -0
  609. package/extensions/open-prose/skills/prose/examples/36-bug-hunter.prose +0 -0
  610. package/extensions/open-prose/skills/prose/examples/37-the-forge.prose +0 -0
  611. package/extensions/open-prose/skills/prose/examples/38-skill-scan.prose +0 -0
  612. package/extensions/open-prose/skills/prose/examples/39-architect-by-simulation.prose +0 -0
  613. package/extensions/open-prose/skills/prose/examples/40-rlm-self-refine.prose +0 -0
  614. package/extensions/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +0 -0
  615. package/extensions/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +0 -0
  616. package/extensions/open-prose/skills/prose/examples/43-rlm-pairwise.prose +0 -0
  617. package/extensions/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +0 -0
  618. package/extensions/open-prose/skills/prose/examples/45-plugin-release.prose +0 -0
  619. package/extensions/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +0 -0
  620. package/extensions/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +0 -0
  621. package/extensions/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +0 -0
  622. package/extensions/open-prose/skills/prose/examples/47-language-self-improvement.prose +0 -0
  623. package/extensions/open-prose/skills/prose/examples/48-habit-miner.prose +0 -0
  624. package/extensions/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +0 -0
  625. package/extensions/open-prose/skills/prose/examples/README.md +0 -0
  626. package/extensions/open-prose/skills/prose/examples/roadmap/README.md +0 -0
  627. package/extensions/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +0 -0
  628. package/extensions/open-prose/skills/prose/examples/roadmap/parallel-review.prose +0 -0
  629. package/extensions/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +0 -0
  630. package/extensions/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +0 -0
  631. package/extensions/open-prose/skills/prose/guidance/antipatterns.md +0 -0
  632. package/extensions/open-prose/skills/prose/guidance/patterns.md +0 -0
  633. package/extensions/open-prose/skills/prose/guidance/system-prompt.md +0 -0
  634. package/extensions/open-prose/skills/prose/help.md +0 -0
  635. package/extensions/open-prose/skills/prose/lib/README.md +0 -0
  636. package/extensions/open-prose/skills/prose/lib/calibrator.prose +0 -0
  637. package/extensions/open-prose/skills/prose/lib/cost-analyzer.prose +0 -0
  638. package/extensions/open-prose/skills/prose/lib/error-forensics.prose +0 -0
  639. package/extensions/open-prose/skills/prose/lib/inspector.prose +0 -0
  640. package/extensions/open-prose/skills/prose/lib/profiler.prose +0 -0
  641. package/extensions/open-prose/skills/prose/lib/program-improver.prose +0 -0
  642. package/extensions/open-prose/skills/prose/lib/project-memory.prose +0 -0
  643. package/extensions/open-prose/skills/prose/lib/user-memory.prose +0 -0
  644. package/extensions/open-prose/skills/prose/lib/vm-improver.prose +0 -0
  645. package/extensions/open-prose/skills/prose/primitives/session.md +0 -0
  646. package/extensions/open-prose/skills/prose/prose.md +0 -0
  647. package/extensions/open-prose/skills/prose/state/filesystem.md +0 -0
  648. package/extensions/open-prose/skills/prose/state/in-context.md +0 -0
  649. package/extensions/open-prose/skills/prose/state/postgres.md +0 -0
  650. package/extensions/open-prose/skills/prose/state/sqlite.md +0 -0
  651. package/extensions/phone-control/fased.plugin.json +0 -0
  652. package/extensions/qwen-portal-auth/README.md +0 -0
  653. package/extensions/qwen-portal-auth/fased.plugin.json +0 -0
  654. package/extensions/qwen-portal-auth/oauth.ts +0 -0
  655. package/extensions/sat-mining/fased.plugin.json +0 -0
  656. package/extensions/sat-mining/index.ts +21 -10
  657. package/extensions/sat-mining/package.json +1 -1
  658. package/extensions/sat-mining/skills/sat-mining/SKILL.md +0 -0
  659. package/extensions/sat-mining/src/auto-planner.ts +0 -0
  660. package/extensions/sat-mining/src/chain-time.ts +0 -0
  661. package/extensions/sat-mining/src/dispute-review.ts +0 -0
  662. package/extensions/sat-mining/src/hash-spec.ts +0 -0
  663. package/extensions/sat-mining/src/planner-analytics.ts +0 -0
  664. package/extensions/sat-mining/src/planner-outcomes.ts +0 -0
  665. package/extensions/sat-mining/src/planner-policy-eval.ts +0 -0
  666. package/extensions/sat-mining/src/planner-policy.ts +0 -0
  667. package/extensions/sat-mining/src/replay.ts +0 -0
  668. package/extensions/sat-mining/src/service-read-timeout.ts +0 -0
  669. package/extensions/sat-mining/src/solana-submit.ts +281 -47
  670. package/extensions/sat-mining/src/strategy-base.ts +0 -0
  671. package/extensions/sat-mining/src/strategy-engine.ts +0 -0
  672. package/extensions/sat-mining/src/strategy-validate.ts +0 -0
  673. package/extensions/sat-mining/src/submission-ledger.ts +18 -3
  674. package/extensions/shared/resolve-target-test-helpers.ts +0 -0
  675. package/extensions/signal/fased.plugin.json +0 -0
  676. package/extensions/signal/package.json +1 -1
  677. package/extensions/signal/src/channel.ts +0 -0
  678. package/extensions/signal/src/runtime.ts +0 -0
  679. package/extensions/synology-chat/fased.plugin.json +0 -0
  680. package/extensions/synology-chat/package.json +1 -1
  681. package/extensions/synology-chat/src/accounts.ts +0 -0
  682. package/extensions/synology-chat/src/channel.ts +0 -0
  683. package/extensions/synology-chat/src/client.ts +0 -0
  684. package/extensions/synology-chat/src/runtime.ts +0 -0
  685. package/extensions/synology-chat/src/security.ts +0 -0
  686. package/extensions/synology-chat/src/types.ts +0 -0
  687. package/extensions/synology-chat/src/webhook-handler.ts +0 -0
  688. package/extensions/talk-voice/fased.plugin.json +0 -0
  689. package/extensions/thread-ownership/fased.plugin.json +0 -0
  690. package/extensions/tlon/README.md +0 -0
  691. package/extensions/tlon/fased.plugin.json +0 -0
  692. package/extensions/tlon/package.json +1 -1
  693. package/extensions/tlon/src/account-fields.ts +0 -0
  694. package/extensions/tlon/src/channel.ts +0 -0
  695. package/extensions/tlon/src/config-schema.ts +0 -0
  696. package/extensions/tlon/src/monitor/discovery.ts +0 -0
  697. package/extensions/tlon/src/monitor/history.ts +0 -0
  698. package/extensions/tlon/src/monitor/processed-messages.ts +0 -0
  699. package/extensions/tlon/src/monitor/utils.ts +0 -0
  700. package/extensions/tlon/src/onboarding.ts +0 -0
  701. package/extensions/tlon/src/runtime.ts +0 -0
  702. package/extensions/tlon/src/targets.ts +0 -0
  703. package/extensions/tlon/src/types.ts +0 -0
  704. package/extensions/tlon/src/urbit/auth.ts +0 -0
  705. package/extensions/tlon/src/urbit/base-url.ts +0 -0
  706. package/extensions/tlon/src/urbit/channel-client.ts +0 -0
  707. package/extensions/tlon/src/urbit/channel-ops.ts +0 -0
  708. package/extensions/tlon/src/urbit/context.ts +0 -0
  709. package/extensions/tlon/src/urbit/errors.ts +0 -0
  710. package/extensions/tlon/src/urbit/fetch.ts +0 -0
  711. package/extensions/tlon/src/urbit/send.ts +0 -0
  712. package/extensions/tlon/src/urbit/sse-client.ts +0 -0
  713. package/extensions/twitch/CHANGELOG.md +6 -0
  714. package/extensions/twitch/README.md +0 -0
  715. package/extensions/twitch/fased.plugin.json +0 -0
  716. package/extensions/twitch/package.json +1 -1
  717. package/extensions/twitch/src/access-control.ts +0 -0
  718. package/extensions/twitch/src/actions.ts +0 -0
  719. package/extensions/twitch/src/client-manager-registry.ts +0 -0
  720. package/extensions/twitch/src/config-schema.ts +0 -0
  721. package/extensions/twitch/src/config.ts +0 -0
  722. package/extensions/twitch/src/monitor.ts +0 -0
  723. package/extensions/twitch/src/onboarding.ts +0 -0
  724. package/extensions/twitch/src/outbound.ts +0 -0
  725. package/extensions/twitch/src/probe.ts +0 -0
  726. package/extensions/twitch/src/resolver.ts +0 -0
  727. package/extensions/twitch/src/runtime.ts +0 -0
  728. package/extensions/twitch/src/send.ts +0 -0
  729. package/extensions/twitch/src/status.ts +0 -0
  730. package/extensions/twitch/src/test-fixtures.ts +0 -0
  731. package/extensions/twitch/src/twitch-client.ts +0 -0
  732. package/extensions/twitch/src/utils/markdown.ts +0 -0
  733. package/extensions/twitch/src/utils/twitch.ts +0 -0
  734. package/extensions/twitch/test/setup.ts +0 -0
  735. package/extensions/voice-call/CHANGELOG.md +6 -0
  736. package/extensions/voice-call/README.md +0 -0
  737. package/extensions/voice-call/fased.plugin.json +0 -0
  738. package/extensions/voice-call/package.json +1 -1
  739. package/extensions/voice-call/src/allowlist.ts +0 -0
  740. package/extensions/voice-call/src/cli.ts +0 -0
  741. package/extensions/voice-call/src/core-bridge.ts +0 -0
  742. package/extensions/voice-call/src/http-headers.ts +0 -0
  743. package/extensions/voice-call/src/manager/context.ts +0 -0
  744. package/extensions/voice-call/src/manager/events.ts +0 -0
  745. package/extensions/voice-call/src/manager/lookup.ts +0 -0
  746. package/extensions/voice-call/src/manager/outbound.ts +0 -0
  747. package/extensions/voice-call/src/manager/state.ts +0 -0
  748. package/extensions/voice-call/src/manager/store.ts +0 -0
  749. package/extensions/voice-call/src/manager/timers.ts +0 -0
  750. package/extensions/voice-call/src/manager/twiml.ts +0 -0
  751. package/extensions/voice-call/src/manager.ts +0 -0
  752. package/extensions/voice-call/src/media-stream.ts +0 -0
  753. package/extensions/voice-call/src/providers/base.ts +0 -0
  754. package/extensions/voice-call/src/providers/mock.ts +0 -0
  755. package/extensions/voice-call/src/providers/plivo.ts +0 -0
  756. package/extensions/voice-call/src/providers/shared/guarded-json-api.ts +0 -0
  757. package/extensions/voice-call/src/providers/stt-openai-realtime.ts +0 -0
  758. package/extensions/voice-call/src/providers/telnyx.ts +0 -0
  759. package/extensions/voice-call/src/providers/tts-openai.ts +0 -0
  760. package/extensions/voice-call/src/providers/twilio/api.ts +0 -0
  761. package/extensions/voice-call/src/providers/twilio/webhook.ts +0 -0
  762. package/extensions/voice-call/src/providers/twilio.ts +0 -0
  763. package/extensions/voice-call/src/response-generator.ts +0 -0
  764. package/extensions/voice-call/src/runtime.ts +0 -0
  765. package/extensions/voice-call/src/telephony-audio.ts +0 -0
  766. package/extensions/voice-call/src/telephony-tts.ts +0 -0
  767. package/extensions/voice-call/src/tunnel.ts +0 -0
  768. package/extensions/voice-call/src/types.ts +0 -0
  769. package/extensions/voice-call/src/utils.ts +0 -0
  770. package/extensions/voice-call/src/voice-mapping.ts +0 -0
  771. package/extensions/voice-call/src/webhook/stale-call-reaper.ts +0 -0
  772. package/extensions/voice-call/src/webhook-security.ts +0 -0
  773. package/extensions/zalo/CHANGELOG.md +6 -0
  774. package/extensions/zalo/README.md +0 -0
  775. package/extensions/zalo/fased.plugin.json +0 -0
  776. package/extensions/zalo/package.json +1 -1
  777. package/extensions/zalo/src/accounts.ts +0 -0
  778. package/extensions/zalo/src/actions.ts +0 -0
  779. package/extensions/zalo/src/api.ts +0 -0
  780. package/extensions/zalo/src/channel.ts +0 -0
  781. package/extensions/zalo/src/config-schema.ts +0 -0
  782. package/extensions/zalo/src/group-access.ts +0 -0
  783. package/extensions/zalo/src/monitor.ts +0 -0
  784. package/extensions/zalo/src/monitor.webhook.ts +0 -0
  785. package/extensions/zalo/src/onboarding.ts +0 -0
  786. package/extensions/zalo/src/probe.ts +0 -0
  787. package/extensions/zalo/src/proxy.ts +0 -0
  788. package/extensions/zalo/src/runtime.ts +0 -0
  789. package/extensions/zalo/src/send.ts +0 -0
  790. package/extensions/zalo/src/status-issues.ts +0 -0
  791. package/extensions/zalo/src/token.ts +0 -0
  792. package/extensions/zalo/src/types.ts +0 -0
  793. package/extensions/zalouser/CHANGELOG.md +6 -0
  794. package/extensions/zalouser/README.md +0 -0
  795. package/extensions/zalouser/fased.plugin.json +0 -0
  796. package/extensions/zalouser/package.json +1 -1
  797. package/extensions/zalouser/src/accounts.ts +0 -0
  798. package/extensions/zalouser/src/channel.ts +0 -0
  799. package/extensions/zalouser/src/config-schema.ts +0 -0
  800. package/extensions/zalouser/src/monitor.ts +0 -0
  801. package/extensions/zalouser/src/onboarding.ts +0 -0
  802. package/extensions/zalouser/src/probe.ts +0 -0
  803. package/extensions/zalouser/src/runtime.ts +0 -0
  804. package/extensions/zalouser/src/send.ts +0 -0
  805. package/extensions/zalouser/src/status-issues.ts +0 -0
  806. package/extensions/zalouser/src/tool.ts +0 -0
  807. package/extensions/zalouser/src/types.ts +0 -0
  808. package/extensions/zalouser/src/zca.ts +0 -0
  809. package/install.sh +9 -6
  810. package/package.json +1 -1
  811. package/scripts/fased-launcher-runtime.mjs +0 -0
  812. package/scripts/fased-signer-network-hosting.sh +18 -7
  813. package/scripts/run-node.mjs +0 -0
  814. package/shared/sat-hash-v1.json +0 -0
  815. package/skills/1password/SKILL.md +0 -0
  816. package/skills/1password/references/cli-examples.md +0 -0
  817. package/skills/1password/references/get-started.md +0 -0
  818. package/skills/apple-notes/SKILL.md +0 -0
  819. package/skills/apple-reminders/SKILL.md +0 -0
  820. package/skills/bear-notes/SKILL.md +0 -0
  821. package/skills/blogwatcher/SKILL.md +0 -0
  822. package/skills/blucli/SKILL.md +0 -0
  823. package/skills/bluebubbles/SKILL.md +0 -0
  824. package/skills/camsnap/SKILL.md +0 -0
  825. package/skills/canvas/SKILL.md +0 -0
  826. package/skills/clawhub/SKILL.md +0 -0
  827. package/skills/coding-agent/SKILL.md +0 -0
  828. package/skills/diagram-maker/SKILL.md +0 -0
  829. package/skills/diagram-maker/references/excalidraw-patterns.md +0 -0
  830. package/skills/diagram-maker/references/svg-template.md +0 -0
  831. package/skills/discord/SKILL.md +0 -0
  832. package/skills/eightctl/SKILL.md +0 -0
  833. package/skills/food-order/SKILL.md +0 -0
  834. package/skills/gemini/SKILL.md +0 -0
  835. package/skills/gh-issues/SKILL.md +0 -0
  836. package/skills/gifgrep/SKILL.md +0 -0
  837. package/skills/github/SKILL.md +0 -0
  838. package/skills/gog/SKILL.md +0 -0
  839. package/skills/goplaces/SKILL.md +0 -0
  840. package/skills/healthcheck/SKILL.md +0 -0
  841. package/skills/himalaya/SKILL.md +0 -0
  842. package/skills/himalaya/references/configuration.md +0 -0
  843. package/skills/himalaya/references/message-composition.md +0 -0
  844. package/skills/imsg/SKILL.md +0 -0
  845. package/skills/mcporter/SKILL.md +0 -0
  846. package/skills/model-usage/SKILL.md +0 -0
  847. package/skills/model-usage/references/codexbar-cli.md +0 -0
  848. package/skills/model-usage/scripts/model_usage.py +0 -0
  849. package/skills/model-usage/scripts/test_model_usage.py +0 -0
  850. package/skills/nano-banana-pro/SKILL.md +0 -0
  851. package/skills/nano-pdf/SKILL.md +0 -0
  852. package/skills/node-connect/SKILL.md +0 -0
  853. package/skills/node-inspect-debugger/SKILL.md +0 -0
  854. package/skills/notion/SKILL.md +0 -0
  855. package/skills/obsidian/SKILL.md +0 -0
  856. package/skills/openai-image-gen/SKILL.md +0 -0
  857. package/skills/openai-image-gen/scripts/gen.py +0 -0
  858. package/skills/openai-image-gen/scripts/test_gen.py +0 -0
  859. package/skills/openai-whisper/SKILL.md +0 -0
  860. package/skills/openai-whisper-api/SKILL.md +0 -0
  861. package/skills/openai-whisper-api/scripts/transcribe.sh +0 -0
  862. package/skills/opencode/SKILL.md +0 -0
  863. package/skills/openhue/SKILL.md +0 -0
  864. package/skills/oracle/SKILL.md +0 -0
  865. package/skills/ordercli/SKILL.md +0 -0
  866. package/skills/peekaboo/SKILL.md +0 -0
  867. package/skills/python-debugpy/SKILL.md +0 -0
  868. package/skills/sag/SKILL.md +0 -0
  869. package/skills/session-logs/SKILL.md +0 -0
  870. package/skills/sherpa-onnx-tts/SKILL.md +0 -0
  871. package/skills/skill-creator/SKILL.md +0 -0
  872. package/skills/skill-creator/license.txt +0 -0
  873. package/skills/skill-creator/scripts/init_skill.py +0 -0
  874. package/skills/skill-creator/scripts/package_skill.py +0 -0
  875. package/skills/skill-creator/scripts/quick_validate.py +0 -0
  876. package/skills/skill-creator/scripts/test_package_skill.py +0 -0
  877. package/skills/skill-creator/scripts/test_quick_validate.py +0 -0
  878. package/skills/skill-workshop/SKILL.md +0 -0
  879. package/skills/slack/SKILL.md +0 -0
  880. package/skills/songsee/SKILL.md +0 -0
  881. package/skills/sonoscli/SKILL.md +0 -0
  882. package/skills/spotify-player/SKILL.md +0 -0
  883. package/skills/summarize/SKILL.md +0 -0
  884. package/skills/things-mac/SKILL.md +0 -0
  885. package/skills/tmux/SKILL.md +0 -0
  886. package/skills/trello/SKILL.md +0 -0
  887. package/skills/video-frames/SKILL.md +0 -0
  888. package/skills/video-frames/scripts/frame.sh +0 -0
  889. package/skills/voice-call/SKILL.md +0 -0
  890. package/skills/wacli/SKILL.md +0 -0
  891. package/skills/wallet-actions/SKILL.md +0 -0
  892. package/skills/weather/SKILL.md +0 -0
  893. package/skills/xurl/SKILL.md +0 -0
@@ -6,8 +6,8 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
6
6
  <path d="M12 17h.01" />
7
7
  </svg>
8
8
  </span>
9
- `}function d(e){return e?e.signerCapability===`background-ready`?{title:`Background-ready wallet`,detail:`This wallet is suitable for unattended SAT mining.`}:{title:`Interactive wallet`,detail:e.signerCapabilityReason??`This wallet may need operator approval for mining actions.`}:{title:`No wallet selected`,detail:`Create or import the dedicated Mining wallet in onboarding or with fased wallet setup --chain solana, then refresh.`}}function f(e){let t=String(e.attachedWalletId??``).trim(),n=String(e.status?.walletId??``).trim(),r=String(e.profile?.walletId??``).trim(),i=String(e.readiness?.selectedWalletId??``).trim(),a=e.wallets.find(e=>e.walletId===t),o=e.wallets.find(e=>e.walletId===n),s=e.wallets.find(e=>e.walletId===r),c=e.wallets.find(e=>e.walletId===i),l=a??o??s??c,u=!!n&&(!!e.status?.enabledWanted||!!e.status?.running||R(e.status?.currentCapitalFundedLamports)||(e.status?.recentActions?.length??0)>0||String(e.status?.validatorAuthority??``).trim().length>0),d=t||(n&&(u||n===r&&o)?n:``);return d?n&&n!==d?{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Mining wallet state still settling`,detail:`Wallet registry and runtime status disagree. Refresh after the next SAT tick to confirm the singleton @wallet:mining history is live.`}:r&&r!==d?{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Mining form differs from singleton wallet`,detail:`The mining form is still showing settings from another wallet. Save or refresh the profile if you want the form to match @wallet:mining.`}:{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Singleton mining wallet`,detail:`SAT history, capital, and restart recovery follow @wallet:mining.`}:{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Configure`,detail:``}}function p(e){let t=String(e.defaultWalletId??``).trim(),n=String(e.attachedWalletId||e.profile?.walletId||e.status?.walletId||e.readiness?.selectedWalletId||``).trim();return!t||!n||t!==n?null:{title:`Agent and Mining wallets must stay separate`,detail:`This singleton mining wallet is also the primary Agent wallet. Use Wallet to clear the Agent default, then select a dedicated Agent wallet before wallet work.`}}function m(e){return(e?.strategyExecution&&i(e.strategyMode)===e.strategyExecution?e.strategyExecution:i(e?.strategyMode))===`auto`?{title:`Auto strategy`,detail:`Auto strategy uses the Fased model/runtime stack to propose the cycle allocation and falls back to deterministic execution if the strategy step fails.`}:{title:`Deterministic strategy`,detail:`Deterministic strategy uses locked 25-bucket allocation arrays for the selected risk profile and does not require model inference.`}}function h(e){if(!e.length)return null;let t=e.reduce((e,t)=>({committedLamports:e.committedLamports+BigInt(t.committedLamports??`0`),totalSatEarnedRaw:e.totalSatEarnedRaw+BigInt(t.totalSatEarnedRaw??`0`),totalRebateLamports:e.totalRebateLamports+BigInt(t.totalRebateLamports??`0`),txFeeLamports:e.txFeeLamports+BigInt(t.txFeeLamports??`0`),netLiveCostLamports:e.netLiveCostLamports+BigInt(t.netLiveCostLamports??`0`),validParticipationCount:e.validParticipationCount+ +!!t.validParticipation}),{committedLamports:0n,totalSatEarnedRaw:0n,totalRebateLamports:0n,txFeeLamports:0n,netLiveCostLamports:0n,validParticipationCount:0}),n=BigInt(e.length);return{sampleCount:e.length,averageCommitLamports:(t.committedLamports/n).toString(),averageSatRaw:(t.totalSatEarnedRaw/n).toString(),averageRebateLamports:(t.totalRebateLamports/n).toString(),averageFeeLamports:(t.txFeeLamports/n).toString(),averageNetLiveCostLamports:(t.netLiveCostLamports/n).toString(),validRatePct:`${Math.round(t.validParticipationCount/e.length*100)}%`}}function g(e){let t=e.status?.lastStrategyDecision??null;return e.strategyExecution===`auto`?t?t.source===`skill`?{title:t.fallbackUsed?`Auto path with deterministic fallback`:`Auto path with model route`,detail:t.fallbackUsed?`The runtime attempted the model-guided path but fell back to deterministic execution for this cycle.`:`The runtime used the model-guided strategy path for this cycle.`,pathLabel:t.modelId?`Model route · ${t.modelId}`:`Model route`,fallbackLabel:t.fallbackUsed?`Fallback used`:`No fallback`}:{title:`Auto planner with deterministic strategy`,detail:`Auto sizing/planning is active, but the strategy engine resolved to the deterministic path for the latest cycle.`,pathLabel:`Deterministic strategy path`,fallbackLabel:`Planner only`}:{title:`Auto path waiting`,detail:`Auto mode is enabled. A live planner/strategy decision will appear once a cycle is evaluated.`,pathLabel:`No strategy decision yet`,fallbackLabel:`Pending`}:{title:`Deterministic path`,detail:`This run is using the locked deterministic allocation generator. No model step is required for cycle placement.`,pathLabel:`Deterministic engine`,fallbackLabel:`Not applicable`}}function _(e){let t=o(e?.riskMode??`balanced`);switch(e?.strategyPreset&&r(e.strategyPreset)===(e?.riskMode??`balanced`)?e.strategyPreset:t){case`spread`:return{title:`Spread profile`,detail:`Wider center-weighted coverage for steadier participation and lower concentration risk.`};case`conviction`:return{title:`Conviction profile`,detail:`Tighter concentration around strongest buckets for more variance and more upside if the read is right.`};case`top_k`:return{title:`Top-K Sparse profile`,detail:`High-conviction compiler that puts most weight into a few ranked buckets. Higher variance, stronger upside when the read is right.`};case`ranked`:return{title:`Ranked profile`,detail:`Compiler ranks buckets and converts the ranking into weighted exposure with a tail for safety.`};case`adaptive`:return{title:`Adaptive profile`,detail:`Compiler blends stable coverage with cycle-ranked opportunity so auto can improve without abandoning fallback safety.`};case`crowd_aware`:return{title:`Crowd-aware profile`,detail:`Compiler avoids over-concentrating in obvious buckets and keeps broader tail exposure when the cycle is crowded.`};case`safe_fallback`:return{title:`Safe fallback profile`,detail:`Balanced deterministic allocation for recovery, low confidence, or unstable recent results.`};case`swarm`:return{title:`Swarm profile`,detail:`Coordination-friendly clustered coverage that keeps the miner flexible without fully flattening conviction.`};default:return{title:`Balanced profile`,detail:`Moderate concentration with practical skill upside and less volatility than aggressive mode.`}}}function v(e){let t=BigInt(String(e?.currentCapitalLockedLamports??`0`)),n=Number(e?.currentCapitalPendingCycleCount??0);if(e?.drainOnly&&(t>0n||n>0))return`Clearing`;if(!e?.running)return t>0n||n>0?`Clearing`:`Stopped`;switch(e.nextAction){case`participation`:return`Round open`;case`mining-crank`:return`Settling round`;case`finalize-epoch`:return`Finalizing epoch`;case`claim`:return`Claiming rewards`;case`recover`:return`Blocked`;default:return`Watching for round`}}function y(e){return e?.role===`admin`}function b(e,t){let n=String(t??``).trim();if(!n)return null;let r=e===`devnet`?`devnet`:e===`local`?`custom`:`mainnet-beta`;return r===`custom`?null:r===`mainnet-beta`?`https://solscan.io/tx/${encodeURIComponent(n)}`:`https://solscan.io/tx/${encodeURIComponent(n)}?cluster=${r}`}function x(e,t){let n=String(t??``).trim();if(!n)return null;let r=e===`devnet`?`devnet`:e===`local`?`custom`:`mainnet-beta`;return r===`custom`?null:r===`mainnet-beta`?`https://solscan.io/account/${encodeURIComponent(n)}`:`https://solscan.io/account/${encodeURIComponent(n)}?cluster=${r}`}function S(e,t){return b(e,t)}function C(e){let t=String(e??``).trim();if(!t)return null;let n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString()}function w(e){let{status:t,readiness:n}=e;if(t?.blocked)return{title:`Blocked`,detail:t.blockedReason||`Mining is blocked right now.`};let r=n?.checks.find(e=>e.key===`fundingReady`),i=n?.checks.find(e=>e.key===`cycleEntryReady`),a=n?.checks.find(e=>e.key===`minerInitialized`),o=BigInt(String(n?.stake?.rewardOwed??`0`)),s=BigInt(String(n?.stake?.slashPenaltyOwed??`0`)),c=BigInt(String(t?.currentCapitalLockedLamports??`0`)),l=BigInt(String(t?.currentCapitalFreeLamports??`0`)),u=Number(t?.currentCapitalPendingCycleCount??0),d=Number(t?.currentCapitalFirstPendingCycleId??0),f=Number(t?.currentCapitalLastPendingCycleId??0),p=String(r?.detail??``).trim().toLowerCase();if(r&&!r.ok)return p.includes(`probe unavailable`)?{title:`Wallet balance unavailable`,detail:`RPC could not confirm miner-wallet SOL right now. Retry in a few seconds.`}:{title:`Need SOL`,detail:`Fund the miner wallet with SOL before mining.`};if(a&&!a.ok){let e=String(a.detail??``).trim().toLowerCase();return e.includes(`owner mismatch`)||e.includes(`invalid owner`)?{title:`Capital account invalid`,detail:`This wallet's SAT miner capital account has the wrong owner on this machine. Repair the wallet-scoped capital account before funding or changing commit.`}:{title:`Need capital`,detail:`Fund Mining capital to create the miner account and deposit SOL.`}}return i&&!i.ok?c>0n&&l<250000000n?{title:`Capital locked`,detail:`Most miner capital is still locked in pending cycles, so free capital is below the 0.25 SOL entry minimum.${u>0&&d>0&&f>=d?d===f?` Pending cycle: ${d}.`:` Pending cycles: ${d}-${f}.`:``}`}:{title:`Need free capital`,detail:`Deposit at least 0.25 SOL of free miner capital to enter the next cycle.`}:s>0n?{title:`Slash penalty owed`,detail:o>0n?`Outstanding slash penalties must be settled before rewards can be claimed.`:`Outstanding slash penalties must be settled before mining proceeds cleanly.`}:t?.claimableSatRaw?{title:`Claimable SAT`,detail:`Rewards are available to claim.`}:t?.lastClaimTxHash?{title:`Claim already settled`,detail:`The latest reward claim already executed. Current claimable SAT is 0 until a later cycle earns more.`}:{title:`Mining active`,detail:`No SAT claim is available yet.`}}function ee(e){switch(e?.recommendedAction){case`resolve-dispute`:return{title:`Dismissed dispute path`,detail:`Resolve the active dispute first. If the dispute is dismissed, claims should unblock without corrected-root republish.`};case`republish-roots`:return{title:`Upheld dispute path`,detail:`This epoch needs corrected-root republish after the dispute outcome. Claims stay blocked until the replacement roots are submitted.`};case`retry-claim`:return{title:`Retry claim path`,detail:`Recovery conditions are satisfied. Retry the claim using the selected epoch and payout settings.`};case`wait`:return{title:`Wait path`,detail:`No admin action is recommended right now. Monitor epoch state and worker/runtime status for the next change.`};default:return{title:`No epoch recovery action required`,detail:`No dispute or epoch-admin recovery workflow is active. Capital-lock backlog, if any, is surfaced in the main mining status.`}}}function te(e,t){let n=String(e??``).trim();if(!n)return`0 ${t}`;try{let e=t===`SOL`?c:l,r=BigInt(n),i=r/10n**e,a=(r%10n**e).toString().padStart(Number(e),`0`).replace(/0+$/,``);return a?`${i}.${a} ${t}`:`${i} ${t}`}catch{return`${n} ${t}`}}function T(e){return e.replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function E(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=t===`SOL`?c:l,r=Number(n)/10**Number(e);if(!Number.isFinite(r))return`0`;let i=Math.abs(r);return T(t===`SAT`?i>=1e3?r.toFixed(1):i>=1?r.toFixed(2):r.toFixed(3):i>=1||i>=.01?r.toFixed(3):r.toFixed(5))}catch{return n}}function D(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=BigInt(n);return`${e>0n?`+`:e<0n?`-`:``}${E((e<0n?-e:e).toString(),t)}`}catch{return n}}function ne(e,t){let n=String(e??``).trim();return n?D(n,t):`—`}function re(e,t){let n=String(e??``).trim();return n?E(n,t):`—`}function O(e){try{return BigInt(String(e??`0`))}catch{return 0n}}function ie(e){return O(e.readiness?.balances.solBalanceLamports??e.selectedWallet?.solBalanceLamports??e.status?.currentSolBalanceLamports??`0`)}function k(e){switch(String(e??``).trim()){case`settleCyclePage`:case`finalizeCycleSettlement`:case`scoreCyclePage`:case`distributeCyclePage`:return!0;default:return!1}}function A(e){switch(String(e??``).trim()){case`settleCyclePage`:case`finalizeCycleSettlement`:case`scoreCyclePage`:case`distributeCyclePage`:return!0;default:return!1}}function j(e,t){if(!A(e))return!1;let n=String(t??``).trim().toLowerCase();return n.includes(`invalid progress`)||n.includes(`already closed`)||n.includes(`cycle already closed on-chain`)||n.includes(`invalid account data`)&&(n.includes(`settle invalid progress`)||n.includes(`score invalid progress`)||n.includes(`distribute invalid progress`))}function ae(e,t){let n=String(e??``).trim();if(!n)return`0 ${t}`;try{let e=BigInt(n);return`${e>0n?`+`:e<0n?`-`:``}${te((e<0n?-e:e).toString(),t)}`}catch{return`${n} ${t}`}}function oe(e){return``}function M(e){let t=[{label:`Commit`,value:`${E(e.committedLamports,`SOL`)} SOL`},{label:`Earned`,value:`${E(e.totalSatEarnedRaw,`SAT`)} SAT`},{label:`Rebate`,value:`${E(e.totalRebateLamports,`SOL`)} SOL`}],n=se(e.strategyPreset);n&&t.push({label:`Strategy`,value:n});let r=ce(e.strategyExecution);r&&t.push({label:`Execution`,value:r});let i=typeof e.committedMinerCount==`number`&&Number.isFinite(e.committedMinerCount)?e.committedMinerCount:typeof e.participantCount==`number`&&Number.isFinite(e.participantCount)?e.participantCount:null;return typeof i==`number`&&i>0&&t.push({label:`Pool`,value:`${i} miner${i===1?``:`s`}`}),t}function N(e){let{outcome:t,actions:n}=e,r=n.filter(e=>e.status===`success`&&A(e.action)).length,i=n.filter(e=>e.status===`failure`&&j(e.action,e.message)).length,a=[];if((r>0||i>0)&&(a.push({label:`Keeper won`,value:String(r)}),i>0&&a.push({label:`Keeper lost`,value:String(i)})),!t)return a;let o=(O(t.netLiveCostLamports)-O(t.txFeeLamports)+O(t.totalRebateLamports)+O(t.keeperBountyLamports)).toString();return a.push({label:`Erosion`,value:`${E(t.erosionLamports??o,`SOL`)} SOL`}),a.push({label:`Miner rebate`,value:`${E(t.totalRebateLamports,`SOL`)} SOL`}),t.keeperBountyLamports!=null&&a.push({label:`Keeper bounty`,value:`${E(t.keeperBountyLamports,`SOL`)} SOL`}),t.submitFeeLamports!=null&&a.push({label:`Submit fee`,value:`${E(t.submitFeeLamports,`SOL`)} SOL`}),t.keeperFeeLamports!=null&&a.push({label:`Keeper fees`,value:`${E(t.keeperFeeLamports,`SOL`)} SOL`}),t.claimFeeLamports!=null&&a.push({label:`Claim fee`,value:`${E(t.claimFeeLamports,`SOL`)} SOL`}),O(t.otherFeeLamports)>0n&&a.push({label:`Other tx`,value:`${E(t.otherFeeLamports,`SOL`)} SOL`}),a.push({label:`Net SOL`,value:`${D(t.netLiveCostLamports,`SOL`)} SOL`}),a}function se(e){switch(e){case`spread`:return`Spread`;case`balanced`:return`Balanced`;case`conviction`:return`Conviction`;case`swarm`:return`Swarm`;case`top_k`:return`Top-K`;case`ranked`:return`Ranked`;case`adaptive`:return`Adaptive`;case`crowd_aware`:return`Crowd-aware`;case`safe_fallback`:return`Safe fallback`;default:return null}}function P(e){return se(e.strategyPreset)||(e.riskMode?se(o(e.riskMode))??`Unrecorded`:`Unrecorded`)}function ce(e){return e===`auto`?`Auto`:e===`deterministic`?`Deterministic`:null}function F(e,t=1000000n,n=1){let r=String(e??``).trim();if(!r)return`—`;try{let e=BigInt(r),i=Number(e)/Number(t)*100;return Number.isFinite(i)?`${T(i.toFixed(n))}%`:`—`}catch{return`—`}}function I(e){return String(e??``).trim().length>0}function le(e,t=1000000n,n=1){return`${e<0n?`-`:e>0n?`+`:``}${F((e<0n?-e:e).toString(),t,n)}`}function L(e){let t=Number.isInteger(e)?String(e):T(e.toFixed(1));return`${t} miner${t===`1`?``:`s`}`}function ue(e){let t=e?.liveCycleReport??null;return!t||typeof t.cycleId!=`number`?null:{cycleId:t.cycleId,committedLabel:te(t.committedLamports,`SOL`),unlockRatioLabel:F(t.unlockRatioFp),issuedMinerSatLabel:he({value:t.issuedMinerSatRaw,cycleStatus:t.cycleStatus,counterpartValue:t.unissuedMinerSatRaw,compact:!1}),earnedSatLabel:te(t.totalSatEarnedRaw,`SAT`),netSolCostLabel:ae(t.netLiveCostLamports,`SOL`)}}function de(e){if(e==null)return null;let t=typeof e==`number`?Math.floor(e):Number.parseInt(String(e),10);return Number.isFinite(t)&&t>=0?t:null}function R(e){if(!e)return!1;try{return BigInt(e)>0n}catch{return!1}}function z(e){let t=O(e.committedLamports);if(t<=0n)return null;let n=O(String(e.requestedCommitLamports??`0`)),r=O(String(e.activeCommitLamports??`0`)),i=n>0n?n:r,a=O(String(e.minimumCommitLamports??`0`)),o=a>0n?a/2n:125000000n,s=O(e.previousCommittedLamports),c=O(String(e.capitalLockedLamports??`0`)),l=typeof e.pendingCycleCount==`number`&&Number.isFinite(e.pendingCycleCount)?e.pendingCycleCount:0,u=O(String(e.walletReserveShortfallLamports??`0`));return s>0n&&t>s+o&&c<=0n&&l<=0?{label:`Commit restored: capital unlocked`,title:`The latest submitted commit increased after pending/locked miner capital cleared back into free capital.`,tone:`success`}:i>0n&&t+o<i?c>0n||l>0?{label:`Commit reduced: locked capital clearing`,title:`The runtime submitted a smaller safe commit because previous-cycle capital is still locked until settlement and claim complete.`,tone:`warning`}:u>0n?{label:`Commit reduced: fee reserve`,title:`The runtime submitted a smaller safe commit because signer fee reserve was below target.`,tone:`warning`}:{label:`Commit reduced: free capital`,title:`The runtime submitted a smaller safe commit because currently free miner capital was below the saved target.`,tone:`warning`}:null}function fe(e){return e?.statusFresh===!1||e?.degraded===!0}function pe(e){return e.readinessValue!=null&&(e.degraded||e.statusValue==null||e.statusValue===`0`)&&R(e.readinessValue)?e.readinessValue:e.statusValue??e.readinessValue??e.fallback??`0`}function me(e){return e.degraded&&e.readinessValue?e.readinessValue:e.statusValue??e.readinessValue??null}function he(e){if((e.cycleStatus??null)!==2){let t=R(e.value),n=R(e.counterpartValue);if(!t&&!n)return`—`}return e.value==null?`—`:e.compact?E(e.value,`SAT`):te(e.value,`SAT`)}function ge(e,t){let n=e?.liveCycleReport??null,r=typeof e?.currentCycleId==`number`?e.currentCycleId:typeof n?.cycleId==`number`?n.cycleId:null,i=n?.committedLamports??`0`,a=R(i),o=de(n?.validMinerCount),s=n?.totalCommittedLamports??(a?i:null),c=[{label:`Current cycle`,value:typeof r==`number`?String(r):`—`},{label:`Miners now`,value:o==null?`—`:`${o}`},{label:`SOL in cycle`,value:s==null?`—`:E(s,`SOL`)},{label:`Your commit`,value:a?E(i,`SOL`):`—`},{label:`Last payout (SAT)`,value:re(t?.satRaw??null,`SAT`)},{label:`Last net cost (SOL)`,value:ne(t?.netLamports??null,`SOL`)}];return R(e?.currentKeeperBountyUnpaidLamports)&&c.push({label:`Keeper bounty owed`,value:E(e?.currentKeeperBountyUnpaidLamports??`0`,`SOL`)}),c}function _e(e){let t=typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,n=e?.settledHistory??[];if(t!=null){let e=n.find(e=>e.cycleId===t);if(e)return{cycleId:t,satRaw:e.totalSatEarnedRaw??null,netLamports:e.netLiveCostLamports??null}}let r=n[0]??null;return{cycleId:typeof r?.cycleId==`number`?r.cycleId:null,satRaw:r?.totalSatEarnedRaw??null,netLamports:r?.netLiveCostLamports??null}}function ve(e){if(!e.length)return`—`;let t=[...e].filter(Number.isFinite).toSorted((e,t)=>e-t),n=t[0],r=t[t.length-1];return n===r?String(n):`${n}-${r}`}function ye(e){let t=typeof e?.missingCycleStartId==`number`?e.missingCycleStartId:null,n=typeof e?.missingCycleEndId==`number`?e.missingCycleEndId:null,r=typeof e?.missingCycleCount==`number`&&Number.isFinite(e.missingCycleCount)?e.missingCycleCount:0;if(r<=0||t==null||n==null||n<t)return null;let i=[typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,(e?.pendingCycleIds??[]).reduce((e,t)=>typeof t==`number`&&Number.isFinite(t)&&(e==null||t>e)?t:e,null)].filter(e=>typeof e==`number`&&Number.isFinite(e)).reduce((e,t)=>e==null||t>e?t:e,null);return i!=null&&i>n?null:{startCycleId:t,endCycleId:n,count:r}}function be(e){let t=typeof e?.currentCycleId==`number`?e.currentCycleId:typeof e?.liveCycleReport?.cycleId==`number`?e.liveCycleReport.cycleId:null,n=typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,r=typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,i=typeof e?.exactPendingCycleId==`number`?e.exactPendingCycleId:null,a=String(e?.exactPendingStage??``).trim(),o=(e?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e)),s=ye(e),c=[];if(n!=null&&n!==t&&c.push(`Settled ${n}`),r!=null&&r!==t&&r!==n&&c.push(`Submitted ${r}`),o.length>0&&(i==null?c.push(`Pending ${ve(o)}`):c.push(`Pending ${i}${a?` (${a})`:``}`)),s){let t=e?.enabledWanted&&e.running&&!e.drainOnly?`Missed`:`Skipped`;c.push(`${t} ${s.startCycleId===s.endCycleId?s.startCycleId:`${s.startCycleId}-${s.endCycleId}`}`)}return c.length>0?c.join(` · `):null}function xe(e){if(!e?.enabledWanted||!e.running||!e.workers)return null;let t=new Date(e.snapshotAt??e.updatedAt??``).getTime();if(!Number.isFinite(t))return null;let n=[],r={roundWatcher:2e4,epoch:3e4,claim:4e4,recovery:5e4};for(let i of[`roundWatcher`,`epoch`,`claim`,`recovery`]){let a=e.workers[i];if(!a?.enabled)continue;let o=new Date(String(a.nextScheduledAt??``)).getTime(),s=new Date(String(a.lastRunAt??``)).getTime(),c=Number.isFinite(o)?t-o:Number.isFinite(s)?t-s:0;if(a.running||c<=r[i])continue;let l=[String(a.lastDetail??a.waitingReason??``).trim(),typeof a.lastSelectedCycleId==`number`?`cycle ${a.lastSelectedCycleId}${a.lastSelectedStage?` ${a.lastSelectedStage}`:``}`:``,(a.rpcTimeoutCount??0)>0?`${a.rpcTimeoutCount??0} timeout${a.rpcTimeoutCount===1?``:`s`}`:``].filter(Boolean).join(` · `);n.push(l?`${i} (${l})`:i)}return n.length>0?`Worker stale: ${n.join(` · `)}`:null}function Se(e){if(!e?.enabledWanted||!e.running)return null;let t=e.chainTime;if(!t||t.freshness===`fresh`||t.freshness===`stale`&&t.source!==`local-display`&&!t.lastError&&t.consecutiveFailures===0)return null;let n=t.source===`local-display`?`using local display time only`:t.lastError?t.lastError:`${t.consecutiveFailures} consecutive chain-time read failures`;return`Chain time ${t.freshness}: ${n}`}function Ce(e){let t=we(e.plannerWindow),n=e.rangeStart&&e.rangeEnd?`${e.rangeStart} to ${e.rangeEnd}`:null;return e.latestPoint?{summary:`${e.sampled?`Showing ${e.visibleCycleCount} sampled points from ${e.matchingCycleCount} completed cycles`:`Showing ${e.visibleCycleCount} completed cycles`} mined by this wallet in the ${t}${n?` · data present ${n}`:``}. Latest visible cycle ${e.latestPoint.cycleId} earned ${e.latestPoint.satLabel} SAT with ${e.latestPoint.netLabel} SOL net.`,windowLabel:t,dataRangeLabel:n}:{summary:`No completed cycles mined by this wallet were recorded in the ${t} yet.${e.currentCycleSubmitted&&typeof e.currentCycleId==`number`?` Current cycle ${e.currentCycleId} is already submitted and waiting for settlement, so it will not show here yet.`:``}`,windowLabel:t,dataRangeLabel:n}}function we(e){return e===`1h`?`last hour`:e===`24h`?`last 24 hours`:e===`30d`?`last 30 days`:e===`1y`?`last year`:`all recorded time`}function Te(e){return e===`1h`?3600*1e3:e===`24h`?1440*60*1e3:e===`30d`?720*60*60*1e3:e===`1y`?365*24*60*60*1e3:null}function Ee(e,t){if(e.length<=t)return e;let n=[],r=new Set;for(let i=0;i<t;i+=1){let a=Math.round(i*(e.length-1)/Math.max(1,t-1));r.has(a)||(r.add(a),n.push(e[a]))}return n}function De(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(n)||t===n)return 50;let r=(e-t)/(n-t);return 100-Math.max(0,Math.min(100,r*100))}function Oe(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return[];let r=n.slice().toSorted((e,t)=>Date.parse(String(e.recordedAt??``))-Date.parse(String(t.recordedAt??``))),i=typeof t?.maxPoints==`number`&&Number.isFinite(t.maxPoints)?Math.max(2,t.maxPoints):null,a=i==null?r:Ee(r,i),o=a.map(e=>Number(e.totalSatEarnedRaw??`0`)/10**Number(l)),s=a.map(e=>Number(e.netLiveCostLamports??`0`)/10**Number(c)),u=Math.min(...o),d=Math.max(...o),f=Math.min(...s),p=Math.max(...s);return a.map((e,t)=>{let n=o[t]??0,r=s[t]??0,i=ce(e.strategyExecution),c=P(e),l=typeof e.committedMinerCount!=`number`||!Number.isFinite(e.committedMinerCount)?null:`Pool: ${e.committedMinerCount} miner${e.committedMinerCount===1?``:`s`}`,m=(O(e.netLiveCostLamports)-O(e.txFeeLamports)+O(e.totalRebateLamports)+O(e.keeperBountyLamports)).toString();return{cycleId:e.cycleId,cycleLabel:String(e.cycleId).slice(-4),timeLabel:Ie(e.recordedAt),commitLabel:E(e.committedLamports,`SOL`),satLabel:E(e.totalSatEarnedRaw,`SAT`),netLabel:D(e.netLiveCostLamports,`SOL`),erosionLabel:E(e.erosionLamports??m,`SOL`),rebateLabel:E(e.totalRebateLamports,`SOL`),keeperBountyLabel:e.keeperBountyLamports==null?null:E(e.keeperBountyLamports,`SOL`),submitFeeLabel:e.submitFeeLamports==null?null:E(e.submitFeeLamports,`SOL`),keeperFeeLabel:e.keeperFeeLamports==null?null:E(e.keeperFeeLamports,`SOL`),claimFeeLabel:e.claimFeeLamports==null?null:E(e.claimFeeLamports,`SOL`),otherFeeLabel:O(e.otherFeeLamports)>0n?E(e.otherFeeLamports,`SOL`):null,strategyLabel:c,satValue:n,netValue:r,satY:De(n,u,d),netY:De(r,f,p),x:a.length===1?50:t/(a.length-1)*100,executionLabel:i??`—`,poolLabel:l}})}function ke(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return null;let r=new Map,i=0n,a=0n,o=0n,s=0n,u=0,d=0,f=0n,p=0,m=0,h=0,g=0;for(let e of n){let t=P(e),n=r.get(t)??{strategyLabel:t,cycleCount:0,satRaw:0n,rebateLamports:0n,detRebateLamports:0n,perfRebateLamports:0n,detRebateSamples:0,perfRebateSamples:0,netLamports:0n,scoreDeltaFp:0n,skillScoreFp:0n,scoreSamples:0,crowdingRatioFp:0n,crowdingSamples:0,poolCount:0,poolSamples:0,autoCount:0,deterministicCount:0,taskCount:0,fallbackCount:0};n.cycleCount+=1;let c=O(e.totalSatEarnedRaw),l=O(e.totalRebateLamports),_=I(e.deterministicRebateLamports)||I(e.claimableDetRebateLamports)||I(e.claimedDetRebateLamports),v=I(e.performanceRebateLamports)||I(e.claimablePerfRebateLamports)||I(e.claimedPerfRebateLamports),y=I(e.deterministicRebateLamports)?O(e.deterministicRebateLamports):O(e.claimableDetRebateLamports)+O(e.claimedDetRebateLamports),b=I(e.performanceRebateLamports)?O(e.performanceRebateLamports):O(e.claimablePerfRebateLamports)+O(e.claimedPerfRebateLamports),x=O(e.netLiveCostLamports);n.satRaw+=c,n.rebateLamports+=l,_&&(n.detRebateLamports+=y,n.detRebateSamples+=1,o+=y,u+=1),v&&(n.perfRebateLamports+=b,n.perfRebateSamples+=1,s+=b,d+=1),n.netLamports+=x,i+=c,a+=l,f+=x,I(e.placementReturnFp)&&I(e.benchmarkReturnFp)&&(n.scoreDeltaFp+=O(e.placementReturnFp)-O(e.benchmarkReturnFp),n.skillScoreFp+=O(e.skillScoreFp),n.scoreSamples+=1),I(e.crowdingRatioFp)&&(n.crowdingRatioFp+=O(e.crowdingRatioFp),n.crowdingSamples+=1);let S=typeof e.committedMinerCount==`number`&&Number.isFinite(e.committedMinerCount)?e.committedMinerCount:typeof e.participantCount==`number`&&Number.isFinite(e.participantCount)?e.participantCount:null;S!=null&&(n.poolCount+=S,n.poolSamples+=1),e.strategyExecution===`auto`?(n.autoCount+=1,p+=1):(n.deterministicCount+=1,m+=1),(e.strategySource===`skill`||e.modelId)&&(n.taskCount+=1,h+=1),e.strategyFallbackUsed&&(n.fallbackCount+=1,g+=1),r.set(t,n)}let _=n.length,v=Array.from(r.values()).toSorted((e,t)=>t.cycleCount===e.cycleCount?Number(t.satRaw-e.satRaw):t.cycleCount-e.cycleCount).slice(0,Math.max(1,t?.maxRows??6)).map(e=>{let t=e.satRaw/BigInt(Math.max(1,e.cycleCount)),n=e.rebateLamports/BigInt(Math.max(1,e.cycleCount)),r=e.detRebateSamples>0?e.detRebateLamports/BigInt(e.detRebateSamples):0n,i=e.perfRebateSamples>0?e.perfRebateLamports/BigInt(e.perfRebateSamples):0n,a=e.netLamports/BigInt(Math.max(1,e.cycleCount)),o=e.scoreSamples>0?e.scoreDeltaFp/BigInt(e.scoreSamples):0n,s=e.scoreSamples>0?e.skillScoreFp/BigInt(e.scoreSamples):0n,u=e.crowdingSamples>0?e.crowdingRatioFp/BigInt(e.crowdingSamples):0n,d=e.poolSamples>0?e.poolCount/e.poolSamples:null,f=e.detRebateSamples>0||e.perfRebateSamples>0||e.scoreSamples>0||e.crowdingSamples>0||e.poolSamples>0,p=[`${e.strategyLabel}: ${e.cycleCount} cycle${e.cycleCount===1?``:`s`}`,`Avg SAT: ${E(t.toString(),`SAT`)} SAT`,`Avg rebate: ${E(n.toString(),`SOL`)} SOL`,`Avg deterministic rebate: ${e.detRebateSamples>0?`${E(r.toString(),`SOL`)} SOL`:`not recorded`}`,`Avg performance rebate: ${e.perfRebateSamples>0?`${E(i.toString(),`SOL`)} SOL`:`not recorded`}`,`Avg net: ${D(a.toString(),`SOL`)} SOL`,`Score edge: ${e.scoreSamples>0?le(o):`not recorded`}`,`Skill score: ${e.scoreSamples>0?F(s.toString()):`not recorded`}`,`Crowding: ${e.crowdingSamples>0?F(u.toString()):`not recorded`}`,`Pool: ${d==null?`not recorded`:`${L(d)} avg`}`,`Auto: ${e.autoCount}`,`Deterministic: ${e.deterministicCount}`,`Task/skill: ${e.taskCount}`,`Fallback: ${e.fallbackCount}`],m=e.detRebateSamples>0?E(r.toString(),`SOL`):`—`,h=e.perfRebateSamples>0?E(i.toString(),`SOL`):`—`,g=e.scoreSamples>0?le(o):`—`,v=e.scoreSamples>0?F(s.toString()):`—`,y=e.crowdingSamples>0?F(u.toString()):`—`,b=d==null?`—`:L(d),x=[...e.detRebateSamples>0&&r>0n?[`Det ${m}`]:[],...e.perfRebateSamples>0&&i>0n?[`Perf ${h}`]:[],...e.scoreSamples>0&&o!==0n?[`Edge ${g}`]:[],...e.scoreSamples>0&&s>0n?[`Skill ${v}`]:[],...e.crowdingSamples>0&&u>0n?[`Crowd ${y}`]:[],...d==null?[]:[`Pool ${b}`]],S=[...e.autoCount>0?[`Auto ${e.autoCount}`]:[],...e.deterministicCount>0?[`Det ${e.deterministicCount}`]:[],...e.taskCount>0?[`Task ${e.taskCount}`]:[],...e.fallbackCount>0?[`Fallback ${e.fallbackCount}`]:[]];return{strategyLabel:e.strategyLabel,cycleCount:e.cycleCount,sharePct:Math.round(e.cycleCount/Math.max(1,_)*100),avgSatValue:Number(t)/10**Number(l),avgRebateValue:Number(n)/10**Number(c),avgNetValue:Number(a)/10**Number(c),avgSkillEdgeValue:e.scoreSamples>0?Number(o):-1/0,avgSatLabel:E(t.toString(),`SAT`),avgRebateLabel:E(n.toString(),`SOL`),avgDetRebateLabel:m,avgPerfRebateLabel:h,avgNetLabel:D(a.toString(),`SOL`),avgSkillEdgeLabel:g,avgSkillLabel:v,avgCrowdingLabel:y,avgPoolLabel:b,hasCompetitionMetrics:f,competitionMetrics:x,executionMetrics:S,autoCount:e.autoCount,deterministicCount:e.deterministicCount,taskCount:e.taskCount,fallbackCount:e.fallbackCount,title:p.join(`
10
- `)}}),y=e=>v.reduce((t,n)=>!t||e(n)>e(t)?n:t,null),b=v[0]??null,x=y(e=>e.avgSatValue),S=y(e=>e.avgRebateValue),C=y(e=>e.avgNetValue),w=v.filter(e=>Number.isFinite(e.avgSkillEdgeValue)).reduce((e,t)=>!e||t.avgSkillEdgeValue>e.avgSkillEdgeValue?t:e,null);return{summary:{totalCycles:_,totalSatLabel:E(i.toString(),`SAT`),totalRebateLabel:E(a.toString(),`SOL`),totalDetRebateLabel:u>0?E(o.toString(),`SOL`):`—`,totalPerfRebateLabel:d>0?E(s.toString(),`SOL`):`—`,rebateSplitRecorded:u>0||d>0,totalNetLabel:D(f.toString(),`SOL`),mostUsedLabel:b?.strategyLabel??`—`,mostUsedDetail:b?`${b.cycleCount} cycles · ${b.sharePct}%`:`No data`,bestSatLabel:x?.strategyLabel??`—`,bestSatDetail:x?`${x.avgSatLabel} SAT avg`:`No data`,bestRebateLabel:S?.strategyLabel??`—`,bestRebateDetail:S?`${S.avgRebateLabel} SOL avg`:`No data`,bestNetLabel:C?.strategyLabel??`—`,bestNetDetail:C?`${C.avgNetLabel} SOL avg`:`No data`,bestSkillLabel:w?.strategyLabel??`—`,bestSkillDetail:w&&w.hasCompetitionMetrics?`${w.avgSkillEdgeLabel} edge · ${w.avgSkillLabel} skill`:`No score data`,executionDetail:`Auto ${p} · Deterministic ${m}`,sourceDetail:`Task/skill ${h} · Fallback ${g}`},rows:v}}function Ae(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return[];let r=Math.max(1,t?.maxPoints??8),i=n.slice(0,r).toReversed(),a=i.reduce((e,t)=>{try{let n=BigInt(t.committedLamports??`0`);return n>e?n:e}catch{return e}},0n),o=a>0n?a:1n;return i.map(e=>{let t=0n;try{t=BigInt(e.committedLamports??`0`)}catch{t=0n}let n=Number(t*100n/o),r=Math.max(18,Math.min(100,n||0)),i=e.strategyExecution===`auto`?e.strategyFallbackUsed?`fallback`:`auto`:`deterministic`;return{cycleId:e.cycleId,cycleLabel:String(e.cycleId).slice(-4),timeLabel:Ie(e.recordedAt),commitLabel:E(e.committedLamports,`SOL`),satLabel:E(e.totalSatEarnedRaw,`SAT`),netLabel:D(e.netLiveCostLamports,`SOL`),executionLabel:i===`auto`?`Auto`:i===`fallback`?`Auto -> deterministic`:`Deterministic`,rationaleLabel:e.plannerRationale?.trim()||e.strategyRationale?.trim()||`No rationale recorded`,barHeightPct:r,tone:i}})}function je(e,t,n){return e<t?t:e>n?n:e}function Me(...e){return e.reduce((e,t)=>t>e?t:e,e[0]??0n)}function Ne(e){let t=String(e??``).trim();if(!t)return`0.25`;try{let e=BigInt(t),n=e/1000000000n,r=(e%1000000000n).toString().padStart(9,`0`).replace(/0+$/,``).slice(0,4);return r?`${n}.${r}`:`${n}`}catch{return`0.25`}}function Pe(e){let t=String(e??``).trim();if(!t)return`0`;try{let e=BigInt(t),n=e/1000000000n,r=(e%1000000000n).toString().padStart(9,`0`).replace(/0+$/,``);return r?`${n}.${r}`:`${n}`}catch{return`0`}}function Fe(e){let t=String(e??``).trim();if(!t||!/^\d+(\.\d{0,9})?$/.test(t))return`250000000`;let[n,r=``]=t.split(`.`);return(BigInt(n||`0`)*1000000000n+BigInt((r+`000000000`).slice(0,9)||`0`)).toString()}function Ie(e){let t=String(e??``).trim();if(!t)return`—`;let n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString([],{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function Le(e){let t=String(e??``).trim();if(!t)return`—`;let n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString([],{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function B(e){switch(String(e??``).trim()){case`claim`:case`claimCycleRewards`:case`claimCycleRewardsBatch`:case`closeResolvedCycleAccounts`:case`closeResolvedMinerCycleState`:return!0;default:return!1}}function Re(e){switch(String(e??``).trim()){case`initMinerCapital`:case`depositMinerCapital`:case`withdrawMinerCapital`:case`setActiveCommit`:return!0;default:return!1}}function ze(e){let t=String(e??``).trim();return Re(t)||t===`bootstrapRegistryReserve`?`wallet`:t===`startMining`||t===`stopMining`?`runtime`:`cycle`}function Be(e){let t=String(e??``).trim().toLowerCase();return t&&(t.includes(`capital`)||t.includes(`commit`)||t.includes(`withdraw`)||t.includes(`fund`)||t.includes(`wallet`)||t.includes(`reserve`)||t.includes(`fee`)||t.includes(`need sol`))?`wallet`:`runtime`}function Ve(e){switch(e){case`wallet`:return`No recent wallet-side mining actions yet.`;case`cycle`:return`No recent cycle activity yet.`;default:return`No recent actions yet.`}}function He(e){return e.category===`wallet`?n.arrowUpDown:e.category===`cycle`?n.barChart:e.tone===`danger`?n.bug:e.tone===`success`?n.check:n.terminal}function V(r,i){let a=String(r??``).trim();return a?e`<a
9
+ `}function d(e){return e?e.signerCapability===`background-ready`?{title:`Background-ready wallet`,detail:`This wallet is suitable for unattended SAT mining.`}:{title:`Interactive wallet`,detail:e.signerCapabilityReason??`This wallet may need operator approval for mining actions.`}:{title:`No wallet selected`,detail:`Create or import the dedicated Mining wallet in onboarding or with fased wallet setup --chain solana, then refresh.`}}function f(e){let t=String(e.attachedWalletId??``).trim(),n=String(e.status?.walletId??``).trim(),r=String(e.profile?.walletId??``).trim(),i=String(e.readiness?.selectedWalletId??``).trim(),a=e.wallets.find(e=>e.walletId===t),o=e.wallets.find(e=>e.walletId===n),s=e.wallets.find(e=>e.walletId===r),c=e.wallets.find(e=>e.walletId===i),l=a??o??s??c,u=!!n&&(!!e.status?.enabledWanted||!!e.status?.running||R(e.status?.currentCapitalFundedLamports)||(e.status?.recentActions?.length??0)>0||String(e.status?.validatorAuthority??``).trim().length>0),d=t||(n&&(u||n===r&&o)?n:``);return d?n&&n!==d?{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Mining wallet state still settling`,detail:`Wallet registry and runtime status disagree. Refresh after the next SAT tick to confirm the singleton @wallet:mining history is live.`}:r&&r!==d?{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Mining form differs from singleton wallet`,detail:`The mining form is still showing settings from another wallet. Save or refresh the profile if you want the form to match @wallet:mining.`}:{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Singleton mining wallet`,detail:`SAT history, capital, and restart recovery follow @wallet:mining.`}:{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Configure`,detail:``}}function p(e){let t=String(e.defaultWalletId??``).trim(),n=String(e.attachedWalletId||e.profile?.walletId||e.status?.walletId||e.readiness?.selectedWalletId||``).trim();return!t||!n||t!==n?null:{title:`Agent and Mining wallets must stay separate`,detail:`This singleton mining wallet is also the primary Agent wallet. Use Wallet to clear the Agent default, then select a dedicated Agent wallet before wallet work.`}}function m(e){return(e?.strategyExecution&&i(e.strategyMode)===e.strategyExecution?e.strategyExecution:i(e?.strategyMode))===`auto`?{title:`Auto strategy`,detail:`Auto strategy uses the Fased model/runtime stack to propose the cycle allocation and falls back to deterministic execution if the strategy step fails.`}:{title:`Deterministic strategy`,detail:`Deterministic strategy uses locked 25-bucket allocation arrays for the selected risk profile and does not require model inference.`}}function h(e){if(!e.length)return null;let t=e.reduce((e,t)=>({committedLamports:e.committedLamports+BigInt(t.committedLamports??`0`),totalSatEarnedRaw:e.totalSatEarnedRaw+BigInt(t.totalSatEarnedRaw??`0`),totalRebateLamports:e.totalRebateLamports+BigInt(t.totalRebateLamports??`0`),txFeeLamports:e.txFeeLamports+BigInt(t.txFeeLamports??`0`),netLiveCostLamports:e.netLiveCostLamports+BigInt(t.netLiveCostLamports??`0`),validParticipationCount:e.validParticipationCount+ +!!t.validParticipation}),{committedLamports:0n,totalSatEarnedRaw:0n,totalRebateLamports:0n,txFeeLamports:0n,netLiveCostLamports:0n,validParticipationCount:0}),n=BigInt(e.length);return{sampleCount:e.length,averageCommitLamports:(t.committedLamports/n).toString(),averageSatRaw:(t.totalSatEarnedRaw/n).toString(),averageRebateLamports:(t.totalRebateLamports/n).toString(),averageFeeLamports:(t.txFeeLamports/n).toString(),averageNetLiveCostLamports:(t.netLiveCostLamports/n).toString(),validRatePct:`${Math.round(t.validParticipationCount/e.length*100)}%`}}function g(e){let t=e.status?.lastStrategyDecision??null;return e.strategyExecution===`auto`?t?t.source===`skill`?{title:t.fallbackUsed?`Auto path with deterministic fallback`:`Auto path with model route`,detail:t.fallbackUsed?`The runtime attempted the model-guided path but fell back to deterministic execution for this cycle.`:`The runtime used the model-guided strategy path for this cycle.`,pathLabel:t.modelId?`Model route · ${t.modelId}`:`Model route`,fallbackLabel:t.fallbackUsed?`Fallback used`:`No fallback`}:{title:`Auto planner with deterministic strategy`,detail:`Auto sizing/planning is active, but the strategy engine resolved to the deterministic path for the latest cycle.`,pathLabel:`Deterministic strategy path`,fallbackLabel:`Planner only`}:{title:`Auto path waiting`,detail:`Auto mode is enabled. A live planner/strategy decision will appear once a cycle is evaluated.`,pathLabel:`No strategy decision yet`,fallbackLabel:`Pending`}:{title:`Deterministic path`,detail:`This run is using the locked deterministic allocation generator. No model step is required for cycle placement.`,pathLabel:`Deterministic engine`,fallbackLabel:`Not applicable`}}function _(e){let t=o(e?.riskMode??`balanced`);switch(e?.strategyPreset&&r(e.strategyPreset)===(e?.riskMode??`balanced`)?e.strategyPreset:t){case`spread`:return{title:`Spread profile`,detail:`Wider center-weighted coverage for steadier participation and lower concentration risk.`};case`conviction`:return{title:`Conviction profile`,detail:`Tighter concentration around strongest buckets for more variance and more upside if the read is right.`};case`top_k`:return{title:`Top-K Sparse profile`,detail:`High-conviction compiler that puts most weight into a few ranked buckets. Higher variance, stronger upside when the read is right.`};case`ranked`:return{title:`Ranked profile`,detail:`Compiler ranks buckets and converts the ranking into weighted exposure with a tail for safety.`};case`adaptive`:return{title:`Adaptive profile`,detail:`Compiler blends stable coverage with cycle-ranked opportunity so auto can improve without abandoning fallback safety.`};case`crowd_aware`:return{title:`Crowd-aware profile`,detail:`Compiler avoids over-concentrating in obvious buckets and keeps broader tail exposure when the cycle is crowded.`};case`safe_fallback`:return{title:`Safe fallback profile`,detail:`Balanced deterministic allocation for recovery, low confidence, or unstable recent results.`};case`swarm`:return{title:`Swarm profile`,detail:`Coordination-friendly clustered coverage that keeps the miner flexible without fully flattening conviction.`};default:return{title:`Balanced profile`,detail:`Moderate concentration with practical skill upside and less volatility than aggressive mode.`}}}function v(e){let t=BigInt(String(e?.currentCapitalLockedLamports??`0`)),n=Number(e?.currentCapitalPendingCycleCount??0);if(e?.drainOnly&&(t>0n||n>0))return`Clearing`;if(!e?.running)return t>0n||n>0?`Clearing`:`Stopped`;switch(e.nextAction){case`participation`:return`Round open`;case`mining-crank`:return`Settling round`;case`finalize-epoch`:return`Finalizing epoch`;case`claim`:return`Claiming rewards`;case`recover`:return`Blocked`;default:return`Watching for round`}}function y(e){return e?.role===`admin`}function b(e,t){let n=String(t??``).trim();if(!n)return null;let r=e===`devnet`?`devnet`:e===`local`?`custom`:`mainnet-beta`;return r===`custom`?null:r===`mainnet-beta`?`https://solscan.io/tx/${encodeURIComponent(n)}`:`https://solscan.io/tx/${encodeURIComponent(n)}?cluster=${r}`}function x(e,t){let n=String(t??``).trim();if(!n)return null;let r=e===`devnet`?`devnet`:e===`local`?`custom`:`mainnet-beta`;return r===`custom`?null:r===`mainnet-beta`?`https://solscan.io/account/${encodeURIComponent(n)}`:`https://solscan.io/account/${encodeURIComponent(n)}?cluster=${r}`}function S(e,t){return b(e,t)}function C(e){let t=String(e??``).trim();if(!t)return null;let n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString()}function w(e){let{status:t,readiness:n}=e;if(t?.blocked)return{title:`Blocked`,detail:t.blockedReason||`Mining is blocked right now.`};let r=n?.checks.find(e=>e.key===`fundingReady`),i=n?.checks.find(e=>e.key===`cycleEntryReady`),a=n?.checks.find(e=>e.key===`minerInitialized`),o=BigInt(String(n?.stake?.rewardOwed??`0`)),s=BigInt(String(n?.stake?.slashPenaltyOwed??`0`)),c=BigInt(String(t?.currentCapitalLockedLamports??`0`)),l=BigInt(String(t?.currentCapitalFreeLamports??`0`)),u=Number(t?.currentCapitalPendingCycleCount??0),d=Number(t?.currentCapitalFirstPendingCycleId??0),f=Number(t?.currentCapitalLastPendingCycleId??0),p=String(r?.detail??``).trim().toLowerCase();if(r&&!r.ok)return p.includes(`probe unavailable`)?{title:`Wallet balance unavailable`,detail:`RPC could not confirm miner-wallet SOL right now. Retry in a few seconds.`}:{title:`Need SOL`,detail:`Fund the miner wallet with SOL before mining.`};if(a&&!a.ok){let e=String(a.detail??``).trim().toLowerCase();return e.includes(`owner mismatch`)||e.includes(`invalid owner`)?{title:`Capital account invalid`,detail:`This wallet's SAT miner capital account has the wrong owner on this machine. Repair the wallet-scoped capital account before funding or changing commit.`}:{title:`Need capital`,detail:`Fund Mining capital to create the miner account and deposit SOL.`}}return i&&!i.ok?c>0n&&l<250000000n?{title:`Capital locked`,detail:`Most miner capital is still locked in pending cycles, so free capital is below the 0.25 SOL entry minimum.${u>0&&d>0&&f>=d?d===f?` Pending cycle: ${d}.`:` Pending cycles: ${d}-${f}.`:``}`}:{title:`Need free capital`,detail:`Deposit at least 0.25 SOL of free miner capital to enter the next cycle.`}:s>0n?{title:`Slash penalty owed`,detail:o>0n?`Outstanding slash penalties must be settled before rewards can be claimed.`:`Outstanding slash penalties must be settled before mining proceeds cleanly.`}:t?.claimableSatRaw?{title:`Claimable SAT`,detail:`Rewards are available to claim.`}:t?.lastClaimTxHash?{title:`Claim already settled`,detail:`The latest reward claim already executed. Current claimable SAT is 0 until a later cycle earns more.`}:{title:`Mining active`,detail:`No SAT claim is available yet.`}}function ee(e){switch(e?.recommendedAction){case`resolve-dispute`:return{title:`Dismissed dispute path`,detail:`Resolve the active dispute first. If the dispute is dismissed, claims should unblock without corrected-root republish.`};case`republish-roots`:return{title:`Upheld dispute path`,detail:`This epoch needs corrected-root republish after the dispute outcome. Claims stay blocked until the replacement roots are submitted.`};case`retry-claim`:return{title:`Retry claim path`,detail:`Recovery conditions are satisfied. Retry the claim using the selected epoch and payout settings.`};case`wait`:return{title:`Wait path`,detail:`No admin action is recommended right now. Monitor epoch state and worker/runtime status for the next change.`};default:return{title:`No epoch recovery action required`,detail:`No dispute or epoch-admin recovery workflow is active. Capital-lock backlog, if any, is surfaced in the main mining status.`}}}function te(e,t){let n=String(e??``).trim();if(!n)return`0 ${t}`;try{let e=t===`SOL`?c:l,r=BigInt(n),i=r/10n**e,a=(r%10n**e).toString().padStart(Number(e),`0`).replace(/0+$/,``);return a?`${i}.${a} ${t}`:`${i} ${t}`}catch{return`${n} ${t}`}}function T(e){return e.replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function E(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=t===`SOL`?c:l,r=Number(n)/10**Number(e);if(!Number.isFinite(r))return`0`;let i=Math.abs(r);return T(t===`SAT`?i>=1e3?r.toFixed(1):i>=1?r.toFixed(2):r.toFixed(3):i>=1||i>=.01?r.toFixed(3):r.toFixed(5))}catch{return n}}function D(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=BigInt(n);return`${e>0n?`+`:e<0n?`-`:``}${E((e<0n?-e:e).toString(),t)}`}catch{return n}}function ne(e,t){let n=String(e??``).trim();return n?D(n,t):`—`}function re(e,t){let n=String(e??``).trim();return n?E(n,t):`—`}function O(e){try{return BigInt(String(e??`0`))}catch{return 0n}}function ie(e){return O(e.readiness?.balances.solBalanceLamports??e.selectedWallet?.solBalanceLamports??e.status?.currentSolBalanceLamports??`0`)}function k(e){switch(String(e??``).trim()){case`settleCyclePage`:case`finalizeCycleSettlement`:case`scoreCyclePage`:case`distributeCyclePage`:return!0;default:return!1}}function A(e){switch(String(e??``).trim()){case`settleCyclePage`:case`finalizeCycleSettlement`:case`scoreCyclePage`:case`distributeCyclePage`:return!0;default:return!1}}function j(e,t){if(!A(e))return!1;let n=String(t??``).trim().toLowerCase();return n.includes(`invalid progress`)||n.includes(`already closed`)||n.includes(`cycle already closed on-chain`)||n.includes(`invalid account data`)&&(n.includes(`settle invalid progress`)||n.includes(`score invalid progress`)||n.includes(`distribute invalid progress`))}function ae(e,t){let n=String(e??``).trim();if(!n)return`0 ${t}`;try{let e=BigInt(n);return`${e>0n?`+`:e<0n?`-`:``}${te((e<0n?-e:e).toString(),t)}`}catch{return`${n} ${t}`}}function oe(e){return``}function M(e){let t=[{label:`Commit`,value:`${E(e.committedLamports,`SOL`)} SOL`},{label:`Earned`,value:`${E(e.totalSatEarnedRaw,`SAT`)} SAT`},{label:`Rebate`,value:`${E(e.totalRebateLamports,`SOL`)} SOL`}],n=se(e.strategyPreset);n&&t.push({label:`Strategy`,value:n});let r=ce(e.strategyExecution);r&&t.push({label:`Execution`,value:r});let i=typeof e.committedMinerCount==`number`&&Number.isFinite(e.committedMinerCount)?e.committedMinerCount:typeof e.participantCount==`number`&&Number.isFinite(e.participantCount)?e.participantCount:null;return typeof i==`number`&&i>0&&t.push({label:`Pool`,value:`${i} miner${i===1?``:`s`}`}),t}function N(e){let{outcome:t,actions:n}=e,r=n.filter(e=>e.status===`success`&&A(e.action)).length,i=n.filter(e=>e.status===`failure`&&j(e.action,e.message)).length,a=[];if((r>0||i>0)&&(a.push({label:`Keeper won`,value:String(r)}),i>0&&a.push({label:`Keeper lost`,value:String(i)})),!t)return a;let o=(O(t.netLiveCostLamports)-O(t.txFeeLamports)+O(t.totalRebateLamports)+O(t.keeperBountyLamports)).toString();return a.push({label:`Erosion`,value:`${E(t.erosionLamports??o,`SOL`)} SOL`}),a.push({label:`Miner rebate`,value:`${E(t.totalRebateLamports,`SOL`)} SOL`}),t.keeperBountyLamports!=null&&a.push({label:`Keeper bounty`,value:`${E(t.keeperBountyLamports,`SOL`)} SOL`}),t.submitFeeLamports!=null&&a.push({label:`Submit fee`,value:`${E(t.submitFeeLamports,`SOL`)} SOL`}),t.keeperFeeLamports!=null&&a.push({label:`Keeper fees`,value:`${E(t.keeperFeeLamports,`SOL`)} SOL`}),t.claimFeeLamports!=null&&a.push({label:`Claim fee`,value:`${E(t.claimFeeLamports,`SOL`)} SOL`}),O(t.otherFeeLamports)>0n&&a.push({label:`Other tx`,value:`${E(t.otherFeeLamports,`SOL`)} SOL`}),a.push({label:`Net SOL`,value:`${D(t.netLiveCostLamports,`SOL`)} SOL`}),a}function se(e){switch(e){case`spread`:return`Spread`;case`balanced`:return`Balanced`;case`conviction`:return`Conviction`;case`swarm`:return`Swarm`;case`top_k`:return`Top-K`;case`ranked`:return`Ranked`;case`adaptive`:return`Adaptive`;case`crowd_aware`:return`Crowd-aware`;case`safe_fallback`:return`Safe fallback`;default:return null}}function P(e){return se(e.strategyPreset)||(e.riskMode?se(o(e.riskMode))??`Unrecorded`:`Unrecorded`)}function ce(e){return e===`auto`?`Auto`:e===`deterministic`?`Deterministic`:null}function F(e,t=1000000n,n=1){let r=String(e??``).trim();if(!r)return`—`;try{let e=BigInt(r),i=Number(e)/Number(t)*100;return Number.isFinite(i)?`${T(i.toFixed(n))}%`:`—`}catch{return`—`}}function I(e){return String(e??``).trim().length>0}function le(e,t=1000000n,n=1){return`${e<0n?`-`:e>0n?`+`:``}${F((e<0n?-e:e).toString(),t,n)}`}function L(e){let t=Number.isInteger(e)?String(e):T(e.toFixed(1));return`${t} miner${t===`1`?``:`s`}`}function ue(e){let t=e?.liveCycleReport??null;return!t||typeof t.cycleId!=`number`?null:{cycleId:t.cycleId,committedLabel:te(t.committedLamports,`SOL`),unlockRatioLabel:F(t.unlockRatioFp),issuedMinerSatLabel:me({value:t.issuedMinerSatRaw,cycleStatus:t.cycleStatus,counterpartValue:t.unissuedMinerSatRaw,compact:!1}),earnedSatLabel:te(t.totalSatEarnedRaw,`SAT`),netSolCostLabel:ae(t.netLiveCostLamports,`SOL`)}}function de(e){if(e==null)return null;let t=typeof e==`number`?Math.floor(e):Number.parseInt(String(e),10);return Number.isFinite(t)&&t>=0?t:null}function R(e){if(!e)return!1;try{return BigInt(e)>0n}catch{return!1}}function z(e){let t=O(e.committedLamports);if(t<=0n)return null;let n=O(String(e.requestedCommitLamports??`0`)),r=O(String(e.activeCommitLamports??`0`)),i=n>0n?n:r,a=O(String(e.minimumCommitLamports??`0`)),o=a>0n?a/2n:125000000n,s=O(e.previousCommittedLamports),c=O(String(e.capitalLockedLamports??`0`)),l=typeof e.pendingCycleCount==`number`&&Number.isFinite(e.pendingCycleCount)?e.pendingCycleCount:0,u=O(String(e.walletReserveShortfallLamports??`0`));return s>0n&&t>s+o&&c<=0n&&l<=0?{label:`Commit restored: capital unlocked`,title:`The latest submitted commit increased after pending/locked miner capital cleared back into free capital.`,tone:`success`}:i>0n&&t+o<i?c>0n||l>0?{label:`Commit reduced: locked capital clearing`,title:`The runtime submitted a smaller safe commit because previous-cycle capital is still locked until settlement and claim complete.`,tone:`warning`}:u>0n?{label:`Commit reduced: fee reserve`,title:`The runtime submitted a smaller safe commit because signer fee reserve was below target.`,tone:`warning`}:{label:`Commit reduced: free capital`,title:`The runtime submitted a smaller safe commit because currently free miner capital was below the saved target.`,tone:`warning`}:null}function fe(e){return e?.statusFresh===!1||e?.degraded===!0}function B(e){return e.readinessValue!=null&&(e.degraded||e.statusValue==null||e.statusValue===`0`)&&R(e.readinessValue)?e.readinessValue:e.statusValue??e.readinessValue??e.fallback??`0`}function pe(e){return e.degraded&&e.readinessValue?e.readinessValue:e.statusValue??e.readinessValue??null}function me(e){if((e.cycleStatus??null)!==2){let t=R(e.value),n=R(e.counterpartValue);if(!t&&!n)return`—`}return e.value==null?`—`:e.compact?E(e.value,`SAT`):te(e.value,`SAT`)}function he(e,t){let n=e?.liveCycleReport??null,r=typeof e?.currentCycleId==`number`?e.currentCycleId:typeof n?.cycleId==`number`?n.cycleId:null,i=n?.committedLamports??`0`,a=R(i),o=de(n?.validMinerCount),s=n?.totalCommittedLamports??(a?i:null),c=[{label:`Current cycle`,value:typeof r==`number`?String(r):`—`},{label:`Miners now`,value:o==null?`—`:`${o}`},{label:`SOL in cycle`,value:s==null?`—`:E(s,`SOL`)},{label:`Your commit`,value:a?E(i,`SOL`):`—`},{label:`Last payout (SAT)`,value:re(t?.satRaw??null,`SAT`)},{label:`Last net cost (SOL)`,value:ne(t?.netLamports??null,`SOL`)}];return R(e?.currentKeeperBountyUnpaidLamports)&&c.push({label:`Keeper bounty owed`,value:E(e?.currentKeeperBountyUnpaidLamports??`0`,`SOL`)}),c}function ge(e){let t=[{label:`Cycle`,value:e.cycleId==null?`—`:String(e.cycleId)},{label:`Your commit`,value:e.ownCommitPresent?`${E(e.ownCommitLamports,`SOL`)} SOL`:`—`},{label:`SOL in cycle`,value:e.totalCommittedLamports==null?`—`:`${E(e.totalCommittedLamports,`SOL`)} SOL`},{label:`Miners now`,value:e.minerCount==null?`pending`:String(e.minerCount)}];return R(e.keeperBountyUnpaidLamports)&&t.push({label:`Keeper bounty owed`,value:`${E(e.keeperBountyUnpaidLamports??`0`,`SOL`)} SOL`,title:`Keeper work completed for this cycle but not yet paid from the protocol reserve.`}),t}function _e(e){let t=typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,n=e?.settledHistory??[];if(t!=null){let e=n.find(e=>e.cycleId===t);if(e)return{cycleId:t,satRaw:e.totalSatEarnedRaw??null,netLamports:e.netLiveCostLamports??null}}let r=n[0]??null;return{cycleId:typeof r?.cycleId==`number`?r.cycleId:null,satRaw:r?.totalSatEarnedRaw??null,netLamports:r?.netLiveCostLamports??null}}function ve(e){if(!e.length)return`—`;let t=[...e].filter(Number.isFinite).toSorted((e,t)=>e-t),n=t[0],r=t[t.length-1];return n===r?String(n):`${n}-${r}`}function ye(e){let t=typeof e?.missingCycleStartId==`number`?e.missingCycleStartId:null,n=typeof e?.missingCycleEndId==`number`?e.missingCycleEndId:null,r=typeof e?.missingCycleCount==`number`&&Number.isFinite(e.missingCycleCount)?e.missingCycleCount:0;if(r<=0||t==null||n==null||n<t)return null;let i=[typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,(e?.pendingCycleIds??[]).reduce((e,t)=>typeof t==`number`&&Number.isFinite(t)&&(e==null||t>e)?t:e,null)].filter(e=>typeof e==`number`&&Number.isFinite(e)).reduce((e,t)=>e==null||t>e?t:e,null);return i!=null&&i>n?null:{startCycleId:t,endCycleId:n,count:r}}function be(e){let t=typeof e?.currentCycleId==`number`?e.currentCycleId:typeof e?.liveCycleReport?.cycleId==`number`?e.liveCycleReport.cycleId:null,n=typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,r=typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,i=typeof e?.exactPendingCycleId==`number`?e.exactPendingCycleId:null,a=String(e?.exactPendingStage??``).trim(),o=(e?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e)),s=ye(e),c=[];if(n!=null&&n!==t&&c.push(`Settled ${n}`),r!=null&&r!==t&&r!==n&&c.push(`Submitted ${r}`),o.length>0&&(i==null?c.push(`Pending ${ve(o)}`):c.push(`Pending ${i}${a?` (${a})`:``}`)),s){let t=e?.enabledWanted&&e.running&&!e.drainOnly?`Missed`:`Skipped`;c.push(`${t} ${s.startCycleId===s.endCycleId?s.startCycleId:`${s.startCycleId}-${s.endCycleId}`}`)}return c.length>0?c.join(` · `):null}function xe(e){if(!e?.enabledWanted||!e.running||!e.workers)return null;let t=new Date(e.snapshotAt??e.updatedAt??``).getTime();if(!Number.isFinite(t))return null;let n=[],r={roundWatcher:2e4,epoch:3e4,claim:4e4,recovery:5e4};for(let i of[`roundWatcher`,`epoch`,`claim`,`recovery`]){let a=e.workers[i];if(!a?.enabled)continue;let o=new Date(String(a.nextScheduledAt??``)).getTime(),s=new Date(String(a.lastRunAt??``)).getTime(),c=Number.isFinite(o)?t-o:Number.isFinite(s)?t-s:0;if(a.running||c<=r[i])continue;let l=[String(a.lastDetail??a.waitingReason??``).trim(),typeof a.lastSelectedCycleId==`number`?`cycle ${a.lastSelectedCycleId}${a.lastSelectedStage?` ${a.lastSelectedStage}`:``}`:``,(a.rpcTimeoutCount??0)>0?`${a.rpcTimeoutCount??0} timeout${a.rpcTimeoutCount===1?``:`s`}`:``].filter(Boolean).join(` · `);n.push(l?`${i} (${l})`:i)}return n.length>0?`Worker stale: ${n.join(` · `)}`:null}function Se(e){if(!e?.enabledWanted||!e.running)return null;let t=e.chainTime;if(!t||t.freshness===`fresh`||t.freshness===`stale`&&t.source!==`local-display`&&!t.lastError&&t.consecutiveFailures===0)return null;let n=t.source===`local-display`?`using local display time only`:t.lastError?t.lastError:`${t.consecutiveFailures} consecutive chain-time read failures`;return`Chain time ${t.freshness}: ${n}`}function Ce(e){let t=we(e.plannerWindow),n=e.rangeStart&&e.rangeEnd?`${e.rangeStart} to ${e.rangeEnd}`:null;return e.latestPoint?{summary:`${e.sampled?`Showing ${e.visibleCycleCount} sampled points from ${e.matchingCycleCount} completed cycles`:`Showing ${e.visibleCycleCount} completed cycles`} mined by this wallet in the ${t}${n?` · data present ${n}`:``}. Latest visible cycle ${e.latestPoint.cycleId} earned ${e.latestPoint.satLabel} SAT with ${e.latestPoint.netLabel} SOL net.`,windowLabel:t,dataRangeLabel:n}:{summary:`No completed cycles mined by this wallet were recorded in the ${t} yet.${e.currentCycleSubmitted&&typeof e.currentCycleId==`number`?` Current cycle ${e.currentCycleId} is already submitted and waiting for settlement, so it will not show here yet.`:``}`,windowLabel:t,dataRangeLabel:n}}function we(e){return e===`1h`?`last hour`:e===`24h`?`last 24 hours`:e===`30d`?`last 30 days`:e===`1y`?`last year`:`all recorded time`}function Te(e){return e===`1h`?3600*1e3:e===`24h`?1440*60*1e3:e===`30d`?720*60*60*1e3:e===`1y`?365*24*60*60*1e3:null}function Ee(e,t){if(e.length<=t)return e;let n=[],r=new Set;for(let i=0;i<t;i+=1){let a=Math.round(i*(e.length-1)/Math.max(1,t-1));r.has(a)||(r.add(a),n.push(e[a]))}return n}function De(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(n)||t===n)return 50;let r=(e-t)/(n-t);return 100-Math.max(0,Math.min(100,r*100))}function Oe(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return[];let r=n.slice().toSorted((e,t)=>Date.parse(String(e.recordedAt??``))-Date.parse(String(t.recordedAt??``))),i=typeof t?.maxPoints==`number`&&Number.isFinite(t.maxPoints)?Math.max(2,t.maxPoints):null,a=i==null?r:Ee(r,i),o=a.map(e=>Number(e.totalSatEarnedRaw??`0`)/10**Number(l)),s=a.map(e=>Number(e.netLiveCostLamports??`0`)/10**Number(c)),u=Math.min(...o),d=Math.max(...o),f=Math.min(...s),p=Math.max(...s);return a.map((e,t)=>{let n=o[t]??0,r=s[t]??0,i=ce(e.strategyExecution),c=P(e),l=typeof e.committedMinerCount!=`number`||!Number.isFinite(e.committedMinerCount)?null:`Pool: ${e.committedMinerCount} miner${e.committedMinerCount===1?``:`s`}`,m=(O(e.netLiveCostLamports)-O(e.txFeeLamports)+O(e.totalRebateLamports)+O(e.keeperBountyLamports)).toString();return{cycleId:e.cycleId,cycleLabel:String(e.cycleId).slice(-4),timeLabel:Ie(e.recordedAt),commitLabel:E(e.committedLamports,`SOL`),satLabel:E(e.totalSatEarnedRaw,`SAT`),netLabel:D(e.netLiveCostLamports,`SOL`),erosionLabel:E(e.erosionLamports??m,`SOL`),rebateLabel:E(e.totalRebateLamports,`SOL`),keeperBountyLabel:e.keeperBountyLamports==null?null:E(e.keeperBountyLamports,`SOL`),submitFeeLabel:e.submitFeeLamports==null?null:E(e.submitFeeLamports,`SOL`),keeperFeeLabel:e.keeperFeeLamports==null?null:E(e.keeperFeeLamports,`SOL`),claimFeeLabel:e.claimFeeLamports==null?null:E(e.claimFeeLamports,`SOL`),otherFeeLabel:O(e.otherFeeLamports)>0n?E(e.otherFeeLamports,`SOL`):null,strategyLabel:c,satValue:n,netValue:r,satY:De(n,u,d),netY:De(r,f,p),x:a.length===1?50:t/(a.length-1)*100,executionLabel:i??`—`,poolLabel:l}})}function ke(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return null;let r=new Map,i=0n,a=0n,o=0n,s=0n,u=0,d=0,f=0n,p=0,m=0,h=0,g=0;for(let e of n){let t=P(e),n=r.get(t)??{strategyLabel:t,cycleCount:0,satRaw:0n,rebateLamports:0n,detRebateLamports:0n,perfRebateLamports:0n,detRebateSamples:0,perfRebateSamples:0,netLamports:0n,scoreDeltaFp:0n,skillScoreFp:0n,scoreSamples:0,crowdingRatioFp:0n,crowdingSamples:0,poolCount:0,poolSamples:0,autoCount:0,deterministicCount:0,taskCount:0,fallbackCount:0};n.cycleCount+=1;let c=O(e.totalSatEarnedRaw),l=O(e.totalRebateLamports),_=I(e.deterministicRebateLamports)||I(e.claimableDetRebateLamports)||I(e.claimedDetRebateLamports),v=I(e.performanceRebateLamports)||I(e.claimablePerfRebateLamports)||I(e.claimedPerfRebateLamports),y=I(e.deterministicRebateLamports)?O(e.deterministicRebateLamports):O(e.claimableDetRebateLamports)+O(e.claimedDetRebateLamports),b=I(e.performanceRebateLamports)?O(e.performanceRebateLamports):O(e.claimablePerfRebateLamports)+O(e.claimedPerfRebateLamports),x=O(e.netLiveCostLamports);n.satRaw+=c,n.rebateLamports+=l,_&&(n.detRebateLamports+=y,n.detRebateSamples+=1,o+=y,u+=1),v&&(n.perfRebateLamports+=b,n.perfRebateSamples+=1,s+=b,d+=1),n.netLamports+=x,i+=c,a+=l,f+=x,I(e.placementReturnFp)&&I(e.benchmarkReturnFp)&&(n.scoreDeltaFp+=O(e.placementReturnFp)-O(e.benchmarkReturnFp),n.skillScoreFp+=O(e.skillScoreFp),n.scoreSamples+=1),I(e.crowdingRatioFp)&&(n.crowdingRatioFp+=O(e.crowdingRatioFp),n.crowdingSamples+=1);let S=typeof e.committedMinerCount==`number`&&Number.isFinite(e.committedMinerCount)?e.committedMinerCount:typeof e.participantCount==`number`&&Number.isFinite(e.participantCount)?e.participantCount:null;S!=null&&(n.poolCount+=S,n.poolSamples+=1),e.strategyExecution===`auto`?(n.autoCount+=1,p+=1):(n.deterministicCount+=1,m+=1),(e.strategySource===`skill`||e.modelId)&&(n.taskCount+=1,h+=1),e.strategyFallbackUsed&&(n.fallbackCount+=1,g+=1),r.set(t,n)}let _=n.length,v=Array.from(r.values()).toSorted((e,t)=>t.cycleCount===e.cycleCount?Number(t.satRaw-e.satRaw):t.cycleCount-e.cycleCount).slice(0,Math.max(1,t?.maxRows??6)).map(e=>{let t=e.satRaw/BigInt(Math.max(1,e.cycleCount)),n=e.rebateLamports/BigInt(Math.max(1,e.cycleCount)),r=e.detRebateSamples>0?e.detRebateLamports/BigInt(e.detRebateSamples):0n,i=e.perfRebateSamples>0?e.perfRebateLamports/BigInt(e.perfRebateSamples):0n,a=e.netLamports/BigInt(Math.max(1,e.cycleCount)),o=e.scoreSamples>0?e.scoreDeltaFp/BigInt(e.scoreSamples):0n,s=e.scoreSamples>0?e.skillScoreFp/BigInt(e.scoreSamples):0n,u=e.crowdingSamples>0?e.crowdingRatioFp/BigInt(e.crowdingSamples):0n,d=e.poolSamples>0?e.poolCount/e.poolSamples:null,f=e.detRebateSamples>0||e.perfRebateSamples>0||e.scoreSamples>0||e.crowdingSamples>0||e.poolSamples>0,p=[`${e.strategyLabel}: ${e.cycleCount} cycle${e.cycleCount===1?``:`s`}`,`Avg SAT: ${E(t.toString(),`SAT`)} SAT`,`Avg rebate: ${E(n.toString(),`SOL`)} SOL`,`Avg deterministic rebate: ${e.detRebateSamples>0?`${E(r.toString(),`SOL`)} SOL`:`not recorded`}`,`Avg performance rebate: ${e.perfRebateSamples>0?`${E(i.toString(),`SOL`)} SOL`:`not recorded`}`,`Avg net: ${D(a.toString(),`SOL`)} SOL`,`Score edge: ${e.scoreSamples>0?le(o):`not recorded`}`,`Skill score: ${e.scoreSamples>0?F(s.toString()):`not recorded`}`,`Crowding: ${e.crowdingSamples>0?F(u.toString()):`not recorded`}`,`Pool: ${d==null?`not recorded`:`${L(d)} avg`}`,`Auto: ${e.autoCount}`,`Deterministic: ${e.deterministicCount}`,`Task/skill: ${e.taskCount}`,`Fallback: ${e.fallbackCount}`],m=e.detRebateSamples>0?E(r.toString(),`SOL`):`—`,h=e.perfRebateSamples>0?E(i.toString(),`SOL`):`—`,g=e.scoreSamples>0?le(o):`—`,v=e.scoreSamples>0?F(s.toString()):`—`,y=e.crowdingSamples>0?F(u.toString()):`—`,b=d==null?`—`:L(d),x=[...e.detRebateSamples>0&&r>0n?[`Det ${m}`]:[],...e.perfRebateSamples>0&&i>0n?[`Perf ${h}`]:[],...e.scoreSamples>0&&o!==0n?[`Edge ${g}`]:[],...e.scoreSamples>0&&s>0n?[`Skill ${v}`]:[],...e.crowdingSamples>0&&u>0n?[`Crowd ${y}`]:[],...d==null?[]:[`Pool ${b}`]],S=[...e.autoCount>0?[`Auto ${e.autoCount}`]:[],...e.deterministicCount>0?[`Det ${e.deterministicCount}`]:[],...e.taskCount>0?[`Task ${e.taskCount}`]:[],...e.fallbackCount>0?[`Fallback ${e.fallbackCount}`]:[]];return{strategyLabel:e.strategyLabel,cycleCount:e.cycleCount,sharePct:Math.round(e.cycleCount/Math.max(1,_)*100),avgSatValue:Number(t)/10**Number(l),avgRebateValue:Number(n)/10**Number(c),avgNetValue:Number(a)/10**Number(c),avgSkillEdgeValue:e.scoreSamples>0?Number(o):-1/0,avgSatLabel:E(t.toString(),`SAT`),avgRebateLabel:E(n.toString(),`SOL`),avgDetRebateLabel:m,avgPerfRebateLabel:h,avgNetLabel:D(a.toString(),`SOL`),avgSkillEdgeLabel:g,avgSkillLabel:v,avgCrowdingLabel:y,avgPoolLabel:b,hasCompetitionMetrics:f,competitionMetrics:x,executionMetrics:S,autoCount:e.autoCount,deterministicCount:e.deterministicCount,taskCount:e.taskCount,fallbackCount:e.fallbackCount,title:p.join(`
10
+ `)}}),y=e=>v.reduce((t,n)=>!t||e(n)>e(t)?n:t,null),b=v[0]??null,x=y(e=>e.avgSatValue),S=y(e=>e.avgRebateValue),C=y(e=>e.avgNetValue),w=v.filter(e=>Number.isFinite(e.avgSkillEdgeValue)).reduce((e,t)=>!e||t.avgSkillEdgeValue>e.avgSkillEdgeValue?t:e,null);return{summary:{totalCycles:_,totalSatLabel:E(i.toString(),`SAT`),totalRebateLabel:E(a.toString(),`SOL`),totalDetRebateLabel:u>0?E(o.toString(),`SOL`):`—`,totalPerfRebateLabel:d>0?E(s.toString(),`SOL`):`—`,rebateSplitRecorded:u>0||d>0,totalNetLabel:D(f.toString(),`SOL`),mostUsedLabel:b?.strategyLabel??`—`,mostUsedDetail:b?`${b.cycleCount} cycles · ${b.sharePct}%`:`No data`,bestSatLabel:x?.strategyLabel??`—`,bestSatDetail:x?`${x.avgSatLabel} SAT avg`:`No data`,bestRebateLabel:S?.strategyLabel??`—`,bestRebateDetail:S?`${S.avgRebateLabel} SOL avg`:`No data`,bestNetLabel:C?.strategyLabel??`—`,bestNetDetail:C?`${C.avgNetLabel} SOL avg`:`No data`,bestSkillLabel:w?.strategyLabel??`—`,bestSkillDetail:w&&w.hasCompetitionMetrics?`${w.avgSkillEdgeLabel} edge · ${w.avgSkillLabel} skill`:`No score data`,executionDetail:`Auto ${p} · Deterministic ${m}`,sourceDetail:`Task/skill ${h} · Fallback ${g}`},rows:v}}function Ae(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return[];let r=Math.max(1,t?.maxPoints??8),i=n.slice(0,r).toReversed(),a=i.reduce((e,t)=>{try{let n=BigInt(t.committedLamports??`0`);return n>e?n:e}catch{return e}},0n),o=a>0n?a:1n;return i.map(e=>{let t=0n;try{t=BigInt(e.committedLamports??`0`)}catch{t=0n}let n=Number(t*100n/o),r=Math.max(18,Math.min(100,n||0)),i=e.strategyExecution===`auto`?e.strategyFallbackUsed?`fallback`:`auto`:`deterministic`;return{cycleId:e.cycleId,cycleLabel:String(e.cycleId).slice(-4),timeLabel:Ie(e.recordedAt),commitLabel:E(e.committedLamports,`SOL`),satLabel:E(e.totalSatEarnedRaw,`SAT`),netLabel:D(e.netLiveCostLamports,`SOL`),executionLabel:i===`auto`?`Auto`:i===`fallback`?`Auto -> deterministic`:`Deterministic`,rationaleLabel:e.plannerRationale?.trim()||e.strategyRationale?.trim()||`No rationale recorded`,barHeightPct:r,tone:i}})}function je(e,t,n){return e<t?t:e>n?n:e}function Me(...e){return e.reduce((e,t)=>t>e?t:e,e[0]??0n)}function Ne(e){let t=String(e??``).trim();if(!t)return`0.25`;try{let e=BigInt(t),n=e/1000000000n,r=(e%1000000000n).toString().padStart(9,`0`).replace(/0+$/,``).slice(0,4);return r?`${n}.${r}`:`${n}`}catch{return`0.25`}}function Pe(e){let t=String(e??``).trim();if(!t)return`0`;try{let e=BigInt(t),n=e/1000000000n,r=(e%1000000000n).toString().padStart(9,`0`).replace(/0+$/,``);return r?`${n}.${r}`:`${n}`}catch{return`0`}}function Fe(e){let t=String(e??``).trim();if(!t||!/^\d+(\.\d{0,9})?$/.test(t))return`250000000`;let[n,r=``]=t.split(`.`);return(BigInt(n||`0`)*1000000000n+BigInt((r+`000000000`).slice(0,9)||`0`)).toString()}function Ie(e){let t=String(e??``).trim();if(!t)return`—`;let n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString([],{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function Le(e){let t=String(e??``).trim();if(!t)return`—`;let n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString([],{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function V(e){switch(String(e??``).trim()){case`claim`:case`claimCycleRewards`:case`claimCycleRewardsBatch`:case`closeResolvedCycleAccounts`:case`closeResolvedMinerCycleState`:return!0;default:return!1}}function Re(e){switch(String(e??``).trim()){case`initMinerCapital`:case`depositMinerCapital`:case`withdrawMinerCapital`:case`setActiveCommit`:return!0;default:return!1}}function ze(e){let t=String(e??``).trim();return Re(t)||t===`bootstrapRegistryReserve`?`wallet`:t===`startMining`||t===`stopMining`?`runtime`:`cycle`}function Be(e){let t=String(e??``).trim().toLowerCase();return t&&(t.includes(`capital`)||t.includes(`commit`)||t.includes(`withdraw`)||t.includes(`fund`)||t.includes(`wallet`)||t.includes(`reserve`)||t.includes(`fee`)||t.includes(`need sol`))?`wallet`:`runtime`}function Ve(e){switch(e){case`wallet`:return`No recent wallet-side mining actions yet.`;case`cycle`:return`No recent cycle activity yet.`;default:return`No recent actions yet.`}}function He(e){return e.category===`wallet`?n.arrowUpDown:e.category===`cycle`?n.barChart:e.tone===`danger`?n.bug:e.tone===`success`?n.check:n.terminal}function H(r,i){let a=String(r??``).trim();return a?e`<a
11
11
  class="mining-inline-link mining-inline-link--card"
12
12
  href=${a}
13
13
  target="_blank"
@@ -19,7 +19,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
19
19
  </a>`:t}function Ue(n){return e`<div class="mining-activity-card__step">
20
20
  <div class="mining-activity-card__step-head">
21
21
  <span class="mining-activity-card__step-label">${n.label}</span>
22
- ${V(n.href,`Open ${n.label}`)}
22
+ ${H(n.href,`Open ${n.label}`)}
23
23
  </div>
24
24
  ${n.detail?e`<div class="mining-activity-card__step-detail">${n.detail}</div>`:t}
25
25
  </div>`}function We(r){let i=r.tone??`neutral`,a=r.summary.trim().length>0,o=r.steps??[],c=r.facts??[],l=r.proofFacts??[],u=String(r.detail??``).trim(),d=o.length,f=c.length+l.length+d+ +(u.length>0)>0,p=e`
@@ -34,7 +34,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
34
34
  </div>
35
35
  ${a?e`<div class="mining-activity-card__summary">${r.summary}</div>`:t}
36
36
  </div>
37
- ${V(r.href,`Open ${r.title}`)}
37
+ ${H(r.href,`Open ${r.title}`)}
38
38
  ${f?e`<span class="mining-activity-card__details-icon" aria-hidden="true">
39
39
  ${n.chevronRight}
40
40
  </span>`:t}
@@ -69,7 +69,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
69
69
  data-tone=${i}
70
70
  >
71
71
  ${p}
72
- </div>`}function Ge(e){return Ke(null,e)}function Ke(e,t){let n=String(t??``).trim();return n?j(e,n)?`Keeper step already completed elsewhere.`:n.includes(`rate limited`)?`RPC rate limited. Retry in a few seconds.`:n.includes(`Attempt to debit an account but found no record of a prior credit`)||n.includes(`AccountNotFound`)?`need SOL + miner setup`:(Re(e)||n.includes(`sat_miner_capital`))&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`))?`SAT miner capital account is invalid on this machine.`:B(e)&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`))?`Cycle already claimed and closed.`:n.replace(/\s+/g,` `):``}function H(e,t){let n=String(t??``).trim();return B(e)&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`)||n.includes(`already claimed and closed`))}function U(e){let t=String(e??``).trim();return t?t.includes(`invalid progress cycle=`)||t.includes(`settle invalid progress`)||t.includes(`score invalid progress`)||t.includes(`distribute invalid progress`)?`Shared step already completed elsewhere.`:t.includes(`rate limited`)?`RPC rate limited. Retry in a few seconds.`:t.includes(`Attempt to debit an account but found no record of a prior credit`)||t.includes(`AccountNotFound`)?`Wallet needs SOL and miner setup.`:t.includes(`sat_miner_capital`)&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`SAT miner capital account is invalid on this machine.`:t.includes(`sat_settle_cycle.rs:154`)&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`Cycle already closed on-chain.`:(t.includes(`claimCycleRewards`)||t.includes(`claimCycleRewardsBatch`)||t.includes(`closeResolvedCycleAccounts`)||t.includes(`closeResolvedMinerCycleState`)||t.includes(`already claimed and closed`))&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`Cycle was already claimed and closed.`:t.replace(/\s+/g,` `):``}function qe(e){switch(String(e??``).trim()){case`openCycle`:return`Cycle opened`;case`initMinerCapital`:return`Capital initialized`;case`depositMinerCapital`:return`Fund submitted`;case`withdrawMinerCapital`:return`Withdraw submitted`;case`setActiveCommit`:return`Commit applied`;case`bootstrapRegistryReserve`:return`Cycle buffer topped up`;case`skipCycle`:return`Cycle skipped`;case`submitCycle`:return`Commit submitted`;case`submitParticipation`:return`Participation submitted`;case`settleCyclePage`:return`Settlement page processed`;case`finalizeCycleSettlement`:return`Settlement finalized`;case`scoreCyclePage`:return`Score page processed`;case`distributeCyclePage`:return`Distribution page processed`;case`miningCrank`:return`Round settled`;case`finalizeEpoch`:return`Epoch finalized`;case`claim`:case`claimCycleRewards`:case`claimCycleRewardsBatch`:return`Rewards claimed`;case`closeResolvedCycleAccounts`:case`closeResolvedMinerCycleState`:case`closeResolvedCycleArtifacts`:return`Cycle cleanup completed`;case`startMining`:return`Mining started`;case`stopMining`:return`Mining stopped`;default:return String(e??`—`).trim()||`—`}}function Je(e){let t=!!e.status?.enabledWanted,n=e.readiness?.checks.find(e=>e.key===`walletSelected`)?.ok,r=e.readiness?.checks.find(e=>e.key===`rpcReady`)?.ok,i=e.readiness?.checks.find(e=>e.key===`fundingReady`)?.ok,a=e.readiness?.checks.find(e=>e.key===`minerInitialized`)?.ok,o=String(e.readiness?.checks.find(e=>e.key===`minerInitialized`)?.detail??``).trim().toLowerCase(),s=e.readiness?.checks.find(e=>e.key===`cycleEntryReady`)?.ok,c=String(e.status?.workers?.roundWatcher?.waitingReason??``).trim(),l=BigInt(String(e.status?.currentCapitalLockedLamports??`0`)),u=Number(e.status?.currentCapitalPendingCycleCount??0),d=l>0n||u>0,f=e.status?.currentCycleId,p=e.status?.recentActions?.find(e=>e.status===`success`&&e.action===`submitCycle`&&typeof f==`number`&&e.cycleId===f);if(e.pendingAction===`starting`||e.actionBusy&&!e.status?.running)return{label:`Starting`,tone:`warn`,detail:`Starting miner workers.`};if(e.pendingAction===`stopping`)return{label:`Stopping`,tone:`warn`,detail:`Stopping miner workers.`};if(!t)return d?{label:`Clearing`,tone:`warn`,detail:`New cycle submits are stopped. Claim and recovery keep clearing locked capital.`}:n?r?i?a?s?e.readiness?.ok?{label:`Ready`,tone:`success`,detail:`Start mining.`}:{label:`Stopped`,tone:`neutral`,detail:e.readiness?.checks.find(e=>!e.ok)?.label??`Wallet is not mining right now.`}:BigInt(String(e.status?.currentCapitalFreeLamports??`0`))>0n&&l===0n&&u===0?{label:`Stopped`,tone:`warn`,detail:`Withdraw remaining dust or deposit to Mining.`}:{label:`Stopped`,tone:`neutral`,detail:`Deposit to Mining.`}:{label:`Stopped`,tone:`neutral`,detail:o.includes(`owner mismatch`)||o.includes(`invalid owner`)?`Repair mining capital.`:`Fund Mining.`}:{label:`Stopped`,tone:`neutral`,detail:`Deposit to Wallet.`}:{label:`Stopped`,tone:`neutral`,detail:`Set RPC.`}:{label:`Stopped`,tone:`neutral`,detail:`Configure`};let m=e.status?.currentCapitalLockedLamports!=null||e.status?.currentCapitalPendingCycleCount!=null;if(e.status?.drainOnly&&(!m||BigInt(String(e.status?.currentCapitalLockedLamports??`0`))>0n||Number(e.status?.currentCapitalPendingCycleCount??0)>0)){let t=e.status;return{label:`Clearing`,tone:t?.blocked?`danger`:`warn`,detail:U(t?.nextActionDetail)||`Releasing locked capital. New cycle submits are stopped.`}}if(e.status?.drainOnly){let t=BigInt(String(e.status.currentCapitalFreeLamports??`0`));return BigInt(String(e.status.currentCapitalFundedLamports??`0`))<=0n&&t<=0n?{label:`Stopped`,tone:`neutral`,detail:`No miner capital is funded. Wallet SOL is already outside mining capital.`}:{label:`Ready`,tone:`success`,detail:`Cycle capital is free. Start mining or withdraw.`}}return e.status?.blocked?{label:`Blocked`,tone:`danger`,detail:U(e.status.blockedReason)||`Mining needs attention.`}:p?{label:`Submitted`,tone:`success`,detail:`Submitted for cycle ${p.cycleId}. Waiting for settlement.`}:c.includes(`skipped`)?{label:`Skipped`,tone:`warn`,detail:c}:e.status?.nextAction===`mining-crank`||e.status?.workers?.epoch?.running?{label:`Settling`,tone:`success`,detail:e.status.nextActionDetail?.trim()||`Settling the prior cycle.`}:e.status?.nextAction===`claim`||e.status?.workers?.claim?.running?{label:`Claiming`,tone:`success`,detail:e.status.nextActionDetail?.trim()||`Claiming rewards.`}:{label:`Enabled`,tone:`success`,detail:e.status?.nextActionDetail?.trim()||`Miner is enabled and waiting.`}}function Ye(e){let t=e.minerEnabled&&!e.drainOnly,n=e.actionBusy||t||e.startPrerequisitesBlocked;return{startBlocked:n,stopBlocked:e.actionBusy||!t,startLabel:e.pendingAction===`starting`?`Starting...`:e.drainOnly?`Resume`:`Start`,startTitle:e.drainOnly&&!n?`Resume new cycle submits. Claim and recovery keep clearing old cycles.`:e.startBlockedReason,stopLabel:`Stop`,stopTitle:e.drainOnly?`Already clearing. Use Resume to submit new cycles again.`:`Stop future submits. Already-submitted cycles still settle, distribute, and claim.`}}function Xe(e){return e?e.state===`synced`?{label:`Mainnet synced`,tone:`success`,detail:e.message}:e.state===`available`?{label:`Manifest ready`,tone:`warn`,detail:e.message}:e.state===`not_live`?{label:`Not live`,tone:`neutral`,detail:e.message}:{label:`Sync failed`,tone:`danger`,detail:e.error||e.message||`SAT mainnet manifest verification failed.`}:{label:`Manifest`,tone:`neutral`,detail:`Check official SAT mainnet manifest.`}}function Ze(e){let t=[{key:`wallet`,label:`Wallet`,detail:`Attach a dedicated mining wallet.`,ready:e.walletReady},{key:`fee`,label:`Fee SOL`,detail:`Keep wallet SOL available for fees, rent, submit, settlement, claim, and cleanup.`,ready:e.feeReady},{key:`capital`,label:`Capital`,detail:`Deposit SOL into miner capital. This is separate from wallet fee SOL.`,ready:e.capitalReady},{key:`commit`,label:`Active commit`,detail:`Use Update to put the active commit on-chain before starting.`,ready:e.activeCommitReady},{key:`start`,label:e.clearing?`Clearing`:`Start`,detail:e.clearing?`New submits are stopped while claim and recovery clear older cycle capital.`:`Start mining after wallet, fee SOL, capital, and active commit are ready.`,ready:e.started}],n=!1;return t.map(({ready:t,...r})=>t?{...r,state:`done`}:r.key===`start`&&e.clearing?{...r,state:`warn`}:n?{...r,state:`pending`}:(n=!0,{...r,state:`current`}))}function Qe(e){let t=e.recentActions??[],n=String(e.waitingReason??``).trim(),r=e.currentCycleId??null,i=typeof r==`number`&&t.some(e=>e.status===`success`&&e.action===`submitCycle`&&e.cycleId===r),a=e.minerEnabled&&n.includes(`skipped`)&&!i?{action:`skipCycle`,cycleId:r,txHash:null,status:`success`,message:n,at:e.skipTimestamp??new Date().toISOString()}:null;return[...a?[a]:[],...t]}function $e(e){switch(String(e??``).trim()){case`initMinerCapital`:case`depositMinerCapital`:case`withdrawMinerCapital`:case`setActiveCommit`:case`submitCycle`:case`claim`:case`claimCycleRewardsBatch`:case`startMining`:case`stopMining`:case`skipCycle`:return!0;default:return!1}}function et(e){return(e??[]).filter(e=>$e(e.action))}function tt(e,t){return t===`all`?e:e.filter(e=>e.category===t)}var nt=12;function W(e,t){let n=[typeof e?.currentCycleId==`number`?e.currentCycleId:null,typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,...(e?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e))??[],...[...t].filter(e=>Number.isFinite(e))].filter(e=>typeof e==`number`&&Number.isFinite(e));return n.length>0?Math.max(...n):null}function rt(e){let{status:t,cycleId:n,anchorCycleId:r,cycleResolved:i,actions:a}=e,o=new Set((t?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e)));return n===t?.currentCycleId||n===t?.latestSubmittedCycleId||n===t?.latestSettledCycleId||n===t?.exactPendingCycleId||o.has(n)||a.some(e=>e.status===`failure`)||!i||r==null?!0:n>=r-nt}function it(e){let t=[],n=e=>{let n=new Date(e.at).getTime();t.push({...e,atMs:Number.isFinite(n)?n:0})},r=e.status?.updatedAt??new Date().toISOString(),i=Math.max(0,...(e.recentActions??[]).filter(e=>e.status===`success`).map(e=>{let t=new Date(e.at).getTime();return Number.isFinite(t)?t:0})),a=Math.max(0,...[e.status?.workers?.roundWatcher?.lastFailureAt,e.status?.workers?.epoch?.lastFailureAt,e.status?.workers?.claim?.lastFailureAt,e.status?.workers?.recovery?.lastFailureAt].map(e=>{let t=new Date(String(e??``)).getTime();return Number.isFinite(t)?t:0}));if(e.error&&n({key:`error:${e.error}`,at:r,title:`Error`,summary:U(e.error),category:`runtime`,tone:`danger`}),e.message){let t=Ge(e.message);n({key:`message:${e.message}`,at:r,title:`Update`,summary:t,category:Be(t),tone:`success`})}e.status?.running===!1&&e.status?.bootstrapState===`waiting`&&e.status.bootstrapReason&&n({key:`bootstrap:${e.status.bootstrapReason}`,at:e.status.bootstrapCheckedAt??r,title:`Startup`,summary:e.status.bootstrapReason,category:`runtime`,tone:`info`});for(let t of e.notifications??[]){let e=Ge(t.message);n({key:`notification:${t.id}`,at:t.createdAt,title:t.level===`error`?`Error`:t.level===`warning`?`Warning`:t.level===`success`?`Update`:`Notice`,summary:e,category:Be(e),tone:t.level===`error`?`danger`:t.level===`success`?`success`:(t.level,`info`)})}if(e.status?.lastFailure&&!e.error&&!(i>0&&i>=a)){let t=U(e.status.lastFailure);t===`Cycle already closed on-chain.`||t===`Shared step already completed elsewhere.`||n({key:`failure:${e.status.lastFailure}`,at:e.status.workers?.roundWatcher?.lastFailureAt??e.status.workers?.epoch?.lastFailureAt??e.status.workers?.claim?.lastFailureAt??e.status.workers?.recovery?.lastFailureAt??r,title:`Runtime`,summary:t,category:`runtime`,tone:`danger`})}let o=ye(e.status),s=o?`Missed local cycles ${o.startCycleId===o.endCycleId?o.startCycleId:`${o.startCycleId}-${o.endCycleId}`}.`:null;s&&n({key:`gap:${o?.startCycleId}:${o?.endCycleId}`,at:r,title:`Gap`,summary:s,category:`runtime`,tone:`danger`});let c=xe(e.status);c&&n({key:`worker-stale:${c}`,at:r,title:`Runtime`,summary:c,category:`runtime`,tone:`danger`});let l=Se(e.status);l&&n({key:`chain-time:${l}`,at:r,title:`Runtime`,summary:l,category:`runtime`,tone:`danger`}),e.recoveryBlocked&&n({key:`recovery:${e.recoveryTitle}:${e.recoveryDetail}`,at:r,title:e.recoveryTitle,summary:e.recoveryDetail,category:`runtime`,tone:`danger`}),e.showBlockingNote&&n({key:`claimability:${e.claimabilityTitle}:${e.claimabilityDetail}`,at:r,title:e.claimabilityTitle,summary:e.claimabilityDetail,category:`runtime`,tone:`danger`}),e.signerRentShortfall&&e.signerRentShortfallMessage&&n({key:`wallet-sol:${e.signerRentShortfallMessage}`,at:r,title:`Need SOL`,summary:e.signerRentShortfallMessage,category:`wallet`,tone:`info`});let u=new Map;for(let t of e.settledHistory??[])u.set(t.cycleId,t);let d=new Map;for(let t of e.recentActions??[]){if(typeof t.cycleId==`number`){let e=d.get(t.cycleId)??[];e.push(t),d.set(t.cycleId,e);continue}let r=qe(t.action);n({key:`action:${t.action}:${t.status}:${t.at}:${t.txHash??``}`,at:t.at,title:r,summary:r,category:ze(t.action),detail:t.message?Ke(t.action,t.message):void 0,href:S(e.status?.network??e.profile?.network,t.txHash),tone:t.status===`failure`?`danger`:`info`})}let f=new Set([...u.keys(),...d.keys()]),p=W(e.status,f),m=e.recentOnly!==!1;for(let t of f){let i=u.get(t)??null,a=(d.get(t)??[]).slice().toSorted((e,t)=>new Date(e.at).getTime()-new Date(t.at).getTime()),o=i!=null||a.some(e=>e.status===`success`&&(e.action===`claimCycleRewards`||e.action===`claimCycleRewardsBatch`||e.action===`closeResolvedCycleAccounts`)),s=a.filter(e=>!(o&&e.status===`failure`&&(H(e.action,e.message)||k(e.action)&&!j(e.action,e.message)))),c=s[s.length-1]??null;if(m&&!rt({status:e.status,cycleId:t,anchorCycleId:p,cycleResolved:o,actions:s}))continue;let l=s.map(n=>{let r=qe(n.action),i=n.message?Ke(n.action,n.message):void 0,a=n.status===`success`&&A(n.action)?i?`Keeper step won. ${i}`:`Keeper step won.`:n.status===`failure`&&j(n.action,n.message)?`Keeper step already completed elsewhere.`:i;return{key:`step:${t}:${n.action}:${n.at}:${n.txHash??``}`,label:r,detail:a,href:S(e.status?.network??e.profile?.network,n.txHash)}}),f=s.some(e=>e.status===`failure`&&!j(e.action,e.message));n({key:`cycle:${t}:${i?.recordedAt??c?.at??r}`,at:c?.at??i?.recordedAt??r,title:`Cycle ${t}`,summary:i?oe(i):c?.action===`submitCycle`&&c.status===`success`?`Commit submitted. Waiting for settlement.`:qe(c?.action),facts:i?M(i):void 0,proofFacts:N({outcome:i,actions:s}),category:`cycle`,detail:void 0,steps:l.length?l:void 0,tone:f?`danger`:i?`success`:`info`})}return t.toSorted((e,t)=>t.atMs-e.atMs)}function at(e){let t=String(e??``).trim();return!t||t.length<10?t||`—`:`${t.slice(0,4)}…${t.slice(-4)}`}function ot(e){let t=String(e??``).trim();!t||typeof navigator>`u`||!navigator.clipboard||navigator.clipboard.writeText(t).catch(()=>{})}function st(e,t,n){if(typeof document>`u`)return;let r=document.getElementById(e);if(!r)return;let i=r.dataset.revealed===`true`;r.textContent=i?t:n,r.dataset.revealed=i?`false`:`true`}function ct(e){if(typeof document>`u`)return;let t=document.getElementById(e);if(t){if(typeof t.showModal==`function`){t.showModal();return}t.setAttribute(`open`,`true`)}}function lt(e){if(typeof document>`u`)return;let t=document.getElementById(e);if(t){if(typeof t.close==`function`){t.close();return}t.removeAttribute(`open`)}}function G(t,n){return e`<div class="mining-share-proof__row">
72
+ </div>`}function Ge(e){return Ke(null,e)}function Ke(e,t){let n=String(t??``).trim();return n?j(e,n)?`Keeper step already completed elsewhere.`:n.includes(`rate limited`)?`RPC rate limited. Retry in a few seconds.`:n.includes(`Attempt to debit an account but found no record of a prior credit`)||n.includes(`AccountNotFound`)?`need SOL + miner setup`:(Re(e)||n.includes(`sat_miner_capital`))&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`))?`SAT miner capital account is invalid on this machine.`:V(e)&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`))?`Cycle already claimed and closed.`:n.replace(/\s+/g,` `):``}function U(e,t){let n=String(t??``).trim();return V(e)&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`)||n.includes(`already claimed and closed`))}function W(e){let t=String(e??``).trim();return t?t.includes(`invalid progress cycle=`)||t.includes(`settle invalid progress`)||t.includes(`score invalid progress`)||t.includes(`distribute invalid progress`)?`Shared step already completed elsewhere.`:t.includes(`rate limited`)?`RPC rate limited. Retry in a few seconds.`:t.includes(`Attempt to debit an account but found no record of a prior credit`)||t.includes(`AccountNotFound`)?`Wallet needs SOL and miner setup.`:t.includes(`sat_miner_capital`)&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`SAT miner capital account is invalid on this machine.`:t.includes(`sat_settle_cycle.rs:154`)&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`Cycle already closed on-chain.`:(t.includes(`claimCycleRewards`)||t.includes(`claimCycleRewardsBatch`)||t.includes(`closeResolvedCycleAccounts`)||t.includes(`closeResolvedMinerCycleState`)||t.includes(`already claimed and closed`))&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`Cycle was already claimed and closed.`:t.replace(/\s+/g,` `):``}function qe(e){switch(String(e??``).trim()){case`openCycle`:return`Cycle opened`;case`initMinerCapital`:return`Capital initialized`;case`depositMinerCapital`:return`Fund submitted`;case`withdrawMinerCapital`:return`Withdraw submitted`;case`setActiveCommit`:return`Commit applied`;case`bootstrapRegistryReserve`:return`Cycle buffer topped up`;case`skipCycle`:return`Cycle skipped`;case`submitCycle`:return`Commit submitted`;case`submitParticipation`:return`Participation submitted`;case`settleCyclePage`:return`Settlement page processed`;case`finalizeCycleSettlement`:return`Settlement finalized`;case`scoreCyclePage`:return`Score page processed`;case`distributeCyclePage`:return`Distribution page processed`;case`miningCrank`:return`Round settled`;case`finalizeEpoch`:return`Epoch finalized`;case`claim`:case`claimCycleRewards`:case`claimCycleRewardsBatch`:return`Rewards claimed`;case`closeResolvedCycleAccounts`:case`closeResolvedMinerCycleState`:case`closeResolvedCycleArtifacts`:return`Cycle cleanup completed`;case`startMining`:return`Mining started`;case`stopMining`:return`Mining stopped`;default:return String(e??`—`).trim()||`—`}}function Je(e){let t=!!e.status?.enabledWanted,n=e.readiness?.checks.find(e=>e.key===`walletSelected`)?.ok,r=e.readiness?.checks.find(e=>e.key===`rpcReady`)?.ok,i=e.readiness?.checks.find(e=>e.key===`fundingReady`)?.ok,a=e.readiness?.checks.find(e=>e.key===`minerInitialized`)?.ok,o=String(e.readiness?.checks.find(e=>e.key===`minerInitialized`)?.detail??``).trim().toLowerCase(),s=e.readiness?.checks.find(e=>e.key===`cycleEntryReady`)?.ok,c=String(e.status?.workers?.roundWatcher?.waitingReason??``).trim(),l=BigInt(String(e.status?.currentCapitalLockedLamports??`0`)),u=Number(e.status?.currentCapitalPendingCycleCount??0),d=l>0n||u>0,f=e.status?.currentCycleId,p=e.status?.recentActions?.find(e=>e.status===`success`&&e.action===`submitCycle`&&typeof f==`number`&&e.cycleId===f);if(e.pendingAction===`starting`||e.actionBusy&&!e.status?.running)return{label:`Starting`,tone:`warn`,detail:`Starting miner workers.`};if(e.pendingAction===`stopping`)return{label:`Stopping`,tone:`warn`,detail:`Stopping miner workers.`};if(!t)return d?{label:`Clearing`,tone:`warn`,detail:`New cycle submits are stopped. Claim and recovery keep clearing locked capital.`}:n?r?i?a?s?e.readiness?.ok?{label:`Ready`,tone:`success`,detail:`Start mining.`}:{label:`Stopped`,tone:`neutral`,detail:e.readiness?.checks.find(e=>!e.ok)?.label??`Wallet is not mining right now.`}:BigInt(String(e.status?.currentCapitalFreeLamports??`0`))>0n&&l===0n&&u===0?{label:`Stopped`,tone:`warn`,detail:`Withdraw remaining dust or deposit to Mining.`}:{label:`Stopped`,tone:`neutral`,detail:`Deposit to Mining.`}:{label:`Stopped`,tone:`neutral`,detail:o.includes(`owner mismatch`)||o.includes(`invalid owner`)?`Repair mining capital.`:`Fund Mining.`}:{label:`Stopped`,tone:`neutral`,detail:`Deposit to Wallet.`}:{label:`Stopped`,tone:`neutral`,detail:`Set RPC.`}:{label:`Stopped`,tone:`neutral`,detail:`Configure`};let m=e.status?.currentCapitalLockedLamports!=null||e.status?.currentCapitalPendingCycleCount!=null;if(e.status?.drainOnly&&(!m||BigInt(String(e.status?.currentCapitalLockedLamports??`0`))>0n||Number(e.status?.currentCapitalPendingCycleCount??0)>0)){let t=e.status;return{label:`Clearing`,tone:t?.blocked?`danger`:`warn`,detail:W(t?.nextActionDetail)||`Releasing locked capital. New cycle submits are stopped.`}}if(e.status?.drainOnly){let t=BigInt(String(e.status.currentCapitalFreeLamports??`0`));return BigInt(String(e.status.currentCapitalFundedLamports??`0`))<=0n&&t<=0n?{label:`Stopped`,tone:`neutral`,detail:`No miner capital is funded. Wallet SOL is already outside mining capital.`}:{label:`Ready`,tone:`success`,detail:`Cycle capital is free. Start mining or withdraw.`}}return e.status?.blocked?{label:`Blocked`,tone:`danger`,detail:W(e.status.blockedReason)||`Mining needs attention.`}:p?{label:`Submitted`,tone:`success`,detail:`Submitted for cycle ${p.cycleId}. Waiting for settlement.`}:c.includes(`skipped`)?{label:`Skipped`,tone:`warn`,detail:c}:e.status?.nextAction===`mining-crank`||e.status?.workers?.epoch?.running?{label:`Settling`,tone:`success`,detail:e.status.nextActionDetail?.trim()||`Settling the prior cycle.`}:e.status?.nextAction===`claim`||e.status?.workers?.claim?.running?{label:`Claiming`,tone:`success`,detail:e.status.nextActionDetail?.trim()||`Claiming rewards.`}:{label:`Enabled`,tone:`success`,detail:e.status?.nextActionDetail?.trim()||`Miner is enabled and waiting.`}}function Ye(e){let t=e.minerEnabled&&!e.drainOnly,n=e.actionBusy||t||e.startPrerequisitesBlocked;return{startBlocked:n,stopBlocked:e.actionBusy||!t,startLabel:e.pendingAction===`starting`?`Starting...`:e.drainOnly?`Resume`:`Start`,startTitle:e.drainOnly&&!n?`Resume new cycle submits. Claim and recovery keep clearing old cycles.`:e.startBlockedReason,stopLabel:`Stop`,stopTitle:e.drainOnly?`Already clearing. Use Resume to submit new cycles again.`:`Stop future submits. Already-submitted cycles still settle, distribute, and claim.`}}function Xe(e){return e?e.state===`synced`?{label:`Mainnet synced`,tone:`success`,detail:e.message}:e.state===`available`?{label:`Manifest ready`,tone:`warn`,detail:e.message}:e.state===`not_live`?{label:`Not live`,tone:`neutral`,detail:e.message}:{label:`Sync failed`,tone:`danger`,detail:e.error||e.message||`SAT mainnet manifest verification failed.`}:{label:`Manifest`,tone:`neutral`,detail:`Check official SAT mainnet manifest.`}}function Ze(e){let t=[{key:`wallet`,label:`Wallet`,detail:`Attach a dedicated mining wallet.`,ready:e.walletReady},{key:`fee`,label:`Fee SOL`,detail:`Keep wallet SOL available for fees, rent, submit, settlement, claim, and cleanup.`,ready:e.feeReady},{key:`capital`,label:`Capital`,detail:`Deposit SOL into miner capital. This is separate from wallet fee SOL.`,ready:e.capitalReady},{key:`commit`,label:`Active commit`,detail:`Use Update to put the active commit on-chain before starting.`,ready:e.activeCommitReady},{key:`start`,label:e.clearing?`Clearing`:`Start`,detail:e.clearing?`New submits are stopped while claim and recovery clear older cycle capital.`:`Start mining after wallet, fee SOL, capital, and active commit are ready.`,ready:e.started}],n=!1;return t.map(({ready:t,...r})=>t?{...r,state:`done`}:r.key===`start`&&e.clearing?{...r,state:`warn`}:n?{...r,state:`pending`}:(n=!0,{...r,state:`current`}))}function Qe(e){let t=e.recentActions??[],n=String(e.waitingReason??``).trim(),r=e.currentCycleId??null,i=typeof r==`number`&&t.some(e=>e.status===`success`&&e.action===`submitCycle`&&e.cycleId===r),a=e.minerEnabled&&n.includes(`skipped`)&&!i?{action:`skipCycle`,cycleId:r,txHash:null,status:`success`,message:n,at:e.skipTimestamp??new Date().toISOString()}:null;return[...a?[a]:[],...t]}function $e(e){switch(String(e??``).trim()){case`initMinerCapital`:case`depositMinerCapital`:case`withdrawMinerCapital`:case`setActiveCommit`:case`submitCycle`:case`claim`:case`claimCycleRewardsBatch`:case`startMining`:case`stopMining`:case`skipCycle`:return!0;default:return!1}}function et(e){return(e??[]).filter(e=>$e(e.action))}function tt(e,t){return t===`all`?e:e.filter(e=>e.category===t)}var nt=12;function G(e,t){let n=[typeof e?.currentCycleId==`number`?e.currentCycleId:null,typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,...(e?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e))??[],...[...t].filter(e=>Number.isFinite(e))].filter(e=>typeof e==`number`&&Number.isFinite(e));return n.length>0?Math.max(...n):null}function rt(e){let{status:t,cycleId:n,anchorCycleId:r,cycleResolved:i,actions:a}=e,o=new Set((t?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e)));return n===t?.currentCycleId||n===t?.latestSubmittedCycleId||n===t?.latestSettledCycleId||n===t?.exactPendingCycleId||o.has(n)||a.some(e=>e.status===`failure`)||!i||r==null?!0:n>=r-nt}function it(e){let t=[],n=e=>{let n=new Date(e.at).getTime();t.push({...e,atMs:Number.isFinite(n)?n:0})},r=e.status?.updatedAt??new Date().toISOString(),i=Math.max(0,...(e.recentActions??[]).filter(e=>e.status===`success`).map(e=>{let t=new Date(e.at).getTime();return Number.isFinite(t)?t:0})),a=Math.max(0,...[e.status?.workers?.roundWatcher?.lastFailureAt,e.status?.workers?.epoch?.lastFailureAt,e.status?.workers?.claim?.lastFailureAt,e.status?.workers?.recovery?.lastFailureAt].map(e=>{let t=new Date(String(e??``)).getTime();return Number.isFinite(t)?t:0}));if(e.error&&n({key:`error:${e.error}`,at:r,title:`Error`,summary:W(e.error),category:`runtime`,tone:`danger`}),e.message){let t=Ge(e.message);n({key:`message:${e.message}`,at:r,title:`Update`,summary:t,category:Be(t),tone:`success`})}e.status?.running===!1&&e.status?.bootstrapState===`waiting`&&e.status.bootstrapReason&&n({key:`bootstrap:${e.status.bootstrapReason}`,at:e.status.bootstrapCheckedAt??r,title:`Startup`,summary:e.status.bootstrapReason,category:`runtime`,tone:`info`});for(let t of e.notifications??[]){let e=Ge(t.message);n({key:`notification:${t.id}`,at:t.createdAt,title:t.level===`error`?`Error`:t.level===`warning`?`Warning`:t.level===`success`?`Update`:`Notice`,summary:e,category:Be(e),tone:t.level===`error`?`danger`:t.level===`success`?`success`:(t.level,`info`)})}if(e.status?.lastFailure&&!e.error&&!(i>0&&i>=a)){let t=W(e.status.lastFailure);t===`Cycle already closed on-chain.`||t===`Shared step already completed elsewhere.`||n({key:`failure:${e.status.lastFailure}`,at:e.status.workers?.roundWatcher?.lastFailureAt??e.status.workers?.epoch?.lastFailureAt??e.status.workers?.claim?.lastFailureAt??e.status.workers?.recovery?.lastFailureAt??r,title:`Runtime`,summary:t,category:`runtime`,tone:`danger`})}let o=ye(e.status),s=o?`Missed local cycles ${o.startCycleId===o.endCycleId?o.startCycleId:`${o.startCycleId}-${o.endCycleId}`}.`:null;s&&n({key:`gap:${o?.startCycleId}:${o?.endCycleId}`,at:r,title:`Gap`,summary:s,category:`runtime`,tone:`danger`});let c=xe(e.status);c&&n({key:`worker-stale:${c}`,at:r,title:`Runtime`,summary:c,category:`runtime`,tone:`danger`});let l=Se(e.status);l&&n({key:`chain-time:${l}`,at:r,title:`Runtime`,summary:l,category:`runtime`,tone:`danger`}),e.recoveryBlocked&&n({key:`recovery:${e.recoveryTitle}:${e.recoveryDetail}`,at:r,title:e.recoveryTitle,summary:e.recoveryDetail,category:`runtime`,tone:`danger`}),e.showBlockingNote&&n({key:`claimability:${e.claimabilityTitle}:${e.claimabilityDetail}`,at:r,title:e.claimabilityTitle,summary:e.claimabilityDetail,category:`runtime`,tone:`danger`}),e.signerRentShortfall&&e.signerRentShortfallMessage&&n({key:`wallet-sol:${e.signerRentShortfallMessage}`,at:r,title:`Need SOL`,summary:e.signerRentShortfallMessage,category:`wallet`,tone:`info`});let u=new Map;for(let t of e.settledHistory??[])u.set(t.cycleId,t);let d=new Map;for(let t of e.recentActions??[]){if(typeof t.cycleId==`number`){let e=d.get(t.cycleId)??[];e.push(t),d.set(t.cycleId,e);continue}let r=qe(t.action);n({key:`action:${t.action}:${t.status}:${t.at}:${t.txHash??``}`,at:t.at,title:r,summary:r,category:ze(t.action),detail:t.message?Ke(t.action,t.message):void 0,href:S(e.status?.network??e.profile?.network,t.txHash),tone:t.status===`failure`?`danger`:`info`})}let f=new Set([...u.keys(),...d.keys()]),p=G(e.status,f),m=e.recentOnly!==!1;for(let t of f){let i=u.get(t)??null,a=(d.get(t)??[]).slice().toSorted((e,t)=>new Date(e.at).getTime()-new Date(t.at).getTime()),o=i!=null||a.some(e=>e.status===`success`&&(e.action===`claimCycleRewards`||e.action===`claimCycleRewardsBatch`||e.action===`closeResolvedCycleAccounts`)),s=a.filter(e=>!(o&&e.status===`failure`&&(U(e.action,e.message)||k(e.action)&&!j(e.action,e.message)))),c=s[s.length-1]??null;if(m&&!rt({status:e.status,cycleId:t,anchorCycleId:p,cycleResolved:o,actions:s}))continue;let l=s.map(n=>{let r=qe(n.action),i=n.message?Ke(n.action,n.message):void 0,a=n.status===`success`&&A(n.action)?i?`Keeper step won. ${i}`:`Keeper step won.`:n.status===`failure`&&j(n.action,n.message)?`Keeper step already completed elsewhere.`:i;return{key:`step:${t}:${n.action}:${n.at}:${n.txHash??``}`,label:r,detail:a,href:S(e.status?.network??e.profile?.network,n.txHash)}}),f=s.some(e=>e.status===`failure`&&!j(e.action,e.message));n({key:`cycle:${t}:${i?.recordedAt??c?.at??r}`,at:c?.at??i?.recordedAt??r,title:`Cycle ${t}`,summary:i?oe(i):c?.action===`submitCycle`&&c.status===`success`?`Commit submitted. Waiting for settlement.`:qe(c?.action),facts:i?M(i):void 0,proofFacts:N({outcome:i,actions:s}),category:`cycle`,detail:void 0,steps:l.length?l:void 0,tone:f?`danger`:i?`success`:`info`})}return t.toSorted((e,t)=>t.atMs-e.atMs)}function at(e){let t=String(e??``).trim();return!t||t.length<10?t||`—`:`${t.slice(0,4)}…${t.slice(-4)}`}function ot(e){let t=String(e??``).trim();!t||typeof navigator>`u`||!navigator.clipboard||navigator.clipboard.writeText(t).catch(()=>{})}function st(e,t,n){if(typeof document>`u`)return;let r=document.getElementById(e);if(!r)return;let i=r.dataset.revealed===`true`;r.textContent=i?t:n,r.dataset.revealed=i?`false`:`true`}function ct(e){if(typeof document>`u`)return;let t=document.getElementById(e);if(t){if(typeof t.showModal==`function`){t.showModal();return}t.setAttribute(`open`,`true`)}}function lt(e){if(typeof document>`u`)return;let t=document.getElementById(e);if(t){if(typeof t.close==`function`){t.close();return}t.removeAttribute(`open`)}}function K(t,n){return e`<div class="mining-share-proof__row">
73
73
  <span>${t}</span>
74
74
  <strong>${n}</strong>
75
75
  </div>`}function ut(n,r){let i=n.length?n:[];return i.length?e`
@@ -92,7 +92,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
92
92
  <span>${r.cycles} cycles</span>
93
93
  </div>
94
94
  </div>
95
- `:t}function dt(e,t){if(!Array.isArray(e)||!e.length)return null;let n=Date.now(),r=0,i=0n,a=0n,o=0n,s=0n,c=new Map;for(let l of e){let e=new Date(l.recordedAt??``).getTime();if(!Number.isFinite(e)||n-e>t)continue;r+=1,i+=O(l.totalSatEarnedRaw),a+=O(l.committedLamports),o+=O(l.totalRebateLamports),s+=O(l.netLiveCostLamports);let u=P(l)??`Unknown`;c.set(u,(c.get(u)??0)+1)}if(!r)return null;let l=Array.from(c.entries()).toSorted((e,t)=>t[1]-e[1])[0]??null,u=a/BigInt(Math.max(1,r));return{cycles:r,satLabel:E(i.toString(),`SAT`),rebateLabel:E(o.toString(),`SOL`),netLabel:D(s.toString(),`SOL`),avgCapitalLabel:E(u.toString(),`SOL`),mostUsedStrategyLabel:l?`${l[0]} · ${l[1]} cycles`:`—`}}function ft(r){let s=r.profile,c=r.status,l=f({wallets:r.wallets,attachedWalletId:r.attachedWalletId,profile:s,readiness:r.readiness,status:c}),d=l.displayWallet,m=d?.address??String(c?.validatorAuthority??r.readiness?.selectedAddress??``).trim()??``,h=`mining-wallet-address`,g=c?.recentActions??[],_=c?.settledHistory??[],v=r.history?.outcomes??_,y=Je({status:c,readiness:r.readiness,actionBusy:r.actionBusy,pendingAction:r.pendingAction}),b=Xe(r.mainnetSync),S=fe(c),C=ie({status:c,readiness:r.readiness,selectedWallet:d}),te=pe({statusValue:c?.currentSatBalanceRaw,readinessValue:r.readiness?.balances.satBalanceRaw,degraded:S}),T=me({statusValue:c?.currentCapitalAddress,readinessValue:r.readiness?.balances.minerCapitalAddress,degraded:S}),D=x(c?.network??s?.network,T),O=BigInt(pe({statusValue:c?.currentCapitalFundedLamports,readinessValue:r.readiness?.balances.minerCapitalFundedLamports,degraded:S})),k=BigInt(pe({statusValue:c?.currentCapitalLockedLamports,readinessValue:r.readiness?.balances.minerCapitalLockedLamports,degraded:S})),A=BigInt(pe({statusValue:c?.currentCapitalFreeLamports,readinessValue:r.readiness?.balances.minerCapitalFreeLamports,degraded:S})),j=BigInt(pe({statusValue:c?.activeCommitLamports,readinessValue:r.readiness?.balances.minerCapitalActiveCommitLamports,degraded:S,fallback:s?.funding.commitLamports??`250000000`})),ae=BigInt(c?.signerSpendableLamports??`0`),oe=BigInt(c?.nextSubmitCycleSignerLamports??`0`),M=a({walletLamports:C,capitalFundedLamports:O,capitalFreeLamports:A,capitalLockedLamports:k,pendingCycleCount:c?.currentCapitalPendingCycleCount,signerReserveLamports:c?.signerReserveLamports,signerFeeBufferLamports:c?.signerFeeBufferLamports}),N=M.minimumCommitLamports,P=BigInt(s?.funding.commitLamports??`250000000`),F=Me(N,O>0n?O:M.safeMaxCommitLamports,P),I=je(P,N,F),le=s?.strategyPreset??c?.strategyPreset??o(s?.riskMode??c?.riskMode??`balanced`),L=s?.strategyExecution??c?.strategyExecution??i(s?.strategyMode??c?.strategyMode),ue=s?.cycleCadence??c?.cycleCadence??1,z=c?.runway?.estimatedDays??null,he=z==null?`Runway unavailable`:z<1?`~${Math.max(0,z*24).toFixed(1)} hours`:`~${z<10?z.toFixed(1):Math.floor(z)} days`,ge=L===`auto`,ve=ge?`Target max`:`Target`,ye=O>0n,be=ge?`Target max`:`Target`,xe=O>=N,Se=O>0n&&O<N&&k===0n&&Number(c?.currentCapitalPendingCycleCount??0)===0,we=P>=N&&M.safeMaxCommitLamports>=N,Ee=P>=N&&P>M.safeMaxCommitLamports,De=E(M.minimumCapitalForMinimumCommitLamports.toString(),`SOL`),Ae=M.safeMaxCommitLamports>=N?`${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL`:`<0.25 SOL`,Ie=P>=N&&M.safeMaxCommitLamports>=N&&P>M.safeMaxCommitLamports,Le=Number(c?.currentCapitalPendingCycleCount??0),B=Number(c?.claimBacklog?.total??0),Re=Number(c?.claimBacklog?.ready??0),ze=Number(c?.claimBacklog?.failed??0),Be=Number(c?.claimBatchCycles??5),He=B>0?`${B} pending claim ${B===1?`cycle`:`cycles`} · ${Re} ready · ${ze} failed retry · batch ${Be}`:`No durable claim backlog. Auto-claim batch cap is ${Be}.`,V=`Your desired commit when capital is free.`,Ue=M.safeMaxCommitLamports>=N?`Maximum commit usable now.`:`Need ${De} SOL free.`,Ge=ye?`Commit currently stored on-chain.`:`Saved commit preference. No miner capital is funded, so this is not stuck or withdrawable SOL.`,Ke=ye?`${Ae} usable now · ${E(k.toString(),`SOL`)} SOL locked${Ie?` · target kept for later`:``}`:`No miner capital funded · ${E(j.toString(),`SOL`)} SOL stored preference`,H=p({defaultWalletId:r.defaultWalletId,attachedWalletId:r.attachedWalletId,profile:s,readiness:r.readiness,status:c}),U=r.readiness?.checks.find(e=>e.key===`walletSelected`)?.ok,qe=r.readiness?.checks.find(e=>e.key===`rpcReady`)?.ok,$e=r.readiness?.checks.find(e=>e.key===`fundingReady`)?.ok,nt=Se?`Withdraw ${E(A.toString(),`SOL`)} SOL or deposit enough to reach the 0.25 SOL miner-capital eligibility minimum.`:`Deposit to Mining.`,W=r.actionBusy,rt=oe>0n&&ae<oe,ft=W||A<=0n,pt=A>0n?`Withdraw free miner capital back to the mining wallet.`:`No free miner capital is available to withdraw. Wallet SOL is already in the wallet.`,mt=_e(c),ht=!!c?.drainOnly&&k===0n&&Le===0,K=!!c?.enabledWanted&&!ht,gt=!!c?.drainOnly&&!ht,_t=String(c?.workers?.roundWatcher?.waitingReason??``).trim(),vt=Qe({minerEnabled:K,currentCycleId:c?.currentCycleId,waitingReason:_t,skipTimestamp:c?.workers?.roundWatcher?.lastRunAt??c?.updatedAt??new Date().toISOString(),recentActions:g}).slice(0,5),yt=[{value:`spread`,label:`Spread`,detail:`Smoother coverage and lower concentration risk.`},{value:`balanced`,label:`Balanced`,detail:`Moderate concentration with practical upside.`},{value:`conviction`,label:`Conviction`,detail:`Tighter concentration for higher variance.`},{value:`swarm`,label:`Swarm`,detail:`Flexible clustered coverage for active mining.`},{value:`top_k`,label:`Top-K`,detail:`Sparse high-conviction allocation into the strongest ranked buckets.`},{value:`ranked`,label:`Ranked`,detail:`Rank buckets, then convert rank into weighted exposure with a tail.`},{value:`adaptive`,label:`Adaptive`,detail:`Blend stable coverage with cycle-ranked opportunity and fallback safety.`},{value:`crowd_aware`,label:`Crowd-aware`,detail:`Reduce obvious crowding exposure with wider tail coverage.`},{value:`safe_fallback`,label:`Safe fallback`,detail:`Known-good balanced allocation for recovery or low-confidence operation.`}],bt=[{value:`deterministic`,label:`Deterministic`,detail:`Use the fixed allocator every cycle. Safer default until auto has enough live evidence.`},{value:`auto`,label:`Auto`,detail:`Let the planner size and choose the cycle path, with deterministic fallback when needed.`}],xt=s?.network===`mainnet-beta`&&r.mainnetSync?.state!==`synced`,St=H!=null||xt||!r.readiness?.ok||!s?.walletId||!U||!qe||!$e||!xe||!we,Ct=H?H.title:xt?b.detail:!s?.walletId||!U?`Create or select Mining wallet.`:qe?$e?r.readiness?.ok?xe?we?K?`Mining is already enabled`:`Start mining.`:Ee?M.safeMaxCommitLamports>=N?`Target can be saved. Safe commit is ${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL.`:`Need ${De} SOL free for the 0.25 SOL eligibility commit plus collateral.`:`Lower target.`:nt:y.detail:`Deposit to Wallet.`:`Set RPC.`,wt=Ze({walletReady:!!(s?.walletId&&U&&!H),feeReady:!!($e&&!rt),capitalReady:xe,activeCommitReady:j>=N&&j<=M.safeMaxCommitLamports,started:K,clearing:gt||y.label===`Clearing`}),q=Ye({actionBusy:r.actionBusy,pendingAction:r.pendingAction,minerEnabled:K,drainOnly:gt,startPrerequisitesBlocked:St,startBlockedReason:Ct}),Tt=q.startBlocked,Et=!K&&y.label===`Ready`&&Tt?{label:`Stopped`,tone:H?`danger`:`warn`,detail:Ct}:!K&&Se?{label:`Stopped`,tone:`warn`,detail:nt}:y,Dt=!K&&y.label===`Ready`&&Tt&&Ct!==`Start mining.`&&!H,Ot=ee(r.recovery),J=w({profile:s,status:c,readiness:r.readiness}),kt=J.title===`Blocked`||J.title===`Need SOL`||J.title===`Need capital`||J.title===`Capital locked`||J.title===`Need free capital`,At=Date.now(),jt=Te(r.plannerWindow),Mt=Te(r.activityWindow),Nt=r.history?v:_.filter(e=>{let t=new Date(e.recordedAt??``).getTime();return Number.isFinite(t)&&(jt==null||At-t<=jt)}),Y=Oe(Nt),X=ke(Nt),Pt=!!c?.recentActions?.some(e=>e.status===`success`&&e.action===`submitCycle`&&typeof c.currentCycleId==`number`&&e.cycleId===c.currentCycleId),Ft=l.title!==`Singleton mining wallet`,Z=Y.length>0?Y[Y.length-1]:null,It=et(vt),Lt=r.history?.actions??It,Rt=r.history?.activityOutcomes??v,zt=tt(it({error:r.error,message:r.message,notifications:r.notifications,status:c,profile:s,recentActions:Lt,settledHistory:Rt,recoveryBlocked:!!(c?.blocked||r.recovery?.blocked),recoveryTitle:Ot.title,recoveryDetail:r.recovery?.detail??Ot.detail,showBlockingNote:kt,claimabilityTitle:J.title,claimabilityDetail:J.detail,signerRentShortfall:rt,signerRentShortfallMessage:rt?`Leave at least ${E(oe.toString(),`SOL`)} SOL in Wallet for cycle creation and fees.`:null,recentOnly:!1}),`all`).filter(e=>{if(Mt==null)return!0;let t=new Date(e.at??``).getTime();return Number.isFinite(t)&&At-t<=Mt}),Bt=Math.max(1,Math.ceil(zt.length/30)),Vt=Math.min(r.recentActionsPage,Bt),Ht=(Vt-1)*30,Ut=zt.slice(Ht,Ht+30),Wt=Y[0]?.timeLabel??null,Gt=Z?.timeLabel??null,Kt=c?.liveCycleReport??null,qt=typeof c?.currentCycleId==`number`?c.currentCycleId:typeof Kt?.cycleId==`number`?Kt.cycleId:null,Jt=Kt?.committedLamports??`0`,Yt=R(Jt),Xt=de(Kt?.validMinerCount),Zt=Kt?.totalCommittedLamports??(Yt?Jt:null),Qt=Z?.cycleId??qt,$t=Z?.commitLabel??(Yt?E(Jt,`SOL`):`—`),en=[Z?.strategyLabel??se(le),Z?.executionLabel??ce(L)].filter(Boolean).join(` · `),tn=1440*60*1e3,nn=v.filter(e=>{let t=new Date(e.recordedAt??``).getTime();return Number.isFinite(t)&&At-t<=tn}),Q=dt(nn,tn),rn=Oe(nn,{maxPoints:24}),$=Ce({plannerWindow:r.plannerWindow,visibleCycleCount:Nt.length,matchingCycleCount:r.history?.matchingOutcomeCount??Nt.length,sampled:r.history?.sampled??!1,rangeStart:Wt,rangeEnd:Gt,latestPoint:Z,currentCycleSubmitted:Pt,currentCycleId:c?.currentCycleId??null}),an=t=>e`<div class="mining-metric__rows">
95
+ `:t}function dt(e,t){if(!Array.isArray(e)||!e.length)return null;let n=Date.now(),r=0,i=0n,a=0n,o=0n,s=0n,c=new Map;for(let l of e){let e=new Date(l.recordedAt??``).getTime();if(!Number.isFinite(e)||n-e>t)continue;r+=1,i+=O(l.totalSatEarnedRaw),a+=O(l.committedLamports),o+=O(l.totalRebateLamports),s+=O(l.netLiveCostLamports);let u=P(l)??`Unknown`;c.set(u,(c.get(u)??0)+1)}if(!r)return null;let l=Array.from(c.entries()).toSorted((e,t)=>t[1]-e[1])[0]??null,u=a/BigInt(Math.max(1,r));return{cycles:r,satLabel:E(i.toString(),`SAT`),rebateLabel:E(o.toString(),`SOL`),netLabel:D(s.toString(),`SOL`),avgCapitalLabel:E(u.toString(),`SOL`),mostUsedStrategyLabel:l?`${l[0]} · ${l[1]} cycles`:`—`}}function ft(r){let s=r.profile,c=r.status,l=f({wallets:r.wallets,attachedWalletId:r.attachedWalletId,profile:s,readiness:r.readiness,status:c}),d=l.displayWallet,m=d?.address??String(c?.validatorAuthority??r.readiness?.selectedAddress??``).trim()??``,h=`mining-wallet-address`,g=c?.recentActions??[],_=c?.settledHistory??[],v=r.history?.outcomes??_,y=Je({status:c,readiness:r.readiness,actionBusy:r.actionBusy,pendingAction:r.pendingAction}),b=Xe(r.mainnetSync),S=fe(c),C=ie({status:c,readiness:r.readiness,selectedWallet:d}),te=B({statusValue:c?.currentSatBalanceRaw,readinessValue:r.readiness?.balances.satBalanceRaw,degraded:S}),T=pe({statusValue:c?.currentCapitalAddress,readinessValue:r.readiness?.balances.minerCapitalAddress,degraded:S}),D=x(c?.network??s?.network,T),O=BigInt(B({statusValue:c?.currentCapitalFundedLamports,readinessValue:r.readiness?.balances.minerCapitalFundedLamports,degraded:S})),k=BigInt(B({statusValue:c?.currentCapitalLockedLamports,readinessValue:r.readiness?.balances.minerCapitalLockedLamports,degraded:S})),A=BigInt(B({statusValue:c?.currentCapitalFreeLamports,readinessValue:r.readiness?.balances.minerCapitalFreeLamports,degraded:S})),j=BigInt(B({statusValue:c?.activeCommitLamports,readinessValue:r.readiness?.balances.minerCapitalActiveCommitLamports,degraded:S,fallback:s?.funding.commitLamports??`250000000`})),ae=BigInt(c?.signerSpendableLamports??`0`),oe=BigInt(c?.nextSubmitCycleSignerLamports??`0`),M=a({walletLamports:C,capitalFundedLamports:O,capitalFreeLamports:A,capitalLockedLamports:k,pendingCycleCount:c?.currentCapitalPendingCycleCount,signerReserveLamports:c?.signerReserveLamports,signerFeeBufferLamports:c?.signerFeeBufferLamports}),N=M.minimumCommitLamports,P=BigInt(s?.funding.commitLamports??`250000000`),F=Me(N,O>0n?O:M.safeMaxCommitLamports,P),I=je(P,N,F),le=s?.strategyPreset??c?.strategyPreset??o(s?.riskMode??c?.riskMode??`balanced`),L=s?.strategyExecution??c?.strategyExecution??i(s?.strategyMode??c?.strategyMode),ue=s?.cycleCadence??c?.cycleCadence??1,z=c?.runway?.estimatedDays??null,me=z==null?`Runway unavailable`:z<1?`~${Math.max(0,z*24).toFixed(1)} hours`:`~${z<10?z.toFixed(1):Math.floor(z)} days`,he=L===`auto`,ve=he?`Target max`:`Target`,ye=O>0n,be=he?`Target max`:`Target`,xe=O>=N,Se=O>0n&&O<N&&k===0n&&Number(c?.currentCapitalPendingCycleCount??0)===0,we=P>=N&&M.safeMaxCommitLamports>=N,Ee=P>=N&&P>M.safeMaxCommitLamports,De=E(M.minimumCapitalForMinimumCommitLamports.toString(),`SOL`),Ae=M.safeMaxCommitLamports>=N?`${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL`:`<0.25 SOL`,Ie=P>=N&&M.safeMaxCommitLamports>=N&&P>M.safeMaxCommitLamports,Le=Number(c?.currentCapitalPendingCycleCount??0),V=Number(c?.claimBacklog?.total??0),Re=Number(c?.claimBacklog?.ready??0),ze=Number(c?.claimBacklog?.failed??0),Be=Number(c?.claimBatchCycles??5),He=V>0?`${V} pending claim ${V===1?`cycle`:`cycles`} · ${Re} ready · ${ze} failed retry · batch ${Be}`:`No durable claim backlog. Auto-claim batch cap is ${Be}.`,H=`Your desired commit when capital is free.`,Ue=M.safeMaxCommitLamports>=N?`Maximum commit usable now.`:`Need ${De} SOL free.`,Ge=ye?`Commit currently stored on-chain.`:`Saved commit preference. No miner capital is funded, so this is not stuck or withdrawable SOL.`,Ke=ye?`${Ae} usable now · ${E(k.toString(),`SOL`)} SOL locked${Ie?` · target kept for later`:``}`:`No miner capital funded · ${E(j.toString(),`SOL`)} SOL stored preference`,U=p({defaultWalletId:r.defaultWalletId,attachedWalletId:r.attachedWalletId,profile:s,readiness:r.readiness,status:c}),W=r.readiness?.checks.find(e=>e.key===`walletSelected`)?.ok,qe=r.readiness?.checks.find(e=>e.key===`rpcReady`)?.ok,$e=r.readiness?.checks.find(e=>e.key===`fundingReady`)?.ok,nt=Se?`Withdraw ${E(A.toString(),`SOL`)} SOL or deposit enough to reach the 0.25 SOL miner-capital eligibility minimum.`:`Deposit to Mining.`,G=r.actionBusy,rt=oe>0n&&ae<oe,ft=G||A<=0n,pt=A>0n?`Withdraw free miner capital back to the mining wallet.`:`No free miner capital is available to withdraw. Wallet SOL is already in the wallet.`,mt=_e(c),ht=!!c?.drainOnly&&k===0n&&Le===0,q=!!c?.enabledWanted&&!ht,gt=!!c?.drainOnly&&!ht,_t=String(c?.workers?.roundWatcher?.waitingReason??``).trim(),vt=Qe({minerEnabled:q,currentCycleId:c?.currentCycleId,waitingReason:_t,skipTimestamp:c?.workers?.roundWatcher?.lastRunAt??c?.updatedAt??new Date().toISOString(),recentActions:g}).slice(0,5),yt=[{value:`spread`,label:`Spread`,detail:`Smoother coverage and lower concentration risk.`},{value:`balanced`,label:`Balanced`,detail:`Moderate concentration with practical upside.`},{value:`conviction`,label:`Conviction`,detail:`Tighter concentration for higher variance.`},{value:`swarm`,label:`Swarm`,detail:`Flexible clustered coverage for active mining.`},{value:`top_k`,label:`Top-K`,detail:`Sparse high-conviction allocation into the strongest ranked buckets.`},{value:`ranked`,label:`Ranked`,detail:`Rank buckets, then convert rank into weighted exposure with a tail.`},{value:`adaptive`,label:`Adaptive`,detail:`Blend stable coverage with cycle-ranked opportunity and fallback safety.`},{value:`crowd_aware`,label:`Crowd-aware`,detail:`Reduce obvious crowding exposure with wider tail coverage.`},{value:`safe_fallback`,label:`Safe fallback`,detail:`Known-good balanced allocation for recovery or low-confidence operation.`}],bt=[{value:`deterministic`,label:`Deterministic`,detail:`Use the fixed allocator every cycle. Safer default until auto has enough live evidence.`},{value:`auto`,label:`Auto`,detail:`Let the planner size and choose the cycle path, with deterministic fallback when needed.`}],xt=s?.network===`mainnet-beta`&&r.mainnetSync?.state!==`synced`,St=U!=null||xt||!r.readiness?.ok||!s?.walletId||!W||!qe||!$e||!xe||!we,Ct=U?U.title:xt?b.detail:!s?.walletId||!W?`Create or select Mining wallet.`:qe?$e?r.readiness?.ok?xe?we?q?`Mining is already enabled`:`Start mining.`:Ee?M.safeMaxCommitLamports>=N?`Target can be saved. Safe commit is ${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL.`:`Need ${De} SOL free for the 0.25 SOL eligibility commit plus collateral.`:`Lower target.`:nt:y.detail:`Deposit to Wallet.`:`Set RPC.`,wt=Ze({walletReady:!!(s?.walletId&&W&&!U),feeReady:!!($e&&!rt),capitalReady:xe,activeCommitReady:j>=N&&j<=M.safeMaxCommitLamports,started:q,clearing:gt||y.label===`Clearing`}),J=Ye({actionBusy:r.actionBusy,pendingAction:r.pendingAction,minerEnabled:q,drainOnly:gt,startPrerequisitesBlocked:St,startBlockedReason:Ct}),Tt=J.startBlocked,Et=!q&&y.label===`Ready`&&Tt?{label:`Stopped`,tone:U?`danger`:`warn`,detail:Ct}:!q&&Se?{label:`Stopped`,tone:`warn`,detail:nt}:y,Dt=!q&&y.label===`Ready`&&Tt&&Ct!==`Start mining.`&&!U,Ot=ee(r.recovery),Y=w({profile:s,status:c,readiness:r.readiness}),kt=Y.title===`Blocked`||Y.title===`Need SOL`||Y.title===`Need capital`||Y.title===`Capital locked`||Y.title===`Need free capital`,At=Date.now(),jt=Te(r.plannerWindow),Mt=Te(r.activityWindow),Nt=r.history?v:_.filter(e=>{let t=new Date(e.recordedAt??``).getTime();return Number.isFinite(t)&&(jt==null||At-t<=jt)}),X=Oe(Nt),Z=ke(Nt),Pt=!!c?.recentActions?.some(e=>e.status===`success`&&e.action===`submitCycle`&&typeof c.currentCycleId==`number`&&e.cycleId===c.currentCycleId),Ft=l.title!==`Singleton mining wallet`,Q=X.length>0?X[X.length-1]:null,It=et(vt),Lt=r.history?.actions??It,Rt=r.history?.activityOutcomes??v,zt=tt(it({error:r.error,message:r.message,notifications:r.notifications,status:c,profile:s,recentActions:Lt,settledHistory:Rt,recoveryBlocked:!!(c?.blocked||r.recovery?.blocked),recoveryTitle:Ot.title,recoveryDetail:r.recovery?.detail??Ot.detail,showBlockingNote:kt,claimabilityTitle:Y.title,claimabilityDetail:Y.detail,signerRentShortfall:rt,signerRentShortfallMessage:rt?`Leave at least ${E(oe.toString(),`SOL`)} SOL in Wallet for cycle creation and fees.`:null,recentOnly:!1}),`all`).filter(e=>{if(Mt==null)return!0;let t=new Date(e.at??``).getTime();return Number.isFinite(t)&&At-t<=Mt}),Bt=Math.max(1,Math.ceil(zt.length/30)),Vt=Math.min(r.recentActionsPage,Bt),Ht=(Vt-1)*30,Ut=zt.slice(Ht,Ht+30),Wt=X[0]?.timeLabel??null,Gt=Q?.timeLabel??null,Kt=c?.liveCycleReport??null,qt=typeof c?.currentCycleId==`number`?c.currentCycleId:typeof Kt?.cycleId==`number`?Kt.cycleId:null,Jt=Kt?.committedLamports??`0`,Yt=R(Jt),Xt=de(Kt?.validMinerCount),Zt=Kt?.totalCommittedLamports??(Yt?Jt:null),Qt=Q?.cycleId??qt,$t=Q?.commitLabel??(Yt?E(Jt,`SOL`):`—`),en=[Q?.strategyLabel??se(le),Q?.executionLabel??ce(L)].filter(Boolean).join(` · `),tn=1440*60*1e3,nn=v.filter(e=>{let t=new Date(e.recordedAt??``).getTime();return Number.isFinite(t)&&At-t<=tn}),$=dt(nn,tn),rn=Oe(nn,{maxPoints:24}),an=Ce({plannerWindow:r.plannerWindow,visibleCycleCount:Nt.length,matchingCycleCount:r.history?.matchingOutcomeCount??Nt.length,sampled:r.history?.sampled??!1,rangeStart:Wt,rangeEnd:Gt,latestPoint:Q,currentCycleSubmitted:Pt,currentCycleId:c?.currentCycleId??null}),on=t=>e`<div class="mining-metric__rows">
96
96
  ${t.map(t=>e`<div
97
97
  class=${t.wide?`mining-metric__row mining-metric__row--wide`:`mining-metric__row`}
98
98
  title=${t.title??``}
@@ -2315,19 +2315,19 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2315
2315
  <div class="mining-header-actions mining-header-actions--primary">
2316
2316
  <button
2317
2317
  class="btn small primary mining-header-action"
2318
- ?disabled=${q.startBlocked}
2318
+ ?disabled=${J.startBlocked}
2319
2319
  @click=${r.onStart}
2320
- title=${q.startTitle}
2320
+ title=${J.startTitle}
2321
2321
  >
2322
- ${q.startLabel}
2322
+ ${J.startLabel}
2323
2323
  </button>
2324
2324
  <button
2325
2325
  class="btn small mining-header-action"
2326
- ?disabled=${q.stopBlocked}
2326
+ ?disabled=${J.stopBlocked}
2327
2327
  @click=${r.onStop}
2328
- title=${q.stopTitle}
2328
+ title=${J.stopTitle}
2329
2329
  >
2330
- ${r.pendingAction===`stopping`?`Stopping…`:q.stopLabel}
2330
+ ${r.pendingAction===`stopping`?`Stopping…`:J.stopLabel}
2331
2331
  </button>
2332
2332
  <div
2333
2333
  class="mining-inline-status"
@@ -2373,25 +2373,25 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2373
2373
  </button>
2374
2374
  </div>
2375
2375
  <div class="mining-share-proof__grid">
2376
- ${G(`Cycle`,Qt?String(Qt):`—`)}
2377
- ${G(`Capital`,$t===`—`?`—`:`${$t} SOL`)}
2378
- ${G(`Earned`,Z?.satLabel?`${Z.satLabel} SAT`:`—`)}
2379
- ${G(`Strategy`,en||`—`)}
2380
- ${Q&&rn.length?ut(rn,Q):t}
2381
- ${Q?e`
2382
- ${G(`24h SAT`,`${Q.satLabel} SAT`)}
2383
- ${G(`SOL rebate`,`${Q.rebateLabel} SOL`)}
2384
- ${G(`Avg capital`,`${Q.avgCapitalLabel} SOL`)}
2385
- ${G(`Cycles`,String(Q.cycles))}
2386
- ${G(`Net SOL`,`${Q.netLabel} SOL`)}
2387
- ${G(`Most used`,Q.mostUsedStrategyLabel)}
2376
+ ${K(`Cycle`,Qt?String(Qt):`—`)}
2377
+ ${K(`Capital`,$t===`—`?`—`:`${$t} SOL`)}
2378
+ ${K(`Earned`,Q?.satLabel?`${Q.satLabel} SAT`:`—`)}
2379
+ ${K(`Strategy`,en||`—`)}
2380
+ ${$&&rn.length?ut(rn,$):t}
2381
+ ${$?e`
2382
+ ${K(`24h SAT`,`${$.satLabel} SAT`)}
2383
+ ${K(`SOL rebate`,`${$.rebateLabel} SOL`)}
2384
+ ${K(`Avg capital`,`${$.avgCapitalLabel} SOL`)}
2385
+ ${K(`Cycles`,String($.cycles))}
2386
+ ${K(`Net SOL`,`${$.netLabel} SOL`)}
2387
+ ${K(`Most used`,$.mostUsedStrategyLabel)}
2388
2388
  `:t}
2389
2389
  </div>
2390
2390
  </div>
2391
2391
  </dialog>
2392
2392
 
2393
- ${H?e`<div class="mining-note mining-note--compact">
2394
- <strong>${H.title}</strong> · ${H.detail}
2393
+ ${U?e`<div class="mining-note mining-note--compact">
2394
+ <strong>${U.title}</strong> · ${U.detail}
2395
2395
  </div>`:t}
2396
2396
 
2397
2397
  ${Ft?e`<div class="mining-note mining-note--compact">
@@ -2457,14 +2457,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2457
2457
  <span>Capital</span>
2458
2458
  ${u(`SOL deposited into the miner capital PDA. It can be free, locked, or withdrawn later when available.`)}
2459
2459
  </div>
2460
- ${an([{label:`Funded`,value:`${E(O.toString(),`SOL`)} SOL`,title:`Total SOL in miner capital.`},{label:`Locked`,value:`${E(k.toString(),`SOL`)} SOL`,title:`Capital reserved by submitted cycles until settlement and claim release it.`},{label:`Withdraw`,value:`${E(A.toString(),`SOL`)} SOL`,title:pt}])}
2460
+ ${on([{label:`Funded`,value:`${E(O.toString(),`SOL`)} SOL`,title:`Total SOL in miner capital.`},{label:`Locked`,value:`${E(k.toString(),`SOL`)} SOL`,title:`Capital reserved by submitted cycles until settlement and claim release it.`},{label:`Withdraw`,value:`${E(A.toString(),`SOL`)} SOL`,title:pt}])}
2461
2461
  </div>
2462
2462
  <div class="mining-metric">
2463
- <div class="mining-metric__label" title=${V}>
2463
+ <div class="mining-metric__label" title=${H}>
2464
2464
  <span>Commit</span>
2465
- ${u(V)}
2465
+ ${u(H)}
2466
2466
  </div>
2467
- ${an([{label:ve,value:`${E(P.toString(),`SOL`)} SOL`,title:V},{label:`Safe commit`,value:`${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL`,title:Ue},{label:`Active commit`,value:`${E(j.toString(),`SOL`)} SOL`,title:Ge}])}
2467
+ ${on([{label:ve,value:`${E(P.toString(),`SOL`)} SOL`,title:H},{label:`Safe commit`,value:`${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL`,title:Ue},{label:`Active commit`,value:`${E(j.toString(),`SOL`)} SOL`,title:Ge}])}
2468
2468
  </div>
2469
2469
  <div class="mining-metric">
2470
2470
  <div
@@ -2474,7 +2474,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2474
2474
  <span>Current cycle</span>
2475
2475
  ${u(`Live cycle snapshot for the currently observed cycle.`)}
2476
2476
  </div>
2477
- ${an([{label:`Cycle`,value:qt==null?`—`:String(qt)},{label:`Your commit`,value:Yt?`${E(Jt,`SOL`)} SOL`:`—`},{label:`SOL in cycle`,value:Zt==null?`—`:`${E(Zt,`SOL`)} SOL`},{label:`Miners now`,value:Xt==null?`pending`:String(Xt)}])}
2477
+ ${on(ge({cycleId:qt,ownCommitLamports:Jt,ownCommitPresent:Yt,totalCommittedLamports:Zt,minerCount:Xt,keeperBountyUnpaidLamports:c?.currentKeeperBountyUnpaidLamports}))}
2478
2478
  </div>
2479
2479
  <div class="mining-metric">
2480
2480
  <div
@@ -2484,14 +2484,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2484
2484
  <span>Last result</span>
2485
2485
  ${u(`Most recent settled cycle result for this miner.`)}
2486
2486
  </div>
2487
- ${an([{label:`Cycle`,value:mt.cycleId==null?`—`:String(mt.cycleId)},{label:`SAT`,value:`${re(mt.satRaw,`SAT`)} SAT`},{label:`Net SOL`,value:`${ne(mt.netLamports,`SOL`)} SOL`}])}
2487
+ ${on([{label:`Cycle`,value:mt.cycleId==null?`—`:String(mt.cycleId)},{label:`SAT`,value:`${re(mt.satRaw,`SAT`)} SAT`},{label:`Net SOL`,value:`${ne(mt.netLamports,`SOL`)} SOL`}])}
2488
2488
  </div>
2489
2489
  <div class="mining-metric">
2490
2490
  <div class="mining-metric__label" title=${He}>
2491
2491
  <span>Claims</span>
2492
2492
  ${u(`Durable claim backlog. The claim worker claims the oldest ready cycles first and keeps retry counts plus the last error.`)}
2493
2493
  </div>
2494
- ${an([{label:`Pending`,value:String(B),title:He},{label:`Ready`,value:String(Re),title:He},{label:`Failed`,value:String(ze),title:He}])}
2494
+ ${on([{label:`Pending`,value:String(V),title:He},{label:`Ready`,value:String(Re),title:He},{label:`Failed`,value:String(ze),title:He}])}
2495
2495
  </div>
2496
2496
  </div>
2497
2497
  </div>
@@ -2511,7 +2511,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2511
2511
  </div>
2512
2512
  <select
2513
2513
  class="mining-select"
2514
- ?disabled=${W}
2514
+ ?disabled=${G}
2515
2515
  @change=${e=>r.onStrategyPresetChange(e.currentTarget.value)}
2516
2516
  title=${yt.find(e=>e.value===le)?.detail??``}
2517
2517
  >
@@ -2527,9 +2527,9 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2527
2527
  </div>
2528
2528
  <select
2529
2529
  class="mining-select"
2530
- ?disabled=${W}
2530
+ ?disabled=${G}
2531
2531
  @change=${e=>r.onCycleCadenceChange(Number(e.currentTarget.value))}
2532
- title=${`${he}; network fees are separate`}
2532
+ title=${`${me}; network fees are separate`}
2533
2533
  >
2534
2534
  <option value="1" ?selected=${ue===1}>Every cycle</option>
2535
2535
  <option value="2" ?selected=${ue===2}>Every 2nd</option>
@@ -2537,7 +2537,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2537
2537
  <option value="12" ?selected=${ue===12}>Every 12th</option>
2538
2538
  </select>
2539
2539
  <div class="mining-commit-status" title="Estimate excludes transaction fees.">
2540
- Estimated runway ${he}
2540
+ Estimated runway ${me}
2541
2541
  </div>
2542
2542
  </div>
2543
2543
  <div class="mining-stack">
@@ -2547,7 +2547,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2547
2547
  </div>
2548
2548
  <select
2549
2549
  class="mining-select"
2550
- ?disabled=${W}
2550
+ ?disabled=${G}
2551
2551
  @change=${e=>r.onStrategyExecutionChange(e.currentTarget.value)}
2552
2552
  title=${bt.find(e=>e.value===L)?.detail??``}
2553
2553
  >
@@ -2588,7 +2588,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2588
2588
  @input=${e=>r.onCapitalDepositDraftChange(e.currentTarget.value)}
2589
2589
  placeholder="0.25"
2590
2590
  />
2591
- <button class="btn small" ?disabled=${W} @click=${r.onDepositCapital}>
2591
+ <button class="btn small" ?disabled=${G} @click=${r.onDepositCapital}>
2592
2592
  ${r.capitalActionBusy===`deposit`?`Funding...`:`Fund`}
2593
2593
  </button>
2594
2594
  </div>
@@ -2626,7 +2626,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2626
2626
  <div class="mining-field-row__label">
2627
2627
  <div class="mining-section-label">
2628
2628
  ${be}
2629
- ${u(V)}
2629
+ ${u(H)}
2630
2630
  </div>
2631
2631
  ${T?e`<div class="mining-mini-wallet">
2632
2632
  <span>Capital</span>
@@ -2653,7 +2653,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2653
2653
  />
2654
2654
  <button
2655
2655
  class="btn small"
2656
- ?disabled=${W||M.safeMaxCommitLamports<N}
2656
+ ?disabled=${G||M.safeMaxCommitLamports<N}
2657
2657
  @click=${e=>{let t=e.currentTarget.closest(`.mining-commit-inline`)?.querySelector(`input`);r.onUpdateCommit(Fe(t?.value??Ne(s?.funding.commitLamports??`250000000`)))}}
2658
2658
  title=${`Updates active commit now. If target is higher than safe, safe is used and target stays saved.`}
2659
2659
  >
@@ -2744,21 +2744,21 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2744
2744
  </div>
2745
2745
  </div>
2746
2746
  </div>
2747
- ${X?e`<div class="mining-strategy-analytics">
2747
+ ${Z?e`<div class="mining-strategy-analytics">
2748
2748
  <div class="mining-strategy-analytics__cards">
2749
2749
  <div class="mining-strategy-analytics__card">
2750
2750
  <div class="mining-strategy-analytics__label">Most used</div>
2751
2751
  <div class="mining-strategy-analytics__value">
2752
- ${X.summary.mostUsedLabel}
2752
+ ${Z.summary.mostUsedLabel}
2753
2753
  </div>
2754
2754
  <div class="mining-strategy-analytics__sub">
2755
- ${X.summary.mostUsedDetail}
2755
+ ${Z.summary.mostUsedDetail}
2756
2756
  </div>
2757
2757
  </div>
2758
2758
  <div class="mining-strategy-analytics__card">
2759
2759
  <div class="mining-strategy-analytics__label">Period SAT</div>
2760
2760
  <div class="mining-strategy-analytics__value">
2761
- ${X.summary.totalSatLabel}
2761
+ ${Z.summary.totalSatLabel}
2762
2762
  </div>
2763
2763
  <div class="mining-strategy-analytics__sub">
2764
2764
  settled history window
@@ -2767,76 +2767,76 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2767
2767
  <div class="mining-strategy-analytics__card">
2768
2768
  <div class="mining-strategy-analytics__label">Period net</div>
2769
2769
  <div class="mining-strategy-analytics__value">
2770
- ${X.summary.totalNetLabel}
2770
+ ${Z.summary.totalNetLabel}
2771
2771
  </div>
2772
2772
  <div class="mining-strategy-analytics__sub">
2773
- ${X.summary.totalRebateLabel} SOL rebate
2773
+ ${Z.summary.totalRebateLabel} SOL rebate
2774
2774
  </div>
2775
2775
  </div>
2776
2776
  <div class="mining-strategy-analytics__card">
2777
2777
  <div class="mining-strategy-analytics__label">Rebate split</div>
2778
2778
  <div class="mining-strategy-analytics__value">
2779
- ${X.summary.rebateSplitRecorded?`${X.summary.totalPerfRebateLabel} SOL`:`—`}
2779
+ ${Z.summary.rebateSplitRecorded?`${Z.summary.totalPerfRebateLabel} SOL`:`—`}
2780
2780
  </div>
2781
2781
  <div class="mining-strategy-analytics__sub">
2782
- ${X.summary.rebateSplitRecorded?`performance · ${X.summary.totalDetRebateLabel} SOL det`:`split not recorded yet`}
2782
+ ${Z.summary.rebateSplitRecorded?`performance · ${Z.summary.totalDetRebateLabel} SOL det`:`split not recorded yet`}
2783
2783
  </div>
2784
2784
  </div>
2785
2785
  <div class="mining-strategy-analytics__card">
2786
2786
  <div class="mining-strategy-analytics__label">Best SAT</div>
2787
2787
  <div class="mining-strategy-analytics__value">
2788
- ${X.summary.bestSatLabel}
2788
+ ${Z.summary.bestSatLabel}
2789
2789
  </div>
2790
2790
  <div class="mining-strategy-analytics__sub">
2791
- ${X.summary.bestSatDetail}
2791
+ ${Z.summary.bestSatDetail}
2792
2792
  </div>
2793
2793
  </div>
2794
2794
  <div class="mining-strategy-analytics__card">
2795
2795
  <div class="mining-strategy-analytics__label">Best rebate</div>
2796
2796
  <div class="mining-strategy-analytics__value">
2797
- ${X.summary.bestRebateLabel}
2797
+ ${Z.summary.bestRebateLabel}
2798
2798
  </div>
2799
2799
  <div class="mining-strategy-analytics__sub">
2800
- ${X.summary.bestRebateDetail}
2800
+ ${Z.summary.bestRebateDetail}
2801
2801
  </div>
2802
2802
  </div>
2803
2803
  <div class="mining-strategy-analytics__card">
2804
2804
  <div class="mining-strategy-analytics__label">Best net</div>
2805
2805
  <div class="mining-strategy-analytics__value">
2806
- ${X.summary.bestNetLabel}
2806
+ ${Z.summary.bestNetLabel}
2807
2807
  </div>
2808
2808
  <div class="mining-strategy-analytics__sub">
2809
- ${X.summary.bestNetDetail}
2809
+ ${Z.summary.bestNetDetail}
2810
2810
  </div>
2811
2811
  </div>
2812
2812
  <div class="mining-strategy-analytics__card">
2813
2813
  <div class="mining-strategy-analytics__label">Best skill</div>
2814
2814
  <div class="mining-strategy-analytics__value">
2815
- ${X.summary.bestSkillLabel}
2815
+ ${Z.summary.bestSkillLabel}
2816
2816
  </div>
2817
2817
  <div class="mining-strategy-analytics__sub">
2818
- ${X.summary.bestSkillDetail}
2818
+ ${Z.summary.bestSkillDetail}
2819
2819
  </div>
2820
2820
  </div>
2821
2821
  <div class="mining-strategy-analytics__card">
2822
2822
  <div class="mining-strategy-analytics__label">Execution</div>
2823
2823
  <div class="mining-strategy-analytics__value">
2824
- ${X.summary.totalCycles} cycles
2824
+ ${Z.summary.totalCycles} cycles
2825
2825
  </div>
2826
2826
  <div class="mining-strategy-analytics__sub">
2827
- ${X.summary.executionDetail}
2827
+ ${Z.summary.executionDetail}
2828
2828
  </div>
2829
2829
  </div>
2830
2830
  <div class="mining-strategy-analytics__card">
2831
2831
  <div class="mining-strategy-analytics__label">Task/source</div>
2832
2832
  <div class="mining-strategy-analytics__value">Strategy source</div>
2833
2833
  <div class="mining-strategy-analytics__sub">
2834
- ${X.summary.sourceDetail}
2834
+ ${Z.summary.sourceDetail}
2835
2835
  </div>
2836
2836
  </div>
2837
2837
  </div>
2838
2838
  <div class="mining-strategy-analytics__rows">
2839
- ${X.rows.map(t=>e`<div
2839
+ ${Z.rows.map(t=>e`<div
2840
2840
  class="mining-strategy-analytics__row"
2841
2841
  title=${t.title}
2842
2842
  >
@@ -2870,7 +2870,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2870
2870
  </div>`)}
2871
2871
  </div>
2872
2872
  </div>`:t}
2873
- ${Y.length?e`<div class="mining-history-grid ${``}">
2873
+ ${X.length?e`<div class="mining-history-grid ${``}">
2874
2874
  ${e`<div class="mining-history-panel">
2875
2875
  <div class="mining-history-panel__header">
2876
2876
  <div>
@@ -2879,7 +2879,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2879
2879
  </div>
2880
2880
  </div>
2881
2881
  <div class="mining-history-bars" aria-label="SAT earned history chart">
2882
- ${Y.map(t=>{let n=Math.max(6,100-t.satY),r=.48+(100-t.satY)/100*.48,i=[`Cycle ${t.cycleId}`,t.timeLabel,`${t.satLabel} SAT earned`,`${t.commitLabel} SOL commit`,`Erosion: ${t.erosionLabel} SOL`,`Miner rebate: ${t.rebateLabel} SOL`,t.keeperBountyLabel?`Keeper bounty: ${t.keeperBountyLabel} SOL`:null,t.submitFeeLabel?`Submit fee: ${t.submitFeeLabel} SOL`:null,t.keeperFeeLabel?`Keeper fees: ${t.keeperFeeLabel} SOL`:null,t.claimFeeLabel?`Claim fee: ${t.claimFeeLabel} SOL`:null,t.otherFeeLabel?`Other tx: ${t.otherFeeLabel} SOL`:null,t.strategyLabel?`Strategy: ${t.strategyLabel}`:null,`Execution: ${t.executionLabel}`,t.poolLabel].filter(Boolean);return e`<div
2882
+ ${X.map(t=>{let n=Math.max(6,100-t.satY),r=.48+(100-t.satY)/100*.48,i=[`Cycle ${t.cycleId}`,t.timeLabel,`${t.satLabel} SAT earned`,`${t.commitLabel} SOL commit`,`Erosion: ${t.erosionLabel} SOL`,`Miner rebate: ${t.rebateLabel} SOL`,t.keeperBountyLabel?`Keeper bounty: ${t.keeperBountyLabel} SOL`:null,t.submitFeeLabel?`Submit fee: ${t.submitFeeLabel} SOL`:null,t.keeperFeeLabel?`Keeper fees: ${t.keeperFeeLabel} SOL`:null,t.claimFeeLabel?`Claim fee: ${t.claimFeeLabel} SOL`:null,t.otherFeeLabel?`Other tx: ${t.otherFeeLabel} SOL`:null,t.strategyLabel?`Strategy: ${t.strategyLabel}`:null,`Execution: ${t.executionLabel}`,t.poolLabel].filter(Boolean);return e`<div
2883
2883
  class="mining-history-bars__bar mining-history-bars__bar--sat"
2884
2884
  style=${`height:${n.toFixed(2)}%; opacity:${r.toFixed(3)};`}
2885
2885
  title=${i.join(`
@@ -2888,10 +2888,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2888
2888
  </div>
2889
2889
  <div class="mining-history-bars__footer">
2890
2890
  <div class="mining-history-bars__range">
2891
- Window ${$.windowLabel}
2891
+ Window ${an.windowLabel}
2892
2892
  </div>
2893
2893
  <div class="mining-history-bars__range">
2894
- ${$.dataRangeLabel?`Data ${$.dataRangeLabel}`:Z?`Latest ${Z.satLabel} SAT`:``}
2894
+ ${an.dataRangeLabel?`Data ${an.dataRangeLabel}`:Q?`Latest ${Q.satLabel} SAT`:``}
2895
2895
  </div>
2896
2896
  </div>
2897
2897
  </div>`}
@@ -2903,7 +2903,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2903
2903
  </div>
2904
2904
  </div>
2905
2905
  <div class="mining-history-bars" aria-label="Net SOL history chart">
2906
- ${Y.map(t=>{let n=Math.max(6,100-t.netY),r=.42+(100-t.netY)/100*.5,i=[`Cycle ${t.cycleId}`,t.timeLabel,`${t.netLabel} SOL net`,`${t.commitLabel} SOL commit`,`Erosion: ${t.erosionLabel} SOL`,`Miner rebate: ${t.rebateLabel} SOL`,t.keeperBountyLabel?`Keeper bounty: ${t.keeperBountyLabel} SOL`:null,t.submitFeeLabel?`Submit fee: ${t.submitFeeLabel} SOL`:null,t.keeperFeeLabel?`Keeper fees: ${t.keeperFeeLabel} SOL`:null,t.claimFeeLabel?`Claim fee: ${t.claimFeeLabel} SOL`:null,t.otherFeeLabel?`Other tx: ${t.otherFeeLabel} SOL`:null,t.strategyLabel?`Strategy: ${t.strategyLabel}`:null,`Execution: ${t.executionLabel}`,t.poolLabel].filter(Boolean);return e`<div
2906
+ ${X.map(t=>{let n=Math.max(6,100-t.netY),r=.42+(100-t.netY)/100*.5,i=[`Cycle ${t.cycleId}`,t.timeLabel,`${t.netLabel} SOL net`,`${t.commitLabel} SOL commit`,`Erosion: ${t.erosionLabel} SOL`,`Miner rebate: ${t.rebateLabel} SOL`,t.keeperBountyLabel?`Keeper bounty: ${t.keeperBountyLabel} SOL`:null,t.submitFeeLabel?`Submit fee: ${t.submitFeeLabel} SOL`:null,t.keeperFeeLabel?`Keeper fees: ${t.keeperFeeLabel} SOL`:null,t.claimFeeLabel?`Claim fee: ${t.claimFeeLabel} SOL`:null,t.otherFeeLabel?`Other tx: ${t.otherFeeLabel} SOL`:null,t.strategyLabel?`Strategy: ${t.strategyLabel}`:null,`Execution: ${t.executionLabel}`,t.poolLabel].filter(Boolean);return e`<div
2907
2907
  class="mining-history-bars__bar mining-history-bars__bar--net"
2908
2908
  style=${`height:${n.toFixed(2)}%; opacity:${r.toFixed(3)};`}
2909
2909
  title=${i.join(`
@@ -2912,10 +2912,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2912
2912
  </div>
2913
2913
  <div class="mining-history-bars__footer">
2914
2914
  <div class="mining-history-bars__range">
2915
- Window ${$.windowLabel}
2915
+ Window ${an.windowLabel}
2916
2916
  </div>
2917
2917
  <div class="mining-history-bars__range">
2918
- ${$.dataRangeLabel?`Data ${$.dataRangeLabel}`:Z?`Latest ${Z.netLabel} SOL`:``}
2918
+ ${an.dataRangeLabel?`Data ${an.dataRangeLabel}`:Q?`Latest ${Q.netLabel} SOL`:``}
2919
2919
  </div>
2920
2920
  </div>
2921
2921
  </div>`}
@@ -2956,5 +2956,5 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2956
2956
  </div>
2957
2957
  </div>`:t}
2958
2958
  </section>
2959
- `}export{it as buildMiningActivityEntries,Oe as buildMiningLineSeries,Ze as buildMiningSetupChecklist,ke as buildMiningStrategyAnalytics,Ae as buildPlannerVisualSeries,Qe as buildVisibleRecentActions,Se as describeChainTimeHealth,w as describeClaimability,be as describeCurrentCycleDrift,Je as describeDashboardState,z as describeLiveCommitSizing,Ye as describeMiningHeaderActions,Ce as describeMiningHistoryWindow,p as describeMiningWalletRoleConflict,ee as describeRecoveryPath,_ as describeRiskMode,v as describeRuntimeStatus,d as describeSelectedWalletSuitability,m as describeStrategyMode,g as describeStrategyTransparency,tt as filterMiningActivityEntries,C as formatMiningDraftTimestamp,x as miningAddressExplorerUrl,b as miningExplorerUrl,S as miningRecentActionExplorerUrl,ft as renderMining,_e as resolveLatestSettledCycleMetrics,f as resolveMiningWalletContext,ie as resolveMiningWalletLamports,pe as resolveStableMiningValue,y as shouldShowAdminRecovery,ge as summarizeCurrentCycleSnapshot,ue as summarizeLatestCycleMath,h as summarizePlannerOutcomes};
2960
- //# sourceMappingURL=mining-qMYs4aD-.js.map
2959
+ `}export{ge as buildLiveCurrentCycleMetricRows,it as buildMiningActivityEntries,Oe as buildMiningLineSeries,Ze as buildMiningSetupChecklist,ke as buildMiningStrategyAnalytics,Ae as buildPlannerVisualSeries,Qe as buildVisibleRecentActions,Se as describeChainTimeHealth,w as describeClaimability,be as describeCurrentCycleDrift,Je as describeDashboardState,z as describeLiveCommitSizing,Ye as describeMiningHeaderActions,Ce as describeMiningHistoryWindow,p as describeMiningWalletRoleConflict,ee as describeRecoveryPath,_ as describeRiskMode,v as describeRuntimeStatus,d as describeSelectedWalletSuitability,m as describeStrategyMode,g as describeStrategyTransparency,tt as filterMiningActivityEntries,C as formatMiningDraftTimestamp,x as miningAddressExplorerUrl,b as miningExplorerUrl,S as miningRecentActionExplorerUrl,ft as renderMining,_e as resolveLatestSettledCycleMetrics,f as resolveMiningWalletContext,ie as resolveMiningWalletLamports,B as resolveStableMiningValue,y as shouldShowAdminRecovery,he as summarizeCurrentCycleSnapshot,ue as summarizeLatestCycleMath,h as summarizePlannerOutcomes};
2960
+ //# sourceMappingURL=mining-Dg-3ll0F.js.map