@mycadet/assistant 0.12.7 → 0.12.9
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 +2 -2
- 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/package.json +1 -1
- package/node_modules/@mycadet/ces-client/src/__tests__/ces-client.test.ts +14 -14
- 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 +2 -2
- 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 +2 -2
- 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 +6804 -799
- 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} +77 -75
- 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-set-route.test.ts +12 -8
- 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 +28 -40
- 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 +134 -288
- 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 +1 -2
- package/src/__tests__/mcp-client-auth.test.ts +1 -2
- package/src/__tests__/mcp-config-secret-boundary.test.ts +44 -40
- package/src/__tests__/mcp-tool-annotations-risk.test.ts +1 -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-store-credential.test.ts +4 -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 +222 -536
- package/src/__tests__/skills-files-catalog-fallback.test.ts +259 -577
- 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-cloud-login.ts +18 -0
- 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__/callback-routes-list.test.ts +2 -2
- 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/cloud/index.ts +1 -1
- package/src/cli/commands/config.ts +2 -2
- 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__/substrate-twin-shadowing.test.ts +36 -26
- 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 +21 -26
- 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 +29 -10
- package/src/config/schemas/llm.ts +36 -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/substrate-twin-shadowing.ts +12 -17
- package/src/config/sync-gated-profiles.ts +8 -9
- 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 +2 -23
- package/src/credential-health/credential-health-service.ts +59 -70
- 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 +32 -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/__tests__/memory-tier-boundary-guard.test.ts +5 -0
- 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 +126 -82
- 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} +86 -119
- package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +345 -667
- 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 +20 -61
- 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 +2 -20
- 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/layout.ts +479 -0
- package/src/util/oom-priority.ts +1 -1
- package/src/util/platform.ts +12 -468
- 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 +6 -6
- 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/api/events/show-platform-login.ts +0 -20
- 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
|
@@ -35,10 +35,10 @@ import { AtlasCloudProvider } from "../atlascloud/client.js";
|
|
|
35
35
|
import { BasetenProvider } from "../baseten/client.js";
|
|
36
36
|
import { CadetProvider } from "../cadet/client.js";
|
|
37
37
|
import {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
CADET_CLOUD_PROVIDER,
|
|
39
|
+
CLOUD_ROUTABLE_PROVIDERS,
|
|
40
|
+
getCloudUpstream,
|
|
41
|
+
isCadetCloudConnection,
|
|
42
42
|
} from "../cadet-model-routing.js";
|
|
43
43
|
import { FireworksProvider } from "../fireworks/client.js";
|
|
44
44
|
import { GeminiProvider } from "../gemini/client.js";
|
|
@@ -70,7 +70,7 @@ export interface AdapterCreateOpts {
|
|
|
70
70
|
apiKey: string;
|
|
71
71
|
model: string;
|
|
72
72
|
streamTimeoutMs: number;
|
|
73
|
-
/** Set when an explicit base URL override or
|
|
73
|
+
/** Set when an explicit base URL override or cloud proxy is in play. */
|
|
74
74
|
baseURL?: string;
|
|
75
75
|
/** Forwarded to providers that wire native provider-side web search. */
|
|
76
76
|
useNativeWebSearch: boolean;
|
|
@@ -126,8 +126,8 @@ const ADAPTER_FACTORIES: Record<string, AdapterFactory> = {
|
|
|
126
126
|
gemini: ({ apiKey, model, streamTimeoutMs, baseURL }) =>
|
|
127
127
|
new GeminiProvider(apiKey, model, {
|
|
128
128
|
streamTimeoutMs,
|
|
129
|
-
// Gemini routes managed proxies through `
|
|
130
|
-
...(baseURL ? {
|
|
129
|
+
// Gemini routes managed proxies through `cloudBaseUrl`, not `baseURL`.
|
|
130
|
+
...(baseURL ? { cloudBaseUrl: baseURL } : {}),
|
|
131
131
|
}),
|
|
132
132
|
ollama: ({ apiKey, model, streamTimeoutMs, baseURL }) =>
|
|
133
133
|
new OllamaProvider(model, {
|
|
@@ -280,7 +280,7 @@ export function createAdapterFromConnection(
|
|
|
280
280
|
useNativeWebSearch?: boolean;
|
|
281
281
|
/**
|
|
282
282
|
* Effective upstream provider to build the adapter for. Defaults to
|
|
283
|
-
* `connection.provider`. The provider-agnostic Cadet
|
|
283
|
+
* `connection.provider`. The provider-agnostic Cadet Cloud connection
|
|
284
284
|
* passes the resolved profile's provider here, since its own row carries
|
|
285
285
|
* only the `cadet` sentinel.
|
|
286
286
|
*/
|
|
@@ -294,7 +294,7 @@ export function createAdapterFromConnection(
|
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
/**
|
|
297
|
-
* Re-read the
|
|
297
|
+
* Re-read the cloud credential after an auth rejection and rebuild the
|
|
298
298
|
* adapter around it, so a key rotated out-of-band is picked up without a
|
|
299
299
|
* restart. Returns `null` when the store hands back the same credential
|
|
300
300
|
* that just failed — otherwise a proxy 401 from any other cause (platform
|
|
@@ -338,7 +338,7 @@ export function createAdapterFromConnection(
|
|
|
338
338
|
* (call site consumed, wire params resolved from the backup profile, usage
|
|
339
339
|
* attribution headers stamped). A second `RetryProvider` in between would
|
|
340
340
|
* re-normalize that call-site-less config and strip those headers, leaving
|
|
341
|
-
* degraded traffic unattributed on the
|
|
341
|
+
* degraded traffic unattributed on the cloud's billing events.
|
|
342
342
|
*
|
|
343
343
|
* Never throws: a broken backup lookup must surface the original provider
|
|
344
344
|
* error, not a new one.
|
|
@@ -378,7 +378,7 @@ export function createAdapterFromConnection(
|
|
|
378
378
|
}
|
|
379
379
|
const overrideProfile = expectedFallback;
|
|
380
380
|
// Resolved the provider-aware way the runtime resolver resolves every
|
|
381
|
-
// profile name: the backups are companions of the
|
|
381
|
+
// profile name: the backups are companions of the cloud column and
|
|
382
382
|
// must not materialize under a BYOK or ChatGPT default provider.
|
|
383
383
|
const backup = resolveDefaultProfileForProvider(
|
|
384
384
|
llm.profiles,
|
|
@@ -412,21 +412,21 @@ export function createAdapterFromConnection(
|
|
|
412
412
|
}
|
|
413
413
|
// The model the adapter serves must be the model the fallback send
|
|
414
414
|
// carries, so it comes from the same forced-profile resolution.
|
|
415
|
-
// This callback authenticates the backup with the
|
|
415
|
+
// This callback authenticates the backup with the cloud connection
|
|
416
416
|
// it was built for, so it can only serve a backup that routes through
|
|
417
|
-
// the
|
|
417
|
+
// the cloud column. Refusing any other route keeps managed billing
|
|
418
418
|
// and credentials from being applied to user-owned traffic.
|
|
419
419
|
// Keyed on the connection, not the provider: a call-site fragment that
|
|
420
|
-
// pins a concrete upstream over a
|
|
420
|
+
// pins a concrete upstream over a cloud winner keeps the cloud
|
|
421
421
|
// routing and is stamped with this connection's name by the resolver
|
|
422
422
|
// (see `llm-resolver.ts`), so a concrete `provider` here is still
|
|
423
423
|
// managed traffic. Only a profile that names a different connection,
|
|
424
|
-
// or a concrete provider carrying no
|
|
424
|
+
// or a concrete provider carrying no cloud connection at all (a BYOK
|
|
425
425
|
// winner), routes somewhere this callback cannot authenticate.
|
|
426
426
|
const backupConnection = resolvedBackup.provider_connection;
|
|
427
427
|
const routesThroughThisConnection =
|
|
428
428
|
backupConnection === undefined
|
|
429
|
-
? resolvedBackup.provider ===
|
|
429
|
+
? resolvedBackup.provider === CADET_CLOUD_PROVIDER
|
|
430
430
|
: backupConnection === connection.name;
|
|
431
431
|
if (!routesThroughThisConnection) {
|
|
432
432
|
log.warn(
|
|
@@ -436,7 +436,7 @@ export function createAdapterFromConnection(
|
|
|
436
436
|
backupProvider: resolvedBackup.provider,
|
|
437
437
|
backupConnection,
|
|
438
438
|
},
|
|
439
|
-
"Backup profile routes outside the
|
|
439
|
+
"Backup profile routes outside the cloud connection; keeping the original error",
|
|
440
440
|
);
|
|
441
441
|
return null;
|
|
442
442
|
}
|
|
@@ -448,15 +448,15 @@ export function createAdapterFromConnection(
|
|
|
448
448
|
// and the `isCadet && !expectedProvider` branch). Deriving it from the
|
|
449
449
|
// model here regardless would send a provider-pinned call-site fragment
|
|
450
450
|
// to a different upstream than a primary send of the same resolution,
|
|
451
|
-
// and would refuse a
|
|
452
|
-
// though normal dispatch serves it. A provider the
|
|
451
|
+
// and would refuse a cloud model the catalog does not list yet even
|
|
452
|
+
// though normal dispatch serves it. A provider the cloud proxy cannot
|
|
453
453
|
// front (a non-routable id, or another routing identity such as
|
|
454
454
|
// `chatgpt`) is refused rather than routed.
|
|
455
455
|
const declaredProvider = resolvedBackup.provider;
|
|
456
456
|
const upstream =
|
|
457
|
-
declaredProvider ===
|
|
458
|
-
?
|
|
459
|
-
:
|
|
457
|
+
declaredProvider === CADET_CLOUD_PROVIDER
|
|
458
|
+
? getCloudUpstream(resolvedBackup.model)
|
|
459
|
+
: CLOUD_ROUTABLE_PROVIDERS.has(declaredProvider)
|
|
460
460
|
? declaredProvider
|
|
461
461
|
: null;
|
|
462
462
|
if (upstream === null) {
|
|
@@ -467,11 +467,11 @@ export function createAdapterFromConnection(
|
|
|
467
467
|
backupProvider: declaredProvider,
|
|
468
468
|
backupModel: resolvedBackup.model,
|
|
469
469
|
},
|
|
470
|
-
"Backup profile does not resolve to a
|
|
470
|
+
"Backup profile does not resolve to a cloud upstream; keeping the original error",
|
|
471
471
|
);
|
|
472
472
|
return null;
|
|
473
473
|
}
|
|
474
|
-
// Re-resolve auth for the BACKUP upstream: the
|
|
474
|
+
// Re-resolve auth for the BACKUP upstream: the cloud proxy's base URL
|
|
475
475
|
// is per-upstream, so the primary's resolved auth cannot be reused.
|
|
476
476
|
const backupAuth = await resolveAuth(
|
|
477
477
|
effectiveConnectionAuth(connection),
|
|
@@ -495,7 +495,7 @@ export function createAdapterFromConnection(
|
|
|
495
495
|
return {
|
|
496
496
|
provider: backupAdapter,
|
|
497
497
|
overrideProfile,
|
|
498
|
-
// Always true: this callback is wired only on the
|
|
498
|
+
// Always true: this callback is wired only on the cloud proxy, so
|
|
499
499
|
// the backup route runs through it too and its `X-Cadet-*` billing
|
|
500
500
|
// metadata reaches our own backend, never a third party.
|
|
501
501
|
forwardUsageAttributionHeaders: true,
|
|
@@ -511,17 +511,17 @@ export function createAdapterFromConnection(
|
|
|
511
511
|
}
|
|
512
512
|
|
|
513
513
|
// Usage-attribution headers (`X-Cadet-*`) are only meaningful when the
|
|
514
|
-
// request is routed through the Cadet
|
|
514
|
+
// request is routed through the Cadet Cloud proxy. They carry billing
|
|
515
515
|
// metadata for our own backend. Forwarding them to a third-party endpoint
|
|
516
|
-
// would leak internal Cadet metadata, so gate on the
|
|
516
|
+
// would leak internal Cadet metadata, so gate on the cloud connection
|
|
517
517
|
// identity, the only route that flows through our proxy.
|
|
518
|
-
const
|
|
518
|
+
const isCloudProxy = isCadetCloudConnection(connection);
|
|
519
519
|
const effectiveAuth = effectiveConnectionAuth(connection);
|
|
520
520
|
const tracked = new UsageTrackingProvider(
|
|
521
521
|
new RetryProvider(adapter, {
|
|
522
|
-
forwardUsageAttributionHeaders:
|
|
523
|
-
credentialSource:
|
|
524
|
-
? "cadet-
|
|
522
|
+
forwardUsageAttributionHeaders: isCloudProxy,
|
|
523
|
+
credentialSource: isCloudProxy
|
|
524
|
+
? "cadet-cloud"
|
|
525
525
|
: effectiveAuth.type === "api_key"
|
|
526
526
|
? "byok"
|
|
527
527
|
: effectiveAuth.type === "oauth_subscription"
|
|
@@ -530,11 +530,11 @@ export function createAdapterFromConnection(
|
|
|
530
530
|
? "no-auth"
|
|
531
531
|
: undefined,
|
|
532
532
|
connectionName: connection.name,
|
|
533
|
-
// Both escalations are
|
|
533
|
+
// Both escalations are cloud-route only. A BYOK, oauth-subscription,
|
|
534
534
|
// or no-auth connection must never fall back: the install may hold no
|
|
535
|
-
// credential for the backup profile's provider, and only the
|
|
535
|
+
// credential for the backup profile's provider, and only the cloud
|
|
536
536
|
// column carries `fallbackProfile` pointers in the first place.
|
|
537
|
-
...(
|
|
537
|
+
...(isCloudProxy
|
|
538
538
|
? {
|
|
539
539
|
refreshCredentialProvider: makeCredentialRefresher(),
|
|
540
540
|
resolveFallbackRoute: makeFallbackRouteResolver(),
|
|
@@ -569,7 +569,7 @@ function buildConnectionAdapter(
|
|
|
569
569
|
// only when the caller names an upstream, including Cadet-hosted GPU
|
|
570
570
|
// models whose catalog id is also `cadet`.
|
|
571
571
|
if (
|
|
572
|
-
connection.provider ===
|
|
572
|
+
connection.provider === CADET_CLOUD_PROVIDER &&
|
|
573
573
|
opts.provider === undefined
|
|
574
574
|
) {
|
|
575
575
|
return null;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { CADET_CLOUD_PROVIDER } from "../cadet-model-routing.js";
|
|
4
4
|
import { PROVIDER_CATALOG } from "../model-catalog.js";
|
|
5
5
|
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
@@ -12,7 +12,7 @@ import { PROVIDER_CATALOG } from "../model-catalog.js";
|
|
|
12
12
|
*
|
|
13
13
|
* Runtime-supported variants:
|
|
14
14
|
* - api_key: look up `credential` in vault, inject as bearer/provider header.
|
|
15
|
-
* - platform: route via Cadet
|
|
15
|
+
* - platform: route via Cadet Cloud proxy; no client-side credential.
|
|
16
16
|
* - none: no auth (e.g. Ollama running locally).
|
|
17
17
|
* - oauth_subscription: OAuth-based subscription auth (e.g. ChatGPT Codex).
|
|
18
18
|
* - service_account: Google service-account JSON key (Vertex AI); signs a
|
|
@@ -46,8 +46,8 @@ export type Auth = z.infer<typeof AuthSchema>;
|
|
|
46
46
|
/**
|
|
47
47
|
* Derive the auth configuration a provider implies when a client omits an
|
|
48
48
|
* explicit `auth` object: keyless catalog providers (`setupMode: "keyless"`,
|
|
49
|
-
* e.g. ollama) need none, the Cadet
|
|
50
|
-
*
|
|
49
|
+
* e.g. ollama) need none, the Cadet Cloud sentinel routes via the
|
|
50
|
+
* cloud proxy, and every other provider authenticates by API key. Returns
|
|
51
51
|
* null when an API key is required but no credential was supplied, so route
|
|
52
52
|
* handlers can reject with a 400. `oauth_subscription` is never derived —
|
|
53
53
|
* the ChatGPT PKCE routes own that connection.
|
|
@@ -56,7 +56,7 @@ export function deriveAuthForProvider(
|
|
|
56
56
|
provider: string,
|
|
57
57
|
credential?: string,
|
|
58
58
|
): Auth | null {
|
|
59
|
-
if (provider ===
|
|
59
|
+
if (provider === CADET_CLOUD_PROVIDER) {
|
|
60
60
|
return { type: "platform" };
|
|
61
61
|
}
|
|
62
62
|
const entry = PROVIDER_CATALOG.find((p) => p.id === provider);
|
|
@@ -75,14 +75,14 @@ export function deriveAuthForProvider(
|
|
|
75
75
|
* The auth a connection dispatches with. The stored auth object is
|
|
76
76
|
* authoritative only where it carries a payload (an api_key credential ref,
|
|
77
77
|
* the oauth_subscription marker, a deliberately keyed keyless provider);
|
|
78
|
-
* the cadet provider IS the
|
|
78
|
+
* the cadet provider IS the cloud route, so its auth derives from the
|
|
79
79
|
* provider and the stored value can never mislead dispatch.
|
|
80
80
|
*/
|
|
81
81
|
export function effectiveConnectionAuth(connection: {
|
|
82
82
|
provider: string;
|
|
83
83
|
auth: Auth;
|
|
84
84
|
}): Auth {
|
|
85
|
-
return connection.provider ===
|
|
85
|
+
return connection.provider === CADET_CLOUD_PROVIDER
|
|
86
86
|
? { type: "platform" }
|
|
87
87
|
: connection.auth;
|
|
88
88
|
}
|
|
@@ -119,11 +119,11 @@ export type ResolvedAuth =
|
|
|
119
119
|
export const VALID_CONNECTION_PROVIDERS: readonly string[] = [
|
|
120
120
|
...new Set([
|
|
121
121
|
...PROVIDER_CATALOG.map((p) => p.id),
|
|
122
|
-
// The provider-agnostic Cadet
|
|
122
|
+
// The provider-agnostic Cadet Cloud connection stores this sentinel in
|
|
123
123
|
// its `provider` column. The same id owns Cadet-hosted GPU models in the
|
|
124
124
|
// catalog. Keep it allowlisted explicitly so a future catalog rename
|
|
125
125
|
// cannot drop persisted `cadet` rows from the DB loaders.
|
|
126
|
-
|
|
126
|
+
CADET_CLOUD_PROVIDER,
|
|
127
127
|
// The ChatGPT-subscription row stores the "chatgpt" routing identity in
|
|
128
128
|
// its `provider` column: the row IS the subscription route (auth
|
|
129
129
|
// modality = provider identity), and dispatch derives the openai
|
|
@@ -233,7 +233,7 @@ export const ProviderConnectionSchema = z
|
|
|
233
233
|
createdAt: z.number().int(),
|
|
234
234
|
updatedAt: z.number().int(),
|
|
235
235
|
/**
|
|
236
|
-
* Whether this row is the Cadet
|
|
236
|
+
* Whether this row is the Cadet Cloud connection (`cadet`). Derived from
|
|
237
237
|
* `MANAGED_CONNECTION_NAMES` in `connections.ts` at serialize time; the
|
|
238
238
|
* DB column does not exist. Clients use this to render the read-only
|
|
239
239
|
* "Cadet" badge + view-only editor and to disable the delete affordance
|
|
@@ -18,18 +18,19 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import { MANAGED_PROFILE_NAMES } from "../../config/default-profile-catalog.js";
|
|
21
|
+
import { getIsCloud } from "../../config/env-registry.js";
|
|
21
22
|
import { loadRawConfig, saveRawConfig } from "../../config/loader.js";
|
|
22
23
|
import type { DrizzleDb } from "../../persistence/db-connection.js";
|
|
23
24
|
import { credentialKey } from "../../security/credential-key.js";
|
|
24
25
|
import { getLogger } from "../../util/logger.js";
|
|
25
|
-
import {
|
|
26
|
+
import { CLOUD_ROUTABLE_PROVIDERS } from "../cadet-model-routing.js";
|
|
26
27
|
import { isConnectionCompatibleWithModel } from "../connection-model-compat.js";
|
|
27
28
|
import {
|
|
28
29
|
PROVIDERS_REQUIRING_BASE_URL_AND_MODELS,
|
|
29
30
|
ROUTING_IDENTITY_PROVIDERS,
|
|
30
31
|
} from "./auth.js";
|
|
31
32
|
import {
|
|
32
|
-
|
|
33
|
+
CADET_CLOUD_CONNECTION_NAME,
|
|
33
34
|
createConnection,
|
|
34
35
|
getConnection,
|
|
35
36
|
listConnections,
|
|
@@ -73,9 +74,8 @@ function backfillConfigProfiles(db: DrizzleDb): void {
|
|
|
73
74
|
return;
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
const globalMode = isPlatform ? "managed" : "your-own";
|
|
77
|
+
const isCloud = getIsCloud();
|
|
78
|
+
const globalMode = isCloud ? "managed" : "your-own";
|
|
79
79
|
|
|
80
80
|
let changed = false;
|
|
81
81
|
|
|
@@ -200,14 +200,14 @@ function ensureProviderConnection(
|
|
|
200
200
|
// For user-owned entries, an existing connection for the entry's provider
|
|
201
201
|
// wins over the mode-derived default. Only user-brought connections can
|
|
202
202
|
// match — the canonical `cadet` row carries the `cadet` sentinel
|
|
203
|
-
// provider, never a concrete upstream. Without this, the
|
|
203
|
+
// provider, never a concrete upstream. Without this, the cloud branch
|
|
204
204
|
// would silently switch a connection-less BYOK-intent profile onto the
|
|
205
|
-
// billed
|
|
205
|
+
// billed cloud connection, and the your-own branch would create a
|
|
206
206
|
// parallel `-personal` row (pointing at an empty credential slot) when a
|
|
207
207
|
// custom-named connection already exists.
|
|
208
208
|
//
|
|
209
|
-
// Managed-owned entries are excluded: a
|
|
210
|
-
//
|
|
209
|
+
// Managed-owned entries are excluded: a cloud preset must stay on the
|
|
210
|
+
// cloud route, not start dispatching against a key the user
|
|
211
211
|
// brought for their own profiles. Managed-owned means `source: "managed"`
|
|
212
212
|
// or a canonical managed name without an explicit `source: "user"` —
|
|
213
213
|
// legacy seeders wrote canonical entries source-less, and only an explicit
|
|
@@ -228,12 +228,12 @@ function ensureProviderConnection(
|
|
|
228
228
|
connectionName = existingForProvider.name;
|
|
229
229
|
} else if (
|
|
230
230
|
globalMode === "managed" &&
|
|
231
|
-
|
|
231
|
+
CLOUD_ROUTABLE_PROVIDERS.has(provider)
|
|
232
232
|
) {
|
|
233
233
|
// All managed-routable providers share the single provider-agnostic
|
|
234
234
|
// `cadet` connection; the upstream is recovered per-request from the
|
|
235
235
|
// profile's `provider` field.
|
|
236
|
-
connectionName =
|
|
236
|
+
connectionName = CADET_CLOUD_CONNECTION_NAME;
|
|
237
237
|
} else {
|
|
238
238
|
// "your-own" path (or provider not managed-supported): ensure a
|
|
239
239
|
// personal connection exists. Ollama is keyless, so it gets
|
|
@@ -20,11 +20,12 @@ import { getDb } from "../../persistence/db-connection.js";
|
|
|
20
20
|
import { credentialKey } from "../../security/credential-key.js";
|
|
21
21
|
import { getSecureKeyResultAsync } from "../../security/secure-keys.js";
|
|
22
22
|
import {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
CADET_CLOUD_CONNECTION_NAME,
|
|
24
|
+
CADET_CLOUD_PROVIDER,
|
|
25
|
+
CLOUD_ROUTABLE_PROVIDERS,
|
|
26
|
+
isCadetCloudConnection,
|
|
27
27
|
} from "../cadet-model-routing.js";
|
|
28
|
+
import { resolveCloudProxyContext } from "../cloud-proxy/context.js";
|
|
28
29
|
import {
|
|
29
30
|
describeSubscriptionModelIncompatibility,
|
|
30
31
|
isConnectionCompatibleWithModel,
|
|
@@ -34,7 +35,6 @@ import {
|
|
|
34
35
|
resolveEntryConnectionName,
|
|
35
36
|
} from "../connection-resolution.js";
|
|
36
37
|
import { PROVIDER_CATALOG } from "../model-catalog.js";
|
|
37
|
-
import { resolveManagedProxyContext } from "../platform-proxy/context.js";
|
|
38
38
|
import {
|
|
39
39
|
ConnectionResolutionError,
|
|
40
40
|
resolveRoutingIdentity,
|
|
@@ -70,17 +70,17 @@ export interface ConnectionAvailability {
|
|
|
70
70
|
const SETTINGS_HINT = "in Settings → Models & Services";
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
|
-
* Availability of the Cadet
|
|
73
|
+
* Availability of the Cadet Cloud cloud proxy: signed in and reachable.
|
|
74
74
|
*/
|
|
75
75
|
export async function cadetConnectionAvailability(): Promise<ConnectionAvailability> {
|
|
76
|
-
const ctx = await
|
|
76
|
+
const ctx = await resolveCloudProxyContext();
|
|
77
77
|
if (ctx.enabled) {
|
|
78
78
|
return { status: "ok" };
|
|
79
79
|
}
|
|
80
|
-
if (!ctx.
|
|
80
|
+
if (!ctx.cloudBaseUrl) {
|
|
81
81
|
return {
|
|
82
82
|
status: "cadet_unauthenticated",
|
|
83
|
-
message: "Not signed in to Cadet — the
|
|
83
|
+
message: "Not signed in to Cadet — the cloud URL is not configured.",
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
86
|
// The context collapses an unreachable credential read into "no key";
|
|
@@ -101,17 +101,17 @@ export async function cadetConnectionAvailability(): Promise<ConnectionAvailabil
|
|
|
101
101
|
return {
|
|
102
102
|
status: "cadet_unauthenticated",
|
|
103
103
|
message:
|
|
104
|
-
"Not signed in to Cadet — no assistant API key is stored. Log in to use Cadet
|
|
104
|
+
"Not signed in to Cadet — no assistant API key is stored. Log in to use Cadet Cloud inference.",
|
|
105
105
|
};
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
function
|
|
108
|
+
function cadetCloudMismatch(
|
|
109
109
|
resolvedConnectionName: string,
|
|
110
110
|
provider: string,
|
|
111
111
|
): ConnectionAvailability {
|
|
112
112
|
return {
|
|
113
113
|
status: "provider_mismatch",
|
|
114
|
-
message: `Connection "${resolvedConnectionName}" is the Cadet
|
|
114
|
+
message: `Connection "${resolvedConnectionName}" is the Cadet Cloud connection, which cannot serve provider "${provider}". Pick a connection for "${provider}" ${SETTINGS_HINT}.`,
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
117
|
|
|
@@ -146,23 +146,23 @@ export async function computeConnectionAvailability(
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
// Mirror the dispatch-time provider check (`tryResolveProviderForConnectionName`):
|
|
149
|
-
// the provider-agnostic Cadet
|
|
150
|
-
// providers via
|
|
149
|
+
// the provider-agnostic Cadet Cloud connection routes managed-routable
|
|
150
|
+
// providers via cloud auth; any other provider mismatch fails there, so
|
|
151
151
|
// usable credentials must not read as ok.
|
|
152
|
-
if (
|
|
152
|
+
if (isCadetCloudConnection(connection)) {
|
|
153
153
|
if (
|
|
154
|
-
provider ===
|
|
155
|
-
|
|
154
|
+
provider === CADET_CLOUD_PROVIDER ||
|
|
155
|
+
CLOUD_ROUTABLE_PROVIDERS.has(provider)
|
|
156
156
|
) {
|
|
157
157
|
return cadetConnectionAvailability();
|
|
158
158
|
}
|
|
159
|
-
return
|
|
159
|
+
return cadetCloudMismatch(resolvedConnectionName, provider);
|
|
160
160
|
}
|
|
161
161
|
// Everything routed through the canonical name dispatches on platform auth,
|
|
162
|
-
// never on a claiming row's credentials, so the
|
|
163
|
-
// answer. Scoped to that name: a
|
|
162
|
+
// never on a claiming row's credentials, so the cloud's own status is the
|
|
163
|
+
// answer. Scoped to that name: a cloud default explicitly pinned to some
|
|
164
164
|
// other row is a real misconfiguration and still reads as a mismatch below.
|
|
165
|
-
if (resolvedConnectionName ===
|
|
165
|
+
if (resolvedConnectionName === CADET_CLOUD_CONNECTION_NAME) {
|
|
166
166
|
return cadetConnectionAvailability();
|
|
167
167
|
}
|
|
168
168
|
// The ChatGPT-subscription row stores the "chatgpt" identity while its
|
|
@@ -228,10 +228,10 @@ export async function computeConnectionAvailability(
|
|
|
228
228
|
};
|
|
229
229
|
}
|
|
230
230
|
case "platform":
|
|
231
|
-
// The
|
|
232
|
-
// (`resolveAuth` → `
|
|
231
|
+
// The cloud proxy only serves managed-routable upstreams
|
|
232
|
+
// (`resolveAuth` → `buildCloudBaseUrl` has no proxy path for the
|
|
233
233
|
// rest), so platform auth on e.g. openrouter can never dispatch.
|
|
234
|
-
if (
|
|
234
|
+
if (CLOUD_ROUTABLE_PROVIDERS.has(provider)) {
|
|
235
235
|
return cadetConnectionAvailability();
|
|
236
236
|
}
|
|
237
237
|
return {
|
|
@@ -6,13 +6,13 @@ import { providerConnections } from "../../persistence/schema/inference.js";
|
|
|
6
6
|
import { normalizeCredentialRef } from "../../security/credential-key.js";
|
|
7
7
|
import { getLogger } from "../../util/logger.js";
|
|
8
8
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
CADET_CLOUD_CONNECTION_NAME,
|
|
10
|
+
CADET_CLOUD_PROVIDER,
|
|
11
|
+
isCadetCloudConnection,
|
|
12
12
|
} from "../cadet-model-routing.js";
|
|
13
13
|
import { clearConnectionProviderCache } from "../registry.js";
|
|
14
14
|
|
|
15
|
-
export {
|
|
15
|
+
export { CADET_CLOUD_CONNECTION_NAME };
|
|
16
16
|
import {
|
|
17
17
|
type Auth,
|
|
18
18
|
AuthSchema,
|
|
@@ -28,20 +28,18 @@ import {
|
|
|
28
28
|
const log = getLogger("providers/inference/connections");
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
* Whether a row is one of the
|
|
31
|
+
* Whether a row is one of the cloud connections, judged by the row and not
|
|
32
32
|
* by its name alone. Boot seeding leaves a user-owned row claiming a canonical
|
|
33
33
|
* name in place, and that row is an ordinary connection: routing ignores it,
|
|
34
34
|
* the route layer lets it be edited and deleted, and clients must render it
|
|
35
35
|
* that way or the collision becomes unrecoverable from the UI.
|
|
36
36
|
*/
|
|
37
|
-
function
|
|
37
|
+
function isCloudRow(row: {
|
|
38
38
|
name: string;
|
|
39
39
|
provider: string;
|
|
40
40
|
auth: { type: string };
|
|
41
41
|
}): boolean {
|
|
42
|
-
return (
|
|
43
|
-
MANAGED_CONNECTION_NAMES.has(row.name) && isCadetManagedConnection(row)
|
|
44
|
-
);
|
|
42
|
+
return MANAGED_CONNECTION_NAMES.has(row.name) && isCadetCloudConnection(row);
|
|
45
43
|
}
|
|
46
44
|
|
|
47
45
|
// ---------------------------------------------------------------------------
|
|
@@ -110,7 +108,7 @@ export function listConnections(
|
|
|
110
108
|
label: row.label ?? null,
|
|
111
109
|
baseUrl: row.baseUrl ?? null,
|
|
112
110
|
models: parseModelsColumn(row.models),
|
|
113
|
-
isManaged:
|
|
111
|
+
isManaged: isCloudRow({ ...row, provider: provider.data, auth }),
|
|
114
112
|
},
|
|
115
113
|
];
|
|
116
114
|
});
|
|
@@ -144,7 +142,7 @@ export function getConnection(
|
|
|
144
142
|
label: row.label ?? null,
|
|
145
143
|
baseUrl: row.baseUrl ?? null,
|
|
146
144
|
models: parseModelsColumn(row.models),
|
|
147
|
-
isManaged:
|
|
145
|
+
isManaged: isCloudRow({ ...row, provider: provider.data, auth }),
|
|
148
146
|
};
|
|
149
147
|
}
|
|
150
148
|
|
|
@@ -265,7 +263,7 @@ export function createConnection(
|
|
|
265
263
|
models,
|
|
266
264
|
createdAt: now,
|
|
267
265
|
updatedAt: now,
|
|
268
|
-
isManaged:
|
|
266
|
+
isManaged: isCloudRow({ name: input.name, provider, auth }),
|
|
269
267
|
},
|
|
270
268
|
};
|
|
271
269
|
}
|
|
@@ -353,7 +351,7 @@ export function updateConnection(
|
|
|
353
351
|
baseUrl: nextBaseUrl,
|
|
354
352
|
models: nextModels,
|
|
355
353
|
updatedAt: now,
|
|
356
|
-
isManaged:
|
|
354
|
+
isManaged: isCloudRow({ name, provider: nextProvider, auth }),
|
|
357
355
|
},
|
|
358
356
|
};
|
|
359
357
|
}
|
|
@@ -427,15 +425,15 @@ const CANONICAL_CONNECTIONS: Array<{
|
|
|
427
425
|
label: string;
|
|
428
426
|
}> = [
|
|
429
427
|
{
|
|
430
|
-
name:
|
|
431
|
-
provider:
|
|
428
|
+
name: CADET_CLOUD_CONNECTION_NAME,
|
|
429
|
+
provider: CADET_CLOUD_PROVIDER,
|
|
432
430
|
auth: { type: "platform" },
|
|
433
431
|
label: "Cadet",
|
|
434
432
|
},
|
|
435
433
|
];
|
|
436
434
|
|
|
437
435
|
/**
|
|
438
|
-
* The Cadet
|
|
436
|
+
* The Cadet Cloud connection as boot seeding defines it, built without a DB
|
|
439
437
|
* read. Dispatch uses this when the `cadet` name is occupied by a user-owned
|
|
440
438
|
* row: seeding refuses to overwrite such a row, so the canonical row can be
|
|
441
439
|
* absent from the DB while managed routing still has to work. Platform auth
|
|
@@ -458,15 +456,15 @@ export function canonicalCadetConnection(): ProviderConnection {
|
|
|
458
456
|
}
|
|
459
457
|
|
|
460
458
|
/**
|
|
461
|
-
* Names of the canonical Cadet
|
|
462
|
-
* boot via `seedCanonicalConnections` and representing the
|
|
459
|
+
* Names of the canonical Cadet Cloud connections. Seeded on every daemon
|
|
460
|
+
* boot via `seedCanonicalConnections` and representing the cloud-managed
|
|
463
461
|
* inference route. They are write-protected at the route layer:
|
|
464
462
|
* - DELETE is blocked outright (would resurrect on next boot anyway, but
|
|
465
463
|
* blocking prevents a confusing delete → re-appear loop).
|
|
466
464
|
* - PATCH that changes `auth` is blocked (auth is locked to `{type:"platform"}`
|
|
467
465
|
* so any other value would be reverted on the next boot upsert).
|
|
468
466
|
* - PATCH that changes `label` is allowed — users may legitimately relabel the
|
|
469
|
-
*
|
|
467
|
+
* cloud connection. `label` is seeded on initial INSERT and backfilled when
|
|
470
468
|
* null on subsequent boots so pre-seed installs pick up the default; a non-null
|
|
471
469
|
* user-customized label is preserved (see `seedCanonicalConnections`).
|
|
472
470
|
*
|
|
@@ -495,7 +493,7 @@ export function seedCanonicalConnections(db: DrizzleDb): void {
|
|
|
495
493
|
// canonical name. `cadet` was not a reserved name before consolidation, so
|
|
496
494
|
// an install may already have a BYOK connection keyed `cadet` (with a real
|
|
497
495
|
// provider + api_key auth). Upserting it here would silently rewrite it to
|
|
498
|
-
// the
|
|
496
|
+
// the cloud-auth sentinel and make it managed/write-protected, breaking
|
|
499
497
|
// any profile that references the user's connection. Only seed/refresh when
|
|
500
498
|
// the row is absent or already our sentinel (same provider).
|
|
501
499
|
const existing = db
|
|
@@ -119,7 +119,7 @@ function checkMessage(check: {
|
|
|
119
119
|
/**
|
|
120
120
|
* Probe a saved profile with one minimal request. Returns `null` when there
|
|
121
121
|
* is no verdict to give: the profile does not exist or is disabled, it rides
|
|
122
|
-
* a
|
|
122
|
+
* a cloud or routing-identity route (probing would bill managed credits),
|
|
123
123
|
* or the probe timed out without an answer.
|
|
124
124
|
*/
|
|
125
125
|
export async function probeInferenceProfile(
|
|
@@ -164,7 +164,7 @@ export async function probeInferenceProfile(
|
|
|
164
164
|
// Billing guards run on the fully resolved call-site config — the same
|
|
165
165
|
// composition dispatch consumes (mix arm expanded, call-site overrides
|
|
166
166
|
// applied) — so neither a mix nor an `llm.callSites.inference` provider
|
|
167
|
-
// tweak can route the probe onto a
|
|
167
|
+
// tweak can route the probe onto a cloud or platform-billed path the
|
|
168
168
|
// stored entry hid. Same seed as the dispatch below, so the judged arm is
|
|
169
169
|
// the dispatched arm.
|
|
170
170
|
const resolved = resolveCallSiteConfig("inference", llm, {
|
|
@@ -184,7 +184,7 @@ export async function probeInferenceProfile(
|
|
|
184
184
|
return null;
|
|
185
185
|
}
|
|
186
186
|
// A legacy profile can declare a concrete provider while staying bound to
|
|
187
|
-
// a
|
|
187
|
+
// a cloud-billed connection row; the row's auth is the billing fact, so
|
|
188
188
|
// it gates the probe too.
|
|
189
189
|
const boundRow = connection ? getConnection(getDb(), connection) : null;
|
|
190
190
|
if (boundRow?.auth.type === "platform") {
|
|
@@ -213,7 +213,7 @@ export async function probeInferenceProfile(
|
|
|
213
213
|
// getConfiguredProvider, so only the stamped attribution names the row
|
|
214
214
|
// this request would sign with.
|
|
215
215
|
const route = providerInstance.routeAttribution;
|
|
216
|
-
if (route?.
|
|
216
|
+
if (route?.isCloudRoute) {
|
|
217
217
|
return null;
|
|
218
218
|
}
|
|
219
219
|
const routedRow = route?.connectionName
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Resolution rules:
|
|
5
5
|
* - api_key → fetch credential from vault → inject as bearer header
|
|
6
|
-
* - platform → build
|
|
6
|
+
* - platform → build cloud proxy URL and fetch the cloud API key
|
|
7
7
|
* - none → pass through with no auth headers
|
|
8
8
|
* - oauth_subscription → fetch OAuth token from vault (with auto-refresh) → inject as bearer header
|
|
9
9
|
* - service_account → sign JWT and exchange for bearer token at token_uri (Google Vertex AI)
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
import { getSecureKeyAsync } from "../../security/secure-keys.js";
|
|
13
13
|
import { getLogger } from "../../util/logger.js";
|
|
14
14
|
import {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from "../
|
|
15
|
+
buildCloudBaseUrl,
|
|
16
|
+
resolveCloudProxyContext,
|
|
17
|
+
} from "../cloud-proxy/context.js";
|
|
18
18
|
import {
|
|
19
19
|
type Auth,
|
|
20
20
|
PROVIDERS_ALLOWING_CUSTOM_BASE_URL,
|
|
@@ -68,17 +68,17 @@ export async function resolveAuth(
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
case "platform": {
|
|
71
|
-
const
|
|
72
|
-
if (!
|
|
71
|
+
const cloudBaseUrl = await buildCloudBaseUrl(provider);
|
|
72
|
+
if (!cloudBaseUrl) {
|
|
73
73
|
return { ok: false, error: { code: "platform_unavailable" } };
|
|
74
74
|
}
|
|
75
|
-
const ctx = await
|
|
75
|
+
const ctx = await resolveCloudProxyContext();
|
|
76
76
|
return {
|
|
77
77
|
ok: true,
|
|
78
78
|
resolved: {
|
|
79
79
|
kind: "header",
|
|
80
80
|
headers: { Authorization: `Bearer ${ctx.assistantApiKey}` },
|
|
81
|
-
baseUrl:
|
|
81
|
+
baseUrl: cloudBaseUrl,
|
|
82
82
|
},
|
|
83
83
|
};
|
|
84
84
|
}
|