@fased/fased 0.1.61 → 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 +43 -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/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 +269 -33
- package/dist/agents/bash-tools.exec.js +10 -4
- package/dist/agents/bash-tools.shared.js +2 -2
- package/dist/agents/cli-credentials.js +4 -4
- package/dist/agents/current-model-catalog.js +3 -3
- 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/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/openai-codex-app-server.js +5 -5
- 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-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/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/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/env-overrides.js +38 -28
- package/dist/agents/skills/local-loader.js +6 -6
- package/dist/agents/skills/plugin-skills.js +2 -2
- package/dist/agents/skills/trust.js +93 -0
- package/dist/agents/skills/workspace.js +141 -13
- package/dist/agents/skills-clawhub.js +36 -11
- 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-marketplace-scan.js +49 -0
- 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/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/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/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/post-compaction-audit.js +3 -3
- package/dist/auto-reply/reply/post-compaction-context.js +3 -3
- package/dist/auto-reply/reply/session-reset-model.js +4 -4
- 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/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/canvas-host/server.js +4 -4
- package/dist/capabilities/catalog.js +3 -3
- package/dist/channel-web.js +2 -2
- 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 +10 -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/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/secrets-cli.js +3 -3
- package/dist/cli/update-cli/update-command.js +260 -11
- package/dist/cli/windows-argv.js +2 -2
- package/dist/commands/auth-choice.apply.api-providers.js +3 -3
- package/dist/commands/dashboard-link.js +3 -3
- package/dist/commands/doctor-config-flow.js +1 -1
- package/dist/commands/doctor-install.js +5 -5
- package/dist/commands/doctor-legacy-config.js +2 -13
- 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/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 +35 -11
- 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/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 +570 -1913
- package/dist/config/cache-utils.js +2 -2
- package/dist/config/config.js +2 -2
- package/dist/config/includes.js +5 -5
- package/dist/config/io.js +66 -4
- package/dist/config/paths.js +3 -3
- package/dist/config/sat-runtime-ids.js +3 -3
- package/dist/config/schema.help.js +8 -7
- package/dist/config/schema.labels.js +5 -4
- 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/config/zod-schema.agent-runtime.js +1 -0
- package/dist/config/zod-schema.js +5 -0
- package/dist/control-ui/assets/{app-BXA4gPvN.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-D2QbJhVg.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/cron/service/store.js +2 -2
- package/dist/cron/store.js +6 -6
- package/dist/daemon/systemd-system.js +60 -54
- package/dist/discord/monitor/thread-bindings.state.js +2 -2
- 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 +14 -11
- 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/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/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/hooks-mapping.js +4 -4
- package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
- package/dist/gateway/security-path.js +1 -1
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +1088 -1209
- package/dist/gateway/server-methods/chat.js +3 -3
- package/dist/gateway/server-methods/models.js +1 -1
- package/dist/gateway/server-methods/secrets.js +40 -0
- package/dist/gateway/server-methods/sessions.js +6 -6
- package/dist/gateway/server-methods/usage.js +2 -2
- 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/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/gateway/sessions-patch.js +3 -5
- 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/index.js +4 -2
- 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/fasedhub.js +64 -1
- 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/local-source-paired-update.js +538 -0
- 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/restart.js +41 -10
- 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/update-runner.js +96 -0
- package/dist/infra/widearea-dns.js +3 -3
- package/dist/infra/wsl.js +2 -2
- package/dist/light-update-status.js +11 -11
- 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/backend-config.js +2 -1
- 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/memory/session-files.js +16 -2
- 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/{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-Bv0hUOWL.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-Bk--NU3E.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-CGW6J3Pv.js → config-schema-BOT7kHb6.js} +6779 -3696
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +5 -5
- 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 +9 -27
- package/dist/plugin-sdk/index.js +29 -29
- package/dist/plugin-sdk/json-store.js +6 -6
- 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-B9Cmt_Je.js → monitor-BCFDaqJ-.js} +31 -31
- package/dist/plugin-sdk/{monitor-B71iwAgC.js → monitor-BgbjRiPM.js} +32 -32
- package/dist/plugin-sdk/{openresponses-http-Du4GMmwo.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-BMkkS038.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-D_bbE6Yd.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 +5 -5
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-Dqo9nRhi.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-Cnag7JTH.js → telegram-actions-CC_qN4v0.js} +30 -30
- package/dist/plugin-sdk/telegram.d.ts +5 -5
- 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-CLIvQaVg.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-BYDL6dQj.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-BInKQkc4.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 +5 -5
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +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/providers/refresh.js +1 -1
- package/dist/providers/registry.js +1 -1
- package/dist/secrets/apply.js +17 -17
- package/dist/secrets/audit.js +11 -11
- package/dist/secrets/runtime.js +1 -1
- 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 +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 +382 -107
- 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 +20 -31
- package/dist/wallet/wallet-atomic-state.js +53 -0
- package/dist/wallet/wallet-audit-log.js +5 -5
- package/dist/wallet/wallet-canary.js +0 -1
- package/dist/wallet/wallet-inbound-events.js +19 -14
- package/dist/wallet/wallet-observability.js +5 -5
- package/dist/wallet/wallet-policy-simulation.js +1 -1
- package/dist/wallet/wallet-policy.js +95 -41
- package/dist/wallet/wallet-provider-capabilities.js +28 -4
- package/dist/wallet/wallet-provider-registry.js +64 -51
- package/dist/wallet/wallet-provider-resolver.js +62 -63
- package/dist/wallet/wallet-runtime-config.js +31 -44
- package/dist/wallet/wallet-secrets-store.js +44 -22
- package/dist/wallet/wallet-send-approvals.js +1894 -592
- package/dist/wallet/wallet-send-execution-ledger.js +292 -0
- package/dist/wallet/wallet-settlement-links.js +17 -16
- 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/accounts.js +3 -3
- package/dist/web/auth-store.js +18 -18
- package/dist/web/auto-reply/heartbeat-runner.js +1 -1
- package/dist/web/auto-reply/monitor.js +2 -2
- package/dist/web/session.js +4 -4
- package/dist/wizard/host-security-capability.js +15 -24
- package/dist/wizard/onboarding.finalize.js +63 -184
- package/dist/wizard/onboarding.host-security.js +118 -1368
- package/dist/wizard/onboarding.js +180 -242
- package/dist/wizard/onboarding.wallet.js +323 -829
- 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 +18 -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 +18 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +18 -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 +18 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +18 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +18 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +18 -0
- package/extensions/zalouser/package.json +1 -1
- package/install.sh +4955 -0
- package/package.json +24 -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 +217 -0
- 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-BdFQvrvw.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
|
@@ -2,21 +2,23 @@ import { CONFIG_DIR, resolveUserPath } from "../../utils.js";
|
|
|
2
2
|
import { createSubsystemLogger } from "../../logging/subsystem.js";
|
|
3
3
|
import { normalizeSkillFilter } from "./filter.js";
|
|
4
4
|
import { resolveEffectiveAgentSkillFilter } from "./agent-filter.js";
|
|
5
|
+
import { isMarketplaceSkillDir, marketplaceSkillIdsFromEntries } from "./trust.js";
|
|
5
6
|
import { resolveSandboxPath } from "../sandbox-paths.js";
|
|
6
7
|
import { parseFrontmatter, resolveFasedAgentMetadata, resolveSkillInvocationPolicy, resolveSkillKey } from "./frontmatter.js";
|
|
7
8
|
import { shouldIncludeSkill } from "./config.js";
|
|
8
9
|
import { resolveBundledSkillsDir } from "./bundled-dir.js";
|
|
9
10
|
import { resolvePluginSkillDirs } from "./plugin-skills.js";
|
|
10
11
|
import { serializeByKey } from "./serialize.js";
|
|
11
|
-
import
|
|
12
|
+
import syncFs from "node:fs";
|
|
12
13
|
import os from "node:os";
|
|
13
14
|
import path from "node:path";
|
|
14
15
|
import { formatSkillsForPrompt, loadSkillsFromDir } from "@mariozechner/pi-coding-agent";
|
|
15
16
|
|
|
16
17
|
//#region src/agents/skills/workspace.ts
|
|
17
|
-
const fsp =
|
|
18
|
+
const fsp = syncFs.promises;
|
|
18
19
|
const skillsLogger = createSubsystemLogger("skills");
|
|
19
20
|
const skillCommandDebugOnce = new Set();
|
|
21
|
+
const CLAUDE_BUNDLE_MANIFEST_MAX_BYTES = 64 * 1024;
|
|
20
22
|
/**
|
|
21
23
|
* Replace the user's home directory prefix with `~` in skill file paths
|
|
22
24
|
* to reduce system prompt token usage. Models understand `~` expansion,
|
|
@@ -84,10 +86,10 @@ function isPathWithinRoot(candidatePath, rootPath) {
|
|
|
84
86
|
let candidate = path.resolve(candidatePath);
|
|
85
87
|
let root = path.resolve(rootPath);
|
|
86
88
|
try {
|
|
87
|
-
candidate =
|
|
89
|
+
candidate = syncFs.realpathSync.native(candidate);
|
|
88
90
|
} catch {}
|
|
89
91
|
try {
|
|
90
|
-
root =
|
|
92
|
+
root = syncFs.realpathSync.native(root);
|
|
91
93
|
} catch {}
|
|
92
94
|
const relative = path.relative(root, candidate);
|
|
93
95
|
return relative === "" || !relative.startsWith("..") && !path.isAbsolute(relative);
|
|
@@ -135,7 +137,7 @@ function resolveSkillsLimits(config) {
|
|
|
135
137
|
}
|
|
136
138
|
function listChildDirectories(dir) {
|
|
137
139
|
try {
|
|
138
|
-
const entries =
|
|
140
|
+
const entries = syncFs.readdirSync(dir, { withFileTypes: true });
|
|
139
141
|
const dirs = [];
|
|
140
142
|
for (const entry of entries) {
|
|
141
143
|
if (entry.name.startsWith(".")) continue;
|
|
@@ -147,7 +149,7 @@ function listChildDirectories(dir) {
|
|
|
147
149
|
}
|
|
148
150
|
if (entry.isSymbolicLink()) {
|
|
149
151
|
try {
|
|
150
|
-
if (
|
|
152
|
+
if (syncFs.statSync(fullPath).isDirectory()) {
|
|
151
153
|
dirs.push(entry.name);
|
|
152
154
|
}
|
|
153
155
|
} catch {}
|
|
@@ -161,7 +163,7 @@ function listChildDirectories(dir) {
|
|
|
161
163
|
function resolveNestedSkillsRoot(dir, opts) {
|
|
162
164
|
const nested = path.join(dir, "skills");
|
|
163
165
|
try {
|
|
164
|
-
if (!
|
|
166
|
+
if (!syncFs.existsSync(nested) || !syncFs.statSync(nested).isDirectory()) {
|
|
165
167
|
return { baseDir: dir };
|
|
166
168
|
}
|
|
167
169
|
} catch {
|
|
@@ -172,7 +174,7 @@ function resolveNestedSkillsRoot(dir, opts) {
|
|
|
172
174
|
const toScan = scanLimit === 0 ? [] : nestedDirs.slice(0, Math.min(nestedDirs.length, scanLimit));
|
|
173
175
|
for (const name of toScan) {
|
|
174
176
|
const skillMd = path.join(nested, name, "SKILL.md");
|
|
175
|
-
if (
|
|
177
|
+
if (syncFs.existsSync(skillMd)) {
|
|
176
178
|
return {
|
|
177
179
|
baseDir: nested,
|
|
178
180
|
note: `Detected nested skills root at ${nested}`
|
|
@@ -199,9 +201,9 @@ function loadSkillEntries(workspaceDir, opts) {
|
|
|
199
201
|
const resolved = resolveNestedSkillsRoot(params.dir, { maxEntriesToScan: limits.maxCandidatesPerRoot });
|
|
200
202
|
const baseDir = resolved.baseDir;
|
|
201
203
|
const rootSkillMd = path.join(baseDir, "SKILL.md");
|
|
202
|
-
if (
|
|
204
|
+
if (syncFs.existsSync(rootSkillMd)) {
|
|
203
205
|
try {
|
|
204
|
-
const size =
|
|
206
|
+
const size = syncFs.statSync(rootSkillMd).size;
|
|
205
207
|
if (size > limits.maxSkillFileBytes) {
|
|
206
208
|
skillsLogger.warn("Skipping skills root due to oversized SKILL.md.", {
|
|
207
209
|
dir: baseDir,
|
|
@@ -244,11 +246,11 @@ function loadSkillEntries(workspaceDir, opts) {
|
|
|
244
246
|
for (const name of limitedChildren) {
|
|
245
247
|
const skillDir = path.join(baseDir, name);
|
|
246
248
|
const skillMd = path.join(skillDir, "SKILL.md");
|
|
247
|
-
if (!
|
|
249
|
+
if (!syncFs.existsSync(skillMd)) {
|
|
248
250
|
continue;
|
|
249
251
|
}
|
|
250
252
|
try {
|
|
251
|
-
const size =
|
|
253
|
+
const size = syncFs.statSync(skillMd).size;
|
|
252
254
|
if (size > limits.maxSkillFileBytes) {
|
|
253
255
|
skillsLogger.warn("Skipping skill due to oversized SKILL.md.", {
|
|
254
256
|
skill: name,
|
|
@@ -336,7 +338,7 @@ function loadSkillEntries(workspaceDir, opts) {
|
|
|
336
338
|
const skillEntries = Array.from(merged.values()).map((skill) => {
|
|
337
339
|
let frontmatter = {};
|
|
338
340
|
try {
|
|
339
|
-
const raw =
|
|
341
|
+
const raw = syncFs.readFileSync(skill.filePath, "utf-8");
|
|
340
342
|
frontmatter = parseFrontmatter(raw);
|
|
341
343
|
} catch {}
|
|
342
344
|
return {
|
|
@@ -392,6 +394,7 @@ function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
|
|
|
392
394
|
})),
|
|
393
395
|
...skillFilter === undefined ? {} : { skillFilter },
|
|
394
396
|
resolvedSkills,
|
|
397
|
+
marketplaceSkillIds: marketplaceSkillIdsFromEntries(eligible),
|
|
395
398
|
version: opts?.snapshotVersion
|
|
396
399
|
};
|
|
397
400
|
}
|
|
@@ -407,6 +410,116 @@ function resolveEffectiveSkillFilter(opts) {
|
|
|
407
410
|
}
|
|
408
411
|
return undefined;
|
|
409
412
|
}
|
|
413
|
+
function isExplicitlyEnabledClaudeBundle(pluginId, config) {
|
|
414
|
+
const plugins = config?.plugins;
|
|
415
|
+
if (plugins?.enabled === false || plugins?.deny?.includes(pluginId)) {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
if (plugins?.allow?.length && !plugins.allow.includes(pluginId)) {
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
return plugins?.entries?.[pluginId]?.enabled === true;
|
|
422
|
+
}
|
|
423
|
+
function stripMarkdownFrontmatter(content) {
|
|
424
|
+
const normalized = content.replace(/\r\n?/gu, "\n");
|
|
425
|
+
if (!normalized.startsWith("---\n")) {
|
|
426
|
+
return normalized.trim();
|
|
427
|
+
}
|
|
428
|
+
const end = normalized.indexOf("\n---", 4);
|
|
429
|
+
if (end < 0) {
|
|
430
|
+
return "";
|
|
431
|
+
}
|
|
432
|
+
return normalized.slice(end + 4).replace(/^\n/u, "").trim();
|
|
433
|
+
}
|
|
434
|
+
function listImmediateDirectories(root) {
|
|
435
|
+
try {
|
|
436
|
+
return syncFs.readdirSync(root, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.isSymbolicLink()).map((entry) => path.join(root, entry.name));
|
|
437
|
+
} catch {
|
|
438
|
+
return [];
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
function loadClaudeBundleCommandSpecs(params) {
|
|
442
|
+
const roots = [
|
|
443
|
+
...listImmediateDirectories(path.join(CONFIG_DIR, "extensions")),
|
|
444
|
+
...listImmediateDirectories(path.join(params.workspaceDir, ".fased", "extensions")),
|
|
445
|
+
...(params.config?.plugins?.load?.paths ?? []).map((entry) => resolveUserPath(entry))
|
|
446
|
+
];
|
|
447
|
+
const seen = new Set();
|
|
448
|
+
const specs = [];
|
|
449
|
+
for (const unresolvedRoot of roots) {
|
|
450
|
+
let root;
|
|
451
|
+
try {
|
|
452
|
+
const stat = syncFs.lstatSync(unresolvedRoot);
|
|
453
|
+
if (!stat.isDirectory() || stat.isSymbolicLink()) {
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
root = syncFs.realpathSync(unresolvedRoot);
|
|
457
|
+
} catch {
|
|
458
|
+
continue;
|
|
459
|
+
}
|
|
460
|
+
if (seen.has(root) || isMarketplaceSkillDir(root)) {
|
|
461
|
+
continue;
|
|
462
|
+
}
|
|
463
|
+
seen.add(root);
|
|
464
|
+
const manifestPath = path.join(root, ".claude-plugin", "plugin.json");
|
|
465
|
+
let pluginId = "";
|
|
466
|
+
try {
|
|
467
|
+
const stat = syncFs.lstatSync(manifestPath);
|
|
468
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.size <= 0 || stat.size > CLAUDE_BUNDLE_MANIFEST_MAX_BYTES) {
|
|
469
|
+
continue;
|
|
470
|
+
}
|
|
471
|
+
const manifest = JSON.parse(syncFs.readFileSync(manifestPath, "utf8"));
|
|
472
|
+
pluginId = typeof manifest.name === "string" ? manifest.name.trim() : "";
|
|
473
|
+
} catch {
|
|
474
|
+
continue;
|
|
475
|
+
}
|
|
476
|
+
if (!pluginId || !isExplicitlyEnabledClaudeBundle(pluginId, params.config)) {
|
|
477
|
+
continue;
|
|
478
|
+
}
|
|
479
|
+
const commandsDir = path.join(root, "commands");
|
|
480
|
+
let entries;
|
|
481
|
+
try {
|
|
482
|
+
const stat = syncFs.lstatSync(commandsDir);
|
|
483
|
+
if (!stat.isDirectory() || stat.isSymbolicLink()) {
|
|
484
|
+
continue;
|
|
485
|
+
}
|
|
486
|
+
entries = syncFs.readdirSync(commandsDir, { withFileTypes: true });
|
|
487
|
+
} catch {
|
|
488
|
+
continue;
|
|
489
|
+
}
|
|
490
|
+
for (const entry of entries.filter((candidate) => candidate.isFile() && !candidate.isSymbolicLink()).toSorted((left, right) => left.name.localeCompare(right.name)).slice(0, params.maxCandidates)) {
|
|
491
|
+
if (path.extname(entry.name).toLowerCase() !== ".md") {
|
|
492
|
+
continue;
|
|
493
|
+
}
|
|
494
|
+
const filePath = path.join(commandsDir, entry.name);
|
|
495
|
+
let content;
|
|
496
|
+
try {
|
|
497
|
+
const stat = syncFs.lstatSync(filePath);
|
|
498
|
+
if (stat.size <= 0 || stat.size > params.maxFileBytes) {
|
|
499
|
+
continue;
|
|
500
|
+
}
|
|
501
|
+
content = syncFs.readFileSync(filePath, "utf8");
|
|
502
|
+
} catch {
|
|
503
|
+
continue;
|
|
504
|
+
}
|
|
505
|
+
const frontmatter = parseFrontmatter(content);
|
|
506
|
+
const skillName = frontmatter.name?.trim();
|
|
507
|
+
const description = frontmatter.description?.trim();
|
|
508
|
+
const promptTemplate = stripMarkdownFrontmatter(content);
|
|
509
|
+
if (!skillName || !description || !promptTemplate) {
|
|
510
|
+
continue;
|
|
511
|
+
}
|
|
512
|
+
specs.push({
|
|
513
|
+
name: sanitizeSkillCommandName(skillName),
|
|
514
|
+
skillName,
|
|
515
|
+
description: description.length > SKILL_COMMAND_DESCRIPTION_MAX_LENGTH ? `${description.slice(0, SKILL_COMMAND_DESCRIPTION_MAX_LENGTH - 1)}…` : description,
|
|
516
|
+
promptTemplate,
|
|
517
|
+
sourceFilePath: filePath
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
return specs;
|
|
522
|
+
}
|
|
410
523
|
function resolveWorkspaceSkillPromptState(workspaceDir, opts) {
|
|
411
524
|
const skillEntries = opts?.entries ?? loadSkillEntries(workspaceDir, opts);
|
|
412
525
|
const eligible = filterSkillEntries(skillEntries, opts?.config, resolveEffectiveSkillFilter(opts), opts?.eligibility);
|
|
@@ -599,9 +712,24 @@ function buildWorkspaceSkillCommandSpecs(workspaceDir, opts) {
|
|
|
599
712
|
name: unique,
|
|
600
713
|
skillName: rawName,
|
|
601
714
|
description,
|
|
715
|
+
sourceFilePath: entry.skill.filePath,
|
|
602
716
|
...dispatch ? { dispatch } : {}
|
|
603
717
|
});
|
|
604
718
|
}
|
|
719
|
+
const limits = resolveSkillsLimits(opts?.config);
|
|
720
|
+
for (const bundleCommand of loadClaudeBundleCommandSpecs({
|
|
721
|
+
workspaceDir,
|
|
722
|
+
config: opts?.config,
|
|
723
|
+
maxCandidates: limits.maxCandidatesPerRoot,
|
|
724
|
+
maxFileBytes: limits.maxSkillFileBytes
|
|
725
|
+
})) {
|
|
726
|
+
const unique = resolveUniqueSkillCommandName(bundleCommand.name, used);
|
|
727
|
+
used.add(unique.toLowerCase());
|
|
728
|
+
specs.push({
|
|
729
|
+
...bundleCommand,
|
|
730
|
+
name: unique
|
|
731
|
+
});
|
|
732
|
+
}
|
|
605
733
|
return specs;
|
|
606
734
|
}
|
|
607
735
|
|
|
@@ -163,9 +163,17 @@ async function resolveInstallVersion(params) {
|
|
|
163
163
|
if (!resolvedVersion) {
|
|
164
164
|
throw new Error(`Skill "${params.slug}" has no installable version.`);
|
|
165
165
|
}
|
|
166
|
+
const versionMetadataMatches = detail.latestVersion?.version === resolvedVersion;
|
|
167
|
+
const expectedIntegrity = versionMetadataMatches ? detail.latestVersion?.integrity : undefined;
|
|
168
|
+
const expectedSha256 = versionMetadataMatches ? detail.latestVersion?.sha256 : undefined;
|
|
169
|
+
if (!expectedIntegrity && !expectedSha256) {
|
|
170
|
+
throw new Error(`Skill "${params.slug}"@${resolvedVersion} has no registry-published archive digest; refusing an unverifiable install.`);
|
|
171
|
+
}
|
|
166
172
|
return {
|
|
167
173
|
detail,
|
|
168
|
-
version: resolvedVersion
|
|
174
|
+
version: resolvedVersion,
|
|
175
|
+
expectedIntegrity,
|
|
176
|
+
expectedSha256
|
|
169
177
|
};
|
|
170
178
|
}
|
|
171
179
|
async function installExtractedSkill(params) {
|
|
@@ -259,10 +267,10 @@ function buildMarketplaceUpdateReview(params) {
|
|
|
259
267
|
message: finding.message
|
|
260
268
|
}));
|
|
261
269
|
const reasons = [];
|
|
262
|
-
if (params.
|
|
270
|
+
if (params.permissions.risky && permissionDigestChanged) {
|
|
263
271
|
reasons.push("requested permissions changed");
|
|
264
272
|
}
|
|
265
|
-
if (
|
|
273
|
+
if (addedScanFindings.length > 0) {
|
|
266
274
|
reasons.push("archive scan added reviewable findings");
|
|
267
275
|
}
|
|
268
276
|
return {
|
|
@@ -278,7 +286,7 @@ function buildMarketplaceUpdateReview(params) {
|
|
|
278
286
|
}
|
|
279
287
|
function assertUpdateReviewAllowed(params) {
|
|
280
288
|
if (params.review.approvalRequired && params.allowPermissionChanges !== true) {
|
|
281
|
-
throw new Error(`ClawHub skill update requires permission review (${params.review.reasons.join(", ")}); rerun with explicit permission-change approval.`);
|
|
289
|
+
throw new Error(`ClawHub skill install or update requires permission review (${params.review.reasons.join(", ")}); rerun with explicit permission-change approval.`);
|
|
282
290
|
}
|
|
283
291
|
}
|
|
284
292
|
async function performClawHubSkillInstall(params) {
|
|
@@ -289,7 +297,7 @@ async function performClawHubSkillInstall(params) {
|
|
|
289
297
|
allowRegistries: params.allowRegistries,
|
|
290
298
|
allowTrackedLegacyOrigin: params.force && Boolean(params.previousOrigin)
|
|
291
299
|
});
|
|
292
|
-
const { detail, version } = await resolveInstallVersion({
|
|
300
|
+
const { detail, version, expectedIntegrity, expectedSha256 } = await resolveInstallVersion({
|
|
293
301
|
slug: params.slug,
|
|
294
302
|
version: params.version,
|
|
295
303
|
baseUrl: params.baseUrl
|
|
@@ -305,12 +313,15 @@ async function performClawHubSkillInstall(params) {
|
|
|
305
313
|
const archive = await downloadClawHubSkillArchive({
|
|
306
314
|
slug: params.slug,
|
|
307
315
|
version,
|
|
308
|
-
baseUrl: params.baseUrl
|
|
316
|
+
baseUrl: params.baseUrl,
|
|
317
|
+
expectedIntegrity,
|
|
318
|
+
expectedSha256
|
|
309
319
|
});
|
|
310
320
|
try {
|
|
311
321
|
let extractedPermissions = null;
|
|
312
322
|
let archiveScan = null;
|
|
313
323
|
let updateReview = null;
|
|
324
|
+
let contentSha256 = null;
|
|
314
325
|
const install = await withExtractedArchiveRoot({
|
|
315
326
|
archivePath: archive.archivePath,
|
|
316
327
|
tempDirPrefix: "fased-skill-clawhub-",
|
|
@@ -327,6 +338,7 @@ async function performClawHubSkillInstall(params) {
|
|
|
327
338
|
}
|
|
328
339
|
params.logger?.info?.(`Marketplace archive scan for ${params.slug}: ${formatArchiveScanFindings(scan)}`);
|
|
329
340
|
const inspection = await inspectSkillMarketplaceManifest(rootDir);
|
|
341
|
+
contentSha256 = await computeSkillFingerprint(rootDir);
|
|
330
342
|
extractedPermissions = inspection.permissions;
|
|
331
343
|
updateReview = buildMarketplaceUpdateReview({
|
|
332
344
|
previousOrigin: params.previousOrigin,
|
|
@@ -360,6 +372,9 @@ async function performClawHubSkillInstall(params) {
|
|
|
360
372
|
if (!updateReview) {
|
|
361
373
|
throw new Error("failed to review marketplace skill update");
|
|
362
374
|
}
|
|
375
|
+
if (!contentSha256) {
|
|
376
|
+
throw new Error("failed to fingerprint marketplace skill content");
|
|
377
|
+
}
|
|
363
378
|
const installedAt = Date.now();
|
|
364
379
|
await writeClawHubSkillOrigin(install.targetDir, {
|
|
365
380
|
version: 1,
|
|
@@ -367,6 +382,9 @@ async function performClawHubSkillInstall(params) {
|
|
|
367
382
|
slug: params.slug,
|
|
368
383
|
installedVersion: version,
|
|
369
384
|
installedAt,
|
|
385
|
+
archiveSha256: archive.sha256,
|
|
386
|
+
archiveIntegrityVerified: archive.integrityVerified,
|
|
387
|
+
contentSha256,
|
|
370
388
|
permissions: extractedPermissions,
|
|
371
389
|
installScan: archiveScan,
|
|
372
390
|
lastUpdateReview: updateReview
|
|
@@ -374,7 +392,10 @@ async function performClawHubSkillInstall(params) {
|
|
|
374
392
|
const lock = await readClawHubSkillsLockfile(params.workspaceDir);
|
|
375
393
|
lock.skills[params.slug] = {
|
|
376
394
|
version,
|
|
377
|
-
installedAt
|
|
395
|
+
installedAt,
|
|
396
|
+
archiveSha256: archive.sha256,
|
|
397
|
+
archiveIntegrityVerified: archive.integrityVerified,
|
|
398
|
+
contentSha256
|
|
378
399
|
};
|
|
379
400
|
await writeClawHubSkillsLockfile(params.workspaceDir, lock);
|
|
380
401
|
return {
|
|
@@ -432,7 +453,7 @@ async function previewTrackedSkillUpdateFromClawHub(params) {
|
|
|
432
453
|
allowRegistries: params.allowRegistries,
|
|
433
454
|
allowTrackedLegacyOrigin: Boolean(params.previousOrigin)
|
|
434
455
|
});
|
|
435
|
-
const { version } = await resolveInstallVersion({
|
|
456
|
+
const { version, expectedIntegrity, expectedSha256 } = await resolveInstallVersion({
|
|
436
457
|
slug: params.slug,
|
|
437
458
|
baseUrl: params.baseUrl
|
|
438
459
|
});
|
|
@@ -440,7 +461,9 @@ async function previewTrackedSkillUpdateFromClawHub(params) {
|
|
|
440
461
|
const archive = await downloadClawHubSkillArchive({
|
|
441
462
|
slug: params.slug,
|
|
442
463
|
version,
|
|
443
|
-
baseUrl: params.baseUrl
|
|
464
|
+
baseUrl: params.baseUrl,
|
|
465
|
+
expectedIntegrity,
|
|
466
|
+
expectedSha256
|
|
444
467
|
});
|
|
445
468
|
try {
|
|
446
469
|
const targetDir = resolveSkillInstallDir(params.workspaceDir, params.slug);
|
|
@@ -505,7 +528,7 @@ async function previewSkillInstallFromClawHub(params) {
|
|
|
505
528
|
registry,
|
|
506
529
|
allowRegistries: params.allowRegistries
|
|
507
530
|
});
|
|
508
|
-
const { detail, version } = await resolveInstallVersion({
|
|
531
|
+
const { detail, version, expectedIntegrity, expectedSha256 } = await resolveInstallVersion({
|
|
509
532
|
slug,
|
|
510
533
|
version: params.version,
|
|
511
534
|
baseUrl: params.baseUrl
|
|
@@ -521,7 +544,9 @@ async function previewSkillInstallFromClawHub(params) {
|
|
|
521
544
|
const archive = await downloadClawHubSkillArchive({
|
|
522
545
|
slug,
|
|
523
546
|
version,
|
|
524
|
-
baseUrl: params.baseUrl
|
|
547
|
+
baseUrl: params.baseUrl,
|
|
548
|
+
expectedIntegrity,
|
|
549
|
+
expectedSha256
|
|
525
550
|
});
|
|
526
551
|
try {
|
|
527
552
|
let permissions = null;
|
|
@@ -8,7 +8,7 @@ import { hasBinary } from "../shared/config-eval.js";
|
|
|
8
8
|
import "./skills.js";
|
|
9
9
|
import { formatInstallFailureMessage } from "./skills-install-output.js";
|
|
10
10
|
import { resolveSkillToolsRootDir } from "./skills/tools-dir.js";
|
|
11
|
-
import
|
|
11
|
+
import syncFs from "node:fs";
|
|
12
12
|
import path from "node:path";
|
|
13
13
|
import { createHash } from "node:crypto";
|
|
14
14
|
import { Readable } from "node:stream";
|
|
@@ -85,11 +85,11 @@ async function downloadFile(url, destPath, timeoutMs) {
|
|
|
85
85
|
throw new Error(`Download failed (${response.status} ${response.statusText})`);
|
|
86
86
|
}
|
|
87
87
|
await ensureDir(path.dirname(destPath));
|
|
88
|
-
const file =
|
|
88
|
+
const file = syncFs.createWriteStream(destPath);
|
|
89
89
|
const body = response.body;
|
|
90
90
|
const readable = isNodeReadableStream(body) ? body : Readable.fromWeb(body);
|
|
91
91
|
await pipeline(readable, file);
|
|
92
|
-
const stat = await
|
|
92
|
+
const stat = await syncFs.promises.stat(destPath);
|
|
93
93
|
return { bytes: stat.size };
|
|
94
94
|
} finally {
|
|
95
95
|
await release();
|
|
@@ -100,7 +100,7 @@ function normalizeHex(value) {
|
|
|
100
100
|
}
|
|
101
101
|
async function digestFile(filePath, algorithm, encoding) {
|
|
102
102
|
const hash = createHash(algorithm);
|
|
103
|
-
await pipeline(
|
|
103
|
+
await pipeline(syncFs.createReadStream(filePath), hash);
|
|
104
104
|
return hash.digest(encoding);
|
|
105
105
|
}
|
|
106
106
|
async function verifyDownloadIntegrity(archivePath, spec) {
|
|
@@ -183,7 +183,7 @@ async function extractArchive(params) {
|
|
|
183
183
|
};
|
|
184
184
|
}
|
|
185
185
|
const readArchiveFingerprint = async () => {
|
|
186
|
-
const stat = await
|
|
186
|
+
const stat = await syncFs.promises.stat(archivePath);
|
|
187
187
|
return {
|
|
188
188
|
size: stat.size,
|
|
189
189
|
mtimeMs: stat.mtimeMs
|
|
@@ -196,7 +196,7 @@ async function extractArchive(params) {
|
|
|
196
196
|
for (const part of parts) {
|
|
197
197
|
current = path.join(current, part);
|
|
198
198
|
try {
|
|
199
|
-
const stat = await
|
|
199
|
+
const stat = await syncFs.promises.lstat(current);
|
|
200
200
|
if (stat.isSymbolicLink()) {
|
|
201
201
|
throw new Error(`archive entry traverses symlink in destination: ${originalPath}`);
|
|
202
202
|
}
|
|
@@ -352,7 +352,7 @@ async function installDownloadSpec(params) {
|
|
|
352
352
|
try {
|
|
353
353
|
targetDir = resolveDownloadTargetDir(entry, spec);
|
|
354
354
|
await ensureDir(targetDir);
|
|
355
|
-
const stat = await
|
|
355
|
+
const stat = await syncFs.promises.lstat(targetDir);
|
|
356
356
|
if (stat.isSymbolicLink()) {
|
|
357
357
|
throw new Error(`targetDir is a symlink: ${targetDir}`);
|
|
358
358
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { hasBinary } from "../shared/config-eval.js";
|
|
2
2
|
import "./skills.js";
|
|
3
3
|
import { resolveBrewExecutable } from "../infra/brew.js";
|
|
4
|
-
import
|
|
4
|
+
import syncFs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
|
|
7
7
|
//#region src/agents/skills-install-plan.ts
|
|
@@ -153,7 +153,7 @@ function candidateSkillBinPaths(bin) {
|
|
|
153
153
|
function findSkillBinaryOutsidePath(bin) {
|
|
154
154
|
for (const candidate of candidateSkillBinPaths(bin)) {
|
|
155
155
|
try {
|
|
156
|
-
if (
|
|
156
|
+
if (syncFs.existsSync(candidate)) {
|
|
157
157
|
return candidate;
|
|
158
158
|
}
|
|
159
159
|
} catch {}
|
|
@@ -8,7 +8,7 @@ import { resolveBrewExecutable } from "../infra/brew.js";
|
|
|
8
8
|
import { summarizeSkillInstallTrust } from "./skills-install-trust.js";
|
|
9
9
|
import { formatInstallFailureMessage } from "./skills-install-output.js";
|
|
10
10
|
import { installDownloadSpec } from "./skills-install-download.js";
|
|
11
|
-
import
|
|
11
|
+
import syncFs from "node:fs";
|
|
12
12
|
import path from "node:path";
|
|
13
13
|
|
|
14
14
|
//#region src/agents/skills-install.ts
|
|
@@ -236,7 +236,7 @@ function candidateBinPaths(bin) {
|
|
|
236
236
|
function findBinaryOutsidePath(bin) {
|
|
237
237
|
for (const candidate of candidateBinPaths(bin)) {
|
|
238
238
|
try {
|
|
239
|
-
if (
|
|
239
|
+
if (syncFs.existsSync(candidate)) {
|
|
240
240
|
return candidate;
|
|
241
241
|
}
|
|
242
242
|
} catch {}
|
|
@@ -76,6 +76,25 @@ const SUSPICIOUS_SCRIPT_EXTENSIONS = new Set([
|
|
|
76
76
|
".sh",
|
|
77
77
|
".zsh"
|
|
78
78
|
]);
|
|
79
|
+
const REVIEWABLE_CODE_EXTENSIONS = new Set([
|
|
80
|
+
".cjs",
|
|
81
|
+
".go",
|
|
82
|
+
".js",
|
|
83
|
+
".jsx",
|
|
84
|
+
".mjs",
|
|
85
|
+
".py",
|
|
86
|
+
".rb",
|
|
87
|
+
".rs",
|
|
88
|
+
".ts",
|
|
89
|
+
".tsx"
|
|
90
|
+
]);
|
|
91
|
+
const MARKDOWN_EXTENSIONS = new Set([".md", ".mdx"]);
|
|
92
|
+
const MARKDOWN_INSTRUCTION_RISKS = [
|
|
93
|
+
/ignore\s+(?:all\s+)?(?:previous|prior|system|developer)\s+instructions?/iu,
|
|
94
|
+
/(?:upload|send|exfiltrat|leak)[^\n]{0,80}(?:secret|credential|token|private\s+key|seed\s+phrase)/iu,
|
|
95
|
+
/(?:\.ssh|\.aws|\.gnupg|\.env|process\.env|private\s+key|seed\s+phrase)/iu,
|
|
96
|
+
/curl\s+[^\n|]{0,160}\|\s*(?:ba)?sh/iu
|
|
97
|
+
];
|
|
79
98
|
const DEPENDENCY_MANIFEST_FILE_NAMES = new Set([
|
|
80
99
|
"Cargo.toml",
|
|
81
100
|
"Gemfile",
|
|
@@ -132,6 +151,13 @@ function inspectMarketplaceFilePath(params) {
|
|
|
132
151
|
path: params.path,
|
|
133
152
|
message: `skill archive contains script file "${basename}"`
|
|
134
153
|
});
|
|
154
|
+
} else if (REVIEWABLE_CODE_EXTENSIONS.has(ext)) {
|
|
155
|
+
addFinding(params.findings, {
|
|
156
|
+
severity: "warn",
|
|
157
|
+
code: "executable_source_file",
|
|
158
|
+
path: params.path,
|
|
159
|
+
message: `skill archive contains executable source file "${basename}"; review it before granting tools`
|
|
160
|
+
});
|
|
135
161
|
}
|
|
136
162
|
if (DEPENDENCY_MANIFEST_FILE_NAMES.has(basename)) {
|
|
137
163
|
addFinding(params.findings, {
|
|
@@ -142,6 +168,22 @@ function inspectMarketplaceFilePath(params) {
|
|
|
142
168
|
});
|
|
143
169
|
}
|
|
144
170
|
}
|
|
171
|
+
async function inspectMarketplaceMarkdown(params) {
|
|
172
|
+
const fullPath = path.join(params.rootDir, params.relativePath);
|
|
173
|
+
const stat = await fs.stat(fullPath);
|
|
174
|
+
if (stat.size > MAX_FILE_BYTES) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const content = await fs.readFile(fullPath, "utf8");
|
|
178
|
+
if (MARKDOWN_INSTRUCTION_RISKS.some((pattern) => pattern.test(content))) {
|
|
179
|
+
addFinding(params.findings, {
|
|
180
|
+
severity: "warn",
|
|
181
|
+
code: "instruction_risk",
|
|
182
|
+
path: toPosix(params.relativePath),
|
|
183
|
+
message: "skill instructions reference prompt overrides, secrets, sensitive paths, or shell-pipe execution; manual review is required"
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
145
187
|
async function inspectMarketplaceSourceCode(params) {
|
|
146
188
|
try {
|
|
147
189
|
const summary = await scanDirectoryWithSummary(params.rootDir, {
|
|
@@ -289,6 +331,13 @@ async function scanSkillMarketplaceArchive(rootDir) {
|
|
|
289
331
|
path: posixPath,
|
|
290
332
|
findings
|
|
291
333
|
});
|
|
334
|
+
if (MARKDOWN_EXTENSIONS.has(path.posix.extname(entry.name.toLowerCase()))) {
|
|
335
|
+
await inspectMarketplaceMarkdown({
|
|
336
|
+
rootDir,
|
|
337
|
+
relativePath,
|
|
338
|
+
findings
|
|
339
|
+
});
|
|
340
|
+
}
|
|
292
341
|
}
|
|
293
342
|
}
|
|
294
343
|
await inspectMarketplaceSourceCode({
|
|
@@ -8,7 +8,7 @@ import { evaluateEntryRequirementsForCurrentPlatform } from "../shared/entry-sta
|
|
|
8
8
|
import { resolveSkillInstallPlan } from "./skills-install-plan.js";
|
|
9
9
|
import { summarizeSkillInstallTrust } from "./skills-install-trust.js";
|
|
10
10
|
import { resolveBundledSkillsContext } from "./skills/bundled-context.js";
|
|
11
|
-
import
|
|
11
|
+
import syncFs from "node:fs";
|
|
12
12
|
import path from "node:path";
|
|
13
13
|
|
|
14
14
|
//#region src/agents/skills-status.ts
|
|
@@ -116,7 +116,7 @@ function readSkillMarketplaceStatus(skillDir) {
|
|
|
116
116
|
const candidates = [path.join(skillDir, ".clawhub", "origin.json"), path.join(skillDir, ".clawdhub", "origin.json")];
|
|
117
117
|
for (const candidate of candidates) {
|
|
118
118
|
try {
|
|
119
|
-
const raw = JSON.parse(
|
|
119
|
+
const raw = JSON.parse(syncFs.readFileSync(candidate, "utf8"));
|
|
120
120
|
if (raw.version !== 1 || typeof raw.registry !== "string" || typeof raw.slug !== "string" || typeof raw.installedVersion !== "string" || typeof raw.installedAt !== "number") {
|
|
121
121
|
continue;
|
|
122
122
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getSubagentDepth, parseAgentSessionKey } from "../sessions/session-key-utils.js";
|
|
2
2
|
import { resolveDefaultAgentId } from "./agent-scope.js";
|
|
3
3
|
import { resolveStorePath } from "../config/sessions/paths.js";
|
|
4
|
-
import
|
|
4
|
+
import syncFs from "node:fs";
|
|
5
5
|
import JSON5 from "json5";
|
|
6
6
|
|
|
7
7
|
//#region src/agents/subagent-depth.ts
|
|
@@ -28,7 +28,7 @@ function normalizeSessionKey(value) {
|
|
|
28
28
|
}
|
|
29
29
|
function readSessionStore(storePath) {
|
|
30
30
|
try {
|
|
31
|
-
const raw =
|
|
31
|
+
const raw = syncFs.readFileSync(storePath, "utf-8");
|
|
32
32
|
const parsed = JSON5.parse(raw);
|
|
33
33
|
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
34
34
|
return parsed;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { formatUserTime, resolveUserTimeFormat, resolveUserTimezone } from "./date-time.js";
|
|
2
2
|
import { findGitRoot } from "../infra/git-root.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
|
|
6
6
|
//#region src/agents/system-prompt-params.ts
|
|
@@ -29,7 +29,7 @@ function resolveRepoRoot(params) {
|
|
|
29
29
|
if (configured) {
|
|
30
30
|
try {
|
|
31
31
|
const resolved = path.resolve(configured);
|
|
32
|
-
const stat =
|
|
32
|
+
const stat = syncFs.statSync(resolved);
|
|
33
33
|
if (stat.isDirectory()) {
|
|
34
34
|
return resolved;
|
|
35
35
|
}
|
|
@@ -417,7 +417,7 @@ function createMarketplaceSearchTool(params) {
|
|
|
417
417
|
orders: orders.filter((entry) => {
|
|
418
418
|
const paymentStatus = entry.order.paymentIntent?.status;
|
|
419
419
|
const settlementStatus = entry.order.settlement?.status;
|
|
420
|
-
return paymentStatus === "verified" || settlementStatus === "settled" ||
|
|
420
|
+
return paymentStatus === "verified" || settlementStatus === "settled" || settlementStatus === "verified";
|
|
421
421
|
})
|
|
422
422
|
});
|
|
423
423
|
}
|
|
@@ -447,7 +447,7 @@ For scheduled or conditional automation, create a scheduled task whose isolated
|
|
|
447
447
|
});
|
|
448
448
|
}
|
|
449
449
|
case "capital_init": return jsonResult(await callGateway("sat.initMinerCapital", gatewayOpts, { authority: readStringParam(params, "authority") }));
|
|
450
|
-
case "reserve_top_up": return jsonResult(await callGateway("sat.
|
|
450
|
+
case "reserve_top_up": return jsonResult(await callGateway("sat.topUpRegistryReserve", gatewayOpts, { targetBalanceLamports: 0 }));
|
|
451
451
|
case "deposit_capital": return jsonResult(await callGateway("sat.depositMinerCapital", gatewayOpts, { lamports: parseLamportsInput(params) }));
|
|
452
452
|
case "withdraw_capital": return jsonResult(await callGateway("sat.withdrawMinerCapital", gatewayOpts, { lamports: parseLamportsInput(params) }));
|
|
453
453
|
case "set_commit": return jsonResult(await callGateway("sat.setActiveCommit", gatewayOpts, {
|
|
@@ -119,7 +119,7 @@ async function resolveModelOverride(params) {
|
|
|
119
119
|
throw new Error(`Unrecognized model "${raw}".`);
|
|
120
120
|
}
|
|
121
121
|
const key = modelKey(resolved.ref.provider, resolved.ref.model);
|
|
122
|
-
if (allowed.
|
|
122
|
+
if (!allowed.allowAny && !allowed.allowedKeys.has(key)) {
|
|
123
123
|
throw new Error(`Model "${key}" is not allowed.`);
|
|
124
124
|
}
|
|
125
125
|
const isDefault = resolved.ref.provider === configDefault.provider && resolved.ref.model === configDefault.model;
|