@fased/fased 0.1.62 → 0.1.64
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 +32 -0
- package/README.md +38 -30
- package/config/dependency-ownership.json +1 -1
- package/config/signer-policies/README.md +49 -0
- package/config/signer-policies/agent.json.template +32 -0
- package/config/signer-policies/mining.json.template +69 -0
- package/config/signer-policies/network.json.template +5 -0
- package/config/signer-policies/vault.json.template +70 -0
- package/config/signer-protocol-v2.json +76 -0
- package/config/typescript-noemit-baseline.json +680 -0
- package/dist/agents/auth-profiles/store.js +267 -31
- package/dist/agents/bash-tools.exec.js +10 -4
- package/dist/agents/current-model-catalog.js +3 -3
- package/dist/agents/memory-search.js +7 -1
- package/dist/agents/model-catalog-access.js +1 -2
- package/dist/agents/model-catalog-snapshot.js +1 -1
- package/dist/agents/model-catalog-source.js +1 -1
- package/dist/agents/model-metadata.js +1 -1
- package/dist/agents/model-selection.js +2 -28
- package/dist/agents/models-config.providers.js +6 -6
- package/dist/agents/pi-embedded-runner/compact.js +15 -7
- package/dist/agents/pi-embedded-runner/model.js +1 -1
- package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
- package/dist/agents/pi-embedded-runner/run.js +2 -0
- package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
- package/dist/agents/pi-tool-definition-adapter.js +16 -1
- package/dist/agents/pi-tools.js +2 -1
- package/dist/agents/sandbox/config.js +1 -1
- package/dist/agents/sandbox/context.js +27 -2
- package/dist/agents/skills/env-overrides.js +38 -28
- package/dist/agents/skills/trust.js +93 -0
- package/dist/agents/skills/workspace.js +128 -0
- package/dist/agents/skills-clawhub.js +36 -11
- package/dist/agents/skills-marketplace-scan.js +49 -0
- package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
- package/dist/agents/tools/mining-tool.js +1 -1
- package/dist/agents/tools/session-status-tool.js +1 -1
- package/dist/agents/tools/wallet-action-tool.js +172 -36
- package/dist/agents/tools/wallet-skill-policy.js +65 -23
- package/dist/agents/tools/wallet-tool.js +7 -11
- package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
- package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
- package/dist/auto-reply/reply/directive-handling.model.js +2 -1
- package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
- package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
- package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
- package/dist/auto-reply/reply/model-selection.js +7 -4
- package/dist/auto-reply/reply/session-reset-model.js +4 -4
- package/dist/brand.js +1 -1
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/channel-web.js +2 -2
- package/dist/cli/gateway-cli/run.js +8 -0
- package/dist/cli/program/command-registry.js +1 -1
- package/dist/cli/program/register.onboard.js +2 -3
- package/dist/cli/program/register.wallet.js +16 -123
- package/dist/cli/providers-cli.js +1 -1
- package/dist/cli/sat-cli.js +129 -2
- package/dist/cli/update-cli/update-command.js +260 -11
- package/dist/commands/auth-choice.apply.api-providers.js +3 -3
- package/dist/commands/doctor-config-flow.js +1 -1
- package/dist/commands/doctor-legacy-config.js +2 -13
- package/dist/commands/model-picker.js +6 -6
- package/dist/commands/models/auth.js +1 -1
- package/dist/commands/onboard-auth.config-gateways.js +1 -1
- package/dist/commands/onboard-auth.credentials.js +32 -8
- package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
- package/dist/commands/onboard-non-interactive/local.js +5 -1
- package/dist/commands/wallet.js +568 -1911
- package/dist/config/config.js +2 -2
- package/dist/config/io.js +64 -2
- package/dist/config/schema.help.js +8 -7
- package/dist/config/schema.labels.js +5 -4
- package/dist/config/zod-schema.agent-runtime.js +1 -0
- package/dist/config/zod-schema.js +5 -0
- package/dist/control-ui/assets/{app-DLil9VO1.js → app-bR-fO5ty.js} +1511 -1555
- package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
- package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
- package/dist/control-ui/assets/{index-DdE_NIXo.js → index-ckCxHwjy.js} +3 -3
- package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
- package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
- package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
- package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
- package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- package/dist/daemon/systemd-system.js +56 -50
- package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
- package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
- package/dist/extensions/sat-mining/src/sat-bond-layout.js +5 -2
- package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
- package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
- package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
- package/dist/federation/auto-connect.js +98 -8
- package/dist/federation/marketplace-capability-adapter.js +33 -7
- package/dist/federation/marketplace-delivery-outbox.js +196 -0
- package/dist/federation/marketplace-delivery.js +351 -215
- package/dist/federation/marketplace-direct-payment.js +272 -141
- package/dist/federation/marketplace-escrow.js +607 -249
- package/dist/federation/marketplace-settlement-ledger.js +352 -0
- package/dist/federation/offers.js +9 -7
- package/dist/federation/peer-auth-v2.js +529 -0
- package/dist/gateway/a2a-http.js +425 -96
- package/dist/gateway/a2a-settlement.js +259 -153
- package/dist/gateway/a2a-task-store.js +524 -0
- package/dist/gateway/auth.js +38 -2
- package/dist/gateway/config-reload.js +46 -33
- package/dist/gateway/durable-capacity.js +31 -0
- package/dist/gateway/federation-http.js +540 -135
- package/dist/gateway/federation-marketplace-run-store.js +397 -0
- package/dist/gateway/federation-marketplace.js +535 -230
- package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
- package/dist/gateway/security-path.js +1 -1
- package/dist/gateway/server-http.js +1084 -1205
- package/dist/gateway/server-methods/models.js +1 -1
- package/dist/gateway/server-methods/secrets.js +40 -0
- package/dist/gateway/server-methods.js +1 -2
- package/dist/gateway/server-reload-handlers.js +196 -66
- package/dist/gateway/server-runtime-config.js +1 -1
- package/dist/gateway/server-secrets-runtime.js +288 -0
- package/dist/gateway/server.impl.js +73 -42
- package/dist/gateway/sessions-patch.js +3 -5
- package/dist/index.js +4 -2
- package/dist/infra/fasedhub.js +64 -1
- package/dist/infra/local-source-paired-update.js +538 -0
- package/dist/infra/restart.js +41 -10
- package/dist/infra/update-runner.js +96 -0
- package/dist/light-update-status.js +11 -11
- package/dist/memory/backend-config.js +2 -1
- package/dist/memory/session-files.js +16 -2
- package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
- package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
- package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-Bwi2Oq03.js → audio-preflight-BYxAt775.js} +27 -27
- package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
- package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
- package/dist/plugin-sdk/channel-plugin-common.js +4 -4
- package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-DzT4L4Ty.js → chunk-items-DIRHG2gJ.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +27 -27
- package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
- package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
- package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
- package/dist/plugin-sdk/{config-schema-BrkmtFxB.js → config-schema-BOT7kHb6.js} +6779 -3696
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +6 -6
- package/dist/plugin-sdk/discord.js +19 -19
- package/dist/plugin-sdk/file-lock.js +35 -4
- package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
- package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
- package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
- package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
- package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +21 -39
- package/dist/plugin-sdk/index.js +29 -29
- package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
- package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
- package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
- package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
- package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
- package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
- package/dist/plugin-sdk/{monitor-M_ta2lMc.js → monitor-BCFDaqJ-.js} +31 -31
- package/dist/plugin-sdk/{monitor-wYVncM9w.js → monitor-BgbjRiPM.js} +32 -32
- package/dist/plugin-sdk/{openresponses-http-B2GmeSt4.js → openresponses-http-DFf87SMM.js} +27 -27
- package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
- package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
- package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-B3bHYGaw.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
- package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
- package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
- package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
- package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
- package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
- package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
- package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
- package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
- package/dist/plugin-sdk/sat-runtime.js +29 -29
- package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
- package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
- package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
- package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
- package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
- package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
- package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
- package/dist/plugin-sdk/{slack-CxE1mfzj.js → slack-BUTt8cxK.js} +39 -39
- package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
- package/dist/plugin-sdk/slack.d.ts +6 -6
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-CGzGWu00.js → sticker-cache-D0wHVqjt.js} +3 -3
- package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
- package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
- package/dist/plugin-sdk/{telegram-actions-DaEcYQ8r.js → telegram-actions-CC_qN4v0.js} +30 -30
- package/dist/plugin-sdk/telegram.d.ts +6 -6
- package/dist/plugin-sdk/telegram.js +8 -8
- package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
- package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
- package/dist/plugin-sdk/{types-vcJrC_uv.d.ts → types-C3avNytw.d.ts} +3 -4
- package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
- package/dist/plugin-sdk/{types-DFAW-n1J.d.ts → types-DWfbSAaM.d.ts} +2 -2
- package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
- package/dist/plugin-sdk/{web-CInY-lCv.js → web-BXsJ1vqe.js} +32 -32
- package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +13 -13
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
- package/dist/plugin-sdk/{zod-schema.providers-core-BEbNizPe.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +61 -61
- package/dist/providers/refresh.js +1 -1
- package/dist/providers/registry.js +1 -1
- package/dist/secrets/apply.js +1 -1
- package/dist/secrets/runtime.js +1 -1
- package/dist/wallet/external-submission-ledger.js +376 -0
- package/dist/wallet/legacy-embedded-keystore.js +40 -0
- package/dist/wallet/local-socket-signer-archive.js +30 -0
- package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
- package/dist/wallet/local-socket-signer-policy.js +166 -0
- package/dist/wallet/local-socket-signer-protocol.js +561 -118
- package/dist/wallet/native-signer-wallet-id.js +25 -0
- package/dist/wallet/providers/alchemy-adapter.js +3 -0
- package/dist/wallet/providers/local-socket-signer-adapter.js +380 -105
- package/dist/wallet/providers/turnkey-adapter.js +292 -34
- package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
- package/dist/wallet/signer-network-admin.js +184 -0
- package/dist/wallet/signer-protocol-v2.generated.js +90 -0
- package/dist/wallet/solana-bond-signing.js +157 -69
- package/dist/wallet/solana-reviewed-transaction.js +375 -0
- package/dist/wallet/solana-swap.js +520 -64
- package/dist/wallet/solana-transaction-inspection.js +106 -4
- package/dist/wallet/solana-trigger.js +658 -320
- package/dist/wallet/turnkey-reviewed-state.js +370 -0
- package/dist/wallet/wallet-approval-auth.js +17 -28
- package/dist/wallet/wallet-atomic-state.js +53 -0
- package/dist/wallet/wallet-canary.js +0 -1
- package/dist/wallet/wallet-inbound-events.js +16 -11
- package/dist/wallet/wallet-policy-simulation.js +1 -1
- package/dist/wallet/wallet-policy.js +90 -36
- package/dist/wallet/wallet-provider-capabilities.js +28 -4
- package/dist/wallet/wallet-provider-registry.js +57 -44
- package/dist/wallet/wallet-provider-resolver.js +62 -63
- package/dist/wallet/wallet-runtime-config.js +28 -41
- package/dist/wallet/wallet-secrets-store.js +22 -0
- package/dist/wallet/wallet-send-approvals.js +1891 -589
- package/dist/wallet/wallet-send-execution-ledger.js +292 -0
- package/dist/wallet/wallet-settlement-links.js +14 -13
- package/dist/wallet/wallet-standard-review.js +353 -0
- package/dist/wallet/wallet-status.js +0 -9
- package/dist/wallet/wallet-task-ledger.js +16 -2
- package/dist/web/auto-reply/heartbeat-runner.js +1 -1
- package/dist/web/auto-reply/monitor.js +2 -2
- package/dist/wizard/host-security-capability.js +14 -23
- package/dist/wizard/onboarding.finalize.js +63 -184
- package/dist/wizard/onboarding.host-security.js +117 -1367
- package/dist/wizard/onboarding.js +172 -217
- package/dist/wizard/onboarding.wallet.js +232 -785
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +12 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +12 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/index.ts +498 -153
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
- package/extensions/sat-mining/src/audit-store.ts +50 -5
- package/extensions/sat-mining/src/claim-service.ts +85 -14
- package/extensions/sat-mining/src/config.ts +9 -0
- package/extensions/sat-mining/src/cycle-progress.ts +16 -8
- package/extensions/sat-mining/src/epoch-service.ts +9 -5
- package/extensions/sat-mining/src/gateway-runner.ts +21 -1
- package/extensions/sat-mining/src/protocol-contract.ts +45 -1
- package/extensions/sat-mining/src/recovery-service.ts +312 -0
- package/extensions/sat-mining/src/round-watcher.ts +391 -81
- package/extensions/sat-mining/src/rpc-read.ts +330 -89
- package/extensions/sat-mining/src/runtime.ts +14 -0
- package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
- package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
- package/extensions/sat-mining/src/solana-submit.ts +1199 -428
- package/extensions/sat-mining/src/submission-ledger.ts +433 -0
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- package/install.sh +4955 -0
- package/package.json +23 -5
- package/scripts/fased-host-updater.mjs +1421 -0
- package/scripts/fased-host-updaterctl.mjs +186 -0
- package/scripts/fased-managed-service.sh +36 -0
- package/scripts/fased-managed-updater.mjs +3065 -156
- package/scripts/fased-signer-enroll-hosting.sh +275 -0
- package/scripts/fased-signer-network-hosting.sh +143 -0
- package/scripts/fased-signer-owner-policy.mjs +1430 -0
- package/scripts/fased-signer-policy-hosting.sh +50 -0
- package/scripts/fased-signer-policy-local.sh +26 -0
- package/scripts/hosted-release-manifest.mjs +185 -0
- package/scripts/install-fased-signerd.sh +183 -108
- package/scripts/install-managed-runtime.mjs +212 -10
- package/scripts/managed-runtime-layout.mjs +75 -3
- package/scripts/migrate-hosted-signer-v2.mjs +58 -0
- package/scripts/start-managed.sh +169 -360
- package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
- package/dist/plugin-sdk/tmp-fased-dir-CS6zsYEE.d.ts +0 -77
- package/dist/wallet/local-socket-signer-broker.js +0 -224
- package/dist/wallet/local-socket-signer-custody.js +0 -42
- package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
- package/dist/wallet/providers/privy-adapter.js +0 -80
- package/dist/wallet/wallet-custody.js +0 -1836
|
@@ -15,6 +15,7 @@ async function applyInlineDirectiveOverrides(params) {
|
|
|
15
15
|
let { provider, model } = params;
|
|
16
16
|
let { contextTokens } = params;
|
|
17
17
|
const directiveModelState = {
|
|
18
|
+
allowAnyModel: modelState.allowAnyModel,
|
|
18
19
|
allowedModelKeys: modelState.allowedModelKeys,
|
|
19
20
|
allowedModelCatalog: modelState.allowedModelCatalog,
|
|
20
21
|
resetModelOverride: modelState.resetModelOverride
|
|
@@ -155,6 +156,7 @@ async function applyInlineDirectiveOverrides(params) {
|
|
|
155
156
|
defaultProvider,
|
|
156
157
|
defaultModel,
|
|
157
158
|
aliasIndex,
|
|
159
|
+
allowAnyModel: modelState.allowAnyModel,
|
|
158
160
|
allowedModelKeys: modelState.allowedModelKeys,
|
|
159
161
|
provider,
|
|
160
162
|
model,
|
|
@@ -5,6 +5,8 @@ import { applyOwnerOnlyToolPolicy } from "../../agents/tool-policy.js";
|
|
|
5
5
|
import { generateSecureToken } from "../../infra/secure-random.js";
|
|
6
6
|
import { clearAbortCutoffInSession, readAbortCutoffFromSessionEntry, resolveAbortCutoffFromContext, shouldSkipMessageByAbortCutoff } from "./abort-cutoff.js";
|
|
7
7
|
import { getAbortMemory, isAbortRequestText } from "./abort.js";
|
|
8
|
+
import { readClawHubSkillOrigin } from "../../agents/skills-clawhub.js";
|
|
9
|
+
import { isMarketplaceSkillDir, marketplaceSkillProvenanceMatchesContent } from "../../agents/skills/trust.js";
|
|
8
10
|
import { createFasedAgentTools } from "../../agents/fased-tools.js";
|
|
9
11
|
import { collectTextContentBlocks } from "../../agents/content-blocks.js";
|
|
10
12
|
import { listReservedChatSlashCommandNames, listSkillCommandsForWorkspace, resolveSkillCommandInvocation } from "../skill-commands.js";
|
|
@@ -14,6 +16,7 @@ import { isDirectiveOnly } from "./directive-handling.parse.js";
|
|
|
14
16
|
import "./directive-handling.js";
|
|
15
17
|
import "./commands.js";
|
|
16
18
|
import { extractInlineSimpleCommand } from "./reply-inline.js";
|
|
19
|
+
import path from "node:path";
|
|
17
20
|
|
|
18
21
|
//#region src/auto-reply/reply/get-reply-inline-actions.ts
|
|
19
22
|
const builtinSlashCommands = (() => {
|
|
@@ -77,6 +80,24 @@ async function handleInlineActions(params) {
|
|
|
77
80
|
}
|
|
78
81
|
const dispatch = skillInvocation.command.dispatch;
|
|
79
82
|
if (dispatch?.kind === "tool") {
|
|
83
|
+
const sourceFile = skillInvocation.command.sourceFilePath?.trim();
|
|
84
|
+
const skillDir = sourceFile ? path.dirname(sourceFile) : "";
|
|
85
|
+
const marketplaceSkill = Boolean(skillDir && isMarketplaceSkillDir(skillDir));
|
|
86
|
+
const marketplaceOrigin = skillDir ? await readClawHubSkillOrigin(skillDir) : null;
|
|
87
|
+
if (marketplaceSkill && (!marketplaceOrigin || !marketplaceSkillProvenanceMatchesContent(skillDir))) {
|
|
88
|
+
typing.cleanup();
|
|
89
|
+
return {
|
|
90
|
+
kind: "reply",
|
|
91
|
+
reply: { text: `❌ Marketplace skill ${skillInvocation.command.skillName} failed its installed-content integrity check. Reinstall the reviewed archive before using direct tool commands.` }
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (marketplaceOrigin && !(marketplaceOrigin.permissions?.toolAccess ?? []).includes(dispatch.toolName)) {
|
|
95
|
+
typing.cleanup();
|
|
96
|
+
return {
|
|
97
|
+
kind: "reply",
|
|
98
|
+
reply: { text: `❌ Marketplace skill ${marketplaceOrigin.slug} is not authorized for tool ${dispatch.toolName}. Reinstall a reviewed version whose manifest explicitly requests that tool.` }
|
|
99
|
+
};
|
|
100
|
+
}
|
|
80
101
|
const rawArgs = (skillInvocation.args ?? "").trim();
|
|
81
102
|
const channel = resolveGatewayMessageChannel(ctx.Surface) ?? resolveGatewayMessageChannel(ctx.Provider) ?? undefined;
|
|
82
103
|
const tools = createFasedAgentTools({
|
|
@@ -122,7 +143,10 @@ async function handleInlineActions(params) {
|
|
|
122
143
|
};
|
|
123
144
|
}
|
|
124
145
|
}
|
|
125
|
-
const
|
|
146
|
+
const commandTemplate = skillInvocation.command.promptTemplate?.trim();
|
|
147
|
+
const commandArgs = skillInvocation.args?.trim();
|
|
148
|
+
const renderedTemplate = commandTemplate ? commandTemplate.includes("$ARGUMENTS") ? commandTemplate.replaceAll("$ARGUMENTS", commandArgs ?? "") : commandTemplate : null;
|
|
149
|
+
const promptParts = [renderedTemplate ?? `Use the "${skillInvocation.command.skillName}" skill for this request.`, commandArgs && (!renderedTemplate || !commandTemplate?.includes("$ARGUMENTS")) ? `User input:\n${commandArgs}` : null].filter((entry) => Boolean(entry));
|
|
126
150
|
const rewrittenBody = promptParts.join("\n\n");
|
|
127
151
|
ctx.Body = rewrittenBody;
|
|
128
152
|
ctx.BodyForAgent = rewrittenBody;
|
|
@@ -207,6 +207,7 @@ async function createModelSelectionState(params) {
|
|
|
207
207
|
const needsModelCatalog = params.hasModelDirective || hasAllowlist || hasStoredOverride;
|
|
208
208
|
let allowedModelKeys = new Set();
|
|
209
209
|
let allowedModelCatalog = [];
|
|
210
|
+
let allowAnyModel = true;
|
|
210
211
|
let modelCatalog = null;
|
|
211
212
|
let resetModelOverride = false;
|
|
212
213
|
if (needsModelCatalog) {
|
|
@@ -228,13 +229,14 @@ async function createModelSelectionState(params) {
|
|
|
228
229
|
});
|
|
229
230
|
allowedModelCatalog = allowed.allowedCatalog;
|
|
230
231
|
allowedModelKeys = allowed.allowedKeys;
|
|
232
|
+
allowAnyModel = allowed.allowAny;
|
|
231
233
|
}
|
|
232
234
|
if (sessionEntry && sessionStore && sessionKey && hasStoredOverride) {
|
|
233
235
|
const overrideProvider = sessionEntry.providerOverride?.trim() || defaultProvider;
|
|
234
236
|
const overrideModel = sessionEntry.modelOverride?.trim();
|
|
235
237
|
if (overrideModel) {
|
|
236
238
|
const key = modelKey(overrideProvider, overrideModel);
|
|
237
|
-
if (
|
|
239
|
+
if (!allowAnyModel && !allowedModelKeys.has(key)) {
|
|
238
240
|
const { updated } = applyModelOverrideToSessionEntry({
|
|
239
241
|
entry: sessionEntry,
|
|
240
242
|
selection: {
|
|
@@ -265,7 +267,7 @@ async function createModelSelectionState(params) {
|
|
|
265
267
|
if (storedOverride?.model && !skipStoredOverride) {
|
|
266
268
|
const candidateProvider = storedOverride.provider || defaultProvider;
|
|
267
269
|
const key = modelKey(candidateProvider, storedOverride.model);
|
|
268
|
-
if (
|
|
270
|
+
if (allowAnyModel || allowedModelKeys.has(key)) {
|
|
269
271
|
provider = candidateProvider;
|
|
270
272
|
model = storedOverride.model;
|
|
271
273
|
}
|
|
@@ -318,6 +320,7 @@ async function createModelSelectionState(params) {
|
|
|
318
320
|
return {
|
|
319
321
|
provider,
|
|
320
322
|
model,
|
|
323
|
+
allowAnyModel,
|
|
321
324
|
allowedModelKeys,
|
|
322
325
|
allowedModelCatalog,
|
|
323
326
|
resetModelOverride,
|
|
@@ -327,7 +330,7 @@ async function createModelSelectionState(params) {
|
|
|
327
330
|
};
|
|
328
331
|
}
|
|
329
332
|
function resolveModelDirectiveSelection(params) {
|
|
330
|
-
const { raw, defaultProvider, defaultModel, aliasIndex, allowedModelKeys } = params;
|
|
333
|
+
const { raw, defaultProvider, defaultModel, aliasIndex, allowAnyModel, allowedModelKeys } = params;
|
|
331
334
|
const rawTrimmed = raw.trim();
|
|
332
335
|
const rawLower = rawTrimmed.toLowerCase();
|
|
333
336
|
const pickAliasForKey = (provider, model) => aliasIndex.byKey.get(modelKey(provider, model))?.[0];
|
|
@@ -438,7 +441,7 @@ function resolveModelDirectiveSelection(params) {
|
|
|
438
441
|
return { error: `Unrecognized model "${rawTrimmed}". Use /models to list providers, or /models <provider> to list models.` };
|
|
439
442
|
}
|
|
440
443
|
const resolvedKey = modelKey(resolved.ref.provider, resolved.ref.model);
|
|
441
|
-
if (
|
|
444
|
+
if (allowAnyModel || allowedModelKeys.has(resolvedKey)) {
|
|
442
445
|
return { selection: {
|
|
443
446
|
provider: resolved.ref.provider,
|
|
444
447
|
model: resolved.ref.model,
|
|
@@ -29,7 +29,7 @@ function buildSelectionFromExplicit(params) {
|
|
|
29
29
|
return undefined;
|
|
30
30
|
}
|
|
31
31
|
const key = modelKey(resolved.ref.provider, resolved.ref.model);
|
|
32
|
-
if (params.
|
|
32
|
+
if (!params.allowAnyModel && !params.allowedModelKeys.has(key)) {
|
|
33
33
|
return undefined;
|
|
34
34
|
}
|
|
35
35
|
const isDefault = resolved.ref.provider === params.defaultProvider && resolved.ref.model === params.defaultModel;
|
|
@@ -82,10 +82,8 @@ async function applyResetModelOverride(params) {
|
|
|
82
82
|
config: params.cfg
|
|
83
83
|
}) : resolveDefaultAgentId(params.cfg)), { allowKeychainPrompt: false })
|
|
84
84
|
});
|
|
85
|
+
const allowAnyModel = allowed.allowAny;
|
|
85
86
|
const allowedModelKeys = allowed.allowedKeys;
|
|
86
|
-
if (allowedModelKeys.size === 0) {
|
|
87
|
-
return {};
|
|
88
|
-
}
|
|
89
87
|
const providers = new Set();
|
|
90
88
|
for (const key of allowedModelKeys) {
|
|
91
89
|
const slash = key.indexOf("/");
|
|
@@ -99,6 +97,7 @@ async function applyResetModelOverride(params) {
|
|
|
99
97
|
defaultProvider: params.defaultProvider,
|
|
100
98
|
defaultModel: params.defaultModel,
|
|
101
99
|
aliasIndex: params.aliasIndex,
|
|
100
|
+
allowAnyModel,
|
|
102
101
|
allowedModelKeys
|
|
103
102
|
});
|
|
104
103
|
let selection;
|
|
@@ -117,6 +116,7 @@ async function applyResetModelOverride(params) {
|
|
|
117
116
|
defaultProvider: params.defaultProvider,
|
|
118
117
|
defaultModel: params.defaultModel,
|
|
119
118
|
aliasIndex: params.aliasIndex,
|
|
119
|
+
allowAnyModel,
|
|
120
120
|
allowedModelKeys
|
|
121
121
|
});
|
|
122
122
|
if (selection) {
|
package/dist/brand.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const FASED_BRAND_NAME = "Fased";
|
|
3
3
|
const FASED_AGENT_NAME = "Fased Agent";
|
|
4
4
|
const FASED_CONTROL_NAME = "Fased Control";
|
|
5
|
-
const FASED_PRODUCT_VERSION = "0.1.
|
|
5
|
+
const FASED_PRODUCT_VERSION = "0.1.64";
|
|
6
6
|
const FASED_DISPLAY_VERSION = `v${FASED_PRODUCT_VERSION}`;
|
|
7
7
|
function formatFasedDisplayLine() {
|
|
8
8
|
return `${FASED_AGENT_NAME} ${FASED_DISPLAY_VERSION}`;
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
991ad74433070833894e32b9ce584814bd21790717ff793eadb8f705787184d2
|
package/dist/channel-web.js
CHANGED
|
@@ -2,9 +2,9 @@ import { WA_WEB_AUTH_DIR, logWebSelfId, logoutWeb, pickWebChannel, webAuthExists
|
|
|
2
2
|
import { HEARTBEAT_TOKEN } from "./auto-reply/tokens.js";
|
|
3
3
|
import { HEARTBEAT_PROMPT } from "./auto-reply/heartbeat.js";
|
|
4
4
|
import { loadWebMedia, optimizeImageToJpeg } from "./web/media.js";
|
|
5
|
-
import { DEFAULT_WEB_MEDIA_BYTES } from "./web/auto-reply/constants.js";
|
|
6
5
|
import { createWaSocket, formatError, getStatusCode, waitForWaConnection } from "./web/session.js";
|
|
7
6
|
import { sendMessageWhatsApp } from "./web/outbound.js";
|
|
7
|
+
import { DEFAULT_WEB_MEDIA_BYTES } from "./web/auto-reply/constants.js";
|
|
8
8
|
import { extractMediaPlaceholder, extractText } from "./web/inbound/extract.js";
|
|
9
9
|
import { monitorWebInbox } from "./web/inbound/monitor.js";
|
|
10
10
|
import "./web/inbound.js";
|
|
@@ -12,4 +12,4 @@ import { monitorWebChannel } from "./web/auto-reply/monitor.js";
|
|
|
12
12
|
import "./web/auto-reply.js";
|
|
13
13
|
import { loginWeb } from "./web/login.js";
|
|
14
14
|
|
|
15
|
-
export {
|
|
15
|
+
export { monitorWebChannel };
|
|
@@ -18,6 +18,7 @@ import { describeUnknownError, extractGatewayMiskeys, maybeExplainGatewayService
|
|
|
18
18
|
import { GatewayLockError } from "../../infra/gateway-lock.js";
|
|
19
19
|
import { startGatewayServer } from "../../gateway/server.impl.js";
|
|
20
20
|
import "../../gateway/server.js";
|
|
21
|
+
import { assertLocalSourcePairedGatewayStartAllowed } from "../../infra/local-source-paired-update.js";
|
|
21
22
|
import { ensureDevGatewayConfig } from "./dev.js";
|
|
22
23
|
import { runGatewayLoop } from "./run-loop.js";
|
|
23
24
|
import syncFs from "node:fs";
|
|
@@ -55,6 +56,13 @@ function inheritGatewayRunOptions(opts, command) {
|
|
|
55
56
|
return merged;
|
|
56
57
|
}
|
|
57
58
|
async function runGatewayCommand(opts) {
|
|
59
|
+
try {
|
|
60
|
+
await assertLocalSourcePairedGatewayStartAllowed({ runtimeRoot: path.resolve(process.cwd()) });
|
|
61
|
+
} catch (error) {
|
|
62
|
+
defaultRuntime.error(String(error));
|
|
63
|
+
defaultRuntime.exit(1);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
58
66
|
const isDevProfile = process.env.FASED_PROFILE?.trim().toLowerCase() === "dev";
|
|
59
67
|
const devMode = Boolean(opts.dev) || isDevProfile;
|
|
60
68
|
if (opts.reset && !devMode) {
|
|
@@ -163,7 +163,7 @@ const coreEntries = [
|
|
|
163
163
|
{
|
|
164
164
|
commands: [{
|
|
165
165
|
name: "wallet",
|
|
166
|
-
description: "Wallet providers,
|
|
166
|
+
description: "Wallet providers, signer keys, and policy status",
|
|
167
167
|
hasSubcommands: true
|
|
168
168
|
}],
|
|
169
169
|
register: ({ program }) => {
|
|
@@ -60,11 +60,11 @@ const AUTH_CHOICE_HELP = formatAuthChoiceChoicesForCli({
|
|
|
60
60
|
});
|
|
61
61
|
function registerOnboardCommand(program) {
|
|
62
62
|
const providerAuthFlags = resolveOnboardProviderAuthFlags();
|
|
63
|
-
const command = program.command("onboard").description("Interactive wizard to set up the gateway, workspace, and skills").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/onboard", "docs.fased.ai/cli/onboard")}\n`).option("--workspace <dir>", "Agent workspace directory (default: ~/.fased/workspace)").option("--reset", "Repair auth/session state before running wizard").option("--reset-scope <scope>", "Repair scope: sessions|auth|auth+sessions").option("--non-interactive", "Run without prompts", false).option("--accept-risk", "Acknowledge that agents are powerful and full system access is risky (required for --non-interactive)", false).option("--flow <flow>", "Wizard flow: quickstart|advanced|manual").option("--mode <mode>", "Wizard mode: local|remote").option("--host-profile <profile>", "Host security profile: local|hosting").option("--host-security-capable", "Internal: host security was prepared by a root-started installer session").option("--host-maintenance-session", "Internal: post-bootstrap hosted rerun from the app user over Tailscale").option("--
|
|
63
|
+
const command = program.command("onboard").description("Interactive wizard to set up the gateway, workspace, and skills").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/onboard", "docs.fased.ai/cli/onboard")}\n`).option("--workspace <dir>", "Agent workspace directory (default: ~/.fased/workspace)").option("--reset", "Repair auth/session state before running wizard").option("--reset-scope <scope>", "Repair scope: sessions|auth|auth+sessions").option("--non-interactive", "Run without prompts", false).option("--accept-risk", "Acknowledge that agents are powerful and full system access is risky (required for --non-interactive)", false).option("--flow <flow>", "Wizard flow: quickstart|advanced|manual").option("--mode <mode>", "Wizard mode: local|remote").option("--host-profile <profile>", "Host security profile: local|hosting").option("--host-security-capable", "Internal: host security was prepared by a root-started installer session").option("--host-maintenance-session", "Internal: post-bootstrap hosted rerun from the app user over Tailscale").option("--allow-insecure", "Allow continuing when hosting security setup fails").option("--swap-gb <n>", "Override automatic swap size in GB for hosting setup").option("--auth-choice <choice>", `Auth: ${AUTH_CHOICE_HELP}`).option("--token-provider <id>", "Token provider id (non-interactive; used with --auth-choice token)").option("--token <token>", "Token value (non-interactive; used with --auth-choice token)").option("--token-profile-id <id>", "Auth profile id (non-interactive; default: <provider>:manual)").option("--token-expires-in <duration>", "Optional token expiry duration (e.g. 365d, 12h)").option("--cloudflare-ai-gateway-account-id <id>", "Cloudflare Account ID").option("--cloudflare-ai-gateway-gateway-id <id>", "Cloudflare AI Gateway ID");
|
|
64
64
|
for (const providerFlag of providerAuthFlags) {
|
|
65
65
|
command.option(providerFlag.cliOption, providerFlag.description);
|
|
66
66
|
}
|
|
67
|
-
command.option("--custom-base-url <url>", "Custom provider base URL").option("--custom-api-key <key>", "Custom provider API key (optional)").option("--custom-model-id <id>", "Custom provider model ID").option("--custom-provider-id <id>", "Custom provider ID (optional; auto-derived by default)").option("--custom-compatibility <mode>", "Custom provider API compatibility: openai|anthropic (default: openai)").option("--allow-private-network", "Allow a custom local/private model provider endpoint in non-interactive onboarding").option("--gateway-port <port>", "Gateway port").option("--gateway-bind <mode>", "Gateway bind: loopback|tailnet|lan|auto|custom").option("--gateway-auth <mode>", "Gateway auth: token|password").option("--gateway-token <token>", "Gateway token (token auth)").option("--gateway-password <password>", "Gateway password (password auth)").option("--wallet-enabled", "Enable wallet integration").option("--wallet-disabled", "Disable wallet integration").option("--wallet-mode <mode>", "Wallet mode: managed|external").option("--wallet-runtime <runtime>", "Wallet runtime: external-docker|external-custom").option("--wallet-providers <ids>", "Enabled wallet providers CSV (
|
|
67
|
+
command.option("--custom-base-url <url>", "Custom provider base URL").option("--custom-api-key <key>", "Custom provider API key (optional)").option("--custom-model-id <id>", "Custom provider model ID").option("--custom-provider-id <id>", "Custom provider ID (optional; auto-derived by default)").option("--custom-compatibility <mode>", "Custom provider API compatibility: openai|anthropic (default: openai)").option("--allow-private-network", "Allow a custom local/private model provider endpoint in non-interactive onboarding").option("--gateway-port <port>", "Gateway port").option("--gateway-bind <mode>", "Gateway bind: loopback|tailnet|lan|auto|custom").option("--gateway-auth <mode>", "Gateway auth: token|password").option("--gateway-token <token>", "Gateway token (token auth)").option("--gateway-password <password>", "Gateway password (password auth)").option("--wallet-enabled", "Enable wallet integration").option("--wallet-disabled", "Disable wallet integration").option("--wallet-mode <mode>", "Wallet mode: managed|external").option("--wallet-runtime <runtime>", "Wallet runtime: external-docker|external-custom").option("--wallet-providers <ids>", "Enabled wallet providers CSV (local-socket-signer,alchemy,turnkey,wallet-standard)").option("--wallet-default-provider <id>", "Default wallet provider id (local-socket-signer|alchemy|turnkey|wallet-standard)").option("--wallet-chains <chains>", "Wallet chains CSV (solana)").option("--wallet-host <host>", "External self-hosted signer host (advanced/deprecated)").option("--wallet-port <port>", "External self-hosted signer port (advanced/deprecated)").option("--wallet-install-enabled", "Enable wallet runtime auto-install").option("--wallet-install-disabled", "Disable wallet runtime auto-install").option("--wallet-install-version <version>", "Legacy self-host signer runtime version").option("--wallet-direct-signing", "Enable automated wallet execution for approved Agent tools").option("--wallet-no-direct-signing", "Disable automated wallet execution for approved Agent tools").option("--wallet-solana-allow-programs <programs>", "CSV allowlist of Solana programs").option("--wallet-solana-max-per-tx <amount>", "Solana per-transaction cap (lamports)").option("--wallet-solana-max-daily <amount>", "Solana daily cap (lamports)").option("--wallet-tool-access-mode <mode>", "Wallet tool access: owner-only|allowlist|all").option("--wallet-tool-access-allow-agents <agents>", "CSV allowlist agent IDs for wallet tool").option("--remote-url <url>", "Remote Gateway WebSocket URL").option("--remote-token <token>", "Remote Gateway token (optional)").option("--tailscale <mode>", "Tailscale: off|serve|funnel").option("--tailscale-reset-on-exit", "Reset tailscale serve/funnel on exit").option("--install-daemon", "Install gateway service").option("--no-install-daemon", "Skip gateway service install").option("--skip-daemon", "Skip gateway service install").option("--daemon-runtime <runtime>", "Daemon runtime: node|bun").option("--skip-channels", "Skip channel setup").option("--skip-skills", "Skip skills setup").option("--skip-health", "Skip health check").option("--fast-health", "Use fast health mode (skip long probe waits and non-critical startup gating)", true).option("--no-fast-health", "Disable fast health mode").option("--skip-ui", "Skip Control UI/TUI prompts").option("--node-manager <name>", "Node manager for skills: npm|pnpm|bun").option("--json", "Output JSON summary", false);
|
|
68
68
|
command.action(async (opts, commandRuntime) => {
|
|
69
69
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
70
70
|
const installDaemon = resolveInstallDaemonFlag(commandRuntime, { installDaemon: Boolean(opts.installDaemon) });
|
|
@@ -87,7 +87,6 @@ function registerOnboardCommand(program) {
|
|
|
87
87
|
hostProfile: opts.hostProfile,
|
|
88
88
|
hostSecurityCapable: Boolean(opts.hostSecurityCapable),
|
|
89
89
|
hostMaintenanceSession: Boolean(opts.hostMaintenanceSession),
|
|
90
|
-
tsAuthkey: opts.tsAuthkey,
|
|
91
90
|
allowInsecure: Boolean(opts.allowInsecure),
|
|
92
91
|
swapGb: typeof swapGbRaw === "number" && Number.isFinite(swapGbRaw) ? swapGbRaw : undefined,
|
|
93
92
|
workspace: opts.workspace,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defaultRuntime } from "../../runtime.js";
|
|
2
2
|
import { runCommandWithRuntime } from "../cli-utils.js";
|
|
3
|
-
import { walletCanaryCommand,
|
|
3
|
+
import { walletCanaryCommand, walletInboundListCommand, walletInboundPollCommand, walletInboundReconcileCommand, walletLegacyMigrationFinalizeCommand, walletLimitOrdersConfigureCommand, walletMigrateCommand, walletPolicyProfileApplyCommand, walletProviderConfigureCommand, walletRoleSetCommand, walletRotateKeysCommand, walletSetupCommand, walletSignerDoctorCommand, walletSignerServeCommand, walletStatusCommand } from "../../commands/wallet.js";
|
|
4
4
|
|
|
5
5
|
//#region src/cli/program/register.wallet.ts
|
|
6
6
|
function resolvePublicWalletSetupChain(raw) {
|
|
@@ -14,10 +14,10 @@ function resolvePublicWalletSetupChain(raw) {
|
|
|
14
14
|
throw new Error("Wallet setup is Solana-only. Use --chain solana.");
|
|
15
15
|
}
|
|
16
16
|
function registerWalletCommands(program) {
|
|
17
|
-
const wallet = program.command("wallet").description("Wallet providers,
|
|
17
|
+
const wallet = program.command("wallet").description("Wallet providers, native signer, and policy status").action(() => {
|
|
18
18
|
wallet.help({ error: true });
|
|
19
19
|
});
|
|
20
|
-
wallet.command("setup").description("
|
|
20
|
+
wallet.command("setup").description("Create a signer-owned Solana wallet or configure a supported provider").option("--mode <mode>", "local-signer-create|local-signer-import|local-signer|turnkey|alchemy").option("--chain <chain>", "solana", "solana").option("--wallet-id <id>", "Named wallet id (examples: agent, mining, vault)").option("--wallet-name <value>", "Friendly wallet display name (for UI/skills/plugins)").option("--role <role>", "Permanent signer role: agent|mining|vault").option("--api-key <value>", "Alchemy API key").option("--rpc-url <url>", "Solana RPC URL").option("--turnkey-api-public-key <value>", "Turnkey API public key (turnkey mode)").option("--turnkey-api-private-key <value>", "Turnkey API private key (turnkey mode)").option("--turnkey-organization-id <value>", "Turnkey organization ID (turnkey mode)").option("--turnkey-policy-id <value>", "Turnkey policy ID (turnkey mode)").option("--turnkey-base-url <value>", "Turnkey base URL override (turnkey mode)").option("--enable-limit-orders", "Legacy alias: configure Gateway Jupiter Swap API access (Trigger is signer-owned)", false).option("--disable-limit-orders", "Remove stored Gateway Jupiter Swap API key", false).option("--jupiter-api-key <value>", "Jupiter API key for Gateway swap crafting only").option("--non-interactive", "Do not prompt; require mode/inputs", false).option("--no-doctor", "Skip signer doctor in local-signer mode", false).option("--json", "Print JSON output", false).action(async (opts) => {
|
|
21
21
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
22
22
|
await walletSetupCommand(defaultRuntime, {
|
|
23
23
|
mode: typeof opts.mode === "string" ? opts.mode : undefined,
|
|
@@ -25,32 +25,28 @@ function registerWalletCommands(program) {
|
|
|
25
25
|
walletId: typeof opts.walletId === "string" ? opts.walletId : undefined,
|
|
26
26
|
walletName: typeof opts.walletName === "string" ? opts.walletName : undefined,
|
|
27
27
|
role: typeof opts.role === "string" ? opts.role : undefined,
|
|
28
|
-
privateKey: typeof opts.privateKey === "string" ? opts.privateKey : undefined,
|
|
29
28
|
apiKey: typeof opts.apiKey === "string" ? opts.apiKey : undefined,
|
|
30
29
|
rpcUrl: typeof opts.rpcUrl === "string" ? opts.rpcUrl : undefined,
|
|
31
|
-
showPrivateKeyOnce: Boolean(opts.showPrivateKeyOnce),
|
|
32
|
-
confirmPrivateKeyPrint: typeof opts.confirmPrivateKeyPrint === "string" ? opts.confirmPrivateKeyPrint : undefined,
|
|
33
30
|
turnkeyApiPublicKey: typeof opts.turnkeyApiPublicKey === "string" ? opts.turnkeyApiPublicKey : undefined,
|
|
34
31
|
turnkeyApiPrivateKey: typeof opts.turnkeyApiPrivateKey === "string" ? opts.turnkeyApiPrivateKey : undefined,
|
|
35
32
|
turnkeyOrganizationId: typeof opts.turnkeyOrganizationId === "string" ? opts.turnkeyOrganizationId : undefined,
|
|
33
|
+
turnkeyPolicyId: typeof opts.turnkeyPolicyId === "string" ? opts.turnkeyPolicyId : undefined,
|
|
36
34
|
turnkeyBaseUrl: typeof opts.turnkeyBaseUrl === "string" ? opts.turnkeyBaseUrl : undefined,
|
|
37
35
|
enableLimitOrders: Boolean(opts.enableLimitOrders),
|
|
38
36
|
disableLimitOrders: Boolean(opts.disableLimitOrders),
|
|
39
37
|
jupiterApiKey: typeof opts.jupiterApiKey === "string" ? opts.jupiterApiKey : undefined,
|
|
40
|
-
jupiterTriggerApiBaseUrl: typeof opts.jupiterTriggerApiBaseUrl === "string" ? opts.jupiterTriggerApiBaseUrl : undefined,
|
|
41
38
|
nonInteractive: Boolean(opts.nonInteractive),
|
|
42
39
|
noDoctor: Boolean(opts.noDoctor),
|
|
43
40
|
json: Boolean(opts.json)
|
|
44
41
|
});
|
|
45
42
|
});
|
|
46
43
|
});
|
|
47
|
-
wallet.command("limit-orders").description("Configure Jupiter
|
|
44
|
+
wallet.command("limit-orders").description("Configure Gateway Jupiter Swap API access; Trigger credentials remain signer-owned").option("--enable", "Store a Gateway Jupiter Swap API key", false).option("--disable", "Remove the stored Gateway Jupiter Swap API key", false).option("--jupiter-api-key <value>", "Jupiter API key for Gateway swap crafting only").option("--non-interactive", "Do not prompt; require explicit inputs", false).option("--json", "Print JSON output", false).action(async (opts) => {
|
|
48
45
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
49
46
|
await walletLimitOrdersConfigureCommand(defaultRuntime, {
|
|
50
47
|
enable: Boolean(opts.enable),
|
|
51
48
|
disable: Boolean(opts.disable),
|
|
52
49
|
jupiterApiKey: typeof opts.jupiterApiKey === "string" ? opts.jupiterApiKey : undefined,
|
|
53
|
-
jupiterTriggerApiBaseUrl: typeof opts.jupiterTriggerApiBaseUrl === "string" ? opts.jupiterTriggerApiBaseUrl : undefined,
|
|
54
50
|
nonInteractive: Boolean(opts.nonInteractive),
|
|
55
51
|
json: Boolean(opts.json)
|
|
56
52
|
});
|
|
@@ -61,42 +57,17 @@ function registerWalletCommands(program) {
|
|
|
61
57
|
await walletStatusCommand(defaultRuntime, { json: Boolean(opts.json) });
|
|
62
58
|
});
|
|
63
59
|
});
|
|
64
|
-
wallet.command("rotate-keys").description("
|
|
60
|
+
wallet.command("rotate-keys").description("Removed Gateway key rotation; prints native/provider authority guidance").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
65
61
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
66
62
|
await walletRotateKeysCommand(defaultRuntime, { json: Boolean(opts.json) });
|
|
67
63
|
});
|
|
68
64
|
});
|
|
69
|
-
|
|
70
|
-
keystore.command("init").description("Create a new encrypted keystore and set provider=embedded-keystore").option("--chain <chain>", "Key type: solana", "solana").option("--wallet-id <id>", "Named wallet id (agent, mining, vault, ...)").option("--out <path>", "Output keystore path (default: <state>/wallet/keystore.v1.enc)").option("--passphrase <value>", "Keystore passphrase (prefer env/file in shell history-safe use)").option("--rpc-url <url>", "Optional RPC URL hint (still typically set via env)").option("--show-private-key-once", "Print generated private key once (dangerous)", false).option("--confirm-private-key-print <text>", "Required with --show-private-key-once; type \"SHOW PRIVATE KEY\"").option("--name <value>", "Named wallet label for UI").option("--role <role>", "agent|vault. SAT mining is attached separately.").option("--force", "Overwrite existing keystore", false).option("--json", "Print JSON output", false).action(async (opts) => {
|
|
65
|
+
wallet.command("finalize-legacy-migration").description("Verify a completed native signer import and retire legacy config/registry references").requiredOption("--wallet-id <id>", "Legacy wallet id imported into fased-signerd").option("--wallet-name <name>", "Name when the legacy registry row is missing").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
71
66
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
72
|
-
await
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
out: typeof opts.out === "string" ? opts.out : undefined,
|
|
77
|
-
passphrase: typeof opts.passphrase === "string" ? opts.passphrase : undefined,
|
|
78
|
-
rpcUrl: typeof opts.rpcUrl === "string" ? opts.rpcUrl : undefined,
|
|
79
|
-
showPrivateKeyOnce: Boolean(opts.showPrivateKeyOnce),
|
|
80
|
-
confirmPrivateKeyPrint: typeof opts.confirmPrivateKeyPrint === "string" ? opts.confirmPrivateKeyPrint : undefined,
|
|
81
|
-
name: typeof opts.name === "string" ? opts.name : undefined,
|
|
82
|
-
role: typeof opts.role === "string" ? opts.role : undefined,
|
|
83
|
-
force: Boolean(opts.force)
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
keystore.command("import").description("Import a raw Solana private key into an encrypted keystore and set provider").option("--chain <chain>", "Key type: solana", "solana").option("--wallet-id <id>", "Named wallet id (agent, mining, vault, ...)").option("--private-key <value>", "Solana private key (prefer env FASED_WALLET_PRIVATE_KEY)").option("--out <path>", "Output keystore path (default: <state>/wallet/keystore.v1.enc)").option("--passphrase <value>", "Keystore passphrase (prefer env/file in shell history-safe use)").option("--rpc-url <url>", "Optional RPC URL hint (still typically set via env)").option("--name <value>", "Named wallet label for UI").option("--role <role>", "agent|vault. SAT mining is attached separately.").option("--force", "Overwrite existing keystore", false).option("--json", "Print JSON output", false).action(async (opts) => {
|
|
88
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
89
|
-
await walletKeystoreImportCommand(defaultRuntime, {
|
|
90
|
-
json: Boolean(opts.json),
|
|
91
|
-
walletId: typeof opts.walletId === "string" ? opts.walletId : undefined,
|
|
92
|
-
out: typeof opts.out === "string" ? opts.out : undefined,
|
|
93
|
-
passphrase: typeof opts.passphrase === "string" ? opts.passphrase : undefined,
|
|
94
|
-
rpcUrl: typeof opts.rpcUrl === "string" ? opts.rpcUrl : undefined,
|
|
95
|
-
privateKey: typeof opts.privateKey === "string" ? opts.privateKey : undefined,
|
|
96
|
-
chain: resolvePublicWalletSetupChain(opts.chain) ?? "solana",
|
|
97
|
-
name: typeof opts.name === "string" ? opts.name : undefined,
|
|
98
|
-
role: typeof opts.role === "string" ? opts.role : undefined,
|
|
99
|
-
force: Boolean(opts.force)
|
|
67
|
+
await walletLegacyMigrationFinalizeCommand(defaultRuntime, {
|
|
68
|
+
walletId: String(opts.walletId),
|
|
69
|
+
walletName: typeof opts.walletName === "string" ? opts.walletName : undefined,
|
|
70
|
+
json: Boolean(opts.json)
|
|
100
71
|
});
|
|
101
72
|
});
|
|
102
73
|
});
|
|
@@ -110,59 +81,11 @@ function registerWalletCommands(program) {
|
|
|
110
81
|
});
|
|
111
82
|
});
|
|
112
83
|
});
|
|
113
|
-
keystore.command("passphrase-init").description("Generate keystore passphrase file (0600) and print env export hint").option("--out <path>", "Passphrase file path (default: <state>/wallet/passphrase)").option("--length <bytes>", "Random bytes length", (v) => Number.parseInt(v, 10)).option("--force", "Overwrite existing file", false).option("--json", "Print JSON output", false).action(async (opts) => {
|
|
114
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
115
|
-
await walletKeystorePassphraseInitCommand(defaultRuntime, {
|
|
116
|
-
out: typeof opts.out === "string" ? opts.out : undefined,
|
|
117
|
-
length: typeof opts.length === "number" && Number.isFinite(opts.length) ? opts.length : undefined,
|
|
118
|
-
force: Boolean(opts.force),
|
|
119
|
-
json: Boolean(opts.json)
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
keystore.command("rotate-passphrase").description("Re-encrypt embedded keystore with a new passphrase and update passphrase file").option("--file <path>", "Passphrase file path (default: env or <state>/wallet/passphrase)").option("--old-passphrase <value>", "Old passphrase (avoid shell history; prefer file/env)").option("--new-passphrase <value>", "New passphrase (omit to auto-generate)").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
124
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
125
|
-
await walletKeystorePassphraseRotateCommand(defaultRuntime, {
|
|
126
|
-
file: typeof opts.file === "string" ? opts.file : undefined,
|
|
127
|
-
oldPassphrase: typeof opts.oldPassphrase === "string" ? opts.oldPassphrase : undefined,
|
|
128
|
-
newPassphrase: typeof opts.newPassphrase === "string" ? opts.newPassphrase : undefined,
|
|
129
|
-
json: Boolean(opts.json)
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
keystore.command("export").description("Export encrypted keystore backup (dangerous if printing)").option("--out <path>", "Write backup copy to path").option("--include-secret", "Include encrypted keystore content in JSON output", false).option("--confirm-include-secret <text>", "Required with --include-secret; type \"EXPORT KEYSTORE\"").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
134
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
135
|
-
await walletKeystoreExportCommand(defaultRuntime, {
|
|
136
|
-
out: typeof opts.out === "string" ? opts.out : undefined,
|
|
137
|
-
includeSecret: Boolean(opts.includeSecret),
|
|
138
|
-
confirmIncludeSecret: typeof opts.confirmIncludeSecret === "string" ? opts.confirmIncludeSecret : undefined,
|
|
139
|
-
json: Boolean(opts.json)
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
keystore.command("status").description("Show embedded keystore presence/unlock status").option("--chain <chain>", "Target chain: solana", "solana").option("--wallet-id <id>", "Named wallet id (uses chain-specific signer env fallback paths)").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
144
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
145
|
-
await walletKeystoreStatusCommand(defaultRuntime, {
|
|
146
|
-
json: Boolean(opts.json),
|
|
147
|
-
walletId: typeof opts.walletId === "string" ? opts.walletId : undefined,
|
|
148
|
-
chain: resolvePublicWalletSetupChain(opts.chain) ?? "solana"
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
keystore.command("validate").description("Validate embedded keystore unlock + RPC connectivity + chain + balance").option("--chain <chain>", "Keystore chain override: solana").option("--wallet-id <id>", "Named wallet id (agent, mining, vault, ...)").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
153
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
154
|
-
await walletKeystoreValidateCommand(defaultRuntime, {
|
|
155
|
-
json: Boolean(opts.json),
|
|
156
|
-
walletId: typeof opts.walletId === "string" ? opts.walletId : undefined,
|
|
157
|
-
chain: resolvePublicWalletSetupChain(opts.chain)
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
84
|
const provider = wallet.command("provider").description("Configure hosted wallet provider credentials (stored encrypted locally)");
|
|
162
85
|
provider.command("configure <providerId>").description("Configure hosted provider credentials and set wallet.provider.id").option("--set <key=value>", "Credential field (repeatable)", (v, acc) => [...acc, v], []).option("--rpc-url <url>", "Optional RPC URL hint to store with provider credentials").option("--json", "Print JSON output", false).action(async (providerArg, opts) => {
|
|
163
|
-
const providerId = providerArg === "turnkey" || providerArg === "
|
|
86
|
+
const providerId = providerArg === "turnkey" || providerArg === "alchemy" ? providerArg : null;
|
|
164
87
|
if (!providerId) {
|
|
165
|
-
throw new Error("provider must be one of: turnkey,
|
|
88
|
+
throw new Error("provider must be one of: turnkey, alchemy; Privy is unavailable");
|
|
166
89
|
}
|
|
167
90
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
168
91
|
await walletProviderConfigureCommand(defaultRuntime, {
|
|
@@ -198,17 +121,6 @@ function registerWalletCommands(program) {
|
|
|
198
121
|
});
|
|
199
122
|
});
|
|
200
123
|
});
|
|
201
|
-
signer.command("broker").description("Run the app-facing local signer broker daemon").option("--socket <path>", "App-facing Unix socket path").option("--backend-socket <path>", "Private backend signer socket path").option("--read-only", "Read-only mode", false).option("--pid-file <path>", "PID file path").option("--audit-log <path>", "Audit log path").action(async (opts) => {
|
|
202
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
203
|
-
await walletSignerBrokerCommand(defaultRuntime, {
|
|
204
|
-
socketPath: typeof opts.socket === "string" ? opts.socket : undefined,
|
|
205
|
-
backendSocketPath: typeof opts.backendSocket === "string" ? opts.backendSocket : undefined,
|
|
206
|
-
readOnly: Boolean(opts.readOnly),
|
|
207
|
-
pidFile: typeof opts.pidFile === "string" ? opts.pidFile : undefined,
|
|
208
|
-
auditLog: typeof opts.auditLog === "string" ? opts.auditLog : undefined
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
124
|
signer.command("doctor").description("Validate native/local signer socket, pid, audit log, rpc, and keystore readiness").option("--socket <path>", "Unix socket path").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
213
125
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
214
126
|
await walletSignerDoctorCommand(defaultRuntime, {
|
|
@@ -217,25 +129,6 @@ function registerWalletCommands(program) {
|
|
|
217
129
|
});
|
|
218
130
|
});
|
|
219
131
|
});
|
|
220
|
-
wallet.command("custody-init").description("Initialize split-key custody ceremony (device/hot/cold share state)").option("--json", "Print JSON output", false).option("--force", "Overwrite existing custody ceremony state", false).option("--wallet <walletId>", "Target wallet id for per-wallet custody state").option("--device-share <base64>", "Optional pre-generated device share (base64/base64url, 32 bytes)").action(async (opts) => {
|
|
221
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
222
|
-
await walletCustodyInitCommand(defaultRuntime, {
|
|
223
|
-
json: Boolean(opts.json),
|
|
224
|
-
force: Boolean(opts.force),
|
|
225
|
-
walletId: typeof opts.wallet === "string" ? opts.wallet : undefined,
|
|
226
|
-
deviceShare: typeof opts.deviceShare === "string" ? opts.deviceShare : undefined
|
|
227
|
-
});
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
wallet.command("custody-lock").description("Immediately end active custody unlock sessions (clears ephemeral signing material)").option("--host <host>", "Only lock unlock sessions for this host").option("--wallet <walletId>", "Only lock unlock sessions for this wallet").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
231
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
232
|
-
await walletCustodyLockCommand(defaultRuntime, {
|
|
233
|
-
json: Boolean(opts.json),
|
|
234
|
-
host: typeof opts.host === "string" ? opts.host : undefined,
|
|
235
|
-
walletId: typeof opts.wallet === "string" ? opts.wallet : undefined
|
|
236
|
-
});
|
|
237
|
-
});
|
|
238
|
-
});
|
|
239
132
|
wallet.command("migrate").description("Migrate wallet runtime source").requiredOption("--from <runtime>", "Current runtime: external-docker|external-custom").requiredOption("--to <runtime>", "Target runtime: external-docker|external-custom").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
240
133
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
241
134
|
await walletMigrateCommand(defaultRuntime, {
|
|
@@ -245,7 +138,7 @@ function registerWalletCommands(program) {
|
|
|
245
138
|
});
|
|
246
139
|
});
|
|
247
140
|
});
|
|
248
|
-
wallet.command("canary").description("Run real-chain canary checks (and optional recovery drill)").option("--json", "Print JSON output", false).option("--no-require-real-chain", "Allow non-real-chain readiness failures in checks").option("--execute-provider-e2e", "Run provider-level E2E checks (create/address/balance/reject/audit; send when enabled)", false).option("--execute-live-send", "Allow real on-chain send execution in provider E2E (requires canary target env vars)", false).option("--providers <ids>", "Comma-separated provider ids (
|
|
141
|
+
wallet.command("canary").description("Run real-chain canary checks (and optional recovery drill)").option("--json", "Print JSON output", false).option("--no-require-real-chain", "Allow non-real-chain readiness failures in checks").option("--execute-provider-e2e", "Run provider-level E2E checks (create/address/balance/reject/audit; send when enabled)", false).option("--execute-live-send", "Allow real on-chain send execution in provider E2E (requires canary target env vars)", false).option("--providers <ids>", "Comma-separated provider ids (alchemy,turnkey)").option("--execute-recovery-drill", "Run stack down/up recovery drill (external-docker runtime only)", false).action(async (opts) => {
|
|
249
142
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
250
143
|
await walletCanaryCommand(defaultRuntime, {
|
|
251
144
|
json: Boolean(opts.json),
|
|
@@ -258,7 +151,7 @@ function registerWalletCommands(program) {
|
|
|
258
151
|
});
|
|
259
152
|
});
|
|
260
153
|
const inbound = wallet.command("inbound").description("Inbound receive/deposit monitoring");
|
|
261
|
-
inbound.command("poll").description("Poll balances and detect inbound/outbound delta events").option("--provider <id>", "Provider id (
|
|
154
|
+
inbound.command("poll").description("Poll balances and detect inbound/outbound delta events").option("--provider <id>", "Provider id (local-socket-signer|alchemy|turnkey|wallet-standard)").option("--wallet-id <id>", "Named wallet id scope").option("--wallet-name <name>", "Named wallet name scope").option("--chain <chain>", "solana|all", "all").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
262
155
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
263
156
|
await walletInboundPollCommand(defaultRuntime, {
|
|
264
157
|
json: Boolean(opts.json),
|
|
@@ -269,7 +162,7 @@ function registerWalletCommands(program) {
|
|
|
269
162
|
});
|
|
270
163
|
});
|
|
271
164
|
});
|
|
272
|
-
inbound.command("list").description("List inbound/deposit events from local wallet ledger").option("--provider <id>", "Provider id (
|
|
165
|
+
inbound.command("list").description("List inbound/deposit events from local wallet ledger").option("--provider <id>", "Provider id (local-socket-signer|alchemy|turnkey|wallet-standard)").option("--wallet-id <id>", "Named wallet id filter").option("--chain <chain>", "solana").option("--status <status>", "all|detected|confirmed|reconciled|ignored", "all").option("--limit <count>", "Result limit", "100").option("--json", "Print JSON output", false).action(async (opts) => {
|
|
273
166
|
const limit = typeof opts.limit === "string" && opts.limit.trim() ? Number.parseInt(opts.limit, 10) : undefined;
|
|
274
167
|
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
275
168
|
await walletInboundListCommand(defaultRuntime, {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { theme } from "../terminal/theme.js";
|
|
2
2
|
import { defaultRuntime } from "../runtime.js";
|
|
3
3
|
import { listAgentIds, resolveAgentDir, resolveDefaultAgentId } from "../agents/agent-scope.js";
|
|
4
|
-
import { getProviderBrandManifestForRoute } from "../providers/registry.js";
|
|
5
4
|
import { ensureAuthProfileStore, loadAuthProfileStoreForRuntime } from "../agents/auth-profiles/store.js";
|
|
6
5
|
import { loadConfig, writeConfigFile } from "../config/io.js";
|
|
7
6
|
import "../config/config.js";
|
|
8
7
|
import "../agents/auth-profiles.js";
|
|
8
|
+
import { getProviderBrandManifestForRoute } from "../providers/registry.js";
|
|
9
9
|
import { ensureFasedModelsJson } from "../agents/models-config.js";
|
|
10
10
|
import { applyProviderRefreshToRegistrySource, buildProviderCapabilityOverridesSource, buildProviderRefreshEnvFromCredentials, buildProviderRefreshReport, buildProviderRegistryReviewPatch, fetchOfficialProviderRefreshSnapshot, loadProviderRefreshSnapshotFromFile } from "../providers/refresh.js";
|
|
11
11
|
import { buildAuthChoiceGroups } from "../commands/auth-choice-options.js";
|