@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
|
@@ -874,7 +874,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
874
874
|
expect(initializeProvidersCalls).toBe(0);
|
|
875
875
|
});
|
|
876
876
|
|
|
877
|
-
test("rejects a custom pointer at a
|
|
877
|
+
test("rejects a custom pointer at a cloud backup name", async () => {
|
|
878
878
|
await expect(
|
|
879
879
|
replaceProfileRoute.handler({
|
|
880
880
|
pathParams: { name: "custom" },
|
|
@@ -987,7 +987,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
987
987
|
// across tests in this file, so a leaked openai-personal would otherwise
|
|
988
988
|
// win the derivation.
|
|
989
989
|
getDb().delete(providerConnections).run();
|
|
990
|
-
// The single Cadet
|
|
990
|
+
// The single Cadet Cloud connection serves managed-routable providers.
|
|
991
991
|
createConnection(getDb(), {
|
|
992
992
|
name: "cadet",
|
|
993
993
|
provider: "cadet",
|
|
@@ -1021,7 +1021,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1021
1021
|
).profiles.custom;
|
|
1022
1022
|
|
|
1023
1023
|
// No personal openai connection exists, so the route auto-derives the
|
|
1024
|
-
// single Cadet
|
|
1024
|
+
// single Cadet Cloud connection for this managed-routable provider.
|
|
1025
1025
|
expect(savedProfile.provider_connection).toBe("cadet");
|
|
1026
1026
|
});
|
|
1027
1027
|
|
|
@@ -1136,10 +1136,10 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1136
1136
|
expect(conn!.provider).toBe("minimax");
|
|
1137
1137
|
});
|
|
1138
1138
|
|
|
1139
|
-
describe("
|
|
1139
|
+
describe("cloud profile guard", () => {
|
|
1140
1140
|
beforeEach(() => {
|
|
1141
1141
|
// Seed two managed-source profiles alongside the existing custom one.
|
|
1142
|
-
// Every
|
|
1142
|
+
// Every cloud profile name (including the flag-gated os-beta) is
|
|
1143
1143
|
// invariant while its entry is managed-source: fully read-only except
|
|
1144
1144
|
// the disabled → active status transition.
|
|
1145
1145
|
const profiles = (
|
|
@@ -1168,9 +1168,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1168
1168
|
pathParams: { name: "os-beta" },
|
|
1169
1169
|
body: { label: "My OS Beta" },
|
|
1170
1170
|
}),
|
|
1171
|
-
).rejects.toThrow(
|
|
1172
|
-
/Cannot edit managed profile "os-beta" fields \[label\]/,
|
|
1173
|
-
);
|
|
1171
|
+
).rejects.toThrow(/Cannot edit cloud profile "os-beta" fields \[label\]/);
|
|
1174
1172
|
// Guard rejects before any write — the seed label is untouched.
|
|
1175
1173
|
expect(persistedProfile("os-beta").label).toBe("OS Beta");
|
|
1176
1174
|
});
|
|
@@ -1182,7 +1180,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1182
1180
|
body: { status: "disabled" },
|
|
1183
1181
|
}),
|
|
1184
1182
|
).rejects.toThrow(
|
|
1185
|
-
'Cannot edit
|
|
1183
|
+
'Cannot edit cloud profile "os-beta". Cloud profiles are read-only',
|
|
1186
1184
|
);
|
|
1187
1185
|
// Guard rejects before any write — the seed status is untouched.
|
|
1188
1186
|
expect(persistedProfile("os-beta").status).toBe("active");
|
|
@@ -1215,10 +1213,10 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1215
1213
|
expect(savedProfile.source).toBe("managed");
|
|
1216
1214
|
});
|
|
1217
1215
|
|
|
1218
|
-
// The full commit-time rejection matrix for invariant
|
|
1219
|
-
// lives in src/__tests__/
|
|
1216
|
+
// The full commit-time rejection matrix for invariant cloud profiles
|
|
1217
|
+
// lives in src/__tests__/cloud-profile-guard.test.ts.
|
|
1220
1218
|
|
|
1221
|
-
test("rejects provider edit on
|
|
1219
|
+
test("rejects provider edit on cloud profile with disallowed-keys error", async () => {
|
|
1222
1220
|
// The handler is `async`, so synchronous BadRequest throws still
|
|
1223
1221
|
// surface as a rejected promise; assert via `.rejects.toThrow`.
|
|
1224
1222
|
await expect(
|
|
@@ -1227,12 +1225,12 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1227
1225
|
body: { provider: "openai", model: "gpt-5" },
|
|
1228
1226
|
}),
|
|
1229
1227
|
).rejects.toThrow(
|
|
1230
|
-
/Cannot edit
|
|
1228
|
+
/Cannot edit cloud profile "balanced" fields \[provider, model\]/,
|
|
1231
1229
|
);
|
|
1232
1230
|
});
|
|
1233
1231
|
|
|
1234
1232
|
test("rejects mixed-field bodies without partially applying anything", async () => {
|
|
1235
|
-
// Neither label nor maxTokens is writable on a
|
|
1233
|
+
// Neither label nor maxTokens is writable on a cloud profile — the
|
|
1236
1234
|
// reject must fire before any write, so the saver is never invoked.
|
|
1237
1235
|
await expect(
|
|
1238
1236
|
replaceProfileRoute.handler({
|
|
@@ -1240,7 +1238,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1240
1238
|
body: { label: "Try", maxTokens: 999 },
|
|
1241
1239
|
}),
|
|
1242
1240
|
).rejects.toThrow(
|
|
1243
|
-
/Cannot edit
|
|
1241
|
+
/Cannot edit cloud profile "balanced" fields \[maxTokens, label\]/,
|
|
1244
1242
|
);
|
|
1245
1243
|
// Reject path skips commitConfigWrite entirely — no provider reinit
|
|
1246
1244
|
// or cache invalidation should fire on a guard rejection.
|
|
@@ -1323,7 +1321,7 @@ describe("PATCH /v1/config fallbackProfile write protection", () => {
|
|
|
1323
1321
|
expect(initializeProvidersCalls).toBe(0);
|
|
1324
1322
|
});
|
|
1325
1323
|
|
|
1326
|
-
test("rejects a custom pointer at a
|
|
1324
|
+
test("rejects a custom pointer at a cloud backup name", async () => {
|
|
1327
1325
|
await expect(
|
|
1328
1326
|
patchRoute.handler({
|
|
1329
1327
|
body: {
|
|
@@ -1440,12 +1438,13 @@ describe("custom profile write normalization (complete overrides)", () => {
|
|
|
1440
1438
|
});
|
|
1441
1439
|
const saved = savedProfiles().partial;
|
|
1442
1440
|
const contextWindow = saved.contextWindow as Record<string, unknown>;
|
|
1443
|
-
|
|
1441
|
+
// Schema-canonical saves strip keys the schema doesn't know.
|
|
1442
|
+
expect(contextWindow.futureField).toBeUndefined();
|
|
1444
1443
|
expect(contextWindow.maxInputTokens).toBe(111);
|
|
1445
1444
|
expect(saved.provider).toBe("anthropic");
|
|
1446
1445
|
});
|
|
1447
1446
|
|
|
1448
|
-
test("unknown profile keys
|
|
1447
|
+
test("unknown profile keys are stripped by the schema parse", async () => {
|
|
1449
1448
|
(
|
|
1450
1449
|
rawConfigFixture.llm as { profiles: Record<string, unknown> }
|
|
1451
1450
|
).profiles.partial = {
|
|
@@ -1458,7 +1457,7 @@ describe("custom profile write normalization (complete overrides)", () => {
|
|
|
1458
1457
|
body: { path: "llm.profiles.partial.maxTokens", value: 999 },
|
|
1459
1458
|
});
|
|
1460
1459
|
const saved = savedProfiles().partial;
|
|
1461
|
-
expect(saved.futureField).
|
|
1460
|
+
expect(saved.futureField).toBeUndefined();
|
|
1462
1461
|
expect(saved.maxTokens).toBe(999);
|
|
1463
1462
|
expect(saved.provider).toBe("anthropic");
|
|
1464
1463
|
});
|
|
@@ -1474,7 +1473,7 @@ describe("custom profile write normalization (complete overrides)", () => {
|
|
|
1474
1473
|
expect(saved.maxTokens).toBe(12345);
|
|
1475
1474
|
});
|
|
1476
1475
|
|
|
1477
|
-
test("a
|
|
1476
|
+
test("a cloud status re-enable stays a thin stub", async () => {
|
|
1478
1477
|
(
|
|
1479
1478
|
rawConfigFixture.llm as { profiles: Record<string, unknown> }
|
|
1480
1479
|
).profiles.balanced = { source: "managed", status: "disabled" };
|
|
@@ -1536,7 +1535,24 @@ describe("call-site override writes stay sparse", () => {
|
|
|
1536
1535
|
).callSites ?? {};
|
|
1537
1536
|
|
|
1538
1537
|
beforeEach(() => {
|
|
1539
|
-
rawConfigFixture = {
|
|
1538
|
+
rawConfigFixture = {
|
|
1539
|
+
llm: {
|
|
1540
|
+
// The schema's superRefine rejects a call site that references an
|
|
1541
|
+
// undefined profile, so the fixtures define the ones they point at.
|
|
1542
|
+
profiles: {
|
|
1543
|
+
mine: {
|
|
1544
|
+
source: "user",
|
|
1545
|
+
provider: "anthropic",
|
|
1546
|
+
model: "claude-sonnet",
|
|
1547
|
+
},
|
|
1548
|
+
old: {
|
|
1549
|
+
source: "user",
|
|
1550
|
+
provider: "anthropic",
|
|
1551
|
+
model: "claude-sonnet",
|
|
1552
|
+
},
|
|
1553
|
+
},
|
|
1554
|
+
},
|
|
1555
|
+
};
|
|
1540
1556
|
seedRawConfig();
|
|
1541
1557
|
});
|
|
1542
1558
|
|
|
@@ -1580,7 +1596,21 @@ describe("call-site override writes stay sparse", () => {
|
|
|
1580
1596
|
|
|
1581
1597
|
test("an existing entry's own customization is preserved", async () => {
|
|
1582
1598
|
rawConfigFixture = {
|
|
1583
|
-
llm: {
|
|
1599
|
+
llm: {
|
|
1600
|
+
profiles: {
|
|
1601
|
+
mine: {
|
|
1602
|
+
source: "user",
|
|
1603
|
+
provider: "anthropic",
|
|
1604
|
+
model: "claude-sonnet",
|
|
1605
|
+
},
|
|
1606
|
+
old: {
|
|
1607
|
+
source: "user",
|
|
1608
|
+
provider: "anthropic",
|
|
1609
|
+
model: "claude-sonnet",
|
|
1610
|
+
},
|
|
1611
|
+
},
|
|
1612
|
+
callSites: { recall: { profile: "old", maxTokens: 200 } },
|
|
1613
|
+
},
|
|
1584
1614
|
};
|
|
1585
1615
|
seedRawConfig();
|
|
1586
1616
|
await configPatchRoute.handler({
|
|
@@ -1647,7 +1677,7 @@ describe("sparse services.stt patch provider seeding", () => {
|
|
|
1647
1677
|
expect(parsed.stt.language).toBe("hi");
|
|
1648
1678
|
expect(parsed.stt.provider).toBe(effectiveProvider);
|
|
1649
1679
|
// Unrelated tts settings survive: no services-section reset happened.
|
|
1650
|
-
expect(savedServices().tts).
|
|
1680
|
+
expect(savedServices().tts).toMatchObject({ provider: "elevenlabs" });
|
|
1651
1681
|
});
|
|
1652
1682
|
|
|
1653
1683
|
test("language patch onto a config that has a provider is a pure merge", async () => {
|
|
@@ -1679,13 +1709,17 @@ describe("sparse services.stt patch provider seeding", () => {
|
|
|
1679
1709
|
expect(stt.providers).toEqual({ deepgram: {} });
|
|
1680
1710
|
});
|
|
1681
1711
|
|
|
1682
|
-
test("a patch not touching stt
|
|
1712
|
+
test("a patch not touching stt leaves the materialized block intact", async () => {
|
|
1683
1713
|
await configPatchRoute.handler({
|
|
1684
1714
|
body: { heartbeat: { activeHoursStart: 9 } },
|
|
1685
1715
|
});
|
|
1686
1716
|
|
|
1687
|
-
|
|
1688
|
-
|
|
1717
|
+
// The merge base is the parsed config, whose stt block carries the
|
|
1718
|
+
// schema default — complete and provider-backed, so the LUM-2758
|
|
1719
|
+
// salvage family (a sparse invented block) cannot occur.
|
|
1720
|
+
expect(savedServices().stt).toMatchObject({ language: "multi" });
|
|
1721
|
+
expect(typeof savedServices().stt!.provider).toBe("string");
|
|
1722
|
+
expect(savedServices().tts).toMatchObject({ provider: "elevenlabs" });
|
|
1689
1723
|
});
|
|
1690
1724
|
|
|
1691
1725
|
test("a config_set language write onto a sparse config seeds the provider", async () => {
|
|
@@ -1704,7 +1738,7 @@ describe("sparse services.stt patch provider seeding", () => {
|
|
|
1704
1738
|
expect(stt.provider).toBe(effectiveProvider);
|
|
1705
1739
|
const parsed = getConfig().services;
|
|
1706
1740
|
expect(parsed.stt.language).toBe("hi");
|
|
1707
|
-
expect(savedServices().tts).
|
|
1741
|
+
expect(savedServices().tts).toMatchObject({ provider: "elevenlabs" });
|
|
1708
1742
|
});
|
|
1709
1743
|
|
|
1710
1744
|
test("a config_set onto a config with a provider leaves it untouched", async () => {
|
|
@@ -1754,7 +1788,7 @@ describe("config invariant flag enrichment", () => {
|
|
|
1754
1788
|
label: "OS Beta",
|
|
1755
1789
|
status: "active",
|
|
1756
1790
|
},
|
|
1757
|
-
// A user-owned profile sharing a
|
|
1791
|
+
// A user-owned profile sharing a cloud name: no invariant flag —
|
|
1758
1792
|
// the stamp is gated on `source: "managed"` to match the guard.
|
|
1759
1793
|
"cost-optimized": {
|
|
1760
1794
|
source: "user",
|
|
@@ -2016,26 +2050,21 @@ describe("config writes to a per-agent acp entry", () => {
|
|
|
2016
2050
|
expect(loadConfig().acp.agents.claude?.command).toBeUndefined();
|
|
2017
2051
|
});
|
|
2018
2052
|
|
|
2019
|
-
test("a nulled command on an id with no bundled profile is
|
|
2053
|
+
test("a nulled command on an id with no bundled profile is rejected", async () => {
|
|
2020
2054
|
rawConfigFixture = {
|
|
2021
2055
|
acp: { agents: { mine: { command: "my-acp", args: [] } } },
|
|
2022
2056
|
};
|
|
2023
2057
|
seedRawConfig();
|
|
2024
2058
|
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
}
|
|
2035
|
-
expect(result.error.issues.map((issue) => issue.path)).toEqual([
|
|
2036
|
-
["acp", "agents", "mine", "command"],
|
|
2037
|
-
]);
|
|
2038
|
-
expect(result.error.issues[0]?.message).toContain("acp.agents.mine");
|
|
2059
|
+
// The agents refinement requires a command for an id with no bundled
|
|
2060
|
+
// profile; the schema-validated write rejects instead of persisting a
|
|
2061
|
+
// config whose next load would salvage-drop the whole acp section.
|
|
2062
|
+
await expect(
|
|
2063
|
+
setRoute.handler({
|
|
2064
|
+
body: { path: "acp.agents.mine.command", value: null },
|
|
2065
|
+
}),
|
|
2066
|
+
).rejects.toMatchObject({ statusCode: 400 });
|
|
2067
|
+
expect(agentEntry(loadRawConfig(), "mine").command).toBe("my-acp");
|
|
2039
2068
|
});
|
|
2040
2069
|
|
|
2041
2070
|
test("a model set on a bare bundled entry survives the next load", async () => {
|
|
@@ -2105,7 +2134,7 @@ describe("persisted chat settings", () => {
|
|
|
2105
2134
|
{ notifications: { newMessageEnabled: "false" } },
|
|
2106
2135
|
{ notifications: { newMessageEnabled: null } },
|
|
2107
2136
|
])(
|
|
2108
|
-
`${writer} unrelated writes
|
|
2137
|
+
`${writer} unrelated writes succeed over malformed sections: %j`,
|
|
2109
2138
|
async (legacy) => {
|
|
2110
2139
|
rawConfigFixture = { ...legacy, maxStepsPerSession: 75 };
|
|
2111
2140
|
seedRawConfig();
|
|
@@ -2113,10 +2142,11 @@ describe("persisted chat settings", () => {
|
|
|
2113
2142
|
|
|
2114
2143
|
await writeSetting(writer, "maxStepsPerSession", 100);
|
|
2115
2144
|
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2145
|
+
// The loader's read-time recovery cleans malformed sections before
|
|
2146
|
+
// the merge, so no malformed value can block an unrelated write;
|
|
2147
|
+
// schema-canonical saves materialize defaults around what the user
|
|
2148
|
+
// set (the PATCH/SET writers heal the section, canonical rides).
|
|
2149
|
+
expect(loadRawConfig()).toMatchObject({ maxStepsPerSession: 100 });
|
|
2120
2150
|
expect(initializeProvidersCalls).toBe(1);
|
|
2121
2151
|
expect(clearEmbeddingBackendCacheCalls).toBe(1);
|
|
2122
2152
|
},
|
|
@@ -2124,7 +2154,7 @@ describe("persisted chat settings", () => {
|
|
|
2124
2154
|
|
|
2125
2155
|
test(`${writer} can repair one leaf without changing other legacy values`, async () => {
|
|
2126
2156
|
rawConfigFixture = {
|
|
2127
|
-
conversations: { autoArchive: { enabled: "true", afterDays:
|
|
2157
|
+
conversations: { autoArchive: { enabled: "true", afterDays: 14 } },
|
|
2128
2158
|
notifications: null,
|
|
2129
2159
|
};
|
|
2130
2160
|
seedRawConfig();
|
|
@@ -2132,9 +2162,8 @@ describe("persisted chat settings", () => {
|
|
|
2132
2162
|
|
|
2133
2163
|
await writeSetting(writer, "conversations.autoArchive.enabled", true);
|
|
2134
2164
|
|
|
2135
|
-
expect(loadRawConfig()).
|
|
2136
|
-
conversations: { autoArchive: { enabled: true, afterDays:
|
|
2137
|
-
notifications: null,
|
|
2165
|
+
expect(loadRawConfig()).toMatchObject({
|
|
2166
|
+
conversations: { autoArchive: { enabled: true, afterDays: 14 } },
|
|
2138
2167
|
});
|
|
2139
2168
|
});
|
|
2140
2169
|
|
|
@@ -2202,22 +2231,27 @@ describe("persisted chat settings", () => {
|
|
|
2202
2231
|
body: { conversations: { autoArchive: { enabled: null } } },
|
|
2203
2232
|
});
|
|
2204
2233
|
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2234
|
+
// Nulled leaves reset to the schema default on the canonical save (the
|
|
2235
|
+
// read-time recovery had already cleaned the stored nulls).
|
|
2236
|
+
expect(loadConfig().conversations.autoArchive).toEqual({
|
|
2237
|
+
enabled: false,
|
|
2238
|
+
afterDays: 7,
|
|
2208
2239
|
});
|
|
2209
2240
|
});
|
|
2210
2241
|
|
|
2211
|
-
test("sparse GET
|
|
2242
|
+
test("sparse GET returns the fully materialized typed config with effective chat settings", async () => {
|
|
2212
2243
|
rawConfigFixture = {};
|
|
2213
2244
|
seedRawConfig();
|
|
2214
2245
|
invalidateConfigCache();
|
|
2215
2246
|
const result = await getRoute.handler({});
|
|
2216
2247
|
expect(result).toMatchObject({
|
|
2217
|
-
conversations: {
|
|
2248
|
+
conversations: {
|
|
2249
|
+
autoArchive: { enabled: false, afterDays: 7 },
|
|
2250
|
+
skipAutoRetitling: false,
|
|
2251
|
+
},
|
|
2218
2252
|
notifications: { newMessageEnabled: true },
|
|
2219
2253
|
});
|
|
2220
|
-
|
|
2254
|
+
// Materialization is wire-only: nothing is written back to disk.
|
|
2221
2255
|
expect(loadRawConfig()).not.toHaveProperty("conversations");
|
|
2222
2256
|
expect(loadRawConfig()).not.toHaveProperty("notifications");
|
|
2223
2257
|
});
|
|
@@ -2237,17 +2271,18 @@ describe("persisted chat settings", () => {
|
|
|
2237
2271
|
expect(result).toMatchObject({
|
|
2238
2272
|
conversations: {
|
|
2239
2273
|
skipAutoRetitling: true,
|
|
2240
|
-
autoArchive: { enabled: true, afterDays: 30
|
|
2274
|
+
autoArchive: { enabled: true, afterDays: 30 },
|
|
2241
2275
|
},
|
|
2242
|
-
notifications: { newMessageEnabled: false
|
|
2276
|
+
notifications: { newMessageEnabled: false },
|
|
2243
2277
|
maxStepsPerSession: 75,
|
|
2244
2278
|
});
|
|
2245
|
-
expect(loadRawConfig()).
|
|
2246
|
-
|
|
2279
|
+
expect(loadRawConfig()).toMatchObject({
|
|
2280
|
+
maxStepsPerSession: 75,
|
|
2247
2281
|
conversations: {
|
|
2248
2282
|
skipAutoRetitling: true,
|
|
2249
|
-
autoArchive: { enabled: true, afterDays: 30
|
|
2283
|
+
autoArchive: { enabled: true, afterDays: 30 },
|
|
2250
2284
|
},
|
|
2285
|
+
notifications: { newMessageEnabled: false },
|
|
2251
2286
|
});
|
|
2252
2287
|
invalidateConfigCache();
|
|
2253
2288
|
expect(loadConfig().conversations.autoArchive).toEqual({
|
|
@@ -2280,20 +2315,21 @@ describe("persisted chat settings", () => {
|
|
|
2280
2315
|
expect(result).toMatchObject({
|
|
2281
2316
|
conversations: {
|
|
2282
2317
|
skipAutoRetitling: true,
|
|
2283
|
-
autoArchive: { enabled: false, afterDays: 7
|
|
2318
|
+
autoArchive: { enabled: false, afterDays: 7 },
|
|
2284
2319
|
},
|
|
2285
|
-
notifications: { newMessageEnabled: true
|
|
2320
|
+
notifications: { newMessageEnabled: true },
|
|
2286
2321
|
});
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2322
|
+
// The nulled leaves restore to the schema defaults on the canonical
|
|
2323
|
+
// save; the unknown sibling key (futureOption) doesn't persist.
|
|
2324
|
+
expect(loadConfig().conversations.autoArchive).toEqual({
|
|
2325
|
+
enabled: false,
|
|
2326
|
+
afterDays: 7,
|
|
2290
2327
|
});
|
|
2291
|
-
expect(
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
);
|
|
2328
|
+
expect(loadConfig().notifications.newMessageEnabled).toBe(true);
|
|
2329
|
+
expect(
|
|
2330
|
+
"futureOption" in
|
|
2331
|
+
(loadRawConfig().conversations as Record<string, unknown>),
|
|
2332
|
+
).toBe(false);
|
|
2297
2333
|
});
|
|
2298
2334
|
|
|
2299
2335
|
test.each([
|
|
@@ -2305,8 +2341,13 @@ describe("persisted chat settings", () => {
|
|
|
2305
2341
|
conversations: { autoArchive: { enabled: false, afterDays: 7 } },
|
|
2306
2342
|
notifications: { newMessageEnabled: true },
|
|
2307
2343
|
});
|
|
2308
|
-
|
|
2309
|
-
|
|
2344
|
+
// The nulled subtrees restore to the schema defaults on the canonical
|
|
2345
|
+
// save — the same values a fresh read would materialize.
|
|
2346
|
+
expect(loadConfig().conversations.autoArchive).toEqual({
|
|
2347
|
+
enabled: false,
|
|
2348
|
+
afterDays: 7,
|
|
2349
|
+
});
|
|
2350
|
+
expect(loadConfig().notifications.newMessageEnabled).toBe(true);
|
|
2310
2351
|
});
|
|
2311
2352
|
|
|
2312
2353
|
test.each([
|
|
@@ -2351,7 +2392,9 @@ describe("persisted chat settings", () => {
|
|
|
2351
2392
|
},
|
|
2352
2393
|
notifications: { newMessageEnabled: false },
|
|
2353
2394
|
});
|
|
2354
|
-
|
|
2395
|
+
// The valid legacy values ride; the malformed subtree heals to the
|
|
2396
|
+
// schema defaults on the canonical save.
|
|
2397
|
+
expect(loadRawConfig()).toMatchObject({
|
|
2355
2398
|
conversations: { skipAutoRetitling: true },
|
|
2356
2399
|
notifications: { newMessageEnabled: false },
|
|
2357
2400
|
maxStepsPerSession: 75,
|
|
@@ -2378,7 +2421,7 @@ describe("persisted chat settings", () => {
|
|
|
2378
2421
|
conversations: { autoArchive: { enabled: false, afterDays: 7 } },
|
|
2379
2422
|
notifications: { newMessageEnabled: true },
|
|
2380
2423
|
});
|
|
2381
|
-
expect(loadRawConfig()).
|
|
2424
|
+
expect(loadRawConfig()).toMatchObject({ maxStepsPerSession: 75 });
|
|
2382
2425
|
},
|
|
2383
2426
|
);
|
|
2384
2427
|
|
|
@@ -2387,10 +2430,11 @@ describe("persisted chat settings", () => {
|
|
|
2387
2430
|
body: { path: "notifications.newMessageEnabled", value: true },
|
|
2388
2431
|
});
|
|
2389
2432
|
expect(loadConfig().notifications.newMessageEnabled).toBe(true);
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
"
|
|
2393
|
-
|
|
2433
|
+
// Schema-canonical saves strip keys the schema doesn't know.
|
|
2434
|
+
expect(
|
|
2435
|
+
"futureOption" in
|
|
2436
|
+
(loadRawConfig().notifications as Record<string, unknown>),
|
|
2437
|
+
).toBe(false);
|
|
2394
2438
|
});
|
|
2395
2439
|
|
|
2396
2440
|
test.each([
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Default-plugin route resolution: a first-party default plugin's routes are
|
|
3
3
|
* served in the `/x/plugins/<name>/` namespace from the app source tree
|
|
4
4
|
* (`plugins/defaults/<dir>/routes/`), where `<name>` is `default-<dir>` (e.g.
|
|
5
|
-
* `default-
|
|
5
|
+
* `default-cloud-hosted`) — the same `default-…` name its `.disabled`
|
|
6
6
|
* sentinel is keyed by — not its bare directory name. An installed workspace
|
|
7
7
|
* plugin of the same name overrides the default.
|
|
8
8
|
*
|
|
9
|
-
* These tests exercise the real `
|
|
10
|
-
* `default-
|
|
9
|
+
* These tests exercise the real `cloud-hosted` default plugin (namespace
|
|
10
|
+
* `default-cloud-hosted`), which ships `routes/reengage.ts`, a POST-only
|
|
11
11
|
* handler. A GET reaches the resolved source file and 405s — proving
|
|
12
12
|
* resolution + source-tree module load without running the handler's heavy
|
|
13
13
|
* background-turn logic.
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
} from "../user-route-resolution.js";
|
|
38
38
|
|
|
39
39
|
/** The default plugin's source directory name. */
|
|
40
|
-
const DEFAULT_PLUGIN_DIR = "
|
|
40
|
+
const DEFAULT_PLUGIN_DIR = "cloud-hosted";
|
|
41
41
|
/** Its route namespace = `default-<dir>` by convention. */
|
|
42
42
|
const DEFAULT_PLUGIN = `default-${DEFAULT_PLUGIN_DIR}`;
|
|
43
43
|
|
|
@@ -86,7 +86,7 @@ describe("default plugin route source resolution", () => {
|
|
|
86
86
|
expect(getDefaultPluginRoutesDir("default-../util")).toBeNull();
|
|
87
87
|
});
|
|
88
88
|
|
|
89
|
-
test("getDefaultPluginRouteRoots includes the
|
|
89
|
+
test("getDefaultPluginRouteRoots includes the cloud-hosted plugin under its manifest name", () => {
|
|
90
90
|
const roots = getDefaultPluginRouteRoots();
|
|
91
91
|
const entry = roots.find((r) => r.pluginName === DEFAULT_PLUGIN);
|
|
92
92
|
expect(entry).toBeDefined();
|
|
@@ -13,10 +13,10 @@ import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
|
13
13
|
|
|
14
14
|
let managedProxyEnabled = false;
|
|
15
15
|
let managedProxyBaseUrl = "https://platform.example";
|
|
16
|
-
mock.module("../../../providers/
|
|
17
|
-
|
|
16
|
+
mock.module("../../../providers/cloud-proxy/context.js", () => ({
|
|
17
|
+
resolveCloudProxyContext: async () => ({
|
|
18
18
|
enabled: managedProxyEnabled,
|
|
19
|
-
|
|
19
|
+
cloudBaseUrl: managedProxyBaseUrl,
|
|
20
20
|
assistantApiKey: managedProxyEnabled ? "key" : "",
|
|
21
21
|
}),
|
|
22
22
|
}));
|
|
@@ -147,7 +147,7 @@ describe("GET config/llm/default-provider", () => {
|
|
|
147
147
|
managedProxyBaseUrl = "";
|
|
148
148
|
const result = await get();
|
|
149
149
|
expect(availability(result).status).toBe("cadet_unauthenticated");
|
|
150
|
-
expect(availability(result).message).toContain("
|
|
150
|
+
expect(availability(result).message).toContain("cloud URL");
|
|
151
151
|
});
|
|
152
152
|
|
|
153
153
|
test("cadet default with no canonical row → missing_connection", async () => {
|
|
@@ -157,7 +157,7 @@ describe("GET config/llm/default-provider", () => {
|
|
|
157
157
|
expect(availability(result).status).toBe("missing_connection");
|
|
158
158
|
});
|
|
159
159
|
|
|
160
|
-
test("user-owned connection claiming the cadet name → the
|
|
160
|
+
test("user-owned connection claiming the cadet name → the cloud's own status", async () => {
|
|
161
161
|
// seedCanonicalConnections skips reseeding when a user row claims the
|
|
162
162
|
// name. Dispatch ignores that row and routes through cloud auth, so a
|
|
163
163
|
// signed-in platform is genuinely usable and reads as ok.
|
|
@@ -174,7 +174,7 @@ describe("GET config/llm/default-provider", () => {
|
|
|
174
174
|
expect(availability(result).status).toBe("ok");
|
|
175
175
|
});
|
|
176
176
|
|
|
177
|
-
test("cloud-auth connection for a non-
|
|
177
|
+
test("cloud-auth connection for a non-cloud provider → unsupported_auth even when signed in", async () => {
|
|
178
178
|
seedConnection({
|
|
179
179
|
name: "openrouter-personal",
|
|
180
180
|
provider: "openrouter",
|
|
@@ -323,7 +323,7 @@ describe("GET config/llm/default-provider", () => {
|
|
|
323
323
|
expect(availability(result).message).toContain('"openai"');
|
|
324
324
|
});
|
|
325
325
|
|
|
326
|
-
test("cadet-
|
|
326
|
+
test("cadet-cloud connection pinned for a cloud-routable provider follows cloud auth", async () => {
|
|
327
327
|
seedConnection({
|
|
328
328
|
name: "cadet",
|
|
329
329
|
provider: "cadet",
|
|
@@ -338,7 +338,7 @@ describe("GET config/llm/default-provider", () => {
|
|
|
338
338
|
expect(availability(await get()).status).toBe("ok");
|
|
339
339
|
});
|
|
340
340
|
|
|
341
|
-
test("cadet-
|
|
341
|
+
test("cadet-cloud connection pinned for a non-cloud provider → provider_mismatch", async () => {
|
|
342
342
|
seedConnection({
|
|
343
343
|
name: "cadet",
|
|
344
344
|
provider: "cadet",
|
|
@@ -351,7 +351,7 @@ describe("GET config/llm/default-provider", () => {
|
|
|
351
351
|
|
|
352
352
|
const result = await get();
|
|
353
353
|
expect(availability(result).status).toBe("provider_mismatch");
|
|
354
|
-
expect(availability(result).message).toContain("Cadet
|
|
354
|
+
expect(availability(result).message).toContain("Cadet Cloud");
|
|
355
355
|
});
|
|
356
356
|
|
|
357
357
|
test("service_account connection with invalid credential → missing_credential", async () => {
|
|
@@ -368,7 +368,7 @@ describe("GET config/llm/default-provider", () => {
|
|
|
368
368
|
expect(availability(result).message).toContain("service-account");
|
|
369
369
|
});
|
|
370
370
|
|
|
371
|
-
test("
|
|
371
|
+
test("cloud-auth connection follows cloud-proxy state", async () => {
|
|
372
372
|
seedConnection({
|
|
373
373
|
name: "anthropic-personal",
|
|
374
374
|
provider: "anthropic",
|