@fased/fased 0.1.54 → 0.1.56
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/config/capability-catalog.json +12 -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 +2 -2
- package/dist/agents/authenticated-model-catalog.js +28 -0
- package/dist/agents/bash-tools.exec-host-node.js +1 -1
- package/dist/agents/bash-tools.exec.js +1 -1
- package/dist/agents/bash-tools.shared.js +2 -2
- package/dist/agents/cli-credentials.js +4 -4
- package/dist/agents/copilot-dynamic-headers.js +37 -0
- package/dist/agents/current-model-catalog.js +9 -13
- 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/model-catalog-normalized.js +1 -0
- package/dist/agents/model-catalog-source.js +2 -2
- package/dist/agents/model-catalog.js +1 -1
- package/dist/agents/model-metadata.js +58 -9
- package/dist/agents/openai-codex-app-server.js +499 -0
- package/dist/agents/pi-embedded-runner/compact.js +3 -3
- package/dist/agents/pi-embedded-runner/extra-params.js +168 -79
- package/dist/agents/pi-embedded-runner/model.js +62 -1
- package/dist/agents/pi-embedded-runner/moonshot-stream-wrappers.js +46 -0
- package/dist/agents/pi-embedded-runner/openai-stream-wrappers.js +221 -0
- package/dist/agents/pi-embedded-runner/run/attempt.js +6 -4
- package/dist/agents/pi-embedded-runner/run.js +5 -2
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/agents/pi-embedded-runner.js +1 -1
- 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-tools.js +2 -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/local-loader.js +6 -6
- package/dist/agents/skills/plugin-skills.js +2 -2
- package/dist/agents/skills/workspace.js +13 -13
- package/dist/agents/skills-install-download.js +7 -7
- package/dist/agents/skills-install-plan.js +2 -2
- package/dist/agents/skills-install.js +2 -2
- package/dist/agents/skills-status.js +2 -2
- package/dist/agents/subagent-depth.js +2 -2
- package/dist/agents/system-prompt-params.js +2 -2
- package/dist/agents/tools/discord-actions-messaging.js +1 -1
- package/dist/agents/tools/message-tool.js +1 -1
- package/dist/agents/tools/session-status-tool.js +3 -3
- package/dist/agents/tools/slack-actions.js +1 -1
- package/dist/agents/tools/tts-tool.js +1 -1
- 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/commands-models.js +1 -1
- package/dist/auto-reply/reply/directive-handling.impl.js +4 -1
- package/dist/auto-reply/reply/dispatch-acp.js +1 -1
- package/dist/auto-reply/reply/dispatch-from-config.js +1 -1
- package/dist/auto-reply/reply/get-reply-run.js +20 -2
- package/dist/auto-reply/reply/model-selection.js +1 -1
- 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 +1 -1
- package/dist/auto-reply/reply/session.js +3 -3
- package/dist/auto-reply/skill-commands.js +3 -3
- package/dist/auto-reply/status.js +7 -7
- package/dist/auto-reply/thinking.js +1 -1
- package/dist/brand.js +1 -1
- package/dist/browser/cdp.helpers.js +2 -2
- package/dist/browser/chrome.executables.js +3 -3
- package/dist/browser/chrome.js +5 -5
- package/dist/browser/chrome.profile-decoration.js +6 -6
- package/dist/browser/extension-relay.js +7 -7
- 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/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-add.js +1 -1
- package/dist/cli/cron-cli/register.cron-simple.js +2 -2
- package/dist/cli/dns-cli.js +9 -9
- package/dist/cli/gateway-cli/dev.js +5 -5
- package/dist/cli/gateway-cli/run.js +2 -2
- package/dist/cli/hooks-cli.js +5 -5
- package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
- package/dist/cli/memory-cli.js +7 -7
- package/dist/cli/nodes-media-utils.js +2 -2
- package/dist/cli/plugins-cli.js +2 -2
- package/dist/cli/program/register.agent.js +1 -1
- package/dist/cli/providers-cli.js +3 -2
- package/dist/cli/secrets-cli.js +3 -3
- package/dist/cli/windows-argv.js +2 -2
- package/dist/commands/agent.js +22 -3
- package/dist/commands/auth-choice.apply.api-providers.js +3 -8
- package/dist/commands/auth-choice.apply.openai.js +13 -7
- package/dist/commands/auth-choice.model-check.js +1 -2
- package/dist/commands/configure.gateway-auth.js +14 -16
- 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-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/hosted-dashboard-probe.js +3 -3
- package/dist/commands/managed-up.js +2 -2
- package/dist/commands/model-picker.js +27 -8
- package/dist/commands/models/list.probe.js +1 -1
- package/dist/commands/models/list.registry.js +13 -17
- package/dist/commands/models/list.status-command.js +2 -2
- package/dist/commands/onboard-auth.config-core.js +1 -1
- package/dist/commands/onboard-auth.config-litellm.js +21 -21
- package/dist/commands/onboard-auth.credentials.js +3 -4
- package/dist/commands/onboard-auth.js +0 -1
- package/dist/commands/onboarding/plugin-install.js +2 -2
- package/dist/commands/openai-codex-model-default.js +28 -5
- 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 +47 -47
- package/dist/config/cache-utils.js +2 -2
- package/dist/config/includes.js +5 -5
- package/dist/config/io.js +2 -2
- package/dist/config/paths.js +3 -3
- package/dist/config/sat-runtime-ids.js +3 -3
- package/dist/config/sessions/disk-budget.js +6 -6
- package/dist/config/sessions/paths.js +2 -2
- package/dist/config/sessions/store.js +17 -17
- package/dist/config/sessions/transcript.js +4 -4
- package/dist/config/talk.js +2 -2
- package/dist/config/zod-schema.agent-defaults.js +6 -2
- package/dist/config/zod-schema.agent-runtime.js +6 -2
- package/dist/config/zod-schema.core.js +6 -2
- package/dist/control-ui/assets/{app-BKlu6OKz.js → app-D7TXyNRi.js} +1548 -1540
- package/dist/control-ui/assets/chat-model-ref-Djkv93yn.js +2 -0
- package/dist/control-ui/assets/{index-nrFcGMv-.js → index-BmSBom-w.js} +3 -3
- package/dist/control-ui/assets/{providers-BQFrRqym.js → providers-Cc89iMdx.js} +5 -5
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -0
- package/dist/cron/isolated-agent/run.js +6 -2
- package/dist/cron/service/jobs.js +11 -1
- package/dist/cron/service/store.js +2 -2
- package/dist/cron/store.js +6 -6
- package/dist/daemon/systemd-system.js +5 -5
- package/dist/discord/monitor/gateway-plugin.js +2 -2
- package/dist/discord/monitor/thread-bindings.state.js +2 -2
- package/dist/discord/voice/manager.js +1 -1
- package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
- package/dist/gateway/client.js +4 -4
- 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 +11 -9
- package/dist/gateway/hooks-mapping.js +4 -4
- package/dist/gateway/protocol/schema/agents-models-skills.js +66 -4
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +4 -4
- package/dist/gateway/server-methods/chat.js +3 -3
- package/dist/gateway/server-methods/models.js +8 -8
- package/dist/gateway/server-methods/sessions.js +8 -8
- package/dist/gateway/server-methods/tts.js +2 -2
- package/dist/gateway/server-methods/usage.js +2 -2
- package/dist/gateway/server-model-catalog.js +3 -0
- package/dist/gateway/server.impl.js +3 -3
- 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 +27 -24
- package/dist/hooks/bundled-dir.js +4 -4
- package/dist/hooks/gmail-setup-utils.js +6 -6
- package/dist/hooks/import-url.js +2 -2
- package/dist/hooks/loader.js +4 -4
- package/dist/hooks/workspace.js +7 -7
- package/dist/infra/archive.js +17 -17
- package/dist/infra/boundary-file-read.js +2 -2
- package/dist/infra/boundary-path.js +15 -15
- package/dist/infra/brew.js +2 -2
- package/dist/infra/control-ui-assets.js +14 -14
- package/dist/infra/device-auth-store.js +8 -8
- package/dist/infra/device-identity.js +8 -8
- package/dist/infra/dotenv.js +2 -2
- package/dist/infra/exec-approvals.js +8 -8
- package/dist/infra/exec-command-resolution.js +4 -4
- package/dist/infra/exec-safe-bin-trust.js +2 -2
- package/dist/infra/fased-root.js +5 -5
- package/dist/infra/fs-safe.js +14 -14
- package/dist/infra/gateway-lock.js +11 -11
- package/dist/infra/git-commit.js +5 -5
- package/dist/infra/git-root.js +4 -4
- package/dist/infra/hosted-runtime-artifact.js +3 -3
- package/dist/infra/is-main.js +2 -2
- package/dist/infra/json-file.js +7 -7
- package/dist/infra/outbound/delivery-queue.js +16 -16
- package/dist/infra/path-env.js +3 -3
- package/dist/infra/ports-lsof.js +4 -4
- package/dist/infra/provider-usage.auth.js +3 -3
- package/dist/infra/safe-open-sync.js +2 -2
- package/dist/infra/session-cost-usage.js +9 -9
- package/dist/infra/shell-env.js +2 -2
- package/dist/infra/state-migrations.fs.js +6 -6
- package/dist/infra/state-migrations.js +23 -23
- package/dist/infra/tmp-fased-dir.js +6 -6
- package/dist/infra/update-runner.js +31 -3
- package/dist/infra/widearea-dns.js +3 -3
- package/dist/infra/wsl.js +2 -2
- package/dist/light-update-status.js +1 -1
- package/dist/line/accounts.js +2 -2
- package/dist/line/download.js +2 -2
- package/dist/logging/config.js +3 -3
- package/dist/logging/logger.js +7 -7
- package/dist/managed/federation.js +3 -3
- package/dist/managed/tunnel.js +3 -3
- package/dist/media/store.js +13 -13
- package/dist/media-understanding/runner.js +3 -3
- package/dist/memory/embeddings.js +2 -2
- package/dist/memory/internal.js +10 -10
- package/dist/memory/inventory.js +19 -2
- package/dist/memory/manager-sync-ops.js +7 -7
- package/dist/memory/repair-executor.js +17 -17
- package/dist/node-host/invoke-system-run-plan.js +8 -8
- package/dist/node-host/invoke.js +2 -2
- package/dist/node-host/runner.js +3 -3
- package/dist/pairing/pairing-store.js +3 -3
- package/dist/plugin-sdk/{accounts-DW9OS5Ll.js → accounts-DzWlKv1U.js} +1 -1
- package/dist/plugin-sdk/{actions-DQUXohRr.js → actions-BplQVLL6.js} +4 -4
- package/dist/plugin-sdk/{active-listener-BZQWZPF7.js → active-listener-x4MLhYUw.js} +1 -1
- package/dist/plugin-sdk/{allow-list-BYeKk0Sy.js → allow-list-DyAxs4yw.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-t4mmHsI2.js → audio-preflight-G8h3Sn8_.js} +43 -47
- package/dist/plugin-sdk/{audit-BZk_6Buw.js → audit-CWknklvI.js} +1 -1
- package/dist/plugin-sdk/{channel-access-CN5HiWdb.js → channel-access-a9Dnfw7-.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-B7Kkvx9K.js → channel-access-configure-CD4QDN5E.js} +1 -1
- package/dist/plugin-sdk/{channel-adapters.discord-IOZP8Cv5.js → channel-adapters.discord-BS4S4Svh.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-B2ffJ-LR.js → chunk-B8EZkwiT.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-jOdkyP53.js → chunk-items-CEPklxGe.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +43 -47
- package/dist/plugin-sdk/{commands-registry-BWb4NcfW.js → commands-registry-BfEa4tFA.js} +2 -2
- package/dist/plugin-sdk/{common-C4XrB73N.js → common-CbfckC19.js} +1 -1
- package/dist/plugin-sdk/{config-rySyVtKs.js → config-Bt5GhnA-.js} +105 -73
- package/dist/plugin-sdk/{config-schema-BaybPPrJ.js → config-schema-B9DKr6J5.js} +96239 -81587
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/device-pair.js +2 -3
- package/dist/plugin-sdk/{diagnostic-Dfn1iERm.js → diagnostic-DLL_zekv.js} +3 -3
- package/dist/plugin-sdk/{directory-live-DatqU-eS.js → directory-live-CSuYxdwk.js} +1 -1
- package/dist/plugin-sdk/{directory-live-ClwN5KKq.js → directory-live-Dw7ZgC9_.js} +1 -1
- package/dist/plugin-sdk/discord.d.ts +5 -5
- package/dist/plugin-sdk/discord.js +31 -32
- package/dist/plugin-sdk/{draft-stream-controls-D4Tb_iS_.js → draft-stream-controls-BqchW1vi.js} +1 -1
- package/dist/plugin-sdk/{fetch-guard-BuYrl6q2.js → fetch-guard-CeG6u6ld.js} +1 -1
- package/dist/plugin-sdk/{filesystem-manager-B9DDPgfU.js → filesystem-manager-BGGGrkiN.js} +2 -2
- package/dist/plugin-sdk/{fs-safe-BG-VzVkL.js → fs-safe-xBqok6yR.js} +1 -1
- package/dist/plugin-sdk/{group-mentions-DLOOve8d.d.ts → group-mentions-BHRff6j8.d.ts} +1 -1
- package/dist/plugin-sdk/{guilds-BeT3iHHJ.js → guilds-CDhRIX57.js} +1 -1
- package/dist/plugin-sdk/{handle-action-CGF-Qnp0.js → handle-action-DbzZFYnG.js} +24 -25
- package/dist/plugin-sdk/{helpers-DgRMfCnT.js → helpers-CluGKuIV.js} +1 -1
- package/dist/plugin-sdk/{image-ops-CcBfoMLW.js → image-ops-CUaLtIFj.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +8 -8
- package/dist/plugin-sdk/index.js +47 -51
- package/dist/plugin-sdk/json-store.js +6 -6
- package/dist/plugin-sdk/{login-DpDQyM7r.js → login-DJuHYDiK.js} +3 -3
- package/dist/plugin-sdk/{login-qr-COaSAPY5.js → login-qr-CbHL5ayf.js} +3 -3
- package/dist/plugin-sdk/{manager-Cqz30lA3.js → manager-oHAvZCT3.js} +7 -7
- package/dist/plugin-sdk/{markdown-tables-BOG5sSQQ.js → markdown-tables-Mkx7k92Y.js} +1 -1
- package/dist/plugin-sdk/{media-Bu-nJpPs.js → media-CA8sTmVE.js} +4 -4
- package/dist/plugin-sdk/{monitor-II_NIq3G.js → monitor-CZrN9pev.js} +51 -55
- package/dist/plugin-sdk/{monitor-DL6oEVo8.js → monitor-CmwGqNyV.js} +61 -65
- package/dist/plugin-sdk/{openresponses-http-vkHBBpGY.js → openresponses-http-CWOd4war.js} +43 -47
- package/dist/plugin-sdk/{optional-runtime-dependency-DEojVNfv.js → optional-runtime-dependency-DKmk9PZa.js} +1 -1
- package/dist/plugin-sdk/{outbound-mf2y6KuY.js → outbound-0oN9IfNw.js} +9 -9
- package/dist/plugin-sdk/{outbound-attachment-ivAHpWnn.js → outbound-attachment-DdVkqUzE.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-CvJ6Qa1Q.d.ts → pairing-message-BMkkS038.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-CqYG12t-.js → pairing-message-ClqhfCUk.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-D-21Sphe.js → pairing-store-B01mCSct.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-B6gD1clF.js → pi-model-discovery-Buz0JC1Y.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-3yDxS3ro.js → pi-model-discovery-runtime-DuwuoteY.js} +2 -2
- package/dist/plugin-sdk/{probe-Cyb-DGA3.js → probe--7xtfzMm.js} +3 -3
- package/dist/plugin-sdk/{probe-Dlk0Jxpw.js → probe-BFroeK3g.js} +1 -1
- package/dist/plugin-sdk/{probe-D8JAILir.js → probe-l_whvGLY.js} +1 -1
- package/dist/plugin-sdk/{resolve-channels-zEnvugag.js → probe-xY3Ky0Tx.js} +3 -4
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-CMplwiwf.js → pw-ai-B0domrii.js} +6 -8
- package/dist/plugin-sdk/{qmd-manager-DCUE21Kj.js → qmd-manager-CFFeM4Fl.js} +3 -3
- package/dist/plugin-sdk/{query-expansion-Zr9qQixm.js → query-expansion-CAI2kKLQ.js} +1 -1
- package/dist/plugin-sdk/{replies-wiI4veI7.js → replies-1macZ1mZ.js} +4 -4
- package/dist/plugin-sdk/{resolve-channels-ChWKWtA9.js → resolve-channels-87LZrFk_.js} +2 -2
- package/dist/plugin-sdk/resolve-channels-CwB2_019.js +4 -0
- package/dist/plugin-sdk/{resolve-outbound-target-bm9RUK5q.js → resolve-outbound-target-BdH6LUoW.js} +2 -2
- package/dist/plugin-sdk/{resolve-route-ekGNc6os.js → resolve-route-CkNIKKEW.js} +1 -1
- package/dist/plugin-sdk/{resolve-users-BTvjQuui.js → resolve-users-Cxb5wpAQ.js} +1 -1
- package/dist/plugin-sdk/{resolve-users-CTzoruIZ.js → resolve-users-V6dHh_2B.js} +2 -2
- package/dist/plugin-sdk/{retry-policy-BvlC2SPh.js → retry-policy-9ybIh4Fq.js} +1 -1
- package/dist/plugin-sdk/{runtime-ClSakPxR.js → runtime-Dy420wBu.js} +3 -3
- package/dist/plugin-sdk/{runtime-dependency-yAWxH4El.js → runtime-dependency-CIw9t7-k.js} +123 -15
- package/dist/plugin-sdk/{sandbox-paths-lj7_EVuA.js → sandbox-paths-w64tYl0v.js} +1 -1
- package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
- package/dist/plugin-sdk/sat-runtime.js +44 -10
- package/dist/plugin-sdk/{send-D264hFVb.js → send-2VcOMTN5.js} +9 -9
- package/dist/plugin-sdk/{send-CgyS75Av.js → send-BQUtCJFW.js} +10 -10
- package/dist/plugin-sdk/{send-D58yEeH4.js → send-DPJIIYAs.js} +6 -6
- package/dist/plugin-sdk/{send-C7x6gzSl.js → send-Dqes9tdU.js} +13 -13
- package/dist/plugin-sdk/{send-DrAtUGLM.js → send-J4JWKP62.js} +8 -8
- package/dist/plugin-sdk/{session-DyMtb5YQ.js → session-C_n2S5ub.js} +3 -3
- package/dist/plugin-sdk/{skill-commands-Q80wCyry.js → skill-commands-B7wx9ax8.js} +102 -102
- package/dist/plugin-sdk/{slack-C-I6q3NB.js → slack-BouRQG-W.js} +64 -68
- package/dist/plugin-sdk/{slack-actions-dGE_t_Un.js → slack-actions-CasHVtiq.js} +20 -21
- package/dist/plugin-sdk/slack.d.ts +5 -5
- package/dist/plugin-sdk/slack.js +13 -13
- package/dist/plugin-sdk/{ssrf-BZG8Ztod.js → ssrf-fG4UHKBw.js} +180 -2
- package/dist/plugin-sdk/{sticker-cache-DCrDTYIi.js → sticker-cache-BvGEUas3.js} +3 -3
- package/dist/plugin-sdk/{tables-0mhUOh5v.js → tables-CjlQJV4r.js} +2 -2
- package/dist/plugin-sdk/{device-pairing-D2Yq-_U6.js → tailscale-status-DwpNdO3Z.js} +104 -2
- package/dist/plugin-sdk/{targets-znKHngSk.js → targets-QfP164Dh.js} +2 -2
- package/dist/plugin-sdk/{telegram-actions-GBYY8-x9.js → telegram-actions-CwYjV6Db.js} +48 -52
- package/dist/plugin-sdk/telegram.d.ts +5 -5
- package/dist/plugin-sdk/telegram.js +11 -11
- package/dist/plugin-sdk/{thread-bindings.lifecycle-ClzPBK70.js → thread-bindings.lifecycle-DU4iX_Jr.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-Ha01nmrq.js → thread-bindings.state-BgYWFjNF.js} +2 -2
- package/dist/plugin-sdk/{tmp-fased-dir-C_xfeEN9.d.ts → tmp-fased-dir-BdFQvrvw.d.ts} +2 -2
- package/dist/plugin-sdk/{types-DV5TNhMK.d.ts → types-BYDL6dQj.d.ts} +2 -2
- package/dist/plugin-sdk/{types-BI2njxWJ.d.ts → types-CLIvQaVg.d.ts} +39 -5
- package/dist/plugin-sdk/{types-CBCtqtMn.d.ts → types-DyhXnYUr.d.ts} +1 -1
- package/dist/plugin-sdk/{types.plugin-CvUiB3Kh.d.ts → types.plugin-_fbu40Re.d.ts} +8 -5
- package/dist/plugin-sdk/{web-CJMfhGFY.js → web-D0yENDve.js} +52 -56
- package/dist/plugin-sdk/{whatsapp-actions-0ZbGo5ZV.js → whatsapp-actions-BT2nPLyo.js} +18 -19
- package/dist/plugin-sdk/{whatsapp-heartbeat-DGTsuvQ8.js → whatsapp-heartbeat-CiABSZ6G.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +5 -5
- package/dist/plugin-sdk/whatsapp.js +14 -14
- package/dist/plugin-sdk/{wsl-D5jDUlms.js → wsl-B_ojyEtC.js} +53 -53
- 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/runtime/index.js +1 -1
- 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/github-copilot-model-discovery.js +51 -0
- package/dist/providers/litellm-models.js +1 -1
- package/dist/providers/openai-codex-model-discovery.js +166 -0
- package/dist/providers/refresh.js +311 -67
- package/dist/providers/registry.js +16 -6
- package/dist/providers/runtime-model-catalog.js +250 -0
- package/dist/secrets/apply.js +16 -16
- package/dist/secrets/audit.js +11 -11
- package/dist/secrets/shared.js +9 -9
- package/dist/security/scan-paths.js +2 -2
- package/dist/shared/config-eval.js +2 -2
- package/dist/shared/model-thinking.js +54 -4
- 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/bot-message-context.js +1 -1
- package/dist/telegram/token.js +5 -5
- package/dist/utils.js +5 -5
- package/dist/wallet/local-socket-signer-broker.js +16 -16
- package/dist/wallet/providers/embedded-keystore-adapter.js +5 -5
- package/dist/wallet/providers/local-socket-signer-adapter.js +2 -2
- package/dist/wallet/wallet-approval-auth.js +5 -5
- package/dist/wallet/wallet-audit-log.js +5 -5
- package/dist/wallet/wallet-custody.js +21 -21
- package/dist/wallet/wallet-inbound-events.js +5 -5
- package/dist/wallet/wallet-observability.js +5 -5
- package/dist/wallet/wallet-policy.js +9 -9
- package/dist/wallet/wallet-provider-registry.js +7 -7
- package/dist/wallet/wallet-runtime-config.js +3 -3
- package/dist/wallet/wallet-secrets-store.js +22 -22
- package/dist/wallet/wallet-send-approvals.js +5 -5
- package/dist/wallet/wallet-settlement-links.js +5 -5
- package/dist/web/accounts.js +3 -3
- package/dist/web/auth-store.js +18 -18
- package/dist/web/session.js +4 -4
- package/dist/wizard/host-security-capability.js +2 -2
- package/dist/wizard/onboarding.host-security.js +7 -7
- package/dist/wizard/onboarding.js +31 -13
- package/dist/wizard/onboarding.wallet.js +44 -44
- 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/package.json +1 -1
- 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/package.json +2 -1
- package/dist/control-ui/assets/chat-model-ref-B9sWop67.js +0 -2
- package/dist/plugin-sdk/ip-C70a-YlD.js +0 -181
- package/dist/plugin-sdk/tailscale-status-ClsquRGs.js +0 -104
- package/dist/plugin-sdk/wallet-status-CyovJojz.js +0 -11944
- package/dist/plugin-sdk/ws-CocpWGhl.js +0 -114
- /package/dist/plugin-sdk/{blocks-input-Dcitfh7h.js → blocks-input-Bg-8S2pl.js} +0 -0
- /package/dist/plugin-sdk/{channel-activity-Cg1xRoc2.js → channel-activity-DBDMQ3yI.js} +0 -0
- /package/dist/plugin-sdk/{channel-core-BOkyXXLa.js → channel-core-CFRs8LPy.js} +0 -0
- /package/dist/plugin-sdk/{client-D2N7hqVu.js → client-pI228AVT.js} +0 -0
- /package/dist/plugin-sdk/{command-poll-backoff-NAePk3eL.js → command-poll-backoff-yJU83wEq.js} +0 -0
- /package/dist/plugin-sdk/{date-time-CE3Uer3C.js → date-time-uUevHscU.js} +0 -0
- /package/dist/plugin-sdk/{diagnostic-session-state-HO94DMou.js → diagnostic-session-state-DqgfGYqZ.js} +0 -0
- /package/dist/plugin-sdk/{draft-stream-loop-CKyHn8IX.js → draft-stream-loop-CrOPfV3F.js} +0 -0
- /package/dist/plugin-sdk/{fetch-Cu-ahkie.js → fetch-BtmoPIlf.js} +0 -0
- /package/dist/plugin-sdk/{gateway-registry-DFsoY6C0.js → gateway-registry-DZDsqicG.js} +0 -0
- /package/dist/plugin-sdk/{inbound-context-BFnIdcqI.js → inbound-context-DrAcXE0y.js} +0 -0
- /package/dist/plugin-sdk/{internal-qo16nNU1.js → internal-CG_nHo-2.js} +0 -0
- /package/dist/plugin-sdk/{memory-search-C3C0bD2H.js → memory-search-VFll-AIb.js} +0 -0
- /package/dist/plugin-sdk/{pairing-token-N_6Jbt1L.js → pairing-token-Cs3BRKc0.js} +0 -0
- /package/dist/plugin-sdk/{path-alias-guards-Dg3gU-MA.js → path-alias-guards-BJZD5JMJ.js} +0 -0
- /package/dist/plugin-sdk/{polls-DQrR-qT3.js → polls-DKQXVfJp.js} +0 -0
- /package/dist/plugin-sdk/{proxy-7xs_rsnV.js → proxy-DWpYcsvR.js} +0 -0
- /package/dist/plugin-sdk/{qmd-scope-D1sSG_Rx.js → qmd-scope-CdX34VCV.js} +0 -0
- /package/dist/plugin-sdk/{redact-identifier-Q3tkvxhm.js → redact-identifier-Lt7t3l7S.js} +0 -0
- /package/dist/plugin-sdk/{redact-sensitive-url-dPvnFFsK.js → redact-sensitive-url-g-ukZjwA.js} +0 -0
- /package/dist/plugin-sdk/{render-Bwu_WxwA.js → render-e7fENCYH.js} +0 -0
- /package/dist/plugin-sdk/{reply-prefix-Bqzm6DC1.js → reply-prefix-ClpxvL_w.js} +0 -0
- /package/dist/plugin-sdk/{reply-reference-BkbK_DWT.js → reply-reference-Bqk-7HXE.js} +0 -0
- /package/dist/plugin-sdk/{secure-random-Bl-AVLVb.js → secure-random-BIkG-k4s.js} +0 -0
- /package/dist/plugin-sdk/{shared-clhhbWN3.js → shared-CBgp_GBw.js} +0 -0
- /package/dist/plugin-sdk/{target-errors-C_SVKoEv.js → target-errors-Ckufe179.js} +0 -0
- /package/dist/plugin-sdk/{targets-BDvvnlph.js → targets-CoMJ1ry1.js} +0 -0
- /package/dist/plugin-sdk/{tokens-BvtlOzVP.js → tokens-BbnqfVuu.js} +0 -0
- /package/dist/plugin-sdk/{tool-loop-detection-CWphm1k_.js → tool-loop-detection-Bp8bPJLs.js} +0 -0
- /package/dist/plugin-sdk/{ui-e020ouhJ.js → ui-Be8cLHIS.js} +0 -0
- /package/dist/plugin-sdk/{with-timeout-BYrRAYFV.js → with-timeout-ckWB8rTo.js} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths.js";
|
|
2
2
|
import { safeEqualSecret } from "../security/secret-equal.js";
|
|
3
3
|
import { isTrustedProxyAddress } from "./net.js";
|
|
4
|
-
import
|
|
4
|
+
import syncFs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { createHash, createHmac, randomBytes } from "node:crypto";
|
|
7
7
|
|
|
@@ -512,10 +512,10 @@ var ControlUiLoginService = class {
|
|
|
512
512
|
}
|
|
513
513
|
readState() {
|
|
514
514
|
try {
|
|
515
|
-
if (!
|
|
515
|
+
if (!syncFs.existsSync(this.statePath)) {
|
|
516
516
|
return buildEmptyState();
|
|
517
517
|
}
|
|
518
|
-
const raw =
|
|
518
|
+
const raw = syncFs.readFileSync(this.statePath, "utf8");
|
|
519
519
|
return normalizeState(safeJsonParse(raw));
|
|
520
520
|
} catch {
|
|
521
521
|
return buildEmptyState();
|
|
@@ -525,13 +525,13 @@ var ControlUiLoginService = class {
|
|
|
525
525
|
if (!this.state) {
|
|
526
526
|
return;
|
|
527
527
|
}
|
|
528
|
-
|
|
528
|
+
syncFs.mkdirSync(path.dirname(this.statePath), { recursive: true });
|
|
529
529
|
const tmpPath = `${this.statePath}.${process.pid}.${Date.now()}.tmp`;
|
|
530
530
|
const body = `${JSON.stringify(this.state, null, 2)}\n`;
|
|
531
|
-
|
|
532
|
-
|
|
531
|
+
syncFs.writeFileSync(tmpPath, body, { mode: 384 });
|
|
532
|
+
syncFs.renameSync(tmpPath, this.statePath);
|
|
533
533
|
try {
|
|
534
|
-
|
|
534
|
+
syncFs.chmodSync(this.statePath, 384);
|
|
535
535
|
} catch {}
|
|
536
536
|
}
|
|
537
537
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { openVerifiedFileSync } from "../infra/safe-open-sync.js";
|
|
2
2
|
import { openBoundaryFileSync } from "../infra/boundary-file-read.js";
|
|
3
|
+
import { VERSION } from "../version.js";
|
|
3
4
|
import { isWithinDir } from "../infra/path-safety.js";
|
|
4
5
|
import { AVATAR_MAX_BYTES } from "../shared/avatar-policy.js";
|
|
5
6
|
import { CONTROL_UI_AVATAR_PREFIX, buildControlUiAvatarUrl, normalizeControlUiBasePath, resolveAssistantAvatarUrl } from "./control-ui-shared.js";
|
|
@@ -7,7 +8,7 @@ import { resolveControlUiRootSync } from "../infra/control-ui-assets.js";
|
|
|
7
8
|
import { DEFAULT_ASSISTANT_IDENTITY, resolveAssistantIdentity } from "./assistant-identity.js";
|
|
8
9
|
import { CONTROL_UI_BOOTSTRAP_CONFIG_PATH } from "./control-ui-contract.js";
|
|
9
10
|
import { buildControlUiCspHeader } from "./control-ui-csp.js";
|
|
10
|
-
import
|
|
11
|
+
import syncFs from "node:fs";
|
|
11
12
|
import path from "node:path";
|
|
12
13
|
|
|
13
14
|
//#region src/gateway/control-ui.ts
|
|
@@ -151,10 +152,10 @@ function handleControlUiAvatarRequest(req, res, opts) {
|
|
|
151
152
|
res.end();
|
|
152
153
|
return true;
|
|
153
154
|
}
|
|
154
|
-
serveResolvedFile(res, safeAvatar.path,
|
|
155
|
+
serveResolvedFile(res, safeAvatar.path, syncFs.readFileSync(safeAvatar.fd));
|
|
155
156
|
return true;
|
|
156
157
|
} finally {
|
|
157
|
-
|
|
158
|
+
syncFs.closeSync(safeAvatar.fd);
|
|
158
159
|
}
|
|
159
160
|
}
|
|
160
161
|
function respondNotFound(res) {
|
|
@@ -284,6 +285,7 @@ function handleControlUiHttpRequest(req, res, opts) {
|
|
|
284
285
|
}
|
|
285
286
|
sendJson(res, 200, {
|
|
286
287
|
basePath,
|
|
288
|
+
serverVersion: VERSION,
|
|
287
289
|
assistantName: identity.name,
|
|
288
290
|
assistantAvatar: avatarValue ?? identity.avatar,
|
|
289
291
|
assistantAgentId: identity.agentId
|
|
@@ -316,7 +318,7 @@ function handleControlUiHttpRequest(req, res, opts) {
|
|
|
316
318
|
}
|
|
317
319
|
const rootReal = (() => {
|
|
318
320
|
try {
|
|
319
|
-
return
|
|
321
|
+
return syncFs.realpathSync(root);
|
|
320
322
|
} catch (error) {
|
|
321
323
|
if (isExpectedSafePathError(error)) {
|
|
322
324
|
return null;
|
|
@@ -362,13 +364,13 @@ function handleControlUiHttpRequest(req, res, opts) {
|
|
|
362
364
|
return true;
|
|
363
365
|
}
|
|
364
366
|
if (path.basename(safeFile.path) === "index.html") {
|
|
365
|
-
serveResolvedIndexHtml(res,
|
|
367
|
+
serveResolvedIndexHtml(res, syncFs.readFileSync(safeFile.fd, "utf8"));
|
|
366
368
|
return true;
|
|
367
369
|
}
|
|
368
|
-
serveResolvedFile(res, safeFile.path,
|
|
370
|
+
serveResolvedFile(res, safeFile.path, syncFs.readFileSync(safeFile.fd));
|
|
369
371
|
return true;
|
|
370
372
|
} finally {
|
|
371
|
-
|
|
373
|
+
syncFs.closeSync(safeFile.fd);
|
|
372
374
|
}
|
|
373
375
|
}
|
|
374
376
|
if (STATIC_ASSET_EXTENSIONS.has(path.extname(fileRel).toLowerCase())) {
|
|
@@ -385,10 +387,10 @@ function handleControlUiHttpRequest(req, res, opts) {
|
|
|
385
387
|
res.end();
|
|
386
388
|
return true;
|
|
387
389
|
}
|
|
388
|
-
serveResolvedIndexHtml(res,
|
|
390
|
+
serveResolvedIndexHtml(res, syncFs.readFileSync(safeIndex.fd, "utf8"));
|
|
389
391
|
return true;
|
|
390
392
|
} finally {
|
|
391
|
-
|
|
393
|
+
syncFs.closeSync(safeIndex.fd);
|
|
392
394
|
}
|
|
393
395
|
}
|
|
394
396
|
respondNotFound(res);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CONFIG_PATH } from "../config/paths.js";
|
|
2
2
|
import "../config/config.js";
|
|
3
3
|
import { importFileModule, resolveFunctionModuleExport } from "../hooks/module-loader.js";
|
|
4
|
-
import
|
|
4
|
+
import syncFs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
|
|
7
7
|
//#region src/gateway/hooks-mapping.ts
|
|
@@ -301,8 +301,8 @@ function escapesBase(baseDir, candidate) {
|
|
|
301
301
|
}
|
|
302
302
|
function safeRealpathSync(candidate) {
|
|
303
303
|
try {
|
|
304
|
-
const nativeRealpath =
|
|
305
|
-
return nativeRealpath ? nativeRealpath(candidate) :
|
|
304
|
+
const nativeRealpath = syncFs.realpathSync.native;
|
|
305
|
+
return nativeRealpath ? nativeRealpath(candidate) : syncFs.realpathSync(candidate);
|
|
306
306
|
} catch {
|
|
307
307
|
return null;
|
|
308
308
|
}
|
|
@@ -310,7 +310,7 @@ function safeRealpathSync(candidate) {
|
|
|
310
310
|
function resolveExistingAncestor(candidate) {
|
|
311
311
|
let current = path.resolve(candidate);
|
|
312
312
|
while (true) {
|
|
313
|
-
if (
|
|
313
|
+
if (syncFs.existsSync(current)) {
|
|
314
314
|
return current;
|
|
315
315
|
}
|
|
316
316
|
const parent = path.dirname(current);
|
|
@@ -16,16 +16,21 @@ const ModelChoiceSchema = Type.Object({
|
|
|
16
16
|
catalogSource: Type.Optional(Type.Union([
|
|
17
17
|
Type.Literal("configured"),
|
|
18
18
|
Type.Literal("runtime"),
|
|
19
|
+
Type.Literal("provider-api"),
|
|
19
20
|
Type.Literal("current-preview"),
|
|
20
21
|
Type.Literal("provider-index"),
|
|
21
22
|
Type.Literal("manifest")
|
|
22
23
|
])),
|
|
23
24
|
metadata: Type.Optional(Type.Object({
|
|
25
|
+
ref: NonEmptyString,
|
|
24
26
|
provider: NonEmptyString,
|
|
27
|
+
publicProviderId: NonEmptyString,
|
|
28
|
+
publicProviderLabel: NonEmptyString,
|
|
25
29
|
model: NonEmptyString,
|
|
26
30
|
label: NonEmptyString,
|
|
27
31
|
contextWindow: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
28
32
|
maxTokens: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
33
|
+
apiRoute: Type.Optional(NonEmptyString),
|
|
29
34
|
features: Type.Array(Type.Union([
|
|
30
35
|
Type.Literal("text"),
|
|
31
36
|
Type.Literal("vision"),
|
|
@@ -42,7 +47,9 @@ const ModelChoiceSchema = Type.Object({
|
|
|
42
47
|
Type.Literal("low"),
|
|
43
48
|
Type.Literal("medium"),
|
|
44
49
|
Type.Literal("high"),
|
|
45
|
-
Type.Literal("xhigh")
|
|
50
|
+
Type.Literal("xhigh"),
|
|
51
|
+
Type.Literal("max"),
|
|
52
|
+
Type.Literal("ultra")
|
|
46
53
|
]))),
|
|
47
54
|
defaultThinkingLevel: Type.Optional(Type.Union([
|
|
48
55
|
Type.Literal("off"),
|
|
@@ -50,7 +57,9 @@ const ModelChoiceSchema = Type.Object({
|
|
|
50
57
|
Type.Literal("low"),
|
|
51
58
|
Type.Literal("medium"),
|
|
52
59
|
Type.Literal("high"),
|
|
53
|
-
Type.Literal("xhigh")
|
|
60
|
+
Type.Literal("xhigh"),
|
|
61
|
+
Type.Literal("max"),
|
|
62
|
+
Type.Literal("ultra")
|
|
54
63
|
])),
|
|
55
64
|
thinkingMode: Type.Optional(Type.Union([
|
|
56
65
|
Type.Literal("openai-reasoning-effort"),
|
|
@@ -69,15 +78,68 @@ const ModelChoiceSchema = Type.Object({
|
|
|
69
78
|
])),
|
|
70
79
|
reasoningBudgetSupported: Type.Optional(Type.Boolean()),
|
|
71
80
|
streaming: Type.Boolean(),
|
|
72
|
-
capabilityConfidence: Type.Union([
|
|
81
|
+
capabilityConfidence: Type.Union([
|
|
82
|
+
Type.Literal("verified"),
|
|
83
|
+
Type.Literal("declared"),
|
|
84
|
+
Type.Literal("inferred"),
|
|
85
|
+
Type.Literal("unknown")
|
|
86
|
+
]),
|
|
87
|
+
capabilitySource: Type.Union([
|
|
88
|
+
Type.Literal("provider-api"),
|
|
89
|
+
Type.Literal("official-docs"),
|
|
90
|
+
Type.Literal("runtime"),
|
|
91
|
+
Type.Literal("configured"),
|
|
92
|
+
Type.Literal("inferred"),
|
|
93
|
+
Type.Literal("unknown")
|
|
94
|
+
]),
|
|
95
|
+
capabilityRetrievedAt: Type.Optional(NonEmptyString),
|
|
96
|
+
retrievedAt: NonEmptyString,
|
|
97
|
+
availabilitySource: Type.Union([
|
|
98
|
+
Type.Literal("provider-api"),
|
|
99
|
+
Type.Literal("runtime-catalog"),
|
|
100
|
+
Type.Literal("configured"),
|
|
101
|
+
Type.Literal("provider-plugin"),
|
|
102
|
+
Type.Literal("reviewed-catalog"),
|
|
103
|
+
Type.Literal("curated-recommendation")
|
|
104
|
+
]),
|
|
105
|
+
authRoute: NonEmptyString,
|
|
73
106
|
authMode: Type.Union([
|
|
74
107
|
Type.Literal("api-key"),
|
|
75
108
|
Type.Literal("oauth"),
|
|
76
|
-
Type.Literal("token")
|
|
109
|
+
Type.Literal("token"),
|
|
110
|
+
Type.Literal("aws-sdk")
|
|
77
111
|
]),
|
|
112
|
+
credentialRoute: Type.Object({
|
|
113
|
+
id: NonEmptyString,
|
|
114
|
+
label: NonEmptyString,
|
|
115
|
+
authMode: Type.Union([
|
|
116
|
+
Type.Literal("api-key"),
|
|
117
|
+
Type.Literal("oauth"),
|
|
118
|
+
Type.Literal("token"),
|
|
119
|
+
Type.Literal("aws-sdk")
|
|
120
|
+
])
|
|
121
|
+
}, { additionalProperties: false }),
|
|
122
|
+
credentialRoutes: Type.Array(Type.Object({
|
|
123
|
+
id: NonEmptyString,
|
|
124
|
+
label: NonEmptyString,
|
|
125
|
+
authMode: Type.Union([
|
|
126
|
+
Type.Literal("api-key"),
|
|
127
|
+
Type.Literal("oauth"),
|
|
128
|
+
Type.Literal("token"),
|
|
129
|
+
Type.Literal("aws-sdk")
|
|
130
|
+
])
|
|
131
|
+
}, { additionalProperties: false }), { minItems: 1 }),
|
|
132
|
+
price: Type.Optional(Type.Object({
|
|
133
|
+
input: Type.Number({ minimum: 0 }),
|
|
134
|
+
output: Type.Number({ minimum: 0 }),
|
|
135
|
+
cacheRead: Type.Number({ minimum: 0 }),
|
|
136
|
+
cacheWrite: Type.Number({ minimum: 0 }),
|
|
137
|
+
unit: Type.Literal("usd-per-million-tokens")
|
|
138
|
+
}, { additionalProperties: false })),
|
|
78
139
|
privateNetwork: Type.Boolean(),
|
|
79
140
|
privateNetworkAllowed: Type.Boolean(),
|
|
80
141
|
recommended: Type.Optional(Type.Boolean()),
|
|
142
|
+
recommendationRank: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
81
143
|
default: Type.Optional(Type.Boolean())
|
|
82
144
|
}, { additionalProperties: false }))
|
|
83
145
|
}, { additionalProperties: false });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { runExec } from "../process/exec.js";
|
|
2
2
|
import { getTailnetHostname } from "../infra/tailscale.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
|
|
6
6
|
//#region src/gateway/server-discovery.ts
|
|
@@ -20,7 +20,7 @@ function resolveBonjourCliPath(opts = {}) {
|
|
|
20
20
|
if (envPath) {
|
|
21
21
|
return envPath;
|
|
22
22
|
}
|
|
23
|
-
const statSync = opts.statSync ??
|
|
23
|
+
const statSync = opts.statSync ?? syncFs.statSync;
|
|
24
24
|
const isFile = (candidate) => {
|
|
25
25
|
try {
|
|
26
26
|
return statSync(candidate).isFile();
|
|
@@ -51,7 +51,7 @@ import { buildGatewayProbePayload } from "./probe-payload.js";
|
|
|
51
51
|
import { canonicalizePathVariant } from "./security-path.js";
|
|
52
52
|
import { handleToolsInvokeHttpRequest } from "./tools-invoke-http.js";
|
|
53
53
|
import { authorizeGatewayConnect, isLocalDirectRequest } from "./auth.js";
|
|
54
|
-
import
|
|
54
|
+
import syncFs from "node:fs";
|
|
55
55
|
import path from "node:path";
|
|
56
56
|
import { createServer } from "node:http";
|
|
57
57
|
import { createServer as createServer$1 } from "node:https";
|
|
@@ -2102,7 +2102,7 @@ async function readLocalFederationStatus(env = process.env, fetchImpl = fetch) {
|
|
|
2102
2102
|
const sourcePath = path.join(resolveStateDir(env), "federation", "access-token.json");
|
|
2103
2103
|
const managed = (env.FASED_GATEWAY_MODE ?? "").trim().toLowerCase() === "managed";
|
|
2104
2104
|
const configured = resolveConfiguredFederationStatus(env);
|
|
2105
|
-
if (!
|
|
2105
|
+
if (!syncFs.existsSync(sourcePath)) {
|
|
2106
2106
|
return {
|
|
2107
2107
|
managed,
|
|
2108
2108
|
sourcePath,
|
|
@@ -2114,7 +2114,7 @@ async function readLocalFederationStatus(env = process.env, fetchImpl = fetch) {
|
|
|
2114
2114
|
}
|
|
2115
2115
|
let rawText = "";
|
|
2116
2116
|
try {
|
|
2117
|
-
rawText =
|
|
2117
|
+
rawText = syncFs.readFileSync(sourcePath, "utf-8");
|
|
2118
2118
|
} catch {
|
|
2119
2119
|
return {
|
|
2120
2120
|
managed,
|
|
@@ -2163,7 +2163,7 @@ async function readLocalFederationStatus(env = process.env, fetchImpl = fetch) {
|
|
|
2163
2163
|
const lifecycle = Number.isFinite(expiresAtMs) ? expiresAtMs > Date.now() ? "active" : "expired" : "invalid";
|
|
2164
2164
|
let fileUpdatedAt;
|
|
2165
2165
|
try {
|
|
2166
|
-
fileUpdatedAt =
|
|
2166
|
+
fileUpdatedAt = syncFs.statSync(sourcePath).mtime.toISOString();
|
|
2167
2167
|
} catch {
|
|
2168
2168
|
fileUpdatedAt = undefined;
|
|
2169
2169
|
}
|
|
@@ -30,7 +30,7 @@ import { parseMessageWithAttachments } from "../chat-attachments.js";
|
|
|
30
30
|
import { injectTimestamp, timestampOptsFromConfig } from "./agent-timestamp.js";
|
|
31
31
|
import { normalizeRpcAttachmentsToChatAttachments } from "./attachment-normalize.js";
|
|
32
32
|
import { appendInjectedAssistantMessageToTranscript } from "./chat-transcript-inject.js";
|
|
33
|
-
import
|
|
33
|
+
import syncFs from "node:fs";
|
|
34
34
|
import path from "node:path";
|
|
35
35
|
|
|
36
36
|
//#region src/gateway/server-methods/chat.ts
|
|
@@ -321,7 +321,7 @@ function resolveTranscriptPath(params) {
|
|
|
321
321
|
}
|
|
322
322
|
function transcriptHasIdempotencyKey(transcriptPath, idempotencyKey) {
|
|
323
323
|
try {
|
|
324
|
-
const lines =
|
|
324
|
+
const lines = syncFs.readFileSync(transcriptPath, "utf-8").split(/\r?\n/);
|
|
325
325
|
for (const line of lines) {
|
|
326
326
|
if (!line.trim()) {
|
|
327
327
|
continue;
|
|
@@ -349,7 +349,7 @@ function appendAssistantTranscriptMessage(params) {
|
|
|
349
349
|
error: "transcript path not resolved"
|
|
350
350
|
};
|
|
351
351
|
}
|
|
352
|
-
if (!
|
|
352
|
+
if (!syncFs.existsSync(transcriptPath)) {
|
|
353
353
|
if (!params.createIfMissing) {
|
|
354
354
|
return {
|
|
355
355
|
ok: false,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defaultRuntime } from "../../runtime.js";
|
|
2
2
|
import { resolveAgentDir, resolveDefaultAgentId, resolveSessionAgentId } from "../../agents/agent-scope.js";
|
|
3
|
-
import {
|
|
3
|
+
import { listProviderBrandManifests } from "../../providers/registry.js";
|
|
4
4
|
import { DEFAULT_PROVIDER } from "../../agents/defaults.js";
|
|
5
5
|
import { normalizeSecretInput } from "../../utils/normalize-secret-input.js";
|
|
6
6
|
import { normalizeProviderId } from "../../agents/provider-id.js";
|
|
@@ -11,10 +11,10 @@ import { loadConfig, writeConfigFile } from "../../config/io.js";
|
|
|
11
11
|
import "../../config/config.js";
|
|
12
12
|
import { resolveProfileUnusableUntilForDisplay } from "../../agents/auth-profiles/usage.js";
|
|
13
13
|
import "../../agents/auth-profiles.js";
|
|
14
|
+
import { deriveModelMetadata } from "../../agents/model-metadata.js";
|
|
15
|
+
import { resolveAuthenticatedModelCatalog } from "../../agents/authenticated-model-catalog.js";
|
|
14
16
|
import { ErrorCodes, errorShape } from "../protocol/schema/error-codes.js";
|
|
15
17
|
import { formatValidationErrors, validateModelsAuthClearParams, validateModelsAuthConfigureParams, validateModelsAuthInteractiveStartParams, validateModelsAuthStatusParams, validateModelsAuthStoreParams, validateModelsCatalogStatusParams, validateModelsListParams } from "../protocol/index.js";
|
|
16
|
-
import { buildCredentialScopedAllowedModelSet } from "../../agents/model-catalog-access.js";
|
|
17
|
-
import { deriveModelMetadata } from "../../agents/model-metadata.js";
|
|
18
18
|
import { loadProviderExtensionCatalogIndex } from "../../agents/provider-extension-catalog-index.js";
|
|
19
19
|
import { buildModelCatalogStatus } from "../../agents/model-catalog-status.js";
|
|
20
20
|
import { DEFAULT_OAUTH_WARN_MS, buildAuthHealthSummary } from "../../agents/auth-health.js";
|
|
@@ -854,16 +854,16 @@ const modelsHandlers = {
|
|
|
854
854
|
}) : defaultAgentId;
|
|
855
855
|
const agentDir = resolveAgentDir(cfg, authAgentId);
|
|
856
856
|
const store = ensureAuthProfileStore(agentDir);
|
|
857
|
-
const { usableCatalog, allowedCatalog } =
|
|
857
|
+
const { usableCatalog, allowedCatalog } = await resolveAuthenticatedModelCatalog({
|
|
858
858
|
cfg,
|
|
859
|
+
store,
|
|
859
860
|
catalog,
|
|
860
861
|
defaultProvider: DEFAULT_PROVIDER,
|
|
861
|
-
|
|
862
|
+
agentDir
|
|
862
863
|
});
|
|
863
864
|
const providerFilter = typeof params.provider === "string" && params.provider.trim() ? normalizeProviderId(params.provider) : "";
|
|
864
865
|
const modelSource = params.all === true || params.available === true ? usableCatalog : allowedCatalog.length > 0 ? allowedCatalog : usableCatalog;
|
|
865
|
-
const
|
|
866
|
-
const models = providerFilter ? curatedModelSource.filter((model) => normalizeProviderId(model.provider) === providerFilter) : curatedModelSource;
|
|
866
|
+
const models = providerFilter ? modelSource.filter((model) => normalizeProviderId(model.provider) === providerFilter) : modelSource;
|
|
867
867
|
const payloadModels = params.includeMetadata === true ? models.map((model) => ({
|
|
868
868
|
...model,
|
|
869
869
|
metadata: model.metadata ?? deriveModelMetadata({
|
|
@@ -871,7 +871,7 @@ const modelsHandlers = {
|
|
|
871
871
|
cfg
|
|
872
872
|
})
|
|
873
873
|
})) : models;
|
|
874
|
-
respond(true, { models: payloadModels }, undefined);
|
|
874
|
+
respond(true, { models: payloadModels.toSorted((left, right) => left.provider.localeCompare(right.provider) || (left.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) - (right.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) || left.name.localeCompare(right.name)) }, undefined);
|
|
875
875
|
} catch (err) {
|
|
876
876
|
respond(false, undefined, errorShape(ErrorCodes.UNAVAILABLE, String(err)));
|
|
877
877
|
}
|
|
@@ -16,7 +16,7 @@ import "../../config/sessions.js";
|
|
|
16
16
|
import { captureSessionCompactionSnapshot, cleanupSessionCompactionSnapshot, getSessionCompactionCheckpoint, listSessionCompactionCheckpoints, persistSessionCompactionCheckpoint } from "../session-compaction-checkpoints.js";
|
|
17
17
|
import { invalidateCombinedSessionStoreCache, listSessionsFromStore, loadCombinedSessionStoreForGateway, pruneLegacyStoreKeys, resolveGatewaySessionStoreTarget, resolveSessionModelRef } from "../session-utils.js";
|
|
18
18
|
import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js";
|
|
19
|
-
import {
|
|
19
|
+
import { buildUsableModelProviderSet } from "../../agents/model-catalog-access.js";
|
|
20
20
|
import "../../agents/pi-embedded.js";
|
|
21
21
|
import { ErrorCodes, errorShape } from "../protocol/schema/error-codes.js";
|
|
22
22
|
import { validateSessionsCompactParams, validateSessionsCompactionBranchParams, validateSessionsCompactionGetParams, validateSessionsCompactionListParams, validateSessionsCompactionRestoreParams, validateSessionsDeleteParams, validateSessionsListParams, validateSessionsMessagesSubscribeParams, validateSessionsMessagesUnsubscribeParams, validateSessionsPatchParams, validateSessionsPreviewParams, validateSessionsResetParams, validateSessionsResolveParams } from "../protocol/index.js";
|
|
@@ -24,13 +24,13 @@ import { clearSessionQueues } from "../../auto-reply/reply/queue/cleanup.js";
|
|
|
24
24
|
import "../../auto-reply/reply/queue.js";
|
|
25
25
|
import { stopSubagentsForRequester } from "../../auto-reply/reply/abort.js";
|
|
26
26
|
import { getAcpSessionManager } from "../../acp/control-plane/manager.js";
|
|
27
|
-
import {
|
|
27
|
+
import { clearBootstrapSnapshot } from "../../agents/bootstrap-cache.js";
|
|
28
28
|
import { abortEmbeddedPiRun, waitForEmbeddedPiRunEnd } from "../../agents/pi-embedded-runner/runs.js";
|
|
29
29
|
import { clearCheckpointBranchIsolationFields } from "../session-compaction-isolation.js";
|
|
30
30
|
import { applySessionsPatchToStore } from "../sessions-patch.js";
|
|
31
31
|
import { resolveSessionKeyFromResolveParams } from "../sessions-resolve.js";
|
|
32
32
|
import { assertValidParams } from "./validation.js";
|
|
33
|
-
import
|
|
33
|
+
import syncFs from "node:fs";
|
|
34
34
|
import path from "node:path";
|
|
35
35
|
import { randomUUID } from "node:crypto";
|
|
36
36
|
import { SessionManager } from "@mariozechner/pi-coding-agent";
|
|
@@ -196,7 +196,7 @@ function resolveCheckpointSnapshotFile(params) {
|
|
|
196
196
|
return null;
|
|
197
197
|
}
|
|
198
198
|
try {
|
|
199
|
-
if (!
|
|
199
|
+
if (!syncFs.statSync(filePath).isFile()) {
|
|
200
200
|
return null;
|
|
201
201
|
}
|
|
202
202
|
} catch {
|
|
@@ -543,7 +543,7 @@ const sessionsHandlers = {
|
|
|
543
543
|
}
|
|
544
544
|
const cleanupRestoredFile = () => {
|
|
545
545
|
try {
|
|
546
|
-
|
|
546
|
+
syncFs.rmSync(sessionFile, { force: true });
|
|
547
547
|
} catch {}
|
|
548
548
|
};
|
|
549
549
|
const cleanupError = await ensureSessionRuntimeCleanup({
|
|
@@ -1068,7 +1068,7 @@ const sessionsHandlers = {
|
|
|
1068
1068
|
}, undefined);
|
|
1069
1069
|
return;
|
|
1070
1070
|
}
|
|
1071
|
-
const filePath = resolveSessionTranscriptCandidates(sessionId, storePath, entry?.sessionFile, target.agentId).find((candidate) =>
|
|
1071
|
+
const filePath = resolveSessionTranscriptCandidates(sessionId, storePath, entry?.sessionFile, target.agentId).find((candidate) => syncFs.existsSync(candidate));
|
|
1072
1072
|
if (!filePath) {
|
|
1073
1073
|
respond(true, {
|
|
1074
1074
|
ok: true,
|
|
@@ -1078,7 +1078,7 @@ const sessionsHandlers = {
|
|
|
1078
1078
|
}, undefined);
|
|
1079
1079
|
return;
|
|
1080
1080
|
}
|
|
1081
|
-
const raw =
|
|
1081
|
+
const raw = syncFs.readFileSync(filePath, "utf-8");
|
|
1082
1082
|
const lines = raw.split(/\r?\n/).filter((l) => l.trim().length > 0);
|
|
1083
1083
|
if (lines.length <= maxLines) {
|
|
1084
1084
|
respond(true, {
|
|
@@ -1096,7 +1096,7 @@ const sessionsHandlers = {
|
|
|
1096
1096
|
const archived = archiveFileOnDisk(filePath, "bak");
|
|
1097
1097
|
const keptLines = lines.slice(-maxLines);
|
|
1098
1098
|
try {
|
|
1099
|
-
|
|
1099
|
+
syncFs.writeFileSync(filePath, `${keptLines.join("\n")}\n`, "utf-8");
|
|
1100
1100
|
} catch (error) {
|
|
1101
1101
|
if (preCompactionSnapshot) {
|
|
1102
1102
|
cleanupSessionCompactionSnapshot(preCompactionSnapshot);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { loadConfig } from "../../config/io.js";
|
|
2
2
|
import "../../config/config.js";
|
|
3
|
-
import { OPENAI_TTS_MODELS, OPENAI_TTS_VOICES } from "../../tts/tts-core.js";
|
|
4
|
-
import { getTtsProvider, isTtsEnabled, isTtsProviderConfigured, listTtsPersonas, resolveTtsApiKey, resolveTtsAutoMode, resolveTtsConfig, resolveTtsPrefsPath, resolveTtsProviderOrder, setTtsEnabled, setTtsProvider, textToSpeech } from "../../tts/tts.js";
|
|
5
3
|
import { ErrorCodes, errorShape } from "../protocol/schema/error-codes.js";
|
|
6
4
|
import "../protocol/index.js";
|
|
5
|
+
import { OPENAI_TTS_MODELS, OPENAI_TTS_VOICES } from "../../tts/tts-core.js";
|
|
6
|
+
import { getTtsProvider, isTtsEnabled, isTtsProviderConfigured, listTtsPersonas, resolveTtsApiKey, resolveTtsAutoMode, resolveTtsConfig, resolveTtsPrefsPath, resolveTtsProviderOrder, setTtsEnabled, setTtsProvider, textToSpeech } from "../../tts/tts.js";
|
|
7
7
|
import { formatForLog } from "../ws-log.js";
|
|
8
8
|
|
|
9
9
|
//#region src/gateway/server-methods/tts.ts
|
|
@@ -12,7 +12,7 @@ import { readCronRunLogEntriesPageAll } from "../../cron/run-log.js";
|
|
|
12
12
|
import { loadCronStore, resolveCronStorePath } from "../../cron/store.js";
|
|
13
13
|
import { discoverAllSessions, loadCostUsageSummary, loadSessionCostSummary, loadSessionUsageTimeSeries } from "../../infra/session-cost-usage.js";
|
|
14
14
|
import { buildUsageAggregateTail } from "../../shared/usage-aggregates.js";
|
|
15
|
-
import
|
|
15
|
+
import syncFs from "node:fs";
|
|
16
16
|
|
|
17
17
|
//#region src/gateway/server-methods/usage.ts
|
|
18
18
|
const COST_USAGE_CACHE_TTL_MS = 3e4;
|
|
@@ -662,7 +662,7 @@ const usageHandlers = {
|
|
|
662
662
|
return;
|
|
663
663
|
}
|
|
664
664
|
try {
|
|
665
|
-
const stats =
|
|
665
|
+
const stats = syncFs.statSync(sessionFile);
|
|
666
666
|
if (stats.isFile()) {
|
|
667
667
|
mergedEntries.push({
|
|
668
668
|
key: resolvedStoreKey,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { loadConfig } from "../config/io.js";
|
|
2
2
|
import "../config/config.js";
|
|
3
|
+
import { resetRuntimeProviderModelCatalogCache } from "../providers/runtime-model-catalog.js";
|
|
3
4
|
import { loadModelCatalog, resetModelCatalogCacheForTest } from "../agents/model-catalog.js";
|
|
4
5
|
|
|
5
6
|
//#region src/gateway/server-model-catalog.ts
|
|
@@ -54,11 +55,13 @@ function startGatewayModelCatalogRefresh(params) {
|
|
|
54
55
|
function markGatewayModelCatalogStaleForReload() {
|
|
55
56
|
readOnlyModelCatalogCache.staleGeneration += 1;
|
|
56
57
|
fullModelCatalogCache.staleGeneration += 1;
|
|
58
|
+
resetRuntimeProviderModelCatalogCache();
|
|
57
59
|
}
|
|
58
60
|
function __resetModelCatalogCacheForTest() {
|
|
59
61
|
resetGatewayModelCatalogCache(readOnlyModelCatalogCache);
|
|
60
62
|
resetGatewayModelCatalogCache(fullModelCatalogCache);
|
|
61
63
|
resetModelCatalogCacheForTest();
|
|
64
|
+
resetRuntimeProviderModelCatalogCache();
|
|
62
65
|
}
|
|
63
66
|
async function loadGatewayModelCatalog(params) {
|
|
64
67
|
const cache = resolveGatewayModelCatalogCache(params);
|
|
@@ -68,7 +68,7 @@ import { createWizardSessionTracker } from "./server-wizard-sessions.js";
|
|
|
68
68
|
import { attachGatewayWsHandlers } from "./server-ws-runtime.js";
|
|
69
69
|
import { loadGatewayTlsRuntime } from "./server/tls.js";
|
|
70
70
|
import { createSessionEventSubscriberRegistry, createSessionMessageSubscriberRegistry } from "./session-event-subscribers.js";
|
|
71
|
-
import
|
|
71
|
+
import syncFs from "node:fs";
|
|
72
72
|
import path from "node:path";
|
|
73
73
|
|
|
74
74
|
//#region src/gateway/server.impl.ts
|
|
@@ -99,10 +99,10 @@ function hasConfiguredLocalSignerKeystoreMaterial(env) {
|
|
|
99
99
|
}
|
|
100
100
|
try {
|
|
101
101
|
const materialDir = resolveLocalSignerMaterialRootDir(env);
|
|
102
|
-
if (!
|
|
102
|
+
if (!syncFs.existsSync(materialDir)) {
|
|
103
103
|
return false;
|
|
104
104
|
}
|
|
105
|
-
return
|
|
105
|
+
return syncFs.readdirSync(materialDir, { withFileTypes: true }).some((entry) => entry.isFile() && /^keystore-solana(?:-.+)?\.v1\.enc$/i.test(entry.name));
|
|
106
106
|
} catch {
|
|
107
107
|
return false;
|
|
108
108
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isSessionCompactionCheckpointArtifactName } from "../config/sessions/artifacts.js";
|
|
2
2
|
import "../config/sessions.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { randomUUID } from "node:crypto";
|
|
6
6
|
|
|
@@ -88,7 +88,7 @@ function deleteCheckpointSnapshotIfSafe(filePath, expectedDir) {
|
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
90
|
try {
|
|
91
|
-
|
|
91
|
+
syncFs.unlinkSync(resolved);
|
|
92
92
|
} catch {}
|
|
93
93
|
}
|
|
94
94
|
function cleanupSessionCompactionSnapshot(reference) {
|
|
@@ -105,7 +105,7 @@ function captureSessionCompactionSnapshot(params) {
|
|
|
105
105
|
const resolved = path.resolve(sessionFile);
|
|
106
106
|
let stat;
|
|
107
107
|
try {
|
|
108
|
-
stat =
|
|
108
|
+
stat = syncFs.statSync(resolved);
|
|
109
109
|
} catch {
|
|
110
110
|
return null;
|
|
111
111
|
}
|
|
@@ -123,7 +123,7 @@ function captureSessionCompactionSnapshot(params) {
|
|
|
123
123
|
const base = path.basename(resolved, ".jsonl");
|
|
124
124
|
const snapshotFile = path.join(dir, `${base}.checkpoint.${randomUUID()}.jsonl`);
|
|
125
125
|
try {
|
|
126
|
-
|
|
126
|
+
syncFs.copyFileSync(resolved, snapshotFile);
|
|
127
127
|
} catch {
|
|
128
128
|
return null;
|
|
129
129
|
}
|