@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
|
@@ -27,6 +27,8 @@ import {
|
|
|
27
27
|
SAT_PROTOCOL_CONSTANTS,
|
|
28
28
|
} from "./protocol-contract.js";
|
|
29
29
|
import {
|
|
30
|
+
inspectSatAddressLookupTable,
|
|
31
|
+
inspectSatChainSlot,
|
|
30
32
|
inspectSatCycle,
|
|
31
33
|
inspectSatCycleRegistryMeta,
|
|
32
34
|
inspectSatMinerCyclesByAddress,
|
|
@@ -74,6 +76,8 @@ const MINING_STAKE_SEED = "mining_stake";
|
|
|
74
76
|
const TOKEN_PROGRAM_ID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
|
|
75
77
|
const ASSOCIATED_TOKEN_PROGRAM_ID = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
|
|
76
78
|
const SLOT_HASHES_SYSVAR_ID = "SysvarS1otHashes111111111111111111111111111";
|
|
79
|
+
const SAT_DISTRIBUTION_LOOKUP_MIN_MINERS = 16;
|
|
80
|
+
const SAT_LOOKUP_TABLE_EXTEND_CHUNK_SIZE = 20;
|
|
77
81
|
|
|
78
82
|
const IX = SAT_INSTRUCTION_DISCRIMINATORS;
|
|
79
83
|
|
|
@@ -324,12 +328,32 @@ export async function resolveSatValidatorAuthority(_config: SatMiningConfig) {
|
|
|
324
328
|
type SatInstructionSubmitSpec = {
|
|
325
329
|
data: Buffer;
|
|
326
330
|
programId?: string;
|
|
331
|
+
addressLookupTables?: string[];
|
|
332
|
+
manageAddressLookupTable?: {
|
|
333
|
+
lookupTableAddress?: string;
|
|
334
|
+
cycleId: number;
|
|
335
|
+
pageIndex: number;
|
|
336
|
+
onLookupTableResolved?: (lookupTableAddress: string) => Promise<void>;
|
|
337
|
+
};
|
|
327
338
|
accountResolver: (
|
|
328
339
|
solana: SolanaModuleLike,
|
|
329
340
|
signer: import("@solana/web3.js").PublicKey,
|
|
330
341
|
) => Promise<SolanaAccountMeta[] | SatResolvedInstruction>;
|
|
331
342
|
};
|
|
332
343
|
|
|
344
|
+
type SatInstructionSubmitResult = {
|
|
345
|
+
txHash: string;
|
|
346
|
+
signer: string;
|
|
347
|
+
signerState: SatSignerOperation["state"];
|
|
348
|
+
requestId: string;
|
|
349
|
+
transactionVersion: "legacy" | "v0";
|
|
350
|
+
lookupTableAddress?: string;
|
|
351
|
+
lookupTableCreated?: boolean;
|
|
352
|
+
lookupTableExtended?: boolean;
|
|
353
|
+
lookupTableAddressCount?: number;
|
|
354
|
+
lookupTableTransactionHashes?: string[];
|
|
355
|
+
};
|
|
356
|
+
|
|
333
357
|
async function prepareLocalSignerSubmitContext(cfg: FasedAgentConfig, env: NodeJS.ProcessEnv) {
|
|
334
358
|
const effectiveEnv = resolveSatEffectiveEnv(cfg, env);
|
|
335
359
|
const solana = await loadSolanaWeb3();
|
|
@@ -375,6 +399,9 @@ async function buildLocalSignerInstructionRequest(params: {
|
|
|
375
399
|
isSigner: key.isSigner,
|
|
376
400
|
isWritable: key.isWritable,
|
|
377
401
|
})),
|
|
402
|
+
...(params.spec.addressLookupTables?.length
|
|
403
|
+
? { addressLookupTables: params.spec.addressLookupTables }
|
|
404
|
+
: {}),
|
|
378
405
|
...(context ? { context } : {}),
|
|
379
406
|
};
|
|
380
407
|
}
|
|
@@ -399,7 +426,7 @@ const REQUIRED_SAT_SIGNER_FEATURES = [
|
|
|
399
426
|
|
|
400
427
|
async function requireTypedSatSignerCapabilities(
|
|
401
428
|
socketPath: string,
|
|
402
|
-
intentType: "solana.satAction" | "solana.vaultBondAction",
|
|
429
|
+
intentType: "solana.satAction" | "solana.satLookupTable" | "solana.vaultBondAction",
|
|
403
430
|
) {
|
|
404
431
|
const result = await callLocalSocketSigner<{
|
|
405
432
|
ready?: boolean;
|
|
@@ -428,6 +455,10 @@ async function requireTypedSatSignerCapabilities(
|
|
|
428
455
|
"durableReviewAuthorization",
|
|
429
456
|
].filter((feature) => !features.has(feature))
|
|
430
457
|
: [];
|
|
458
|
+
const missingLookupFeatures =
|
|
459
|
+
intentType === "solana.satLookupTable" && !features.has("typedSATAddressLookupTables")
|
|
460
|
+
? ["typedSATAddressLookupTables"]
|
|
461
|
+
: [];
|
|
431
462
|
if (
|
|
432
463
|
result.ready !== true ||
|
|
433
464
|
protocol?.current !== 2 ||
|
|
@@ -437,6 +468,7 @@ async function requireTypedSatSignerCapabilities(
|
|
|
437
468
|
protocol.max < 2 ||
|
|
438
469
|
!capabilities?.intentTypes?.includes(intentType) ||
|
|
439
470
|
missingFeatures.length > 0 ||
|
|
471
|
+
missingLookupFeatures.length > 0 ||
|
|
440
472
|
(intentType === "solana.vaultBondAction" && !features.has("typedVaultBondActions")) ||
|
|
441
473
|
missingVaultReviewFeatures.length > 0 ||
|
|
442
474
|
missingStates.length > 0
|
|
@@ -445,8 +477,10 @@ async function requireTypedSatSignerCapabilities(
|
|
|
445
477
|
`local-socket-signer does not support the required typed SAT protocol-v2 contract${
|
|
446
478
|
missingFeatures.length > 0 ? `; missing features: ${missingFeatures.join(", ")}` : ""
|
|
447
479
|
}${missingVaultReviewFeatures.length > 0 ? `; missing reviewed Vault features: ${missingVaultReviewFeatures.join(", ")}` : ""}${
|
|
448
|
-
|
|
449
|
-
|
|
480
|
+
missingLookupFeatures.length > 0
|
|
481
|
+
? `; missing SAT lookup features: ${missingLookupFeatures.join(", ")}`
|
|
482
|
+
: ""
|
|
483
|
+
}${missingStates.length > 0 ? `; missing states: ${missingStates.join(", ")}` : ""}`,
|
|
450
484
|
);
|
|
451
485
|
}
|
|
452
486
|
}
|
|
@@ -495,6 +529,14 @@ function signerStateForLedger(state: SatSignerOperation["state"]): SatSubmission
|
|
|
495
529
|
return state;
|
|
496
530
|
}
|
|
497
531
|
|
|
532
|
+
type SatLookupTableAction = "create" | "extend" | "deactivate" | "close";
|
|
533
|
+
|
|
534
|
+
function assertSatLookupTableAction(value: string): asserts value is SatLookupTableAction {
|
|
535
|
+
if (value !== "create" && value !== "extend" && value !== "deactivate" && value !== "close") {
|
|
536
|
+
throw new Error(`unsupported SAT lookup-table action ${value}`);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
|
|
498
540
|
class SatSubmissionUnresolvedError extends Error {
|
|
499
541
|
readonly requestId: string;
|
|
500
542
|
readonly signature?: string;
|
|
@@ -513,35 +555,71 @@ class SatSubmissionUnresolvedError extends Error {
|
|
|
513
555
|
}
|
|
514
556
|
}
|
|
515
557
|
|
|
558
|
+
class SatSubmissionDefinitiveFailureError extends Error {
|
|
559
|
+
constructor(message: string) {
|
|
560
|
+
super(message);
|
|
561
|
+
this.name = "SatSubmissionDefinitiveFailureError";
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
516
565
|
async function executeTypedSatIntent(params: {
|
|
517
566
|
socketPath: string;
|
|
518
567
|
walletId: string;
|
|
519
|
-
action: SatSignerAction | "cleanupBatch";
|
|
568
|
+
action: SatSignerAction | "cleanupBatch" | "create" | "extend" | "deactivate" | "close";
|
|
520
569
|
instruction?: Awaited<ReturnType<typeof buildLocalSignerInstructionRequest>>;
|
|
521
570
|
instructions?: Array<Awaited<ReturnType<typeof buildLocalSignerInstructionRequest>>>;
|
|
571
|
+
lookupTable?: {
|
|
572
|
+
address: string;
|
|
573
|
+
cycleId: string;
|
|
574
|
+
pageIndex: string;
|
|
575
|
+
recentSlot?: string;
|
|
576
|
+
addresses?: string[];
|
|
577
|
+
parent?: Awaited<ReturnType<typeof buildLocalSignerInstructionRequest>>;
|
|
578
|
+
};
|
|
522
579
|
cluster: "local" | "devnet" | "mainnet-beta";
|
|
523
580
|
env: NodeJS.ProcessEnv;
|
|
524
581
|
}) {
|
|
525
|
-
const
|
|
526
|
-
const
|
|
582
|
+
const isLookupTable = params.lookupTable != null;
|
|
583
|
+
const isVaultBond =
|
|
584
|
+
!isLookupTable &&
|
|
585
|
+
params.action !== "cleanupBatch" &&
|
|
586
|
+
VAULT_BOND_ACTIONS.has(params.action as SatSignerAction);
|
|
587
|
+
const intentType = isLookupTable
|
|
588
|
+
? "solana.satLookupTable"
|
|
589
|
+
: isVaultBond
|
|
590
|
+
? "solana.vaultBondAction"
|
|
591
|
+
: "solana.satAction";
|
|
527
592
|
await requireTypedSatSignerCapabilities(params.socketPath, intentType);
|
|
528
|
-
const intent =
|
|
593
|
+
const intent = isLookupTable
|
|
529
594
|
? (() => {
|
|
530
|
-
if (
|
|
531
|
-
throw new Error("typed
|
|
595
|
+
if (params.instruction || params.instructions || !params.lookupTable) {
|
|
596
|
+
throw new Error("typed SAT lookup-table execution accepts only semantic lookup details");
|
|
532
597
|
}
|
|
598
|
+
const action = params.action;
|
|
599
|
+
assertSatLookupTableAction(action);
|
|
533
600
|
return {
|
|
534
|
-
type: "solana.
|
|
535
|
-
|
|
536
|
-
|
|
601
|
+
type: "solana.satLookupTable" as const,
|
|
602
|
+
action,
|
|
603
|
+
lookupTable: params.lookupTable,
|
|
537
604
|
};
|
|
538
605
|
})()
|
|
539
|
-
:
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
606
|
+
: isVaultBond
|
|
607
|
+
? (() => {
|
|
608
|
+
if (!params.instruction || params.instructions) {
|
|
609
|
+
throw new Error("typed Vault bond execution requires exactly one semantic instruction");
|
|
610
|
+
}
|
|
611
|
+
return {
|
|
612
|
+
type: "solana.vaultBondAction" as const,
|
|
613
|
+
cluster: params.cluster,
|
|
614
|
+
...params.instruction,
|
|
615
|
+
};
|
|
616
|
+
})()
|
|
617
|
+
: {
|
|
618
|
+
type: "solana.satAction" as const,
|
|
619
|
+
action: params.action,
|
|
620
|
+
...(params.instruction ?? {}),
|
|
621
|
+
...(params.instructions ? { instructions: params.instructions } : {}),
|
|
622
|
+
};
|
|
545
623
|
const policy = await callLocalSocketSigner<{ hash: string }>(params.socketPath, {
|
|
546
624
|
op: "v2.policy.get",
|
|
547
625
|
walletId: params.walletId,
|
|
@@ -560,6 +638,7 @@ async function executeTypedSatIntent(params: {
|
|
|
560
638
|
operationKey,
|
|
561
639
|
intentDigest,
|
|
562
640
|
action: params.action,
|
|
641
|
+
allowFailedRetry: isLookupTable,
|
|
563
642
|
env: params.env,
|
|
564
643
|
});
|
|
565
644
|
if (!claim.claimed) {
|
|
@@ -574,6 +653,7 @@ async function executeTypedSatIntent(params: {
|
|
|
574
653
|
operationKey,
|
|
575
654
|
intentDigest,
|
|
576
655
|
action: params.action,
|
|
656
|
+
allowFailedRetry: isLookupTable,
|
|
577
657
|
env: params.env,
|
|
578
658
|
owner: claim.owner,
|
|
579
659
|
});
|
|
@@ -841,7 +921,9 @@ async function executeTypedSatIntent(params: {
|
|
|
841
921
|
env: params.env,
|
|
842
922
|
});
|
|
843
923
|
if (operation.state === "failed") {
|
|
844
|
-
throw new
|
|
924
|
+
throw new SatSubmissionDefinitiveFailureError(
|
|
925
|
+
operation.error || `SAT signer operation ${requestId} failed`,
|
|
926
|
+
);
|
|
845
927
|
}
|
|
846
928
|
if (operation.state !== "confirmed" || !operation.signature) {
|
|
847
929
|
throw new SatSubmissionUnresolvedError({
|
|
@@ -854,14 +936,403 @@ async function executeTypedSatIntent(params: {
|
|
|
854
936
|
return { ...operation, signature: operation.signature };
|
|
855
937
|
}
|
|
856
938
|
|
|
939
|
+
type SatLookupSubmitContext = Awaited<ReturnType<typeof prepareLocalSignerSubmitContext>> & {
|
|
940
|
+
walletId: string;
|
|
941
|
+
};
|
|
942
|
+
|
|
943
|
+
function assertSatLookupTableEnabled(env: NodeJS.ProcessEnv): void {
|
|
944
|
+
if (String(env.FASED_SAT_ENABLE_ALT_V0 ?? "").trim() !== "1") {
|
|
945
|
+
throw new Error("SAT ALT/v0 support is disabled; set FASED_SAT_ENABLE_ALT_V0=1");
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
async function executeTypedSatLookupOperation(params: {
|
|
950
|
+
context: SatLookupSubmitContext;
|
|
951
|
+
cfg: FasedAgentConfig;
|
|
952
|
+
action: "create" | "extend" | "deactivate" | "close";
|
|
953
|
+
address: string;
|
|
954
|
+
cycleId: number;
|
|
955
|
+
pageIndex: number;
|
|
956
|
+
recentSlot?: number;
|
|
957
|
+
addresses?: string[];
|
|
958
|
+
parent?: Awaited<ReturnType<typeof buildLocalSignerInstructionRequest>>;
|
|
959
|
+
}) {
|
|
960
|
+
return await executeTypedSatIntent({
|
|
961
|
+
socketPath: params.context.socketPath,
|
|
962
|
+
walletId: params.context.walletId,
|
|
963
|
+
action: params.action,
|
|
964
|
+
lookupTable: {
|
|
965
|
+
address: params.address,
|
|
966
|
+
cycleId: String(params.cycleId),
|
|
967
|
+
pageIndex: String(params.pageIndex),
|
|
968
|
+
...(params.recentSlot == null ? {} : { recentSlot: String(params.recentSlot) }),
|
|
969
|
+
...(params.addresses?.length ? { addresses: params.addresses } : {}),
|
|
970
|
+
...(params.parent ? { parent: params.parent } : {}),
|
|
971
|
+
},
|
|
972
|
+
cluster: resolveSatCluster(params.cfg),
|
|
973
|
+
env: params.context.effectiveEnv,
|
|
974
|
+
});
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
async function readValidatedSatLookupTable(params: {
|
|
978
|
+
config: SatMiningConfig;
|
|
979
|
+
address: string;
|
|
980
|
+
authority: string;
|
|
981
|
+
}) {
|
|
982
|
+
const state = await inspectSatAddressLookupTable(params.config, { address: params.address });
|
|
983
|
+
if (!state) {
|
|
984
|
+
return null;
|
|
985
|
+
}
|
|
986
|
+
if (state.authority !== params.authority) {
|
|
987
|
+
throw new Error("SAT distribution lookup table is not controlled by the Mining signer");
|
|
988
|
+
}
|
|
989
|
+
if (!state.active) {
|
|
990
|
+
throw new Error("SAT distribution lookup table is not active");
|
|
991
|
+
}
|
|
992
|
+
return state;
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
async function waitForSatLookupTable(params: {
|
|
996
|
+
config: SatMiningConfig;
|
|
997
|
+
address: string;
|
|
998
|
+
authority: string;
|
|
999
|
+
requireNextSlot: boolean;
|
|
1000
|
+
}) {
|
|
1001
|
+
let lastError: unknown;
|
|
1002
|
+
for (let attempt = 0; attempt < 24; attempt += 1) {
|
|
1003
|
+
try {
|
|
1004
|
+
const state = await readValidatedSatLookupTable(params);
|
|
1005
|
+
if (state) {
|
|
1006
|
+
const currentSlot = await inspectSatChainSlot(params.config);
|
|
1007
|
+
if (!params.requireNextSlot || currentSlot > state.lastExtendedSlot) {
|
|
1008
|
+
return state;
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
} catch (error) {
|
|
1012
|
+
lastError = error;
|
|
1013
|
+
}
|
|
1014
|
+
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
1015
|
+
}
|
|
1016
|
+
throw new Error(
|
|
1017
|
+
`SAT distribution lookup table did not become active for use within 6s${
|
|
1018
|
+
lastError instanceof Error ? `: ${lastError.message}` : ""
|
|
1019
|
+
}`,
|
|
1020
|
+
);
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
const SAT_LOOKUP_TABLE_CREATE_SLOT_WINDOW = 128;
|
|
1024
|
+
|
|
1025
|
+
function recoverSatLookupTableRecentSlot(params: {
|
|
1026
|
+
context: SatLookupSubmitContext;
|
|
1027
|
+
lookupTable: string;
|
|
1028
|
+
currentSlot: number;
|
|
1029
|
+
}): number | undefined {
|
|
1030
|
+
const oldestSlot = Math.max(0, params.currentSlot - SAT_LOOKUP_TABLE_CREATE_SLOT_WINDOW);
|
|
1031
|
+
for (let recentSlot = params.currentSlot; recentSlot >= oldestSlot; recentSlot -= 1) {
|
|
1032
|
+
const [, derivedAddress] = params.context.solana.AddressLookupTableProgram.createLookupTable({
|
|
1033
|
+
authority: params.context.signer,
|
|
1034
|
+
payer: params.context.signer,
|
|
1035
|
+
recentSlot,
|
|
1036
|
+
});
|
|
1037
|
+
if (derivedAddress.toBase58() === params.lookupTable) {
|
|
1038
|
+
return recentSlot;
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
return undefined;
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
type SatLookupBinding = {
|
|
1045
|
+
cycleId: string;
|
|
1046
|
+
pageIndex: string;
|
|
1047
|
+
address?: string;
|
|
1048
|
+
bound: boolean;
|
|
1049
|
+
mutationRequestId?: string;
|
|
1050
|
+
mutationState?: SatSignerOperation["state"];
|
|
1051
|
+
};
|
|
1052
|
+
|
|
1053
|
+
async function readReconciledSatLookupBinding(params: {
|
|
1054
|
+
context: SatLookupSubmitContext;
|
|
1055
|
+
cycleId: number;
|
|
1056
|
+
pageIndex: number;
|
|
1057
|
+
}): Promise<SatLookupBinding> {
|
|
1058
|
+
const request = { cycleId: String(params.cycleId), pageIndex: String(params.pageIndex) };
|
|
1059
|
+
const readBinding = async () =>
|
|
1060
|
+
await callLocalSocketSigner<SatLookupBinding>(params.context.socketPath, {
|
|
1061
|
+
op: "v2.satLookup.binding.get",
|
|
1062
|
+
walletId: params.context.walletId,
|
|
1063
|
+
request,
|
|
1064
|
+
});
|
|
1065
|
+
const binding = await readBinding();
|
|
1066
|
+
if (
|
|
1067
|
+
binding.cycleId !== request.cycleId ||
|
|
1068
|
+
binding.pageIndex !== request.pageIndex ||
|
|
1069
|
+
binding.bound !== Boolean(binding.address) ||
|
|
1070
|
+
Boolean(binding.mutationRequestId) !== Boolean(binding.mutationState)
|
|
1071
|
+
) {
|
|
1072
|
+
throw new Error("signer returned an invalid SAT lookup-table binding");
|
|
1073
|
+
}
|
|
1074
|
+
if (binding.mutationState === "reserved") {
|
|
1075
|
+
throw new Error("SAT lookup-table mutation is already in progress");
|
|
1076
|
+
}
|
|
1077
|
+
if (
|
|
1078
|
+
(binding.mutationState === "broadcast" || binding.mutationState === "unknown") &&
|
|
1079
|
+
binding.mutationRequestId
|
|
1080
|
+
) {
|
|
1081
|
+
const operation = assertSatSignerOperationIdentity(
|
|
1082
|
+
await callLocalSocketSigner<SatSignerOperation>(params.context.socketPath, {
|
|
1083
|
+
op: "v2.operation.reconcile",
|
|
1084
|
+
walletId: params.context.walletId,
|
|
1085
|
+
request: { requestId: binding.mutationRequestId },
|
|
1086
|
+
}),
|
|
1087
|
+
binding.mutationRequestId,
|
|
1088
|
+
);
|
|
1089
|
+
if (
|
|
1090
|
+
operation.state === "reserved" ||
|
|
1091
|
+
operation.state === "broadcast" ||
|
|
1092
|
+
operation.state === "unknown"
|
|
1093
|
+
) {
|
|
1094
|
+
throw new SatSubmissionUnresolvedError({
|
|
1095
|
+
requestId: operation.requestId,
|
|
1096
|
+
state: operation.state,
|
|
1097
|
+
signature: operation.signature,
|
|
1098
|
+
detail: operation.error,
|
|
1099
|
+
});
|
|
1100
|
+
}
|
|
1101
|
+
const reconciled = await readBinding();
|
|
1102
|
+
if (
|
|
1103
|
+
reconciled.cycleId !== request.cycleId ||
|
|
1104
|
+
reconciled.pageIndex !== request.pageIndex ||
|
|
1105
|
+
reconciled.bound !== Boolean(reconciled.address) ||
|
|
1106
|
+
Boolean(reconciled.mutationRequestId) !== Boolean(reconciled.mutationState)
|
|
1107
|
+
) {
|
|
1108
|
+
throw new Error("signer returned an invalid reconciled SAT lookup-table binding");
|
|
1109
|
+
}
|
|
1110
|
+
return reconciled;
|
|
1111
|
+
}
|
|
1112
|
+
return binding;
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
async function ensureSatDistributionLookupTable(params: {
|
|
1116
|
+
context: SatLookupSubmitContext;
|
|
1117
|
+
cfg: FasedAgentConfig;
|
|
1118
|
+
config: SatMiningConfig;
|
|
1119
|
+
lookupTableAddress?: string;
|
|
1120
|
+
cycleId: number;
|
|
1121
|
+
pageIndex: number;
|
|
1122
|
+
addresses: string[];
|
|
1123
|
+
parent: Awaited<ReturnType<typeof buildLocalSignerInstructionRequest>>;
|
|
1124
|
+
onLookupTableResolved?: (lookupTableAddress: string) => Promise<void>;
|
|
1125
|
+
}) {
|
|
1126
|
+
assertSatLookupTableEnabled(params.context.effectiveEnv);
|
|
1127
|
+
const desiredAddresses = [...new Set(params.addresses.map((entry) => entry.trim()))].filter(
|
|
1128
|
+
Boolean,
|
|
1129
|
+
);
|
|
1130
|
+
if (desiredAddresses.length === 0 || desiredAddresses.length > 256) {
|
|
1131
|
+
throw new Error("SAT distribution lookup table requires 1-256 exact account addresses");
|
|
1132
|
+
}
|
|
1133
|
+
const signerBinding = await readReconciledSatLookupBinding({
|
|
1134
|
+
context: params.context,
|
|
1135
|
+
cycleId: params.cycleId,
|
|
1136
|
+
pageIndex: params.pageIndex,
|
|
1137
|
+
});
|
|
1138
|
+
let lookupTable = signerBinding.address?.trim() || "";
|
|
1139
|
+
if (signerBinding.bound && lookupTable) {
|
|
1140
|
+
await params.onLookupTableResolved?.(lookupTable);
|
|
1141
|
+
}
|
|
1142
|
+
let state = lookupTable
|
|
1143
|
+
? await readValidatedSatLookupTable({
|
|
1144
|
+
config: params.config,
|
|
1145
|
+
address: lookupTable,
|
|
1146
|
+
authority: params.context.signerAddress,
|
|
1147
|
+
})
|
|
1148
|
+
: null;
|
|
1149
|
+
|
|
1150
|
+
if (lookupTable && state) {
|
|
1151
|
+
await params.onLookupTableResolved?.(lookupTable);
|
|
1152
|
+
}
|
|
1153
|
+
let created = false;
|
|
1154
|
+
const transactionHashes: string[] = [];
|
|
1155
|
+
let createRecentSlot: number | undefined;
|
|
1156
|
+
const attemptedCreateAddresses = new Set<string>();
|
|
1157
|
+
if (lookupTable && !state) {
|
|
1158
|
+
const currentSlot = await inspectSatChainSlot(params.config);
|
|
1159
|
+
createRecentSlot = recoverSatLookupTableRecentSlot({
|
|
1160
|
+
context: params.context,
|
|
1161
|
+
lookupTable,
|
|
1162
|
+
currentSlot,
|
|
1163
|
+
});
|
|
1164
|
+
if (createRecentSlot == null) {
|
|
1165
|
+
if (signerBinding.bound) {
|
|
1166
|
+
throw new Error(
|
|
1167
|
+
"SAT distribution lookup table identity is not recoverable within the signer freshness window",
|
|
1168
|
+
);
|
|
1169
|
+
}
|
|
1170
|
+
// The signer clears a create binding only after two independent RPC
|
|
1171
|
+
// origins prove both blockhash expiry and table absence. Discard the
|
|
1172
|
+
// stale Gateway cache so the next exact workflow attempt can derive and
|
|
1173
|
+
// persist a fresh signer-owned table identity.
|
|
1174
|
+
lookupTable = "";
|
|
1175
|
+
} else {
|
|
1176
|
+
attemptedCreateAddresses.add(lookupTable);
|
|
1177
|
+
await params.onLookupTableResolved?.(lookupTable);
|
|
1178
|
+
}
|
|
1179
|
+
}
|
|
1180
|
+
while (!state) {
|
|
1181
|
+
if (!lookupTable || createRecentSlot == null) {
|
|
1182
|
+
const currentSlot = await inspectSatChainSlot(params.config);
|
|
1183
|
+
const oldestSlot = Math.max(0, currentSlot - SAT_LOOKUP_TABLE_CREATE_SLOT_WINDOW);
|
|
1184
|
+
let selected = false;
|
|
1185
|
+
for (
|
|
1186
|
+
let recentSlot = Math.max(0, currentSlot - 1);
|
|
1187
|
+
recentSlot >= oldestSlot;
|
|
1188
|
+
recentSlot -= 1
|
|
1189
|
+
) {
|
|
1190
|
+
const [, derivedAddress] =
|
|
1191
|
+
params.context.solana.AddressLookupTableProgram.createLookupTable({
|
|
1192
|
+
authority: params.context.signer,
|
|
1193
|
+
payer: params.context.signer,
|
|
1194
|
+
recentSlot,
|
|
1195
|
+
});
|
|
1196
|
+
const candidate = derivedAddress.toBase58();
|
|
1197
|
+
if (attemptedCreateAddresses.has(candidate)) {
|
|
1198
|
+
continue;
|
|
1199
|
+
}
|
|
1200
|
+
attemptedCreateAddresses.add(candidate);
|
|
1201
|
+
const existingCandidate = await readValidatedSatLookupTable({
|
|
1202
|
+
config: params.config,
|
|
1203
|
+
address: candidate,
|
|
1204
|
+
authority: params.context.signerAddress,
|
|
1205
|
+
});
|
|
1206
|
+
if (existingCandidate) {
|
|
1207
|
+
continue;
|
|
1208
|
+
}
|
|
1209
|
+
lookupTable = candidate;
|
|
1210
|
+
createRecentSlot = recentSlot;
|
|
1211
|
+
// Persist each deterministic candidate before its first possible
|
|
1212
|
+
// broadcast. Signer reverse binding prevents two page identities from
|
|
1213
|
+
// ever sharing one address; a collision advances to the next fresh slot.
|
|
1214
|
+
await params.onLookupTableResolved?.(lookupTable);
|
|
1215
|
+
selected = true;
|
|
1216
|
+
break;
|
|
1217
|
+
}
|
|
1218
|
+
if (!selected) {
|
|
1219
|
+
throw new Error(
|
|
1220
|
+
"SAT distribution lookup table has no free signer-owned address in the freshness window",
|
|
1221
|
+
);
|
|
1222
|
+
}
|
|
1223
|
+
}
|
|
1224
|
+
try {
|
|
1225
|
+
const submitted = await executeTypedSatLookupOperation({
|
|
1226
|
+
context: params.context,
|
|
1227
|
+
cfg: params.cfg,
|
|
1228
|
+
action: "create",
|
|
1229
|
+
address: lookupTable,
|
|
1230
|
+
cycleId: params.cycleId,
|
|
1231
|
+
pageIndex: params.pageIndex,
|
|
1232
|
+
recentSlot: createRecentSlot,
|
|
1233
|
+
parent: params.parent,
|
|
1234
|
+
});
|
|
1235
|
+
transactionHashes.push(submitted.signature);
|
|
1236
|
+
created = true;
|
|
1237
|
+
} catch (error) {
|
|
1238
|
+
if (
|
|
1239
|
+
error instanceof SatSubmissionDefinitiveFailureError &&
|
|
1240
|
+
error.message.includes("address is already bound to another cycle and page")
|
|
1241
|
+
) {
|
|
1242
|
+
lookupTable = "";
|
|
1243
|
+
createRecentSlot = undefined;
|
|
1244
|
+
continue;
|
|
1245
|
+
}
|
|
1246
|
+
if (
|
|
1247
|
+
error instanceof SatSubmissionUnresolvedError ||
|
|
1248
|
+
error instanceof SatSubmissionDefinitiveFailureError
|
|
1249
|
+
) {
|
|
1250
|
+
throw error;
|
|
1251
|
+
}
|
|
1252
|
+
try {
|
|
1253
|
+
state = await waitForSatLookupTable({
|
|
1254
|
+
config: params.config,
|
|
1255
|
+
address: lookupTable,
|
|
1256
|
+
authority: params.context.signerAddress,
|
|
1257
|
+
requireNextSlot: false,
|
|
1258
|
+
});
|
|
1259
|
+
} catch {
|
|
1260
|
+
throw error;
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
state ??= await waitForSatLookupTable({
|
|
1264
|
+
config: params.config,
|
|
1265
|
+
address: lookupTable,
|
|
1266
|
+
authority: params.context.signerAddress,
|
|
1267
|
+
requireNextSlot: false,
|
|
1268
|
+
});
|
|
1269
|
+
break;
|
|
1270
|
+
}
|
|
1271
|
+
if (!state) {
|
|
1272
|
+
throw new Error("SAT distribution lookup table was not found at the confirmed commitment");
|
|
1273
|
+
}
|
|
1274
|
+
const existing = new Set(state.addresses);
|
|
1275
|
+
const missing = desiredAddresses.filter((entry) => !existing.has(entry));
|
|
1276
|
+
for (let offset = 0; offset < missing.length; offset += SAT_LOOKUP_TABLE_EXTEND_CHUNK_SIZE) {
|
|
1277
|
+
const addresses = missing.slice(offset, offset + SAT_LOOKUP_TABLE_EXTEND_CHUNK_SIZE);
|
|
1278
|
+
try {
|
|
1279
|
+
const submitted = await executeTypedSatLookupOperation({
|
|
1280
|
+
context: params.context,
|
|
1281
|
+
cfg: params.cfg,
|
|
1282
|
+
action: "extend",
|
|
1283
|
+
address: lookupTable,
|
|
1284
|
+
cycleId: params.cycleId,
|
|
1285
|
+
pageIndex: params.pageIndex,
|
|
1286
|
+
addresses,
|
|
1287
|
+
parent: params.parent,
|
|
1288
|
+
});
|
|
1289
|
+
transactionHashes.push(submitted.signature);
|
|
1290
|
+
} catch (error) {
|
|
1291
|
+
if (error instanceof SatSubmissionUnresolvedError) {
|
|
1292
|
+
throw error;
|
|
1293
|
+
}
|
|
1294
|
+
const concurrentState = await waitForSatLookupTable({
|
|
1295
|
+
config: params.config,
|
|
1296
|
+
address: lookupTable,
|
|
1297
|
+
authority: params.context.signerAddress,
|
|
1298
|
+
requireNextSlot: false,
|
|
1299
|
+
}).catch(() => null);
|
|
1300
|
+
if (
|
|
1301
|
+
!concurrentState ||
|
|
1302
|
+
addresses.some((address) => !concurrentState.addresses.includes(address))
|
|
1303
|
+
) {
|
|
1304
|
+
throw error;
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
const ready = await waitForSatLookupTable({
|
|
1309
|
+
config: params.config,
|
|
1310
|
+
address: lookupTable,
|
|
1311
|
+
authority: params.context.signerAddress,
|
|
1312
|
+
requireNextSlot: true,
|
|
1313
|
+
});
|
|
1314
|
+
for (const address of desiredAddresses) {
|
|
1315
|
+
if (!ready.addresses.includes(address)) {
|
|
1316
|
+
throw new Error(`SAT distribution lookup table did not persist required account ${address}`);
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
return {
|
|
1320
|
+
lookupTable,
|
|
1321
|
+
created,
|
|
1322
|
+
extended: missing.length > 0,
|
|
1323
|
+
addressCount: ready.addresses.length,
|
|
1324
|
+
transactionHashes,
|
|
1325
|
+
};
|
|
1326
|
+
}
|
|
1327
|
+
|
|
857
1328
|
async function submitInstructionViaLocalSigner(
|
|
858
1329
|
params: {
|
|
859
1330
|
cfg: FasedAgentConfig;
|
|
860
1331
|
env: NodeJS.ProcessEnv;
|
|
861
1332
|
} & SatInstructionSubmitSpec,
|
|
862
|
-
) {
|
|
1333
|
+
): Promise<SatInstructionSubmitResult> {
|
|
863
1334
|
const context = await prepareLocalSignerSubmitContext(params.cfg, params.env);
|
|
864
|
-
const
|
|
1335
|
+
const baseRequest = await buildLocalSignerInstructionRequest({
|
|
865
1336
|
solana: context.solana,
|
|
866
1337
|
signer: context.signer,
|
|
867
1338
|
env: context.effectiveEnv,
|
|
@@ -870,6 +1341,23 @@ async function submitInstructionViaLocalSigner(
|
|
|
870
1341
|
if (!context.walletId) {
|
|
871
1342
|
throw new Error("typed SAT signing requires an explicit mining walletId");
|
|
872
1343
|
}
|
|
1344
|
+
let managedLookupTable: Awaited<ReturnType<typeof ensureSatDistributionLookupTable>> | undefined;
|
|
1345
|
+
if (params.manageAddressLookupTable) {
|
|
1346
|
+
managedLookupTable = await ensureSatDistributionLookupTable({
|
|
1347
|
+
context: { ...context, walletId: context.walletId },
|
|
1348
|
+
cfg: params.cfg,
|
|
1349
|
+
config: params.cfg as unknown as SatMiningConfig,
|
|
1350
|
+
lookupTableAddress: params.manageAddressLookupTable.lookupTableAddress,
|
|
1351
|
+
cycleId: params.manageAddressLookupTable.cycleId,
|
|
1352
|
+
pageIndex: params.manageAddressLookupTable.pageIndex,
|
|
1353
|
+
addresses: baseRequest.keys.filter((key) => !key.isSigner).map((key) => key.pubkey),
|
|
1354
|
+
parent: baseRequest,
|
|
1355
|
+
onLookupTableResolved: params.manageAddressLookupTable.onLookupTableResolved,
|
|
1356
|
+
});
|
|
1357
|
+
}
|
|
1358
|
+
const request = managedLookupTable
|
|
1359
|
+
? { ...baseRequest, addressLookupTables: [managedLookupTable.lookupTable] }
|
|
1360
|
+
: baseRequest;
|
|
873
1361
|
const submitted = await executeTypedSatIntent({
|
|
874
1362
|
socketPath: context.socketPath,
|
|
875
1363
|
walletId: context.walletId,
|
|
@@ -883,6 +1371,20 @@ async function submitInstructionViaLocalSigner(
|
|
|
883
1371
|
signer: context.signerAddress,
|
|
884
1372
|
signerState: submitted.state,
|
|
885
1373
|
requestId: submitted.requestId,
|
|
1374
|
+
...(request.addressLookupTables?.length
|
|
1375
|
+
? {
|
|
1376
|
+
transactionVersion: "v0" as const,
|
|
1377
|
+
lookupTableAddress: request.addressLookupTables[0],
|
|
1378
|
+
}
|
|
1379
|
+
: { transactionVersion: "legacy" as const }),
|
|
1380
|
+
...(managedLookupTable
|
|
1381
|
+
? {
|
|
1382
|
+
lookupTableCreated: managedLookupTable.created,
|
|
1383
|
+
lookupTableExtended: managedLookupTable.extended,
|
|
1384
|
+
lookupTableAddressCount: managedLookupTable.addressCount,
|
|
1385
|
+
lookupTableTransactionHashes: managedLookupTable.transactionHashes,
|
|
1386
|
+
}
|
|
1387
|
+
: {}),
|
|
886
1388
|
};
|
|
887
1389
|
}
|
|
888
1390
|
|
|
@@ -901,6 +1403,8 @@ async function submitInstruction(
|
|
|
901
1403
|
env: effectiveEnv,
|
|
902
1404
|
data: params.data,
|
|
903
1405
|
programId: params.programId,
|
|
1406
|
+
addressLookupTables: params.addressLookupTables,
|
|
1407
|
+
manageAddressLookupTable: params.manageAddressLookupTable,
|
|
904
1408
|
accountResolver: params.accountResolver,
|
|
905
1409
|
});
|
|
906
1410
|
}
|
|
@@ -2702,13 +3206,35 @@ export async function submitSatScoreCyclePage(
|
|
|
2702
3206
|
|
|
2703
3207
|
export async function submitSatDistributeCyclePage(
|
|
2704
3208
|
_config: SatMiningConfig,
|
|
2705
|
-
params: {
|
|
3209
|
+
params: {
|
|
3210
|
+
cycleId: number;
|
|
3211
|
+
pageIndex: number;
|
|
3212
|
+
chunkIndex: number;
|
|
3213
|
+
minerCycleAccounts?: string[];
|
|
3214
|
+
lookupTableAddress?: string;
|
|
3215
|
+
onLookupTableResolved?: (lookupTableAddress: string) => Promise<void>;
|
|
3216
|
+
},
|
|
2706
3217
|
) {
|
|
2707
3218
|
const cfg = loadConfigForSatRuntime(_config);
|
|
3219
|
+
const lookupTableAddress = params.lookupTableAddress?.trim() ?? "";
|
|
3220
|
+
const requiresLookupTable =
|
|
3221
|
+
(params.minerCycleAccounts?.length ?? 0) >= SAT_DISTRIBUTION_LOOKUP_MIN_MINERS;
|
|
2708
3222
|
return submitInstruction({
|
|
2709
3223
|
cfg,
|
|
2710
3224
|
env: process.env,
|
|
2711
3225
|
data: buildDistributeCyclePageData(params),
|
|
3226
|
+
...(lookupTableAddress || requiresLookupTable
|
|
3227
|
+
? {
|
|
3228
|
+
manageAddressLookupTable: {
|
|
3229
|
+
cycleId: params.cycleId,
|
|
3230
|
+
pageIndex: params.pageIndex,
|
|
3231
|
+
...(lookupTableAddress ? { lookupTableAddress } : {}),
|
|
3232
|
+
...(params.onLookupTableResolved
|
|
3233
|
+
? { onLookupTableResolved: params.onLookupTableResolved }
|
|
3234
|
+
: {}),
|
|
3235
|
+
},
|
|
3236
|
+
}
|
|
3237
|
+
: {}),
|
|
2712
3238
|
accountResolver: async (solana, signer) => {
|
|
2713
3239
|
const programId = new solana.PublicKey(SAT_PROGRAM_ID());
|
|
2714
3240
|
const [satCycleState] = solana.PublicKey.findProgramAddressSync(
|
|
@@ -2798,6 +3324,51 @@ export async function submitSatDistributeCyclePage(
|
|
|
2798
3324
|
});
|
|
2799
3325
|
}
|
|
2800
3326
|
|
|
3327
|
+
export async function submitSatCleanupDistributionLookupTable(
|
|
3328
|
+
_config: SatMiningConfig,
|
|
3329
|
+
params: {
|
|
3330
|
+
cycleId: number;
|
|
3331
|
+
pageIndex: number;
|
|
3332
|
+
action: "deactivate" | "close";
|
|
3333
|
+
},
|
|
3334
|
+
) {
|
|
3335
|
+
const cfg = loadConfigForSatRuntime(_config);
|
|
3336
|
+
const context = await prepareLocalSignerSubmitContext(cfg, process.env);
|
|
3337
|
+
assertSatLookupTableEnabled(context.effectiveEnv);
|
|
3338
|
+
if (!context.walletId) {
|
|
3339
|
+
throw new Error("typed SAT lookup-table cleanup requires an explicit mining walletId");
|
|
3340
|
+
}
|
|
3341
|
+
const binding = await readReconciledSatLookupBinding({
|
|
3342
|
+
context: { ...context, walletId: context.walletId },
|
|
3343
|
+
cycleId: params.cycleId,
|
|
3344
|
+
pageIndex: params.pageIndex,
|
|
3345
|
+
});
|
|
3346
|
+
const lookupTable = binding.address?.trim() ?? "";
|
|
3347
|
+
if (
|
|
3348
|
+
binding.cycleId !== String(params.cycleId) ||
|
|
3349
|
+
binding.pageIndex !== String(params.pageIndex) ||
|
|
3350
|
+
!binding.bound ||
|
|
3351
|
+
!lookupTable
|
|
3352
|
+
) {
|
|
3353
|
+
throw new Error("SAT distribution lookup table is not bound to this wallet, cycle, and page");
|
|
3354
|
+
}
|
|
3355
|
+
const submitted = await executeTypedSatLookupOperation({
|
|
3356
|
+
context: { ...context, walletId: context.walletId },
|
|
3357
|
+
cfg,
|
|
3358
|
+
action: params.action,
|
|
3359
|
+
address: lookupTable,
|
|
3360
|
+
cycleId: params.cycleId,
|
|
3361
|
+
pageIndex: params.pageIndex,
|
|
3362
|
+
});
|
|
3363
|
+
return {
|
|
3364
|
+
lookupTable,
|
|
3365
|
+
action: params.action,
|
|
3366
|
+
transactionHashes: [submitted.signature],
|
|
3367
|
+
signerState: submitted.state,
|
|
3368
|
+
requestId: submitted.requestId,
|
|
3369
|
+
};
|
|
3370
|
+
}
|
|
3371
|
+
|
|
2801
3372
|
export async function submitSatClaimCycleRewards(
|
|
2802
3373
|
_config: SatMiningConfig,
|
|
2803
3374
|
params: { cycleId: number },
|