@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.
- package/CHANGELOG.md +33 -0
- package/LICENSE +0 -0
- package/README.md +16 -9
- package/assets/avatar-placeholder.svg +0 -0
- package/assets/chrome-extension/README.md +0 -0
- package/assets/chrome-extension/background-utils.js +0 -0
- package/assets/chrome-extension/background.js +0 -0
- package/assets/chrome-extension/icons/icon128.png +0 -0
- package/assets/chrome-extension/icons/icon16.png +0 -0
- package/assets/chrome-extension/icons/icon32.png +0 -0
- package/assets/chrome-extension/icons/icon48.png +0 -0
- package/assets/chrome-extension/manifest.json +0 -0
- package/assets/chrome-extension/options-validation.js +0 -0
- package/assets/chrome-extension/options.html +0 -0
- package/assets/chrome-extension/options.js +0 -0
- package/config/official-external-plugin-catalog.json +0 -0
- package/config/sat-runtime.env +0 -0
- package/config/signer-policies/README.md +10 -1
- package/config/signer-protocol-v2.json +2 -0
- package/dist/acp/client.js +2 -2
- package/dist/acp/secret-file.js +2 -2
- package/dist/agents/agent-scope.js +2 -2
- package/dist/agents/apply-patch.js +8 -8
- package/dist/agents/auth-profiles/paths.js +2 -2
- package/dist/agents/auth-profiles/store.js +4 -4
- package/dist/agents/bash-tools.shared.js +2 -2
- package/dist/agents/cli-credentials.js +4 -4
- package/dist/agents/docs-path.js +3 -3
- package/dist/agents/embedded-pi-mcp.js +4 -4
- package/dist/agents/identity-avatar.js +3 -3
- package/dist/agents/identity-file.js +2 -2
- package/dist/agents/openai-codex-app-server.js +5 -5
- package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
- package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
- package/dist/agents/pi-model-discovery.js +6 -6
- package/dist/agents/pi-project-settings.js +3 -3
- package/dist/agents/sandbox/fs-bridge.js +2 -2
- package/dist/agents/session-dirs.js +4 -4
- package/dist/agents/session-write-lock.js +13 -13
- package/dist/agents/shell-utils.js +5 -5
- package/dist/agents/skills/bundled-dir.js +4 -4
- package/dist/agents/skills/local-loader.js +6 -6
- package/dist/agents/skills/plugin-skills.js +2 -2
- package/dist/agents/skills/trust.js +6 -6
- package/dist/agents/skills/workspace.js +22 -22
- package/dist/agents/skills-install-download.js +7 -7
- package/dist/agents/skills-install-plan.js +2 -2
- package/dist/agents/skills-install.js +2 -2
- package/dist/agents/skills-status.js +2 -2
- package/dist/agents/subagent-depth.js +2 -2
- package/dist/agents/system-prompt-params.js +2 -2
- package/dist/agents/workspace.js +22 -22
- package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
- package/dist/auto-reply/reply/agent-runner.js +2 -2
- package/dist/auto-reply/reply/commands-export-session.js +7 -7
- package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
- package/dist/auto-reply/reply/post-compaction-context.js +3 -3
- package/dist/auto-reply/reply/session.js +3 -3
- package/dist/auto-reply/skill-commands.js +3 -3
- package/dist/auto-reply/status.js +6 -6
- package/dist/brand.js +1 -1
- package/dist/browser/chrome.executables.js +3 -3
- package/dist/browser/chrome.js +3 -3
- package/dist/browser/chrome.profile-decoration.js +6 -6
- package/dist/browser/profiles-service.js +2 -2
- package/dist/browser/server-context.js +2 -2
- package/dist/browser/trash.js +4 -4
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/HOOK.md +0 -0
- package/dist/bundled/bootstrap-extra-files/HOOK.md +0 -0
- package/dist/bundled/command-logger/HOOK.md +0 -0
- package/dist/bundled/session-memory/HOOK.md +0 -0
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/canvas-host/a2ui/index.html +0 -0
- package/dist/canvas-host/server.js +4 -4
- package/dist/capabilities/catalog.js +3 -3
- package/dist/channels/plugins/catalog.js +3 -3
- package/dist/cli/browser-cli-extension.js +6 -6
- package/dist/cli/command-format.js +2 -2
- package/dist/cli/cron-cli/register.cron-simple.js +2 -2
- package/dist/cli/dns-cli.js +9 -9
- package/dist/cli/gateway-cli/dev.js +5 -5
- package/dist/cli/gateway-cli/run.js +2 -2
- package/dist/cli/hooks-cli.js +5 -5
- package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
- package/dist/cli/memory-cli.js +7 -7
- package/dist/cli/nodes-media-utils.js +2 -2
- package/dist/cli/plugins-cli.js +2 -2
- package/dist/cli/secrets-cli.js +3 -3
- package/dist/cli/windows-argv.js +2 -2
- package/dist/commands/dashboard-link.js +3 -3
- package/dist/commands/doctor-install.js +5 -5
- package/dist/commands/doctor-memory-search.js +2 -2
- package/dist/commands/doctor-platform-notes.js +2 -2
- package/dist/commands/doctor-sandbox.js +2 -2
- package/dist/commands/doctor-state-integrity.js +23 -23
- package/dist/commands/doctor-workspace.js +3 -3
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/managed-up.js +2 -2
- package/dist/commands/onboard-auth.credentials.js +3 -3
- package/dist/commands/onboarding/plugin-install.js +2 -2
- package/dist/commands/sessions-cleanup.js +2 -2
- package/dist/commands/signal-install.js +6 -6
- package/dist/commands/status-all/channels.js +2 -2
- package/dist/commands/wallet.js +10 -10
- package/dist/config/cache-utils.js +2 -2
- package/dist/config/includes.js +5 -5
- package/dist/config/io.js +2 -2
- package/dist/config/paths.js +3 -3
- package/dist/config/sat-runtime-ids.js +3 -3
- package/dist/config/sessions/disk-budget.js +6 -6
- package/dist/config/sessions/paths.js +2 -2
- package/dist/config/sessions/store.js +17 -17
- package/dist/config/sessions/transcript.js +4 -4
- package/dist/config/talk.js +2 -2
- package/dist/control-ui/apple-touch-icon.png +0 -0
- package/dist/control-ui/assets/{app-bR-fO5ty.js → app-DYxADzeH.js} +5 -5
- package/dist/control-ui/assets/{index-ckCxHwjy.js → index-vw_10Zeo.js} +3 -3
- package/dist/control-ui/assets/{mining-BgHFh0ei.js → mining-Dg-3ll0F.js} +69 -69
- package/dist/control-ui/boot-watchdog.js +0 -0
- package/dist/control-ui/fased-logo.svg +0 -0
- package/dist/control-ui/favicon-32.png +0 -0
- package/dist/control-ui/favicon.ico +0 -0
- package/dist/control-ui/favicon.svg +0 -0
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/manifest.webmanifest +0 -0
- package/dist/control-ui/version.json +1 -1
- package/dist/cron/service/store.js +2 -2
- package/dist/cron/store.js +6 -6
- package/dist/daemon/systemd-system.js +5 -5
- package/dist/discord/monitor/thread-bindings.state.js +2 -2
- package/dist/export-html/template.css +0 -0
- package/dist/export-html/template.html +0 -0
- package/dist/export-html/template.js +0 -0
- package/dist/export-html/vendor/highlight.min.js +0 -0
- package/dist/export-html/vendor/marked.min.js +0 -0
- package/dist/extensions/sat-mining/src/rpc-read.js +59 -20
- package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
- package/dist/extensions/sat-mining/src/solana-submit.js +396 -9
- package/dist/extensions/sat-mining/src/submission-ledger.js +24 -4
- package/dist/federation/marketplace-delivery-outbox.js +5 -5
- package/dist/federation/marketplace-settlement-ledger.js +4 -4
- package/dist/gateway/a2a-task-store.js +22 -22
- package/dist/gateway/control-ui-boot-check.js +6 -6
- package/dist/gateway/control-ui-login.js +7 -7
- package/dist/gateway/control-ui.js +9 -9
- package/dist/gateway/federation-marketplace-run-store.js +14 -14
- package/dist/gateway/hooks-mapping.js +4 -4
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +4 -4
- package/dist/gateway/server-methods/chat.js +3 -3
- package/dist/gateway/server-methods/sessions.js +6 -6
- package/dist/gateway/server-methods/usage.js +2 -2
- package/dist/gateway/session-compaction-checkpoints.js +4 -4
- package/dist/gateway/session-utils.fs.js +24 -24
- package/dist/gateway/session-utils.js +6 -6
- package/dist/hooks/bundled-dir.js +4 -4
- package/dist/hooks/gmail-setup-utils.js +6 -6
- package/dist/hooks/import-url.js +2 -2
- package/dist/hooks/loader.js +4 -4
- package/dist/hooks/workspace.js +7 -7
- package/dist/infra/archive.js +17 -17
- package/dist/infra/boundary-file-read.js +2 -2
- package/dist/infra/boundary-path.js +15 -15
- package/dist/infra/brew.js +2 -2
- package/dist/infra/control-ui-assets.js +14 -14
- package/dist/infra/device-auth-store.js +8 -8
- package/dist/infra/device-identity.js +8 -8
- package/dist/infra/dotenv.js +2 -2
- package/dist/infra/exec-approvals.js +8 -8
- package/dist/infra/exec-command-resolution.js +4 -4
- package/dist/infra/exec-safe-bin-trust.js +2 -2
- package/dist/infra/fased-root.js +5 -5
- package/dist/infra/fs-safe.js +14 -14
- package/dist/infra/gateway-lock.js +11 -11
- package/dist/infra/git-commit.js +5 -5
- package/dist/infra/git-root.js +4 -4
- package/dist/infra/hosted-runtime-artifact.js +3 -3
- package/dist/infra/is-main.js +2 -2
- package/dist/infra/json-file.js +7 -7
- package/dist/infra/managed-runtime-bootstrap.js +6 -6
- package/dist/infra/outbound/delivery-queue.js +16 -16
- package/dist/infra/path-env.js +3 -3
- package/dist/infra/ports-lsof.js +4 -4
- package/dist/infra/provider-usage.auth.js +3 -3
- package/dist/infra/safe-open-sync.js +2 -2
- package/dist/infra/session-cost-usage.js +9 -9
- package/dist/infra/shell-env.js +2 -2
- package/dist/infra/state-migrations.fs.js +6 -6
- package/dist/infra/state-migrations.js +23 -23
- package/dist/infra/tmp-fased-dir.js +6 -6
- package/dist/infra/widearea-dns.js +3 -3
- package/dist/infra/wsl.js +2 -2
- package/dist/line/accounts.js +2 -2
- package/dist/line/download.js +2 -2
- package/dist/logging/config.js +3 -3
- package/dist/logging/logger.js +7 -7
- package/dist/managed/federation.js +3 -3
- package/dist/managed/tunnel.js +3 -3
- package/dist/media/store.js +13 -13
- package/dist/media-understanding/runner.js +3 -3
- package/dist/memory/embeddings.js +2 -2
- package/dist/memory/internal.js +10 -10
- package/dist/memory/manager-sync-ops.js +7 -7
- package/dist/memory/repair-executor.js +17 -17
- package/dist/node-host/invoke-system-run-plan.js +8 -8
- package/dist/node-host/invoke.js +2 -2
- package/dist/node-host/runner.js +3 -3
- package/dist/pairing/pairing-store.js +3 -3
- package/dist/plugin-sdk/{audio-preflight-BYxAt775.js → audio-preflight-BFLoas5R.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
- package/dist/plugin-sdk/{chunk-items-DIRHG2gJ.js → chunk-items-TErs62MC.js} +1 -1
- package/dist/plugin-sdk/command-status.js +1 -1
- package/dist/plugin-sdk/{config-schema-BOT7kHb6.js → config-schema-BPnaDBwZ.js} +63 -8
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +3 -3
- package/dist/plugin-sdk/file-lock.js +10 -10
- package/dist/plugin-sdk/index.d.ts +4 -4
- package/dist/plugin-sdk/index.js +1 -1
- package/dist/plugin-sdk/json-store.js +6 -6
- package/dist/plugin-sdk/{monitor-BCFDaqJ-.js → monitor-FuBPk-AL.js} +3 -3
- package/dist/plugin-sdk/{monitor-BgbjRiPM.js → monitor-sW6dQdX1.js} +3 -3
- package/dist/plugin-sdk/{openresponses-http-DFf87SMM.js → openresponses-http-CVZq0H-P.js} +1 -1
- package/dist/plugin-sdk/{pairing-message-CS-9BHug.d.ts → pairing-message-L6L6L2YF.d.ts} +1 -1
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
- package/dist/plugin-sdk/sat-runtime.d.ts +69 -2
- package/dist/plugin-sdk/sat-runtime.js +1 -1
- package/dist/plugin-sdk/{slack-BUTt8cxK.js → slack-BZISDxDd.js} +3 -3
- package/dist/plugin-sdk/slack.d.ts +3 -3
- package/dist/plugin-sdk/{sticker-cache-D0wHVqjt.js → sticker-cache-B0aPv6Lg.js} +2 -2
- package/dist/plugin-sdk/{telegram-actions-CC_qN4v0.js → telegram-actions-H3gePEn6.js} +2 -2
- package/dist/plugin-sdk/telegram.d.ts +3 -3
- package/dist/plugin-sdk/{tmp-fased-dir-xOTGlzBE.d.ts → tmp-fased-dir-d1CmFAnJ.d.ts} +1 -1
- package/dist/plugin-sdk/{types-C3avNytw.d.ts → types-DUjYaWB2.d.ts} +3 -3
- package/dist/plugin-sdk/{types-DWfbSAaM.d.ts → types-xWjHXl1z.d.ts} +1 -1
- package/dist/plugin-sdk/{web-BXsJ1vqe.js → web-JwP9PAZR.js} +1 -1
- package/dist/plugin-sdk/whatsapp.d.ts +3 -3
- package/dist/plugins/bundled-dir.js +3 -3
- package/dist/plugins/discovery.js +11 -11
- package/dist/plugins/loader.js +13 -13
- package/dist/plugins/manifest-registry.js +2 -2
- package/dist/plugins/manifest.js +4 -4
- package/dist/plugins/path-safety.js +3 -3
- package/dist/plugins/status-cache.js +9 -9
- package/dist/plugins/update.js +3 -3
- package/dist/plugins/web-search-install-catalog.js +3 -3
- package/dist/secrets/apply.js +16 -16
- package/dist/secrets/audit.js +11 -11
- package/dist/secrets/shared.js +9 -9
- package/dist/security/scan-paths.js +2 -2
- package/dist/shared/config-eval.js +2 -2
- package/dist/shared/pid-alive.js +2 -2
- package/dist/tasks/standing-orders.js +5 -5
- package/dist/tasks/task-flow-registry.js +5 -5
- package/dist/tasks/task-registry.js +5 -5
- package/dist/tasks/workflow-definitions.js +6 -6
- package/dist/telegram/token.js +5 -5
- package/dist/utils.js +5 -5
- package/dist/wallet/external-submission-ledger.js +14 -14
- package/dist/wallet/local-socket-signer-protocol.js +52 -0
- package/dist/wallet/providers/local-socket-signer-adapter.js +3 -2
- package/dist/wallet/signer-network-admin.js +9 -3
- package/dist/wallet/signer-protocol-v2.generated.js +2 -0
- package/dist/wallet/solana-network-discovery.js +113 -0
- package/dist/wallet/turnkey-reviewed-state.js +14 -14
- package/dist/wallet/wallet-approval-auth.js +3 -3
- package/dist/wallet/wallet-atomic-state.js +12 -12
- package/dist/wallet/wallet-audit-log.js +5 -5
- package/dist/wallet/wallet-inbound-events.js +3 -3
- package/dist/wallet/wallet-observability.js +5 -5
- package/dist/wallet/wallet-policy.js +8 -6
- package/dist/wallet/wallet-provider-registry.js +7 -7
- package/dist/wallet/wallet-runtime-config.js +3 -3
- package/dist/wallet/wallet-secrets-store.js +22 -22
- package/dist/wallet/wallet-send-approvals.js +21 -21
- package/dist/wallet/wallet-send-execution-ledger.js +3 -3
- package/dist/wallet/wallet-settlement-links.js +3 -3
- package/dist/wallet/wallet-standard-review.js +14 -14
- package/dist/web/accounts.js +3 -3
- package/dist/web/auth-store.js +18 -18
- package/dist/web/session.js +4 -4
- package/dist/wizard/host-security-capability.js +3 -3
- package/dist/wizard/onboarding.host-security.js +3 -3
- package/dist/wizard/onboarding.js +17 -15
- package/dist/wizard/onboarding.wallet.js +27 -27
- package/docs/reference/templates/AGENTS.dev.md +0 -0
- package/docs/reference/templates/AGENTS.md +0 -0
- package/docs/reference/templates/BOOT.md +0 -0
- package/docs/reference/templates/BOOTSTRAP.md +0 -0
- package/docs/reference/templates/HEARTBEAT.md +0 -0
- package/docs/reference/templates/IDENTITY.dev.md +0 -0
- package/docs/reference/templates/IDENTITY.md +0 -0
- package/docs/reference/templates/SOUL.dev.md +0 -0
- package/docs/reference/templates/SOUL.md +0 -0
- package/docs/reference/templates/TOOLS.dev.md +0 -0
- package/docs/reference/templates/TOOLS.md +0 -0
- package/docs/reference/templates/USER.dev.md +0 -0
- package/docs/reference/templates/USER.md +0 -0
- package/extensions/acpx/fased.plugin.json +0 -0
- package/extensions/acpx/package.json +1 -1
- package/extensions/acpx/skills/acp-router/SKILL.md +0 -0
- package/extensions/acpx/src/config.ts +0 -0
- package/extensions/acpx/src/ensure.ts +0 -0
- package/extensions/acpx/src/mcp-readonly-tool-registry.ts +0 -0
- package/extensions/acpx/src/mcp-status-adapter.ts +0 -0
- package/extensions/acpx/src/runtime-internals/events.ts +0 -0
- package/extensions/acpx/src/runtime-internals/process.ts +0 -0
- package/extensions/acpx/src/runtime-internals/shared.ts +0 -0
- package/extensions/acpx/src/runtime.ts +0 -0
- package/extensions/acpx/src/service.ts +0 -0
- package/extensions/bluebubbles/README.md +0 -0
- package/extensions/bluebubbles/fased.plugin.json +0 -0
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/bluebubbles/src/account-resolve.ts +0 -0
- package/extensions/bluebubbles/src/accounts.ts +0 -0
- package/extensions/bluebubbles/src/actions.ts +0 -0
- package/extensions/bluebubbles/src/attachments.ts +0 -0
- package/extensions/bluebubbles/src/channel.ts +0 -0
- package/extensions/bluebubbles/src/chat.ts +0 -0
- package/extensions/bluebubbles/src/config-schema.ts +0 -0
- package/extensions/bluebubbles/src/history.ts +0 -0
- package/extensions/bluebubbles/src/media-send.ts +0 -0
- package/extensions/bluebubbles/src/monitor-normalize.ts +0 -0
- package/extensions/bluebubbles/src/monitor-processing.ts +0 -0
- package/extensions/bluebubbles/src/monitor-reply-cache.ts +0 -0
- package/extensions/bluebubbles/src/monitor-shared.ts +0 -0
- package/extensions/bluebubbles/src/monitor.ts +0 -0
- package/extensions/bluebubbles/src/multipart.ts +0 -0
- package/extensions/bluebubbles/src/onboarding.ts +0 -0
- package/extensions/bluebubbles/src/probe.ts +0 -0
- package/extensions/bluebubbles/src/reactions.ts +0 -0
- package/extensions/bluebubbles/src/request-url.ts +0 -0
- package/extensions/bluebubbles/src/runtime.ts +0 -0
- package/extensions/bluebubbles/src/send-helpers.ts +0 -0
- package/extensions/bluebubbles/src/send.ts +0 -0
- package/extensions/bluebubbles/src/targets.ts +0 -0
- package/extensions/bluebubbles/src/test-mocks.ts +0 -0
- package/extensions/bluebubbles/src/types.ts +0 -0
- package/extensions/copilot-proxy/README.md +0 -0
- package/extensions/copilot-proxy/fased.plugin.json +0 -0
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/device-pair/fased.plugin.json +0 -0
- package/extensions/diagnostics-otel/fased.plugin.json +0 -0
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/diagnostics-otel/src/service.ts +0 -0
- package/extensions/fased-federation/README.md +0 -0
- package/extensions/fased-federation/fased.plugin.json +0 -0
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/README.md +0 -0
- package/extensions/google-gemini-cli-auth/fased.plugin.json +0 -0
- package/extensions/google-gemini-cli-auth/oauth.ts +0 -0
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/fased.plugin.json +0 -0
- package/extensions/imessage/package.json +1 -1
- package/extensions/imessage/src/channel.ts +0 -0
- package/extensions/imessage/src/runtime.ts +0 -0
- package/extensions/irc/fased.plugin.json +0 -0
- package/extensions/irc/package.json +1 -1
- package/extensions/irc/src/accounts.ts +0 -0
- package/extensions/irc/src/channel.ts +0 -0
- package/extensions/irc/src/client.ts +0 -0
- package/extensions/irc/src/config-schema.ts +0 -0
- package/extensions/irc/src/connect-options.ts +0 -0
- package/extensions/irc/src/control-chars.ts +0 -0
- package/extensions/irc/src/inbound.ts +0 -0
- package/extensions/irc/src/monitor.ts +0 -0
- package/extensions/irc/src/normalize.ts +0 -0
- package/extensions/irc/src/onboarding.ts +0 -0
- package/extensions/irc/src/policy.ts +0 -0
- package/extensions/irc/src/probe.ts +0 -0
- package/extensions/irc/src/protocol.ts +0 -0
- package/extensions/irc/src/runtime.ts +0 -0
- package/extensions/irc/src/send.ts +0 -0
- package/extensions/irc/src/types.ts +0 -0
- package/extensions/line/fased.plugin.json +0 -0
- package/extensions/line/package.json +1 -1
- package/extensions/line/src/card-command.ts +0 -0
- package/extensions/line/src/channel.ts +0 -0
- package/extensions/line/src/runtime.ts +0 -0
- package/extensions/llm-task/README.md +0 -0
- package/extensions/llm-task/fased.plugin.json +0 -0
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/README.md +0 -0
- package/extensions/lobster/SKILL.md +0 -0
- package/extensions/lobster/fased.plugin.json +0 -0
- package/extensions/lobster/package.json +1 -1
- package/extensions/lobster/src/test-helpers.ts +0 -0
- package/extensions/lobster/src/windows-spawn.ts +0 -0
- package/extensions/matrix/CHANGELOG.md +12 -0
- package/extensions/matrix/fased.plugin.json +0 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/matrix/src/actions.ts +0 -0
- package/extensions/matrix/src/channel.ts +0 -0
- package/extensions/matrix/src/config-schema.ts +0 -0
- package/extensions/matrix/src/directory-live.ts +0 -0
- package/extensions/matrix/src/group-mentions.ts +0 -0
- package/extensions/matrix/src/matrix/accounts.ts +0 -0
- package/extensions/matrix/src/matrix/actions/client.ts +0 -0
- package/extensions/matrix/src/matrix/actions/limits.ts +0 -0
- package/extensions/matrix/src/matrix/actions/messages.ts +0 -0
- package/extensions/matrix/src/matrix/actions/pins.ts +0 -0
- package/extensions/matrix/src/matrix/actions/reactions.ts +0 -0
- package/extensions/matrix/src/matrix/actions/room.ts +0 -0
- package/extensions/matrix/src/matrix/actions/summary.ts +0 -0
- package/extensions/matrix/src/matrix/actions/types.ts +0 -0
- package/extensions/matrix/src/matrix/actions.ts +0 -0
- package/extensions/matrix/src/matrix/active-client.ts +0 -0
- package/extensions/matrix/src/matrix/client/config.ts +0 -0
- package/extensions/matrix/src/matrix/client/create-client.ts +0 -0
- package/extensions/matrix/src/matrix/client/logging.ts +0 -0
- package/extensions/matrix/src/matrix/client/runtime.ts +0 -0
- package/extensions/matrix/src/matrix/client/shared.ts +0 -0
- package/extensions/matrix/src/matrix/client/storage.ts +0 -0
- package/extensions/matrix/src/matrix/client/types.ts +0 -0
- package/extensions/matrix/src/matrix/client-bootstrap.ts +0 -0
- package/extensions/matrix/src/matrix/client.ts +0 -0
- package/extensions/matrix/src/matrix/credentials.ts +0 -0
- package/extensions/matrix/src/matrix/deps.ts +0 -0
- package/extensions/matrix/src/matrix/format.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/access-policy.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/allowlist.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/auto-join.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/direct.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/events.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/handler.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/inbound-body.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/location.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/media.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/mentions.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/replies.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/room-info.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/rooms.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/threads.ts +0 -0
- package/extensions/matrix/src/matrix/monitor/types.ts +0 -0
- package/extensions/matrix/src/matrix/poll-types.ts +0 -0
- package/extensions/matrix/src/matrix/probe.ts +0 -0
- package/extensions/matrix/src/matrix/send/client.ts +0 -0
- package/extensions/matrix/src/matrix/send/formatting.ts +0 -0
- package/extensions/matrix/src/matrix/send/media.ts +0 -0
- package/extensions/matrix/src/matrix/send/targets.ts +0 -0
- package/extensions/matrix/src/matrix/send/types.ts +0 -0
- package/extensions/matrix/src/matrix/send-queue.ts +0 -0
- package/extensions/matrix/src/matrix/send.ts +0 -0
- package/extensions/matrix/src/onboarding.ts +0 -0
- package/extensions/matrix/src/outbound.ts +0 -0
- package/extensions/matrix/src/resolve-targets.ts +0 -0
- package/extensions/matrix/src/runtime.ts +0 -0
- package/extensions/matrix/src/tool-actions.ts +0 -0
- package/extensions/matrix/src/types.ts +0 -0
- package/extensions/mattermost/fased.plugin.json +0 -0
- package/extensions/mattermost/package.json +1 -1
- package/extensions/mattermost/src/channel.ts +0 -0
- package/extensions/mattermost/src/config-schema.ts +0 -0
- package/extensions/mattermost/src/group-mentions.ts +0 -0
- package/extensions/mattermost/src/mattermost/accounts.ts +0 -0
- package/extensions/mattermost/src/mattermost/client.ts +0 -0
- package/extensions/mattermost/src/mattermost/monitor-auth.ts +0 -0
- package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -0
- package/extensions/mattermost/src/mattermost/monitor-onchar.ts +0 -0
- package/extensions/mattermost/src/mattermost/monitor-websocket.ts +0 -0
- package/extensions/mattermost/src/mattermost/monitor.ts +0 -0
- package/extensions/mattermost/src/mattermost/probe.ts +0 -0
- package/extensions/mattermost/src/mattermost/reactions.test-helpers.ts +0 -0
- package/extensions/mattermost/src/mattermost/reactions.ts +0 -0
- package/extensions/mattermost/src/mattermost/reconnect.ts +0 -0
- package/extensions/mattermost/src/mattermost/send.ts +0 -0
- package/extensions/mattermost/src/normalize.ts +0 -0
- package/extensions/mattermost/src/onboarding-helpers.ts +0 -0
- package/extensions/mattermost/src/onboarding.ts +0 -0
- package/extensions/mattermost/src/runtime.ts +0 -0
- package/extensions/mattermost/src/types.ts +0 -0
- package/extensions/memory-core/fased.plugin.json +0 -0
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/config.ts +0 -0
- package/extensions/memory-lancedb/fased.plugin.json +0 -0
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/README.md +0 -0
- package/extensions/minimax-portal-auth/fased.plugin.json +0 -0
- package/extensions/minimax-portal-auth/oauth.ts +0 -0
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/fased.plugin.json +0 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/msteams/src/attachments/download.ts +0 -0
- package/extensions/msteams/src/attachments/graph.ts +0 -0
- package/extensions/msteams/src/attachments/html.ts +0 -0
- package/extensions/msteams/src/attachments/payload.ts +0 -0
- package/extensions/msteams/src/attachments/remote-media.ts +0 -0
- package/extensions/msteams/src/attachments/shared.ts +0 -0
- package/extensions/msteams/src/attachments/types.ts +0 -0
- package/extensions/msteams/src/attachments.ts +0 -0
- package/extensions/msteams/src/channel.ts +0 -0
- package/extensions/msteams/src/conversation-store-fs.ts +0 -0
- package/extensions/msteams/src/conversation-store-memory.ts +0 -0
- package/extensions/msteams/src/conversation-store.ts +0 -0
- package/extensions/msteams/src/directory-live.ts +0 -0
- package/extensions/msteams/src/errors.ts +0 -0
- package/extensions/msteams/src/file-consent-helpers.ts +0 -0
- package/extensions/msteams/src/file-consent.ts +0 -0
- package/extensions/msteams/src/file-lock.ts +0 -0
- package/extensions/msteams/src/graph-chat.ts +0 -0
- package/extensions/msteams/src/graph-upload.ts +0 -0
- package/extensions/msteams/src/graph-users.ts +0 -0
- package/extensions/msteams/src/graph.ts +0 -0
- package/extensions/msteams/src/inbound.ts +0 -0
- package/extensions/msteams/src/media-helpers.ts +0 -0
- package/extensions/msteams/src/mentions.ts +0 -0
- package/extensions/msteams/src/messenger.ts +0 -0
- package/extensions/msteams/src/monitor-handler/inbound-media.ts +0 -0
- package/extensions/msteams/src/monitor-handler/message-handler.ts +0 -0
- package/extensions/msteams/src/monitor-handler.ts +0 -0
- package/extensions/msteams/src/monitor-types.ts +0 -0
- package/extensions/msteams/src/monitor.ts +0 -0
- package/extensions/msteams/src/onboarding.ts +0 -0
- package/extensions/msteams/src/outbound.ts +0 -0
- package/extensions/msteams/src/pending-uploads.ts +0 -0
- package/extensions/msteams/src/policy.ts +0 -0
- package/extensions/msteams/src/polls-store-memory.ts +0 -0
- package/extensions/msteams/src/polls.ts +0 -0
- package/extensions/msteams/src/probe.ts +0 -0
- package/extensions/msteams/src/reply-dispatcher.ts +0 -0
- package/extensions/msteams/src/resolve-allowlist.ts +0 -0
- package/extensions/msteams/src/runtime.ts +0 -0
- package/extensions/msteams/src/sdk-types.ts +0 -0
- package/extensions/msteams/src/sdk.ts +0 -0
- package/extensions/msteams/src/send-context.ts +0 -0
- package/extensions/msteams/src/send.ts +0 -0
- package/extensions/msteams/src/sent-message-cache.ts +0 -0
- package/extensions/msteams/src/storage.ts +0 -0
- package/extensions/msteams/src/store-fs.ts +0 -0
- package/extensions/msteams/src/test-runtime.ts +0 -0
- package/extensions/msteams/src/token-response.ts +0 -0
- package/extensions/msteams/src/token.ts +0 -0
- package/extensions/nextcloud-talk/fased.plugin.json +0 -0
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nextcloud-talk/src/accounts.ts +0 -0
- package/extensions/nextcloud-talk/src/config-schema.ts +0 -0
- package/extensions/nextcloud-talk/src/format.ts +0 -0
- package/extensions/nextcloud-talk/src/inbound.ts +0 -0
- package/extensions/nextcloud-talk/src/monitor.ts +0 -0
- package/extensions/nextcloud-talk/src/normalize.ts +0 -0
- package/extensions/nextcloud-talk/src/onboarding.ts +0 -0
- package/extensions/nextcloud-talk/src/policy.ts +0 -0
- package/extensions/nextcloud-talk/src/replay-guard.ts +0 -0
- package/extensions/nextcloud-talk/src/room-info.ts +0 -0
- package/extensions/nextcloud-talk/src/runtime.ts +0 -0
- package/extensions/nextcloud-talk/src/send.ts +0 -0
- package/extensions/nextcloud-talk/src/signature.ts +0 -0
- package/extensions/nextcloud-talk/src/types.ts +0 -0
- package/extensions/nostr/CHANGELOG.md +12 -0
- package/extensions/nostr/README.md +0 -0
- package/extensions/nostr/fased.plugin.json +0 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/nostr/src/channel.ts +0 -0
- package/extensions/nostr/src/config-schema.ts +0 -0
- package/extensions/nostr/src/metrics.ts +0 -0
- package/extensions/nostr/src/nostr-bus.ts +0 -0
- package/extensions/nostr/src/nostr-profile-http.ts +0 -0
- package/extensions/nostr/src/nostr-profile-import.ts +0 -0
- package/extensions/nostr/src/nostr-profile.ts +0 -0
- package/extensions/nostr/src/nostr-state-store.ts +0 -0
- package/extensions/nostr/src/onboarding.ts +0 -0
- package/extensions/nostr/src/runtime.ts +0 -0
- package/extensions/nostr/src/seen-tracker.ts +0 -0
- package/extensions/nostr/src/types.ts +0 -0
- package/extensions/nostr/test/setup.ts +0 -0
- package/extensions/open-prose/README.md +0 -0
- package/extensions/open-prose/fased.plugin.json +0 -0
- package/extensions/open-prose/package.json +1 -1
- package/extensions/open-prose/skills/prose/LICENSE +0 -0
- package/extensions/open-prose/skills/prose/SKILL.md +0 -0
- package/extensions/open-prose/skills/prose/alt-borges.md +0 -0
- package/extensions/open-prose/skills/prose/alts/arabian-nights.md +0 -0
- package/extensions/open-prose/skills/prose/alts/borges.md +0 -0
- package/extensions/open-prose/skills/prose/alts/folk.md +0 -0
- package/extensions/open-prose/skills/prose/alts/homer.md +0 -0
- package/extensions/open-prose/skills/prose/alts/kafka.md +0 -0
- package/extensions/open-prose/skills/prose/compiler.md +0 -0
- package/extensions/open-prose/skills/prose/examples/01-hello-world.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/02-research-and-summarize.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/03-code-review.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/04-write-and-refine.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/05-debug-issue.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/06-explain-codebase.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/07-refactor.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/08-blog-post.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/09-research-with-agents.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/10-code-review-agents.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/11-skills-and-imports.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/13-variables-and-context.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/14-composition-blocks.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/15-inline-sequences.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/16-parallel-reviews.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/17-parallel-research.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/19-advanced-parallel.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/20-fixed-loops.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/21-pipeline-operations.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/22-error-handling.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/23-retry-with-backoff.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/24-choice-blocks.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/25-conditionals.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/26-parameterized-blocks.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/27-string-interpolation.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/28-automated-pr-review.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/28-gas-town.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/29-captains-chair.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/30-captains-chair-simple.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/33-pr-review-autofix.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/34-content-pipeline.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/35-feature-factory.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/36-bug-hunter.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/37-the-forge.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/38-skill-scan.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/39-architect-by-simulation.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/40-rlm-self-refine.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/43-rlm-pairwise.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/45-plugin-release.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/47-language-self-improvement.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/48-habit-miner.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/README.md +0 -0
- package/extensions/open-prose/skills/prose/examples/roadmap/README.md +0 -0
- package/extensions/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/roadmap/parallel-review.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +0 -0
- package/extensions/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +0 -0
- package/extensions/open-prose/skills/prose/guidance/antipatterns.md +0 -0
- package/extensions/open-prose/skills/prose/guidance/patterns.md +0 -0
- package/extensions/open-prose/skills/prose/guidance/system-prompt.md +0 -0
- package/extensions/open-prose/skills/prose/help.md +0 -0
- package/extensions/open-prose/skills/prose/lib/README.md +0 -0
- package/extensions/open-prose/skills/prose/lib/calibrator.prose +0 -0
- package/extensions/open-prose/skills/prose/lib/cost-analyzer.prose +0 -0
- package/extensions/open-prose/skills/prose/lib/error-forensics.prose +0 -0
- package/extensions/open-prose/skills/prose/lib/inspector.prose +0 -0
- package/extensions/open-prose/skills/prose/lib/profiler.prose +0 -0
- package/extensions/open-prose/skills/prose/lib/program-improver.prose +0 -0
- package/extensions/open-prose/skills/prose/lib/project-memory.prose +0 -0
- package/extensions/open-prose/skills/prose/lib/user-memory.prose +0 -0
- package/extensions/open-prose/skills/prose/lib/vm-improver.prose +0 -0
- package/extensions/open-prose/skills/prose/primitives/session.md +0 -0
- package/extensions/open-prose/skills/prose/prose.md +0 -0
- package/extensions/open-prose/skills/prose/state/filesystem.md +0 -0
- package/extensions/open-prose/skills/prose/state/in-context.md +0 -0
- package/extensions/open-prose/skills/prose/state/postgres.md +0 -0
- package/extensions/open-prose/skills/prose/state/sqlite.md +0 -0
- package/extensions/phone-control/fased.plugin.json +0 -0
- package/extensions/qwen-portal-auth/README.md +0 -0
- package/extensions/qwen-portal-auth/fased.plugin.json +0 -0
- package/extensions/qwen-portal-auth/oauth.ts +0 -0
- package/extensions/sat-mining/fased.plugin.json +0 -0
- package/extensions/sat-mining/index.ts +100 -1
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/sat-mining/skills/sat-mining/SKILL.md +0 -0
- package/extensions/sat-mining/src/audit-store.ts +45 -4
- package/extensions/sat-mining/src/auto-planner.ts +0 -0
- package/extensions/sat-mining/src/chain-time.ts +0 -0
- package/extensions/sat-mining/src/client.ts +13 -0
- package/extensions/sat-mining/src/dispute-review.ts +0 -0
- package/extensions/sat-mining/src/hash-spec.ts +0 -0
- package/extensions/sat-mining/src/planner-analytics.ts +0 -0
- package/extensions/sat-mining/src/planner-outcomes.ts +0 -0
- package/extensions/sat-mining/src/planner-policy-eval.ts +0 -0
- package/extensions/sat-mining/src/planner-policy.ts +0 -0
- package/extensions/sat-mining/src/replay.ts +0 -0
- package/extensions/sat-mining/src/rpc-read.ts +105 -21
- package/extensions/sat-mining/src/runtime.ts +2 -0
- package/extensions/sat-mining/src/service-read-timeout.ts +0 -0
- package/extensions/sat-mining/src/solana-submit.ts +593 -22
- package/extensions/sat-mining/src/strategy-base.ts +0 -0
- package/extensions/sat-mining/src/strategy-engine.ts +0 -0
- package/extensions/sat-mining/src/strategy-validate.ts +0 -0
- package/extensions/sat-mining/src/submission-ledger.ts +20 -4
- package/extensions/shared/resolve-target-test-helpers.ts +0 -0
- package/extensions/signal/fased.plugin.json +0 -0
- package/extensions/signal/package.json +1 -1
- package/extensions/signal/src/channel.ts +0 -0
- package/extensions/signal/src/runtime.ts +0 -0
- package/extensions/synology-chat/fased.plugin.json +0 -0
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/synology-chat/src/accounts.ts +0 -0
- package/extensions/synology-chat/src/channel.ts +0 -0
- package/extensions/synology-chat/src/client.ts +0 -0
- package/extensions/synology-chat/src/runtime.ts +0 -0
- package/extensions/synology-chat/src/security.ts +0 -0
- package/extensions/synology-chat/src/types.ts +0 -0
- package/extensions/synology-chat/src/webhook-handler.ts +0 -0
- package/extensions/talk-voice/fased.plugin.json +0 -0
- package/extensions/thread-ownership/fased.plugin.json +0 -0
- package/extensions/tlon/README.md +0 -0
- package/extensions/tlon/fased.plugin.json +0 -0
- package/extensions/tlon/package.json +1 -1
- package/extensions/tlon/src/account-fields.ts +0 -0
- package/extensions/tlon/src/channel.ts +0 -0
- package/extensions/tlon/src/config-schema.ts +0 -0
- package/extensions/tlon/src/monitor/discovery.ts +0 -0
- package/extensions/tlon/src/monitor/history.ts +0 -0
- package/extensions/tlon/src/monitor/processed-messages.ts +0 -0
- package/extensions/tlon/src/monitor/utils.ts +0 -0
- package/extensions/tlon/src/onboarding.ts +0 -0
- package/extensions/tlon/src/runtime.ts +0 -0
- package/extensions/tlon/src/targets.ts +0 -0
- package/extensions/tlon/src/types.ts +0 -0
- package/extensions/tlon/src/urbit/auth.ts +0 -0
- package/extensions/tlon/src/urbit/base-url.ts +0 -0
- package/extensions/tlon/src/urbit/channel-client.ts +0 -0
- package/extensions/tlon/src/urbit/channel-ops.ts +0 -0
- package/extensions/tlon/src/urbit/context.ts +0 -0
- package/extensions/tlon/src/urbit/errors.ts +0 -0
- package/extensions/tlon/src/urbit/fetch.ts +0 -0
- package/extensions/tlon/src/urbit/send.ts +0 -0
- package/extensions/tlon/src/urbit/sse-client.ts +0 -0
- package/extensions/twitch/CHANGELOG.md +12 -0
- package/extensions/twitch/README.md +0 -0
- package/extensions/twitch/fased.plugin.json +0 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/twitch/src/access-control.ts +0 -0
- package/extensions/twitch/src/actions.ts +0 -0
- package/extensions/twitch/src/client-manager-registry.ts +0 -0
- package/extensions/twitch/src/config-schema.ts +0 -0
- package/extensions/twitch/src/config.ts +0 -0
- package/extensions/twitch/src/monitor.ts +0 -0
- package/extensions/twitch/src/onboarding.ts +0 -0
- package/extensions/twitch/src/outbound.ts +0 -0
- package/extensions/twitch/src/probe.ts +0 -0
- package/extensions/twitch/src/resolver.ts +0 -0
- package/extensions/twitch/src/runtime.ts +0 -0
- package/extensions/twitch/src/send.ts +0 -0
- package/extensions/twitch/src/status.ts +0 -0
- package/extensions/twitch/src/test-fixtures.ts +0 -0
- package/extensions/twitch/src/twitch-client.ts +0 -0
- package/extensions/twitch/src/utils/markdown.ts +0 -0
- package/extensions/twitch/src/utils/twitch.ts +0 -0
- package/extensions/twitch/test/setup.ts +0 -0
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/README.md +0 -0
- package/extensions/voice-call/fased.plugin.json +0 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/voice-call/src/allowlist.ts +0 -0
- package/extensions/voice-call/src/cli.ts +0 -0
- package/extensions/voice-call/src/core-bridge.ts +0 -0
- package/extensions/voice-call/src/http-headers.ts +0 -0
- package/extensions/voice-call/src/manager/context.ts +0 -0
- package/extensions/voice-call/src/manager/events.ts +0 -0
- package/extensions/voice-call/src/manager/lookup.ts +0 -0
- package/extensions/voice-call/src/manager/outbound.ts +0 -0
- package/extensions/voice-call/src/manager/state.ts +0 -0
- package/extensions/voice-call/src/manager/store.ts +0 -0
- package/extensions/voice-call/src/manager/timers.ts +0 -0
- package/extensions/voice-call/src/manager/twiml.ts +0 -0
- package/extensions/voice-call/src/manager.ts +0 -0
- package/extensions/voice-call/src/media-stream.ts +0 -0
- package/extensions/voice-call/src/providers/base.ts +0 -0
- package/extensions/voice-call/src/providers/mock.ts +0 -0
- package/extensions/voice-call/src/providers/plivo.ts +0 -0
- package/extensions/voice-call/src/providers/shared/guarded-json-api.ts +0 -0
- package/extensions/voice-call/src/providers/stt-openai-realtime.ts +0 -0
- package/extensions/voice-call/src/providers/telnyx.ts +0 -0
- package/extensions/voice-call/src/providers/tts-openai.ts +0 -0
- package/extensions/voice-call/src/providers/twilio/api.ts +0 -0
- package/extensions/voice-call/src/providers/twilio/webhook.ts +0 -0
- package/extensions/voice-call/src/providers/twilio.ts +0 -0
- package/extensions/voice-call/src/response-generator.ts +0 -0
- package/extensions/voice-call/src/runtime.ts +0 -0
- package/extensions/voice-call/src/telephony-audio.ts +0 -0
- package/extensions/voice-call/src/telephony-tts.ts +0 -0
- package/extensions/voice-call/src/tunnel.ts +0 -0
- package/extensions/voice-call/src/types.ts +0 -0
- package/extensions/voice-call/src/utils.ts +0 -0
- package/extensions/voice-call/src/voice-mapping.ts +0 -0
- package/extensions/voice-call/src/webhook/stale-call-reaper.ts +0 -0
- package/extensions/voice-call/src/webhook-security.ts +0 -0
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/README.md +0 -0
- package/extensions/zalo/fased.plugin.json +0 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalo/src/accounts.ts +0 -0
- package/extensions/zalo/src/actions.ts +0 -0
- package/extensions/zalo/src/api.ts +0 -0
- package/extensions/zalo/src/channel.ts +0 -0
- package/extensions/zalo/src/config-schema.ts +0 -0
- package/extensions/zalo/src/group-access.ts +0 -0
- package/extensions/zalo/src/monitor.ts +0 -0
- package/extensions/zalo/src/monitor.webhook.ts +0 -0
- package/extensions/zalo/src/onboarding.ts +0 -0
- package/extensions/zalo/src/probe.ts +0 -0
- package/extensions/zalo/src/proxy.ts +0 -0
- package/extensions/zalo/src/runtime.ts +0 -0
- package/extensions/zalo/src/send.ts +0 -0
- package/extensions/zalo/src/status-issues.ts +0 -0
- package/extensions/zalo/src/token.ts +0 -0
- package/extensions/zalo/src/types.ts +0 -0
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/README.md +0 -0
- package/extensions/zalouser/fased.plugin.json +0 -0
- package/extensions/zalouser/package.json +1 -1
- package/extensions/zalouser/src/accounts.ts +0 -0
- package/extensions/zalouser/src/channel.ts +0 -0
- package/extensions/zalouser/src/config-schema.ts +0 -0
- package/extensions/zalouser/src/monitor.ts +0 -0
- package/extensions/zalouser/src/onboarding.ts +0 -0
- package/extensions/zalouser/src/probe.ts +0 -0
- package/extensions/zalouser/src/runtime.ts +0 -0
- package/extensions/zalouser/src/send.ts +0 -0
- package/extensions/zalouser/src/status-issues.ts +0 -0
- package/extensions/zalouser/src/tool.ts +0 -0
- package/extensions/zalouser/src/types.ts +0 -0
- package/extensions/zalouser/src/zca.ts +0 -0
- package/install.sh +15 -16
- package/package.json +1 -1
- package/scripts/fased-launcher-runtime.mjs +0 -0
- package/scripts/fased-managed-updater.mjs +1 -1
- package/scripts/fased-signer-network-hosting.sh +18 -7
- package/scripts/fased-signer-owner-policy.mjs +13 -1
- package/scripts/run-node.mjs +0 -0
- package/scripts/start-managed.sh +4 -0
- package/shared/sat-hash-v1.json +0 -0
- package/skills/1password/SKILL.md +0 -0
- package/skills/1password/references/cli-examples.md +0 -0
- package/skills/1password/references/get-started.md +0 -0
- package/skills/apple-notes/SKILL.md +0 -0
- package/skills/apple-reminders/SKILL.md +0 -0
- package/skills/bear-notes/SKILL.md +0 -0
- package/skills/blogwatcher/SKILL.md +0 -0
- package/skills/blucli/SKILL.md +0 -0
- package/skills/bluebubbles/SKILL.md +0 -0
- package/skills/camsnap/SKILL.md +0 -0
- package/skills/canvas/SKILL.md +0 -0
- package/skills/clawhub/SKILL.md +0 -0
- package/skills/coding-agent/SKILL.md +0 -0
- package/skills/diagram-maker/SKILL.md +0 -0
- package/skills/diagram-maker/references/excalidraw-patterns.md +0 -0
- package/skills/diagram-maker/references/svg-template.md +0 -0
- package/skills/discord/SKILL.md +0 -0
- package/skills/eightctl/SKILL.md +0 -0
- package/skills/food-order/SKILL.md +0 -0
- package/skills/gemini/SKILL.md +0 -0
- package/skills/gh-issues/SKILL.md +0 -0
- package/skills/gifgrep/SKILL.md +0 -0
- package/skills/github/SKILL.md +0 -0
- package/skills/gog/SKILL.md +0 -0
- package/skills/goplaces/SKILL.md +0 -0
- package/skills/healthcheck/SKILL.md +0 -0
- package/skills/himalaya/SKILL.md +0 -0
- package/skills/himalaya/references/configuration.md +0 -0
- package/skills/himalaya/references/message-composition.md +0 -0
- package/skills/imsg/SKILL.md +0 -0
- package/skills/mcporter/SKILL.md +0 -0
- package/skills/model-usage/SKILL.md +0 -0
- package/skills/model-usage/references/codexbar-cli.md +0 -0
- package/skills/model-usage/scripts/model_usage.py +0 -0
- package/skills/model-usage/scripts/test_model_usage.py +0 -0
- package/skills/nano-banana-pro/SKILL.md +0 -0
- package/skills/nano-pdf/SKILL.md +0 -0
- package/skills/node-connect/SKILL.md +0 -0
- package/skills/node-inspect-debugger/SKILL.md +0 -0
- package/skills/notion/SKILL.md +0 -0
- package/skills/obsidian/SKILL.md +0 -0
- package/skills/openai-image-gen/SKILL.md +0 -0
- package/skills/openai-image-gen/scripts/gen.py +0 -0
- package/skills/openai-image-gen/scripts/test_gen.py +0 -0
- package/skills/openai-whisper/SKILL.md +0 -0
- package/skills/openai-whisper-api/SKILL.md +0 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +0 -0
- package/skills/opencode/SKILL.md +0 -0
- package/skills/openhue/SKILL.md +0 -0
- package/skills/oracle/SKILL.md +0 -0
- package/skills/ordercli/SKILL.md +0 -0
- package/skills/peekaboo/SKILL.md +0 -0
- package/skills/python-debugpy/SKILL.md +0 -0
- package/skills/sag/SKILL.md +0 -0
- package/skills/session-logs/SKILL.md +0 -0
- package/skills/sherpa-onnx-tts/SKILL.md +0 -0
- package/skills/skill-creator/SKILL.md +0 -0
- package/skills/skill-creator/license.txt +0 -0
- package/skills/skill-creator/scripts/init_skill.py +0 -0
- package/skills/skill-creator/scripts/package_skill.py +0 -0
- package/skills/skill-creator/scripts/quick_validate.py +0 -0
- package/skills/skill-creator/scripts/test_package_skill.py +0 -0
- package/skills/skill-creator/scripts/test_quick_validate.py +0 -0
- package/skills/skill-workshop/SKILL.md +0 -0
- package/skills/slack/SKILL.md +0 -0
- package/skills/songsee/SKILL.md +0 -0
- package/skills/sonoscli/SKILL.md +0 -0
- package/skills/spotify-player/SKILL.md +0 -0
- package/skills/summarize/SKILL.md +0 -0
- package/skills/things-mac/SKILL.md +0 -0
- package/skills/tmux/SKILL.md +0 -0
- package/skills/trello/SKILL.md +0 -0
- package/skills/video-frames/SKILL.md +0 -0
- package/skills/video-frames/scripts/frame.sh +0 -0
- package/skills/voice-call/SKILL.md +0 -0
- package/skills/wacli/SKILL.md +0 -0
- package/skills/wallet-actions/SKILL.md +0 -0
- package/skills/weather/SKILL.md +0 -0
- 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
|
|
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
|
|
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
|
|
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
|
-
${
|
|
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>${
|
|
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=>
|
|
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
|
|
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
|
|
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=${
|
|
2335
|
-
title=${
|
|
2336
|
-
aria-label=${`Mining ${
|
|
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>${
|
|
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
|
-
${
|
|
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&&
|
|
2359
|
+
@click=${e=>{e.target===e.currentTarget&<(`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=${()=>
|
|
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`,
|
|
2377
|
-
${K(`Capital
|
|
2376
|
+
${K(`Cycle`,Qt?String(Qt):`—`)}
|
|
2377
|
+
${K(`Capital`,$t===`—`?`—`:`${$t} SOL`)}
|
|
2378
2378
|
${K(`Earned`,Q?.satLabel?`${Q.satLabel} SAT`:`—`)}
|
|
2379
|
-
${K(`Strategy
|
|
2380
|
-
${$&&
|
|
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
|
-
${
|
|
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
|
-
${
|
|
2402
|
-
<strong>Cannot start yet</strong> · ${
|
|
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=${()=>
|
|
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=${()=>
|
|
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=${()=>
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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=${
|
|
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
|
-
${
|
|
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=${
|
|
2516
|
+
title=${yt.find(e=>e.value===le)?.detail??``}
|
|
2517
2517
|
>
|
|
2518
|
-
${
|
|
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=${
|
|
2552
|
+
title=${bt.find(e=>e.value===L)?.detail??``}
|
|
2553
2553
|
>
|
|
2554
|
-
${
|
|
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?
|
|
2602
|
+
placeholder=${A>0n?Pe(A):`0`}
|
|
2603
2603
|
/>
|
|
2604
2604
|
<button
|
|
2605
2605
|
class="btn small"
|
|
2606
|
-
?disabled=${
|
|
2607
|
-
@click=${()=>r.onCapitalWithdrawDraftChange(
|
|
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=${
|
|
2614
|
+
?disabled=${ft}
|
|
2615
2615
|
@click=${r.onWithdrawCapital}
|
|
2616
|
-
title=${
|
|
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
|
-
${
|
|
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>${
|
|
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=${()=>
|
|
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=${
|
|
2652
|
-
@change=${e=>r.onCommitLamportsChange(
|
|
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(
|
|
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=${
|
|
2664
|
-
${
|
|
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=${
|
|
2670
|
-
max=${
|
|
2669
|
+
min=${Ne(N)}
|
|
2670
|
+
max=${Ne(F)}
|
|
2671
2671
|
step="0.01"
|
|
2672
|
-
.value=${
|
|
2673
|
-
@change=${e=>r.onCommitLamportsChange(
|
|
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
|
-
${
|
|
2700
|
+
${Ut.length?Ut.map(e=>We(e)):e`
|
|
2701
2701
|
<div class="mining-note" style="margin-top: 0">
|
|
2702
|
-
<div>${
|
|
2702
|
+
<div>${Ve(`all`)}</div>
|
|
2703
2703
|
</div>
|
|
2704
2704
|
`}
|
|
2705
2705
|
</div>
|
|
2706
|
-
${
|
|
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=${
|
|
2711
|
-
@click=${()=>r.onRecentActionsPageChange(
|
|
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
|
|
2718
|
-
@click=${()=>r.onRecentActionsPageChange(
|
|
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 ${
|
|
2891
|
+
Window ${an.windowLabel}
|
|
2892
2892
|
</div>
|
|
2893
2893
|
<div class="mining-history-bars__range">
|
|
2894
|
-
${
|
|
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 ${
|
|
2915
|
+
Window ${an.windowLabel}
|
|
2916
2916
|
</div>
|
|
2917
2917
|
<div class="mining-history-bars__range">
|
|
2918
|
-
${
|
|
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
|
-
${
|
|
2948
|
+
${zt.length?zt.map(e=>We(e)):e`
|
|
2949
2949
|
<div class="mining-note" style="margin-top: 0">
|
|
2950
|
-
${
|
|
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{
|
|
2960
|
-
//# sourceMappingURL=mining-
|
|
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
|