@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,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CadetCloudClient } from "../cloud/client.js";
|
|
2
2
|
import { BackendError } from "../util/errors.js";
|
|
3
3
|
import { getLogger } from "../util/logger.js";
|
|
4
4
|
import { getHttpRetryDelay, isRetryableStatus, sleep } from "../util/retry.js";
|
|
@@ -36,7 +36,7 @@ export class ProviderUnreachableError extends BackendError {
|
|
|
36
36
|
|
|
37
37
|
export class InsufficientBalanceError extends BackendError {
|
|
38
38
|
constructor(
|
|
39
|
-
message = "Your Cadet account balance is too low to use this
|
|
39
|
+
message = "Your Cadet account balance is too low to use this cloud OAuth connection. " +
|
|
40
40
|
"You can add funds or switch to using your own OAuth app.",
|
|
41
41
|
) {
|
|
42
42
|
super(message);
|
|
@@ -45,9 +45,9 @@ export class InsufficientBalanceError extends BackendError {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
|
-
* Request options the
|
|
48
|
+
* Request options the cloud proxy cannot honor. It parses the response
|
|
49
49
|
* body, rebuilds the query string from the parsed record, and follows provider
|
|
50
|
-
* redirects server-side, so a
|
|
50
|
+
* redirects server-side, so a cloud connection answers with re-serialized
|
|
51
51
|
* JSON, a regrouped query, and the redirect target's response. A caller that
|
|
52
52
|
* needs the provider's exact bytes, its exact query string, or a verbatim 3xx
|
|
53
53
|
* needs a BYO connection.
|
|
@@ -71,7 +71,7 @@ const MANAGED_PROXY_REQUEST_HEADERS = new Set([
|
|
|
71
71
|
]);
|
|
72
72
|
|
|
73
73
|
/** Node fetch defaults can be dropped; other unsupported headers need caller handling. */
|
|
74
|
-
export function
|
|
74
|
+
export function prepareCloudProxyHeaders(headers: Record<string, string>): {
|
|
75
75
|
headers: Record<string, string>;
|
|
76
76
|
unsupportedHeaders: string[];
|
|
77
77
|
} {
|
|
@@ -91,12 +91,12 @@ export function prepareManagedProxyHeaders(headers: Record<string, string>): {
|
|
|
91
91
|
return { headers: forwarded, unsupportedHeaders: unsupportedHeaders.sort() };
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
export interface
|
|
94
|
+
export interface CloudOAuthConnectionOptions {
|
|
95
95
|
id: string;
|
|
96
96
|
provider: string;
|
|
97
97
|
externalId: string;
|
|
98
98
|
accountInfo: string | null;
|
|
99
|
-
client:
|
|
99
|
+
client: CadetCloudClient;
|
|
100
100
|
/** Platform-side connection ID used in the proxy URL path. */
|
|
101
101
|
connectionId: string;
|
|
102
102
|
/** Provider API base URL (e.g. "https://gmail.googleapis.com/gmail/v1/users/me").
|
|
@@ -104,20 +104,20 @@ export interface PlatformOAuthConnectionOptions {
|
|
|
104
104
|
baseUrl?: string;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
export class
|
|
107
|
+
export class CloudOAuthConnection implements OAuthConnection {
|
|
108
108
|
readonly id: string;
|
|
109
109
|
readonly provider: string;
|
|
110
110
|
readonly externalId: string;
|
|
111
111
|
readonly accountInfo: string | null;
|
|
112
112
|
|
|
113
|
-
private readonly client:
|
|
113
|
+
private readonly client: CadetCloudClient;
|
|
114
114
|
private readonly connectionId: string;
|
|
115
115
|
private readonly baseUrl: string | undefined;
|
|
116
116
|
|
|
117
|
-
constructor(options:
|
|
117
|
+
constructor(options: CloudOAuthConnectionOptions) {
|
|
118
118
|
if (!options.connectionId) {
|
|
119
119
|
throw new BackendError(
|
|
120
|
-
`
|
|
120
|
+
`Cloud connection for "${options.provider}" cannot be created: missing connection ID. ` +
|
|
121
121
|
`Log in to Cadet Cloud or switch to using your own OAuth app.`,
|
|
122
122
|
);
|
|
123
123
|
}
|
|
@@ -132,7 +132,7 @@ export class PlatformOAuthConnection implements OAuthConnection {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
async request(req: OAuthConnectionRequest): Promise<OAuthConnectionResponse> {
|
|
135
|
-
const proxyPath = `/v1/assistants/${this.client.
|
|
135
|
+
const proxyPath = `/v1/assistants/${this.client.cloudAssistantId}/external-provider-proxy/${this.connectionId}/`;
|
|
136
136
|
|
|
137
137
|
// The envelope carries the caller's headers and body side by side. A
|
|
138
138
|
// string body is placed in the envelope as a string, so the proxy forwards
|
|
@@ -164,7 +164,7 @@ export class PlatformOAuthConnection implements OAuthConnection {
|
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
// A retry replays the whole request upstream, and a 502 arrives only after
|
|
167
|
-
// the
|
|
167
|
+
// the cloud already called the provider, so a caller forwarding a write
|
|
168
168
|
// it cannot repeat gets a single attempt.
|
|
169
169
|
const retriesAllowed = req.singleAttempt === true ? 0 : MAX_RETRIES;
|
|
170
170
|
|
|
@@ -192,8 +192,8 @@ export class PlatformOAuthConnection implements OAuthConnection {
|
|
|
192
192
|
attempt < retriesAllowed
|
|
193
193
|
) {
|
|
194
194
|
log.warn(
|
|
195
|
-
{ status: response.status, attempt, provider: "
|
|
196
|
-
`Retryable status ${response.status} from
|
|
195
|
+
{ status: response.status, attempt, provider: "cloud-proxy" },
|
|
196
|
+
`Retryable status ${response.status} from cloud proxy (attempt ${attempt + 1}/${retriesAllowed + 1})`,
|
|
197
197
|
);
|
|
198
198
|
await sleep(getHttpRetryDelay(response, attempt));
|
|
199
199
|
continue;
|
|
@@ -219,7 +219,7 @@ export class PlatformOAuthConnection implements OAuthConnection {
|
|
|
219
219
|
body_encoding?: string | null;
|
|
220
220
|
};
|
|
221
221
|
|
|
222
|
-
return
|
|
222
|
+
return decodeCloudProxyEnvelope(json);
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
throw new BackendError("Platform proxy request failed after retries");
|
|
@@ -227,12 +227,12 @@ export class PlatformOAuthConnection implements OAuthConnection {
|
|
|
227
227
|
|
|
228
228
|
async withToken<T>(_fn: (token: string) => Promise<T>): Promise<T> {
|
|
229
229
|
throw new BackendError(
|
|
230
|
-
"Raw token access is not supported for
|
|
230
|
+
"Raw token access is not supported for cloud connections. Use connection.request() instead.",
|
|
231
231
|
);
|
|
232
232
|
}
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
function
|
|
235
|
+
function decodeCloudProxyEnvelope(json: {
|
|
236
236
|
status: number;
|
|
237
237
|
headers: Record<string, string>;
|
|
238
238
|
body: unknown;
|
|
@@ -240,7 +240,7 @@ function decodePlatformProxyEnvelope(json: {
|
|
|
240
240
|
}): OAuthConnectionResponse {
|
|
241
241
|
// A status outside the range `Response` accepts cannot be emitted, and
|
|
242
242
|
// clamping it would attribute a status to the provider that it never sent,
|
|
243
|
-
// so an unusable envelope fails as a
|
|
243
|
+
// so an unusable envelope fails as a cloud fault instead.
|
|
244
244
|
const { status } = json;
|
|
245
245
|
if (
|
|
246
246
|
!Number.isInteger(status) ||
|
|
@@ -10,7 +10,7 @@ let mockConnections:
|
|
|
10
10
|
| Array<Record<string, unknown> & { clientId?: string; accountInfo?: string }>
|
|
11
11
|
| undefined;
|
|
12
12
|
let mockAccessToken: string | undefined;
|
|
13
|
-
let
|
|
13
|
+
let mockCloudClient: Record<string, unknown> | null = null;
|
|
14
14
|
let syncManualTokenCalls: string[] = [];
|
|
15
15
|
|
|
16
16
|
// ---------------------------------------------------------------------------
|
|
@@ -60,9 +60,9 @@ mock.module("./manual-token-connection.js", () => ({
|
|
|
60
60
|
},
|
|
61
61
|
}));
|
|
62
62
|
|
|
63
|
-
mock.module("../
|
|
64
|
-
|
|
65
|
-
create: async () =>
|
|
63
|
+
mock.module("../cloud/client.js", () => ({
|
|
64
|
+
CadetCloudClient: {
|
|
65
|
+
create: async () => mockCloudClient,
|
|
66
66
|
},
|
|
67
67
|
}));
|
|
68
68
|
|
|
@@ -72,15 +72,15 @@ mock.module("../platform/client.js", () => ({
|
|
|
72
72
|
|
|
73
73
|
import { setConfig } from "../__tests__/helpers/set-config.js";
|
|
74
74
|
import { BYOOAuthConnection } from "./byo-connection.js";
|
|
75
|
+
import { CloudOAuthConnection } from "./cloud-connection.js";
|
|
75
76
|
import {
|
|
77
|
+
cloudProxyBaseUrl,
|
|
76
78
|
formatNoConnectionError,
|
|
77
|
-
platformProxyBaseUrl,
|
|
78
79
|
resolveEffectiveBaseUrl,
|
|
79
80
|
resolveOAuthConnection,
|
|
80
81
|
resolveOAuthConnectionWithMeta,
|
|
81
82
|
resolveTokenHeader,
|
|
82
83
|
} from "./connection-resolver.js";
|
|
83
|
-
import { PlatformOAuthConnection } from "./platform-connection.js";
|
|
84
84
|
|
|
85
85
|
/** Seed `services.<key>.mode` entries into the workspace config for real. */
|
|
86
86
|
function seedServiceModes(modes: Record<string, "managed" | "your-own">): void {
|
|
@@ -100,7 +100,7 @@ function makeMockClient() {
|
|
|
100
100
|
return {
|
|
101
101
|
baseUrl: "https://platform.example.com",
|
|
102
102
|
assistantApiKey: "sk-test-key",
|
|
103
|
-
|
|
103
|
+
cloudAssistantId: "asst-123",
|
|
104
104
|
fetch: mock(async () => {
|
|
105
105
|
return new Response(
|
|
106
106
|
JSON.stringify({
|
|
@@ -117,7 +117,7 @@ function setupDefaults(): void {
|
|
|
117
117
|
provider: "google",
|
|
118
118
|
baseUrl: "https://gmail.googleapis.com/gmail/v1/users/me",
|
|
119
119
|
authorizeUrl: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
120
|
-
|
|
120
|
+
cloudServiceConfigKey: null,
|
|
121
121
|
};
|
|
122
122
|
mockConnection = {
|
|
123
123
|
id: "conn-1",
|
|
@@ -131,7 +131,7 @@ function setupDefaults(): void {
|
|
|
131
131
|
mockAccessToken = "tok-valid";
|
|
132
132
|
seedServiceModes({ "google-oauth": "managed" });
|
|
133
133
|
mockConnections = undefined;
|
|
134
|
-
|
|
134
|
+
mockCloudClient = makeMockClient();
|
|
135
135
|
syncManualTokenCalls = [];
|
|
136
136
|
}
|
|
137
137
|
|
|
@@ -144,37 +144,37 @@ describe("resolveOAuthConnection", () => {
|
|
|
144
144
|
setupDefaults();
|
|
145
145
|
});
|
|
146
146
|
|
|
147
|
-
test("returns BYOOAuthConnection when provider has no
|
|
147
|
+
test("returns BYOOAuthConnection when provider has no cloudServiceConfigKey", async () => {
|
|
148
148
|
const result = await resolveOAuthConnection("google");
|
|
149
149
|
expect(result).toBeInstanceOf(BYOOAuthConnection);
|
|
150
150
|
expect(result.id).toBe("conn-1");
|
|
151
151
|
expect(result.provider).toBe("google");
|
|
152
152
|
});
|
|
153
153
|
|
|
154
|
-
test("returns
|
|
155
|
-
mockProvider!.
|
|
154
|
+
test("returns CloudOAuthConnection when managed mode is active", async () => {
|
|
155
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
156
156
|
|
|
157
157
|
const result = await resolveOAuthConnection("google");
|
|
158
|
-
expect(result).toBeInstanceOf(
|
|
158
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
159
159
|
expect(result.id).toBe("google");
|
|
160
160
|
expect(result.provider).toBe("google");
|
|
161
161
|
expect(result.accountInfo).toBeNull();
|
|
162
162
|
});
|
|
163
163
|
|
|
164
|
-
test("passes account through to
|
|
165
|
-
mockProvider!.
|
|
164
|
+
test("passes account through to CloudOAuthConnection", async () => {
|
|
165
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
166
166
|
|
|
167
167
|
const result = await resolveOAuthConnection("google", {
|
|
168
168
|
account: "user@example.com",
|
|
169
169
|
});
|
|
170
|
-
expect(result).toBeInstanceOf(
|
|
170
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
171
171
|
expect(result.accountInfo).toBe("user@example.com");
|
|
172
172
|
});
|
|
173
173
|
|
|
174
174
|
test("managed path falls back to displayed account label when account_identifier does not match", async () => {
|
|
175
|
-
mockProvider!.
|
|
175
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
176
176
|
const fetchPaths: string[] = [];
|
|
177
|
-
|
|
177
|
+
mockCloudClient = {
|
|
178
178
|
...makeMockClient(),
|
|
179
179
|
fetch: mock(async (path: string) => {
|
|
180
180
|
fetchPaths.push(path);
|
|
@@ -199,7 +199,7 @@ describe("resolveOAuthConnection", () => {
|
|
|
199
199
|
account: "alice@example.com",
|
|
200
200
|
});
|
|
201
201
|
|
|
202
|
-
expect(result).toBeInstanceOf(
|
|
202
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
203
203
|
expect(result.accountInfo).toBe("alice@example.com");
|
|
204
204
|
expect(fetchPaths).toEqual([
|
|
205
205
|
"/v1/assistants/asst-123/oauth/connections/?provider=google&status=ACTIVE&account_identifier=alice%40example.com",
|
|
@@ -207,19 +207,19 @@ describe("resolveOAuthConnection", () => {
|
|
|
207
207
|
]);
|
|
208
208
|
});
|
|
209
209
|
|
|
210
|
-
test("returns
|
|
210
|
+
test("returns CloudOAuthConnection when GitHub is in managed mode", async () => {
|
|
211
211
|
mockProvider!.provider = "github";
|
|
212
|
-
mockProvider!.
|
|
212
|
+
mockProvider!.cloudServiceConfigKey = "github-oauth";
|
|
213
213
|
seedServiceModes({ "google-oauth": "managed", "github-oauth": "managed" });
|
|
214
214
|
|
|
215
215
|
const result = await resolveOAuthConnection("github");
|
|
216
|
-
expect(result).toBeInstanceOf(
|
|
216
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
217
217
|
expect(result.id).toBe("github");
|
|
218
218
|
expect(result.provider).toBe("github");
|
|
219
219
|
});
|
|
220
220
|
|
|
221
221
|
test("returns BYOOAuthConnection when service config mode is your-own", async () => {
|
|
222
|
-
mockProvider!.
|
|
222
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
223
223
|
seedServiceModes({ "google-oauth": "your-own" });
|
|
224
224
|
|
|
225
225
|
const result = await resolveOAuthConnection("google");
|
|
@@ -228,21 +228,21 @@ describe("resolveOAuthConnection", () => {
|
|
|
228
228
|
});
|
|
229
229
|
|
|
230
230
|
test("managed path does not require a local connection row", async () => {
|
|
231
|
-
mockProvider!.
|
|
231
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
232
232
|
mockConnection = undefined;
|
|
233
233
|
mockAccessToken = undefined;
|
|
234
234
|
|
|
235
235
|
const result = await resolveOAuthConnection("google");
|
|
236
|
-
expect(result).toBeInstanceOf(
|
|
236
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
237
237
|
});
|
|
238
238
|
|
|
239
239
|
test("managed path ignores clientId option", async () => {
|
|
240
|
-
mockProvider!.
|
|
240
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
241
241
|
|
|
242
242
|
const result = await resolveOAuthConnection("google", {
|
|
243
243
|
clientId: "some-client-id",
|
|
244
244
|
});
|
|
245
|
-
expect(result).toBeInstanceOf(
|
|
245
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
246
246
|
});
|
|
247
247
|
|
|
248
248
|
test("BYO path narrows by clientId when provided", async () => {
|
|
@@ -266,7 +266,7 @@ describe("resolveOAuthConnection", () => {
|
|
|
266
266
|
provider: "telegram",
|
|
267
267
|
baseUrl: "https://api.telegram.org",
|
|
268
268
|
authorizeUrl: "urn:manual-token",
|
|
269
|
-
|
|
269
|
+
cloudServiceConfigKey: null,
|
|
270
270
|
};
|
|
271
271
|
mockConnection = {
|
|
272
272
|
id: "conn-telegram",
|
|
@@ -310,11 +310,11 @@ describe("resolveOAuthConnection scope-awareness", () => {
|
|
|
310
310
|
|
|
311
311
|
beforeEach(() => {
|
|
312
312
|
setupDefaults();
|
|
313
|
-
mockProvider!.
|
|
313
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
314
314
|
});
|
|
315
315
|
|
|
316
316
|
test("managed: rejects a Calendar-only connection when Gmail scope is required", async () => {
|
|
317
|
-
|
|
317
|
+
mockCloudClient = clientReturning([
|
|
318
318
|
{ id: "cal-only", account_label: null, scopes_granted: CALENDAR_ONLY },
|
|
319
319
|
]);
|
|
320
320
|
|
|
@@ -324,18 +324,18 @@ describe("resolveOAuthConnection scope-awareness", () => {
|
|
|
324
324
|
});
|
|
325
325
|
|
|
326
326
|
test("managed: resolves when a connection carries the required Gmail scope", async () => {
|
|
327
|
-
|
|
327
|
+
mockCloudClient = clientReturning([
|
|
328
328
|
{ id: "full", account_label: null, scopes_granted: FULL_BUNDLE },
|
|
329
329
|
]);
|
|
330
330
|
|
|
331
331
|
const result = await resolveOAuthConnection("google", {
|
|
332
332
|
requiredScopes: [GMAIL_SCOPE],
|
|
333
333
|
});
|
|
334
|
-
expect(result).toBeInstanceOf(
|
|
334
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
335
335
|
});
|
|
336
336
|
|
|
337
337
|
test("managed: treats full Gmail access as covering Gmail read access", async () => {
|
|
338
|
-
|
|
338
|
+
mockCloudClient = clientReturning([
|
|
339
339
|
{
|
|
340
340
|
id: "full-gmail-access",
|
|
341
341
|
account_label: null,
|
|
@@ -346,19 +346,17 @@ describe("resolveOAuthConnection scope-awareness", () => {
|
|
|
346
346
|
const result = await resolveOAuthConnection("google", {
|
|
347
347
|
requiredScopes: [GMAIL_SCOPE],
|
|
348
348
|
});
|
|
349
|
-
expect(result).toBeInstanceOf(
|
|
349
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
350
350
|
});
|
|
351
351
|
|
|
352
352
|
test("managed: unknown scope data never blocks (back-compat)", async () => {
|
|
353
353
|
// Older connections report no scopes_granted — must not be rejected.
|
|
354
|
-
|
|
355
|
-
{ id: "legacy", account_label: null },
|
|
356
|
-
]);
|
|
354
|
+
mockCloudClient = clientReturning([{ id: "legacy", account_label: null }]);
|
|
357
355
|
|
|
358
356
|
const result = await resolveOAuthConnection("google", {
|
|
359
357
|
requiredScopes: [GMAIL_SCOPE],
|
|
360
358
|
});
|
|
361
|
-
expect(result).toBeInstanceOf(
|
|
359
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
362
360
|
});
|
|
363
361
|
|
|
364
362
|
test("managed: prefers a scope-satisfying connection over a narrow one", async () => {
|
|
@@ -366,24 +364,24 @@ describe("resolveOAuthConnection scope-awareness", () => {
|
|
|
366
364
|
{ id: "cal-only", account_label: null, scopes_granted: CALENDAR_ONLY },
|
|
367
365
|
{ id: "full", account_label: null, scopes_granted: FULL_BUNDLE },
|
|
368
366
|
]);
|
|
369
|
-
|
|
367
|
+
mockCloudClient = fullClient;
|
|
370
368
|
|
|
371
369
|
const result = await resolveOAuthConnection("google", {
|
|
372
370
|
requiredScopes: [GMAIL_SCOPE],
|
|
373
371
|
});
|
|
374
|
-
expect(result).toBeInstanceOf(
|
|
375
|
-
//
|
|
372
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
373
|
+
// CloudOAuthConnection is keyed by provider, so assert resolution
|
|
376
374
|
// succeeded (it would have thrown if only the narrow connection matched).
|
|
377
375
|
expect(result.provider).toBe("google");
|
|
378
376
|
});
|
|
379
377
|
|
|
380
378
|
test("managed: no requiredScopes preserves prior behavior", async () => {
|
|
381
|
-
|
|
379
|
+
mockCloudClient = clientReturning([
|
|
382
380
|
{ id: "cal-only", account_label: null, scopes_granted: CALENDAR_ONLY },
|
|
383
381
|
]);
|
|
384
382
|
|
|
385
383
|
const result = await resolveOAuthConnection("google");
|
|
386
|
-
expect(result).toBeInstanceOf(
|
|
384
|
+
expect(result).toBeInstanceOf(CloudOAuthConnection);
|
|
387
385
|
});
|
|
388
386
|
|
|
389
387
|
test("BYO: rejects when granted scopes are known and missing the requirement", async () => {
|
|
@@ -459,8 +457,8 @@ describe("resolveOAuthConnectionWithMeta multi-account visibility", () => {
|
|
|
459
457
|
});
|
|
460
458
|
|
|
461
459
|
test("managed: multiple connections + no account surfaces ambiguity and the selected label", async () => {
|
|
462
|
-
mockProvider!.
|
|
463
|
-
|
|
460
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
461
|
+
mockCloudClient = clientReturning([
|
|
464
462
|
{ id: "conn-personal", account_label: "user@example.com" },
|
|
465
463
|
{ id: "conn-work", account_label: "work@example.com" },
|
|
466
464
|
]);
|
|
@@ -475,8 +473,8 @@ describe("resolveOAuthConnectionWithMeta multi-account visibility", () => {
|
|
|
475
473
|
});
|
|
476
474
|
|
|
477
475
|
test("managed: account passed disambiguates and clears the warning", async () => {
|
|
478
|
-
mockProvider!.
|
|
479
|
-
|
|
476
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
477
|
+
mockCloudClient = clientReturning([
|
|
480
478
|
{ id: "conn-work", account_label: "work@example.com" },
|
|
481
479
|
]);
|
|
482
480
|
|
|
@@ -488,8 +486,8 @@ describe("resolveOAuthConnectionWithMeta multi-account visibility", () => {
|
|
|
488
486
|
});
|
|
489
487
|
|
|
490
488
|
test("managed: single connection is never ambiguous", async () => {
|
|
491
|
-
mockProvider!.
|
|
492
|
-
|
|
489
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
490
|
+
mockCloudClient = clientReturning([
|
|
493
491
|
{ id: "conn-only", account_label: "user@example.com" },
|
|
494
492
|
]);
|
|
495
493
|
|
|
@@ -632,8 +630,8 @@ describe("no-match error lists available accounts", () => {
|
|
|
632
630
|
});
|
|
633
631
|
|
|
634
632
|
test("managed: names the provider's active accounts when the requested account misses", async () => {
|
|
635
|
-
mockProvider!.
|
|
636
|
-
|
|
633
|
+
mockProvider!.cloudServiceConfigKey = "google-oauth";
|
|
634
|
+
mockCloudClient = clientReturning([
|
|
637
635
|
{ id: "conn-personal", account_label: "user@example.com" },
|
|
638
636
|
{ id: "conn-work", account_label: "other@example.org" },
|
|
639
637
|
]);
|
|
@@ -758,29 +756,29 @@ describe("resolveEffectiveBaseUrl", () => {
|
|
|
758
756
|
});
|
|
759
757
|
});
|
|
760
758
|
|
|
761
|
-
describe("
|
|
759
|
+
describe("cloudProxyBaseUrl", () => {
|
|
762
760
|
test("forwards a concrete seed base URL", () => {
|
|
763
|
-
expect(
|
|
761
|
+
expect(cloudProxyBaseUrl("https://api.figma.com")).toBe(
|
|
764
762
|
"https://api.figma.com",
|
|
765
763
|
);
|
|
766
764
|
});
|
|
767
765
|
|
|
768
|
-
test("withholds a templated base URL so the
|
|
766
|
+
test("withholds a templated base URL so the cloud fills it", () => {
|
|
769
767
|
// Shopify's host and QuickBooks' realm are pinned to the connection on
|
|
770
|
-
// the
|
|
771
|
-
// allowlist check and shadow the
|
|
772
|
-
expect(
|
|
768
|
+
// the cloud. Forwarding the unfilled template would fail the proxy's
|
|
769
|
+
// allowlist check and shadow the cloud's own default.
|
|
770
|
+
expect(cloudProxyBaseUrl("https://{tenant_host}")).toBeUndefined();
|
|
773
771
|
expect(
|
|
774
|
-
|
|
772
|
+
cloudProxyBaseUrl(
|
|
775
773
|
"https://quickbooks.api.intuit.com/v3/company/{realm_id}",
|
|
776
774
|
),
|
|
777
775
|
).toBeUndefined();
|
|
778
776
|
});
|
|
779
777
|
|
|
780
778
|
test("treats a missing base URL as no override", () => {
|
|
781
|
-
expect(
|
|
782
|
-
expect(
|
|
783
|
-
expect(
|
|
779
|
+
expect(cloudProxyBaseUrl(undefined)).toBeUndefined();
|
|
780
|
+
expect(cloudProxyBaseUrl(null)).toBeUndefined();
|
|
781
|
+
expect(cloudProxyBaseUrl("")).toBeUndefined();
|
|
784
782
|
});
|
|
785
783
|
});
|
|
786
784
|
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
+
import { CadetCloudClient } from "../cloud/client.js";
|
|
1
2
|
import { getConfig } from "../config/loader.js";
|
|
2
3
|
import {
|
|
3
4
|
getServiceMode,
|
|
4
5
|
type Services,
|
|
5
6
|
ServicesSchema,
|
|
6
7
|
} from "../config/schemas/services.js";
|
|
7
|
-
import { CadetPlatformClient } from "../platform/client.js";
|
|
8
8
|
import { getLogger } from "../util/logger.js";
|
|
9
9
|
import { BYOOAuthConnection, type BYOTokenHeader } from "./byo-connection.js";
|
|
10
|
+
import { CloudOAuthConnection } from "./cloud-connection.js";
|
|
10
11
|
import type { OAuthConnection } from "./connection.js";
|
|
11
12
|
import { getConnectionAccessTokenResult } from "./credential-token-resolver.js";
|
|
12
13
|
import { syncManualTokenConnection } from "./manual-token-connection.js";
|
|
13
14
|
import { getActiveConnections, getProvider } from "./oauth-store.js";
|
|
14
|
-
import { PlatformOAuthConnection } from "./platform-connection.js";
|
|
15
15
|
import { scopeDifference } from "./scope-utils.js";
|
|
16
16
|
|
|
17
17
|
const log = getLogger("connection-resolver");
|
|
@@ -68,7 +68,7 @@ export interface OAuthConnectionResolution {
|
|
|
68
68
|
* Maps to the `provider_key` primary key in the `oauth_providers` table.
|
|
69
69
|
* @param options.clientId - Optional OAuth app client ID. When multiple BYO
|
|
70
70
|
* apps exist for the same provider, narrows the connection lookup to the
|
|
71
|
-
* app matching this client ID. Ignored for
|
|
71
|
+
* app matching this client ID. Ignored for cloud providers.
|
|
72
72
|
* @param options.account - Optional account identifier to disambiguate
|
|
73
73
|
* multi-account connections.
|
|
74
74
|
*/
|
|
@@ -87,8 +87,8 @@ export async function resolveOAuthConnection(
|
|
|
87
87
|
* Resolve an OAuthConnection along with the account that served it and whether
|
|
88
88
|
* the selection was ambiguous.
|
|
89
89
|
*
|
|
90
|
-
*
|
|
91
|
-
* routed through the
|
|
90
|
+
* Cloud providers (where the service config `mode` is `"managed"`) are
|
|
91
|
+
* routed through the cloud proxy with no local state required.
|
|
92
92
|
*
|
|
93
93
|
* BYO providers resolve from the local SQLite oauth-store and require an
|
|
94
94
|
* active connection row and a stored access token.
|
|
@@ -99,18 +99,18 @@ export async function resolveOAuthConnectionWithMeta(
|
|
|
99
99
|
): Promise<OAuthConnectionResolution> {
|
|
100
100
|
const { clientId, account, requiredScopes } = options ?? {};
|
|
101
101
|
const providerRow = getProvider(provider);
|
|
102
|
-
const managedKey = providerRow?.
|
|
102
|
+
const managedKey = providerRow?.cloudServiceConfigKey;
|
|
103
103
|
|
|
104
104
|
if (managedKey && managedKey in ServicesSchema.shape) {
|
|
105
105
|
const services: Services = getConfig().services;
|
|
106
106
|
if (getServiceMode(services, managedKey as keyof Services) === "managed") {
|
|
107
|
-
const client = await
|
|
108
|
-
if (!client || !client.
|
|
107
|
+
const client = await CadetCloudClient.create();
|
|
108
|
+
if (!client || !client.cloudAssistantId) {
|
|
109
109
|
const detail = !client
|
|
110
110
|
? "missing platform prerequisites"
|
|
111
111
|
: "missing assistant ID";
|
|
112
112
|
throw new Error(
|
|
113
|
-
`
|
|
113
|
+
`Cloud connection for "${provider}" cannot be created: ${detail}. ` +
|
|
114
114
|
`Log in to Cadet Cloud or switch to using your own OAuth app.`,
|
|
115
115
|
);
|
|
116
116
|
}
|
|
@@ -122,7 +122,7 @@ export async function resolveOAuthConnectionWithMeta(
|
|
|
122
122
|
requiredScopes,
|
|
123
123
|
});
|
|
124
124
|
|
|
125
|
-
const connection = new
|
|
125
|
+
const connection = new CloudOAuthConnection({
|
|
126
126
|
id: provider,
|
|
127
127
|
provider,
|
|
128
128
|
externalId: provider,
|
|
@@ -130,9 +130,9 @@ export async function resolveOAuthConnectionWithMeta(
|
|
|
130
130
|
client,
|
|
131
131
|
connectionId: resolution.id,
|
|
132
132
|
// A templated base URL (`https://{tenant_host}`, `.../{realm_id}`) is
|
|
133
|
-
// filled in by the
|
|
133
|
+
// filled in by the cloud from what it pinned to the connection;
|
|
134
134
|
// sent as-is it would fail the proxy's allowlist and shadow that.
|
|
135
|
-
baseUrl:
|
|
135
|
+
baseUrl: cloudProxyBaseUrl(providerRow?.baseUrl),
|
|
136
136
|
});
|
|
137
137
|
return {
|
|
138
138
|
connection,
|
|
@@ -321,15 +321,15 @@ function hostMatchesPattern(host: string, pattern: string): boolean {
|
|
|
321
321
|
}
|
|
322
322
|
|
|
323
323
|
/**
|
|
324
|
-
* The base URL a
|
|
324
|
+
* The base URL a cloud connection sends to the cloud proxy, or
|
|
325
325
|
* `undefined` to let the proxy use the provider's configured default.
|
|
326
326
|
*
|
|
327
|
-
* Per-tenant and per-realm providers seed a template the
|
|
327
|
+
* Per-tenant and per-realm providers seed a template the cloud fills from
|
|
328
328
|
* the connection (`{tenant_host}`, `{realm_id}`). Forwarding the unfilled
|
|
329
329
|
* template would fail the proxy's allowlist check, so those fall through to
|
|
330
|
-
* the
|
|
330
|
+
* the cloud's own default.
|
|
331
331
|
*/
|
|
332
|
-
export function
|
|
332
|
+
export function cloudProxyBaseUrl(
|
|
333
333
|
seedBaseUrl: string | null | undefined,
|
|
334
334
|
): string | undefined {
|
|
335
335
|
if (!seedBaseUrl || /\{[a-z_]+\}/.test(seedBaseUrl)) {
|
|
@@ -403,7 +403,7 @@ function parseConnectionMetadata(
|
|
|
403
403
|
// ---------------------------------------------------------------------------
|
|
404
404
|
|
|
405
405
|
interface ResolvePlatformConnectionIdOptions {
|
|
406
|
-
client:
|
|
406
|
+
client: CadetCloudClient;
|
|
407
407
|
provider: string;
|
|
408
408
|
account?: string;
|
|
409
409
|
requiredScopes?: string[];
|
|
@@ -412,7 +412,7 @@ interface ResolvePlatformConnectionIdOptions {
|
|
|
412
412
|
interface PlatformConnectionEntry {
|
|
413
413
|
id: string;
|
|
414
414
|
account_label?: string | null;
|
|
415
|
-
/** Scopes the
|
|
415
|
+
/** Scopes the cloud actually granted this connection. May be absent for
|
|
416
416
|
* older connections or providers that don't report scopes. */
|
|
417
417
|
scopes_granted?: string[] | null;
|
|
418
418
|
/** Provider-supplied values the connection is scoped by (QuickBooks'
|
|
@@ -437,11 +437,11 @@ function platformConnectionLabel(entry: PlatformConnectionEntry): string {
|
|
|
437
437
|
}
|
|
438
438
|
|
|
439
439
|
/**
|
|
440
|
-
* Fetch active cloud connections for a
|
|
440
|
+
* Fetch active cloud connections for a cloud provider by calling the
|
|
441
441
|
* List Connections endpoint.
|
|
442
442
|
*/
|
|
443
443
|
async function fetchPlatformConnections(options: {
|
|
444
|
-
client:
|
|
444
|
+
client: CadetCloudClient;
|
|
445
445
|
provider: string;
|
|
446
446
|
accountIdentifier?: string;
|
|
447
447
|
}): Promise<PlatformConnectionEntry[]> {
|
|
@@ -453,7 +453,7 @@ async function fetchPlatformConnections(options: {
|
|
|
453
453
|
params.set("account_identifier", accountIdentifier);
|
|
454
454
|
}
|
|
455
455
|
|
|
456
|
-
const path = `/v1/assistants/${client.
|
|
456
|
+
const path = `/v1/assistants/${client.cloudAssistantId}/oauth/connections/?${params.toString()}`;
|
|
457
457
|
const response = await client.fetch(path);
|
|
458
458
|
|
|
459
459
|
if (!response.ok) {
|
|
@@ -475,7 +475,7 @@ async function fetchPlatformConnections(options: {
|
|
|
475
475
|
}
|
|
476
476
|
|
|
477
477
|
/**
|
|
478
|
-
* Fetch the
|
|
478
|
+
* Fetch the cloud-side connection ID for a cloud provider by calling
|
|
479
479
|
* the List Connections endpoint.
|
|
480
480
|
*/
|
|
481
481
|
async function resolvePlatformConnectionId(
|
package/src/oauth/connection.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface OAuthConnectionRequest {
|
|
|
8
8
|
* where rebuilding {@link OAuthConnectionRequest.query} would reorder
|
|
9
9
|
* interleaved repeated keys, rewrite `%20` as `+`, and give a valueless flag
|
|
10
10
|
* an `=`. An empty one falls through to `query`. Honored by BYO connections;
|
|
11
|
-
* a
|
|
11
|
+
* a cloud connection sends `query` to the cloud proxy, which rebuilds
|
|
12
12
|
* it.
|
|
13
13
|
*/
|
|
14
14
|
rawQuery?: string;
|