@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
|
@@ -11,15 +11,14 @@
|
|
|
11
11
|
import { afterEach, describe, expect, spyOn, test } from "bun:test";
|
|
12
12
|
|
|
13
13
|
const loader = await import("../config/loader.js");
|
|
14
|
-
const registration =
|
|
15
|
-
await import("../inbound/platform-callback-registration.js");
|
|
14
|
+
const registration = await import("../inbound/cloud-callback-registration.js");
|
|
16
15
|
const { resolveWebhookUrl } = await import("../plugin-api/webhook-url.js");
|
|
17
16
|
const { runInPluginContext } =
|
|
18
17
|
await import("../plugins/plugin-execution-context.js");
|
|
19
18
|
|
|
20
19
|
describe("resolveWebhookUrl", () => {
|
|
21
20
|
afterEach(() => {
|
|
22
|
-
delete process.env.
|
|
21
|
+
delete process.env.IS_CLOUD;
|
|
23
22
|
});
|
|
24
23
|
test("composes the plugin's namespaced path and delegates the tier choice", async () => {
|
|
25
24
|
const spy = spyOn(registration, "resolveCallbackUrl").mockResolvedValue(
|
|
@@ -79,7 +78,7 @@ describe("resolveWebhookUrl", () => {
|
|
|
79
78
|
});
|
|
80
79
|
|
|
81
80
|
test("gives routes that share a slug distinct registration types", async () => {
|
|
82
|
-
// The
|
|
81
|
+
// The cloud keys a callback route by type, so a collision has the
|
|
83
82
|
// second registration replace the first. `events-v1` and `events_v1`
|
|
84
83
|
// slugify identically.
|
|
85
84
|
const spy = spyOn(registration, "resolveCallbackUrl").mockResolvedValue(
|
|
@@ -153,7 +152,7 @@ describe("resolveWebhookUrl", () => {
|
|
|
153
152
|
// The Tunnel forwards the request path verbatim and the gateway
|
|
154
153
|
// admits it only when it matches a claimed path byte for byte. A trailing
|
|
155
154
|
// slash on this URL would be rejected before the gateway ever saw it.
|
|
156
|
-
process.env.
|
|
155
|
+
process.env.IS_CLOUD = "true";
|
|
157
156
|
const configSpy = spyOn(loader, "getConfig").mockReturnValue({
|
|
158
157
|
ingress: { publicBaseUrl: "https://tunnel.mycadet.ai/assistant-abc" },
|
|
159
158
|
} as ReturnType<typeof loader.getConfig>);
|
|
@@ -49,6 +49,7 @@ const DEFAULTS_ABS = join(process.cwd(), DEFAULTS_REL);
|
|
|
49
49
|
*/
|
|
50
50
|
const BASELINE: Record<string, readonly string[]> = {
|
|
51
51
|
channel: ["../../types.js", "../injector-order.js"],
|
|
52
|
+
"cloud-hosted": ["node:fs/promises", "node:path"],
|
|
52
53
|
compaction: [
|
|
53
54
|
"../../../config/loader.js",
|
|
54
55
|
"../../../config/schemas/compaction.js",
|
|
@@ -105,11 +106,6 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
105
106
|
"../../../../config/assistant-feature-flags.js",
|
|
106
107
|
"../../../../config/default-profile-catalog.js",
|
|
107
108
|
"../../../../config/loader.js",
|
|
108
|
-
// Sibling of the already-sanctioned memory-v3-gate: `memoryTier()` is
|
|
109
|
-
// defined as fully derived from that module's predicates, and the stats
|
|
110
|
-
// route reports both (`graph_supported` is exactly `tier === "v3"`).
|
|
111
|
-
// Re-deriving the tier inside the plugin would reintroduce exactly the
|
|
112
|
-
// drift the shared module exists to prevent. No plugin-api equivalent.
|
|
113
109
|
"../../../../config/memory-tier.js",
|
|
114
110
|
"../../../../config/memory-v3-gate.js",
|
|
115
111
|
"../../../../config/schema.js",
|
|
@@ -117,11 +113,6 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
117
113
|
"../../../../config/skill-state.js",
|
|
118
114
|
"../../../../config/skills.js",
|
|
119
115
|
"../../../../config/types.js",
|
|
120
|
-
// Same host module the retrospective job couples to (the `../../../`
|
|
121
|
-
// entry below): the sweep job and v2 router warm the guardian-delivery
|
|
122
|
-
// cache before their sync `resolveUserName` reads so worker-process
|
|
123
|
-
// prompts address the guardian instead of the default profile. No
|
|
124
|
-
// plugin-api equivalent.
|
|
125
116
|
"../../../../contacts/guardian-delivery-reader.js",
|
|
126
117
|
"../../../../context/token-estimator.js",
|
|
127
118
|
"../../../../daemon/conversation-error.js",
|
|
@@ -131,8 +122,6 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
131
122
|
"../../../../daemon/embedding-reconcile.js",
|
|
132
123
|
"../../../../daemon/trust-context.js",
|
|
133
124
|
"../../../../daemon/turn-latency-sub-spans.js",
|
|
134
|
-
// mcp-setup capability cards list configured server names from the
|
|
135
|
-
// workspace mcp.json document. No plugin-api equivalent.
|
|
136
125
|
"../../../../mcp/workspace-mcp-config.js",
|
|
137
126
|
"../../../../notifications/background-failure-signal.js",
|
|
138
127
|
"../../../../persistence/checkpoints.js",
|
|
@@ -154,7 +143,7 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
154
143
|
"../../../../prompts/persona-resolver.js",
|
|
155
144
|
"../../../../prompts/system-prompt.js",
|
|
156
145
|
"../../../../prompts/template-detection.js",
|
|
157
|
-
"../../../../providers/
|
|
146
|
+
"../../../../providers/cloud-proxy/context.js",
|
|
158
147
|
"../../../../runtime/assistant-event-hub.js",
|
|
159
148
|
"../../../../runtime/auth/route-policy.js",
|
|
160
149
|
"../../../../runtime/background-job-runner.js",
|
|
@@ -164,15 +153,15 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
164
153
|
"../../../../security/secret-scanner.js",
|
|
165
154
|
"../../../../skills/catalog-cache.js",
|
|
166
155
|
"../../../../telemetry/watchdog-events-store.js",
|
|
167
|
-
"../../../../tools/skills/delete-
|
|
156
|
+
"../../../../tools/skills/delete-cloud.js",
|
|
168
157
|
"../../../../util/json.js",
|
|
169
158
|
"../../../../util/logger.js",
|
|
170
159
|
"../../../../util/platform.js",
|
|
171
160
|
"../../../api/remember-tool.js",
|
|
172
161
|
"../../../channels/types.js",
|
|
162
|
+
"../../../config/cloud-rehydration.js",
|
|
173
163
|
"../../../config/loader.js",
|
|
174
164
|
"../../../config/memory-v3-gate.js",
|
|
175
|
-
"../../../config/platform-rehydration.js",
|
|
176
165
|
"../../../config/schema.js",
|
|
177
166
|
"../../../config/schemas/memory.js",
|
|
178
167
|
"../../../config/types.js",
|
|
@@ -181,9 +170,6 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
181
170
|
"../../../context/strip-injections.js",
|
|
182
171
|
"../../../context/token-estimator.js",
|
|
183
172
|
"../../../conversations/job-handlers/summarization.js",
|
|
184
|
-
// The standalone memory worker hosts real agent conversations, so its
|
|
185
|
-
// entry point starts the same eviction sweep the daemon starts at
|
|
186
|
-
// startup. No plugin-api equivalent.
|
|
187
173
|
"../../../daemon/conversation-evictor.js",
|
|
188
174
|
"../../../daemon/date-context.js",
|
|
189
175
|
"../../../daemon/disk-pressure-background-gate.js",
|
|
@@ -196,8 +182,6 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
196
182
|
"../../../daemon/trust-context.js",
|
|
197
183
|
"../../../home/job-handlers/conversation-starters.js",
|
|
198
184
|
"../../../media/job-handlers/media-processing.js",
|
|
199
|
-
// The skill-update receipt job announces a burst through the
|
|
200
|
-
// notification pipeline's single entry point. No plugin-api equivalent.
|
|
201
185
|
"../../../notifications/emit-signal.js",
|
|
202
186
|
"../../../permissions/types.js",
|
|
203
187
|
"../../../persistence/auto-analysis-constants.js",
|
|
@@ -219,15 +203,7 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
219
203
|
"../../../persistence/job-handlers/message-lexical.js",
|
|
220
204
|
"../../../persistence/job-utils.js",
|
|
221
205
|
"../../../persistence/jobs-store.js",
|
|
222
|
-
// The retrospective cursor is a `(createdAt, id)` bound that must keep
|
|
223
|
-
// working after its message row is deleted. The resolver lives beside
|
|
224
|
-
// the persistence after-reads it also drives, so the plugin's
|
|
225
|
-
// accounting imports it rather than re-deriving the bound. No
|
|
226
|
-
// plugin-api equivalent.
|
|
227
206
|
"../../../persistence/message-cursor.js",
|
|
228
|
-
// Named any-state `createdAt` lookup the cursor bookkeeping uses for
|
|
229
|
-
// forks and the timestamp backfill; the messages-read boundary guard
|
|
230
|
-
// requires the read to live in persistence. No plugin-api equivalent.
|
|
231
207
|
"../../../persistence/message-reads.js",
|
|
232
208
|
"../../../persistence/raw-query.js",
|
|
233
209
|
"../../../persistence/schema/index.js",
|
|
@@ -258,10 +234,6 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
258
234
|
"../../../util/worker-memory.js",
|
|
259
235
|
"../../../util/worker-process.js",
|
|
260
236
|
"../../types.js",
|
|
261
|
-
// The memory jobs worker runs as its own OS process and hosts real agent
|
|
262
|
-
// conversations, so it registers the host's default-plugin hook and
|
|
263
|
-
// injector surface at startup (hooks only, no init hooks). Host-owned
|
|
264
|
-
// composition with no plugin-api equivalent.
|
|
265
237
|
"../../worker-plugin-surface.js",
|
|
266
238
|
"../injection-presence.js",
|
|
267
239
|
"../injector-order.js",
|
|
@@ -277,18 +249,15 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
277
249
|
"yaml",
|
|
278
250
|
"zod",
|
|
279
251
|
],
|
|
280
|
-
"platform-hosted": ["node:fs/promises", "node:path"],
|
|
281
|
-
// Host-internal surface snapshot and task_progress parser. UI surfaces
|
|
282
|
-
// stay host-owned, so there is no plugin-api equivalent.
|
|
283
|
-
"task-progress": [
|
|
284
|
-
"../../../../daemon/conversation-surface-snapshots.js",
|
|
285
|
-
"../../../../runtime/task-progress.js",
|
|
286
|
-
],
|
|
287
252
|
session: [
|
|
288
253
|
"../../../config/loader.js",
|
|
289
254
|
"../../types.js",
|
|
290
255
|
"../injector-order.js",
|
|
291
256
|
],
|
|
257
|
+
"task-progress": [
|
|
258
|
+
"../../../../daemon/conversation-surface-snapshots.js",
|
|
259
|
+
"../../../../runtime/task-progress.js",
|
|
260
|
+
],
|
|
292
261
|
"title-generate": [
|
|
293
262
|
"../../../../config/loader.js",
|
|
294
263
|
"../../../../persistence/conversation-crud.js",
|
|
@@ -114,11 +114,11 @@ const BASELINE: Record<string, readonly string[]> = {
|
|
|
114
114
|
"src/runtime/routes/retrospective-routes.ts",
|
|
115
115
|
"src/runtime/routes/secret-routes.ts",
|
|
116
116
|
"src/schedule/scheduler.ts",
|
|
117
|
-
"src/skills/
|
|
117
|
+
"src/skills/cloud-store.ts",
|
|
118
118
|
"src/skills/uninstall.ts",
|
|
119
119
|
"src/tools/filesystem/write.ts",
|
|
120
120
|
"src/tools/skills/find-similar-skills.ts",
|
|
121
|
-
"src/tools/skills/scaffold-
|
|
121
|
+
"src/tools/skills/scaffold-cloud.ts",
|
|
122
122
|
"src/tools/tool-manifest.ts",
|
|
123
123
|
"src/workflows/leaf-runner.ts",
|
|
124
124
|
],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
2
2
|
|
|
3
3
|
import type { Services } from "../config/schemas/services.js";
|
|
4
|
-
import { PLATFORM_PROVIDER_META } from "../providers/
|
|
4
|
+
import { PLATFORM_PROVIDER_META } from "../providers/cloud-proxy/constants.js";
|
|
5
5
|
import { credentialKey } from "../security/credential-key.js";
|
|
6
6
|
import { useMemorySecureKeyMap } from "./helpers/secure-keys.js";
|
|
7
7
|
|
|
@@ -103,16 +103,16 @@ const defaultWebSearchService: Services["web-search"] = {
|
|
|
103
103
|
};
|
|
104
104
|
|
|
105
105
|
mock.module("../config/env.js", () => ({
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
getCloudBaseUrl: () => mockCloudBaseUrl,
|
|
107
|
+
getCloudAssistantId: () => mockCloudAssistantId,
|
|
108
108
|
}));
|
|
109
109
|
|
|
110
110
|
// The REAL secure-keys module pinned to a live memory backend; managed
|
|
111
111
|
// credentials are seeded under their real credentialKey lookups.
|
|
112
112
|
const secureKeys = useMemorySecureKeyMap();
|
|
113
113
|
|
|
114
|
-
mock.module("../
|
|
115
|
-
|
|
114
|
+
mock.module("../cloud/feature-gate.js", () => ({
|
|
115
|
+
areCloudFeaturesEnabled: () => true,
|
|
116
116
|
}));
|
|
117
117
|
|
|
118
118
|
import { LLMSchema } from "../config/schemas/llm.js";
|
|
@@ -176,13 +176,12 @@ const MANAGED_FALLBACK_PROVIDERS: string[] = [
|
|
|
176
176
|
"typesafe",
|
|
177
177
|
];
|
|
178
178
|
|
|
179
|
-
let
|
|
180
|
-
let
|
|
179
|
+
let mockCloudBaseUrl = "";
|
|
180
|
+
let mockCloudAssistantId = "";
|
|
181
181
|
|
|
182
|
-
function
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
secureKeys.set(credentialKey("cadet", "platform_base_url"), PLATFORM_BASE);
|
|
182
|
+
function enableCloudProxy() {
|
|
183
|
+
mockCloudBaseUrl = PLATFORM_BASE;
|
|
184
|
+
mockCloudAssistantId = PLATFORM_ASSISTANT_ID;
|
|
186
185
|
secureKeys.set(
|
|
187
186
|
credentialKey("cadet", "platform_assistant_id"),
|
|
188
187
|
PLATFORM_ASSISTANT_ID,
|
|
@@ -190,10 +189,9 @@ function enableManagedProxy() {
|
|
|
190
189
|
secureKeys.set(credentialKey("cadet", "assistant_api_key"), MANAGED_API_KEY);
|
|
191
190
|
}
|
|
192
191
|
|
|
193
|
-
function
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
secureKeys.delete(credentialKey("cadet", "platform_base_url"));
|
|
192
|
+
function disableCloudProxy() {
|
|
193
|
+
mockCloudBaseUrl = "";
|
|
194
|
+
mockCloudAssistantId = "";
|
|
197
195
|
secureKeys.delete(credentialKey("cadet", "platform_assistant_id"));
|
|
198
196
|
secureKeys.delete(credentialKey("cadet", "assistant_api_key"));
|
|
199
197
|
}
|
|
@@ -253,7 +251,7 @@ const sampleTools: ToolDefinition[] = [
|
|
|
253
251
|
// ---------------------------------------------------------------------------
|
|
254
252
|
|
|
255
253
|
beforeEach(() => {
|
|
256
|
-
|
|
254
|
+
disableCloudProxy();
|
|
257
255
|
clearUserKeys();
|
|
258
256
|
lastGeminiConstructorOpts = null;
|
|
259
257
|
lastGeminiGenerateContentStreamParams = null;
|
|
@@ -265,12 +263,12 @@ beforeEach(() => {
|
|
|
265
263
|
setConfig("services", {});
|
|
266
264
|
});
|
|
267
265
|
|
|
268
|
-
describe("
|
|
266
|
+
describe("cloud proxy integration — credential precedence", () => {
|
|
269
267
|
describe("user keys present → providers use direct connections (not proxy)", () => {
|
|
270
268
|
test.each(DIRECT_OR_MANAGED_PROVIDER_KEYS)(
|
|
271
269
|
"%s routes via user-key when user key is provided regardless of managed context",
|
|
272
270
|
async (provider: string) => {
|
|
273
|
-
|
|
271
|
+
enableCloudProxy();
|
|
274
272
|
setUserKeysFor(provider);
|
|
275
273
|
await initializeProviders(makeProvidersConfig(provider, "test-model"));
|
|
276
274
|
expect(listProviders()).toContain(provider);
|
|
@@ -279,7 +277,7 @@ describe("managed proxy integration — credential precedence", () => {
|
|
|
279
277
|
);
|
|
280
278
|
|
|
281
279
|
test("all five configured providers route via user-key when user keys exist", async () => {
|
|
282
|
-
|
|
280
|
+
enableCloudProxy();
|
|
283
281
|
setUserKeysFor(...DIRECT_OR_MANAGED_PROVIDER_KEYS);
|
|
284
282
|
await initializeProviders(makeProvidersConfig("anthropic", "test-model"));
|
|
285
283
|
const registered = listProviders();
|
|
@@ -290,7 +288,7 @@ describe("managed proxy integration — credential precedence", () => {
|
|
|
290
288
|
});
|
|
291
289
|
|
|
292
290
|
test("user keys still route via user-key when managed context is disabled", async () => {
|
|
293
|
-
|
|
291
|
+
disableCloudProxy();
|
|
294
292
|
setUserKeysFor(...DIRECT_OR_MANAGED_PROVIDER_KEYS);
|
|
295
293
|
await initializeProviders(makeProvidersConfig("anthropic", "test-model"));
|
|
296
294
|
const registered = listProviders();
|
|
@@ -301,35 +299,35 @@ describe("managed proxy integration — credential precedence", () => {
|
|
|
301
299
|
});
|
|
302
300
|
});
|
|
303
301
|
|
|
304
|
-
describe("user keys absent + managed context available → providers use
|
|
302
|
+
describe("user keys absent + managed context available → providers use cloud proxy", () => {
|
|
305
303
|
test.each(MANAGED_FALLBACK_PROVIDERS)(
|
|
306
|
-
"%s routes via
|
|
304
|
+
"%s routes via cloud-proxy when no user key",
|
|
307
305
|
async (provider: string) => {
|
|
308
|
-
|
|
306
|
+
enableCloudProxy();
|
|
309
307
|
clearUserKeys();
|
|
310
308
|
await initializeProviders(
|
|
311
309
|
makeProvidersConfig("anthropic", "test-model"),
|
|
312
310
|
);
|
|
313
311
|
expect(listProviders()).toContain(provider);
|
|
314
|
-
expect(getProviderRoutingSource(provider)).toBe("
|
|
312
|
+
expect(getProviderRoutingSource(provider)).toBe("cloud-proxy");
|
|
315
313
|
},
|
|
316
314
|
);
|
|
317
315
|
|
|
318
316
|
test("managed bootstrap registers every managed-routable catalog provider", async () => {
|
|
319
|
-
|
|
317
|
+
enableCloudProxy();
|
|
320
318
|
clearUserKeys();
|
|
321
319
|
await initializeProviders(makeProvidersConfig("anthropic", "test-model"));
|
|
322
320
|
expect([...listProviders()].sort()).toEqual(
|
|
323
321
|
[...MANAGED_FALLBACK_PROVIDERS].sort(),
|
|
324
322
|
);
|
|
325
323
|
for (const provider of MANAGED_FALLBACK_PROVIDERS) {
|
|
326
|
-
expect(getProviderRoutingSource(provider)).toBe("
|
|
324
|
+
expect(getProviderRoutingSource(provider)).toBe("cloud-proxy");
|
|
327
325
|
}
|
|
328
326
|
expect(getProviderRoutingSource("openrouter")).toBeUndefined();
|
|
329
327
|
});
|
|
330
328
|
|
|
331
329
|
test("managed typesafe sends System One through the typesafe proxy path with the assistant key", async () => {
|
|
332
|
-
|
|
330
|
+
enableCloudProxy();
|
|
333
331
|
clearUserKeys();
|
|
334
332
|
await initializeProviders(makeProvidersConfig("anthropic", "test-model"));
|
|
335
333
|
|
|
@@ -367,7 +365,7 @@ describe("managed proxy integration — credential precedence", () => {
|
|
|
367
365
|
});
|
|
368
366
|
|
|
369
367
|
test("managed anthropic uses anthropic proxy path", async () => {
|
|
370
|
-
|
|
368
|
+
enableCloudProxy();
|
|
371
369
|
clearUserKeys();
|
|
372
370
|
await initializeProviders(
|
|
373
371
|
makeProvidersConfig("anthropic", "claude-opus-4-6"),
|
|
@@ -383,7 +381,7 @@ describe("managed proxy integration — credential precedence", () => {
|
|
|
383
381
|
});
|
|
384
382
|
|
|
385
383
|
test("managed openai uses openai proxy path", async () => {
|
|
386
|
-
|
|
384
|
+
enableCloudProxy();
|
|
387
385
|
clearUserKeys();
|
|
388
386
|
await initializeProviders(makeProvidersConfig("openai", "gpt-4o"));
|
|
389
387
|
|
|
@@ -397,7 +395,7 @@ describe("managed proxy integration — credential precedence", () => {
|
|
|
397
395
|
});
|
|
398
396
|
|
|
399
397
|
test("managed gemini uses gemini proxy path", async () => {
|
|
400
|
-
|
|
398
|
+
enableCloudProxy();
|
|
401
399
|
clearUserKeys();
|
|
402
400
|
await initializeProviders(makeProvidersConfig("anthropic", "test-model"));
|
|
403
401
|
|
|
@@ -410,7 +408,7 @@ describe("managed proxy integration — credential precedence", () => {
|
|
|
410
408
|
});
|
|
411
409
|
|
|
412
410
|
test("managed gemini receives attribution headers outside request JSON", async () => {
|
|
413
|
-
|
|
411
|
+
enableCloudProxy();
|
|
414
412
|
clearUserKeys();
|
|
415
413
|
setConfig("llm", {
|
|
416
414
|
profiles: {
|
|
@@ -467,7 +465,7 @@ describe("managed proxy integration — credential precedence", () => {
|
|
|
467
465
|
});
|
|
468
466
|
|
|
469
467
|
test("managed gemini omits attribution headers without callSite", async () => {
|
|
470
|
-
|
|
468
|
+
enableCloudProxy();
|
|
471
469
|
clearUserKeys();
|
|
472
470
|
await initializeProviders(
|
|
473
471
|
makeProvidersConfig("gemini", "gemini-3.1-pro"),
|
|
@@ -492,7 +490,7 @@ describe("managed proxy integration — credential precedence", () => {
|
|
|
492
490
|
test.each(DIRECT_OR_MANAGED_PROVIDER_KEYS)(
|
|
493
491
|
"%s is NOT registered when no user key and no managed context",
|
|
494
492
|
async (provider: string) => {
|
|
495
|
-
|
|
493
|
+
disableCloudProxy();
|
|
496
494
|
clearUserKeys();
|
|
497
495
|
await initializeProviders(
|
|
498
496
|
makeProvidersConfig("anthropic", "test-model"),
|
|
@@ -503,53 +501,53 @@ describe("managed proxy integration — credential precedence", () => {
|
|
|
503
501
|
);
|
|
504
502
|
|
|
505
503
|
test("registry is empty when no keys and no managed context (non-ollama primary)", async () => {
|
|
506
|
-
|
|
504
|
+
disableCloudProxy();
|
|
507
505
|
clearUserKeys();
|
|
508
506
|
await initializeProviders(makeProvidersConfig("anthropic", "test-model"));
|
|
509
507
|
expect(listProviders()).toEqual([]);
|
|
510
508
|
});
|
|
511
509
|
});
|
|
512
510
|
|
|
513
|
-
describe("mixed: some user keys +
|
|
514
|
-
test("user key for anthropic routes direct and
|
|
515
|
-
|
|
511
|
+
describe("mixed: some user keys + cloud fallback fills gaps", () => {
|
|
512
|
+
test("user key for anthropic routes direct and cloud fallback fills openai, gemini, and fireworks", async () => {
|
|
513
|
+
enableCloudProxy();
|
|
516
514
|
setUserKeysFor("anthropic");
|
|
517
515
|
await initializeProviders(makeProvidersConfig("anthropic", "test-model"));
|
|
518
516
|
const registered = listProviders();
|
|
519
517
|
expect(registered).toContain("anthropic");
|
|
520
518
|
expect(getProviderRoutingSource("anthropic")).toBe("user-key");
|
|
521
519
|
expect(registered).toContain("openai");
|
|
522
|
-
expect(getProviderRoutingSource("openai")).toBe("
|
|
520
|
+
expect(getProviderRoutingSource("openai")).toBe("cloud-proxy");
|
|
523
521
|
expect(registered).toContain("gemini");
|
|
524
|
-
expect(getProviderRoutingSource("gemini")).toBe("
|
|
522
|
+
expect(getProviderRoutingSource("gemini")).toBe("cloud-proxy");
|
|
525
523
|
expect(registered).toContain("fireworks");
|
|
526
|
-
expect(getProviderRoutingSource("fireworks")).toBe("
|
|
524
|
+
expect(getProviderRoutingSource("fireworks")).toBe("cloud-proxy");
|
|
527
525
|
expect(registered).not.toContain("openrouter");
|
|
528
526
|
expect(getProviderRoutingSource("openrouter")).toBeUndefined();
|
|
529
527
|
});
|
|
530
528
|
|
|
531
|
-
test("user key for openai routes direct while anthropic, gemini, and fireworks still bootstrap via
|
|
532
|
-
|
|
529
|
+
test("user key for openai routes direct while anthropic, gemini, and fireworks still bootstrap via cloud proxy", async () => {
|
|
530
|
+
enableCloudProxy();
|
|
533
531
|
setUserKeysFor("openai");
|
|
534
532
|
await initializeProviders(makeProvidersConfig("openai", "test-model"));
|
|
535
533
|
const registered = listProviders();
|
|
536
534
|
expect(registered).toContain("openai");
|
|
537
535
|
expect(getProviderRoutingSource("openai")).toBe("user-key");
|
|
538
536
|
expect(registered).toContain("anthropic");
|
|
539
|
-
expect(getProviderRoutingSource("anthropic")).toBe("
|
|
537
|
+
expect(getProviderRoutingSource("anthropic")).toBe("cloud-proxy");
|
|
540
538
|
expect(registered).toContain("gemini");
|
|
541
|
-
expect(getProviderRoutingSource("gemini")).toBe("
|
|
539
|
+
expect(getProviderRoutingSource("gemini")).toBe("cloud-proxy");
|
|
542
540
|
expect(registered).toContain("fireworks");
|
|
543
|
-
expect(getProviderRoutingSource("fireworks")).toBe("
|
|
541
|
+
expect(getProviderRoutingSource("fireworks")).toBe("cloud-proxy");
|
|
544
542
|
expect(registered).not.toContain("openrouter");
|
|
545
543
|
expect(getProviderRoutingSource("openrouter")).toBeUndefined();
|
|
546
544
|
});
|
|
547
545
|
});
|
|
548
546
|
});
|
|
549
547
|
|
|
550
|
-
describe("
|
|
551
|
-
test("managed Fireworks/Kimi tool call completes through the
|
|
552
|
-
|
|
548
|
+
describe("cloud proxy integration — managed web search routing", () => {
|
|
549
|
+
test("managed Fireworks/Kimi tool call completes through the cloud Brave proxy", async () => {
|
|
550
|
+
enableCloudProxy();
|
|
553
551
|
clearUserKeys();
|
|
554
552
|
setConfig("services", { "web-search": MANAGED_NATIVE_WEB_SEARCH });
|
|
555
553
|
|
|
@@ -565,9 +563,9 @@ describe("managed proxy integration — managed web search routing", () => {
|
|
|
565
563
|
web: {
|
|
566
564
|
results: [
|
|
567
565
|
{
|
|
568
|
-
title: "
|
|
566
|
+
title: "Cloud Result",
|
|
569
567
|
url: "https://example.com/platform-result",
|
|
570
|
-
description: "Returned by the
|
|
568
|
+
description: "Returned by the cloud Brave proxy.",
|
|
571
569
|
age: "1 day ago",
|
|
572
570
|
},
|
|
573
571
|
],
|
|
@@ -619,12 +617,12 @@ describe("managed proxy integration — managed web search routing", () => {
|
|
|
619
617
|
);
|
|
620
618
|
|
|
621
619
|
expect(result.isError).toBe(false);
|
|
622
|
-
expect(result.content).toContain("
|
|
620
|
+
expect(result.content).toContain("Cloud Result");
|
|
623
621
|
expect(result.activityMetadata?.webSearch?.provider).toBe("brave");
|
|
624
622
|
expect(result.activityMetadata?.webSearch?.resultCount).toBe(1);
|
|
625
623
|
|
|
626
624
|
expect(fetchUrls).toEqual([
|
|
627
|
-
`${PLATFORM_BASE}/v1/assistants/${PLATFORM_ASSISTANT_ID}/
|
|
625
|
+
`${PLATFORM_BASE}/v1/assistants/${PLATFORM_ASSISTANT_ID}/cloud-search-proxy/brave/`,
|
|
628
626
|
]);
|
|
629
627
|
} finally {
|
|
630
628
|
globalThis.fetch = originalFetch;
|
|
@@ -632,23 +630,23 @@ describe("managed proxy integration — managed web search routing", () => {
|
|
|
632
630
|
});
|
|
633
631
|
});
|
|
634
632
|
|
|
635
|
-
describe("
|
|
636
|
-
test("ollama is never registered via
|
|
637
|
-
|
|
633
|
+
describe("cloud proxy integration — ollama exclusion", () => {
|
|
634
|
+
test("ollama is never registered via cloud proxy fallback", async () => {
|
|
635
|
+
enableCloudProxy();
|
|
638
636
|
clearUserKeys();
|
|
639
637
|
await initializeProviders(makeProvidersConfig("anthropic", "test-model"));
|
|
640
638
|
expect(listProviders()).not.toContain("ollama");
|
|
641
639
|
});
|
|
642
640
|
|
|
643
641
|
test("ollama registers only when explicitly configured as provider", async () => {
|
|
644
|
-
|
|
642
|
+
enableCloudProxy();
|
|
645
643
|
clearUserKeys();
|
|
646
644
|
await initializeProviders(makeProvidersConfig("ollama", "test-model"));
|
|
647
645
|
expect(listProviders()).toContain("ollama");
|
|
648
646
|
});
|
|
649
647
|
|
|
650
648
|
test("ollama registers with explicit API key", async () => {
|
|
651
|
-
|
|
649
|
+
enableCloudProxy();
|
|
652
650
|
const ollamaKey = credentialKey("ollama", "api_key");
|
|
653
651
|
secureKeys.set(ollamaKey, "ollama-key");
|
|
654
652
|
userKeyNames.push(ollamaKey);
|
|
@@ -665,13 +663,13 @@ describe("managed proxy integration — ollama exclusion", () => {
|
|
|
665
663
|
});
|
|
666
664
|
|
|
667
665
|
describe("config mode flip → provider reinit", () => {
|
|
668
|
-
test("re-running initializeProviders after managed→your-own flip switches gemini from
|
|
669
|
-
// Phase 1: managed mode without user key → gemini registered as
|
|
666
|
+
test("re-running initializeProviders after managed→your-own flip switches gemini from cloud-proxy to user-key", async () => {
|
|
667
|
+
// Phase 1: managed mode without user key → gemini registered as cloud-proxy.
|
|
670
668
|
// This is the pre-patch state before PATCH /v1/config is called.
|
|
671
|
-
|
|
669
|
+
enableCloudProxy();
|
|
672
670
|
clearUserKeys();
|
|
673
671
|
await initializeProviders(makeProvidersConfig("gemini", "gemini-2.5-pro"));
|
|
674
|
-
expect(getProviderRoutingSource("gemini")).toBe("
|
|
672
|
+
expect(getProviderRoutingSource("gemini")).toBe("cloud-proxy");
|
|
675
673
|
|
|
676
674
|
// Phase 2: user has now saved a key (POST /v1/secrets), then PATCHed config
|
|
677
675
|
// to mode=your-own. handlePatchConfig calls initializeProviders(getConfig())
|
|
@@ -681,22 +679,22 @@ describe("config mode flip → provider reinit", () => {
|
|
|
681
679
|
expect(getProviderRoutingSource("gemini")).toBe("user-key");
|
|
682
680
|
});
|
|
683
681
|
|
|
684
|
-
test("without reinit after config patch, gemini source remains stale
|
|
682
|
+
test("without reinit after config patch, gemini source remains stale cloud-proxy", async () => {
|
|
685
683
|
// Demonstrates the bug: if initializeProviders is NOT called after saving
|
|
686
|
-
// config, the routing source stays
|
|
687
|
-
|
|
684
|
+
// config, the routing source stays cloud-proxy even after mode flip.
|
|
685
|
+
enableCloudProxy();
|
|
688
686
|
clearUserKeys();
|
|
689
687
|
await initializeProviders(makeProvidersConfig("gemini", "gemini-2.5-pro"));
|
|
690
|
-
expect(getProviderRoutingSource("gemini")).toBe("
|
|
688
|
+
expect(getProviderRoutingSource("gemini")).toBe("cloud-proxy");
|
|
691
689
|
|
|
692
690
|
// Flip mode but do NOT re-initialize providers (simulates skipping reinit).
|
|
693
691
|
setUserKeysFor("gemini");
|
|
694
|
-
// Source stays
|
|
695
|
-
expect(getProviderRoutingSource("gemini")).toBe("
|
|
692
|
+
// Source stays cloud-proxy because initializeProviders was not called.
|
|
693
|
+
expect(getProviderRoutingSource("gemini")).toBe("cloud-proxy");
|
|
696
694
|
});
|
|
697
695
|
});
|
|
698
696
|
|
|
699
|
-
describe("
|
|
697
|
+
describe("cloud proxy integration — constants integrity", () => {
|
|
700
698
|
test("anthropic, openai, gemini, fireworks, together, and cadet have metadata with managed=true and a proxyPath", () => {
|
|
701
699
|
for (const provider of [
|
|
702
700
|
"anthropic",
|
|
@@ -744,15 +742,15 @@ describe("managed proxy integration — constants integrity", () => {
|
|
|
744
742
|
);
|
|
745
743
|
});
|
|
746
744
|
|
|
747
|
-
test("cadet routes through the
|
|
748
|
-
// The proxy path is the
|
|
749
|
-
// coordination with the
|
|
745
|
+
test("cadet routes through the cloud runtime-proxy path", () => {
|
|
746
|
+
// The proxy path is the cloud's wire contract — renamed in
|
|
747
|
+
// coordination with the cloud deploy, not here.
|
|
750
748
|
expect(PLATFORM_PROVIDER_META.cadet.proxyPath).toBe(
|
|
751
749
|
"/v1/runtime-proxy/cadet",
|
|
752
750
|
);
|
|
753
751
|
});
|
|
754
752
|
|
|
755
|
-
test("openrouter is not
|
|
753
|
+
test("openrouter is not cloud proxy capable", () => {
|
|
756
754
|
expect(PLATFORM_PROVIDER_META.openrouter.managed).toBe(false);
|
|
757
755
|
expect(PLATFORM_PROVIDER_META.openrouter.proxyPath).toBeUndefined();
|
|
758
756
|
});
|
|
@@ -342,7 +342,7 @@ describe("ProviderCommitMessageGenerator", () => {
|
|
|
342
342
|
provider: mockProvider,
|
|
343
343
|
configuredProviderName: "cadet",
|
|
344
344
|
};
|
|
345
|
-
const commitMsg = "fix:
|
|
345
|
+
const commitMsg = "fix: cloud-route commit";
|
|
346
346
|
mockSendMessage.mockResolvedValueOnce(makeSuccessResponse(commitMsg));
|
|
347
347
|
const gen = getCommitMessageGenerator();
|
|
348
348
|
const result = await gen.generateCommitMessage(baseContext, {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Boot-time provider_connection backfill: an existing user connection for
|
|
3
3
|
* the entry's provider must win over the mode-derived default.
|
|
4
4
|
*
|
|
5
|
-
* On managed (
|
|
5
|
+
* On managed (cloud-hosted) installs the mode default is the billed
|
|
6
6
|
* `cadet` connection — stamping it onto a connection-less BYOK-intent
|
|
7
7
|
* profile permanently routes the user's own-key setup through managed
|
|
8
8
|
* billing. On your-own installs the mode default creates a parallel
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
|
|
28
28
|
await initializeDb();
|
|
29
29
|
|
|
30
|
-
const originalIsPlatform = process.env.
|
|
30
|
+
const originalIsPlatform = process.env.IS_CLOUD;
|
|
31
31
|
|
|
32
32
|
function seedConfig(profiles: Record<string, unknown>): void {
|
|
33
33
|
writeFileSync(
|
|
@@ -49,14 +49,14 @@ beforeEach(() => {
|
|
|
49
49
|
|
|
50
50
|
afterEach(() => {
|
|
51
51
|
if (originalIsPlatform === undefined) {
|
|
52
|
-
delete process.env.
|
|
52
|
+
delete process.env.IS_CLOUD;
|
|
53
53
|
} else {
|
|
54
|
-
process.env.
|
|
54
|
+
process.env.IS_CLOUD = originalIsPlatform;
|
|
55
55
|
}
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
test("managed mode prefers an existing user connection over the cadet default", () => {
|
|
59
|
-
process.env.
|
|
59
|
+
process.env.IS_CLOUD = "true";
|
|
60
60
|
const created = createConnection(getDb(), {
|
|
61
61
|
name: "anthropic-personal",
|
|
62
62
|
provider: "anthropic",
|
|
@@ -71,7 +71,7 @@ test("managed mode prefers an existing user connection over the cadet default",
|
|
|
71
71
|
});
|
|
72
72
|
|
|
73
73
|
test("managed mode still stamps cadet when no user connection exists", () => {
|
|
74
|
-
process.env.
|
|
74
|
+
process.env.IS_CLOUD = "true";
|
|
75
75
|
seedConfig({ byok: { provider: "anthropic", model: "claude-fable-5" } });
|
|
76
76
|
|
|
77
77
|
runProviderConnectionsBackfill(getDb());
|
|
@@ -80,7 +80,7 @@ test("managed mode still stamps cadet when no user connection exists", () => {
|
|
|
80
80
|
});
|
|
81
81
|
|
|
82
82
|
test("managed-owned entries keep the cadet stamp even when a user connection exists", () => {
|
|
83
|
-
process.env.
|
|
83
|
+
process.env.IS_CLOUD = "true";
|
|
84
84
|
const created = createConnection(getDb(), {
|
|
85
85
|
name: "anthropic-personal",
|
|
86
86
|
provider: "anthropic",
|
|
@@ -118,7 +118,7 @@ test("managed-owned entries keep the cadet stamp even when a user connection exi
|
|
|
118
118
|
});
|
|
119
119
|
|
|
120
120
|
test("routing-identity providers are never stamped with a connection", () => {
|
|
121
|
-
process.env.
|
|
121
|
+
process.env.IS_CLOUD = "true";
|
|
122
122
|
seedConfig({
|
|
123
123
|
managedRoute: { provider: "cadet", model: "claude-fable-5" },
|
|
124
124
|
subscription: { provider: "chatgpt", model: "gpt-5.5" },
|
|
@@ -131,7 +131,7 @@ test("routing-identity providers are never stamped with a connection", () => {
|
|
|
131
131
|
});
|
|
132
132
|
|
|
133
133
|
test("your-own mode reuses a custom-named connection instead of creating -personal", () => {
|
|
134
|
-
delete process.env.
|
|
134
|
+
delete process.env.IS_CLOUD;
|
|
135
135
|
const created = createConnection(getDb(), {
|
|
136
136
|
name: "my-anthropic",
|
|
137
137
|
provider: "anthropic",
|