@fased/fased 0.1.64 → 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 (905) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE +0 -0
  3. package/README.md +16 -9
  4. package/assets/avatar-placeholder.svg +0 -0
  5. package/assets/chrome-extension/README.md +0 -0
  6. package/assets/chrome-extension/background-utils.js +0 -0
  7. package/assets/chrome-extension/background.js +0 -0
  8. package/assets/chrome-extension/icons/icon128.png +0 -0
  9. package/assets/chrome-extension/icons/icon16.png +0 -0
  10. package/assets/chrome-extension/icons/icon32.png +0 -0
  11. package/assets/chrome-extension/icons/icon48.png +0 -0
  12. package/assets/chrome-extension/manifest.json +0 -0
  13. package/assets/chrome-extension/options-validation.js +0 -0
  14. package/assets/chrome-extension/options.html +0 -0
  15. package/assets/chrome-extension/options.js +0 -0
  16. package/config/official-external-plugin-catalog.json +0 -0
  17. package/config/sat-runtime.env +0 -0
  18. package/config/signer-policies/README.md +10 -1
  19. package/config/signer-protocol-v2.json +2 -0
  20. package/dist/acp/client.js +2 -2
  21. package/dist/acp/secret-file.js +2 -2
  22. package/dist/agents/agent-scope.js +2 -2
  23. package/dist/agents/apply-patch.js +8 -8
  24. package/dist/agents/auth-profiles/paths.js +2 -2
  25. package/dist/agents/auth-profiles/store.js +4 -4
  26. package/dist/agents/bash-tools.shared.js +2 -2
  27. package/dist/agents/cli-credentials.js +4 -4
  28. package/dist/agents/docs-path.js +3 -3
  29. package/dist/agents/embedded-pi-mcp.js +4 -4
  30. package/dist/agents/identity-avatar.js +3 -3
  31. package/dist/agents/identity-file.js +2 -2
  32. package/dist/agents/openai-codex-app-server.js +5 -5
  33. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  34. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  35. package/dist/agents/pi-model-discovery.js +6 -6
  36. package/dist/agents/pi-project-settings.js +3 -3
  37. package/dist/agents/sandbox/fs-bridge.js +2 -2
  38. package/dist/agents/session-dirs.js +4 -4
  39. package/dist/agents/session-write-lock.js +13 -13
  40. package/dist/agents/shell-utils.js +5 -5
  41. package/dist/agents/skills/bundled-dir.js +4 -4
  42. package/dist/agents/skills/local-loader.js +6 -6
  43. package/dist/agents/skills/plugin-skills.js +2 -2
  44. package/dist/agents/skills/trust.js +6 -6
  45. package/dist/agents/skills/workspace.js +22 -22
  46. package/dist/agents/skills-install-download.js +7 -7
  47. package/dist/agents/skills-install-plan.js +2 -2
  48. package/dist/agents/skills-install.js +2 -2
  49. package/dist/agents/skills-status.js +2 -2
  50. package/dist/agents/subagent-depth.js +2 -2
  51. package/dist/agents/system-prompt-params.js +2 -2
  52. package/dist/agents/workspace.js +22 -22
  53. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  54. package/dist/auto-reply/reply/agent-runner.js +2 -2
  55. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  56. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  57. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  58. package/dist/auto-reply/reply/session.js +3 -3
  59. package/dist/auto-reply/skill-commands.js +3 -3
  60. package/dist/auto-reply/status.js +6 -6
  61. package/dist/brand.js +1 -1
  62. package/dist/browser/chrome.executables.js +3 -3
  63. package/dist/browser/chrome.js +3 -3
  64. package/dist/browser/chrome.profile-decoration.js +6 -6
  65. package/dist/browser/profiles-service.js +2 -2
  66. package/dist/browser/server-context.js +2 -2
  67. package/dist/browser/trash.js +4 -4
  68. package/dist/build-info.json +3 -3
  69. package/dist/bundled/boot-md/HOOK.md +0 -0
  70. package/dist/bundled/bootstrap-extra-files/HOOK.md +0 -0
  71. package/dist/bundled/command-logger/HOOK.md +0 -0
  72. package/dist/bundled/session-memory/HOOK.md +0 -0
  73. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  74. package/dist/canvas-host/a2ui/index.html +0 -0
  75. package/dist/canvas-host/server.js +4 -4
  76. package/dist/capabilities/catalog.js +3 -3
  77. package/dist/channels/plugins/catalog.js +3 -3
  78. package/dist/cli/browser-cli-extension.js +6 -6
  79. package/dist/cli/command-format.js +2 -2
  80. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  81. package/dist/cli/dns-cli.js +9 -9
  82. package/dist/cli/gateway-cli/dev.js +5 -5
  83. package/dist/cli/gateway-cli/run.js +2 -2
  84. package/dist/cli/hooks-cli.js +5 -5
  85. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  86. package/dist/cli/memory-cli.js +7 -7
  87. package/dist/cli/nodes-media-utils.js +2 -2
  88. package/dist/cli/plugins-cli.js +2 -2
  89. package/dist/cli/secrets-cli.js +3 -3
  90. package/dist/cli/windows-argv.js +2 -2
  91. package/dist/commands/dashboard-link.js +3 -3
  92. package/dist/commands/doctor-install.js +5 -5
  93. package/dist/commands/doctor-memory-search.js +2 -2
  94. package/dist/commands/doctor-platform-notes.js +2 -2
  95. package/dist/commands/doctor-sandbox.js +2 -2
  96. package/dist/commands/doctor-state-integrity.js +23 -23
  97. package/dist/commands/doctor-workspace.js +3 -3
  98. package/dist/commands/doctor.js +3 -3
  99. package/dist/commands/managed-up.js +2 -2
  100. package/dist/commands/onboard-auth.credentials.js +3 -3
  101. package/dist/commands/onboarding/plugin-install.js +2 -2
  102. package/dist/commands/sessions-cleanup.js +2 -2
  103. package/dist/commands/signal-install.js +6 -6
  104. package/dist/commands/status-all/channels.js +2 -2
  105. package/dist/commands/wallet.js +10 -10
  106. package/dist/config/cache-utils.js +2 -2
  107. package/dist/config/includes.js +5 -5
  108. package/dist/config/io.js +2 -2
  109. package/dist/config/paths.js +3 -3
  110. package/dist/config/sat-runtime-ids.js +3 -3
  111. package/dist/config/sessions/disk-budget.js +6 -6
  112. package/dist/config/sessions/paths.js +2 -2
  113. package/dist/config/sessions/store.js +17 -17
  114. package/dist/config/sessions/transcript.js +4 -4
  115. package/dist/config/talk.js +2 -2
  116. package/dist/control-ui/apple-touch-icon.png +0 -0
  117. package/dist/control-ui/assets/{app-bR-fO5ty.js → app-DYxADzeH.js} +5 -5
  118. package/dist/control-ui/assets/{index-ckCxHwjy.js → index-vw_10Zeo.js} +3 -3
  119. package/dist/control-ui/assets/{mining-BgHFh0ei.js → mining-Dg-3ll0F.js} +69 -69
  120. package/dist/control-ui/boot-watchdog.js +0 -0
  121. package/dist/control-ui/fased-logo.svg +0 -0
  122. package/dist/control-ui/favicon-32.png +0 -0
  123. package/dist/control-ui/favicon.ico +0 -0
  124. package/dist/control-ui/favicon.svg +0 -0
  125. package/dist/control-ui/index.html +1 -1
  126. package/dist/control-ui/manifest.webmanifest +0 -0
  127. package/dist/control-ui/version.json +1 -1
  128. package/dist/cron/service/store.js +2 -2
  129. package/dist/cron/store.js +6 -6
  130. package/dist/daemon/systemd-system.js +5 -5
  131. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  132. package/dist/export-html/template.css +0 -0
  133. package/dist/export-html/template.html +0 -0
  134. package/dist/export-html/template.js +0 -0
  135. package/dist/export-html/vendor/highlight.min.js +0 -0
  136. package/dist/export-html/vendor/marked.min.js +0 -0
  137. package/dist/extensions/sat-mining/src/rpc-read.js +59 -20
  138. package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
  139. package/dist/extensions/sat-mining/src/solana-submit.js +396 -9
  140. package/dist/extensions/sat-mining/src/submission-ledger.js +24 -4
  141. package/dist/federation/marketplace-delivery-outbox.js +5 -5
  142. package/dist/federation/marketplace-settlement-ledger.js +4 -4
  143. package/dist/gateway/a2a-task-store.js +22 -22
  144. package/dist/gateway/control-ui-boot-check.js +6 -6
  145. package/dist/gateway/control-ui-login.js +7 -7
  146. package/dist/gateway/control-ui.js +9 -9
  147. package/dist/gateway/federation-marketplace-run-store.js +14 -14
  148. package/dist/gateway/hooks-mapping.js +4 -4
  149. package/dist/gateway/server-discovery.js +2 -2
  150. package/dist/gateway/server-http.js +4 -4
  151. package/dist/gateway/server-methods/chat.js +3 -3
  152. package/dist/gateway/server-methods/sessions.js +6 -6
  153. package/dist/gateway/server-methods/usage.js +2 -2
  154. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  155. package/dist/gateway/session-utils.fs.js +24 -24
  156. package/dist/gateway/session-utils.js +6 -6
  157. package/dist/hooks/bundled-dir.js +4 -4
  158. package/dist/hooks/gmail-setup-utils.js +6 -6
  159. package/dist/hooks/import-url.js +2 -2
  160. package/dist/hooks/loader.js +4 -4
  161. package/dist/hooks/workspace.js +7 -7
  162. package/dist/infra/archive.js +17 -17
  163. package/dist/infra/boundary-file-read.js +2 -2
  164. package/dist/infra/boundary-path.js +15 -15
  165. package/dist/infra/brew.js +2 -2
  166. package/dist/infra/control-ui-assets.js +14 -14
  167. package/dist/infra/device-auth-store.js +8 -8
  168. package/dist/infra/device-identity.js +8 -8
  169. package/dist/infra/dotenv.js +2 -2
  170. package/dist/infra/exec-approvals.js +8 -8
  171. package/dist/infra/exec-command-resolution.js +4 -4
  172. package/dist/infra/exec-safe-bin-trust.js +2 -2
  173. package/dist/infra/fased-root.js +5 -5
  174. package/dist/infra/fs-safe.js +14 -14
  175. package/dist/infra/gateway-lock.js +11 -11
  176. package/dist/infra/git-commit.js +5 -5
  177. package/dist/infra/git-root.js +4 -4
  178. package/dist/infra/hosted-runtime-artifact.js +3 -3
  179. package/dist/infra/is-main.js +2 -2
  180. package/dist/infra/json-file.js +7 -7
  181. package/dist/infra/managed-runtime-bootstrap.js +6 -6
  182. package/dist/infra/outbound/delivery-queue.js +16 -16
  183. package/dist/infra/path-env.js +3 -3
  184. package/dist/infra/ports-lsof.js +4 -4
  185. package/dist/infra/provider-usage.auth.js +3 -3
  186. package/dist/infra/safe-open-sync.js +2 -2
  187. package/dist/infra/session-cost-usage.js +9 -9
  188. package/dist/infra/shell-env.js +2 -2
  189. package/dist/infra/state-migrations.fs.js +6 -6
  190. package/dist/infra/state-migrations.js +23 -23
  191. package/dist/infra/tmp-fased-dir.js +6 -6
  192. package/dist/infra/widearea-dns.js +3 -3
  193. package/dist/infra/wsl.js +2 -2
  194. package/dist/line/accounts.js +2 -2
  195. package/dist/line/download.js +2 -2
  196. package/dist/logging/config.js +3 -3
  197. package/dist/logging/logger.js +7 -7
  198. package/dist/managed/federation.js +3 -3
  199. package/dist/managed/tunnel.js +3 -3
  200. package/dist/media/store.js +13 -13
  201. package/dist/media-understanding/runner.js +3 -3
  202. package/dist/memory/embeddings.js +2 -2
  203. package/dist/memory/internal.js +10 -10
  204. package/dist/memory/manager-sync-ops.js +7 -7
  205. package/dist/memory/repair-executor.js +17 -17
  206. package/dist/node-host/invoke-system-run-plan.js +8 -8
  207. package/dist/node-host/invoke.js +2 -2
  208. package/dist/node-host/runner.js +3 -3
  209. package/dist/pairing/pairing-store.js +3 -3
  210. package/dist/plugin-sdk/{audio-preflight-BYxAt775.js → audio-preflight-BFLoas5R.js} +1 -1
  211. package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
  212. package/dist/plugin-sdk/{chunk-items-DIRHG2gJ.js → chunk-items-TErs62MC.js} +1 -1
  213. package/dist/plugin-sdk/command-status.js +1 -1
  214. package/dist/plugin-sdk/{config-schema-BOT7kHb6.js → config-schema-BPnaDBwZ.js} +63 -8
  215. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  216. package/dist/plugin-sdk/discord.d.ts +3 -3
  217. package/dist/plugin-sdk/file-lock.js +10 -10
  218. package/dist/plugin-sdk/index.d.ts +4 -4
  219. package/dist/plugin-sdk/index.js +1 -1
  220. package/dist/plugin-sdk/json-store.js +6 -6
  221. package/dist/plugin-sdk/{monitor-BCFDaqJ-.js → monitor-FuBPk-AL.js} +3 -3
  222. package/dist/plugin-sdk/{monitor-BgbjRiPM.js → monitor-sW6dQdX1.js} +3 -3
  223. package/dist/plugin-sdk/{openresponses-http-DFf87SMM.js → openresponses-http-CVZq0H-P.js} +1 -1
  224. package/dist/plugin-sdk/{pairing-message-CS-9BHug.d.ts → pairing-message-L6L6L2YF.d.ts} +1 -1
  225. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
  226. package/dist/plugin-sdk/sat-runtime.d.ts +69 -2
  227. package/dist/plugin-sdk/sat-runtime.js +1 -1
  228. package/dist/plugin-sdk/{slack-BUTt8cxK.js → slack-BZISDxDd.js} +3 -3
  229. package/dist/plugin-sdk/slack.d.ts +3 -3
  230. package/dist/plugin-sdk/{sticker-cache-D0wHVqjt.js → sticker-cache-B0aPv6Lg.js} +2 -2
  231. package/dist/plugin-sdk/{telegram-actions-CC_qN4v0.js → telegram-actions-H3gePEn6.js} +2 -2
  232. package/dist/plugin-sdk/telegram.d.ts +3 -3
  233. package/dist/plugin-sdk/{tmp-fased-dir-xOTGlzBE.d.ts → tmp-fased-dir-d1CmFAnJ.d.ts} +1 -1
  234. package/dist/plugin-sdk/{types-C3avNytw.d.ts → types-DUjYaWB2.d.ts} +3 -3
  235. package/dist/plugin-sdk/{types-DWfbSAaM.d.ts → types-xWjHXl1z.d.ts} +1 -1
  236. package/dist/plugin-sdk/{web-BXsJ1vqe.js → web-JwP9PAZR.js} +1 -1
  237. package/dist/plugin-sdk/whatsapp.d.ts +3 -3
  238. package/dist/plugins/bundled-dir.js +3 -3
  239. package/dist/plugins/discovery.js +11 -11
  240. package/dist/plugins/loader.js +13 -13
  241. package/dist/plugins/manifest-registry.js +2 -2
  242. package/dist/plugins/manifest.js +4 -4
  243. package/dist/plugins/path-safety.js +3 -3
  244. package/dist/plugins/status-cache.js +9 -9
  245. package/dist/plugins/update.js +3 -3
  246. package/dist/plugins/web-search-install-catalog.js +3 -3
  247. package/dist/secrets/apply.js +16 -16
  248. package/dist/secrets/audit.js +11 -11
  249. package/dist/secrets/shared.js +9 -9
  250. package/dist/security/scan-paths.js +2 -2
  251. package/dist/shared/config-eval.js +2 -2
  252. package/dist/shared/pid-alive.js +2 -2
  253. package/dist/tasks/standing-orders.js +5 -5
  254. package/dist/tasks/task-flow-registry.js +5 -5
  255. package/dist/tasks/task-registry.js +5 -5
  256. package/dist/tasks/workflow-definitions.js +6 -6
  257. package/dist/telegram/token.js +5 -5
  258. package/dist/utils.js +5 -5
  259. package/dist/wallet/external-submission-ledger.js +14 -14
  260. package/dist/wallet/local-socket-signer-protocol.js +52 -0
  261. package/dist/wallet/providers/local-socket-signer-adapter.js +3 -2
  262. package/dist/wallet/signer-network-admin.js +9 -3
  263. package/dist/wallet/signer-protocol-v2.generated.js +2 -0
  264. package/dist/wallet/solana-network-discovery.js +113 -0
  265. package/dist/wallet/turnkey-reviewed-state.js +14 -14
  266. package/dist/wallet/wallet-approval-auth.js +3 -3
  267. package/dist/wallet/wallet-atomic-state.js +12 -12
  268. package/dist/wallet/wallet-audit-log.js +5 -5
  269. package/dist/wallet/wallet-inbound-events.js +3 -3
  270. package/dist/wallet/wallet-observability.js +5 -5
  271. package/dist/wallet/wallet-policy.js +8 -6
  272. package/dist/wallet/wallet-provider-registry.js +7 -7
  273. package/dist/wallet/wallet-runtime-config.js +3 -3
  274. package/dist/wallet/wallet-secrets-store.js +22 -22
  275. package/dist/wallet/wallet-send-approvals.js +21 -21
  276. package/dist/wallet/wallet-send-execution-ledger.js +3 -3
  277. package/dist/wallet/wallet-settlement-links.js +3 -3
  278. package/dist/wallet/wallet-standard-review.js +14 -14
  279. package/dist/web/accounts.js +3 -3
  280. package/dist/web/auth-store.js +18 -18
  281. package/dist/web/session.js +4 -4
  282. package/dist/wizard/host-security-capability.js +3 -3
  283. package/dist/wizard/onboarding.host-security.js +3 -3
  284. package/dist/wizard/onboarding.js +17 -15
  285. package/dist/wizard/onboarding.wallet.js +27 -27
  286. package/docs/reference/templates/AGENTS.dev.md +0 -0
  287. package/docs/reference/templates/AGENTS.md +0 -0
  288. package/docs/reference/templates/BOOT.md +0 -0
  289. package/docs/reference/templates/BOOTSTRAP.md +0 -0
  290. package/docs/reference/templates/HEARTBEAT.md +0 -0
  291. package/docs/reference/templates/IDENTITY.dev.md +0 -0
  292. package/docs/reference/templates/IDENTITY.md +0 -0
  293. package/docs/reference/templates/SOUL.dev.md +0 -0
  294. package/docs/reference/templates/SOUL.md +0 -0
  295. package/docs/reference/templates/TOOLS.dev.md +0 -0
  296. package/docs/reference/templates/TOOLS.md +0 -0
  297. package/docs/reference/templates/USER.dev.md +0 -0
  298. package/docs/reference/templates/USER.md +0 -0
  299. package/extensions/acpx/fased.plugin.json +0 -0
  300. package/extensions/acpx/package.json +1 -1
  301. package/extensions/acpx/skills/acp-router/SKILL.md +0 -0
  302. package/extensions/acpx/src/config.ts +0 -0
  303. package/extensions/acpx/src/ensure.ts +0 -0
  304. package/extensions/acpx/src/mcp-readonly-tool-registry.ts +0 -0
  305. package/extensions/acpx/src/mcp-status-adapter.ts +0 -0
  306. package/extensions/acpx/src/runtime-internals/events.ts +0 -0
  307. package/extensions/acpx/src/runtime-internals/process.ts +0 -0
  308. package/extensions/acpx/src/runtime-internals/shared.ts +0 -0
  309. package/extensions/acpx/src/runtime.ts +0 -0
  310. package/extensions/acpx/src/service.ts +0 -0
  311. package/extensions/bluebubbles/README.md +0 -0
  312. package/extensions/bluebubbles/fased.plugin.json +0 -0
  313. package/extensions/bluebubbles/package.json +1 -1
  314. package/extensions/bluebubbles/src/account-resolve.ts +0 -0
  315. package/extensions/bluebubbles/src/accounts.ts +0 -0
  316. package/extensions/bluebubbles/src/actions.ts +0 -0
  317. package/extensions/bluebubbles/src/attachments.ts +0 -0
  318. package/extensions/bluebubbles/src/channel.ts +0 -0
  319. package/extensions/bluebubbles/src/chat.ts +0 -0
  320. package/extensions/bluebubbles/src/config-schema.ts +0 -0
  321. package/extensions/bluebubbles/src/history.ts +0 -0
  322. package/extensions/bluebubbles/src/media-send.ts +0 -0
  323. package/extensions/bluebubbles/src/monitor-normalize.ts +0 -0
  324. package/extensions/bluebubbles/src/monitor-processing.ts +0 -0
  325. package/extensions/bluebubbles/src/monitor-reply-cache.ts +0 -0
  326. package/extensions/bluebubbles/src/monitor-shared.ts +0 -0
  327. package/extensions/bluebubbles/src/monitor.ts +0 -0
  328. package/extensions/bluebubbles/src/multipart.ts +0 -0
  329. package/extensions/bluebubbles/src/onboarding.ts +0 -0
  330. package/extensions/bluebubbles/src/probe.ts +0 -0
  331. package/extensions/bluebubbles/src/reactions.ts +0 -0
  332. package/extensions/bluebubbles/src/request-url.ts +0 -0
  333. package/extensions/bluebubbles/src/runtime.ts +0 -0
  334. package/extensions/bluebubbles/src/send-helpers.ts +0 -0
  335. package/extensions/bluebubbles/src/send.ts +0 -0
  336. package/extensions/bluebubbles/src/targets.ts +0 -0
  337. package/extensions/bluebubbles/src/test-mocks.ts +0 -0
  338. package/extensions/bluebubbles/src/types.ts +0 -0
  339. package/extensions/copilot-proxy/README.md +0 -0
  340. package/extensions/copilot-proxy/fased.plugin.json +0 -0
  341. package/extensions/copilot-proxy/package.json +1 -1
  342. package/extensions/device-pair/fased.plugin.json +0 -0
  343. package/extensions/diagnostics-otel/fased.plugin.json +0 -0
  344. package/extensions/diagnostics-otel/package.json +1 -1
  345. package/extensions/diagnostics-otel/src/service.ts +0 -0
  346. package/extensions/fased-federation/README.md +0 -0
  347. package/extensions/fased-federation/fased.plugin.json +0 -0
  348. package/extensions/fased-federation/package.json +1 -1
  349. package/extensions/google-gemini-cli-auth/README.md +0 -0
  350. package/extensions/google-gemini-cli-auth/fased.plugin.json +0 -0
  351. package/extensions/google-gemini-cli-auth/oauth.ts +0 -0
  352. package/extensions/google-gemini-cli-auth/package.json +1 -1
  353. package/extensions/imessage/fased.plugin.json +0 -0
  354. package/extensions/imessage/package.json +1 -1
  355. package/extensions/imessage/src/channel.ts +0 -0
  356. package/extensions/imessage/src/runtime.ts +0 -0
  357. package/extensions/irc/fased.plugin.json +0 -0
  358. package/extensions/irc/package.json +1 -1
  359. package/extensions/irc/src/accounts.ts +0 -0
  360. package/extensions/irc/src/channel.ts +0 -0
  361. package/extensions/irc/src/client.ts +0 -0
  362. package/extensions/irc/src/config-schema.ts +0 -0
  363. package/extensions/irc/src/connect-options.ts +0 -0
  364. package/extensions/irc/src/control-chars.ts +0 -0
  365. package/extensions/irc/src/inbound.ts +0 -0
  366. package/extensions/irc/src/monitor.ts +0 -0
  367. package/extensions/irc/src/normalize.ts +0 -0
  368. package/extensions/irc/src/onboarding.ts +0 -0
  369. package/extensions/irc/src/policy.ts +0 -0
  370. package/extensions/irc/src/probe.ts +0 -0
  371. package/extensions/irc/src/protocol.ts +0 -0
  372. package/extensions/irc/src/runtime.ts +0 -0
  373. package/extensions/irc/src/send.ts +0 -0
  374. package/extensions/irc/src/types.ts +0 -0
  375. package/extensions/line/fased.plugin.json +0 -0
  376. package/extensions/line/package.json +1 -1
  377. package/extensions/line/src/card-command.ts +0 -0
  378. package/extensions/line/src/channel.ts +0 -0
  379. package/extensions/line/src/runtime.ts +0 -0
  380. package/extensions/llm-task/README.md +0 -0
  381. package/extensions/llm-task/fased.plugin.json +0 -0
  382. package/extensions/llm-task/package.json +1 -1
  383. package/extensions/lobster/README.md +0 -0
  384. package/extensions/lobster/SKILL.md +0 -0
  385. package/extensions/lobster/fased.plugin.json +0 -0
  386. package/extensions/lobster/package.json +1 -1
  387. package/extensions/lobster/src/test-helpers.ts +0 -0
  388. package/extensions/lobster/src/windows-spawn.ts +0 -0
  389. package/extensions/matrix/CHANGELOG.md +12 -0
  390. package/extensions/matrix/fased.plugin.json +0 -0
  391. package/extensions/matrix/package.json +1 -1
  392. package/extensions/matrix/src/actions.ts +0 -0
  393. package/extensions/matrix/src/channel.ts +0 -0
  394. package/extensions/matrix/src/config-schema.ts +0 -0
  395. package/extensions/matrix/src/directory-live.ts +0 -0
  396. package/extensions/matrix/src/group-mentions.ts +0 -0
  397. package/extensions/matrix/src/matrix/accounts.ts +0 -0
  398. package/extensions/matrix/src/matrix/actions/client.ts +0 -0
  399. package/extensions/matrix/src/matrix/actions/limits.ts +0 -0
  400. package/extensions/matrix/src/matrix/actions/messages.ts +0 -0
  401. package/extensions/matrix/src/matrix/actions/pins.ts +0 -0
  402. package/extensions/matrix/src/matrix/actions/reactions.ts +0 -0
  403. package/extensions/matrix/src/matrix/actions/room.ts +0 -0
  404. package/extensions/matrix/src/matrix/actions/summary.ts +0 -0
  405. package/extensions/matrix/src/matrix/actions/types.ts +0 -0
  406. package/extensions/matrix/src/matrix/actions.ts +0 -0
  407. package/extensions/matrix/src/matrix/active-client.ts +0 -0
  408. package/extensions/matrix/src/matrix/client/config.ts +0 -0
  409. package/extensions/matrix/src/matrix/client/create-client.ts +0 -0
  410. package/extensions/matrix/src/matrix/client/logging.ts +0 -0
  411. package/extensions/matrix/src/matrix/client/runtime.ts +0 -0
  412. package/extensions/matrix/src/matrix/client/shared.ts +0 -0
  413. package/extensions/matrix/src/matrix/client/storage.ts +0 -0
  414. package/extensions/matrix/src/matrix/client/types.ts +0 -0
  415. package/extensions/matrix/src/matrix/client-bootstrap.ts +0 -0
  416. package/extensions/matrix/src/matrix/client.ts +0 -0
  417. package/extensions/matrix/src/matrix/credentials.ts +0 -0
  418. package/extensions/matrix/src/matrix/deps.ts +0 -0
  419. package/extensions/matrix/src/matrix/format.ts +0 -0
  420. package/extensions/matrix/src/matrix/monitor/access-policy.ts +0 -0
  421. package/extensions/matrix/src/matrix/monitor/allowlist.ts +0 -0
  422. package/extensions/matrix/src/matrix/monitor/auto-join.ts +0 -0
  423. package/extensions/matrix/src/matrix/monitor/direct.ts +0 -0
  424. package/extensions/matrix/src/matrix/monitor/events.ts +0 -0
  425. package/extensions/matrix/src/matrix/monitor/handler.ts +0 -0
  426. package/extensions/matrix/src/matrix/monitor/inbound-body.ts +0 -0
  427. package/extensions/matrix/src/matrix/monitor/location.ts +0 -0
  428. package/extensions/matrix/src/matrix/monitor/media.ts +0 -0
  429. package/extensions/matrix/src/matrix/monitor/mentions.ts +0 -0
  430. package/extensions/matrix/src/matrix/monitor/replies.ts +0 -0
  431. package/extensions/matrix/src/matrix/monitor/room-info.ts +0 -0
  432. package/extensions/matrix/src/matrix/monitor/rooms.ts +0 -0
  433. package/extensions/matrix/src/matrix/monitor/threads.ts +0 -0
  434. package/extensions/matrix/src/matrix/monitor/types.ts +0 -0
  435. package/extensions/matrix/src/matrix/poll-types.ts +0 -0
  436. package/extensions/matrix/src/matrix/probe.ts +0 -0
  437. package/extensions/matrix/src/matrix/send/client.ts +0 -0
  438. package/extensions/matrix/src/matrix/send/formatting.ts +0 -0
  439. package/extensions/matrix/src/matrix/send/media.ts +0 -0
  440. package/extensions/matrix/src/matrix/send/targets.ts +0 -0
  441. package/extensions/matrix/src/matrix/send/types.ts +0 -0
  442. package/extensions/matrix/src/matrix/send-queue.ts +0 -0
  443. package/extensions/matrix/src/matrix/send.ts +0 -0
  444. package/extensions/matrix/src/onboarding.ts +0 -0
  445. package/extensions/matrix/src/outbound.ts +0 -0
  446. package/extensions/matrix/src/resolve-targets.ts +0 -0
  447. package/extensions/matrix/src/runtime.ts +0 -0
  448. package/extensions/matrix/src/tool-actions.ts +0 -0
  449. package/extensions/matrix/src/types.ts +0 -0
  450. package/extensions/mattermost/fased.plugin.json +0 -0
  451. package/extensions/mattermost/package.json +1 -1
  452. package/extensions/mattermost/src/channel.ts +0 -0
  453. package/extensions/mattermost/src/config-schema.ts +0 -0
  454. package/extensions/mattermost/src/group-mentions.ts +0 -0
  455. package/extensions/mattermost/src/mattermost/accounts.ts +0 -0
  456. package/extensions/mattermost/src/mattermost/client.ts +0 -0
  457. package/extensions/mattermost/src/mattermost/monitor-auth.ts +0 -0
  458. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -0
  459. package/extensions/mattermost/src/mattermost/monitor-onchar.ts +0 -0
  460. package/extensions/mattermost/src/mattermost/monitor-websocket.ts +0 -0
  461. package/extensions/mattermost/src/mattermost/monitor.ts +0 -0
  462. package/extensions/mattermost/src/mattermost/probe.ts +0 -0
  463. package/extensions/mattermost/src/mattermost/reactions.test-helpers.ts +0 -0
  464. package/extensions/mattermost/src/mattermost/reactions.ts +0 -0
  465. package/extensions/mattermost/src/mattermost/reconnect.ts +0 -0
  466. package/extensions/mattermost/src/mattermost/send.ts +0 -0
  467. package/extensions/mattermost/src/normalize.ts +0 -0
  468. package/extensions/mattermost/src/onboarding-helpers.ts +0 -0
  469. package/extensions/mattermost/src/onboarding.ts +0 -0
  470. package/extensions/mattermost/src/runtime.ts +0 -0
  471. package/extensions/mattermost/src/types.ts +0 -0
  472. package/extensions/memory-core/fased.plugin.json +0 -0
  473. package/extensions/memory-core/package.json +2 -2
  474. package/extensions/memory-lancedb/config.ts +0 -0
  475. package/extensions/memory-lancedb/fased.plugin.json +0 -0
  476. package/extensions/memory-lancedb/package.json +1 -1
  477. package/extensions/minimax-portal-auth/README.md +0 -0
  478. package/extensions/minimax-portal-auth/fased.plugin.json +0 -0
  479. package/extensions/minimax-portal-auth/oauth.ts +0 -0
  480. package/extensions/minimax-portal-auth/package.json +1 -1
  481. package/extensions/msteams/CHANGELOG.md +12 -0
  482. package/extensions/msteams/fased.plugin.json +0 -0
  483. package/extensions/msteams/package.json +1 -1
  484. package/extensions/msteams/src/attachments/download.ts +0 -0
  485. package/extensions/msteams/src/attachments/graph.ts +0 -0
  486. package/extensions/msteams/src/attachments/html.ts +0 -0
  487. package/extensions/msteams/src/attachments/payload.ts +0 -0
  488. package/extensions/msteams/src/attachments/remote-media.ts +0 -0
  489. package/extensions/msteams/src/attachments/shared.ts +0 -0
  490. package/extensions/msteams/src/attachments/types.ts +0 -0
  491. package/extensions/msteams/src/attachments.ts +0 -0
  492. package/extensions/msteams/src/channel.ts +0 -0
  493. package/extensions/msteams/src/conversation-store-fs.ts +0 -0
  494. package/extensions/msteams/src/conversation-store-memory.ts +0 -0
  495. package/extensions/msteams/src/conversation-store.ts +0 -0
  496. package/extensions/msteams/src/directory-live.ts +0 -0
  497. package/extensions/msteams/src/errors.ts +0 -0
  498. package/extensions/msteams/src/file-consent-helpers.ts +0 -0
  499. package/extensions/msteams/src/file-consent.ts +0 -0
  500. package/extensions/msteams/src/file-lock.ts +0 -0
  501. package/extensions/msteams/src/graph-chat.ts +0 -0
  502. package/extensions/msteams/src/graph-upload.ts +0 -0
  503. package/extensions/msteams/src/graph-users.ts +0 -0
  504. package/extensions/msteams/src/graph.ts +0 -0
  505. package/extensions/msteams/src/inbound.ts +0 -0
  506. package/extensions/msteams/src/media-helpers.ts +0 -0
  507. package/extensions/msteams/src/mentions.ts +0 -0
  508. package/extensions/msteams/src/messenger.ts +0 -0
  509. package/extensions/msteams/src/monitor-handler/inbound-media.ts +0 -0
  510. package/extensions/msteams/src/monitor-handler/message-handler.ts +0 -0
  511. package/extensions/msteams/src/monitor-handler.ts +0 -0
  512. package/extensions/msteams/src/monitor-types.ts +0 -0
  513. package/extensions/msteams/src/monitor.ts +0 -0
  514. package/extensions/msteams/src/onboarding.ts +0 -0
  515. package/extensions/msteams/src/outbound.ts +0 -0
  516. package/extensions/msteams/src/pending-uploads.ts +0 -0
  517. package/extensions/msteams/src/policy.ts +0 -0
  518. package/extensions/msteams/src/polls-store-memory.ts +0 -0
  519. package/extensions/msteams/src/polls.ts +0 -0
  520. package/extensions/msteams/src/probe.ts +0 -0
  521. package/extensions/msteams/src/reply-dispatcher.ts +0 -0
  522. package/extensions/msteams/src/resolve-allowlist.ts +0 -0
  523. package/extensions/msteams/src/runtime.ts +0 -0
  524. package/extensions/msteams/src/sdk-types.ts +0 -0
  525. package/extensions/msteams/src/sdk.ts +0 -0
  526. package/extensions/msteams/src/send-context.ts +0 -0
  527. package/extensions/msteams/src/send.ts +0 -0
  528. package/extensions/msteams/src/sent-message-cache.ts +0 -0
  529. package/extensions/msteams/src/storage.ts +0 -0
  530. package/extensions/msteams/src/store-fs.ts +0 -0
  531. package/extensions/msteams/src/test-runtime.ts +0 -0
  532. package/extensions/msteams/src/token-response.ts +0 -0
  533. package/extensions/msteams/src/token.ts +0 -0
  534. package/extensions/nextcloud-talk/fased.plugin.json +0 -0
  535. package/extensions/nextcloud-talk/package.json +1 -1
  536. package/extensions/nextcloud-talk/src/accounts.ts +0 -0
  537. package/extensions/nextcloud-talk/src/config-schema.ts +0 -0
  538. package/extensions/nextcloud-talk/src/format.ts +0 -0
  539. package/extensions/nextcloud-talk/src/inbound.ts +0 -0
  540. package/extensions/nextcloud-talk/src/monitor.ts +0 -0
  541. package/extensions/nextcloud-talk/src/normalize.ts +0 -0
  542. package/extensions/nextcloud-talk/src/onboarding.ts +0 -0
  543. package/extensions/nextcloud-talk/src/policy.ts +0 -0
  544. package/extensions/nextcloud-talk/src/replay-guard.ts +0 -0
  545. package/extensions/nextcloud-talk/src/room-info.ts +0 -0
  546. package/extensions/nextcloud-talk/src/runtime.ts +0 -0
  547. package/extensions/nextcloud-talk/src/send.ts +0 -0
  548. package/extensions/nextcloud-talk/src/signature.ts +0 -0
  549. package/extensions/nextcloud-talk/src/types.ts +0 -0
  550. package/extensions/nostr/CHANGELOG.md +12 -0
  551. package/extensions/nostr/README.md +0 -0
  552. package/extensions/nostr/fased.plugin.json +0 -0
  553. package/extensions/nostr/package.json +1 -1
  554. package/extensions/nostr/src/channel.ts +0 -0
  555. package/extensions/nostr/src/config-schema.ts +0 -0
  556. package/extensions/nostr/src/metrics.ts +0 -0
  557. package/extensions/nostr/src/nostr-bus.ts +0 -0
  558. package/extensions/nostr/src/nostr-profile-http.ts +0 -0
  559. package/extensions/nostr/src/nostr-profile-import.ts +0 -0
  560. package/extensions/nostr/src/nostr-profile.ts +0 -0
  561. package/extensions/nostr/src/nostr-state-store.ts +0 -0
  562. package/extensions/nostr/src/onboarding.ts +0 -0
  563. package/extensions/nostr/src/runtime.ts +0 -0
  564. package/extensions/nostr/src/seen-tracker.ts +0 -0
  565. package/extensions/nostr/src/types.ts +0 -0
  566. package/extensions/nostr/test/setup.ts +0 -0
  567. package/extensions/open-prose/README.md +0 -0
  568. package/extensions/open-prose/fased.plugin.json +0 -0
  569. package/extensions/open-prose/package.json +1 -1
  570. package/extensions/open-prose/skills/prose/LICENSE +0 -0
  571. package/extensions/open-prose/skills/prose/SKILL.md +0 -0
  572. package/extensions/open-prose/skills/prose/alt-borges.md +0 -0
  573. package/extensions/open-prose/skills/prose/alts/arabian-nights.md +0 -0
  574. package/extensions/open-prose/skills/prose/alts/borges.md +0 -0
  575. package/extensions/open-prose/skills/prose/alts/folk.md +0 -0
  576. package/extensions/open-prose/skills/prose/alts/homer.md +0 -0
  577. package/extensions/open-prose/skills/prose/alts/kafka.md +0 -0
  578. package/extensions/open-prose/skills/prose/compiler.md +0 -0
  579. package/extensions/open-prose/skills/prose/examples/01-hello-world.prose +0 -0
  580. package/extensions/open-prose/skills/prose/examples/02-research-and-summarize.prose +0 -0
  581. package/extensions/open-prose/skills/prose/examples/03-code-review.prose +0 -0
  582. package/extensions/open-prose/skills/prose/examples/04-write-and-refine.prose +0 -0
  583. package/extensions/open-prose/skills/prose/examples/05-debug-issue.prose +0 -0
  584. package/extensions/open-prose/skills/prose/examples/06-explain-codebase.prose +0 -0
  585. package/extensions/open-prose/skills/prose/examples/07-refactor.prose +0 -0
  586. package/extensions/open-prose/skills/prose/examples/08-blog-post.prose +0 -0
  587. package/extensions/open-prose/skills/prose/examples/09-research-with-agents.prose +0 -0
  588. package/extensions/open-prose/skills/prose/examples/10-code-review-agents.prose +0 -0
  589. package/extensions/open-prose/skills/prose/examples/11-skills-and-imports.prose +0 -0
  590. package/extensions/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +0 -0
  591. package/extensions/open-prose/skills/prose/examples/13-variables-and-context.prose +0 -0
  592. package/extensions/open-prose/skills/prose/examples/14-composition-blocks.prose +0 -0
  593. package/extensions/open-prose/skills/prose/examples/15-inline-sequences.prose +0 -0
  594. package/extensions/open-prose/skills/prose/examples/16-parallel-reviews.prose +0 -0
  595. package/extensions/open-prose/skills/prose/examples/17-parallel-research.prose +0 -0
  596. package/extensions/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +0 -0
  597. package/extensions/open-prose/skills/prose/examples/19-advanced-parallel.prose +0 -0
  598. package/extensions/open-prose/skills/prose/examples/20-fixed-loops.prose +0 -0
  599. package/extensions/open-prose/skills/prose/examples/21-pipeline-operations.prose +0 -0
  600. package/extensions/open-prose/skills/prose/examples/22-error-handling.prose +0 -0
  601. package/extensions/open-prose/skills/prose/examples/23-retry-with-backoff.prose +0 -0
  602. package/extensions/open-prose/skills/prose/examples/24-choice-blocks.prose +0 -0
  603. package/extensions/open-prose/skills/prose/examples/25-conditionals.prose +0 -0
  604. package/extensions/open-prose/skills/prose/examples/26-parameterized-blocks.prose +0 -0
  605. package/extensions/open-prose/skills/prose/examples/27-string-interpolation.prose +0 -0
  606. package/extensions/open-prose/skills/prose/examples/28-automated-pr-review.prose +0 -0
  607. package/extensions/open-prose/skills/prose/examples/28-gas-town.prose +0 -0
  608. package/extensions/open-prose/skills/prose/examples/29-captains-chair.prose +0 -0
  609. package/extensions/open-prose/skills/prose/examples/30-captains-chair-simple.prose +0 -0
  610. package/extensions/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +0 -0
  611. package/extensions/open-prose/skills/prose/examples/33-pr-review-autofix.prose +0 -0
  612. package/extensions/open-prose/skills/prose/examples/34-content-pipeline.prose +0 -0
  613. package/extensions/open-prose/skills/prose/examples/35-feature-factory.prose +0 -0
  614. package/extensions/open-prose/skills/prose/examples/36-bug-hunter.prose +0 -0
  615. package/extensions/open-prose/skills/prose/examples/37-the-forge.prose +0 -0
  616. package/extensions/open-prose/skills/prose/examples/38-skill-scan.prose +0 -0
  617. package/extensions/open-prose/skills/prose/examples/39-architect-by-simulation.prose +0 -0
  618. package/extensions/open-prose/skills/prose/examples/40-rlm-self-refine.prose +0 -0
  619. package/extensions/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +0 -0
  620. package/extensions/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +0 -0
  621. package/extensions/open-prose/skills/prose/examples/43-rlm-pairwise.prose +0 -0
  622. package/extensions/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +0 -0
  623. package/extensions/open-prose/skills/prose/examples/45-plugin-release.prose +0 -0
  624. package/extensions/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +0 -0
  625. package/extensions/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +0 -0
  626. package/extensions/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +0 -0
  627. package/extensions/open-prose/skills/prose/examples/47-language-self-improvement.prose +0 -0
  628. package/extensions/open-prose/skills/prose/examples/48-habit-miner.prose +0 -0
  629. package/extensions/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +0 -0
  630. package/extensions/open-prose/skills/prose/examples/README.md +0 -0
  631. package/extensions/open-prose/skills/prose/examples/roadmap/README.md +0 -0
  632. package/extensions/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +0 -0
  633. package/extensions/open-prose/skills/prose/examples/roadmap/parallel-review.prose +0 -0
  634. package/extensions/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +0 -0
  635. package/extensions/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +0 -0
  636. package/extensions/open-prose/skills/prose/guidance/antipatterns.md +0 -0
  637. package/extensions/open-prose/skills/prose/guidance/patterns.md +0 -0
  638. package/extensions/open-prose/skills/prose/guidance/system-prompt.md +0 -0
  639. package/extensions/open-prose/skills/prose/help.md +0 -0
  640. package/extensions/open-prose/skills/prose/lib/README.md +0 -0
  641. package/extensions/open-prose/skills/prose/lib/calibrator.prose +0 -0
  642. package/extensions/open-prose/skills/prose/lib/cost-analyzer.prose +0 -0
  643. package/extensions/open-prose/skills/prose/lib/error-forensics.prose +0 -0
  644. package/extensions/open-prose/skills/prose/lib/inspector.prose +0 -0
  645. package/extensions/open-prose/skills/prose/lib/profiler.prose +0 -0
  646. package/extensions/open-prose/skills/prose/lib/program-improver.prose +0 -0
  647. package/extensions/open-prose/skills/prose/lib/project-memory.prose +0 -0
  648. package/extensions/open-prose/skills/prose/lib/user-memory.prose +0 -0
  649. package/extensions/open-prose/skills/prose/lib/vm-improver.prose +0 -0
  650. package/extensions/open-prose/skills/prose/primitives/session.md +0 -0
  651. package/extensions/open-prose/skills/prose/prose.md +0 -0
  652. package/extensions/open-prose/skills/prose/state/filesystem.md +0 -0
  653. package/extensions/open-prose/skills/prose/state/in-context.md +0 -0
  654. package/extensions/open-prose/skills/prose/state/postgres.md +0 -0
  655. package/extensions/open-prose/skills/prose/state/sqlite.md +0 -0
  656. package/extensions/phone-control/fased.plugin.json +0 -0
  657. package/extensions/qwen-portal-auth/README.md +0 -0
  658. package/extensions/qwen-portal-auth/fased.plugin.json +0 -0
  659. package/extensions/qwen-portal-auth/oauth.ts +0 -0
  660. package/extensions/sat-mining/fased.plugin.json +0 -0
  661. package/extensions/sat-mining/index.ts +100 -1
  662. package/extensions/sat-mining/package.json +1 -1
  663. package/extensions/sat-mining/skills/sat-mining/SKILL.md +0 -0
  664. package/extensions/sat-mining/src/audit-store.ts +45 -4
  665. package/extensions/sat-mining/src/auto-planner.ts +0 -0
  666. package/extensions/sat-mining/src/chain-time.ts +0 -0
  667. package/extensions/sat-mining/src/client.ts +13 -0
  668. package/extensions/sat-mining/src/dispute-review.ts +0 -0
  669. package/extensions/sat-mining/src/hash-spec.ts +0 -0
  670. package/extensions/sat-mining/src/planner-analytics.ts +0 -0
  671. package/extensions/sat-mining/src/planner-outcomes.ts +0 -0
  672. package/extensions/sat-mining/src/planner-policy-eval.ts +0 -0
  673. package/extensions/sat-mining/src/planner-policy.ts +0 -0
  674. package/extensions/sat-mining/src/replay.ts +0 -0
  675. package/extensions/sat-mining/src/rpc-read.ts +105 -21
  676. package/extensions/sat-mining/src/runtime.ts +2 -0
  677. package/extensions/sat-mining/src/service-read-timeout.ts +0 -0
  678. package/extensions/sat-mining/src/solana-submit.ts +593 -22
  679. package/extensions/sat-mining/src/strategy-base.ts +0 -0
  680. package/extensions/sat-mining/src/strategy-engine.ts +0 -0
  681. package/extensions/sat-mining/src/strategy-validate.ts +0 -0
  682. package/extensions/sat-mining/src/submission-ledger.ts +20 -4
  683. package/extensions/shared/resolve-target-test-helpers.ts +0 -0
  684. package/extensions/signal/fased.plugin.json +0 -0
  685. package/extensions/signal/package.json +1 -1
  686. package/extensions/signal/src/channel.ts +0 -0
  687. package/extensions/signal/src/runtime.ts +0 -0
  688. package/extensions/synology-chat/fased.plugin.json +0 -0
  689. package/extensions/synology-chat/package.json +1 -1
  690. package/extensions/synology-chat/src/accounts.ts +0 -0
  691. package/extensions/synology-chat/src/channel.ts +0 -0
  692. package/extensions/synology-chat/src/client.ts +0 -0
  693. package/extensions/synology-chat/src/runtime.ts +0 -0
  694. package/extensions/synology-chat/src/security.ts +0 -0
  695. package/extensions/synology-chat/src/types.ts +0 -0
  696. package/extensions/synology-chat/src/webhook-handler.ts +0 -0
  697. package/extensions/talk-voice/fased.plugin.json +0 -0
  698. package/extensions/thread-ownership/fased.plugin.json +0 -0
  699. package/extensions/tlon/README.md +0 -0
  700. package/extensions/tlon/fased.plugin.json +0 -0
  701. package/extensions/tlon/package.json +1 -1
  702. package/extensions/tlon/src/account-fields.ts +0 -0
  703. package/extensions/tlon/src/channel.ts +0 -0
  704. package/extensions/tlon/src/config-schema.ts +0 -0
  705. package/extensions/tlon/src/monitor/discovery.ts +0 -0
  706. package/extensions/tlon/src/monitor/history.ts +0 -0
  707. package/extensions/tlon/src/monitor/processed-messages.ts +0 -0
  708. package/extensions/tlon/src/monitor/utils.ts +0 -0
  709. package/extensions/tlon/src/onboarding.ts +0 -0
  710. package/extensions/tlon/src/runtime.ts +0 -0
  711. package/extensions/tlon/src/targets.ts +0 -0
  712. package/extensions/tlon/src/types.ts +0 -0
  713. package/extensions/tlon/src/urbit/auth.ts +0 -0
  714. package/extensions/tlon/src/urbit/base-url.ts +0 -0
  715. package/extensions/tlon/src/urbit/channel-client.ts +0 -0
  716. package/extensions/tlon/src/urbit/channel-ops.ts +0 -0
  717. package/extensions/tlon/src/urbit/context.ts +0 -0
  718. package/extensions/tlon/src/urbit/errors.ts +0 -0
  719. package/extensions/tlon/src/urbit/fetch.ts +0 -0
  720. package/extensions/tlon/src/urbit/send.ts +0 -0
  721. package/extensions/tlon/src/urbit/sse-client.ts +0 -0
  722. package/extensions/twitch/CHANGELOG.md +12 -0
  723. package/extensions/twitch/README.md +0 -0
  724. package/extensions/twitch/fased.plugin.json +0 -0
  725. package/extensions/twitch/package.json +1 -1
  726. package/extensions/twitch/src/access-control.ts +0 -0
  727. package/extensions/twitch/src/actions.ts +0 -0
  728. package/extensions/twitch/src/client-manager-registry.ts +0 -0
  729. package/extensions/twitch/src/config-schema.ts +0 -0
  730. package/extensions/twitch/src/config.ts +0 -0
  731. package/extensions/twitch/src/monitor.ts +0 -0
  732. package/extensions/twitch/src/onboarding.ts +0 -0
  733. package/extensions/twitch/src/outbound.ts +0 -0
  734. package/extensions/twitch/src/probe.ts +0 -0
  735. package/extensions/twitch/src/resolver.ts +0 -0
  736. package/extensions/twitch/src/runtime.ts +0 -0
  737. package/extensions/twitch/src/send.ts +0 -0
  738. package/extensions/twitch/src/status.ts +0 -0
  739. package/extensions/twitch/src/test-fixtures.ts +0 -0
  740. package/extensions/twitch/src/twitch-client.ts +0 -0
  741. package/extensions/twitch/src/utils/markdown.ts +0 -0
  742. package/extensions/twitch/src/utils/twitch.ts +0 -0
  743. package/extensions/twitch/test/setup.ts +0 -0
  744. package/extensions/voice-call/CHANGELOG.md +12 -0
  745. package/extensions/voice-call/README.md +0 -0
  746. package/extensions/voice-call/fased.plugin.json +0 -0
  747. package/extensions/voice-call/package.json +1 -1
  748. package/extensions/voice-call/src/allowlist.ts +0 -0
  749. package/extensions/voice-call/src/cli.ts +0 -0
  750. package/extensions/voice-call/src/core-bridge.ts +0 -0
  751. package/extensions/voice-call/src/http-headers.ts +0 -0
  752. package/extensions/voice-call/src/manager/context.ts +0 -0
  753. package/extensions/voice-call/src/manager/events.ts +0 -0
  754. package/extensions/voice-call/src/manager/lookup.ts +0 -0
  755. package/extensions/voice-call/src/manager/outbound.ts +0 -0
  756. package/extensions/voice-call/src/manager/state.ts +0 -0
  757. package/extensions/voice-call/src/manager/store.ts +0 -0
  758. package/extensions/voice-call/src/manager/timers.ts +0 -0
  759. package/extensions/voice-call/src/manager/twiml.ts +0 -0
  760. package/extensions/voice-call/src/manager.ts +0 -0
  761. package/extensions/voice-call/src/media-stream.ts +0 -0
  762. package/extensions/voice-call/src/providers/base.ts +0 -0
  763. package/extensions/voice-call/src/providers/mock.ts +0 -0
  764. package/extensions/voice-call/src/providers/plivo.ts +0 -0
  765. package/extensions/voice-call/src/providers/shared/guarded-json-api.ts +0 -0
  766. package/extensions/voice-call/src/providers/stt-openai-realtime.ts +0 -0
  767. package/extensions/voice-call/src/providers/telnyx.ts +0 -0
  768. package/extensions/voice-call/src/providers/tts-openai.ts +0 -0
  769. package/extensions/voice-call/src/providers/twilio/api.ts +0 -0
  770. package/extensions/voice-call/src/providers/twilio/webhook.ts +0 -0
  771. package/extensions/voice-call/src/providers/twilio.ts +0 -0
  772. package/extensions/voice-call/src/response-generator.ts +0 -0
  773. package/extensions/voice-call/src/runtime.ts +0 -0
  774. package/extensions/voice-call/src/telephony-audio.ts +0 -0
  775. package/extensions/voice-call/src/telephony-tts.ts +0 -0
  776. package/extensions/voice-call/src/tunnel.ts +0 -0
  777. package/extensions/voice-call/src/types.ts +0 -0
  778. package/extensions/voice-call/src/utils.ts +0 -0
  779. package/extensions/voice-call/src/voice-mapping.ts +0 -0
  780. package/extensions/voice-call/src/webhook/stale-call-reaper.ts +0 -0
  781. package/extensions/voice-call/src/webhook-security.ts +0 -0
  782. package/extensions/zalo/CHANGELOG.md +12 -0
  783. package/extensions/zalo/README.md +0 -0
  784. package/extensions/zalo/fased.plugin.json +0 -0
  785. package/extensions/zalo/package.json +1 -1
  786. package/extensions/zalo/src/accounts.ts +0 -0
  787. package/extensions/zalo/src/actions.ts +0 -0
  788. package/extensions/zalo/src/api.ts +0 -0
  789. package/extensions/zalo/src/channel.ts +0 -0
  790. package/extensions/zalo/src/config-schema.ts +0 -0
  791. package/extensions/zalo/src/group-access.ts +0 -0
  792. package/extensions/zalo/src/monitor.ts +0 -0
  793. package/extensions/zalo/src/monitor.webhook.ts +0 -0
  794. package/extensions/zalo/src/onboarding.ts +0 -0
  795. package/extensions/zalo/src/probe.ts +0 -0
  796. package/extensions/zalo/src/proxy.ts +0 -0
  797. package/extensions/zalo/src/runtime.ts +0 -0
  798. package/extensions/zalo/src/send.ts +0 -0
  799. package/extensions/zalo/src/status-issues.ts +0 -0
  800. package/extensions/zalo/src/token.ts +0 -0
  801. package/extensions/zalo/src/types.ts +0 -0
  802. package/extensions/zalouser/CHANGELOG.md +12 -0
  803. package/extensions/zalouser/README.md +0 -0
  804. package/extensions/zalouser/fased.plugin.json +0 -0
  805. package/extensions/zalouser/package.json +1 -1
  806. package/extensions/zalouser/src/accounts.ts +0 -0
  807. package/extensions/zalouser/src/channel.ts +0 -0
  808. package/extensions/zalouser/src/config-schema.ts +0 -0
  809. package/extensions/zalouser/src/monitor.ts +0 -0
  810. package/extensions/zalouser/src/onboarding.ts +0 -0
  811. package/extensions/zalouser/src/probe.ts +0 -0
  812. package/extensions/zalouser/src/runtime.ts +0 -0
  813. package/extensions/zalouser/src/send.ts +0 -0
  814. package/extensions/zalouser/src/status-issues.ts +0 -0
  815. package/extensions/zalouser/src/tool.ts +0 -0
  816. package/extensions/zalouser/src/types.ts +0 -0
  817. package/extensions/zalouser/src/zca.ts +0 -0
  818. package/install.sh +15 -16
  819. package/package.json +1 -1
  820. package/scripts/fased-launcher-runtime.mjs +0 -0
  821. package/scripts/fased-managed-updater.mjs +1 -1
  822. package/scripts/fased-signer-network-hosting.sh +18 -7
  823. package/scripts/fased-signer-owner-policy.mjs +13 -1
  824. package/scripts/run-node.mjs +0 -0
  825. package/scripts/start-managed.sh +4 -0
  826. package/shared/sat-hash-v1.json +0 -0
  827. package/skills/1password/SKILL.md +0 -0
  828. package/skills/1password/references/cli-examples.md +0 -0
  829. package/skills/1password/references/get-started.md +0 -0
  830. package/skills/apple-notes/SKILL.md +0 -0
  831. package/skills/apple-reminders/SKILL.md +0 -0
  832. package/skills/bear-notes/SKILL.md +0 -0
  833. package/skills/blogwatcher/SKILL.md +0 -0
  834. package/skills/blucli/SKILL.md +0 -0
  835. package/skills/bluebubbles/SKILL.md +0 -0
  836. package/skills/camsnap/SKILL.md +0 -0
  837. package/skills/canvas/SKILL.md +0 -0
  838. package/skills/clawhub/SKILL.md +0 -0
  839. package/skills/coding-agent/SKILL.md +0 -0
  840. package/skills/diagram-maker/SKILL.md +0 -0
  841. package/skills/diagram-maker/references/excalidraw-patterns.md +0 -0
  842. package/skills/diagram-maker/references/svg-template.md +0 -0
  843. package/skills/discord/SKILL.md +0 -0
  844. package/skills/eightctl/SKILL.md +0 -0
  845. package/skills/food-order/SKILL.md +0 -0
  846. package/skills/gemini/SKILL.md +0 -0
  847. package/skills/gh-issues/SKILL.md +0 -0
  848. package/skills/gifgrep/SKILL.md +0 -0
  849. package/skills/github/SKILL.md +0 -0
  850. package/skills/gog/SKILL.md +0 -0
  851. package/skills/goplaces/SKILL.md +0 -0
  852. package/skills/healthcheck/SKILL.md +0 -0
  853. package/skills/himalaya/SKILL.md +0 -0
  854. package/skills/himalaya/references/configuration.md +0 -0
  855. package/skills/himalaya/references/message-composition.md +0 -0
  856. package/skills/imsg/SKILL.md +0 -0
  857. package/skills/mcporter/SKILL.md +0 -0
  858. package/skills/model-usage/SKILL.md +0 -0
  859. package/skills/model-usage/references/codexbar-cli.md +0 -0
  860. package/skills/model-usage/scripts/model_usage.py +0 -0
  861. package/skills/model-usage/scripts/test_model_usage.py +0 -0
  862. package/skills/nano-banana-pro/SKILL.md +0 -0
  863. package/skills/nano-pdf/SKILL.md +0 -0
  864. package/skills/node-connect/SKILL.md +0 -0
  865. package/skills/node-inspect-debugger/SKILL.md +0 -0
  866. package/skills/notion/SKILL.md +0 -0
  867. package/skills/obsidian/SKILL.md +0 -0
  868. package/skills/openai-image-gen/SKILL.md +0 -0
  869. package/skills/openai-image-gen/scripts/gen.py +0 -0
  870. package/skills/openai-image-gen/scripts/test_gen.py +0 -0
  871. package/skills/openai-whisper/SKILL.md +0 -0
  872. package/skills/openai-whisper-api/SKILL.md +0 -0
  873. package/skills/openai-whisper-api/scripts/transcribe.sh +0 -0
  874. package/skills/opencode/SKILL.md +0 -0
  875. package/skills/openhue/SKILL.md +0 -0
  876. package/skills/oracle/SKILL.md +0 -0
  877. package/skills/ordercli/SKILL.md +0 -0
  878. package/skills/peekaboo/SKILL.md +0 -0
  879. package/skills/python-debugpy/SKILL.md +0 -0
  880. package/skills/sag/SKILL.md +0 -0
  881. package/skills/session-logs/SKILL.md +0 -0
  882. package/skills/sherpa-onnx-tts/SKILL.md +0 -0
  883. package/skills/skill-creator/SKILL.md +0 -0
  884. package/skills/skill-creator/license.txt +0 -0
  885. package/skills/skill-creator/scripts/init_skill.py +0 -0
  886. package/skills/skill-creator/scripts/package_skill.py +0 -0
  887. package/skills/skill-creator/scripts/quick_validate.py +0 -0
  888. package/skills/skill-creator/scripts/test_package_skill.py +0 -0
  889. package/skills/skill-creator/scripts/test_quick_validate.py +0 -0
  890. package/skills/skill-workshop/SKILL.md +0 -0
  891. package/skills/slack/SKILL.md +0 -0
  892. package/skills/songsee/SKILL.md +0 -0
  893. package/skills/sonoscli/SKILL.md +0 -0
  894. package/skills/spotify-player/SKILL.md +0 -0
  895. package/skills/summarize/SKILL.md +0 -0
  896. package/skills/things-mac/SKILL.md +0 -0
  897. package/skills/tmux/SKILL.md +0 -0
  898. package/skills/trello/SKILL.md +0 -0
  899. package/skills/video-frames/SKILL.md +0 -0
  900. package/skills/video-frames/scripts/frame.sh +0 -0
  901. package/skills/voice-call/SKILL.md +0 -0
  902. package/skills/wacli/SKILL.md +0 -0
  903. package/skills/wallet-actions/SKILL.md +0 -0
  904. package/skills/weather/SKILL.md +0 -0
  905. 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: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);return[{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`)}]}function ge(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 _e(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 ve(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 ye(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=ve(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 ${_e(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 be(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 xe(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 Se(e){let t=Ce(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 Ce(e){return e===`1h`?`last hour`:e===`24h`?`last 24 hours`:e===`30d`?`last 30 days`:e===`1y`?`last year`:`all recorded time`}function we(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 Te(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 Ee(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 De(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:Te(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:Fe(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:Ee(n,u,d),netY:Ee(r,f,p),x:a.length===1?50:t/(a.length-1)*100,executionLabel:i??`—`,poolLabel:l}})}function Oe(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 ke(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:Fe(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 Ae(e,t,n){return e<t?t:e>n?n:e}function je(...e){return e.reduce((e,t)=>t>e?t:e,e[0]??0n)}function Me(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 Ne(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 Pe(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 Fe(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 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 V(e){switch(String(e??``).trim()){case`claim`:case`claimCycleRewards`:case`claimCycleRewardsBatch`:case`closeResolvedCycleAccounts`:case`closeResolvedMinerCycleState`:return!0;default:return!1}}function Le(e){switch(String(e??``).trim()){case`initMinerCapital`:case`depositMinerCapital`:case`withdrawMinerCapital`:case`setActiveCommit`:return!0;default:return!1}}function Re(e){let t=String(e??``).trim();return Le(t)||t===`bootstrapRegistryReserve`?`wallet`:t===`startMining`||t===`stopMining`?`runtime`:`cycle`}function ze(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 Be(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 Ve(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
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"
@@ -16,21 +16,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
16
16
  aria-label=${i}
17
17
  >
18
18
  ${n.externalLink}
19
- </a>`:t}function He(n){return e`<div class="mining-activity-card__step">
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
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
- </div>`}function Ue(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`
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`
26
26
  <div class="mining-activity-card__row">
27
27
  <span class="mining-activity-card__icon" data-tone=${i}>
28
- ${Ve(r)}
28
+ ${He(r)}
29
29
  </span>
30
30
  <div class="mining-activity-card__main">
31
31
  <div class="mining-activity-card__topline">
32
32
  <strong>${r.title}</strong>
33
- <span>${Ie(r.at)}</span>
33
+ <span>${Le(r.at)}</span>
34
34
  </div>
35
35
  ${a?e`<div class="mining-activity-card__summary">${r.summary}</div>`:t}
36
36
  </div>
@@ -54,7 +54,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
54
54
  </div>`)}
55
55
  </div>`:t}
56
56
  ${d>0?e`<div class="mining-activity-card__steps">
57
- ${o.map(e=>He(e))}
57
+ ${o.map(e=>Ue(e))}
58
58
  </div>`:t}
59
59
  </div>`:t;return f?e`<details
60
60
  id=${s(`mining-activity`,r.key)}
@@ -69,10 +69,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
69
69
  data-tone=${i}
70
70
  >
71
71
  ${p}
72
- </div>`}function We(e){return Ge(null,e)}function Ge(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`:(Le(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 Ke(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 qe(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 Je(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 Ye(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 Xe(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 Ze(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 Qe(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 $e(e){return(e??[]).filter(e=>Qe(e.action))}function et(e,t){return t===`all`?e:e.filter(e=>e.category===t)}var tt=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 nt(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-tt}function rt(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=We(e.message);n({key:`message:${e.message}`,at:r,title:`Update`,summary:t,category:ze(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=We(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:ze(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=ve(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=be(e.status);c&&n({key:`worker-stale:${c}`,at:r,title:`Runtime`,summary:c,category:`runtime`,tone:`danger`});let l=xe(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=Ke(t.action);n({key:`action:${t.action}:${t.status}:${t.at}:${t.txHash??``}`,at:t.at,title:r,summary:r,category:Re(t.action),detail:t.message?Ge(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&&!nt({status:e.status,cycleId:t,anchorCycleId:p,cycleResolved:o,actions:s}))continue;let l=s.map(n=>{let r=Ke(n.action),i=n.message?Ge(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.`:Ke(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 it(e){let t=String(e??``).trim();return!t||t.length<10?t||`—`:`${t.slice(0,4)}…${t.slice(-4)}`}function at(e){let t=String(e??``).trim();!t||typeof navigator>`u`||!navigator.clipboard||navigator.clipboard.writeText(t).catch(()=>{})}function ot(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 st(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 ct(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">
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
- </div>`}function lt(n,r){let i=n.length?n:[];return i.length?e`
75
+ </div>`}function ut(n,r){let i=n.length?n:[];return i.length?e`
76
76
  <div class="mining-share-proof__chart">
77
77
  <div class="mining-share-proof__chart-head">
78
78
  <div>
@@ -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 ut(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 dt(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=qe({status:c,readiness:r.readiness,actionBusy:r.actionBusy,pendingAction:r.pendingAction}),b=Ye(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=je(N,O>0n?O:M.safeMaxCommitLamports,P),I=Ae(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`,_e=he?`Target max`:`Target`,ve=O>0n,ye=he?`Target max`:`Target`,be=O>=N,xe=O>0n&&O<N&&k===0n&&Number(c?.currentCapitalPendingCycleCount??0)===0,Ce=P>=N&&M.safeMaxCommitLamports>=N,Te=P>=N&&P>M.safeMaxCommitLamports,Ee=E(M.minimumCapitalForMinimumCommitLamports.toString(),`SOL`),ke=M.safeMaxCommitLamports>=N?`${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL`:`<0.25 SOL`,Fe=P>=N&&M.safeMaxCommitLamports>=N&&P>M.safeMaxCommitLamports,Ie=Number(c?.currentCapitalPendingCycleCount??0),V=Number(c?.claimBacklog?.total??0),Le=Number(c?.claimBacklog?.ready??0),Re=Number(c?.claimBacklog?.failed??0),ze=Number(c?.claimBatchCycles??5),Ve=V>0?`${V} pending claim ${V===1?`cycle`:`cycles`} · ${Le} ready · ${Re} failed retry · batch ${ze}`:`No durable claim backlog. Auto-claim batch cap is ${ze}.`,H=`Your desired commit when capital is free.`,He=M.safeMaxCommitLamports>=N?`Maximum commit usable now.`:`Need ${Ee} SOL free.`,We=ve?`Commit currently stored on-chain.`:`Saved commit preference. No miner capital is funded, so this is not stuck or withdrawable SOL.`,Ge=ve?`${ke} usable now · ${E(k.toString(),`SOL`)} SOL locked${Fe?` · 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,Ke=r.readiness?.checks.find(e=>e.key===`rpcReady`)?.ok,Qe=r.readiness?.checks.find(e=>e.key===`fundingReady`)?.ok,tt=xe?`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,nt=oe>0n&&ae<oe,dt=G||A<=0n,ft=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.`,pt=ge(c),mt=!!c?.drainOnly&&k===0n&&Ie===0,q=!!c?.enabledWanted&&!mt,ht=!!c?.drainOnly&&!mt,gt=String(c?.workers?.roundWatcher?.waitingReason??``).trim(),_t=Ze({minerEnabled:q,currentCycleId:c?.currentCycleId,waitingReason:gt,skipTimestamp:c?.workers?.roundWatcher?.lastRunAt??c?.updatedAt??new Date().toISOString(),recentActions:g}).slice(0,5),vt=[{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.`}],yt=[{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.`}],bt=s?.network===`mainnet-beta`&&r.mainnetSync?.state!==`synced`,xt=U!=null||bt||!r.readiness?.ok||!s?.walletId||!W||!Ke||!Qe||!be||!Ce,St=U?U.title:bt?b.detail:!s?.walletId||!W?`Create or select Mining wallet.`:Ke?Qe?r.readiness?.ok?be?Ce?q?`Mining is already enabled`:`Start mining.`:Te?M.safeMaxCommitLamports>=N?`Target can be saved. Safe commit is ${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL.`:`Need ${Ee} SOL free for the 0.25 SOL eligibility commit plus collateral.`:`Lower target.`:tt:y.detail:`Deposit to Wallet.`:`Set RPC.`,Ct=Xe({walletReady:!!(s?.walletId&&W&&!U),feeReady:!!(Qe&&!nt),capitalReady:be,activeCommitReady:j>=N&&j<=M.safeMaxCommitLamports,started:q,clearing:ht||y.label===`Clearing`}),J=Je({actionBusy:r.actionBusy,pendingAction:r.pendingAction,minerEnabled:q,drainOnly:ht,startPrerequisitesBlocked:xt,startBlockedReason:St}),wt=J.startBlocked,Tt=!q&&y.label===`Ready`&&wt?{label:`Stopped`,tone:U?`danger`:`warn`,detail:St}:!q&&xe?{label:`Stopped`,tone:`warn`,detail:tt}:y,Et=!q&&y.label===`Ready`&&wt&&St!==`Start mining.`&&!U,Dt=ee(r.recovery),Y=w({profile:s,status:c,readiness:r.readiness}),Ot=Y.title===`Blocked`||Y.title===`Need SOL`||Y.title===`Need capital`||Y.title===`Capital locked`||Y.title===`Need free capital`,kt=Date.now(),At=we(r.plannerWindow),jt=we(r.activityWindow),Mt=r.history?v:_.filter(e=>{let t=new Date(e.recordedAt??``).getTime();return Number.isFinite(t)&&(At==null||kt-t<=At)}),X=De(Mt),Z=Oe(Mt),Nt=!!c?.recentActions?.some(e=>e.status===`success`&&e.action===`submitCycle`&&typeof c.currentCycleId==`number`&&e.cycleId===c.currentCycleId),Pt=l.title!==`Singleton mining wallet`,Q=X.length>0?X[X.length-1]:null,Ft=$e(_t),It=r.history?.actions??Ft,Lt=r.history?.activityOutcomes??v,Rt=et(rt({error:r.error,message:r.message,notifications:r.notifications,status:c,profile:s,recentActions:It,settledHistory:Lt,recoveryBlocked:!!(c?.blocked||r.recovery?.blocked),recoveryTitle:Dt.title,recoveryDetail:r.recovery?.detail??Dt.detail,showBlockingNote:Ot,claimabilityTitle:Y.title,claimabilityDetail:Y.detail,signerRentShortfall:nt,signerRentShortfallMessage:nt?`Leave at least ${E(oe.toString(),`SOL`)} SOL in Wallet for cycle creation and fees.`:null,recentOnly:!1}),`all`).filter(e=>{if(jt==null)return!0;let t=new Date(e.at??``).getTime();return Number.isFinite(t)&&kt-t<=jt}),zt=Math.max(1,Math.ceil(Rt.length/30)),Bt=Math.min(r.recentActionsPage,zt),Vt=(Bt-1)*30,Ht=Rt.slice(Vt,Vt+30),Ut=X[0]?.timeLabel??null,Wt=Q?.timeLabel??null,Gt=c?.liveCycleReport??null,Kt=typeof c?.currentCycleId==`number`?c.currentCycleId:typeof Gt?.cycleId==`number`?Gt.cycleId:null,qt=Gt?.committedLamports??`0`,Jt=R(qt),Yt=de(Gt?.validMinerCount),Xt=Gt?.totalCommittedLamports??(Jt?qt:null),Zt=Q?.cycleId??Kt,Qt=Q?.commitLabel??(Jt?E(qt,`SOL`):`—`),$t=[Q?.strategyLabel??se(le),Q?.executionLabel??ce(L)].filter(Boolean).join(` · `),en=1440*60*1e3,tn=v.filter(e=>{let t=new Date(e.recordedAt??``).getTime();return Number.isFinite(t)&&kt-t<=en}),$=ut(tn,en),nn=De(tn,{maxPoints:24}),rn=Se({plannerWindow:r.plannerWindow,visibleCycleCount:Mt.length,matchingCycleCount:r.history?.matchingOutcomeCount??Mt.length,sampled:r.history?.sampled??!1,rangeStart:Ut,rangeEnd:Wt,latestPoint:Q,currentCycleSubmitted:Nt,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??``}
@@ -2331,18 +2331,18 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2331
2331
  </button>
2332
2332
  <div
2333
2333
  class="mining-inline-status"
2334
- data-tone=${Tt.tone}
2335
- title=${Tt.detail}
2336
- aria-label=${`Mining ${Tt.label}: ${Tt.detail}`}
2334
+ data-tone=${Et.tone}
2335
+ title=${Et.detail}
2336
+ aria-label=${`Mining ${Et.label}: ${Et.detail}`}
2337
2337
  >
2338
2338
  <span class="mining-status-dot" aria-hidden="true"></span>
2339
- <span>${Tt.label}</span>
2339
+ <span>${Et.label}</span>
2340
2340
  </div>
2341
2341
  <div
2342
2342
  class="mining-setup-rail mining-setup-rail--compact"
2343
2343
  aria-label="Mining setup checklist"
2344
2344
  >
2345
- ${Ct.map((t,r)=>e`
2345
+ ${wt.map((t,r)=>e`
2346
2346
  <div class="mining-setup-step" data-state=${t.state} title=${t.detail}>
2347
2347
  <span class="mining-setup-step__marker" aria-hidden="true">
2348
2348
  ${t.state===`done`?n.check:r+1}
@@ -2356,7 +2356,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
2356
2356
  <dialog
2357
2357
  id="mining-share-proof-dialog"
2358
2358
  class="mining-share-proof"
2359
- @click=${e=>{e.target===e.currentTarget&&ct(`mining-share-proof-dialog`)}}
2359
+ @click=${e=>{e.target===e.currentTarget&&lt(`mining-share-proof-dialog`)}}
2360
2360
  >
2361
2361
  <div class="mining-share-proof__body">
2362
2362
  <div class="mining-share-proof__head">
@@ -2367,17 +2367,17 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2367
2367
  class="btn small mining-icon-btn"
2368
2368
  type="button"
2369
2369
  title="Close mining proof"
2370
- @click=${()=>ct(`mining-share-proof-dialog`)}
2370
+ @click=${()=>lt(`mining-share-proof-dialog`)}
2371
2371
  >
2372
2372
  ${n.x}
2373
2373
  </button>
2374
2374
  </div>
2375
2375
  <div class="mining-share-proof__grid">
2376
- ${K(`Cycle`,Zt?String(Zt):`—`)}
2377
- ${K(`Capital`,Qt===`—`?`—`:`${Qt} SOL`)}
2376
+ ${K(`Cycle`,Qt?String(Qt):`—`)}
2377
+ ${K(`Capital`,$t===`—`?`—`:`${$t} SOL`)}
2378
2378
  ${K(`Earned`,Q?.satLabel?`${Q.satLabel} SAT`:`—`)}
2379
- ${K(`Strategy`,$t||`—`)}
2380
- ${$&&nn.length?lt(nn,$):t}
2379
+ ${K(`Strategy`,en||`—`)}
2380
+ ${$&&rn.length?ut(rn,$):t}
2381
2381
  ${$?e`
2382
2382
  ${K(`24h SAT`,`${$.satLabel} SAT`)}
2383
2383
  ${K(`SOL rebate`,`${$.rebateLabel} SOL`)}
@@ -2394,12 +2394,12 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2394
2394
  <strong>${U.title}</strong> · ${U.detail}
2395
2395
  </div>`:t}
2396
2396
 
2397
- ${Pt?e`<div class="mining-note mining-note--compact">
2397
+ ${Ft?e`<div class="mining-note mining-note--compact">
2398
2398
  <strong>${l.title}</strong>${l.detail?e` · ${l.detail}`:t}
2399
2399
  </div>`:t}
2400
2400
 
2401
- ${Et?e`<div class="mining-note mining-note--compact">
2402
- <strong>Cannot start yet</strong> · ${St}
2401
+ ${Dt?e`<div class="mining-note mining-note--compact">
2402
+ <strong>Cannot start yet</strong> · ${Ct}
2403
2403
  </div>`:t}
2404
2404
 
2405
2405
  <div class="mining-grid mining-grid--stats">
@@ -2415,7 +2415,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
2415
2415
  class="mining-inline-link"
2416
2416
  type="button"
2417
2417
  title="Show wallet address"
2418
- @click=${()=>ot(h,`******`,m)}
2418
+ @click=${()=>st(h,`******`,m)}
2419
2419
  >
2420
2420
  ${n.eye}
2421
2421
  </button>
@@ -2423,7 +2423,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
2423
2423
  class="mining-inline-link"
2424
2424
  type="button"
2425
2425
  title="Copy full wallet address"
2426
- @click=${()=>at(m)}
2426
+ @click=${()=>ot(m)}
2427
2427
  >
2428
2428
  ${n.copy}
2429
2429
  </button>
@@ -2431,7 +2431,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
2431
2431
  class="mining-inline-link"
2432
2432
  type="button"
2433
2433
  title="Share mining summary"
2434
- @click=${()=>st(`mining-share-proof-dialog`)}
2434
+ @click=${()=>ct(`mining-share-proof-dialog`)}
2435
2435
  >
2436
2436
  ${n.image}
2437
2437
  </button>
@@ -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:ft}])}
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
2463
  <div class="mining-metric__label" title=${H}>
2464
2464
  <span>Commit</span>
2465
2465
  ${u(H)}
2466
2466
  </div>
2467
- ${an([{label:_e,value:`${E(P.toString(),`SOL`)} SOL`,title:H},{label:`Safe commit`,value:`${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL`,title:He},{label:`Active commit`,value:`${E(j.toString(),`SOL`)} SOL`,title:We}])}
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:Kt==null?`—`:String(Kt)},{label:`Your commit`,value:Jt?`${E(qt,`SOL`)} SOL`:`—`},{label:`SOL in cycle`,value:Xt==null?`—`:`${E(Xt,`SOL`)} SOL`},{label:`Miners now`,value:Yt==null?`pending`:String(Yt)}])}
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:pt.cycleId==null?`—`:String(pt.cycleId)},{label:`SAT`,value:`${re(pt.satRaw,`SAT`)} SAT`},{label:`Net SOL`,value:`${ne(pt.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
- <div class="mining-metric__label" title=${Ve}>
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(V),title:Ve},{label:`Ready`,value:String(Le),title:Ve},{label:`Failed`,value:String(Re),title:Ve}])}
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>
@@ -2513,9 +2513,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
2513
2513
  class="mining-select"
2514
2514
  ?disabled=${G}
2515
2515
  @change=${e=>r.onStrategyPresetChange(e.currentTarget.value)}
2516
- title=${vt.find(e=>e.value===le)?.detail??``}
2516
+ title=${yt.find(e=>e.value===le)?.detail??``}
2517
2517
  >
2518
- ${vt.map(t=>e`<option value=${t.value} ?selected=${le===t.value}>
2518
+ ${yt.map(t=>e`<option value=${t.value} ?selected=${le===t.value}>
2519
2519
  ${t.label}
2520
2520
  </option>`)}
2521
2521
  </select>
@@ -2549,9 +2549,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
2549
2549
  class="mining-select"
2550
2550
  ?disabled=${G}
2551
2551
  @change=${e=>r.onStrategyExecutionChange(e.currentTarget.value)}
2552
- title=${yt.find(e=>e.value===L)?.detail??``}
2552
+ title=${bt.find(e=>e.value===L)?.detail??``}
2553
2553
  >
2554
- ${yt.map(t=>e`<option
2554
+ ${bt.map(t=>e`<option
2555
2555
  value=${t.value}
2556
2556
  ?selected=${L===t.value}
2557
2557
  >
@@ -2599,21 +2599,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
2599
2599
  inputmode="decimal"
2600
2600
  .value=${r.capitalWithdrawDraft}
2601
2601
  @input=${e=>r.onCapitalWithdrawDraftChange(e.currentTarget.value)}
2602
- placeholder=${A>0n?Ne(A):`0`}
2602
+ placeholder=${A>0n?Pe(A):`0`}
2603
2603
  />
2604
2604
  <button
2605
2605
  class="btn small"
2606
- ?disabled=${dt}
2607
- @click=${()=>r.onCapitalWithdrawDraftChange(Ne(A))}
2606
+ ?disabled=${ft}
2607
+ @click=${()=>r.onCapitalWithdrawDraftChange(Pe(A))}
2608
2608
  title="Fill the exact withdrawable miner capital amount."
2609
2609
  >
2610
2610
  Max
2611
2611
  </button>
2612
2612
  <button
2613
2613
  class="btn small"
2614
- ?disabled=${dt}
2614
+ ?disabled=${ft}
2615
2615
  @click=${r.onWithdrawCapital}
2616
- title=${ft}
2616
+ title=${pt}
2617
2617
  >
2618
2618
  ${r.capitalActionBusy===`withdraw`?`Withdrawing...`:`Withdraw`}
2619
2619
  </button>
@@ -2625,18 +2625,18 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2625
2625
  <div class="mining-stack mining-stack--commit">
2626
2626
  <div class="mining-field-row__label">
2627
2627
  <div class="mining-section-label">
2628
- ${ye}
2628
+ ${be}
2629
2629
  ${u(H)}
2630
2630
  </div>
2631
2631
  ${T?e`<div class="mining-mini-wallet">
2632
2632
  <span>Capital</span>
2633
- <span>${it(T)}</span>
2633
+ <span>${at(T)}</span>
2634
2634
  ${D?e`<a href=${D} target="_blank" rel="noreferrer">View</a>`:t}
2635
2635
  <button
2636
2636
  class="mining-inline-link"
2637
2637
  type="button"
2638
2638
  title="Copy capital address"
2639
- @click=${()=>at(T)}
2639
+ @click=${()=>ot(T)}
2640
2640
  >
2641
2641
  ${n.copy}
2642
2642
  </button>
@@ -2648,29 +2648,29 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
2648
2648
  class="mining-form-input"
2649
2649
  type="text"
2650
2650
  inputmode="decimal"
2651
- .value=${Me(s?.funding.commitLamports??`250000000`)}
2652
- @change=${e=>r.onCommitLamportsChange(Pe(e.currentTarget.value))}
2651
+ .value=${Ne(s?.funding.commitLamports??`250000000`)}
2652
+ @change=${e=>r.onCommitLamportsChange(Fe(e.currentTarget.value))}
2653
2653
  />
2654
2654
  <button
2655
2655
  class="btn small"
2656
2656
  ?disabled=${G||M.safeMaxCommitLamports<N}
2657
- @click=${e=>{let t=e.currentTarget.closest(`.mining-commit-inline`)?.querySelector(`input`);r.onUpdateCommit(Pe(t?.value??Me(s?.funding.commitLamports??`250000000`)))}}
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
  >
2660
2660
  Update
2661
2661
  </button>
2662
2662
  </div>
2663
- <div class="mining-commit-status" title=${He}>
2664
- ${Ge}
2663
+ <div class="mining-commit-status" title=${Ue}>
2664
+ ${Ke}
2665
2665
  </div>
2666
2666
  <input
2667
2667
  class="mining-form-input"
2668
2668
  type="range"
2669
- min=${Me(N)}
2670
- max=${Me(F)}
2669
+ min=${Ne(N)}
2670
+ max=${Ne(F)}
2671
2671
  step="0.01"
2672
- .value=${Me(I)}
2673
- @change=${e=>r.onCommitLamportsChange(Pe(e.currentTarget.value))}
2672
+ .value=${Ne(I)}
2673
+ @change=${e=>r.onCommitLamportsChange(Fe(e.currentTarget.value))}
2674
2674
  />
2675
2675
  </div>
2676
2676
  </div>
@@ -2697,25 +2697,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
2697
2697
  class="mining-recent-actions mining-recent-actions--scroller"
2698
2698
  style="margin-top: 14px;"
2699
2699
  >
2700
- ${Ht.length?Ht.map(e=>Ue(e)):e`
2700
+ ${Ut.length?Ut.map(e=>We(e)):e`
2701
2701
  <div class="mining-note" style="margin-top: 0">
2702
- <div>${Be(`all`)}</div>
2702
+ <div>${Ve(`all`)}</div>
2703
2703
  </div>
2704
2704
  `}
2705
2705
  </div>
2706
- ${zt>1?e`<div class="mining-pager mining-pager--right">
2706
+ ${Bt>1?e`<div class="mining-pager mining-pager--right">
2707
2707
  <div class="mining-header-actions">
2708
2708
  <button
2709
2709
  class="btn small"
2710
- ?disabled=${Bt<=1}
2711
- @click=${()=>r.onRecentActionsPageChange(Bt-1)}
2710
+ ?disabled=${Vt<=1}
2711
+ @click=${()=>r.onRecentActionsPageChange(Vt-1)}
2712
2712
  >
2713
2713
  Prev
2714
2714
  </button>
2715
2715
  <button
2716
2716
  class="btn small"
2717
- ?disabled=${Bt>=zt}
2718
- @click=${()=>r.onRecentActionsPageChange(Bt+1)}
2717
+ ?disabled=${Vt>=Bt}
2718
+ @click=${()=>r.onRecentActionsPageChange(Vt+1)}
2719
2719
  >
2720
2720
  Next
2721
2721
  </button>
@@ -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 ${rn.windowLabel}
2891
+ Window ${an.windowLabel}
2892
2892
  </div>
2893
2893
  <div class="mining-history-bars__range">
2894
- ${rn.dataRangeLabel?`Data ${rn.dataRangeLabel}`:Q?`Latest ${Q.satLabel} SAT`:``}
2894
+ ${an.dataRangeLabel?`Data ${an.dataRangeLabel}`:Q?`Latest ${Q.satLabel} SAT`:``}
2895
2895
  </div>
2896
2896
  </div>
2897
2897
  </div>`}
@@ -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 ${rn.windowLabel}
2915
+ Window ${an.windowLabel}
2916
2916
  </div>
2917
2917
  <div class="mining-history-bars__range">
2918
- ${rn.dataRangeLabel?`Data ${rn.dataRangeLabel}`:Q?`Latest ${Q.netLabel} SOL`:``}
2918
+ ${an.dataRangeLabel?`Data ${an.dataRangeLabel}`:Q?`Latest ${Q.netLabel} SOL`:``}
2919
2919
  </div>
2920
2920
  </div>
2921
2921
  </div>`}
@@ -2945,9 +2945,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
2945
2945
  </div>
2946
2946
  </div>
2947
2947
  <div class="mining-history-list">
2948
- ${Rt.length?Rt.map(e=>Ue(e)):e`
2948
+ ${zt.length?zt.map(e=>We(e)):e`
2949
2949
  <div class="mining-note" style="margin-top: 0">
2950
- ${Be(`all`)}
2950
+ ${Ve(`all`)}
2951
2951
  </div>
2952
2952
  `}
2953
2953
  </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{rt as buildMiningActivityEntries,De as buildMiningLineSeries,Xe as buildMiningSetupChecklist,Oe as buildMiningStrategyAnalytics,ke as buildPlannerVisualSeries,Ze as buildVisibleRecentActions,xe as describeChainTimeHealth,w as describeClaimability,ye as describeCurrentCycleDrift,qe as describeDashboardState,z as describeLiveCommitSizing,Je as describeMiningHeaderActions,Se as describeMiningHistoryWindow,p as describeMiningWalletRoleConflict,ee as describeRecoveryPath,_ as describeRiskMode,v as describeRuntimeStatus,d as describeSelectedWalletSuitability,m as describeStrategyMode,g as describeStrategyTransparency,et as filterMiningActivityEntries,C as formatMiningDraftTimestamp,x as miningAddressExplorerUrl,b as miningExplorerUrl,S as miningRecentActionExplorerUrl,dt as renderMining,ge 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-BgHFh0ei.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