@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,8 +1,9 @@
|
|
|
1
|
+
import { resolveFasedAgentAgentDir } from "../agents/agent-paths.js";
|
|
1
2
|
import { ensureAuthProfileStore } from "../agents/auth-profiles/store.js";
|
|
2
3
|
import "../agents/auth-profiles.js";
|
|
3
4
|
import { randomToken } from "./onboard-helpers.js";
|
|
4
5
|
import { promptAuthChoiceGrouped } from "./auth-choice-prompt.js";
|
|
5
|
-
import { applyModelAllowlist, applyModelFallbacksFromSelection, promptModelAllowlist } from "./model-picker.js";
|
|
6
|
+
import { applyModelAllowlist, applyModelFallbacksFromSelection, applyPrimaryModel, promptModelAllowlist } from "./model-picker.js";
|
|
6
7
|
import { applyAuthChoice } from "./auth-choice.apply.js";
|
|
7
8
|
import { resolvePreferredProviderForAuthChoice } from "./auth-choice.preferred-provider.js";
|
|
8
9
|
import "./auth-choice.js";
|
|
@@ -20,12 +21,6 @@ function sanitizeTokenValue(value) {
|
|
|
20
21
|
}
|
|
21
22
|
return trimmed;
|
|
22
23
|
}
|
|
23
|
-
const ANTHROPIC_OAUTH_MODEL_KEYS = [
|
|
24
|
-
"anthropic/claude-fable-5",
|
|
25
|
-
"anthropic/claude-opus-4-8",
|
|
26
|
-
"anthropic/claude-sonnet-5",
|
|
27
|
-
"anthropic/claude-haiku-4-5"
|
|
28
|
-
];
|
|
29
24
|
function buildGatewayAuthConfig(params) {
|
|
30
25
|
const allowTailscale = params.existing?.allowTailscale;
|
|
31
26
|
const base = {};
|
|
@@ -61,9 +56,10 @@ function buildGatewayAuthConfig(params) {
|
|
|
61
56
|
return base;
|
|
62
57
|
}
|
|
63
58
|
async function promptAuthConfig(cfg, runtime, prompter) {
|
|
59
|
+
const agentDir = resolveFasedAgentAgentDir();
|
|
64
60
|
const authChoice = await promptAuthChoiceGrouped({
|
|
65
61
|
prompter,
|
|
66
|
-
store: ensureAuthProfileStore(
|
|
62
|
+
store: ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false }),
|
|
67
63
|
includeSkip: true
|
|
68
64
|
});
|
|
69
65
|
let next = cfg;
|
|
@@ -82,24 +78,26 @@ async function promptAuthConfig(cfg, runtime, prompter) {
|
|
|
82
78
|
config: next,
|
|
83
79
|
prompter,
|
|
84
80
|
runtime,
|
|
85
|
-
setDefaultModel:
|
|
81
|
+
setDefaultModel: false,
|
|
82
|
+
agentDir
|
|
86
83
|
});
|
|
87
84
|
next = applied.config;
|
|
88
85
|
}
|
|
89
|
-
const anthropicOAuth = authChoice === "anthropic-oauth" || authChoice === "setup-token" || authChoice === "token" || authChoice === "oauth";
|
|
90
86
|
const preferredProvider = authChoice !== "custom-api-key" ? resolvePreferredProviderForAuthChoice(authChoice, { config: next }) : undefined;
|
|
91
87
|
if (authChoice !== "custom-api-key" && authChoice !== "skip") {
|
|
92
88
|
const allowlistSelection = await promptModelAllowlist({
|
|
93
89
|
config: next,
|
|
94
90
|
prompter,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
message: anthropicOAuth ? "Anthropic OAuth models" : undefined,
|
|
98
|
-
preferredProvider
|
|
91
|
+
preferredProvider,
|
|
92
|
+
agentDir
|
|
99
93
|
});
|
|
100
94
|
if (allowlistSelection.models) {
|
|
101
|
-
|
|
102
|
-
|
|
95
|
+
const selectedModels = allowlistSelection.models;
|
|
96
|
+
if (selectedModels[0]) {
|
|
97
|
+
next = applyPrimaryModel(next, selectedModels[0]);
|
|
98
|
+
}
|
|
99
|
+
next = applyModelAllowlist(next, selectedModels);
|
|
100
|
+
next = applyModelFallbacksFromSelection(next, selectedModels);
|
|
103
101
|
}
|
|
104
102
|
}
|
|
105
103
|
return next;
|
|
@@ -4,7 +4,7 @@ import { parseDurationMs } from "../cli/parse-duration.js";
|
|
|
4
4
|
import { readConfigFileSnapshot } from "../config/io.js";
|
|
5
5
|
import "../config/config.js";
|
|
6
6
|
import { CONTROL_UI_LOGIN_DEFAULT_GRANT_TTL_MS, createLoginGrant, normalizePublicHost } from "../gateway/control-ui-login.js";
|
|
7
|
-
import
|
|
7
|
+
import syncFs from "node:fs";
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
|
|
10
10
|
//#region src/commands/dashboard-link.ts
|
|
@@ -12,10 +12,10 @@ const AGENT_DOMAIN_SUFFIX = ".agents.fased.app";
|
|
|
12
12
|
function readStateGatewayToken(env = process.env) {
|
|
13
13
|
try {
|
|
14
14
|
const filePath = path.join(resolveStateDir(env), "gateway-secret");
|
|
15
|
-
if (!
|
|
15
|
+
if (!syncFs.existsSync(filePath)) {
|
|
16
16
|
return "";
|
|
17
17
|
}
|
|
18
|
-
return
|
|
18
|
+
return syncFs.readFileSync(filePath, "utf8").trim();
|
|
19
19
|
} catch {
|
|
20
20
|
return "";
|
|
21
21
|
}
|
|
@@ -14,8 +14,8 @@ import "../config/config.js";
|
|
|
14
14
|
import { listTelegramAccountIds, resolveTelegramAccount } from "../telegram/accounts.js";
|
|
15
15
|
import "../channels/registry.js";
|
|
16
16
|
import { readChannelAllowFromStore } from "../pairing/pairing-store.js";
|
|
17
|
-
import { listInterpreterLikeSafeBins, resolveMergedSafeBinProfileFixtures } from "../infra/exec-safe-bin-runtime-policy.js";
|
|
18
17
|
import { readWalletApprovalAuthSnapshot } from "../wallet/wallet-approval-auth.js";
|
|
18
|
+
import { listInterpreterLikeSafeBins, resolveMergedSafeBinProfileFixtures } from "../infra/exec-safe-bin-runtime-policy.js";
|
|
19
19
|
import { applyPluginAutoEnable } from "../config/plugin-auto-enable.js";
|
|
20
20
|
import { isNumericTelegramUserId, normalizeTelegramAllowFromEntry } from "../channels/telegram/allow-from.js";
|
|
21
21
|
import { collectProviderDangerousNameMatchingScopes } from "../config/dangerous-name-matching.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { note } from "../terminal/note.js";
|
|
2
|
-
import
|
|
2
|
+
import syncFs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
|
|
5
5
|
//#region src/commands/doctor-install.ts
|
|
@@ -8,7 +8,7 @@ function noteSourceInstallIssues(root) {
|
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
const workspaceMarker = path.join(root, "pnpm-workspace.yaml");
|
|
11
|
-
if (!
|
|
11
|
+
if (!syncFs.existsSync(workspaceMarker)) {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
const warnings = [];
|
|
@@ -16,13 +16,13 @@ function noteSourceInstallIssues(root) {
|
|
|
16
16
|
const pnpmStore = path.join(nodeModules, ".pnpm");
|
|
17
17
|
const tsxBin = path.join(nodeModules, ".bin", "tsx");
|
|
18
18
|
const srcEntry = path.join(root, "src", "entry.ts");
|
|
19
|
-
if (
|
|
19
|
+
if (syncFs.existsSync(nodeModules) && !syncFs.existsSync(pnpmStore)) {
|
|
20
20
|
warnings.push("- node_modules was not installed by pnpm (missing node_modules/.pnpm). Run: pnpm install");
|
|
21
21
|
}
|
|
22
|
-
if (
|
|
22
|
+
if (syncFs.existsSync(path.join(root, "package-lock.json"))) {
|
|
23
23
|
warnings.push("- package-lock.json present in a pnpm workspace. If you ran npm install, remove it and reinstall with pnpm.");
|
|
24
24
|
}
|
|
25
|
-
if (
|
|
25
|
+
if (syncFs.existsSync(srcEntry) && !syncFs.existsSync(tsxBin)) {
|
|
26
26
|
warnings.push("- tsx binary is missing for source runs. Run: pnpm install");
|
|
27
27
|
}
|
|
28
28
|
if (warnings.length > 0) {
|
|
@@ -5,7 +5,7 @@ import { resolveApiKeyForProvider } from "../agents/model-auth.js";
|
|
|
5
5
|
import { resolveMemoryBackendConfig } from "../memory/backend-config.js";
|
|
6
6
|
import { resolveMemorySearchConfig } from "../agents/memory-search.js";
|
|
7
7
|
import { note } from "../terminal/note.js";
|
|
8
|
-
import
|
|
8
|
+
import syncFs from "node:fs";
|
|
9
9
|
|
|
10
10
|
//#region src/commands/doctor-memory-search.ts
|
|
11
11
|
/**
|
|
@@ -126,7 +126,7 @@ function hasLocalEmbeddings(local) {
|
|
|
126
126
|
}
|
|
127
127
|
const resolved = resolveUserPath(modelPath);
|
|
128
128
|
try {
|
|
129
|
-
return
|
|
129
|
+
return syncFs.statSync(resolved).isFile();
|
|
130
130
|
} catch {
|
|
131
131
|
return false;
|
|
132
132
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { shortenHomePath } from "../utils.js";
|
|
2
2
|
import { note } from "../terminal/note.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import os from "node:os";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { promisify } from "node:util";
|
|
@@ -17,7 +17,7 @@ async function noteMacLaunchAgentOverrides() {
|
|
|
17
17
|
}
|
|
18
18
|
const home = resolveHomeDir();
|
|
19
19
|
const markerCandidates = [path.join(home, ".fased", "disable-launchagent")];
|
|
20
|
-
const markerPath = markerCandidates.find((candidate) =>
|
|
20
|
+
const markerPath = markerCandidates.find((candidate) => syncFs.existsSync(candidate));
|
|
21
21
|
if (!markerPath) {
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
@@ -3,7 +3,7 @@ import { DEFAULT_SANDBOX_BROWSER_IMAGE, DEFAULT_SANDBOX_COMMON_IMAGE, DEFAULT_SA
|
|
|
3
3
|
import { resolveSandboxScope } from "../agents/sandbox/config.js";
|
|
4
4
|
import "../agents/sandbox.js";
|
|
5
5
|
import { note } from "../terminal/note.js";
|
|
6
|
-
import
|
|
6
|
+
import syncFs from "node:fs";
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
|
|
9
9
|
//#region src/commands/doctor-sandbox.ts
|
|
@@ -18,7 +18,7 @@ function resolveSandboxScript(scriptRel) {
|
|
|
18
18
|
}
|
|
19
19
|
for (const root of candidates) {
|
|
20
20
|
const scriptPath = path.join(root, scriptRel);
|
|
21
|
-
if (
|
|
21
|
+
if (syncFs.existsSync(scriptPath)) {
|
|
22
22
|
return {
|
|
23
23
|
scriptPath,
|
|
24
24
|
cwd: root
|
|
@@ -11,28 +11,28 @@ import { loadSessionStore } from "../config/sessions/store.js";
|
|
|
11
11
|
import { ensureSessionTranscriptHeader } from "../config/sessions/transcript.js";
|
|
12
12
|
import "../config/sessions.js";
|
|
13
13
|
import { note } from "../terminal/note.js";
|
|
14
|
-
import
|
|
14
|
+
import syncFs from "node:fs";
|
|
15
15
|
import os from "node:os";
|
|
16
16
|
import path from "node:path";
|
|
17
17
|
|
|
18
18
|
//#region src/commands/doctor-state-integrity.ts
|
|
19
19
|
function existsDir(dir) {
|
|
20
20
|
try {
|
|
21
|
-
return
|
|
21
|
+
return syncFs.existsSync(dir) && syncFs.statSync(dir).isDirectory();
|
|
22
22
|
} catch {
|
|
23
23
|
return false;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
function existsFile(filePath) {
|
|
27
27
|
try {
|
|
28
|
-
return
|
|
28
|
+
return syncFs.existsSync(filePath) && syncFs.statSync(filePath).isFile();
|
|
29
29
|
} catch {
|
|
30
30
|
return false;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
function canWriteDir(dir) {
|
|
34
34
|
try {
|
|
35
|
-
|
|
35
|
+
syncFs.accessSync(dir, syncFs.constants.W_OK);
|
|
36
36
|
return true;
|
|
37
37
|
} catch {
|
|
38
38
|
return false;
|
|
@@ -40,7 +40,7 @@ function canWriteDir(dir) {
|
|
|
40
40
|
}
|
|
41
41
|
function ensureDir(dir) {
|
|
42
42
|
try {
|
|
43
|
-
|
|
43
|
+
syncFs.mkdirSync(dir, { recursive: true });
|
|
44
44
|
return { ok: true };
|
|
45
45
|
} catch (err) {
|
|
46
46
|
return {
|
|
@@ -53,7 +53,7 @@ function dirPermissionHint(dir) {
|
|
|
53
53
|
const uid = typeof process.getuid === "function" ? process.getuid() : null;
|
|
54
54
|
const gid = typeof process.getgid === "function" ? process.getgid() : null;
|
|
55
55
|
try {
|
|
56
|
-
const stat =
|
|
56
|
+
const stat = syncFs.statSync(dir);
|
|
57
57
|
if (uid !== null && stat.uid !== uid) {
|
|
58
58
|
return `Owner mismatch (uid ${stat.uid}). Run: sudo chown -R $USER "${dir}"`;
|
|
59
59
|
}
|
|
@@ -71,7 +71,7 @@ function addUserRwx(mode) {
|
|
|
71
71
|
}
|
|
72
72
|
function countJsonlLines(filePath) {
|
|
73
73
|
try {
|
|
74
|
-
const raw =
|
|
74
|
+
const raw = syncFs.readFileSync(filePath, "utf-8");
|
|
75
75
|
if (!raw) {
|
|
76
76
|
return 0;
|
|
77
77
|
}
|
|
@@ -96,7 +96,7 @@ function findOtherStateDirs(stateDir) {
|
|
|
96
96
|
for (const root of roots) {
|
|
97
97
|
let entries = [];
|
|
98
98
|
try {
|
|
99
|
-
entries =
|
|
99
|
+
entries = syncFs.readdirSync(root, { withFileTypes: true });
|
|
100
100
|
} catch {
|
|
101
101
|
continue;
|
|
102
102
|
}
|
|
@@ -226,9 +226,9 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
226
226
|
});
|
|
227
227
|
if (repair) {
|
|
228
228
|
try {
|
|
229
|
-
const stat =
|
|
229
|
+
const stat = syncFs.statSync(stateDir);
|
|
230
230
|
const target = addUserRwx(stat.mode);
|
|
231
|
-
|
|
231
|
+
syncFs.chmodSync(stateDir, target);
|
|
232
232
|
changes.push(`- Repaired permissions on ${displayStateDir}`);
|
|
233
233
|
} catch (err) {
|
|
234
234
|
warnings.push(`- Failed to repair ${displayStateDir}: ${String(err)}`);
|
|
@@ -237,10 +237,10 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
237
237
|
}
|
|
238
238
|
if (stateDirExists && process.platform !== "win32") {
|
|
239
239
|
try {
|
|
240
|
-
const dirLstat =
|
|
240
|
+
const dirLstat = syncFs.lstatSync(stateDir);
|
|
241
241
|
const isDirSymlink = dirLstat.isSymbolicLink();
|
|
242
|
-
const stat = isDirSymlink ?
|
|
243
|
-
const resolvedDir = isDirSymlink ?
|
|
242
|
+
const stat = isDirSymlink ? syncFs.statSync(stateDir) : dirLstat;
|
|
243
|
+
const resolvedDir = isDirSymlink ? syncFs.realpathSync(stateDir) : stateDir;
|
|
244
244
|
const isImmutableStore = resolvedDir.startsWith("/nix/store/");
|
|
245
245
|
if (!isImmutableStore && (stat.mode & 63) !== 0) {
|
|
246
246
|
warnings.push(`- State directory permissions are too open (${displayStateDir}). Recommend chmod 700.`);
|
|
@@ -249,7 +249,7 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
249
249
|
initialValue: true
|
|
250
250
|
});
|
|
251
251
|
if (tighten) {
|
|
252
|
-
|
|
252
|
+
syncFs.chmodSync(stateDir, 448);
|
|
253
253
|
changes.push(`- Tightened permissions on ${displayStateDir} to 700`);
|
|
254
254
|
}
|
|
255
255
|
}
|
|
@@ -259,10 +259,10 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
259
259
|
}
|
|
260
260
|
if (configPath && existsFile(configPath) && process.platform !== "win32") {
|
|
261
261
|
try {
|
|
262
|
-
const configLstat =
|
|
262
|
+
const configLstat = syncFs.lstatSync(configPath);
|
|
263
263
|
const isSymlink = configLstat.isSymbolicLink();
|
|
264
|
-
const stat = isSymlink ?
|
|
265
|
-
const resolvedConfig = isSymlink ?
|
|
264
|
+
const stat = isSymlink ? syncFs.statSync(configPath) : configLstat;
|
|
265
|
+
const resolvedConfig = isSymlink ? syncFs.realpathSync(configPath) : configPath;
|
|
266
266
|
const isImmutableConfig = resolvedConfig.startsWith("/nix/store/");
|
|
267
267
|
if (!isImmutableConfig && (stat.mode & 63) !== 0) {
|
|
268
268
|
warnings.push(`- Config file is group/world readable (${displayConfigPath ?? configPath}). Recommend chmod 600.`);
|
|
@@ -271,7 +271,7 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
271
271
|
initialValue: true
|
|
272
272
|
});
|
|
273
273
|
if (tighten) {
|
|
274
|
-
|
|
274
|
+
syncFs.chmodSync(configPath, 384);
|
|
275
275
|
changes.push(`- Tightened permissions on ${displayConfigPath ?? configPath} to 600`);
|
|
276
276
|
}
|
|
277
277
|
}
|
|
@@ -330,9 +330,9 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
330
330
|
});
|
|
331
331
|
if (repair) {
|
|
332
332
|
try {
|
|
333
|
-
const stat =
|
|
333
|
+
const stat = syncFs.statSync(dir);
|
|
334
334
|
const target = addUserRwx(stat.mode);
|
|
335
|
-
|
|
335
|
+
syncFs.chmodSync(dir, target);
|
|
336
336
|
changes.push(`- Repaired permissions on ${label}: ${displayDir}`);
|
|
337
337
|
} catch (err) {
|
|
338
338
|
warnings.push(`- Failed to repair ${displayDir}: ${String(err)}`);
|
|
@@ -432,7 +432,7 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
432
432
|
referencedTranscriptPaths.add(path.resolve(resolveSessionFilePath(entry.sessionId, entry, sessionPathOpts)));
|
|
433
433
|
} catch {}
|
|
434
434
|
}
|
|
435
|
-
const sessionDirEntries =
|
|
435
|
+
const sessionDirEntries = syncFs.readdirSync(sessionsDir, { withFileTypes: true });
|
|
436
436
|
const orphanTranscriptPaths = sessionDirEntries.filter((entry) => entry.isFile() && isPrimarySessionTranscriptFileName(entry.name)).map((entry) => path.resolve(path.join(sessionsDir, entry.name))).filter((filePath) => !referencedTranscriptPaths.has(filePath));
|
|
437
437
|
if (orphanTranscriptPaths.length > 0) {
|
|
438
438
|
warnings.push(`- Found ${orphanTranscriptPaths.length} orphan transcript file(s) in ${displaySessionsDir}. They are not referenced by sessions.json and can consume disk over time.`);
|
|
@@ -446,7 +446,7 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
446
446
|
for (const orphanPath of orphanTranscriptPaths) {
|
|
447
447
|
const archivedPath = `${orphanPath}.deleted.${archivedAt}`;
|
|
448
448
|
try {
|
|
449
|
-
|
|
449
|
+
syncFs.renameSync(orphanPath, archivedPath);
|
|
450
450
|
archived += 1;
|
|
451
451
|
} catch (err) {
|
|
452
452
|
warnings.push(`- Failed to archive orphan transcript ${shortenHomePath(orphanPath)}: ${String(err)}`);
|
|
@@ -470,7 +470,7 @@ function noteWorkspaceBackupTip(workspaceDir) {
|
|
|
470
470
|
return;
|
|
471
471
|
}
|
|
472
472
|
const gitMarker = path.join(workspaceDir, ".git");
|
|
473
|
-
if (
|
|
473
|
+
if (syncFs.existsSync(gitMarker)) {
|
|
474
474
|
return;
|
|
475
475
|
}
|
|
476
476
|
note([
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { shortenHomePath } from "../utils.js";
|
|
2
2
|
import { DEFAULT_AGENTS_FILENAME } from "../agents/workspace.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
|
|
6
6
|
//#region src/commands/doctor-workspace.ts
|
|
@@ -16,13 +16,13 @@ async function shouldSuggestMemorySystem(workspaceDir) {
|
|
|
16
16
|
const memoryPaths = [path.join(workspaceDir, "MEMORY.md"), path.join(workspaceDir, "memory.md")];
|
|
17
17
|
for (const memoryPath of memoryPaths) {
|
|
18
18
|
try {
|
|
19
|
-
await
|
|
19
|
+
await syncFs.promises.access(memoryPath);
|
|
20
20
|
return false;
|
|
21
21
|
} catch {}
|
|
22
22
|
}
|
|
23
23
|
const agentsPath = path.join(workspaceDir, DEFAULT_AGENTS_FILENAME);
|
|
24
24
|
try {
|
|
25
|
-
const content = await
|
|
25
|
+
const content = await syncFs.promises.readFile(agentsPath, "utf-8");
|
|
26
26
|
if (/memory\.md/i.test(content)) {
|
|
27
27
|
return false;
|
|
28
28
|
}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -37,7 +37,7 @@ import { maybeRepairUiProtocolFreshness } from "./doctor-ui.js";
|
|
|
37
37
|
import { maybeOfferUpdateBeforeDoctor } from "./doctor-update.js";
|
|
38
38
|
import { MEMORY_SYSTEM_PROMPT, shouldSuggestMemorySystem } from "./doctor-workspace.js";
|
|
39
39
|
import { noteWorkspaceStatus } from "./doctor-workspace-status.js";
|
|
40
|
-
import
|
|
40
|
+
import syncFs from "node:fs";
|
|
41
41
|
import { intro, outro } from "@clack/prompts";
|
|
42
42
|
|
|
43
43
|
//#region src/commands/doctor.ts
|
|
@@ -83,7 +83,7 @@ async function doctorCommand(runtime = defaultRuntime, options = {}) {
|
|
|
83
83
|
`Fix: run ${formatCliCommand("fased configure")} and set Gateway mode (local/remote).`,
|
|
84
84
|
`Or set directly: ${formatCliCommand("fased config set gateway.mode local")}`
|
|
85
85
|
];
|
|
86
|
-
if (!
|
|
86
|
+
if (!syncFs.existsSync(configPath)) {
|
|
87
87
|
lines.push(`Missing config: run ${formatCliCommand("fased setup")} first.`);
|
|
88
88
|
}
|
|
89
89
|
note$1(lines.join("\n"), "Gateway");
|
|
@@ -233,7 +233,7 @@ async function doctorCommand(runtime = defaultRuntime, options = {}) {
|
|
|
233
233
|
await writeConfigFile(cfg);
|
|
234
234
|
logConfigUpdated(runtime);
|
|
235
235
|
const backupPath = `${CONFIG_PATH}.bak`;
|
|
236
|
-
if (
|
|
236
|
+
if (syncFs.existsSync(backupPath)) {
|
|
237
237
|
runtime.log(`Backup: ${shortenHomePath(backupPath)}`);
|
|
238
238
|
}
|
|
239
239
|
} else if (configResult.hasPendingChanges) {
|
|
@@ -6,7 +6,7 @@ import { rawDataToString } from "../infra/ws.js";
|
|
|
6
6
|
import { buildDeviceAuthPayload } from "../gateway/device-auth.js";
|
|
7
7
|
import { PROTOCOL_VERSION } from "../gateway/protocol/schema/protocol-schemas.js";
|
|
8
8
|
import "../gateway/protocol/index.js";
|
|
9
|
-
import { WebSocket
|
|
9
|
+
import { WebSocket } from "ws";
|
|
10
10
|
|
|
11
11
|
//#region src/commands/hosted-dashboard-probe.ts
|
|
12
12
|
function sanitizeErrorMessage(value) {
|
|
@@ -392,7 +392,7 @@ function probeHostedWs(params) {
|
|
|
392
392
|
resolve(result);
|
|
393
393
|
};
|
|
394
394
|
const sendConnect = () => {
|
|
395
|
-
if (!ws || ws.readyState !== WebSocket
|
|
395
|
+
if (!ws || ws.readyState !== WebSocket.OPEN || connectSent) {
|
|
396
396
|
return;
|
|
397
397
|
}
|
|
398
398
|
connectSent = true;
|
|
@@ -438,7 +438,7 @@ function probeHostedWs(params) {
|
|
|
438
438
|
});
|
|
439
439
|
}, params.timeoutMs);
|
|
440
440
|
try {
|
|
441
|
-
ws = new WebSocket
|
|
441
|
+
ws = new WebSocket(params.wsUrl, {
|
|
442
442
|
headers: { Origin: params.origin },
|
|
443
443
|
handshakeTimeout: Math.max(1e3, Math.floor(params.timeoutMs)),
|
|
444
444
|
maxPayload: 1024 * 1024
|
|
@@ -2,7 +2,7 @@ import { defaultRuntime } from "../runtime.js";
|
|
|
2
2
|
import { readManagedFederationTokenSummary } from "../managed/federation.js";
|
|
3
3
|
import { readManagedReservationSummaries } from "../managed/tunnel.js";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import
|
|
5
|
+
import syncFs from "node:fs";
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
import { spawn } from "node:child_process";
|
|
8
8
|
|
|
@@ -44,7 +44,7 @@ function resolveManagedScriptPath() {
|
|
|
44
44
|
candidates.push(cwdCandidate);
|
|
45
45
|
}
|
|
46
46
|
for (const candidate of candidates) {
|
|
47
|
-
if (
|
|
47
|
+
if (syncFs.existsSync(candidate)) {
|
|
48
48
|
return candidate;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { resolveAgentModelPrimaryValue } from "../config/model-input.js";
|
|
2
2
|
import { CLOUDFLARE_AI_GATEWAY_MODEL_REFS } from "../providers/cloudflare-ai-gateway-shared.js";
|
|
3
3
|
import { HUGGINGFACE_MODEL_REFS } from "../providers/huggingface-models.js";
|
|
4
|
-
import { LITELLM_MODEL_REFS } from "../providers/litellm-models.js";
|
|
5
4
|
import { OPENCODE_ZEN_MODEL_REFS } from "../providers/opencode-zen-shared.js";
|
|
6
5
|
import { TOGETHER_MODEL_REFS } from "../providers/together-models.js";
|
|
7
6
|
import { VENICE_MODEL_REFS } from "../providers/venice-models.js";
|
|
8
7
|
import { VERCEL_AI_GATEWAY_MODEL_REFS } from "../providers/vercel-ai-gateway-models.js";
|
|
8
|
+
import { LITELLM_MODEL_REFS } from "../providers/litellm-models.js";
|
|
9
9
|
import { BYTEPLUS_CODING_MODEL_REFS, BYTEPLUS_MODEL_REFS, COPILOT_PROXY_MODEL_REFS, GITHUB_COPILOT_MODEL_REFS, GOOGLE_API_MODEL_REFS, GOOGLE_GEMINI_CLI_MODEL_REFS, MISTRAL_MODEL_REFS, OPENAI_API_MODEL_REFS, OPENAI_SIGN_IN_MODEL_REFS, OPENROUTER_MODEL_REFS, QIANFAN_MODEL_REFS, SYNTHETIC_MODEL_REFS, VOLCENGINE_CODING_MODEL_REFS, VOLCENGINE_MODEL_REFS, XAI_MODEL_REFS, XIAOMI_MODEL_REFS, ZAI_MODEL_REFS, isStandardProviderCatalogEntry, isStandardProviderModelRef } from "../providers/registry.js";
|
|
10
10
|
import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js";
|
|
11
11
|
import { ensureAuthProfileStore } from "../agents/auth-profiles/store.js";
|
|
@@ -13,8 +13,9 @@ import { listProfilesForProvider } from "../agents/auth-profiles/profiles.js";
|
|
|
13
13
|
import "../agents/auth-profiles.js";
|
|
14
14
|
import { getCustomProviderApiKey, resolveEnvApiKey } from "../agents/model-auth.js";
|
|
15
15
|
import { buildAllowedModelSet, buildModelAliasIndex, modelKey, normalizeProviderId, resolveConfiguredModelRef } from "../agents/model-selection.js";
|
|
16
|
-
import { buildCredentialScopedAllowedModelSet } from "../agents/model-catalog-access.js";
|
|
17
16
|
import { formatModelFeatureList } from "../agents/model-metadata.js";
|
|
17
|
+
import { buildCredentialScopedAllowedModelSet } from "../agents/model-catalog-access.js";
|
|
18
|
+
import { resolveAuthenticatedModelCatalog } from "../agents/authenticated-model-catalog.js";
|
|
18
19
|
import { loadModelCatalog } from "../agents/model-catalog.js";
|
|
19
20
|
import { loadPreviewModelListSources } from "./models/list.preview-catalog.js";
|
|
20
21
|
import { formatTokenK } from "./models/shared.js";
|
|
@@ -205,14 +206,32 @@ function loadModelPickerPreviewCatalog(cfg) {
|
|
|
205
206
|
catalogSource: "current-preview"
|
|
206
207
|
}));
|
|
207
208
|
}
|
|
208
|
-
async function loadModelPickerCatalog(cfg) {
|
|
209
|
+
async function loadModelPickerCatalog(cfg, agentDir) {
|
|
209
210
|
const catalog = await loadModelCatalog({
|
|
210
211
|
config: cfg,
|
|
211
212
|
useCache: false,
|
|
212
213
|
includeMetadata: true
|
|
213
214
|
});
|
|
214
215
|
const models = catalog.length > 0 ? catalog : loadModelPickerPreviewCatalog(cfg);
|
|
215
|
-
|
|
216
|
+
const standardModels = models.filter(isStandardProviderCatalogEntry);
|
|
217
|
+
if (!agentDir) {
|
|
218
|
+
return standardModels;
|
|
219
|
+
}
|
|
220
|
+
const store = ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false });
|
|
221
|
+
const authenticated = await resolveAuthenticatedModelCatalog({
|
|
222
|
+
cfg,
|
|
223
|
+
store,
|
|
224
|
+
catalog: standardModels,
|
|
225
|
+
defaultProvider: DEFAULT_PROVIDER,
|
|
226
|
+
agentDir
|
|
227
|
+
});
|
|
228
|
+
return authenticated.allowedCatalog.length > 0 ? authenticated.allowedCatalog : authenticated.usableCatalog;
|
|
229
|
+
}
|
|
230
|
+
async function resolveAuthenticatedDefaultModel(params) {
|
|
231
|
+
const catalog = await loadModelPickerCatalog(params.config, params.agentDir);
|
|
232
|
+
const preferredProvider = normalizeProviderId(params.preferredProvider ?? "");
|
|
233
|
+
const candidate = (preferredProvider ? catalog.find((entry) => normalizeProviderId(entry.provider) === preferredProvider) : undefined) ?? catalog[0];
|
|
234
|
+
return candidate ? modelKey(candidate.provider, candidate.id) : undefined;
|
|
216
235
|
}
|
|
217
236
|
async function promptManualModel(params) {
|
|
218
237
|
const modelInput = await params.prompter.text({
|
|
@@ -244,7 +263,7 @@ async function promptDefaultModel(params) {
|
|
|
244
263
|
const resolvedKey = modelKey(resolved.provider, resolved.model);
|
|
245
264
|
const configuredKey = configuredRaw ? resolvedKey : "";
|
|
246
265
|
const allowKeep = allowKeepRequested && !isHiddenRouterModelRef(configuredRaw);
|
|
247
|
-
const catalog = await loadModelPickerCatalog(cfg);
|
|
266
|
+
const catalog = await loadModelPickerCatalog(cfg, params.ignoreAllowlist ? undefined : params.agentDir);
|
|
248
267
|
if (catalog.length === 0) {
|
|
249
268
|
return promptManualModel({
|
|
250
269
|
prompter: params.prompter,
|
|
@@ -464,7 +483,7 @@ async function promptModelAllowlist(params) {
|
|
|
464
483
|
...params.initialSelections ?? []
|
|
465
484
|
]);
|
|
466
485
|
const initialKeys = allowedKeySet ? initialSeeds.filter((key) => allowedKeySet.has(key)) : initialSeeds;
|
|
467
|
-
const catalog = await loadModelPickerCatalog(cfg);
|
|
486
|
+
const catalog = await loadModelPickerCatalog(cfg, params.agentDir);
|
|
468
487
|
if (catalog.length === 0 && allowedKeys.length === 0) {
|
|
469
488
|
const raw = await params.prompter.text({
|
|
470
489
|
message: params.message ?? "Allowlist models (comma-separated provider/model; blank to keep current)",
|
|
@@ -503,7 +522,7 @@ async function promptModelAllowlist(params) {
|
|
|
503
522
|
hasAuth
|
|
504
523
|
});
|
|
505
524
|
}
|
|
506
|
-
const supplementalKeys = allowedKeySet ? allowedKeys : existingKeys;
|
|
525
|
+
const supplementalKeys = allowedKeySet ? allowedKeys : params.agentDir ? [] : existingKeys;
|
|
507
526
|
for (const key of supplementalKeys) {
|
|
508
527
|
if (seen.has(key)) {
|
|
509
528
|
continue;
|
|
@@ -630,4 +649,4 @@ function applyModelFallbacksFromSelection(cfg, selection) {
|
|
|
630
649
|
}
|
|
631
650
|
|
|
632
651
|
//#endregion
|
|
633
|
-
export { applyModelAllowlist, applyModelFallbacksFromSelection, applyPrimaryModel, promptModelAllowlist };
|
|
652
|
+
export { applyModelAllowlist, applyModelFallbacksFromSelection, applyPrimaryModel, promptModelAllowlist, resolveAuthenticatedDefaultModel };
|
|
@@ -11,8 +11,8 @@ import { getCustomProviderApiKey, resolveEnvApiKey } from "../../agents/model-au
|
|
|
11
11
|
import { findNormalizedProviderValue, normalizeProviderId, parseModelRef } from "../../agents/model-selection.js";
|
|
12
12
|
import { resolveSessionTranscriptPath, resolveSessionTranscriptsDirForAgent } from "../../config/sessions/paths.js";
|
|
13
13
|
import "../../agents/pi-embedded.js";
|
|
14
|
-
import { describeFailoverError } from "../../agents/failover-error.js";
|
|
15
14
|
import { loadModelCatalog } from "../../agents/model-catalog.js";
|
|
15
|
+
import { describeFailoverError } from "../../agents/failover-error.js";
|
|
16
16
|
import { runEmbeddedPiAgent } from "../../agents/pi-embedded-runner/run.js";
|
|
17
17
|
import { redactSecrets } from "../status-all/format.js";
|
|
18
18
|
import { formatMs } from "./shared.js";
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { DEFAULT_PROVIDER } from "../../agents/defaults.js";
|
|
1
2
|
import { resolveFasedAgentAgentDir } from "../../agents/agent-paths.js";
|
|
3
|
+
import { ensureAuthProfileStore } from "../../agents/auth-profiles/store.js";
|
|
4
|
+
import "../../agents/auth-profiles.js";
|
|
2
5
|
import { modelKey } from "../../agents/model-selection.js";
|
|
3
6
|
import { ensureFasedAgentModelsJson } from "../../agents/models-config.js";
|
|
4
7
|
import { discoverAuthStorage, discoverModels } from "../../agents/pi-model-discovery.js";
|
|
5
8
|
import { deriveModelMetadata, formatModelFeatureList } from "../../agents/model-metadata.js";
|
|
9
|
+
import { resolveAuthenticatedModelCatalog } from "../../agents/authenticated-model-catalog.js";
|
|
6
10
|
import { loadModelCatalog } from "../../agents/model-catalog.js";
|
|
7
11
|
import { isLocalBaseUrl } from "./shared.js";
|
|
8
12
|
import { createModelListAuthIndex } from "./list.auth-index.js";
|
|
@@ -58,34 +62,26 @@ function normalizeModelListSource(model) {
|
|
|
58
62
|
metadata: "metadata" in model ? model.metadata : undefined
|
|
59
63
|
};
|
|
60
64
|
}
|
|
61
|
-
function mergeModelCatalogEntries(params) {
|
|
62
|
-
const models = params.registryModels.map((model) => normalizeModelListSource(model));
|
|
63
|
-
const seen = new Set(models.map((model) => modelKey(model.provider, model.id)));
|
|
64
|
-
for (const entry of params.catalog) {
|
|
65
|
-
const key = modelKey(entry.provider, entry.id);
|
|
66
|
-
if (seen.has(key)) {
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
models.push(normalizeModelListSource(entry));
|
|
70
|
-
seen.add(key);
|
|
71
|
-
}
|
|
72
|
-
return models;
|
|
73
|
-
}
|
|
74
65
|
async function loadModelRegistry(cfg) {
|
|
75
66
|
await ensureFasedAgentModelsJson(cfg);
|
|
76
67
|
const agentDir = resolveFasedAgentAgentDir();
|
|
77
68
|
const authStorage = discoverAuthStorage(agentDir);
|
|
78
69
|
const registry = discoverModels(authStorage, agentDir);
|
|
79
|
-
|
|
70
|
+
registry.getAll();
|
|
80
71
|
const catalog = await loadModelCatalog({
|
|
81
72
|
config: cfg,
|
|
82
73
|
useCache: false,
|
|
83
74
|
includeMetadata: true
|
|
84
75
|
});
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
76
|
+
const store = ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false });
|
|
77
|
+
const authenticated = await resolveAuthenticatedModelCatalog({
|
|
78
|
+
cfg,
|
|
79
|
+
store,
|
|
80
|
+
catalog,
|
|
81
|
+
defaultProvider: DEFAULT_PROVIDER,
|
|
82
|
+
agentDir
|
|
88
83
|
});
|
|
84
|
+
const models = authenticated.usableCatalog.map((model) => normalizeModelListSource(model));
|
|
89
85
|
let availableKeys;
|
|
90
86
|
let availabilityErrorMessage;
|
|
91
87
|
try {
|
|
@@ -16,12 +16,12 @@ import "../../agents/auth-profiles.js";
|
|
|
16
16
|
import { resolveEnvApiKey } from "../../agents/model-auth.js";
|
|
17
17
|
import { buildModelAliasIndex, parseModelRef, resolveConfiguredModelRef, resolveDefaultModelForAgent, resolveModelRefFromString } from "../../agents/model-selection.js";
|
|
18
18
|
import { withProgressTotals } from "../../cli/progress.js";
|
|
19
|
+
import { loadProviderExtensionCatalogIndex } from "../../agents/provider-extension-catalog-index.js";
|
|
20
|
+
import { loadModelCatalog } from "../../agents/model-catalog.js";
|
|
19
21
|
import { resolveUsageProviderId } from "../../infra/provider-usage.shared.js";
|
|
20
22
|
import { formatUsageWindowSummary } from "../../infra/provider-usage.format.js";
|
|
21
23
|
import { loadProviderUsageSummary } from "../../infra/provider-usage.load.js";
|
|
22
24
|
import "../../infra/provider-usage.js";
|
|
23
|
-
import { loadProviderExtensionCatalogIndex } from "../../agents/provider-extension-catalog-index.js";
|
|
24
|
-
import { loadModelCatalog } from "../../agents/model-catalog.js";
|
|
25
25
|
import { renderTable } from "../../terminal/table.js";
|
|
26
26
|
import { buildModelCatalogStatus } from "../../agents/model-catalog-status.js";
|
|
27
27
|
import { DEFAULT_OAUTH_WARN_MS, buildAuthHealthSummary, formatRemainingShort } from "../../agents/auth-health.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { HUGGINGFACE_BASE_URL, HUGGINGFACE_DEFAULT_MODEL_REF, HUGGINGFACE_MODEL_CATALOG, buildHuggingfaceModelDefinition } from "../providers/huggingface-models.js";
|
|
2
|
-
import { LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID } from "../providers/litellm-models.js";
|
|
3
2
|
import { SYNTHETIC_BASE_URL, SYNTHETIC_DEFAULT_MODEL_REF, SYNTHETIC_MODEL_CATALOG, buildSyntheticModelDefinition } from "../providers/synthetic-models.js";
|
|
4
3
|
import { TOGETHER_BASE_URL, TOGETHER_DEFAULT_MODEL_REF, TOGETHER_MODEL_CATALOG, buildTogetherModelDefinition } from "../providers/together-models.js";
|
|
5
4
|
import { VENICE_BASE_URL, VENICE_DEFAULT_MODEL_REF, VENICE_MODEL_CATALOG, buildVeniceModelDefinition } from "../providers/venice-models.js";
|
|
5
|
+
import { LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID } from "../providers/litellm-models.js";
|
|
6
6
|
import { CHUTES_BASE_URL, CHUTES_DEFAULT_MODEL_REF, CHUTES_MODEL_CATALOG, buildChutesModelDefinition } from "../agents/chutes-models.js";
|
|
7
7
|
import "../agents/huggingface-models.js";
|
|
8
8
|
import "../agents/synthetic-models.js";
|