@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
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - bad provider (not in the LLMProvider enum)
|
|
7
7
|
* - uncataloged model without --allow-unlisted
|
|
8
8
|
* - missing provider connection
|
|
9
|
-
* -
|
|
9
|
+
* - cloud-profile create / update / delete rejection
|
|
10
10
|
* - the dispatch-availability guard on create / update / set-active
|
|
11
11
|
*
|
|
12
12
|
* Routing-identity creates exercise the happy-path write end-to-end (through
|
|
@@ -32,13 +32,13 @@ mock.module("../../../persistence/embeddings/embedding-backend.js", () => ({
|
|
|
32
32
|
clearEmbeddingBackendCache: () => {},
|
|
33
33
|
}));
|
|
34
34
|
|
|
35
|
-
// The availability guard judges the Cadet
|
|
35
|
+
// The availability guard judges the Cadet Cloud route and the credential
|
|
36
36
|
// store for real; both are stood in for here so tests can pick a state.
|
|
37
37
|
let managedProxyEnabled = true;
|
|
38
|
-
mock.module("../../../providers/
|
|
39
|
-
|
|
38
|
+
mock.module("../../../providers/cloud-proxy/context.js", () => ({
|
|
39
|
+
resolveCloudProxyContext: async () => ({
|
|
40
40
|
enabled: managedProxyEnabled,
|
|
41
|
-
|
|
41
|
+
cloudBaseUrl: "https://platform.example",
|
|
42
42
|
assistantApiKey: managedProxyEnabled ? "key" : "",
|
|
43
43
|
}),
|
|
44
44
|
}));
|
|
@@ -124,7 +124,7 @@ function seedKeyedConnection(provider: string): void {
|
|
|
124
124
|
});
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
/** The Cadet
|
|
127
|
+
/** The Cadet Cloud row every routing-identity profile resolves to. */
|
|
128
128
|
function seedCadetConnection(): void {
|
|
129
129
|
seedConnection("cadet", "cadet", { type: "platform" });
|
|
130
130
|
}
|
|
@@ -205,7 +205,7 @@ describe("POST inference/profiles (create) validation", () => {
|
|
|
205
205
|
).rejects.toBeInstanceOf(BadRequestError);
|
|
206
206
|
});
|
|
207
207
|
|
|
208
|
-
test("creates a cadet profile for a
|
|
208
|
+
test("creates a cadet profile for a cloud-routable model", async () => {
|
|
209
209
|
seedCadetConnection();
|
|
210
210
|
const result = (await call("inference_profiles_create", {
|
|
211
211
|
body: {
|
|
@@ -238,7 +238,7 @@ describe("POST inference/profiles (create) validation", () => {
|
|
|
238
238
|
).rejects.toThrow(/maxTokens/);
|
|
239
239
|
});
|
|
240
240
|
|
|
241
|
-
test("rejects a cadet profile whose model has no
|
|
241
|
+
test("rejects a cadet profile whose model has no cloud upstream", async () => {
|
|
242
242
|
await expect(
|
|
243
243
|
call("inference_profiles_create", {
|
|
244
244
|
body: {
|
|
@@ -248,7 +248,7 @@ describe("POST inference/profiles (create) validation", () => {
|
|
|
248
248
|
},
|
|
249
249
|
}),
|
|
250
250
|
).rejects.toThrow(
|
|
251
|
-
/"not-a-real-model" is not served by the Cadet
|
|
251
|
+
/"not-a-real-model" is not served by the Cadet Cloud route/,
|
|
252
252
|
);
|
|
253
253
|
});
|
|
254
254
|
|
|
@@ -367,7 +367,7 @@ describe("POST inference/profiles (create) validation", () => {
|
|
|
367
367
|
).rejects.toThrow(/does not exist/);
|
|
368
368
|
});
|
|
369
369
|
|
|
370
|
-
test("rejects creating a
|
|
370
|
+
test("rejects creating a cloud default name", async () => {
|
|
371
371
|
await expect(
|
|
372
372
|
call("inference_profiles_create", {
|
|
373
373
|
body: {
|
|
@@ -389,7 +389,7 @@ describe("inference-profile writes are availability-aware", () => {
|
|
|
389
389
|
model: "gemini-3.6-flash",
|
|
390
390
|
};
|
|
391
391
|
|
|
392
|
-
test("rejects a BYO provider with no connection and names the
|
|
392
|
+
test("rejects a BYO provider with no connection and names the cloud alternative", async () => {
|
|
393
393
|
const promise = call("inference_profiles_create", { body: geminiBody });
|
|
394
394
|
await expect(promise).rejects.toBeInstanceOf(BadRequestError);
|
|
395
395
|
await expect(promise).rejects.toThrow(
|
|
@@ -402,7 +402,7 @@ describe("inference-profile writes are availability-aware", () => {
|
|
|
402
402
|
expect(persistedProfiles()).toEqual({});
|
|
403
403
|
});
|
|
404
404
|
|
|
405
|
-
test("falls back to the credential sequence when the
|
|
405
|
+
test("falls back to the credential sequence when the cloud route is unusable", async () => {
|
|
406
406
|
managedProxyEnabled = false;
|
|
407
407
|
secureKeyResults.clear();
|
|
408
408
|
const promise = call("inference_profiles_create", { body: geminiBody });
|
|
@@ -552,7 +552,7 @@ describe("inference-profile writes are availability-aware", () => {
|
|
|
552
552
|
// ── update validation ─────────────────────────────────────────────────────────
|
|
553
553
|
|
|
554
554
|
describe("PATCH inference/profiles/:name (update) validation", () => {
|
|
555
|
-
test("rejects editing a
|
|
555
|
+
test("rejects editing a cloud default profile", async () => {
|
|
556
556
|
setConfig("llm", {
|
|
557
557
|
profiles: {
|
|
558
558
|
balanced: {
|
|
@@ -567,7 +567,7 @@ describe("PATCH inference/profiles/:name (update) validation", () => {
|
|
|
567
567
|
pathParams: { name: "balanced" },
|
|
568
568
|
body: { effort: "low" },
|
|
569
569
|
}),
|
|
570
|
-
).rejects.toThrow(/
|
|
570
|
+
).rejects.toThrow(/cloud profile/);
|
|
571
571
|
});
|
|
572
572
|
|
|
573
573
|
test("404s an unknown profile", async () => {
|
|
@@ -583,11 +583,11 @@ describe("PATCH inference/profiles/:name (update) validation", () => {
|
|
|
583
583
|
// ── delete protection ───────────────────────────────────────────────────────
|
|
584
584
|
|
|
585
585
|
describe("DELETE inference/profiles/:name protection", () => {
|
|
586
|
-
test("rejects deleting a
|
|
586
|
+
test("rejects deleting a cloud default profile", async () => {
|
|
587
587
|
setConfig("llm", { profiles: { balanced: { source: "managed" } } });
|
|
588
588
|
await expect(
|
|
589
589
|
call("inference_profiles_delete", { pathParams: { name: "balanced" } }),
|
|
590
|
-
).rejects.toThrow(/
|
|
590
|
+
).rejects.toThrow(/cloud profile/);
|
|
591
591
|
});
|
|
592
592
|
|
|
593
593
|
test("404s an unknown profile", async () => {
|
|
@@ -796,7 +796,7 @@ describe("GET inference/profiles honors the llm.default blob", () => {
|
|
|
796
796
|
// ── active-profile setter validation (Finding 3) ──────────────────────────────
|
|
797
797
|
|
|
798
798
|
describe("POST inference/profiles/:name/validate billing guards", () => {
|
|
799
|
-
test("gives no verdict for a mix whose winning arm rides the
|
|
799
|
+
test("gives no verdict for a mix whose winning arm rides the cloud route", async () => {
|
|
800
800
|
seedCadetConnection();
|
|
801
801
|
setConfig("llm", {
|
|
802
802
|
profiles: {
|
|
@@ -815,7 +815,7 @@ describe("POST inference/profiles/:name/validate billing guards", () => {
|
|
|
815
815
|
expect(result.check).toBeNull();
|
|
816
816
|
});
|
|
817
817
|
|
|
818
|
-
test("gives no verdict when a call-site override routes the probe onto the
|
|
818
|
+
test("gives no verdict when a call-site override routes the probe onto the cloud identity", async () => {
|
|
819
819
|
seedCadetConnection();
|
|
820
820
|
setConfig("llm", {
|
|
821
821
|
profiles: {
|
|
@@ -228,7 +228,7 @@ describe("POST inference/provider-connections (create)", () => {
|
|
|
228
228
|
).catch((e: unknown) => e);
|
|
229
229
|
|
|
230
230
|
expect(err).toBeInstanceOf(BadRequestError);
|
|
231
|
-
expect((err as BadRequestError).message).toContain("
|
|
231
|
+
expect((err as BadRequestError).message).toContain("Cadet Cloud");
|
|
232
232
|
expect((err as BadRequestError).message).toContain("cadet");
|
|
233
233
|
});
|
|
234
234
|
|
|
@@ -679,7 +679,7 @@ describe("POST inference/provider-connections (create)", () => {
|
|
|
679
679
|
});
|
|
680
680
|
});
|
|
681
681
|
|
|
682
|
-
test("throws 400 on the reserved
|
|
682
|
+
test("throws 400 on the reserved cloud connection name", async () => {
|
|
683
683
|
await expect(
|
|
684
684
|
call(findHandler("inference_provider_connections_create"), {
|
|
685
685
|
body: {
|
|
@@ -820,7 +820,7 @@ describe("PATCH inference/provider-connections/:name (update)", () => {
|
|
|
820
820
|
).catch((e: unknown) => e);
|
|
821
821
|
|
|
822
822
|
expect(err).toBeInstanceOf(BadRequestError);
|
|
823
|
-
expect((err as BadRequestError).message).toContain("
|
|
823
|
+
expect((err as BadRequestError).message).toContain("Cadet Cloud");
|
|
824
824
|
});
|
|
825
825
|
|
|
826
826
|
// A persisted row whose provider and auth disagree stays editable: both the
|
|
@@ -1400,7 +1400,7 @@ describe("PATCH with label", () => {
|
|
|
1400
1400
|
|
|
1401
1401
|
// ── Managed-connection write protection ──────────────────────────────────────
|
|
1402
1402
|
|
|
1403
|
-
describe("
|
|
1403
|
+
describe("Cloud connection write protection", () => {
|
|
1404
1404
|
const MANAGED_NAMES = ["cadet"] as const;
|
|
1405
1405
|
|
|
1406
1406
|
describe("DELETE", () => {
|
|
@@ -1419,13 +1419,13 @@ describe("Managed connection write protection", () => {
|
|
|
1419
1419
|
|
|
1420
1420
|
expect(err).toBeInstanceOf(BadRequestError);
|
|
1421
1421
|
expect((err as BadRequestError).message).toContain(name);
|
|
1422
|
-
expect((err as BadRequestError).message).toContain("
|
|
1422
|
+
expect((err as BadRequestError).message).toContain("Cadet Cloud");
|
|
1423
1423
|
});
|
|
1424
1424
|
}
|
|
1425
1425
|
|
|
1426
1426
|
test("managed protection short-circuits before reference checks", async () => {
|
|
1427
|
-
// Even though a profile references the
|
|
1428
|
-
// should be the
|
|
1427
|
+
// Even though a profile references the cloud connection, the error
|
|
1428
|
+
// should be the cloud-protection 400, not the references-409.
|
|
1429
1429
|
seedConnection({
|
|
1430
1430
|
name: "cadet",
|
|
1431
1431
|
provider: "cadet",
|
|
@@ -1443,10 +1443,10 @@ describe("Managed connection write protection", () => {
|
|
|
1443
1443
|
).catch((e: unknown) => e);
|
|
1444
1444
|
|
|
1445
1445
|
expect(err).toBeInstanceOf(BadRequestError);
|
|
1446
|
-
expect((err as BadRequestError).message).toContain("
|
|
1446
|
+
expect((err as BadRequestError).message).toContain("Cadet Cloud");
|
|
1447
1447
|
});
|
|
1448
1448
|
|
|
1449
|
-
test("a user-owned row claiming the
|
|
1449
|
+
test("a user-owned row claiming the cloud name stays deletable", async () => {
|
|
1450
1450
|
// Boot seeding refuses to overwrite it and managed routing ignores it,
|
|
1451
1451
|
// so deleting is the only way to restore the canonical row. The cadet
|
|
1452
1452
|
// default resolves to this same name, and that guard must not block the
|
|
@@ -1489,7 +1489,9 @@ describe("Managed connection write protection", () => {
|
|
|
1489
1489
|
|
|
1490
1490
|
expect(err).toBeInstanceOf(BadRequestError);
|
|
1491
1491
|
expect((err as BadRequestError).message).toContain(name);
|
|
1492
|
-
expect((err as BadRequestError).message).toContain(
|
|
1492
|
+
expect((err as BadRequestError).message).toContain(
|
|
1493
|
+
"cloud-authenticated",
|
|
1494
|
+
);
|
|
1493
1495
|
});
|
|
1494
1496
|
|
|
1495
1497
|
test(`rejects auth change on ${name} from platform to none with 400`, async () => {
|
|
@@ -1525,16 +1527,16 @@ describe("Managed connection write protection", () => {
|
|
|
1525
1527
|
pathParams: { name: "cadet" },
|
|
1526
1528
|
body: {
|
|
1527
1529
|
auth: { type: "platform" },
|
|
1528
|
-
label: "Cadet
|
|
1530
|
+
label: "Cadet Cloud Anthropic",
|
|
1529
1531
|
},
|
|
1530
1532
|
},
|
|
1531
1533
|
)) as { label: string | null };
|
|
1532
|
-
expect(result.label).toBe("Cadet
|
|
1534
|
+
expect(result.label).toBe("Cadet Cloud Anthropic");
|
|
1533
1535
|
});
|
|
1534
1536
|
});
|
|
1535
1537
|
|
|
1536
1538
|
describe("PATCH label (allowed)", () => {
|
|
1537
|
-
test("allows relabeling a
|
|
1539
|
+
test("allows relabeling a cloud connection", async () => {
|
|
1538
1540
|
seedConnection({
|
|
1539
1541
|
name: "cadet",
|
|
1540
1542
|
provider: "cadet",
|
|
@@ -1634,7 +1636,7 @@ describe("isManaged flag on connection responses", () => {
|
|
|
1634
1636
|
});
|
|
1635
1637
|
|
|
1636
1638
|
describe("GET single", () => {
|
|
1637
|
-
test("returns isManaged: true for a
|
|
1639
|
+
test("returns isManaged: true for a cloud name", async () => {
|
|
1638
1640
|
seedConnection({
|
|
1639
1641
|
name: "cadet",
|
|
1640
1642
|
provider: "cadet",
|
|
@@ -1649,7 +1651,7 @@ describe("isManaged flag on connection responses", () => {
|
|
|
1649
1651
|
expect(result.isManaged).toBe(true);
|
|
1650
1652
|
});
|
|
1651
1653
|
|
|
1652
|
-
test("returns isManaged: false for a user-owned row claiming a
|
|
1654
|
+
test("returns isManaged: false for a user-owned row claiming a cloud name", async () => {
|
|
1653
1655
|
// Clients gate edit and delete on this flag, so a claiming row must
|
|
1654
1656
|
// report as the ordinary connection it is or the collision cannot be
|
|
1655
1657
|
// cleared from the UI.
|
|
@@ -1701,7 +1703,7 @@ describe("isManaged flag on connection responses", () => {
|
|
|
1701
1703
|
});
|
|
1702
1704
|
|
|
1703
1705
|
describe("PATCH update", () => {
|
|
1704
|
-
test("returns isManaged: true after relabeling a
|
|
1706
|
+
test("returns isManaged: true after relabeling a cloud connection", async () => {
|
|
1705
1707
|
seedConnection({
|
|
1706
1708
|
name: "cadet",
|
|
1707
1709
|
provider: "cadet",
|
|
@@ -248,7 +248,7 @@ describe("inference_send profile usability", () => {
|
|
|
248
248
|
);
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
test("rejects a disabled profile instead of running the
|
|
251
|
+
test("rejects a disabled profile instead of running the cloud default", async () => {
|
|
252
252
|
const err = await rejection({ ...hermes, status: "disabled" });
|
|
253
253
|
expect(err).toBeInstanceOf(BadRequestError);
|
|
254
254
|
expect(err.message).toContain("disabled");
|
|
@@ -83,7 +83,7 @@ describe("integrations_ingress_status route", () => {
|
|
|
83
83
|
});
|
|
84
84
|
});
|
|
85
85
|
|
|
86
|
-
test("reports unconfigured for a
|
|
86
|
+
test("reports unconfigured for a cloud-hosted assistant", async () => {
|
|
87
87
|
ingressConfig = {
|
|
88
88
|
...ingressConfig,
|
|
89
89
|
publicBaseUrl: "https://platform.example.com/gateway/callbacks/a-1",
|
|
@@ -2,15 +2,12 @@
|
|
|
2
2
|
* Tests for the post-import cadet metadata reconciliation helper.
|
|
3
3
|
*
|
|
4
4
|
* After every bundle import, `reconcileCadetMetadataFromCes` walks the
|
|
5
|
-
*
|
|
5
|
+
* cadet credentials the gateway requires and, for each one that
|
|
6
6
|
* CES already holds a value for, ensures `metadata.json` lists a
|
|
7
7
|
* matching entry. This closes the race where a provisioning write to
|
|
8
8
|
* CES completes successfully but its metadata upsert gets clobbered by
|
|
9
9
|
* the import's in-place clear or atomic swap. The reconciled set covers
|
|
10
|
-
*
|
|
11
|
-
* platform_assistant_id, platform_base_url, webhook_secret) and the
|
|
12
|
-
* client-injected identity fields (platform_organization_id,
|
|
13
|
-
* platform_user_id).
|
|
10
|
+
* the Django-provisioned credentials (assistant_api_key, webhook_secret).
|
|
14
11
|
*
|
|
15
12
|
* We test the reconcile logic in isolation by mocking the secure-keys
|
|
16
13
|
* and metadata-store modules — the real migration handler wires the
|
|
@@ -40,14 +37,7 @@ type MetadataRecord = {
|
|
|
40
37
|
updatedAt: number;
|
|
41
38
|
};
|
|
42
39
|
|
|
43
|
-
const CADET_FIELDS = [
|
|
44
|
-
"platform_base_url",
|
|
45
|
-
"assistant_api_key",
|
|
46
|
-
"platform_assistant_id",
|
|
47
|
-
"platform_organization_id",
|
|
48
|
-
"platform_user_id",
|
|
49
|
-
"webhook_secret",
|
|
50
|
-
] as const;
|
|
40
|
+
const CADET_FIELDS = ["assistant_api_key", "webhook_secret"] as const;
|
|
51
41
|
|
|
52
42
|
const upsertCalls: Array<{ service: string; field: string }> = [];
|
|
53
43
|
let metadataStore: Map<string, MetadataRecord> = new Map();
|
|
@@ -143,7 +133,7 @@ describe("reconcileCadetMetadataFromCes", () => {
|
|
|
143
133
|
test("CES holds all, metadata has 2 → only the missing ones upserted", async () => {
|
|
144
134
|
seedAllInCes();
|
|
145
135
|
// Pre-populate metadata for 2 of the fields.
|
|
146
|
-
const prepopulated = ["
|
|
136
|
+
const prepopulated = ["assistant_api_key", "webhook_secret"] as const;
|
|
147
137
|
for (const field of prepopulated) {
|
|
148
138
|
metadataStore.set(`cadet:${field}`, {
|
|
149
139
|
credentialId: `id-cadet:${field}`,
|
|
@@ -174,14 +164,9 @@ describe("reconcileCadetMetadataFromCes", () => {
|
|
|
174
164
|
await reconcileCadetMetadataFromCes(sink);
|
|
175
165
|
|
|
176
166
|
const reconciled = new Set(upsertCalls.map((c) => c.field));
|
|
177
|
-
// Django-provisioned
|
|
178
|
-
expect(reconciled).toContain("platform_base_url");
|
|
167
|
+
// Django-provisioned trio.
|
|
179
168
|
expect(reconciled).toContain("assistant_api_key");
|
|
180
|
-
expect(reconciled).toContain("platform_assistant_id");
|
|
181
169
|
expect(reconciled).toContain("webhook_secret");
|
|
182
|
-
// Client-injected identity fields (onboarding / teleport / transfer).
|
|
183
|
-
expect(reconciled).toContain("platform_organization_id");
|
|
184
|
-
expect(reconciled).toContain("platform_user_id");
|
|
185
170
|
});
|
|
186
171
|
|
|
187
172
|
test("CES empty → nothing upserted", async () => {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Tests for platform credential filtering during bundle import.
|
|
3
3
|
*
|
|
4
4
|
* `migration-routes.ts` pushes every bundle credential through a filter that
|
|
5
|
-
* must exclude
|
|
5
|
+
* must exclude cloud-identity (`cadet:*`) entries so they can't overwrite
|
|
6
6
|
* the target's own Django-provisioned identity. The filter runs against the
|
|
7
7
|
* raw CES account format — `credential/{service}/{field}` — produced by
|
|
8
8
|
* `credentialKey()`, which is what `listSecureKeysAsync()` returns and what
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* key format are excluded.
|
|
21
21
|
* - User credentials (any other prefix) pass through unchanged.
|
|
22
22
|
* - Mixed bundles correctly split platform vs user credentials.
|
|
23
|
-
* -
|
|
23
|
+
* - skippedCloud count matches the number of excluded entries.
|
|
24
24
|
* - Regression: the prefix constant matches `credentialKey("cadet", "")`.
|
|
25
25
|
*/
|
|
26
26
|
|
|
@@ -98,8 +98,8 @@ function filterCredentials(
|
|
|
98
98
|
const userCredentials = bundleCredentials.filter(
|
|
99
99
|
(c) => !c.account.startsWith(PLATFORM_CREDENTIAL_PREFIX),
|
|
100
100
|
);
|
|
101
|
-
const
|
|
102
|
-
return { userCredentials,
|
|
101
|
+
const skippedCloud = bundleCredentials.length - userCredentials.length;
|
|
102
|
+
return { userCredentials, skippedCloud };
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
// ---------------------------------------------------------------------------
|
|
@@ -110,10 +110,7 @@ describe("migration import credential filtering", () => {
|
|
|
110
110
|
test("platform (cadet:*) credentials are excluded", () => {
|
|
111
111
|
const cadetFields = [
|
|
112
112
|
"assistant_api_key",
|
|
113
|
-
"
|
|
114
|
-
"platform_base_url",
|
|
115
|
-
"platform_organization_id",
|
|
116
|
-
"platform_user_id",
|
|
113
|
+
"cloud_assistant_id",
|
|
117
114
|
"webhook_secret",
|
|
118
115
|
] as const;
|
|
119
116
|
const cadetPaths = cadetFields.map((f) =>
|
|
@@ -128,11 +125,11 @@ describe("migration import credential filtering", () => {
|
|
|
128
125
|
const manifest = makeManifest(cadetPaths);
|
|
129
126
|
|
|
130
127
|
const bundleCredentials = extractCredentialsFromBundle(entries, manifest);
|
|
131
|
-
const { userCredentials,
|
|
128
|
+
const { userCredentials, skippedCloud } =
|
|
132
129
|
filterCredentials(bundleCredentials);
|
|
133
130
|
|
|
134
131
|
expect(userCredentials).toHaveLength(0);
|
|
135
|
-
expect(
|
|
132
|
+
expect(skippedCloud).toBe(cadetFields.length);
|
|
136
133
|
});
|
|
137
134
|
|
|
138
135
|
test("user credentials pass through unchanged", () => {
|
|
@@ -149,7 +146,7 @@ describe("migration import credential filtering", () => {
|
|
|
149
146
|
]);
|
|
150
147
|
|
|
151
148
|
const bundleCredentials = extractCredentialsFromBundle(entries, manifest);
|
|
152
|
-
const { userCredentials,
|
|
149
|
+
const { userCredentials, skippedCloud } =
|
|
153
150
|
filterCredentials(bundleCredentials);
|
|
154
151
|
|
|
155
152
|
expect(userCredentials).toHaveLength(2);
|
|
@@ -161,12 +158,12 @@ describe("migration import credential filtering", () => {
|
|
|
161
158
|
account: anthropicAccount,
|
|
162
159
|
value: "sk-ant-456",
|
|
163
160
|
});
|
|
164
|
-
expect(
|
|
161
|
+
expect(skippedCloud).toBe(0);
|
|
165
162
|
});
|
|
166
163
|
|
|
167
164
|
test("mixed bundle with both platform and user credentials correctly splits", () => {
|
|
168
165
|
const cadetApiKey = credentialKey("cadet", "assistant_api_key");
|
|
169
|
-
const cadetUserId = credentialKey("cadet", "
|
|
166
|
+
const cadetUserId = credentialKey("cadet", "cloud_assistant_id");
|
|
170
167
|
const openaiKey = credentialKey("openai", "api_key");
|
|
171
168
|
const anthropicKey = credentialKey("anthropic", "api_key");
|
|
172
169
|
const githubToken = credentialKey("github", "api_token");
|
|
@@ -187,7 +184,7 @@ describe("migration import credential filtering", () => {
|
|
|
187
184
|
]);
|
|
188
185
|
|
|
189
186
|
const bundleCredentials = extractCredentialsFromBundle(entries, manifest);
|
|
190
|
-
const { userCredentials,
|
|
187
|
+
const { userCredentials, skippedCloud } =
|
|
191
188
|
filterCredentials(bundleCredentials);
|
|
192
189
|
|
|
193
190
|
// Only user credentials should pass through.
|
|
@@ -201,33 +198,33 @@ describe("migration import credential filtering", () => {
|
|
|
201
198
|
);
|
|
202
199
|
expect(cadetCreds).toHaveLength(0);
|
|
203
200
|
|
|
204
|
-
expect(
|
|
201
|
+
expect(skippedCloud).toBe(2);
|
|
205
202
|
});
|
|
206
203
|
|
|
207
|
-
test("
|
|
204
|
+
test("skippedCloud count is accurate with mixed credentials", () => {
|
|
208
205
|
const cadetApiKey = credentialKey("cadet", "assistant_api_key");
|
|
209
|
-
const
|
|
206
|
+
const cadetAssistantId = credentialKey("cadet", "cloud_assistant_id");
|
|
210
207
|
const cadetWebhook = credentialKey("cadet", "webhook_secret");
|
|
211
208
|
const userKey = credentialKey("github", "api_token");
|
|
212
209
|
|
|
213
210
|
const entries = new Map<string, VBundleTarEntry>();
|
|
214
211
|
entries.set(bundlePathFor(cadetApiKey), makeTarEntry("v1"));
|
|
215
|
-
entries.set(bundlePathFor(
|
|
212
|
+
entries.set(bundlePathFor(cadetAssistantId), makeTarEntry("v2"));
|
|
216
213
|
entries.set(bundlePathFor(cadetWebhook), makeTarEntry("v3"));
|
|
217
214
|
entries.set(bundlePathFor(userKey), makeTarEntry("user-val"));
|
|
218
215
|
|
|
219
216
|
const manifest = makeManifest([
|
|
220
217
|
bundlePathFor(cadetApiKey),
|
|
221
|
-
bundlePathFor(
|
|
218
|
+
bundlePathFor(cadetAssistantId),
|
|
222
219
|
bundlePathFor(cadetWebhook),
|
|
223
220
|
bundlePathFor(userKey),
|
|
224
221
|
]);
|
|
225
222
|
|
|
226
223
|
const bundleCredentials = extractCredentialsFromBundle(entries, manifest);
|
|
227
|
-
const { userCredentials,
|
|
224
|
+
const { userCredentials, skippedCloud } =
|
|
228
225
|
filterCredentials(bundleCredentials);
|
|
229
226
|
|
|
230
|
-
expect(
|
|
227
|
+
expect(skippedCloud).toBe(3);
|
|
231
228
|
expect(userCredentials).toHaveLength(1);
|
|
232
229
|
expect(userCredentials[0]).toEqual({
|
|
233
230
|
account: userKey,
|
|
@@ -236,7 +233,7 @@ describe("migration import credential filtering", () => {
|
|
|
236
233
|
|
|
237
234
|
// Verify total = user + skipped
|
|
238
235
|
expect(bundleCredentials.length).toBe(
|
|
239
|
-
userCredentials.length +
|
|
236
|
+
userCredentials.length + skippedCloud,
|
|
240
237
|
);
|
|
241
238
|
});
|
|
242
239
|
|
|
@@ -11,19 +11,19 @@
|
|
|
11
11
|
|
|
12
12
|
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
13
13
|
|
|
14
|
+
import type { CadetCloudClient } from "../../../cloud/client.js";
|
|
15
|
+
import {
|
|
16
|
+
CloudOAuthConnection,
|
|
17
|
+
CredentialRequiredError,
|
|
18
|
+
InsufficientBalanceError,
|
|
19
|
+
ProviderUnreachableError,
|
|
20
|
+
} from "../../../oauth/cloud-connection.js";
|
|
14
21
|
import type {
|
|
15
22
|
OAuthConnection,
|
|
16
23
|
OAuthConnectionRequest,
|
|
17
24
|
OAuthConnectionResponse,
|
|
18
25
|
} from "../../../oauth/connection.js";
|
|
19
26
|
import { decodeOAuthResponseBytes } from "../../../oauth/connection.js";
|
|
20
|
-
import {
|
|
21
|
-
CredentialRequiredError,
|
|
22
|
-
InsufficientBalanceError,
|
|
23
|
-
PlatformOAuthConnection,
|
|
24
|
-
ProviderUnreachableError,
|
|
25
|
-
} from "../../../oauth/platform-connection.js";
|
|
26
|
-
import type { CadetPlatformClient } from "../../../platform/client.js";
|
|
27
27
|
import { resolveScopeProfile } from "../../auth/scopes.js";
|
|
28
28
|
import type { AuthContext } from "../../auth/types.js";
|
|
29
29
|
import { routeDefinitionsToHTTPRoutes } from "../http-adapter.js";
|
|
@@ -70,29 +70,29 @@ const byoConnection: OAuthConnection = {
|
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
|
-
* A real
|
|
74
|
-
* lives inside `
|
|
73
|
+
* A real cloud connection over a stub platform, for the paths whose behavior
|
|
74
|
+
* lives inside `CloudOAuthConnection` rather than in the route.
|
|
75
75
|
*/
|
|
76
76
|
function realManagedConnection(
|
|
77
77
|
fetchImpl: (path: string, init?: RequestInit) => Promise<Response>,
|
|
78
|
-
):
|
|
79
|
-
return new
|
|
78
|
+
): CloudOAuthConnection {
|
|
79
|
+
return new CloudOAuthConnection({
|
|
80
80
|
id: "conn-managed",
|
|
81
81
|
provider: "stripe_link",
|
|
82
82
|
externalId: "ext-1",
|
|
83
83
|
accountInfo: null,
|
|
84
84
|
connectionId: "platform-conn-1",
|
|
85
85
|
client: {
|
|
86
|
-
|
|
86
|
+
cloudAssistantId: "asst-1",
|
|
87
87
|
fetch: fetchImpl,
|
|
88
|
-
} as unknown as
|
|
88
|
+
} as unknown as CadetCloudClient,
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
/** Satisfies the route's `instanceof
|
|
92
|
+
/** Satisfies the route's `instanceof CloudOAuthConnection` check. */
|
|
93
93
|
function managedConnection(): OAuthConnection {
|
|
94
94
|
return Object.assign(
|
|
95
|
-
Object.create(
|
|
95
|
+
Object.create(CloudOAuthConnection.prototype) as OAuthConnection,
|
|
96
96
|
{
|
|
97
97
|
id: "conn-managed",
|
|
98
98
|
provider: "stripe_link",
|
|
@@ -145,15 +145,15 @@ mock.module("../../../oauth/connection-resolver.js", () => ({
|
|
|
145
145
|
|
|
146
146
|
// Spread the real module so the rest of the import graph keeps its env
|
|
147
147
|
// readers; only the two auth-bypass readings are pinned. They move
|
|
148
|
-
// independently: DISABLE_HTTP_AUTH is set on any host, the
|
|
148
|
+
// independently: DISABLE_HTTP_AUTH is set on any host, the cloud-managed
|
|
149
149
|
// bypass only on a vembda pod.
|
|
150
150
|
let httpAuthDisabled = false;
|
|
151
|
-
let
|
|
151
|
+
let cloudAuthBypass = false;
|
|
152
152
|
const env = await import("../../../config/env.js");
|
|
153
153
|
mock.module("../../../config/env.js", () => ({
|
|
154
154
|
...env,
|
|
155
155
|
isHttpAuthDisabled: () => httpAuthDisabled,
|
|
156
|
-
|
|
156
|
+
isCloudAuthBypassActive: () => cloudAuthBypass,
|
|
157
157
|
}));
|
|
158
158
|
|
|
159
159
|
const { handleOAuthProxy, ROUTES } = await import("../oauth-proxy-routes.js");
|
|
@@ -271,7 +271,7 @@ function requireCaptured(): OAuthConnectionRequest {
|
|
|
271
271
|
|
|
272
272
|
beforeEach(() => {
|
|
273
273
|
httpAuthDisabled = false;
|
|
274
|
-
|
|
274
|
+
cloudAuthBypass = false;
|
|
275
275
|
captured = undefined;
|
|
276
276
|
upstreamBytes = undefined;
|
|
277
277
|
requestError = undefined;
|
|
@@ -322,7 +322,7 @@ describe("path and query fidelity", () => {
|
|
|
322
322
|
const req = requireCaptured();
|
|
323
323
|
// Byte-exact for a provider that signs the query it receives.
|
|
324
324
|
expect(req.rawQuery).toBe("?a=1&b=2&a=3&q=x%20y&flag");
|
|
325
|
-
// The parsed form is all a
|
|
325
|
+
// The parsed form is all a cloud connection can send.
|
|
326
326
|
expect(req.query).toEqual({ a: ["1", "3"], b: "2", q: "x y", flag: "" });
|
|
327
327
|
});
|
|
328
328
|
|
|
@@ -364,7 +364,7 @@ describe("method passthrough", () => {
|
|
|
364
364
|
expect((await response.arrayBuffer()).byteLength).toBe(0);
|
|
365
365
|
});
|
|
366
366
|
|
|
367
|
-
test("rejects HEAD against a
|
|
367
|
+
test("rejects HEAD against a cloud connection", async () => {
|
|
368
368
|
resolution = { ...resolution, connection: managedConnection() };
|
|
369
369
|
|
|
370
370
|
const response = await callProxy({ method: "HEAD" });
|
|
@@ -391,7 +391,7 @@ describe("write safety", () => {
|
|
|
391
391
|
});
|
|
392
392
|
}
|
|
393
393
|
|
|
394
|
-
test("a
|
|
394
|
+
test("a cloud write is not replayed after a 502", async () => {
|
|
395
395
|
let attempts = 0;
|
|
396
396
|
resolution = {
|
|
397
397
|
...resolution,
|
|
@@ -403,7 +403,7 @@ describe("write safety", () => {
|
|
|
403
403
|
|
|
404
404
|
const response = await callProxy({ method: "POST", body: "{}" });
|
|
405
405
|
|
|
406
|
-
// The
|
|
406
|
+
// The cloud answers 502 only after calling the provider, so a replay
|
|
407
407
|
// could land the write twice.
|
|
408
408
|
expect(attempts).toBe(1);
|
|
409
409
|
expect(response.status).toBe(502);
|
|
@@ -564,7 +564,7 @@ describe("header handling", () => {
|
|
|
564
564
|
["GET", "Stripe-Version"],
|
|
565
565
|
["GET", "X-Custom-Option"],
|
|
566
566
|
]) {
|
|
567
|
-
test(`rejects managed ${method} with ${name} before the
|
|
567
|
+
test(`rejects managed ${method} with ${name} before the cloud call`, async () => {
|
|
568
568
|
let attempts = 0;
|
|
569
569
|
resolution.connection = realManagedConnection(async () => {
|
|
570
570
|
attempts++;
|
|
@@ -930,18 +930,18 @@ describe("grant binding", () => {
|
|
|
930
930
|
expect(resolverCalls).toHaveLength(0);
|
|
931
931
|
});
|
|
932
932
|
|
|
933
|
-
test("a
|
|
933
|
+
test("a cloud-managed pod skips the comparison it has no subject for", async () => {
|
|
934
934
|
// The pod's daemon discards the token and synthesizes a context, so the
|
|
935
935
|
// grant's subject never reaches the handler.
|
|
936
936
|
httpAuthDisabled = true;
|
|
937
|
-
|
|
937
|
+
cloudAuthBypass = true;
|
|
938
938
|
|
|
939
939
|
const response = await callProxy({ subject: "actor:self:dev-bypass" });
|
|
940
940
|
|
|
941
941
|
expect(response.status).toBe(200);
|
|
942
942
|
});
|
|
943
943
|
|
|
944
|
-
test("DISABLE_HTTP_AUTH off a
|
|
944
|
+
test("DISABLE_HTTP_AUTH off a cloud pod still binds the grant", async () => {
|
|
945
945
|
httpAuthDisabled = true;
|
|
946
946
|
|
|
947
947
|
const response = await callProxy({ subject: "actor:self:dev-bypass" });
|
|
@@ -119,7 +119,7 @@ import {
|
|
|
119
119
|
type UpgradePluginOptions,
|
|
120
120
|
} from "../../../cli/lib/upgrade-plugin.js";
|
|
121
121
|
|
|
122
|
-
// Spy on the route logger so tests can assert that a
|
|
122
|
+
// Spy on the route logger so tests can assert that a cloud-catalog outage
|
|
123
123
|
// is recorded before it is mapped to a client 503. The catalog fetcher and the
|
|
124
124
|
// transport adapters swallow the failure otherwise (`RouteError` → wire error,
|
|
125
125
|
// no capture), so the log line is the only trace an operator gets — assert it.
|
|
@@ -1626,8 +1626,8 @@ describe("POST /v1/plugins/install", () => {
|
|
|
1626
1626
|
// The default (no-pin) path reads the same gated catalog `search`
|
|
1627
1627
|
// advertises and installs from a trusted pre-resolved source — no direct
|
|
1628
1628
|
// `plugins/marketplace.json` fetch (the pin/marketplace path is untouched).
|
|
1629
|
-
const prev = process.env.
|
|
1630
|
-
process.env.
|
|
1629
|
+
const prev = process.env.CADET_DISABLE_CLOUD;
|
|
1630
|
+
process.env.CADET_DISABLE_CLOUD = "true";
|
|
1631
1631
|
try {
|
|
1632
1632
|
installSpy.mockImplementation(async (opts) => trustedInstallResult(opts));
|
|
1633
1633
|
|
|
@@ -1660,9 +1660,9 @@ describe("POST /v1/plugins/install", () => {
|
|
|
1660
1660
|
});
|
|
1661
1661
|
} finally {
|
|
1662
1662
|
if (prev === undefined) {
|
|
1663
|
-
delete process.env.
|
|
1663
|
+
delete process.env.CADET_DISABLE_CLOUD;
|
|
1664
1664
|
} else {
|
|
1665
|
-
process.env.
|
|
1665
|
+
process.env.CADET_DISABLE_CLOUD = prev;
|
|
1666
1666
|
}
|
|
1667
1667
|
}
|
|
1668
1668
|
});
|