@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
|
@@ -7,7 +7,7 @@ import { resolveWalletProviderId } from "../../../wallet/wallet-provider-resolve
|
|
|
7
7
|
import { createSignerReviewApprovalRequest } from "../../../wallet/wallet-send-approvals.js";
|
|
8
8
|
import "../../../plugin-sdk/sat-runtime.js";
|
|
9
9
|
import { SAT_BOND_INSTRUCTION_DISCRIMINATORS, SAT_INSTRUCTION_DISCRIMINATORS, SAT_PROTOCOL_CONSTANTS, resolveSatGenesisProfileContract } from "./protocol-contract.js";
|
|
10
|
-
import { inspectSatCycle, inspectSatCycleRegistryMeta, inspectSatMinerCyclesByAddress } from "./rpc-read.js";
|
|
10
|
+
import { inspectSatAddressLookupTable, inspectSatChainSlot, inspectSatCycle, inspectSatCycleRegistryMeta, inspectSatMinerCyclesByAddress } from "./rpc-read.js";
|
|
11
11
|
import { decodeHash32 } from "./hash-spec.js";
|
|
12
12
|
import { resolveSatSignerCodec } from "./signer-codec-manifest.js";
|
|
13
13
|
import { buildSatSubmissionOperationKey, claimSatSubmission, digestSatSubmissionIntent, updateSatSubmission, waitForSatSubmissionLease } from "./submission-ledger.js";
|
|
@@ -49,6 +49,8 @@ const MINING_STAKE_SEED = "mining_stake";
|
|
|
49
49
|
const TOKEN_PROGRAM_ID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
|
|
50
50
|
const ASSOCIATED_TOKEN_PROGRAM_ID = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
|
|
51
51
|
const SLOT_HASHES_SYSVAR_ID = "SysvarS1otHashes111111111111111111111111111";
|
|
52
|
+
const SAT_DISTRIBUTION_LOOKUP_MIN_MINERS = 16;
|
|
53
|
+
const SAT_LOOKUP_TABLE_EXTEND_CHUNK_SIZE = 20;
|
|
52
54
|
const IX = SAT_INSTRUCTION_DISCRIMINATORS;
|
|
53
55
|
const BOND_IX = SAT_BOND_INSTRUCTION_DISCRIMINATORS;
|
|
54
56
|
const VAULT_BOND_ACTIONS = new Set([
|
|
@@ -256,6 +258,7 @@ async function buildLocalSignerInstructionRequest(params) {
|
|
|
256
258
|
isSigner: key.isSigner,
|
|
257
259
|
isWritable: key.isWritable
|
|
258
260
|
})),
|
|
261
|
+
...params.spec.addressLookupTables?.length ? { addressLookupTables: params.spec.addressLookupTables } : {},
|
|
259
262
|
...context ? { context } : {}
|
|
260
263
|
};
|
|
261
264
|
}
|
|
@@ -290,8 +293,9 @@ async function requireTypedSatSignerCapabilities(socketPath, intentType) {
|
|
|
290
293
|
"signerOwnedStateRecheck",
|
|
291
294
|
"durableReviewAuthorization"
|
|
292
295
|
].filter((feature) => !features.has(feature)) : [];
|
|
293
|
-
|
|
294
|
-
|
|
296
|
+
const missingLookupFeatures = intentType === "solana.satLookupTable" && !features.has("typedSATAddressLookupTables") ? ["typedSATAddressLookupTables"] : [];
|
|
297
|
+
if (result.ready !== true || protocol?.current !== 2 || typeof protocol.min !== "number" || protocol.min > 2 || typeof protocol.max !== "number" || protocol.max < 2 || !capabilities?.intentTypes?.includes(intentType) || missingFeatures.length > 0 || missingLookupFeatures.length > 0 || intentType === "solana.vaultBondAction" && !features.has("typedVaultBondActions") || missingVaultReviewFeatures.length > 0 || missingStates.length > 0) {
|
|
298
|
+
throw new Error(`local-socket-signer does not support the required typed SAT protocol-v2 contract${missingFeatures.length > 0 ? `; missing features: ${missingFeatures.join(", ")}` : ""}${missingVaultReviewFeatures.length > 0 ? `; missing reviewed Vault features: ${missingVaultReviewFeatures.join(", ")}` : ""}${missingLookupFeatures.length > 0 ? `; missing SAT lookup features: ${missingLookupFeatures.join(", ")}` : ""}${missingStates.length > 0 ? `; missing states: ${missingStates.join(", ")}` : ""}`);
|
|
295
299
|
}
|
|
296
300
|
}
|
|
297
301
|
async function reconcileTypedSatOperation(params) {
|
|
@@ -320,6 +324,11 @@ function assertSatSignerOperationIdentity(operation, requestId) {
|
|
|
320
324
|
function signerStateForLedger(state) {
|
|
321
325
|
return state;
|
|
322
326
|
}
|
|
327
|
+
function assertSatLookupTableAction(value) {
|
|
328
|
+
if (value !== "create" && value !== "extend" && value !== "deactivate" && value !== "close") {
|
|
329
|
+
throw new Error(`unsupported SAT lookup-table action ${value}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
323
332
|
var SatSubmissionUnresolvedError = class extends Error {
|
|
324
333
|
constructor(params) {
|
|
325
334
|
super(`SAT signer operation ${params.requestId} remains ${params.state}${params.signature ? ` with signature ${params.signature}` : ""}; it is unresolved and must be reconciled with the same idempotency key before any new submission${params.detail ? ` (${params.detail})` : ""}`);
|
|
@@ -328,11 +337,29 @@ var SatSubmissionUnresolvedError = class extends Error {
|
|
|
328
337
|
this.signature = params.signature;
|
|
329
338
|
}
|
|
330
339
|
};
|
|
340
|
+
var SatSubmissionDefinitiveFailureError = class extends Error {
|
|
341
|
+
constructor(message) {
|
|
342
|
+
super(message);
|
|
343
|
+
this.name = "SatSubmissionDefinitiveFailureError";
|
|
344
|
+
}
|
|
345
|
+
};
|
|
331
346
|
async function executeTypedSatIntent(params) {
|
|
332
|
-
const
|
|
333
|
-
const
|
|
347
|
+
const isLookupTable = params.lookupTable != null;
|
|
348
|
+
const isVaultBond = !isLookupTable && params.action !== "cleanupBatch" && VAULT_BOND_ACTIONS.has(params.action);
|
|
349
|
+
const intentType = isLookupTable ? "solana.satLookupTable" : isVaultBond ? "solana.vaultBondAction" : "solana.satAction";
|
|
334
350
|
await requireTypedSatSignerCapabilities(params.socketPath, intentType);
|
|
335
|
-
const intent =
|
|
351
|
+
const intent = isLookupTable ? (() => {
|
|
352
|
+
if (params.instruction || params.instructions || !params.lookupTable) {
|
|
353
|
+
throw new Error("typed SAT lookup-table execution accepts only semantic lookup details");
|
|
354
|
+
}
|
|
355
|
+
const action = params.action;
|
|
356
|
+
assertSatLookupTableAction(action);
|
|
357
|
+
return {
|
|
358
|
+
type: "solana.satLookupTable",
|
|
359
|
+
action,
|
|
360
|
+
lookupTable: params.lookupTable
|
|
361
|
+
};
|
|
362
|
+
})() : isVaultBond ? (() => {
|
|
336
363
|
if (!params.instruction || params.instructions) {
|
|
337
364
|
throw new Error("typed Vault bond execution requires exactly one semantic instruction");
|
|
338
365
|
}
|
|
@@ -364,6 +391,7 @@ async function executeTypedSatIntent(params) {
|
|
|
364
391
|
operationKey,
|
|
365
392
|
intentDigest,
|
|
366
393
|
action: params.action,
|
|
394
|
+
allowFailedRetry: isLookupTable,
|
|
367
395
|
env: params.env
|
|
368
396
|
});
|
|
369
397
|
if (!claim.claimed) {
|
|
@@ -378,6 +406,7 @@ async function executeTypedSatIntent(params) {
|
|
|
378
406
|
operationKey,
|
|
379
407
|
intentDigest,
|
|
380
408
|
action: params.action,
|
|
409
|
+
allowFailedRetry: isLookupTable,
|
|
381
410
|
env: params.env,
|
|
382
411
|
owner: claim.owner
|
|
383
412
|
});
|
|
@@ -622,7 +651,7 @@ async function executeTypedSatIntent(params) {
|
|
|
622
651
|
env: params.env
|
|
623
652
|
});
|
|
624
653
|
if (operation.state === "failed") {
|
|
625
|
-
throw new
|
|
654
|
+
throw new SatSubmissionDefinitiveFailureError(operation.error || `SAT signer operation ${requestId} failed`);
|
|
626
655
|
}
|
|
627
656
|
if (operation.state !== "confirmed" || !operation.signature) {
|
|
628
657
|
throw new SatSubmissionUnresolvedError({
|
|
@@ -637,9 +666,288 @@ async function executeTypedSatIntent(params) {
|
|
|
637
666
|
signature: operation.signature
|
|
638
667
|
};
|
|
639
668
|
}
|
|
669
|
+
function assertSatLookupTableEnabled(env) {
|
|
670
|
+
if (String(env.FASED_SAT_ENABLE_ALT_V0 ?? "").trim() !== "1") {
|
|
671
|
+
throw new Error("SAT ALT/v0 support is disabled; set FASED_SAT_ENABLE_ALT_V0=1");
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
async function executeTypedSatLookupOperation(params) {
|
|
675
|
+
return await executeTypedSatIntent({
|
|
676
|
+
socketPath: params.context.socketPath,
|
|
677
|
+
walletId: params.context.walletId,
|
|
678
|
+
action: params.action,
|
|
679
|
+
lookupTable: {
|
|
680
|
+
address: params.address,
|
|
681
|
+
cycleId: String(params.cycleId),
|
|
682
|
+
pageIndex: String(params.pageIndex),
|
|
683
|
+
...params.recentSlot == null ? {} : { recentSlot: String(params.recentSlot) },
|
|
684
|
+
...params.addresses?.length ? { addresses: params.addresses } : {},
|
|
685
|
+
...params.parent ? { parent: params.parent } : {}
|
|
686
|
+
},
|
|
687
|
+
cluster: resolveSatCluster(params.cfg),
|
|
688
|
+
env: params.context.effectiveEnv
|
|
689
|
+
});
|
|
690
|
+
}
|
|
691
|
+
async function readValidatedSatLookupTable(params) {
|
|
692
|
+
const state = await inspectSatAddressLookupTable(params.config, { address: params.address });
|
|
693
|
+
if (!state) {
|
|
694
|
+
return null;
|
|
695
|
+
}
|
|
696
|
+
if (state.authority !== params.authority) {
|
|
697
|
+
throw new Error("SAT distribution lookup table is not controlled by the Mining signer");
|
|
698
|
+
}
|
|
699
|
+
if (!state.active) {
|
|
700
|
+
throw new Error("SAT distribution lookup table is not active");
|
|
701
|
+
}
|
|
702
|
+
return state;
|
|
703
|
+
}
|
|
704
|
+
async function waitForSatLookupTable(params) {
|
|
705
|
+
let lastError;
|
|
706
|
+
for (let attempt = 0; attempt < 24; attempt += 1) {
|
|
707
|
+
try {
|
|
708
|
+
const state = await readValidatedSatLookupTable(params);
|
|
709
|
+
if (state) {
|
|
710
|
+
const currentSlot = await inspectSatChainSlot(params.config);
|
|
711
|
+
if (!params.requireNextSlot || currentSlot > state.lastExtendedSlot) {
|
|
712
|
+
return state;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
} catch (error) {
|
|
716
|
+
lastError = error;
|
|
717
|
+
}
|
|
718
|
+
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
719
|
+
}
|
|
720
|
+
throw new Error(`SAT distribution lookup table did not become active for use within 6s${lastError instanceof Error ? `: ${lastError.message}` : ""}`);
|
|
721
|
+
}
|
|
722
|
+
const SAT_LOOKUP_TABLE_CREATE_SLOT_WINDOW = 128;
|
|
723
|
+
function recoverSatLookupTableRecentSlot(params) {
|
|
724
|
+
const oldestSlot = Math.max(0, params.currentSlot - SAT_LOOKUP_TABLE_CREATE_SLOT_WINDOW);
|
|
725
|
+
for (let recentSlot = params.currentSlot; recentSlot >= oldestSlot; recentSlot -= 1) {
|
|
726
|
+
const [, derivedAddress] = params.context.solana.AddressLookupTableProgram.createLookupTable({
|
|
727
|
+
authority: params.context.signer,
|
|
728
|
+
payer: params.context.signer,
|
|
729
|
+
recentSlot
|
|
730
|
+
});
|
|
731
|
+
if (derivedAddress.toBase58() === params.lookupTable) {
|
|
732
|
+
return recentSlot;
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
return undefined;
|
|
736
|
+
}
|
|
737
|
+
async function readReconciledSatLookupBinding(params) {
|
|
738
|
+
const request = {
|
|
739
|
+
cycleId: String(params.cycleId),
|
|
740
|
+
pageIndex: String(params.pageIndex)
|
|
741
|
+
};
|
|
742
|
+
const readBinding = async () => await callLocalSocketSigner(params.context.socketPath, {
|
|
743
|
+
op: "v2.satLookup.binding.get",
|
|
744
|
+
walletId: params.context.walletId,
|
|
745
|
+
request
|
|
746
|
+
});
|
|
747
|
+
const binding = await readBinding();
|
|
748
|
+
if (binding.cycleId !== request.cycleId || binding.pageIndex !== request.pageIndex || binding.bound !== Boolean(binding.address) || Boolean(binding.mutationRequestId) !== Boolean(binding.mutationState)) {
|
|
749
|
+
throw new Error("signer returned an invalid SAT lookup-table binding");
|
|
750
|
+
}
|
|
751
|
+
if (binding.mutationState === "reserved") {
|
|
752
|
+
throw new Error("SAT lookup-table mutation is already in progress");
|
|
753
|
+
}
|
|
754
|
+
if ((binding.mutationState === "broadcast" || binding.mutationState === "unknown") && binding.mutationRequestId) {
|
|
755
|
+
const operation = assertSatSignerOperationIdentity(await callLocalSocketSigner(params.context.socketPath, {
|
|
756
|
+
op: "v2.operation.reconcile",
|
|
757
|
+
walletId: params.context.walletId,
|
|
758
|
+
request: { requestId: binding.mutationRequestId }
|
|
759
|
+
}), binding.mutationRequestId);
|
|
760
|
+
if (operation.state === "reserved" || operation.state === "broadcast" || operation.state === "unknown") {
|
|
761
|
+
throw new SatSubmissionUnresolvedError({
|
|
762
|
+
requestId: operation.requestId,
|
|
763
|
+
state: operation.state,
|
|
764
|
+
signature: operation.signature,
|
|
765
|
+
detail: operation.error
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
const reconciled = await readBinding();
|
|
769
|
+
if (reconciled.cycleId !== request.cycleId || reconciled.pageIndex !== request.pageIndex || reconciled.bound !== Boolean(reconciled.address) || Boolean(reconciled.mutationRequestId) !== Boolean(reconciled.mutationState)) {
|
|
770
|
+
throw new Error("signer returned an invalid reconciled SAT lookup-table binding");
|
|
771
|
+
}
|
|
772
|
+
return reconciled;
|
|
773
|
+
}
|
|
774
|
+
return binding;
|
|
775
|
+
}
|
|
776
|
+
async function ensureSatDistributionLookupTable(params) {
|
|
777
|
+
assertSatLookupTableEnabled(params.context.effectiveEnv);
|
|
778
|
+
const desiredAddresses = [...new Set(params.addresses.map((entry) => entry.trim()))].filter(Boolean);
|
|
779
|
+
if (desiredAddresses.length === 0 || desiredAddresses.length > 256) {
|
|
780
|
+
throw new Error("SAT distribution lookup table requires 1-256 exact account addresses");
|
|
781
|
+
}
|
|
782
|
+
const signerBinding = await readReconciledSatLookupBinding({
|
|
783
|
+
context: params.context,
|
|
784
|
+
cycleId: params.cycleId,
|
|
785
|
+
pageIndex: params.pageIndex
|
|
786
|
+
});
|
|
787
|
+
let lookupTable = signerBinding.address?.trim() || "";
|
|
788
|
+
if (signerBinding.bound && lookupTable) {
|
|
789
|
+
await params.onLookupTableResolved?.(lookupTable);
|
|
790
|
+
}
|
|
791
|
+
let state = lookupTable ? await readValidatedSatLookupTable({
|
|
792
|
+
config: params.config,
|
|
793
|
+
address: lookupTable,
|
|
794
|
+
authority: params.context.signerAddress
|
|
795
|
+
}) : null;
|
|
796
|
+
if (lookupTable && state) {
|
|
797
|
+
await params.onLookupTableResolved?.(lookupTable);
|
|
798
|
+
}
|
|
799
|
+
let created = false;
|
|
800
|
+
const transactionHashes = [];
|
|
801
|
+
let createRecentSlot;
|
|
802
|
+
const attemptedCreateAddresses = new Set();
|
|
803
|
+
if (lookupTable && !state) {
|
|
804
|
+
const currentSlot = await inspectSatChainSlot(params.config);
|
|
805
|
+
createRecentSlot = recoverSatLookupTableRecentSlot({
|
|
806
|
+
context: params.context,
|
|
807
|
+
lookupTable,
|
|
808
|
+
currentSlot
|
|
809
|
+
});
|
|
810
|
+
if (createRecentSlot == null) {
|
|
811
|
+
if (signerBinding.bound) {
|
|
812
|
+
throw new Error("SAT distribution lookup table identity is not recoverable within the signer freshness window");
|
|
813
|
+
}
|
|
814
|
+
lookupTable = "";
|
|
815
|
+
} else {
|
|
816
|
+
attemptedCreateAddresses.add(lookupTable);
|
|
817
|
+
await params.onLookupTableResolved?.(lookupTable);
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
while (!state) {
|
|
821
|
+
if (!lookupTable || createRecentSlot == null) {
|
|
822
|
+
const currentSlot = await inspectSatChainSlot(params.config);
|
|
823
|
+
const oldestSlot = Math.max(0, currentSlot - SAT_LOOKUP_TABLE_CREATE_SLOT_WINDOW);
|
|
824
|
+
let selected = false;
|
|
825
|
+
for (let recentSlot = Math.max(0, currentSlot - 1); recentSlot >= oldestSlot; recentSlot -= 1) {
|
|
826
|
+
const [, derivedAddress] = params.context.solana.AddressLookupTableProgram.createLookupTable({
|
|
827
|
+
authority: params.context.signer,
|
|
828
|
+
payer: params.context.signer,
|
|
829
|
+
recentSlot
|
|
830
|
+
});
|
|
831
|
+
const candidate = derivedAddress.toBase58();
|
|
832
|
+
if (attemptedCreateAddresses.has(candidate)) {
|
|
833
|
+
continue;
|
|
834
|
+
}
|
|
835
|
+
attemptedCreateAddresses.add(candidate);
|
|
836
|
+
const existingCandidate = await readValidatedSatLookupTable({
|
|
837
|
+
config: params.config,
|
|
838
|
+
address: candidate,
|
|
839
|
+
authority: params.context.signerAddress
|
|
840
|
+
});
|
|
841
|
+
if (existingCandidate) {
|
|
842
|
+
continue;
|
|
843
|
+
}
|
|
844
|
+
lookupTable = candidate;
|
|
845
|
+
createRecentSlot = recentSlot;
|
|
846
|
+
await params.onLookupTableResolved?.(lookupTable);
|
|
847
|
+
selected = true;
|
|
848
|
+
break;
|
|
849
|
+
}
|
|
850
|
+
if (!selected) {
|
|
851
|
+
throw new Error("SAT distribution lookup table has no free signer-owned address in the freshness window");
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
try {
|
|
855
|
+
const submitted = await executeTypedSatLookupOperation({
|
|
856
|
+
context: params.context,
|
|
857
|
+
cfg: params.cfg,
|
|
858
|
+
action: "create",
|
|
859
|
+
address: lookupTable,
|
|
860
|
+
cycleId: params.cycleId,
|
|
861
|
+
pageIndex: params.pageIndex,
|
|
862
|
+
recentSlot: createRecentSlot,
|
|
863
|
+
parent: params.parent
|
|
864
|
+
});
|
|
865
|
+
transactionHashes.push(submitted.signature);
|
|
866
|
+
created = true;
|
|
867
|
+
} catch (error) {
|
|
868
|
+
if (error instanceof SatSubmissionDefinitiveFailureError && error.message.includes("address is already bound to another cycle and page")) {
|
|
869
|
+
lookupTable = "";
|
|
870
|
+
createRecentSlot = undefined;
|
|
871
|
+
continue;
|
|
872
|
+
}
|
|
873
|
+
if (error instanceof SatSubmissionUnresolvedError || error instanceof SatSubmissionDefinitiveFailureError) {
|
|
874
|
+
throw error;
|
|
875
|
+
}
|
|
876
|
+
try {
|
|
877
|
+
state = await waitForSatLookupTable({
|
|
878
|
+
config: params.config,
|
|
879
|
+
address: lookupTable,
|
|
880
|
+
authority: params.context.signerAddress,
|
|
881
|
+
requireNextSlot: false
|
|
882
|
+
});
|
|
883
|
+
} catch {
|
|
884
|
+
throw error;
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
state ??= await waitForSatLookupTable({
|
|
888
|
+
config: params.config,
|
|
889
|
+
address: lookupTable,
|
|
890
|
+
authority: params.context.signerAddress,
|
|
891
|
+
requireNextSlot: false
|
|
892
|
+
});
|
|
893
|
+
break;
|
|
894
|
+
}
|
|
895
|
+
if (!state) {
|
|
896
|
+
throw new Error("SAT distribution lookup table was not found at the confirmed commitment");
|
|
897
|
+
}
|
|
898
|
+
const existing = new Set(state.addresses);
|
|
899
|
+
const missing = desiredAddresses.filter((entry) => !existing.has(entry));
|
|
900
|
+
for (let offset = 0; offset < missing.length; offset += SAT_LOOKUP_TABLE_EXTEND_CHUNK_SIZE) {
|
|
901
|
+
const addresses = missing.slice(offset, offset + SAT_LOOKUP_TABLE_EXTEND_CHUNK_SIZE);
|
|
902
|
+
try {
|
|
903
|
+
const submitted = await executeTypedSatLookupOperation({
|
|
904
|
+
context: params.context,
|
|
905
|
+
cfg: params.cfg,
|
|
906
|
+
action: "extend",
|
|
907
|
+
address: lookupTable,
|
|
908
|
+
cycleId: params.cycleId,
|
|
909
|
+
pageIndex: params.pageIndex,
|
|
910
|
+
addresses,
|
|
911
|
+
parent: params.parent
|
|
912
|
+
});
|
|
913
|
+
transactionHashes.push(submitted.signature);
|
|
914
|
+
} catch (error) {
|
|
915
|
+
if (error instanceof SatSubmissionUnresolvedError) {
|
|
916
|
+
throw error;
|
|
917
|
+
}
|
|
918
|
+
const concurrentState = await waitForSatLookupTable({
|
|
919
|
+
config: params.config,
|
|
920
|
+
address: lookupTable,
|
|
921
|
+
authority: params.context.signerAddress,
|
|
922
|
+
requireNextSlot: false
|
|
923
|
+
}).catch(() => null);
|
|
924
|
+
if (!concurrentState || addresses.some((address) => !concurrentState.addresses.includes(address))) {
|
|
925
|
+
throw error;
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
const ready = await waitForSatLookupTable({
|
|
930
|
+
config: params.config,
|
|
931
|
+
address: lookupTable,
|
|
932
|
+
authority: params.context.signerAddress,
|
|
933
|
+
requireNextSlot: true
|
|
934
|
+
});
|
|
935
|
+
for (const address of desiredAddresses) {
|
|
936
|
+
if (!ready.addresses.includes(address)) {
|
|
937
|
+
throw new Error(`SAT distribution lookup table did not persist required account ${address}`);
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
return {
|
|
941
|
+
lookupTable,
|
|
942
|
+
created,
|
|
943
|
+
extended: missing.length > 0,
|
|
944
|
+
addressCount: ready.addresses.length,
|
|
945
|
+
transactionHashes
|
|
946
|
+
};
|
|
947
|
+
}
|
|
640
948
|
async function submitInstructionViaLocalSigner(params) {
|
|
641
949
|
const context = await prepareLocalSignerSubmitContext(params.cfg, params.env);
|
|
642
|
-
const
|
|
950
|
+
const baseRequest = await buildLocalSignerInstructionRequest({
|
|
643
951
|
solana: context.solana,
|
|
644
952
|
signer: context.signer,
|
|
645
953
|
env: context.effectiveEnv,
|
|
@@ -648,6 +956,27 @@ async function submitInstructionViaLocalSigner(params) {
|
|
|
648
956
|
if (!context.walletId) {
|
|
649
957
|
throw new Error("typed SAT signing requires an explicit mining walletId");
|
|
650
958
|
}
|
|
959
|
+
let managedLookupTable;
|
|
960
|
+
if (params.manageAddressLookupTable) {
|
|
961
|
+
managedLookupTable = await ensureSatDistributionLookupTable({
|
|
962
|
+
context: {
|
|
963
|
+
...context,
|
|
964
|
+
walletId: context.walletId
|
|
965
|
+
},
|
|
966
|
+
cfg: params.cfg,
|
|
967
|
+
config: params.cfg,
|
|
968
|
+
lookupTableAddress: params.manageAddressLookupTable.lookupTableAddress,
|
|
969
|
+
cycleId: params.manageAddressLookupTable.cycleId,
|
|
970
|
+
pageIndex: params.manageAddressLookupTable.pageIndex,
|
|
971
|
+
addresses: baseRequest.keys.filter((key) => !key.isSigner).map((key) => key.pubkey),
|
|
972
|
+
parent: baseRequest,
|
|
973
|
+
onLookupTableResolved: params.manageAddressLookupTable.onLookupTableResolved
|
|
974
|
+
});
|
|
975
|
+
}
|
|
976
|
+
const request = managedLookupTable ? {
|
|
977
|
+
...baseRequest,
|
|
978
|
+
addressLookupTables: [managedLookupTable.lookupTable]
|
|
979
|
+
} : baseRequest;
|
|
651
980
|
const submitted = await executeTypedSatIntent({
|
|
652
981
|
socketPath: context.socketPath,
|
|
653
982
|
walletId: context.walletId,
|
|
@@ -660,7 +989,17 @@ async function submitInstructionViaLocalSigner(params) {
|
|
|
660
989
|
txHash: submitted.signature,
|
|
661
990
|
signer: context.signerAddress,
|
|
662
991
|
signerState: submitted.state,
|
|
663
|
-
requestId: submitted.requestId
|
|
992
|
+
requestId: submitted.requestId,
|
|
993
|
+
...request.addressLookupTables?.length ? {
|
|
994
|
+
transactionVersion: "v0",
|
|
995
|
+
lookupTableAddress: request.addressLookupTables[0]
|
|
996
|
+
} : { transactionVersion: "legacy" },
|
|
997
|
+
...managedLookupTable ? {
|
|
998
|
+
lookupTableCreated: managedLookupTable.created,
|
|
999
|
+
lookupTableExtended: managedLookupTable.extended,
|
|
1000
|
+
lookupTableAddressCount: managedLookupTable.addressCount,
|
|
1001
|
+
lookupTableTransactionHashes: managedLookupTable.transactionHashes
|
|
1002
|
+
} : {}
|
|
664
1003
|
};
|
|
665
1004
|
}
|
|
666
1005
|
async function submitInstruction(params) {
|
|
@@ -673,6 +1012,8 @@ async function submitInstruction(params) {
|
|
|
673
1012
|
env: effectiveEnv,
|
|
674
1013
|
data: params.data,
|
|
675
1014
|
programId: params.programId,
|
|
1015
|
+
addressLookupTables: params.addressLookupTables,
|
|
1016
|
+
manageAddressLookupTable: params.manageAddressLookupTable,
|
|
676
1017
|
accountResolver: params.accountResolver
|
|
677
1018
|
});
|
|
678
1019
|
}
|
|
@@ -2530,10 +2871,18 @@ async function submitSatScoreCyclePage(_config, params) {
|
|
|
2530
2871
|
}
|
|
2531
2872
|
async function submitSatDistributeCyclePage(_config, params) {
|
|
2532
2873
|
const cfg = loadConfigForSatRuntime(_config);
|
|
2874
|
+
const lookupTableAddress = params.lookupTableAddress?.trim() ?? "";
|
|
2875
|
+
const requiresLookupTable = (params.minerCycleAccounts?.length ?? 0) >= SAT_DISTRIBUTION_LOOKUP_MIN_MINERS;
|
|
2533
2876
|
return submitInstruction({
|
|
2534
2877
|
cfg,
|
|
2535
2878
|
env: process.env,
|
|
2536
2879
|
data: buildDistributeCyclePageData(params),
|
|
2880
|
+
...lookupTableAddress || requiresLookupTable ? { manageAddressLookupTable: {
|
|
2881
|
+
cycleId: params.cycleId,
|
|
2882
|
+
pageIndex: params.pageIndex,
|
|
2883
|
+
...lookupTableAddress ? { lookupTableAddress } : {},
|
|
2884
|
+
...params.onLookupTableResolved ? { onLookupTableResolved: params.onLookupTableResolved } : {}
|
|
2885
|
+
} } : {},
|
|
2537
2886
|
accountResolver: async (solana, signer) => {
|
|
2538
2887
|
const programId = new solana.PublicKey(SAT_PROGRAM_ID());
|
|
2539
2888
|
const [satCycleState] = solana.PublicKey.findProgramAddressSync([Buffer.from(SAT_CYCLE_STATE_SEED), encodeU64(params.cycleId)], programId);
|
|
@@ -2635,6 +2984,44 @@ async function submitSatDistributeCyclePage(_config, params) {
|
|
|
2635
2984
|
}
|
|
2636
2985
|
});
|
|
2637
2986
|
}
|
|
2987
|
+
async function submitSatCleanupDistributionLookupTable(_config, params) {
|
|
2988
|
+
const cfg = loadConfigForSatRuntime(_config);
|
|
2989
|
+
const context = await prepareLocalSignerSubmitContext(cfg, process.env);
|
|
2990
|
+
assertSatLookupTableEnabled(context.effectiveEnv);
|
|
2991
|
+
if (!context.walletId) {
|
|
2992
|
+
throw new Error("typed SAT lookup-table cleanup requires an explicit mining walletId");
|
|
2993
|
+
}
|
|
2994
|
+
const binding = await readReconciledSatLookupBinding({
|
|
2995
|
+
context: {
|
|
2996
|
+
...context,
|
|
2997
|
+
walletId: context.walletId
|
|
2998
|
+
},
|
|
2999
|
+
cycleId: params.cycleId,
|
|
3000
|
+
pageIndex: params.pageIndex
|
|
3001
|
+
});
|
|
3002
|
+
const lookupTable = binding.address?.trim() ?? "";
|
|
3003
|
+
if (binding.cycleId !== String(params.cycleId) || binding.pageIndex !== String(params.pageIndex) || !binding.bound || !lookupTable) {
|
|
3004
|
+
throw new Error("SAT distribution lookup table is not bound to this wallet, cycle, and page");
|
|
3005
|
+
}
|
|
3006
|
+
const submitted = await executeTypedSatLookupOperation({
|
|
3007
|
+
context: {
|
|
3008
|
+
...context,
|
|
3009
|
+
walletId: context.walletId
|
|
3010
|
+
},
|
|
3011
|
+
cfg,
|
|
3012
|
+
action: params.action,
|
|
3013
|
+
address: lookupTable,
|
|
3014
|
+
cycleId: params.cycleId,
|
|
3015
|
+
pageIndex: params.pageIndex
|
|
3016
|
+
});
|
|
3017
|
+
return {
|
|
3018
|
+
lookupTable,
|
|
3019
|
+
action: params.action,
|
|
3020
|
+
transactionHashes: [submitted.signature],
|
|
3021
|
+
signerState: submitted.state,
|
|
3022
|
+
requestId: submitted.requestId
|
|
3023
|
+
};
|
|
3024
|
+
}
|
|
2638
3025
|
async function submitSatClaimCycleRewards(_config, params) {
|
|
2639
3026
|
const cfg = loadConfigForSatRuntime(_config);
|
|
2640
3027
|
return submitInstruction({
|
|
@@ -63,7 +63,7 @@ function buildSatSubmissionOperationKey(intent) {
|
|
|
63
63
|
action: candidate.action,
|
|
64
64
|
keys: candidate.keys
|
|
65
65
|
};
|
|
66
|
-
}) : intent.keys;
|
|
66
|
+
}) : intent.keys ?? intent.lookupTable;
|
|
67
67
|
return `${action}:${sha256(JSON.stringify(canonicalize(accountShape))).slice(0, 24)}`;
|
|
68
68
|
}
|
|
69
69
|
function normalizeStateKey(value) {
|
|
@@ -223,13 +223,33 @@ async function claimSatSubmission(params) {
|
|
|
223
223
|
walletId: params.walletId,
|
|
224
224
|
env
|
|
225
225
|
});
|
|
226
|
-
const requestId = buildSatSubmissionRequestId(params);
|
|
227
226
|
const owner = params.owner ?? `${process.pid}:${randomUUID()}`;
|
|
228
227
|
return await withSatSubmissionLedgerLock(filePath, async () => {
|
|
229
228
|
const ledger = await readLedger(filePath);
|
|
229
|
+
let operationKey = params.operationKey;
|
|
230
|
+
let requestId = buildSatSubmissionRequestId({
|
|
231
|
+
...params,
|
|
232
|
+
operationKey
|
|
233
|
+
});
|
|
234
|
+
if (params.allowFailedRetry) {
|
|
235
|
+
for (let retry = 1; retry <= 32; retry += 1) {
|
|
236
|
+
const prior = ledger.records[requestId];
|
|
237
|
+
if (!prior || prior.state !== "failed") {
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
operationKey = `${params.operationKey}:retry:${retry}`;
|
|
241
|
+
requestId = buildSatSubmissionRequestId({
|
|
242
|
+
...params,
|
|
243
|
+
operationKey
|
|
244
|
+
});
|
|
245
|
+
if (retry === 32 && ledger.records[requestId]?.state === "failed") {
|
|
246
|
+
throw new Error("SAT submission exhausted its safe pre-broadcast retry limit");
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
230
250
|
const existing = ledger.records[requestId];
|
|
231
251
|
if (existing) {
|
|
232
|
-
if (existing.intentDigest !== params.intentDigest || existing.walletId !== params.walletId || existing.workflowId !== params.workflowId || existing.operationKey !==
|
|
252
|
+
if (existing.intentDigest !== params.intentDigest || existing.walletId !== params.walletId || existing.workflowId !== params.workflowId || existing.operationKey !== operationKey) {
|
|
233
253
|
throw new Error(`SAT idempotency collision for ${requestId}: the workflow key is already bound to a different immutable intent digest`);
|
|
234
254
|
}
|
|
235
255
|
if (leaseIsLive(existing.lease) && existing.lease?.owner !== owner) {
|
|
@@ -261,7 +281,7 @@ async function claimSatSubmission(params) {
|
|
|
261
281
|
const record = {
|
|
262
282
|
requestId,
|
|
263
283
|
workflowId: params.workflowId,
|
|
264
|
-
operationKey
|
|
284
|
+
operationKey,
|
|
265
285
|
intentDigest: params.intentDigest,
|
|
266
286
|
walletId: params.walletId,
|
|
267
287
|
action: params.action,
|
|
@@ -3,7 +3,7 @@ import { resolveProcessScopedMap } from "../shared/process-scoped-map.js";
|
|
|
3
3
|
import { acquireFileLock, withFileLock } from "../plugin-sdk/file-lock.js";
|
|
4
4
|
import "../infra/file-lock.js";
|
|
5
5
|
import { serializeWalletState, writeWalletStateFileAtomically } from "../wallet/wallet-atomic-state.js";
|
|
6
|
-
import
|
|
6
|
+
import fs from "node:fs";
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import { createHash } from "node:crypto";
|
|
9
9
|
|
|
@@ -85,17 +85,17 @@ function readMarketplaceDeliveryOutbox(params) {
|
|
|
85
85
|
return null;
|
|
86
86
|
}
|
|
87
87
|
const filePath = recordPath(deliveryId, params.env ?? process.env);
|
|
88
|
-
if (!
|
|
88
|
+
if (!fs.existsSync(filePath)) {
|
|
89
89
|
return null;
|
|
90
90
|
}
|
|
91
91
|
try {
|
|
92
|
-
return validateRecord(JSON.parse(
|
|
92
|
+
return validateRecord(JSON.parse(fs.readFileSync(filePath, "utf8")), deliveryId);
|
|
93
93
|
} catch (error) {
|
|
94
94
|
throw new Error("marketplace delivery outbox is unreadable; refusing to resend", { cause: error });
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
function writeRecord(record, env) {
|
|
98
|
-
|
|
98
|
+
fs.mkdirSync(outboxDirectory(env), {
|
|
99
99
|
recursive: true,
|
|
100
100
|
mode: 448
|
|
101
101
|
});
|
|
@@ -109,7 +109,7 @@ async function reserveMarketplaceDelivery(params) {
|
|
|
109
109
|
throw new Error("marketplace delivery identity is incomplete");
|
|
110
110
|
}
|
|
111
111
|
const intentDigest = marketplaceDeliveryIntentDigest(params.intent);
|
|
112
|
-
|
|
112
|
+
fs.mkdirSync(outboxDirectory(env), {
|
|
113
113
|
recursive: true,
|
|
114
114
|
mode: 448
|
|
115
115
|
});
|
|
@@ -3,7 +3,7 @@ import { acquireFileLock } from "../plugin-sdk/file-lock.js";
|
|
|
3
3
|
import "../infra/file-lock.js";
|
|
4
4
|
import { ensureWalletStateDir } from "../wallet/wallet-runtime-config.js";
|
|
5
5
|
import { serializeWalletState, writeWalletStateFileAtomically } from "../wallet/wallet-atomic-state.js";
|
|
6
|
-
import
|
|
6
|
+
import fs from "node:fs";
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import { createHash } from "node:crypto";
|
|
9
9
|
|
|
@@ -119,11 +119,11 @@ function lockTarget(orderId, env) {
|
|
|
119
119
|
}
|
|
120
120
|
function readEntry(orderId, env) {
|
|
121
121
|
const filePath = entryPath(orderId, env);
|
|
122
|
-
if (!
|
|
122
|
+
if (!fs.existsSync(filePath)) {
|
|
123
123
|
return null;
|
|
124
124
|
}
|
|
125
125
|
try {
|
|
126
|
-
const value = JSON.parse(
|
|
126
|
+
const value = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
127
127
|
if (value.version !== 1 || value.orderId !== orderId || typeof value.phase !== "string" || !PHASES.has(value.phase) || !value.actions || Array.isArray(value.actions) || typeof value.actions !== "object" || typeof value.createdAt !== "string" || typeof value.updatedAt !== "string") {
|
|
128
128
|
throw new Error("invalid shape");
|
|
129
129
|
}
|
|
@@ -148,7 +148,7 @@ function readEntry(orderId, env) {
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
function writeEntry(entry, env) {
|
|
151
|
-
|
|
151
|
+
fs.mkdirSync(stateDirectory(env), {
|
|
152
152
|
recursive: true,
|
|
153
153
|
mode: 448
|
|
154
154
|
});
|