@mycadet/assistant 0.12.7 → 0.12.8
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/README.md +1 -1
- package/docs/activation-funnel-telemetry.md +6 -6
- package/docs/cadet-doctor.md +7 -7
- package/docs/desktop-browser-cli.md +7 -7
- package/docs/skills.md +2 -2
- package/docs/voice-input-diagnostics.md +1 -1
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +2 -2
- package/node_modules/@mycadet/avatar-manifest/src/__tests__/notification-avatar.test.ts +1 -1
- package/node_modules/@mycadet/avatar-manifest/src/notification-avatar.ts +2 -2
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/package.json +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/node_modules/@mycadet/ces-client/src/rpc-client.ts +1 -1
- package/node_modules/@mycadet/credential-storage/src/oauth-runtime.ts +1 -1
- package/node_modules/@mycadet/credential-storage/src/static-credentials.ts +1 -1
- package/node_modules/@mycadet/environments/src/seeds.ts +6 -6
- package/node_modules/@mycadet/environments/src/shell.test.ts +1 -1
- package/node_modules/@mycadet/environments/src/types.ts +6 -6
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/package.json +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/node_modules/@mycadet/gateway-client/src/binding-strength-contract.ts +5 -5
- package/node_modules/@mycadet/gateway-client/src/gateway-ipc-contracts.ts +1 -1
- package/node_modules/@mycadet/gateway-client/src/inbound-contract.ts +2 -2
- package/node_modules/@mycadet/gateway-client/src/outbound-contract.ts +1 -1
- package/node_modules/@mycadet/service-contracts/package.json +1 -1
- package/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/openapi.yaml +6815 -794
- package/package.json +2 -2
- package/scripts/build-test-fixtures.ts +1 -1
- package/scripts/probe-skill-retrieval.ts +1 -1
- package/scripts/sync-llm-catalog.ts +2 -2
- package/scripts/voice-ttft-spike.ts +2 -2
- package/src/__tests__/adaptive-thinking-repair.test.ts +4 -4
- package/src/__tests__/agent-loop-override-profile.test.ts +4 -4
- package/src/__tests__/agent-loop-subagent-billing-headers.test.ts +1 -1
- package/src/__tests__/anthropic-provider.test.ts +2 -2
- package/src/__tests__/available-skills.test.ts +11 -12
- package/src/__tests__/avatar-identity-sync.test.ts +1 -1
- package/src/__tests__/byok-default-profile-ensure.test.ts +7 -7
- package/src/__tests__/call-domain.test.ts +1 -1
- package/src/__tests__/call-site-routing-connection-auto-resolve.test.ts +2 -2
- package/src/__tests__/catalog-files.test.ts +10 -10
- package/src/__tests__/catalog-install-normalize.test.ts +3 -3
- package/src/__tests__/channel-availability-routes.test.ts +8 -8
- package/src/__tests__/channel-readiness-routes.test.ts +4 -4
- package/src/__tests__/channel-readiness-service.test.ts +14 -14
- package/src/__tests__/channel-readiness-telegram-remote.test.ts +1 -1
- package/src/__tests__/chat-reveal-guard-priming.test.ts +5 -6
- package/src/__tests__/checker.test.ts +6 -6
- package/src/__tests__/clawhub.test.ts +1 -1
- package/src/__tests__/{platform-callback-registration.test.ts → cloud-callback-registration.test.ts} +66 -90
- package/src/__tests__/{platform-client-verify-credential.test.ts → cloud-client-verify-credential.test.ts} +14 -14
- package/src/__tests__/{managed-credential-catalog-cli.test.ts → cloud-credential-catalog-cli.test.ts} +41 -41
- package/src/__tests__/{managed-fallback-dispatch.test.ts → cloud-fallback-dispatch.test.ts} +21 -16
- package/src/__tests__/{managed-profile-guard.test.ts → cloud-profile-guard.test.ts} +60 -60
- package/src/__tests__/{platform-proxy-context.test.ts → cloud-proxy-context.test.ts} +44 -44
- package/src/__tests__/{managed-speech-defaults.test.ts → cloud-speech-defaults.test.ts} +41 -41
- package/src/__tests__/{managed-store.test.ts → cloud-store.test.ts} +99 -99
- package/src/__tests__/compaction-events.test.ts +7 -5
- package/src/__tests__/config-loader-backfill.test.ts +65 -65
- package/src/__tests__/config-loader-cloud-defaults.test.ts +373 -0
- package/src/__tests__/config-loader-corrupt.test.ts +1 -1
- package/src/__tests__/config-loader-validation-reset-notice.test.ts +1 -1
- package/src/__tests__/config-schema.test.ts +3 -3
- package/src/__tests__/{config-set-platform-guard.test.ts → config-set-cloud-guard.test.ts} +6 -6
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +0 -8
- package/src/__tests__/config-watcher.test.ts +1 -1
- package/src/__tests__/contacts-write.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop.test.ts +2 -2
- package/src/__tests__/conversation-app-control-instantiation.test.ts +18 -18
- package/src/__tests__/conversation-error.test.ts +45 -45
- package/src/__tests__/conversation-inference-profile-route.test.ts +4 -4
- package/src/__tests__/conversation-rendered-delegation-state.test.ts +4 -4
- package/src/__tests__/conversation-skill-tools.test.ts +7 -8
- package/src/__tests__/conversation-slash.test.ts +2 -2
- package/src/__tests__/conversation-speed-override.test.ts +8 -10
- package/src/__tests__/conversation-summarize-up-to.test.ts +4 -4
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +1 -1
- package/src/__tests__/conversation-wait-for-idle.test.ts +7 -5
- package/src/__tests__/credential-execution-api-key-propagation.test.ts +5 -5
- package/src/__tests__/{credential-execution-managed-contract.test.ts → credential-execution-cloud-contract.test.ts} +24 -24
- package/src/__tests__/credential-health-service.test.ts +27 -41
- package/src/__tests__/credential-routes.test.ts +85 -165
- package/src/__tests__/credential-security-invariants.test.ts +6 -7
- package/src/__tests__/custom-profile-ensure.test.ts +1 -1
- package/src/__tests__/date-context.test.ts +1 -1
- package/src/__tests__/default-profile-catalog-fallback.test.ts +15 -15
- package/src/__tests__/delete-managed-skill-tool.test.ts +8 -8
- package/src/__tests__/discord-callback-round-trip.test.ts +1 -1
- package/src/__tests__/disk-usage.test.ts +3 -3
- package/src/__tests__/email-invite-adapter.test.ts +5 -5
- package/src/__tests__/{embedding-managed-proxy-selection.test.ts → embedding-cloud-proxy-selection.test.ts} +44 -43
- package/src/__tests__/emit-signal-routing-intent.test.ts +13 -15
- package/src/__tests__/events-dev-bypass-actor.test.ts +2 -2
- package/src/__tests__/fallback-breaker.test.ts +7 -7
- package/src/__tests__/feature-flag-test-helpers.ts +106 -0
- package/src/__tests__/gateway-flag-listener.test.ts +1 -1
- package/src/__tests__/gemini-image-service.test.ts +2 -2
- package/src/__tests__/gemini-provider.test.ts +5 -5
- package/src/__tests__/get-skill-detail-audit.test.ts +9 -8
- package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -1
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +5 -5
- package/src/__tests__/host-cu-routes-targeted.test.ts +8 -8
- package/src/__tests__/image-credentials.test.ts +13 -13
- package/src/__tests__/inbound-admitted-introduction-nudge.test.ts +14 -6
- package/src/__tests__/inbound-trust-verdict.test.ts +14 -6
- package/src/__tests__/inference-no-mode-boot-e2e.test.ts +11 -11
- package/src/__tests__/inference-profile-session-handler.test.ts +7 -7
- package/src/__tests__/inference-profile-session-ipc.test.ts +5 -5
- package/src/__tests__/inference-profile-validation-jev.test.ts +1 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +40 -24
- package/src/__tests__/input-repairs.test.ts +1 -1
- package/src/__tests__/install-skill-routing.test.ts +10 -8
- package/src/__tests__/integration-status.test.ts +5 -5
- package/src/__tests__/internal-telemetry-routes.test.ts +3 -3
- package/src/__tests__/invite-routes-http.test.ts +1 -1
- package/src/__tests__/llm-catalog-parity.test.ts +5 -7
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +2 -2
- package/src/__tests__/llm-resolver-override-or-default.test.ts +3 -3
- package/src/__tests__/llm-resolver.test.ts +1 -1
- package/src/__tests__/llm-schema-fallback-profile.test.ts +25 -19
- package/src/__tests__/llm-usage-store.test.ts +1 -1
- package/src/__tests__/managed-skill-lifecycle.test.ts +12 -12
- package/src/__tests__/mcp-abort-signal.test.ts +2 -2
- package/src/__tests__/mcp-client-auth.test.ts +2 -2
- package/src/__tests__/mcp-tool-annotations-risk.test.ts +2 -2
- package/src/__tests__/media-generate-image.test.ts +30 -30
- package/src/__tests__/memory-config-file-parity.test.ts +6 -6
- package/src/__tests__/migration-export-to-gcs.test.ts +4 -4
- package/src/__tests__/migration-import-commit-http.test.ts +1 -1
- package/src/__tests__/mtime-cache.test.ts +2 -2
- package/src/__tests__/{notification-platform-adapter.test.ts → notification-cloud-adapter.test.ts} +39 -39
- package/src/__tests__/notification-deep-link.test.ts +40 -40
- package/src/__tests__/oauth-apps-routes.test.ts +3 -3
- package/src/__tests__/oauth-cli.test.ts +9 -9
- package/src/__tests__/oauth-commands-routes.test.ts +16 -16
- package/src/__tests__/oauth-connect-orchestrator.test.ts +2 -2
- package/src/__tests__/oauth-provider-serializer.test.ts +11 -11
- package/src/__tests__/oauth-providers-routes.test.ts +12 -12
- package/src/__tests__/oauth-store.test.ts +1 -1
- package/src/__tests__/oauth2-gateway-transport.test.ts +3 -3
- package/src/__tests__/onboarding-persona-write.test.ts +2 -2
- package/src/__tests__/openai-image-service.test.ts +2 -2
- package/src/__tests__/openai-responses-cutover-guard.test.ts +2 -2
- package/src/__tests__/openai-responses-provider.test.ts +1 -1
- package/src/__tests__/path-policy.test.ts +4 -4
- package/src/__tests__/personal-memory-auth-bypass.test.ts +1 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +18 -18
- package/src/__tests__/plugin-api-model-profiles.test.ts +1 -1
- package/src/__tests__/plugin-api-provider.test.ts +1 -1
- package/src/__tests__/plugin-api-webhook-url.test.ts +4 -5
- package/src/__tests__/plugin-import-boundary-guard.test.ts +8 -39
- package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +2 -2
- package/src/__tests__/{provider-platform-proxy-integration.test.ts → provider-cloud-proxy-integration.test.ts} +70 -72
- package/src/__tests__/provider-commit-message-generator.test.ts +1 -1
- package/src/__tests__/provider-connections-backfill.test.ts +9 -9
- package/src/__tests__/provider-error-scenarios.test.ts +8 -8
- package/src/__tests__/provider-registry-ollama.test.ts +1 -1
- package/src/__tests__/provider-send-message-override-profile.test.ts +5 -5
- package/src/__tests__/registry.test.ts +3 -3
- package/src/__tests__/requests-mock.ts +972 -0
- package/src/__tests__/resolve-trust-class.test.ts +1 -1
- package/src/__tests__/resource-pressure-guard.test.ts +6 -6
- package/src/__tests__/resource-pressure-routes.test.ts +5 -5
- package/src/__tests__/retry-fallback-escalation.test.ts +5 -5
- package/src/__tests__/sanitize-config-for-transfer.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +97 -97
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/search-skills-unified.test.ts +9 -7
- package/src/__tests__/{secret-routes-platform-proxy.test.ts → secret-routes-cloud-proxy.test.ts} +48 -95
- package/src/__tests__/secret-routes-scrub.test.ts +2 -59
- package/src/__tests__/secure-keys.test.ts +1 -1
- package/src/__tests__/skill-load-plugin-scope.test.ts +2 -2
- package/src/__tests__/skill-load-tool.test.ts +1 -1
- package/src/__tests__/skill-projection-feature-flag.test.ts +0 -19
- package/src/__tests__/skill-projection.benchmark.test.ts +5 -7
- package/src/__tests__/skill-tool-factory.test.ts +1 -1
- package/src/__tests__/skills-file-content-endpoint.test.ts +12 -12
- package/src/__tests__/skills-files-catalog-fallback.test.ts +9 -9
- package/src/__tests__/skills.test.ts +1 -1
- package/src/__tests__/slim-skill-category.test.ts +11 -9
- package/src/__tests__/stt-stream-session.test.ts +3 -3
- package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
- package/src/__tests__/subagent-disposal.test.ts +5 -5
- package/src/__tests__/subagent-fork-notifications.test.ts +4 -4
- package/src/__tests__/subagent-fork-spawn.test.ts +5 -5
- package/src/__tests__/subagent-manager-notify.test.ts +5 -5
- package/src/__tests__/subagent-tool-gate-mode.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +1 -1
- package/src/__tests__/telegram-bot-username-resolution.test.ts +34 -52
- package/src/__tests__/telegram-config.test.ts +16 -16
- package/src/__tests__/telephony-tts-guard.test.ts +13 -13
- package/src/__tests__/test-preload.ts +17 -7
- package/src/__tests__/tool-audit.test.ts +1 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +7 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -1
- package/src/__tests__/turn-events-store.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +2 -1
- package/src/__tests__/ui-choice-copy-surfaces.test.ts +1 -1
- package/src/__tests__/unified-turn-context-client-os.test.ts +1 -1
- package/src/__tests__/validate-input.test.ts +5 -5
- package/src/__tests__/verification-outbound-delivery.test.ts +1 -1
- package/src/__tests__/voice-config-update.test.ts +15 -15
- package/src/__tests__/voice-ingress-preflight.test.ts +4 -4
- package/src/__tests__/web-search.test.ts +340 -859
- package/src/__tests__/workspace-git-service.test.ts +1 -1
- package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +12 -12
- package/src/__tests__/workspace-migration-087-memory-router-balanced-profile.test.ts +1 -1
- package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +1 -1
- package/src/__tests__/workspace-migration-100-upgrade-quality-profile-to-fable-5.test.ts +1 -1
- package/src/__tests__/workspace-migration-103-upgrade-quality-profile-to-opus-4-8.test.ts +1 -1
- package/src/__tests__/workspace-migration-110-flip-balanced-profile-to-together.test.ts +1 -1
- package/src/__tests__/workspace-migration-113-swap-balanced-profile-to-glm-5p2.test.ts +1 -1
- package/src/__tests__/workspace-migration-114-swap-quality-profile-to-opus.test.ts +1 -1
- package/src/__tests__/workspace-migration-123-swap-quality-profile-to-fable.test.ts +1 -1
- package/src/__tests__/workspace-migration-125-repoint-managed-connections-to-cadet.test.ts +3 -3
- package/src/__tests__/workspace-migration-126-strip-managed-profile-bodies.test.ts +9 -9
- package/src/__tests__/workspace-migration-127-backfill-default-provider.test.ts +11 -11
- package/src/__tests__/workspace-migration-130-speech-mode-to-provider.test.ts +3 -3
- package/src/__tests__/workspace-migration-132-web-search-mode-to-provider.test.ts +6 -6
- package/src/__tests__/workspace-migration-133-collapse-provider-connections.test.ts +3 -3
- package/src/__tests__/workspace-migration-134-image-generation-mode-to-provider.test.ts +6 -6
- package/src/__tests__/workspace-migration-136-repair-stale-fireworks-kimi-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-137-repair-retired-fireworks-minimax-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-146-repair-retired-fireworks-deepseek-flash-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-147-rename-colliding-backup-profile-names.test.ts +1 -1
- package/src/__tests__/workspace-migration-151-repair-renamed-fireworks-deepseek-pro-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-152-repair-retired-fireworks-minimax-m2p7-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-159-rename-colliding-jev-profile-name.test.ts +1 -1
- package/src/__tests__/workspace-migration-160-repair-retired-fireworks-model-ids.test.ts +1 -1
- package/src/__tests__/workspace-migration-161-repair-retired-fireworks-glm-5p2-model-id.test.ts +1 -1
- package/src/api/events/cloud-disconnected.ts +21 -0
- package/src/api/events/host-bash.ts +1 -1
- package/src/api/events/host-cu.ts +1 -1
- package/src/api/events/host-file.ts +1 -1
- package/src/api/events/notification-intent.ts +1 -1
- package/src/api/events/{show-platform-login.ts → show-cloud-login.ts} +3 -5
- package/src/api/index.ts +11 -11
- package/src/api/responses/home.ts +1 -1
- package/src/api/surfaces.ts +4 -4
- package/src/approvals/guardian-request-resolvers.ts +2 -2
- package/src/avatar/accent-backfill.ts +1 -1
- package/src/avatar/identity-avatar.ts +1 -1
- package/src/avatar/notification-avatar.test.ts +2 -2
- package/src/avatar/notification-avatar.ts +2 -2
- package/src/avatar/resvg-lazy.test.ts +1 -1
- package/src/avatar/resvg-lazy.ts +3 -3
- package/src/avatar/sync-avatar.test.ts +76 -76
- package/src/avatar/sync-avatar.ts +15 -15
- package/src/avatar/traits-png-sync.ts +1 -1
- package/src/background-wake/background-wake-routes.test.ts +39 -39
- package/src/background-wake/{platform-client.test.ts → cloud-client.test.ts} +11 -11
- package/src/background-wake/{platform-client.ts → cloud-client.ts} +14 -14
- package/src/background-wake/publisher.ts +4 -4
- package/src/background-wake/wake-intent-hooks.test.ts +3 -3
- package/src/calls/__tests__/call-controller.test.ts +2 -2
- package/src/calls/__tests__/voice-session-bridge.test.ts +1 -1
- package/src/calls/call-domain.ts +1 -1
- package/src/calls/resolve-call-tts-provider.ts +6 -6
- package/src/calls/telephony-credential-preflight.ts +3 -3
- package/src/calls/telephony-tts-capability.ts +5 -6
- package/src/calls/tts-call-strategy.ts +1 -1
- package/src/calls/voice-escalation-judge.ts +1 -1
- package/src/calls/voice-ingress-preflight.ts +4 -4
- package/src/cli/bundled-modules.ts +1 -1
- package/src/cli/commands/__tests__/apps.test.ts +18 -53
- package/src/cli/commands/__tests__/plugins.test.ts +13 -13
- package/src/cli/commands/__tests__/tts.test.ts +1 -1
- package/src/cli/commands/auth.help.ts +3 -3
- package/src/cli/commands/auth.ts +2 -4
- package/src/cli/commands/browser.help.ts +2 -2
- package/src/cli/commands/channels/index.help.ts +2 -2
- package/src/cli/commands/channels/index.ts +1 -1
- package/src/cli/commands/channels/send.ts +1 -1
- package/src/cli/commands/cloud/__tests__/connect.test.ts +1 -1
- package/src/cli/commands/cloud/__tests__/disconnect.test.ts +3 -4
- package/src/cli/commands/cloud/connect.ts +2 -2
- package/src/cli/commands/cloud/credits-format.ts +1 -1
- package/src/cli/commands/cloud/index.help.ts +35 -35
- package/src/cli/commands/config.ts +1 -1
- package/src/cli/commands/credentials.ts +10 -12
- package/src/cli/commands/domain.ts +1 -1
- package/src/cli/commands/email.help.ts +1 -1
- package/src/cli/commands/email.ts +2 -2
- package/src/cli/commands/gateway.help.ts +1 -1
- package/src/cli/commands/gateway.ts +1 -1
- package/src/cli/commands/image-generation.help.ts +1 -1
- package/src/cli/commands/inference-providers.ts +1 -1
- package/src/cli/commands/inference.help.ts +2 -2
- package/src/cli/commands/memory/index.help.ts +1 -1
- package/src/cli/commands/oauth/connect.test.ts +2 -2
- package/src/cli/commands/oauth/connect.ts +1 -1
- package/src/cli/commands/oauth/index.help.ts +5 -5
- package/src/cli/commands/oauth/providers.ts +2 -2
- package/src/cli/commands/oauth/shared.ts +3 -3
- package/src/cli/commands/plugins.help.ts +2 -3
- package/src/cli/commands/plugins.ts +5 -5
- package/src/cli/commands/roadmap.help.ts +1 -1
- package/src/cli/commands/telemetry.help.ts +2 -2
- package/src/cli/commands/telemetry.ts +2 -2
- package/src/cli/commands/tts.help.ts +3 -3
- package/src/cli/commands/webhooks.help.ts +9 -9
- package/src/cli/commands/webhooks.ts +1 -1
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +8 -8
- package/src/cli/lib/__tests__/{install-from-platform.test.ts → install-from-cloud.test.ts} +54 -54
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +18 -18
- package/src/cli/lib/__tests__/{plugin-catalog-platform.test.ts → plugin-catalog-cloud.test.ts} +2 -2
- package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +1 -1
- package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +9 -9
- package/src/cli/lib/__tests__/plugin-details.test.ts +10 -10
- package/src/cli/lib/__tests__/plugins-install-offline.test.ts +24 -24
- package/src/cli/lib/bundled-marketplace.json +1 -1
- package/src/cli/lib/inspect-plugin.ts +2 -2
- package/src/cli/lib/{install-from-platform.ts → install-from-cloud.ts} +29 -29
- package/src/cli/lib/install-from-github.ts +4 -4
- package/src/cli/lib/plugin-catalog-cache.ts +7 -7
- package/src/cli/lib/{plugin-catalog-platform.ts → plugin-catalog-cloud.ts} +6 -6
- package/src/cli/lib/plugin-catalog-local.ts +2 -2
- package/src/cli/lib/publish-plugin.ts +9 -10
- package/src/cli/lib/search-plugins.ts +2 -2
- package/src/{platform → cloud}/client.test.ts +85 -86
- package/src/{platform → cloud}/client.ts +38 -46
- package/src/{platform/platform-patch-queue.test.ts → cloud/cloud-patch-queue.test.ts} +6 -9
- package/src/{platform/platform-patch-queue.ts → cloud/cloud-patch-queue.ts} +11 -11
- package/src/{platform/managed-speech.test.ts → cloud/cloud-speech.test.ts} +19 -19
- package/src/{platform/managed-speech.ts → cloud/cloud-speech.ts} +41 -41
- package/src/{platform → cloud}/consent-cache.test.ts +5 -5
- package/src/{platform → cloud}/consent-cache.ts +8 -8
- package/src/cloud/feature-gate.ts +8 -0
- package/src/{platform → cloud}/sync-identity.test.ts +4 -4
- package/src/{platform → cloud}/sync-identity.ts +6 -6
- package/src/config/__tests__/{platform-identity.test.ts → cloud-identity.test.ts} +54 -56
- package/src/config/__tests__/{platform-rehydration.test.ts → cloud-rehydration.test.ts} +47 -80
- package/src/config/__tests__/default-profile-catalog.test.ts +12 -12
- package/src/config/__tests__/default-provider.test.ts +4 -4
- package/src/config/__tests__/deployment-context-defaults.test.ts +23 -23
- package/src/config/__tests__/{jev-managed-profile.test.ts → jev-cloud-profile.test.ts} +3 -5
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +2 -2
- package/src/config/__tests__/loader-last-known-good.test.ts +6 -6
- package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +2 -2
- package/src/config/__tests__/profile-materialization.test.ts +7 -7
- package/src/config/__tests__/seed-default-provider.test.ts +17 -17
- package/src/config/__tests__/sync-gated-profiles.test.ts +20 -20
- package/src/config/__tests__/webhook-routing.test.ts +51 -51
- package/src/config/bundled-skills/computer-use/TOOLS.json +12 -12
- package/src/config/bundled-skills/messaging/SKILL.md +8 -8
- package/src/config/bundled-skills/messaging/TOOLS.json +2 -2
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +1 -1
- package/src/config/bundled-skills/messaging/tools/shared.ts +1 -1
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +2 -2
- package/src/config/bundled-skills/settings/TOOLS.json +3 -3
- package/src/config/bundled-skills/settings/tools/shared.ts +1 -1
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +12 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +3 -3
- package/src/config/bundled-skills/skill-management/TOOLS.json +8 -8
- package/src/config/bundled-skills/skill-management/tools/{delete-managed.ts → delete-cloud.ts} +2 -2
- package/src/config/bundled-skills/skill-management/tools/{scaffold-managed.ts → scaffold-cloud.ts} +2 -2
- package/src/config/call-site-defaults.ts +6 -6
- package/src/config/{platform-identity.ts → cloud-identity.ts} +39 -42
- package/src/config/cloud-rehydration.ts +35 -0
- package/src/config/{managed-speech-defaults.ts → cloud-speech-defaults.ts} +13 -13
- package/src/config/default-profile-catalog.ts +36 -38
- package/src/config/default-profile-names.ts +11 -11
- package/src/config/default-provider-resolution.ts +2 -2
- package/src/config/default-provider.ts +1 -1
- package/src/config/env-registry.ts +23 -21
- package/src/config/env.ts +33 -46
- package/src/config/feature-flag-registry.json +5 -5
- package/src/config/inference-profile-validation.ts +1 -1
- package/src/config/llm-resolver.ts +9 -10
- package/src/config/loader.ts +33 -17
- package/src/config/profile-materialization.ts +8 -8
- package/src/config/profile-text-generation.test.ts +1 -1
- package/src/config/sanitize-for-transfer.ts +1 -1
- package/src/config/schema.ts +6 -6
- package/src/config/schemas/__tests__/stt.test.ts +2 -2
- package/src/config/schemas/call-site-catalog.ts +1 -1
- package/src/config/schemas/channels.ts +8 -0
- package/src/config/schemas/{platform.ts → cloud.ts} +7 -6
- package/src/config/schemas/host-browser.ts +1 -0
- package/src/config/schemas/ingress.ts +1 -12
- package/src/config/schemas/llm.ts +45 -36
- package/src/config/schemas/memory-lifecycle.ts +11 -1
- package/src/config/schemas/services.ts +4 -4
- package/src/config/schemas/stt.ts +3 -3
- package/src/config/schemas/tts.ts +10 -5
- package/src/config/schemas/voice.ts +1 -1
- package/src/config/seed-inference-profiles.ts +19 -19
- package/src/config/skill-state.ts +2 -2
- package/src/config/skills.ts +4 -4
- package/src/config/sync-gated-profiles.ts +8 -8
- package/src/config/webhook-routing.ts +19 -19
- package/src/contacts/contacts-write.ts +1 -1
- package/src/credential-execution/ces-runtime.ts +6 -6
- package/src/credential-execution/{managed-catalog.ts → cloud-catalog.ts} +24 -24
- package/src/credential-execution/prompted-credential.ts +6 -18
- package/src/credential-health/credential-health-service.ts +61 -76
- package/src/daemon/__tests__/can-spawn-subagents.test.ts +1 -1
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +4 -4
- package/src/daemon/config-watcher.ts +2 -2
- package/src/daemon/conversation-agent-loop.ts +9 -9
- package/src/daemon/conversation-error.ts +36 -36
- package/src/daemon/conversation-skill-tools.ts +7 -7
- package/src/daemon/conversation-surfaces.ts +1 -1
- package/src/daemon/conversation-tool-setup.ts +2 -2
- package/src/daemon/conversation-turn-finalize.ts +1 -1
- package/src/daemon/conversation-workspace.ts +1 -1
- package/src/daemon/conversation.ts +1 -1
- package/src/daemon/credential-transcript-scrub.ts +21 -35
- package/src/daemon/daemon-readiness.ts +1 -1
- package/src/daemon/event-loop-watchdog.ts +2 -2
- package/src/daemon/handlers/config-ingress.ts +9 -9
- package/src/daemon/handlers/config-telegram.ts +6 -6
- package/src/daemon/handlers/skills.ts +20 -20
- package/src/daemon/host-cu-proxy.ts +1 -1
- package/src/daemon/lifecycle.ts +19 -19
- package/src/daemon/parse-actual-tokens-from-error.ts +3 -3
- package/src/daemon/providers-setup.ts +6 -6
- package/src/daemon/resource-pressure-guard-lifecycle.ts +1 -1
- package/src/daemon/resource-pressure-guard.ts +6 -6
- package/src/daemon/shutdown-handlers.ts +1 -1
- package/src/daemon/sqlite-corruption-watchdog.ts +3 -3
- package/src/daemon/trust-context.ts +1 -1
- package/src/desktop/desktop-automation-lease.ts +1 -1
- package/src/desktop/desktop-browser-endpoint.ts +2 -4
- package/src/desktop/desktop-computer-use-routing.test.ts +6 -6
- package/src/desktop/desktop-stream-bridge.test.ts +4 -4
- package/src/desktop/desktop-stream-bridge.ts +1 -1
- package/src/desktop/{virtual-desktop-platform.test.ts → virtual-desktop-cloud.test.ts} +6 -6
- package/src/desktop/virtual-desktop-feature.ts +7 -7
- package/src/email/byo-email-credential.ts +1 -1
- package/src/email/registered-inbox.test.ts +16 -16
- package/src/email/registered-inbox.ts +20 -20
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/hooks/hook-loader.ts +2 -2
- package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
- package/src/inbound/__tests__/tunnel-probe.test.ts +8 -8
- package/src/inbound/{platform-callback-registration.ts → cloud-callback-registration.ts} +49 -60
- package/src/inbound/oauth-callback-url.ts +6 -6
- package/src/inbound/pod-webhook-claim.ts +2 -2
- package/src/inbound/public-ingress-urls.ts +3 -3
- package/src/inbound/tunnel-probe.ts +21 -15
- package/src/inbound/tunnel-webhooks-gate.ts +3 -3
- package/src/ipc/__tests__/db-readiness-ipc-gate.test.ts +1 -1
- package/src/ipc/__tests__/email-ipc.test.ts +8 -8
- package/src/ipc/gateway-client.test.ts +55 -59
- package/src/ipc/gateway-flag-listener.ts +3 -3
- package/src/ipc/routes/db-proxy.ts +1 -1
- package/src/live-voice/__tests__/live-activity-reporter.test.ts +2 -2
- package/src/live-voice/__tests__/{live-voice-managed-speech-fallback.test.ts → live-voice-cloud-speech-fallback.test.ts} +15 -15
- package/src/live-voice/__tests__/live-voice-credential-preflight.test.ts +7 -7
- package/src/live-voice/__tests__/live-voice-stt.test.ts +1 -1
- package/src/live-voice/live-activity-reporter.ts +7 -7
- package/src/live-voice/live-voice-credential-preflight.ts +6 -6
- package/src/live-voice/live-voice-session.ts +3 -3
- package/src/live-voice/live-voice-tts.ts +1 -1
- package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +4 -4
- package/src/mcp/__tests__/mcp-oauth-provider.test.ts +1 -1
- package/src/mcp/mcp-oauth-provider.ts +2 -2
- package/src/media/gemini-image-service.ts +11 -13
- package/src/media/image-credentials.ts +9 -9
- package/src/media/openai-image-service.ts +1 -1
- package/src/media/types.ts +3 -3
- package/src/messaging/providers/channel-transport.ts +1 -1
- package/src/messaging/providers/discord/transport.ts +1 -1
- package/src/messaging/providers/gmail/adapter.ts +1 -1
- package/src/messaging/providers/gmail/client.ts +4 -4
- package/src/messaging/providers/outlook/adapter.ts +1 -1
- package/src/messaging/providers/slack/adapter.ts +1 -1
- package/src/messaging/providers/slack/transport.ts +1 -1
- package/src/messaging/providers/telegram-bot/transport.ts +1 -1
- package/src/monitoring/db-integrity-check.ts +1 -1
- package/src/monitoring/db-integrity-sample.ts +2 -2
- package/src/monitoring/mount-watch.ts +1 -1
- package/src/monitoring/oom-kill-reporter.ts +1 -1
- package/src/monitoring/worker.ts +5 -5
- package/src/notifications/README.md +2 -2
- package/src/notifications/__tests__/broadcaster.test.ts +9 -9
- package/src/notifications/__tests__/completion-policy.test.ts +1 -1
- package/src/notifications/__tests__/emit-signal-pipeline-failure.test.ts +4 -4
- package/src/notifications/activity-failed-dedupe.ts +1 -1
- package/src/notifications/adapters/{platform.ts → cloud.ts} +8 -8
- package/src/notifications/broadcaster.ts +10 -10
- package/src/notifications/decision-engine.ts +1 -1
- package/src/notifications/destination-resolver.ts +1 -1
- package/src/notifications/emit-signal.ts +6 -6
- package/src/notifications/types.ts +2 -2
- package/src/oauth/__tests__/identity-verifier.test.ts +1 -1
- package/src/oauth/__tests__/{seed-providers-managed.test.ts → seed-providers-cloud.test.ts} +13 -13
- package/src/oauth/byo-connection.test.ts +2 -2
- package/src/oauth/{platform-connection.test.ts → cloud-connection.test.ts} +41 -43
- package/src/oauth/{platform-connection.ts → cloud-connection.ts} +19 -19
- package/src/oauth/connection-resolver.test.ts +59 -61
- package/src/oauth/connection-resolver.ts +22 -22
- package/src/oauth/connection.ts +1 -1
- package/src/oauth/oauth-store.ts +8 -8
- package/src/oauth/provider-serializer.ts +4 -4
- package/src/oauth/revoke.ts +1 -1
- package/src/oauth/seed-providers.ts +32 -32
- package/src/permissions/approval-provenance.ts +1 -1
- package/src/permissions/checker.test.ts +18 -16
- package/src/permissions/checker.ts +3 -3
- package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
- package/src/persistence/embeddings/embedding-backend.test.ts +16 -16
- package/src/persistence/embeddings/embedding-backend.ts +13 -13
- package/src/persistence/embeddings/embedding-gemini.test.ts +9 -12
- package/src/persistence/embeddings/embedding-gemini.ts +11 -11
- package/src/persistence/embeddings/embedding-runtime-manager.ts +2 -2
- package/src/persistence/jobs-store.ts +1 -1
- package/src/persistence/lifecycle-events-store.ts +1 -1
- package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
- package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
- package/src/persistence/migrations/224-oauth-providers-managed-service-is-paid.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.ts +2 -2
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.ts +1 -1
- package/src/persistence/migrations/351-schedule-skill-script-handoff.ts +1 -1
- package/src/persistence/migrations/361-normalize-managed-connection-rows.test.ts +3 -3
- package/src/persistence/migrations/361-normalize-managed-connection-rows.ts +7 -7
- package/src/persistence/migrations/__tests__/319-remove-legacy-managed-connections.test.ts +2 -2
- package/src/persistence/schema/oauth.ts +1 -1
- package/src/plugin-api/index.ts +4 -4
- package/src/plugin-api/model-profiles.test.ts +1 -1
- package/src/plugin-api/model-profiles.ts +1 -1
- package/src/plugin-api/transcription-session.ts +1 -1
- package/src/plugin-api/vision-support.test.ts +1 -1
- package/src/plugin-api/webhook-url.ts +12 -12
- package/src/plugins/__tests__/source-fingerprint.test.ts +1 -1
- package/src/plugins/defaults/{platform-hosted → cloud-hosted}/__tests__/reengage.test.ts +5 -6
- package/src/plugins/defaults/cloud-hosted/package.json +14 -0
- package/src/plugins/defaults/{platform-hosted → cloud-hosted}/routes/reengage.ts +3 -3
- package/src/plugins/defaults/index.ts +6 -6
- package/src/plugins/defaults/main.ts +5 -5
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +5 -5
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-prompt.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-provider-path.test.ts +1 -1
- package/src/plugins/defaults/memory/config.ts +4 -4
- package/src/plugins/defaults/memory/memory-retrospective-constants.ts +2 -2
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +7 -7
- package/src/plugins/defaults/memory/memory-retrospective-prompt.ts +5 -5
- package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +2 -2
- package/src/plugins/defaults/memory/src/__tests__/memory-v2-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/boot-maintenance.test.ts +20 -20
- package/src/plugins/defaults/memory/substrate/__tests__/cli-command-store.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/skill-store.test.ts +3 -3
- package/src/plugins/defaults/memory/substrate/boot-maintenance.ts +17 -17
- package/src/plugins/defaults/memory/substrate/cli-command-store.ts +2 -2
- package/src/plugins/defaults/memory/substrate/prompts/consolidation.ts +1 -1
- package/src/plugins/defaults/memory/substrate/skill-store.ts +4 -4
- package/src/plugins/defaults/memory/v3/__tests__/maintain-job.test.ts +3 -3
- package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +2 -2
- package/src/plugins/defaults/memory/v3/maintain-job.ts +10 -10
- package/src/plugins/defaults/memory/v3/orchestrate.ts +3 -3
- package/src/plugins/defaults/memory/worker.ts +5 -5
- package/src/plugins/defaults/workspace/injectors.ts +2 -2
- package/src/plugins/mtime-cache.ts +1 -1
- package/src/plugins/source-versions.ts +1 -1
- package/src/plugins/types.ts +1 -1
- package/src/prompts/__tests__/system-prompt.test.ts +1 -1
- package/src/prompts/normalize-onboarding.ts +1 -1
- package/src/prompts/persona-resolver.ts +1 -1
- package/src/prompts/templates/system-sections.ts +3 -3
- package/src/providers/__tests__/cadet-connection-routing.test.ts +7 -7
- package/src/providers/__tests__/cadet-mismatch-routing.test.ts +12 -12
- package/src/providers/__tests__/connection-model-compat.test.ts +2 -2
- package/src/providers/__tests__/dispatch-connection-routing.test.ts +10 -10
- package/src/providers/__tests__/inference.test.ts +2 -2
- package/src/providers/__tests__/preflight-resolved-config.test.ts +16 -16
- package/src/providers/__tests__/retry-callsite.test.ts +1 -1
- package/src/providers/__tests__/satellite-connection-routing.test.ts +4 -4
- package/src/providers/__tests__/search-provider-catalog.test.ts +2 -2
- package/src/providers/__tests__/voice-error-copy.test.ts +3 -3
- package/src/providers/anthropic/client.ts +1 -1
- package/src/providers/cadet/client.ts +1 -1
- package/src/providers/cadet-model-routing.test.ts +19 -19
- package/src/providers/cadet-model-routing.ts +23 -23
- package/src/providers/call-site-routing.ts +10 -10
- package/src/providers/{platform-proxy → cloud-proxy}/constants.ts +11 -11
- package/src/providers/{platform-proxy → cloud-proxy}/context.ts +26 -26
- package/src/providers/connection-resolution.ts +43 -43
- package/src/providers/fallback-breaker.ts +2 -2
- package/src/providers/fetch-provider-catalog.ts +3 -3
- package/src/providers/gemini/client.ts +5 -5
- package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +3 -3
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +8 -8
- package/src/providers/inference/__tests__/base-url-security.test.ts +4 -4
- package/src/providers/inference/adapter-factory.ts +35 -35
- package/src/providers/inference/auth.ts +10 -10
- package/src/providers/inference/backfill.ts +11 -11
- package/src/providers/inference/connection-availability.ts +24 -24
- package/src/providers/inference/connections.ts +18 -20
- package/src/providers/inference/profile-probe.ts +4 -4
- package/src/providers/inference/resolve-auth.ts +8 -8
- package/src/providers/jev/ask.test.ts +1 -1
- package/src/providers/jev/ask.ts +2 -2
- package/src/providers/model-catalog.ts +8 -9
- package/src/providers/openai/__tests__/api-error-normalization.test.ts +3 -3
- package/src/providers/openai/api-error-normalization.ts +2 -2
- package/src/providers/provider-availability.ts +4 -4
- package/src/providers/provider-env-vars.ts +1 -1
- package/src/providers/provider-secret-catalog.ts +1 -1
- package/src/providers/registry.ts +20 -20
- package/src/providers/retry.ts +26 -26
- package/src/providers/routing-identity.ts +10 -10
- package/src/providers/search-provider-catalog.ts +2 -2
- package/src/providers/speech-to-text/__tests__/{cadet-managed-realtime.test.ts → cadet-cloud-realtime.test.ts} +3 -3
- package/src/providers/speech-to-text/__tests__/{cadet-managed.test.ts → cadet-cloud.test.ts} +35 -35
- package/src/providers/speech-to-text/__tests__/deepgram-flux-realtime.test.ts +1 -1
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +27 -27
- package/src/providers/speech-to-text/{cadet-managed-flux-realtime.ts → cadet-cloud-flux-realtime.ts} +6 -8
- package/src/providers/speech-to-text/{cadet-managed-realtime.ts → cadet-cloud-realtime.ts} +3 -3
- package/src/providers/speech-to-text/{cadet-managed.ts → cadet-cloud.ts} +18 -20
- package/src/providers/speech-to-text/cadet-speech-relay-connection.ts +7 -7
- package/src/providers/speech-to-text/deepgram-flux-frames.ts +3 -3
- package/src/providers/speech-to-text/deepgram-flux-realtime.ts +4 -4
- package/src/providers/speech-to-text/provider-catalog.ts +3 -3
- package/src/providers/speech-to-text/resolve.ts +26 -28
- package/src/providers/together/client.ts +1 -1
- package/src/providers/types.ts +4 -4
- package/src/providers/voice-error-copy.ts +1 -1
- package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +10 -10
- package/src/runtime/agent-wake.ts +1 -1
- package/src/runtime/auth/__tests__/middleware.test.ts +1 -1
- package/src/runtime/auth/middleware.ts +1 -1
- package/src/runtime/auth/scopes.ts +1 -1
- package/src/runtime/capabilities.ts +1 -1
- package/src/runtime/channel-invite-transports/discord.ts +1 -1
- package/src/runtime/channel-invite-transports/email.ts +2 -2
- package/src/runtime/channel-readiness-service.ts +15 -13
- package/src/runtime/channel-reply-session.test.ts +1 -1
- package/src/runtime/channel-reply-session.ts +1 -1
- package/src/runtime/http-server.ts +4 -4
- package/src/runtime/introduction-policy.ts +4 -4
- package/src/runtime/migrations/__tests__/origin-mode.test.ts +14 -14
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +1 -1
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +3 -4
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge.test.ts +6 -7
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +1 -1
- package/src/runtime/migrations/migration-transport.ts +3 -3
- package/src/runtime/migrations/origin-mode.ts +6 -9
- package/src/runtime/migrations/vbundle-import-policy.ts +2 -2
- package/src/runtime/migrations/vbundle-importer.ts +4 -4
- package/src/runtime/migrations/vbundle-streaming-importer.ts +6 -6
- package/src/runtime/migrations/vbundle-validator.ts +1 -1
- package/src/runtime/routes/__tests__/{platform-credits-routes.test.ts → cloud-credits-routes.test.ts} +9 -9
- package/src/runtime/routes/__tests__/{platform-invoice-routes.test.ts → cloud-invoice-routes.test.ts} +13 -13
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +1 -1
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +26 -25
- package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +5 -5
- package/src/runtime/routes/__tests__/default-provider-routes.test.ts +10 -10
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +18 -18
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +18 -16
- package/src/runtime/routes/__tests__/inference-send-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/migration-cadet-metadata-reconcile.test.ts +5 -20
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -22
- package/src/runtime/routes/__tests__/oauth-proxy-routes.test.ts +27 -27
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +5 -5
- package/src/runtime/routes/__tests__/ps-routes.test.ts +5 -3
- package/src/runtime/routes/__tests__/roadmap-routes.test.ts +15 -15
- package/src/runtime/routes/__tests__/webhook-routes.test.ts +31 -31
- package/src/runtime/routes/app-management-routes.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +1 -1
- package/src/runtime/routes/auth-routes.ts +14 -14
- package/src/runtime/routes/avatar-routes.ts +0 -14
- package/src/runtime/routes/background-wake-routes.ts +4 -4
- package/src/runtime/routes/channel-availability-routes.ts +4 -4
- package/src/runtime/routes/client-routes.ts +5 -5
- package/src/runtime/routes/cloud-credentials.ts +45 -0
- package/src/runtime/routes/{platform-routes.ts → cloud-routes.ts} +83 -116
- package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +82 -282
- package/src/runtime/routes/credential-routes.ts +28 -30
- package/src/runtime/routes/default-provider-routes.ts +1 -1
- package/src/runtime/routes/desktop-setup-routes.test.ts +5 -5
- package/src/runtime/routes/desktop-setup-routes.ts +1 -1
- package/src/runtime/routes/domain-routes.ts +15 -21
- package/src/runtime/routes/email-routes.ts +13 -13
- package/src/runtime/routes/errors.ts +1 -1
- package/src/runtime/routes/gateway-status-routes.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +3 -3
- package/src/runtime/routes/inbound-message-handler.ts +1 -1
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +1 -1
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +1 -1
- package/src/runtime/routes/index.ts +1 -1
- package/src/runtime/routes/inference-profile-availability-guard.ts +5 -5
- package/src/runtime/routes/inference-profiles-routes.ts +11 -11
- package/src/runtime/routes/inference-provider-connection-routes.ts +24 -24
- package/src/runtime/routes/ingress-status-routes.ts +1 -1
- package/src/runtime/routes/integrations/a2a.ts +2 -2
- package/src/runtime/routes/integrations/twilio.ts +21 -35
- package/src/runtime/routes/internal-telemetry-routes.ts +2 -2
- package/src/runtime/routes/live-voice-routes.test.ts +4 -4
- package/src/runtime/routes/live-voice-routes.ts +6 -6
- package/src/runtime/routes/migration-routes.ts +34 -40
- package/src/runtime/routes/oauth-commands-routes.ts +31 -31
- package/src/runtime/routes/oauth-providers.ts +5 -5
- package/src/runtime/routes/oauth-proxy-passthrough.test.ts +1 -1
- package/src/runtime/routes/oauth-proxy-passthrough.ts +8 -8
- package/src/runtime/routes/oauth-proxy-routes.ts +15 -17
- package/src/runtime/routes/oauth-request-hints.test.ts +1 -1
- package/src/runtime/routes/oauth-request-hints.ts +1 -1
- package/src/runtime/routes/plugins-routes.ts +9 -9
- package/src/runtime/routes/profiler-routes.ts +1 -1
- package/src/runtime/routes/ps-routes.ts +4 -0
- package/src/runtime/routes/roadmap-routes.ts +18 -20
- package/src/runtime/routes/secret-routes.ts +29 -55
- package/src/runtime/routes/settings-routes.ts +18 -23
- package/src/runtime/routes/telemetry-routes.ts +4 -4
- package/src/runtime/routes/tts-routes.ts +4 -4
- package/src/runtime/routes/user-route-resolution.ts +1 -1
- package/src/runtime/routes/webhook-routes.ts +18 -18
- package/src/runtime/routes/workflow-routes.ts +5 -5
- package/src/runtime/sync/resource-sync-events.ts +2 -2
- package/src/runtime/verification-outbound-actions.ts +4 -4
- package/src/schedule/integration-status.ts +6 -6
- package/src/schedule/run-script.ts +1 -1
- package/src/schedule/schedule-timezone.ts +1 -1
- package/src/schedule/worker.ts +5 -5
- package/src/security/auth-fallback-events-store.ts +1 -1
- package/src/security/oauth2.ts +4 -4
- package/src/skills/available-skills.ts +4 -4
- package/src/skills/catalog-files.ts +8 -8
- package/src/skills/catalog-install.ts +12 -12
- package/src/skills/categories-cache.ts +3 -3
- package/src/skills/clawhub.ts +1 -1
- package/src/skills/{platform-compatibility.test.ts → cloud-compatibility.test.ts} +7 -7
- package/src/skills/{platform-compatibility.ts → cloud-compatibility.ts} +2 -4
- package/src/skills/{managed-store.ts → cloud-store.ts} +21 -23
- package/src/skills/inline-command-runner.ts +1 -1
- package/src/skills/install-meta.ts +1 -1
- package/src/skills/path-classifier.ts +4 -4
- package/src/skills/skill-history.ts +4 -4
- package/src/skills/skillssh-registry.ts +1 -1
- package/src/stt/__tests__/daemon-batch-transcriber.test.ts +1 -1
- package/src/stt/daemon-batch-transcriber.ts +7 -7
- package/src/stt/types.ts +3 -3
- package/src/subagent/manager.ts +15 -15
- package/src/subagent/types.ts +1 -1
- package/src/telegram/__tests__/webhook-health.test.ts +16 -16
- package/src/telegram/webhook-health.ts +10 -10
- package/src/telemetry/__tests__/config-setting-events-store.test.ts +1 -1
- package/src/telemetry/__tests__/outbox-test-harness.ts +2 -2
- package/src/telemetry/config-setting-events-store.ts +1 -1
- package/src/telemetry/config-setting-snapshot.ts +1 -1
- package/src/telemetry/memory-corpus-size.ts +1 -1
- package/src/telemetry/memory-tier-reporter.test.ts +2 -2
- package/src/telemetry/memory-tier-reporter.ts +3 -3
- package/src/telemetry/telemetry-event-sources.test.ts +2 -2
- package/src/telemetry/telemetry-event-sources.ts +9 -9
- package/src/telemetry/telemetry-events-outbox.ts +2 -2
- package/src/telemetry/telemetry-wire-validation.test.ts +1 -1
- package/src/telemetry/telemetry-wire-validation.ts +3 -3
- package/src/telemetry/telemetry-wire.generated.ts +1 -1
- package/src/telemetry/tool-audit.ts +1 -1
- package/src/telemetry/tool-executed-events-store.test.ts +1 -1
- package/src/telemetry/trace-collection-policy.ts +4 -4
- package/src/telemetry/turn-events-store.ts +1 -1
- package/src/telemetry/turn-outcome.ts +1 -1
- package/src/telemetry/turn-trace-store.ts +2 -2
- package/src/telemetry/types.test.ts +1 -1
- package/src/telemetry/types.ts +19 -19
- package/src/telemetry/usage-telemetry-reporter.test.ts +42 -42
- package/src/telemetry/usage-telemetry-reporter.ts +17 -17
- package/src/telemetry/watchdog-direct-emit.test.ts +9 -9
- package/src/telemetry/watchdog-direct-emit.ts +10 -10
- package/src/tools/__tests__/side-effect-abort-guard.test.ts +2 -2
- package/src/tools/browser/cdp-client/factory.ts +1 -1
- package/src/tools/computer-use/target.ts +2 -2
- package/src/tools/credentials/store.ts +6 -15
- package/src/tools/network/__tests__/{managed-search-proxy.test.ts → cloud-search-proxy.test.ts} +20 -20
- package/src/tools/network/__tests__/web-search.test.ts +14 -14
- package/src/tools/network/{managed-search-proxy.ts → cloud-search-proxy.ts} +13 -13
- package/src/tools/network/web-search.ts +9 -9
- package/src/tools/permission-checker.ts +2 -2
- package/src/tools/shared/input-misuse.ts +1 -1
- package/src/tools/shared/input-repairs.ts +4 -4
- package/src/tools/skills/{delete-managed.ts → delete-cloud.ts} +4 -4
- package/src/tools/skills/find-similar-skills.test.ts +7 -7
- package/src/tools/skills/find-similar-skills.ts +15 -15
- package/src/tools/skills/load.ts +6 -6
- package/src/tools/skills/{scaffold-managed.ts → scaffold-cloud.ts} +16 -16
- package/src/tools/skills/skill-script-runner.ts +2 -2
- package/src/tools/terminal/safe-env.ts +3 -3
- package/src/tools/tool-types.ts +2 -2
- package/src/tools/types.ts +2 -2
- package/src/tools/ui-surface/surface-shape-docs.ts +2 -2
- package/src/tools/workflows/manage-workflows.ts +1 -1
- package/src/tools/workspace-tools/loader.ts +1 -1
- package/src/tts/__tests__/cadet-provider.test.ts +5 -5
- package/src/tts/provider-catalog.ts +1 -1
- package/src/tts/providers/cadet-provider.ts +23 -23
- package/src/tts/providers/cadet-tts-socket.ts +2 -2
- package/src/tts/tts-config-resolver.ts +1 -1
- package/src/tts/tts-voice-field.ts +3 -3
- package/src/usage/subagent-attribution.ts +1 -1
- package/src/util/__tests__/process-table.test.ts +47 -0
- package/src/util/canonicalize-identity.ts +1 -1
- package/src/util/cgroup-cpu.ts +5 -5
- package/src/util/cgroup-memory.ts +2 -2
- package/src/util/container-cpu-sampler.ts +4 -4
- package/src/util/disk-usage.ts +4 -4
- package/src/util/errors.ts +3 -3
- package/src/util/oom-priority.ts +1 -1
- package/src/util/platform.ts +5 -5
- package/src/util/process-table.ts +39 -5
- package/src/util/provider-error-patterns.ts +2 -2
- package/src/watch/__tests__/watch-retro.test.ts +2 -2
- package/src/watch/watch-retro.ts +1 -1
- package/src/watcher/__tests__/telemetry.test.ts +2 -2
- package/src/watcher/telemetry.ts +1 -1
- package/src/windows-compiled-cli.ts +1 -1
- package/src/workspace/adaptive-thinking-repair.ts +4 -4
- package/src/workspace/byok-default-profile-ensure.ts +7 -7
- package/src/workspace/git-service.ts +2 -2
- package/src/workspace/migrations/006-services-config.ts +1 -1
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +1 -1
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +1 -1
- package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +1 -1
- package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +4 -4
- package/src/workspace/migrations/087-memory-router-balanced-profile.ts +3 -3
- package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +4 -4
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +5 -5
- package/src/workspace/migrations/100-upgrade-quality-profile-to-fable-5.ts +4 -4
- package/src/workspace/migrations/101-upgrade-balanced-economy-to-minimax-m3.ts +4 -4
- package/src/workspace/migrations/103-upgrade-quality-profile-to-opus-4-8.ts +5 -5
- package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +1 -1
- package/src/workspace/migrations/106-drop-collect-usage-data.ts +1 -1
- package/src/workspace/migrations/108-drop-balanced-economy-profile.ts +4 -4
- package/src/workspace/migrations/109-swap-quality-profile-to-glm-5p2.ts +11 -11
- package/src/workspace/migrations/110-flip-balanced-profile-to-together.ts +6 -6
- package/src/workspace/migrations/113-swap-balanced-profile-to-glm-5p2.ts +5 -5
- package/src/workspace/migrations/114-swap-quality-profile-to-opus.ts +4 -4
- package/src/workspace/migrations/115-drop-frontier-profile.ts +5 -5
- package/src/workspace/migrations/123-swap-quality-profile-to-fable.ts +5 -5
- package/src/workspace/migrations/125-repoint-managed-connections-to-cadet.ts +3 -3
- package/src/workspace/migrations/126-strip-managed-profile-bodies.ts +2 -2
- package/src/workspace/migrations/127-backfill-default-provider.ts +4 -4
- package/src/workspace/migrations/130-speech-mode-to-provider.ts +4 -4
- package/src/workspace/migrations/131-drop-web-fetch-mode.ts +1 -1
- package/src/workspace/migrations/132-web-search-mode-to-provider.ts +6 -6
- package/src/workspace/migrations/133-collapse-provider-connections.ts +3 -3
- package/src/workspace/migrations/134-image-generation-mode-to-provider.ts +4 -4
- package/src/workspace/migrations/136-repair-stale-fireworks-kimi-model-id.ts +2 -2
- package/src/workspace/migrations/137-repair-retired-fireworks-minimax-model-id.ts +2 -2
- package/src/workspace/migrations/139-clear-renamed-cost-profile-label.ts +2 -2
- package/src/workspace/migrations/141-stt-english-default-to-multilingual.ts +4 -4
- package/src/workspace/migrations/144-convert-stranded-subscription-openai-profiles.ts +1 -1
- package/src/workspace/migrations/145-collapse-profile-bindings-to-entries.ts +2 -2
- package/src/workspace/migrations/146-repair-retired-fireworks-deepseek-flash-model-id.ts +2 -2
- package/src/workspace/migrations/148-strip-unsupported-fallback-profiles.ts +2 -2
- package/src/workspace/migrations/150-stt-flux-provider-to-model-family.ts +1 -1
- package/src/workspace/migrations/151-repair-renamed-fireworks-deepseek-pro-model-id.ts +2 -2
- package/src/workspace/migrations/152-repair-retired-fireworks-minimax-m2p7-model-id.ts +2 -2
- package/src/workspace/migrations/159-rename-colliding-jev-profile-name.ts +2 -2
- package/src/workspace/migrations/160-repair-retired-fireworks-model-ids.ts +2 -2
- package/src/workspace/migrations/161-repair-retired-fireworks-glm-5p2-model-id.ts +2 -2
- package/src/workspace/migrations/__tests__/141-stt-english-default-to-multilingual.test.ts +1 -1
- package/src/workspace/migrations/__tests__/150-stt-flux-provider-to-model-family.test.ts +1 -1
- package/src/workspace/migrations/registry.ts +6 -6
- package/src/workspace/top-level-renderer.ts +1 -1
- package/src/workspace/turn-commit.ts +2 -2
- package/src/__tests__/config-loader-platform-defaults.test.ts +0 -606
- package/src/__tests__/mock-gateway-ipc.ts +0 -260
- package/src/api/events/platform-disconnected.ts +0 -21
- package/src/config/platform-rehydration.ts +0 -60
- package/src/platform/feature-gate.ts +0 -8
- package/src/plugins/defaults/platform-hosted/package.json +0 -14
- package/src/runtime/routes/platform-managed-credentials.ts +0 -50
- /package/src/__tests__/{gateway-client-managed-outbound.test.ts → gateway-client-cloud-outbound.test.ts} +0 -0
- /package/src/__tests__/{secure-keys-managed-failover.test.ts → secure-keys-cloud-failover.test.ts} +0 -0
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provider metadata for
|
|
2
|
+
* Provider metadata for cloud proxy routing.
|
|
3
3
|
*
|
|
4
4
|
* Each managed-capable provider maps to a deterministic proxy base path
|
|
5
|
-
* used when routing LLM requests through the
|
|
5
|
+
* used when routing LLM requests through the cloud's cloud proxy.
|
|
6
6
|
* Providers marked as non-managed (e.g. ollama) are excluded.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
export interface
|
|
9
|
+
export interface CloudProviderMeta {
|
|
10
10
|
/** Provider identifier matching the registry name. */
|
|
11
11
|
name: string;
|
|
12
|
-
/** Whether this provider supports
|
|
12
|
+
/** Whether this provider supports cloud proxy routing. */
|
|
13
13
|
managed: boolean;
|
|
14
|
-
/** Proxy path segment appended to the
|
|
14
|
+
/** Proxy path segment appended to the cloud base URL (only for cloud providers). */
|
|
15
15
|
proxyPath?: string;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Explicit provider metadata for all known providers.
|
|
20
|
-
*
|
|
20
|
+
* Cloud providers get a deterministic proxy path; non-cloud providers
|
|
21
21
|
* are marked accordingly and have no proxy path.
|
|
22
22
|
*
|
|
23
|
-
* This table describes
|
|
23
|
+
* This table describes cloud proxy routing capability only. It does not
|
|
24
24
|
* control which providers auto-bootstrap into the text-model registry when
|
|
25
|
-
*
|
|
25
|
+
* cloud credentials are present; that policy lives in the registry/context
|
|
26
26
|
* fallback allowlists.
|
|
27
27
|
*/
|
|
28
|
-
export const PLATFORM_PROVIDER_META: Record<string,
|
|
28
|
+
export const PLATFORM_PROVIDER_META: Record<string, CloudProviderMeta> = {
|
|
29
29
|
openai: {
|
|
30
30
|
name: "openai",
|
|
31
31
|
managed: true,
|
|
@@ -54,8 +54,8 @@ export const PLATFORM_PROVIDER_META: Record<string, ManagedProviderMeta> = {
|
|
|
54
54
|
cadet: {
|
|
55
55
|
name: "cadet",
|
|
56
56
|
managed: true,
|
|
57
|
-
// Wire contract with the
|
|
58
|
-
// is renamed in coordination with the
|
|
57
|
+
// Wire contract with the cloud's runtime proxy — the route segment
|
|
58
|
+
// is renamed in coordination with the cloud deploy, not here.
|
|
59
59
|
proxyPath: "/v1/runtime-proxy/cadet",
|
|
60
60
|
},
|
|
61
61
|
typesafe: {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Cloud proxy context resolver.
|
|
3
3
|
*
|
|
4
4
|
* Resolves the prerequisites for routing LLM provider requests through the
|
|
5
|
-
* platform's
|
|
5
|
+
* platform's cloud proxy: the cloud base URL and an assistant API key
|
|
6
6
|
* stored as a secure credential.
|
|
7
7
|
*
|
|
8
|
-
* When both are present, providers can be initialized with a
|
|
8
|
+
* When both are present, providers can be initialized with a cloud proxy
|
|
9
9
|
* base URL instead of calling the upstream provider directly.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import { getCloudBaseUrl } from "../../config/env.js";
|
|
13
13
|
import { credentialKey } from "../../security/credential-key.js";
|
|
14
14
|
import { getSecureKeyAsync } from "../../security/secure-keys.js";
|
|
15
15
|
import { PLATFORM_PROVIDER_META } from "./constants.js";
|
|
@@ -20,17 +20,17 @@ const ASSISTANT_API_KEY_STORAGE_KEY = credentialKey(
|
|
|
20
20
|
"assistant_api_key",
|
|
21
21
|
);
|
|
22
22
|
|
|
23
|
-
export interface
|
|
24
|
-
/** Whether
|
|
23
|
+
export interface CloudProxyContext {
|
|
24
|
+
/** Whether cloud proxy prerequisites are satisfied. */
|
|
25
25
|
enabled: boolean;
|
|
26
26
|
/** Platform base URL (without trailing slash), or empty string if unavailable. */
|
|
27
|
-
|
|
28
|
-
/** Assistant API key for authenticating with the
|
|
27
|
+
cloudBaseUrl: string;
|
|
28
|
+
/** Assistant API key for authenticating with the cloud proxy, or empty string if unavailable. */
|
|
29
29
|
assistantApiKey: string;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
* Cached result of the last `
|
|
33
|
+
* Cached result of the last `resolveCloudProxyContext()` call.
|
|
34
34
|
* Updated every time the context is resolved (startup, credential changes).
|
|
35
35
|
* Defaults to `false` so that callers see a safe value before the first
|
|
36
36
|
* async resolution completes.
|
|
@@ -38,36 +38,36 @@ export interface ManagedProxyContext {
|
|
|
38
38
|
let _managedProxyEnabled = false;
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
|
-
* Resolve
|
|
41
|
+
* Resolve cloud proxy context from environment and secure storage.
|
|
42
42
|
*
|
|
43
|
-
* Returns an enabled context only when both the
|
|
43
|
+
* Returns an enabled context only when both the cloud base URL and
|
|
44
44
|
* the assistant API key are present. Otherwise returns a disabled context.
|
|
45
45
|
*/
|
|
46
|
-
export async function
|
|
47
|
-
const
|
|
46
|
+
export async function resolveCloudProxyContext(): Promise<CloudProxyContext> {
|
|
47
|
+
const cloudBaseUrl = getCloudBaseUrl().replace(/\/+$/, "");
|
|
48
48
|
const assistantApiKey =
|
|
49
49
|
(await getSecureKeyAsync(ASSISTANT_API_KEY_STORAGE_KEY)) ?? "";
|
|
50
|
-
const enabled = !!
|
|
50
|
+
const enabled = !!cloudBaseUrl && !!assistantApiKey;
|
|
51
51
|
_managedProxyEnabled = enabled;
|
|
52
52
|
|
|
53
|
-
return { enabled,
|
|
53
|
+
return { enabled, cloudBaseUrl, assistantApiKey };
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
|
-
* Check whether
|
|
57
|
+
* Check whether cloud proxy prerequisites are available.
|
|
58
58
|
* Shorthand for checking that both platform URL and assistant API key exist.
|
|
59
59
|
*/
|
|
60
|
-
export async function
|
|
61
|
-
return (await
|
|
60
|
+
export async function hasCloudProxyPrereqs(): Promise<boolean> {
|
|
61
|
+
return (await resolveCloudProxyContext()).enabled;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
|
-
* Build the full
|
|
65
|
+
* Build the full cloud proxy base URL for a given provider.
|
|
66
66
|
*
|
|
67
|
-
* Combines the
|
|
67
|
+
* Combines the cloud base URL with the provider's deterministic proxy path.
|
|
68
68
|
* Returns undefined if the provider is not managed or prerequisites are missing.
|
|
69
69
|
*/
|
|
70
|
-
export async function
|
|
70
|
+
export async function buildCloudBaseUrl(
|
|
71
71
|
provider: string,
|
|
72
72
|
): Promise<string | undefined> {
|
|
73
73
|
const meta = PLATFORM_PROVIDER_META[provider];
|
|
@@ -75,18 +75,18 @@ export async function buildManagedBaseUrl(
|
|
|
75
75
|
return undefined;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
const ctx = await
|
|
78
|
+
const ctx = await resolveCloudProxyContext();
|
|
79
79
|
if (!ctx.enabled) {
|
|
80
80
|
return undefined;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
return `${ctx.
|
|
83
|
+
return `${ctx.cloudBaseUrl}${meta.proxyPath}`;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/**
|
|
87
|
-
* Whether
|
|
87
|
+
* Whether cloud fallback is enabled for a given provider.
|
|
88
88
|
*
|
|
89
|
-
* Returns true when the provider supports
|
|
89
|
+
* Returns true when the provider supports cloud proxy routing and
|
|
90
90
|
* all prerequisites (platform URL + assistant API key) are satisfied.
|
|
91
91
|
*/
|
|
92
92
|
export async function managedFallbackEnabledFor(
|
|
@@ -96,5 +96,5 @@ export async function managedFallbackEnabledFor(
|
|
|
96
96
|
if (!meta?.managed) {
|
|
97
97
|
return false;
|
|
98
98
|
}
|
|
99
|
-
return await
|
|
99
|
+
return await hasCloudProxyPrereqs();
|
|
100
100
|
}
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
* free to treat null as "no provider available" and fall back to
|
|
22
22
|
* a graceful no-op (e.g. rollup producer skips, satellite throw
|
|
23
23
|
* with their own actionable message).
|
|
24
|
-
* 4. Transient failures inside the resolver (
|
|
24
|
+
* 4. Transient failures inside the resolver (cloud-proxy context
|
|
25
25
|
* lookup, credential read I/O) are caught and treated like a soft
|
|
26
26
|
* credential issue (return null). A transient blip should not take
|
|
27
27
|
* a conversation offline.
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
-
import {
|
|
30
|
+
import { getIsCloud } from "../config/env-registry.js";
|
|
31
31
|
import {
|
|
32
32
|
resolveCallSiteConfig,
|
|
33
33
|
selectWinningProfile,
|
|
@@ -38,11 +38,12 @@ import { credentialKey } from "../security/credential-key.js";
|
|
|
38
38
|
import { ProviderNotConfiguredError } from "../util/errors.js";
|
|
39
39
|
import { getLogger } from "../util/logger.js";
|
|
40
40
|
import {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
CADET_CLOUD_CONNECTION_NAME,
|
|
42
|
+
CLOUD_ROUTABLE_PROVIDERS,
|
|
43
|
+
getCloudUpstream,
|
|
44
|
+
isCadetCloudConnection,
|
|
45
45
|
} from "./cadet-model-routing.js";
|
|
46
|
+
import { resolveCloudProxyContext } from "./cloud-proxy/context.js";
|
|
46
47
|
import {
|
|
47
48
|
describeSubscriptionModelIncompatibility,
|
|
48
49
|
isConnectionCompatibleWithModel,
|
|
@@ -56,7 +57,6 @@ import {
|
|
|
56
57
|
getConnection,
|
|
57
58
|
listConnections,
|
|
58
59
|
} from "./inference/connections.js";
|
|
59
|
-
import { resolveManagedProxyContext } from "./platform-proxy/context.js";
|
|
60
60
|
import { checkCredentialPresence } from "./provider-availability.js";
|
|
61
61
|
import { dispatchProviderResolvable } from "./provider-resolvability.js";
|
|
62
62
|
import type { ProvidersConfig } from "./registry.js";
|
|
@@ -157,8 +157,8 @@ export function connectionProviderKind(
|
|
|
157
157
|
if (!row) {
|
|
158
158
|
return null;
|
|
159
159
|
}
|
|
160
|
-
if (
|
|
161
|
-
return model ?
|
|
160
|
+
if (isCadetCloudConnection(row)) {
|
|
161
|
+
return model ? getCloudUpstream(model) : null;
|
|
162
162
|
}
|
|
163
163
|
if (row.provider === "chatgpt") {
|
|
164
164
|
return "openai";
|
|
@@ -195,7 +195,7 @@ export function catalogProviderForProfile(
|
|
|
195
195
|
model: string,
|
|
196
196
|
): string | null {
|
|
197
197
|
if (ROUTING_IDENTITY_PROVIDERS.has(provider)) {
|
|
198
|
-
return provider === "chatgpt" ? "openai" :
|
|
198
|
+
return provider === "chatgpt" ? "openai" : getCloudUpstream(model);
|
|
199
199
|
}
|
|
200
200
|
return resolveEntryProviderKind(provider, model) ?? provider;
|
|
201
201
|
}
|
|
@@ -262,12 +262,12 @@ export async function tryResolveProviderForConnectionName(
|
|
|
262
262
|
// resolves on platform auth and ignores a user-owned row claiming that name
|
|
263
263
|
// (boot seeding refuses to overwrite such a row, so these installs have no
|
|
264
264
|
// canonical row at all). Keyed on the name rather than the declared
|
|
265
|
-
// provider: a call-site tweak pinning a concrete upstream over a
|
|
266
|
-
// profile keeps the
|
|
265
|
+
// provider: a call-site tweak pinning a concrete upstream over a cloud
|
|
266
|
+
// profile keeps the cloud connection while replacing the provider
|
|
267
267
|
// (`llm-resolver.ts`), and that route is platform-billed just the same.
|
|
268
268
|
if (
|
|
269
|
-
connectionName ===
|
|
270
|
-
!
|
|
269
|
+
connectionName === CADET_CLOUD_CONNECTION_NAME &&
|
|
270
|
+
!isCadetCloudConnection(connection)
|
|
271
271
|
) {
|
|
272
272
|
const provider = await resolveThroughPlatform(
|
|
273
273
|
config,
|
|
@@ -276,36 +276,36 @@ export async function tryResolveProviderForConnectionName(
|
|
|
276
276
|
);
|
|
277
277
|
return attachProviderRoute(provider, canonicalCadetConnection());
|
|
278
278
|
}
|
|
279
|
-
// The provider-agnostic Cadet
|
|
279
|
+
// The provider-agnostic Cadet Cloud connection carries only the `cadet`
|
|
280
280
|
// sentinel, so the usual `connection.provider === expectedProvider` equality
|
|
281
281
|
// never holds. It routes by the resolving profile's declared provider
|
|
282
282
|
// instead (threaded as `providerOverride` below), which must be present AND
|
|
283
|
-
// one of the
|
|
284
|
-
// those. A `cadet` connection paired with a non-
|
|
283
|
+
// one of the cloud-routable upstreams — the cloud proxy can only serve
|
|
284
|
+
// those. A `cadet` connection paired with a non-cloud provider
|
|
285
285
|
// (openrouter/ollama/openai-compatible/…) is a genuine misconfiguration: it
|
|
286
286
|
// falls through to the mismatch recovery/error path below rather than routing
|
|
287
287
|
// as platform auth, which would otherwise fail as a soft miss and silently
|
|
288
288
|
// fall back to the default provider.
|
|
289
|
-
const isCadet =
|
|
289
|
+
const isCadet = isCadetCloudConnection(connection);
|
|
290
290
|
if (isCadet && !expectedProvider) {
|
|
291
291
|
// An entry-name route carries no declared provider (the label is the
|
|
292
292
|
// row's name, not a vendor); a cadet-kind row derives its upstream
|
|
293
293
|
// from the model, same as the cadet identity itself.
|
|
294
294
|
expectedProvider = model
|
|
295
|
-
? (
|
|
295
|
+
? (getCloudUpstream(model) ?? undefined)
|
|
296
296
|
: undefined;
|
|
297
297
|
if (!expectedProvider) {
|
|
298
298
|
throw new ConnectionResolutionError(
|
|
299
299
|
connectionName,
|
|
300
300
|
"provider_mismatch",
|
|
301
|
-
`provider_connection "${connectionName}" is the provider-agnostic Cadet
|
|
301
|
+
`provider_connection "${connectionName}" is the provider-agnostic Cadet Cloud connection but the resolving profile declared no provider — set the profile's provider so the upstream can be selected`,
|
|
302
302
|
);
|
|
303
303
|
}
|
|
304
304
|
}
|
|
305
305
|
const isCadetRoute =
|
|
306
306
|
isCadet &&
|
|
307
307
|
!!expectedProvider &&
|
|
308
|
-
|
|
308
|
+
CLOUD_ROUTABLE_PROVIDERS.has(expectedProvider);
|
|
309
309
|
// The ChatGPT-subscription row stores the "chatgpt" routing identity in
|
|
310
310
|
// its provider column, so the equality never holds for its openai
|
|
311
311
|
// upstream. The identity dispatches with the upstream threaded as
|
|
@@ -371,7 +371,7 @@ export async function tryResolveProviderForConnectionName(
|
|
|
371
371
|
}
|
|
372
372
|
}
|
|
373
373
|
// `resolveProviderFromConnection` reaches into auth resolution (credential
|
|
374
|
-
// reads,
|
|
374
|
+
// reads, cloud-proxy context). A transient failure there is a soft
|
|
375
375
|
// miss — log and return null so the caller can treat it the same as
|
|
376
376
|
// "no usable credentials". Hard config errors are thrown above; this
|
|
377
377
|
// catch is specifically for in-flight failures that should not take
|
|
@@ -416,14 +416,14 @@ function attachProviderRoute(
|
|
|
416
416
|
if (provider) {
|
|
417
417
|
provider.routeAttribution = {
|
|
418
418
|
connectionName: connection.name,
|
|
419
|
-
|
|
419
|
+
isCloudRoute: isCadetCloudConnection(connection),
|
|
420
420
|
};
|
|
421
421
|
}
|
|
422
422
|
return provider;
|
|
423
423
|
}
|
|
424
424
|
|
|
425
425
|
/**
|
|
426
|
-
* Whether a route through this connection name is Cadet
|
|
426
|
+
* Whether a route through this connection name is Cadet Cloud
|
|
427
427
|
* (platform-billed), for callers that hold only the name. Returns undefined
|
|
428
428
|
* when the row can't be read, so the caller can fall back rather than assert
|
|
429
429
|
* a BYOK route it never confirmed.
|
|
@@ -432,10 +432,10 @@ function attachProviderRoute(
|
|
|
432
432
|
* ignored and the route resolves through platform auth regardless (see
|
|
433
433
|
* `tryResolveProviderForConnectionName`).
|
|
434
434
|
*/
|
|
435
|
-
export function
|
|
435
|
+
export function isCloudConnectionRoute(
|
|
436
436
|
connectionName: string,
|
|
437
437
|
): boolean | undefined {
|
|
438
|
-
if (connectionName ===
|
|
438
|
+
if (connectionName === CADET_CLOUD_CONNECTION_NAME) {
|
|
439
439
|
return true;
|
|
440
440
|
}
|
|
441
441
|
let connection;
|
|
@@ -444,11 +444,11 @@ export function isManagedConnectionRoute(
|
|
|
444
444
|
} catch {
|
|
445
445
|
return undefined;
|
|
446
446
|
}
|
|
447
|
-
return connection ?
|
|
447
|
+
return connection ? isCadetCloudConnection(connection) : undefined;
|
|
448
448
|
}
|
|
449
449
|
|
|
450
450
|
/**
|
|
451
|
-
* Resolve a
|
|
451
|
+
* Resolve a cloud route through platform auth without reading a connection
|
|
452
452
|
* row. Used when the canonical `cadet` row is claimed by a user-owned
|
|
453
453
|
* connection, so the row boot seeding would have written does not exist.
|
|
454
454
|
*/
|
|
@@ -457,12 +457,12 @@ async function resolveThroughPlatform(
|
|
|
457
457
|
upstream: string | undefined,
|
|
458
458
|
model: string | undefined,
|
|
459
459
|
): Promise<Provider | null> {
|
|
460
|
-
if (!upstream || !
|
|
460
|
+
if (!upstream || !CLOUD_ROUTABLE_PROVIDERS.has(upstream)) {
|
|
461
461
|
return null;
|
|
462
462
|
}
|
|
463
463
|
log.info(
|
|
464
464
|
{ upstream, model },
|
|
465
|
-
"Cadet
|
|
465
|
+
"Cadet Cloud route resolved through platform auth: a user-owned connection claims the canonical connection name",
|
|
466
466
|
);
|
|
467
467
|
try {
|
|
468
468
|
return await resolveProviderFromConnection(
|
|
@@ -479,7 +479,7 @@ async function resolveThroughPlatform(
|
|
|
479
479
|
/unresolved routing identity/.test(err.message)
|
|
480
480
|
) {
|
|
481
481
|
throw new ConnectionResolutionError(
|
|
482
|
-
|
|
482
|
+
CADET_CLOUD_CONNECTION_NAME,
|
|
483
483
|
"adapter_unavailable",
|
|
484
484
|
err.message,
|
|
485
485
|
{ cause: err, model },
|
|
@@ -600,7 +600,7 @@ export async function resolveDefaultProvider(
|
|
|
600
600
|
*
|
|
601
601
|
* - connection row missing (`not_found`)
|
|
602
602
|
* - connection bound to a different provider (`provider_mismatch`), with
|
|
603
|
-
* the provider-agnostic Cadet
|
|
603
|
+
* the provider-agnostic Cadet Cloud exception for managed-routable
|
|
604
604
|
* providers
|
|
605
605
|
* - API-key/subscription credential absent from the vault
|
|
606
606
|
* (`missing_credential`)
|
|
@@ -665,20 +665,20 @@ export async function preflightResolvedConfig(
|
|
|
665
665
|
);
|
|
666
666
|
}
|
|
667
667
|
// Dispatch routes anything through the canonical name on platform auth, so
|
|
668
|
-
// preflight judges the
|
|
668
|
+
// preflight judges the cloud rather than a claiming row's credentials.
|
|
669
669
|
if (
|
|
670
|
-
connectionName ===
|
|
671
|
-
!
|
|
670
|
+
connectionName === CADET_CLOUD_CONNECTION_NAME &&
|
|
671
|
+
!isCadetCloudConnection(connection)
|
|
672
672
|
) {
|
|
673
673
|
connection = canonicalCadetConnection();
|
|
674
674
|
}
|
|
675
675
|
|
|
676
|
-
if (
|
|
677
|
-
if (!
|
|
676
|
+
if (isCadetCloudConnection(connection)) {
|
|
677
|
+
if (!CLOUD_ROUTABLE_PROVIDERS.has(provider)) {
|
|
678
678
|
throw new ConnectionResolutionError(
|
|
679
679
|
connectionName,
|
|
680
680
|
"provider_mismatch",
|
|
681
|
-
`provider_connection "${connectionName}" is the Cadet
|
|
681
|
+
`provider_connection "${connectionName}" is the Cadet Cloud connection, which cannot serve provider "${provider}"`,
|
|
682
682
|
errorOptions,
|
|
683
683
|
);
|
|
684
684
|
}
|
|
@@ -686,8 +686,8 @@ export async function preflightResolvedConfig(
|
|
|
686
686
|
if (presence === "ok") {
|
|
687
687
|
return;
|
|
688
688
|
}
|
|
689
|
-
if (
|
|
690
|
-
// A
|
|
689
|
+
if (getIsCloud()) {
|
|
690
|
+
// A cloud assistant cannot present a login screen or switch
|
|
691
691
|
// providers, so the login-or-switch wording never fits. An unreachable
|
|
692
692
|
// store is transient and recovers on its own, so it reads as a retry. A
|
|
693
693
|
// reachable but empty store can only be fixed by re-provisioning the
|
|
@@ -776,18 +776,18 @@ export async function preflightResolvedConfig(
|
|
|
776
776
|
|
|
777
777
|
/**
|
|
778
778
|
* Platform-login state with the credential-store-outage case kept distinct:
|
|
779
|
-
* `
|
|
779
|
+
* `resolveCloudProxyContext` collapses an unreachable key read into
|
|
780
780
|
* "no key", which must not be reported as a logout. A missing platform base
|
|
781
781
|
* URL is definitively unauthenticated (it is config, not a credential read).
|
|
782
782
|
*/
|
|
783
783
|
async function platformLoginPresence(): Promise<
|
|
784
784
|
"ok" | "unauthenticated" | "indeterminate"
|
|
785
785
|
> {
|
|
786
|
-
const ctx = await
|
|
786
|
+
const ctx = await resolveCloudProxyContext();
|
|
787
787
|
if (ctx.enabled) {
|
|
788
788
|
return "ok";
|
|
789
789
|
}
|
|
790
|
-
if (!ctx.
|
|
790
|
+
if (!ctx.cloudBaseUrl) {
|
|
791
791
|
return "unauthenticated";
|
|
792
792
|
}
|
|
793
793
|
const presence = await checkCredentialPresence(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Circuit breaker for
|
|
2
|
+
* Circuit breaker for cloud fallback routes.
|
|
3
3
|
*
|
|
4
4
|
* Once a backup profile has served a request, the primary route is known to be
|
|
5
5
|
* down. Paying the full retry budget on every later request only adds latency
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* - An upstream outage (5xx, 429, transport failure, a broken managed
|
|
18
18
|
* credential) indicts the whole provider, so it is remembered under the
|
|
19
19
|
* upstream name and every model on it skips the primary.
|
|
20
|
-
* - A retired or renamed model (404, `model_not_found`, the
|
|
20
|
+
* - A retired or renamed model (404, `model_not_found`, the cloud proxy's
|
|
21
21
|
* preflight 400) indicts one model. Remembering it provider-wide would
|
|
22
22
|
* divert healthy profiles on the same upstream to their backups for the
|
|
23
23
|
* whole cooldown, and would let a probe of some other healthy model close a
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* `clients/web/src/assistant/generated/web-fetch-provider-catalog.gen.ts`.
|
|
8
8
|
*
|
|
9
9
|
* Mirrors `search-provider-catalog.ts`. Where web-search distinguishes
|
|
10
|
-
* `managed` (
|
|
10
|
+
* `managed` (cloud proxy) from `byok` (user key), web-fetch has no managed
|
|
11
11
|
* proxy yet, so the two kinds are:
|
|
12
12
|
*
|
|
13
13
|
* - `builtin` — the daemon's own HTTP fetch + extract path (`default`). No
|
|
@@ -58,8 +58,8 @@ export interface FetchProviderCatalogEntry {
|
|
|
58
58
|
export const FETCH_PROVIDER_CATALOG: readonly FetchProviderCatalogEntry[] = [
|
|
59
59
|
{
|
|
60
60
|
id: "default",
|
|
61
|
-
// Display-only: fetching runs in the daemon, not through the
|
|
62
|
-
// proxy. The id stays `default` until a
|
|
61
|
+
// Display-only: fetching runs in the daemon, not through the cloud
|
|
62
|
+
// proxy. The id stays `default` until a cloud fetch route exists.
|
|
63
63
|
displayName: "Cadet",
|
|
64
64
|
displayNameLong: "Cadet built-in fetcher",
|
|
65
65
|
kind: "builtin",
|
|
@@ -309,7 +309,7 @@ export function deriveGeminiReason(error: ApiError): ProviderErrorReason {
|
|
|
309
309
|
return "network_error";
|
|
310
310
|
}
|
|
311
311
|
|
|
312
|
-
// The
|
|
312
|
+
// The cloud proxy's daily-limit 402 body carries a specific code; match it
|
|
313
313
|
// before the status branches so it isn't classified as a generic 4xx.
|
|
314
314
|
if (FREE_TIER_DAILY_LIMIT_PATTERNS.some((re) => re.test(message))) {
|
|
315
315
|
return "free_tier_daily_limit_reached";
|
|
@@ -403,8 +403,8 @@ export async function validateGeminiApiKey(
|
|
|
403
403
|
|
|
404
404
|
export interface GeminiProviderOptions {
|
|
405
405
|
streamTimeoutMs?: number;
|
|
406
|
-
/** When set, routes requests through the
|
|
407
|
-
|
|
406
|
+
/** When set, routes requests through the cloud proxy at this base URL. */
|
|
407
|
+
cloudBaseUrl?: string;
|
|
408
408
|
}
|
|
409
409
|
|
|
410
410
|
export class GeminiProvider implements Provider {
|
|
@@ -418,11 +418,11 @@ export class GeminiProvider implements Provider {
|
|
|
418
418
|
model: string,
|
|
419
419
|
options: GeminiProviderOptions = {},
|
|
420
420
|
) {
|
|
421
|
-
this.client = options.
|
|
421
|
+
this.client = options.cloudBaseUrl
|
|
422
422
|
? new GoogleGenAI({
|
|
423
423
|
apiKey,
|
|
424
424
|
httpOptions: {
|
|
425
|
-
baseUrl: options.
|
|
425
|
+
baseUrl: options.cloudBaseUrl,
|
|
426
426
|
},
|
|
427
427
|
})
|
|
428
428
|
: new GoogleGenAI({ apiKey });
|
|
@@ -61,7 +61,7 @@ function retryOptions(adapter: unknown): RetryOptions {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
describe("adapter factory", () => {
|
|
64
|
-
// Hermetic credential store: without this, the
|
|
64
|
+
// Hermetic credential store: without this, the cloud-proxy tests read
|
|
65
65
|
// whatever ambient backend the host has, and a stray assistant API key
|
|
66
66
|
// flips the refresh-declines expectations.
|
|
67
67
|
setSecureKeyBackendForTesting(memorySecureKeyBackend({}));
|
|
@@ -260,7 +260,7 @@ describe("adapter factory", () => {
|
|
|
260
260
|
});
|
|
261
261
|
});
|
|
262
262
|
|
|
263
|
-
test("wires
|
|
263
|
+
test("wires cloud connections to reload rotated assistant credentials", () => {
|
|
264
264
|
const connection: ProviderConnection = {
|
|
265
265
|
name: "cadet",
|
|
266
266
|
provider: "cadet",
|
|
@@ -286,7 +286,7 @@ describe("adapter factory", () => {
|
|
|
286
286
|
expect(adapter).not.toBeNull();
|
|
287
287
|
const options = retryOptions(adapter);
|
|
288
288
|
expect(options).toMatchObject({
|
|
289
|
-
credentialSource: "cadet-
|
|
289
|
+
credentialSource: "cadet-cloud",
|
|
290
290
|
connectionName: "cadet",
|
|
291
291
|
});
|
|
292
292
|
expect(typeof options.refreshCredentialProvider).toBe("function");
|
|
@@ -43,7 +43,7 @@ mock.module("../../../config/assistant-feature-flags.js", () => ({
|
|
|
43
43
|
// Mock platform detection: tests default to platform mode (SSRF enforced).
|
|
44
44
|
// Individual tests can override via `mockIsPlatform = false`. Spread the real
|
|
45
45
|
// module so the config loader's transitive `util/platform` imports still
|
|
46
|
-
// resolve — only `
|
|
46
|
+
// resolve — only `getIsCloud` is overridden.
|
|
47
47
|
let mockIsPlatform = true;
|
|
48
48
|
|
|
49
49
|
const realEnvRegistry = {
|
|
@@ -51,7 +51,7 @@ const realEnvRegistry = {
|
|
|
51
51
|
};
|
|
52
52
|
mock.module("../../../config/env-registry.js", () => ({
|
|
53
53
|
...realEnvRegistry,
|
|
54
|
-
|
|
54
|
+
getIsCloud: () => mockIsPlatform,
|
|
55
55
|
}));
|
|
56
56
|
|
|
57
57
|
// Mock DNS resolution: all hostnames resolve to a public IP by default.
|
|
@@ -372,13 +372,13 @@ describe("base_url SSRF bypass for self-hosted daemons (create)", () => {
|
|
|
372
372
|
mockIsPlatform = false;
|
|
373
373
|
});
|
|
374
374
|
|
|
375
|
-
test("allows localhost when not
|
|
375
|
+
test("allows localhost when not cloud-hosted", async () => {
|
|
376
376
|
/**
|
|
377
377
|
* Self-hosted users run LM Studio / vLLM / text-generation-webui on
|
|
378
378
|
* their own machine. localhost is the expected target.
|
|
379
379
|
*/
|
|
380
380
|
|
|
381
|
-
// GIVEN a self-hosted daemon (
|
|
381
|
+
// GIVEN a self-hosted daemon (IS_CLOUD=false)
|
|
382
382
|
// WHEN creating a connection with a localhost base_url
|
|
383
383
|
const result = await handleCreate({
|
|
384
384
|
body: {
|
|
@@ -397,12 +397,12 @@ describe("base_url SSRF bypass for self-hosted daemons (create)", () => {
|
|
|
397
397
|
);
|
|
398
398
|
});
|
|
399
399
|
|
|
400
|
-
test("allows private IP (192.168.x.x) when not
|
|
400
|
+
test("allows private IP (192.168.x.x) when not cloud-hosted", async () => {
|
|
401
401
|
/**
|
|
402
402
|
* Self-hosted users may run model servers on LAN machines.
|
|
403
403
|
*/
|
|
404
404
|
|
|
405
|
-
// GIVEN a self-hosted daemon (
|
|
405
|
+
// GIVEN a self-hosted daemon (IS_CLOUD=false)
|
|
406
406
|
// WHEN creating a connection with a private IP base_url
|
|
407
407
|
const result = await handleCreate({
|
|
408
408
|
body: {
|
|
@@ -421,12 +421,12 @@ describe("base_url SSRF bypass for self-hosted daemons (create)", () => {
|
|
|
421
421
|
);
|
|
422
422
|
});
|
|
423
423
|
|
|
424
|
-
test("allows 127.0.0.1 when not
|
|
424
|
+
test("allows 127.0.0.1 when not cloud-hosted", async () => {
|
|
425
425
|
/**
|
|
426
426
|
* Loopback address variant of localhost.
|
|
427
427
|
*/
|
|
428
428
|
|
|
429
|
-
// GIVEN a self-hosted daemon (
|
|
429
|
+
// GIVEN a self-hosted daemon (IS_CLOUD=false)
|
|
430
430
|
// WHEN creating a connection with a 127.0.0.1 base_url
|
|
431
431
|
const result = await handleCreate({
|
|
432
432
|
body: {
|
|
@@ -115,10 +115,10 @@ describe("resolveAuth defense-in-depth", () => {
|
|
|
115
115
|
// exact credential name the tests pass to resolveAuth.
|
|
116
116
|
useMemorySecureKeys({ "cred-test": "sk-test-key" });
|
|
117
117
|
|
|
118
|
-
// Mock the
|
|
119
|
-
mock.module("../../
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
// Mock the cloud proxy context to avoid real platform calls.
|
|
119
|
+
mock.module("../../cloud-proxy/context.js", () => ({
|
|
120
|
+
buildCloudBaseUrl: async () => null,
|
|
121
|
+
resolveCloudProxyContext: async () => ({
|
|
122
122
|
assistantApiKey: "platform-key",
|
|
123
123
|
}),
|
|
124
124
|
}));
|