@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
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tests the two layers protecting managed inference profiles:
|
|
3
3
|
*
|
|
4
|
-
* - Route-level managed guards:
|
|
4
|
+
* - Route-level managed guards: cloud profiles can't be deleted via PATCH
|
|
5
5
|
* and the PUT profile route accepts only a pure status re-enable body for
|
|
6
6
|
* them.
|
|
7
|
-
* - The commitConfigWrite invariant guard: every
|
|
7
|
+
* - The commitConfigWrite invariant guard: every cloud profile name
|
|
8
8
|
* ("quality-optimized", "balanced", "cost-optimized", "os-beta") is fully
|
|
9
9
|
* read-only across PATCH/SET/PUT while its on-disk entry is
|
|
10
10
|
* managed-source — the only writable transition is re-enabling a disabled
|
|
11
|
-
* profile. A user-owned (`source: "user"`) entry sharing a
|
|
11
|
+
* profile. A user-owned (`source: "user"`) entry sharing a cloud name is
|
|
12
12
|
* not locked.
|
|
13
13
|
*
|
|
14
14
|
* Plus the wire-only profile keys (`invariant`, `supportsVision`) stamped on
|
|
@@ -105,7 +105,7 @@ mock.module("../providers/inference/connections.js", () => ({
|
|
|
105
105
|
listConnections: () => [],
|
|
106
106
|
createConnection: () => ({ ok: false, error: { code: "already_exists" } }),
|
|
107
107
|
getConnection: () => null,
|
|
108
|
-
|
|
108
|
+
CADET_CLOUD_CONNECTION_NAME: "cadet",
|
|
109
109
|
}));
|
|
110
110
|
|
|
111
111
|
import { ROUTES } from "../runtime/routes/conversation-query-routes.js";
|
|
@@ -145,7 +145,7 @@ function savedProfile(name: string): Record<string, unknown> {
|
|
|
145
145
|
// PUT /v1/config/llm/profiles/:name — replace inference profile
|
|
146
146
|
// ---------------------------------------------------------------------------
|
|
147
147
|
|
|
148
|
-
describe("PUT /v1/config/llm/profiles/:name —
|
|
148
|
+
describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
|
|
149
149
|
test("rejects provider/model edits to quality-optimized", async () => {
|
|
150
150
|
await expect(
|
|
151
151
|
replaceRoute.handler({
|
|
@@ -153,8 +153,8 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
153
153
|
body: { provider: "openai", model: "gpt-4o" },
|
|
154
154
|
}),
|
|
155
155
|
).rejects.toThrow(
|
|
156
|
-
'Cannot edit
|
|
157
|
-
"
|
|
156
|
+
'Cannot edit cloud profile "quality-optimized" fields [provider, model]. ' +
|
|
157
|
+
"Cloud profiles are read-only (a disabled profile can be re-enabled); " +
|
|
158
158
|
"duplicate to a custom profile to customize.",
|
|
159
159
|
);
|
|
160
160
|
});
|
|
@@ -219,7 +219,7 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
219
219
|
pathParams: { name: "my-custom" },
|
|
220
220
|
body: { provider: "cadet", model: "not-a-real-model" },
|
|
221
221
|
}),
|
|
222
|
-
).rejects.toThrow(/not served by the Cadet
|
|
222
|
+
).rejects.toThrow(/not served by the Cadet Cloud route/);
|
|
223
223
|
expect(committedRaw()).toBeNull();
|
|
224
224
|
});
|
|
225
225
|
|
|
@@ -234,14 +234,14 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
234
234
|
|
|
235
235
|
// -------------------------------------------------------------------------
|
|
236
236
|
// Null-as-clear sentinel: clients send `{ label: null }` or
|
|
237
|
-
// `{ status: null }` to clear a
|
|
237
|
+
// `{ status: null }` to clear a cloud profile's overrides back to the
|
|
238
238
|
// seed defaults. The Zod `ProfileEntry` schema accepts null for both
|
|
239
239
|
// fields. Every managed name is invariant, so on managed-source entries
|
|
240
240
|
// only the status clear is allowed (re-enable) — every other field is
|
|
241
241
|
// frozen at commit time.
|
|
242
242
|
// -------------------------------------------------------------------------
|
|
243
243
|
|
|
244
|
-
test("PUT { label: null } on a
|
|
244
|
+
test("PUT { label: null } on a cloud profile is rejected (label is frozen)", async () => {
|
|
245
245
|
seedRawConfig({
|
|
246
246
|
llm: {
|
|
247
247
|
profiles: {
|
|
@@ -259,13 +259,13 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
259
259
|
pathParams: { name: "balanced" },
|
|
260
260
|
body: { label: null },
|
|
261
261
|
}),
|
|
262
|
-
).rejects.toThrow('Cannot edit
|
|
262
|
+
).rejects.toThrow('Cannot edit cloud profile "balanced" fields [label]');
|
|
263
263
|
expectNothingCommitted();
|
|
264
264
|
});
|
|
265
265
|
|
|
266
266
|
test("PUT on the code-owned latency profile is rejected, status re-enable included", async () => {
|
|
267
267
|
// Fast fronts live voice, so it takes no writes at all: the re-enable
|
|
268
|
-
// escape hatch the other
|
|
268
|
+
// escape hatch the other cloud profiles keep would persist a stub that
|
|
269
269
|
// never governs what the name resolves to.
|
|
270
270
|
seedRawConfig({ llm: { profiles: {} } });
|
|
271
271
|
|
|
@@ -286,7 +286,7 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
286
286
|
expectNothingCommitted();
|
|
287
287
|
});
|
|
288
288
|
|
|
289
|
-
test("PUT on a
|
|
289
|
+
test("PUT on a cloud backup profile is rejected as code-owned", async () => {
|
|
290
290
|
// Backups are code-owned too, and they carry no on-disk entry, so the
|
|
291
291
|
// code-owned rejection has to win over the availability gate: reporting
|
|
292
292
|
// "not currently available" would be wrong for a profile the picker
|
|
@@ -314,7 +314,7 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
314
314
|
expectNothingCommitted();
|
|
315
315
|
});
|
|
316
316
|
|
|
317
|
-
test("PUT { status: null } on
|
|
317
|
+
test("PUT { status: null } on cloud profile clears status (back to active-by-absence)", async () => {
|
|
318
318
|
seedRawConfig({
|
|
319
319
|
llm: {
|
|
320
320
|
profiles: {
|
|
@@ -359,7 +359,7 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
359
359
|
pathParams: { name: "os-beta" },
|
|
360
360
|
body: { label: null, status: null },
|
|
361
361
|
}),
|
|
362
|
-
).rejects.toThrow('Cannot edit
|
|
362
|
+
).rejects.toThrow('Cannot edit cloud profile "os-beta" fields [label]');
|
|
363
363
|
expectNothingCommitted();
|
|
364
364
|
});
|
|
365
365
|
|
|
@@ -382,7 +382,7 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
382
382
|
body: { status: "disabled" },
|
|
383
383
|
}),
|
|
384
384
|
).rejects.toThrow(
|
|
385
|
-
'Cannot edit
|
|
385
|
+
'Cannot edit cloud profile "os-beta". Cloud profiles are read-only',
|
|
386
386
|
);
|
|
387
387
|
expectNothingCommitted();
|
|
388
388
|
});
|
|
@@ -404,7 +404,7 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
404
404
|
pathParams: { name: "os-beta" },
|
|
405
405
|
body: { topP: 0.9 },
|
|
406
406
|
}),
|
|
407
|
-
).rejects.toThrow('Cannot edit
|
|
407
|
+
).rejects.toThrow('Cannot edit cloud profile "os-beta" fields [topP]');
|
|
408
408
|
expectNothingCommitted();
|
|
409
409
|
});
|
|
410
410
|
|
|
@@ -426,7 +426,7 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
426
426
|
pathParams: { name: "os-beta" },
|
|
427
427
|
body: { topP: null },
|
|
428
428
|
}),
|
|
429
|
-
).rejects.toThrow('Cannot edit
|
|
429
|
+
).rejects.toThrow('Cannot edit cloud profile "os-beta" fields [topP]');
|
|
430
430
|
expectNothingCommitted();
|
|
431
431
|
});
|
|
432
432
|
|
|
@@ -455,7 +455,7 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
455
455
|
expect(profile.model).toBe("zai-org/GLM-5.2");
|
|
456
456
|
});
|
|
457
457
|
|
|
458
|
-
test("allows edits to a user-owned profile sharing a
|
|
458
|
+
test("allows edits to a user-owned profile sharing a cloud name (os-beta)", async () => {
|
|
459
459
|
seedRawConfig({
|
|
460
460
|
llm: {
|
|
461
461
|
profiles: {
|
|
@@ -477,7 +477,7 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
477
477
|
expect(profile.model).toBe("gpt-4o");
|
|
478
478
|
});
|
|
479
479
|
|
|
480
|
-
test("rejects edits to a
|
|
480
|
+
test("rejects edits to a cloud os-beta profile", async () => {
|
|
481
481
|
seedRawConfig({
|
|
482
482
|
llm: {
|
|
483
483
|
profiles: {
|
|
@@ -513,7 +513,7 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
513
513
|
expect(onDisk?.llm?.profiles?.["os-beta"]).toBeUndefined();
|
|
514
514
|
});
|
|
515
515
|
|
|
516
|
-
test("PUT { label: '' } on
|
|
516
|
+
test("PUT { label: '' } on cloud profile still rejected by `.min(1)`", async () => {
|
|
517
517
|
// `.nullable()` only widens the type to accept null — empty strings
|
|
518
518
|
// still fail the min-length check, which is correct: an empty string
|
|
519
519
|
// would persist as a literal "" override, not the clear-to-seed
|
|
@@ -528,16 +528,16 @@ describe("PUT /v1/config/llm/profiles/:name — managed profile guard", () => {
|
|
|
528
528
|
});
|
|
529
529
|
|
|
530
530
|
// ---------------------------------------------------------------------------
|
|
531
|
-
// PATCH /v1/config —
|
|
531
|
+
// PATCH /v1/config — cloud profile deletion guard
|
|
532
532
|
// ---------------------------------------------------------------------------
|
|
533
533
|
|
|
534
|
-
describe("PATCH /v1/config —
|
|
534
|
+
describe("PATCH /v1/config — cloud profile deletion guard", () => {
|
|
535
535
|
test("rejects deletion of quality-optimized via null with descriptive message", async () => {
|
|
536
536
|
await expect(
|
|
537
537
|
patchRoute.handler({
|
|
538
538
|
body: { llm: { profiles: { "quality-optimized": null } } },
|
|
539
539
|
}),
|
|
540
|
-
).rejects.toThrow('Cannot delete
|
|
540
|
+
).rejects.toThrow('Cannot delete cloud profile "quality-optimized".');
|
|
541
541
|
});
|
|
542
542
|
|
|
543
543
|
test("rejects deletion of balanced via null", async () => {
|
|
@@ -592,15 +592,15 @@ describe("PATCH /v1/config — managed profile deletion guard", () => {
|
|
|
592
592
|
});
|
|
593
593
|
|
|
594
594
|
expect(result).toHaveProperty("ingress");
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
595
|
+
const committed = committedRaw() as Record<string, any>;
|
|
596
|
+
expect(committed.ingress.publicBaseUrl).toBe("https://manual.example.test");
|
|
597
|
+
expect(committed.ingress.publicBaseUrlManagedBy).toBe("tunnel");
|
|
598
|
+
expect("lastTunnel" in committed.ingress).toBe(false);
|
|
599
|
+
expect("pairingTunnel" in committed.ingress).toBe(false);
|
|
600
|
+
expect("assistantId" in committed.ingress).toBe(false);
|
|
601
601
|
});
|
|
602
602
|
|
|
603
|
-
test("allows patches that modify a
|
|
603
|
+
test("allows patches that modify a cloud profile (non-null)", async () => {
|
|
604
604
|
const result = await patchRoute.handler({
|
|
605
605
|
body: {
|
|
606
606
|
llm: {
|
|
@@ -611,7 +611,7 @@ describe("PATCH /v1/config — managed profile deletion guard", () => {
|
|
|
611
611
|
expect(result).toHaveProperty("llm");
|
|
612
612
|
});
|
|
613
613
|
|
|
614
|
-
test("allows deletion of a user-owned profile sharing a
|
|
614
|
+
test("allows deletion of a user-owned profile sharing a cloud name (os-beta)", async () => {
|
|
615
615
|
seedRawConfig({
|
|
616
616
|
llm: {
|
|
617
617
|
profiles: {
|
|
@@ -629,7 +629,7 @@ describe("PATCH /v1/config — managed profile deletion guard", () => {
|
|
|
629
629
|
expect(result).toHaveProperty("llm");
|
|
630
630
|
});
|
|
631
631
|
|
|
632
|
-
test("rejects deletion of a
|
|
632
|
+
test("rejects deletion of a cloud os-beta profile", async () => {
|
|
633
633
|
seedRawConfig({
|
|
634
634
|
llm: {
|
|
635
635
|
profiles: {
|
|
@@ -645,7 +645,7 @@ describe("PATCH /v1/config — managed profile deletion guard", () => {
|
|
|
645
645
|
patchRoute.handler({
|
|
646
646
|
body: { llm: { profiles: { "os-beta": null } } },
|
|
647
647
|
}),
|
|
648
|
-
).rejects.toThrow('Cannot delete
|
|
648
|
+
).rejects.toThrow('Cannot delete cloud profile "os-beta".');
|
|
649
649
|
});
|
|
650
650
|
|
|
651
651
|
test("rejects nulling the entire profiles map", async () => {
|
|
@@ -658,23 +658,23 @@ describe("PATCH /v1/config — managed profile deletion guard", () => {
|
|
|
658
658
|
});
|
|
659
659
|
|
|
660
660
|
// ---------------------------------------------------------------------------
|
|
661
|
-
// commitConfigWrite —
|
|
661
|
+
// commitConfigWrite — cloud-profile invariant guard
|
|
662
662
|
//
|
|
663
|
-
// Every
|
|
663
|
+
// Every cloud profile name (balanced, quality-optimized, cost-optimized,
|
|
664
664
|
// os-beta) is read-only to every config-write route while its on-disk entry
|
|
665
665
|
// is managed-source; the only writable transition is re-enabling a disabled
|
|
666
|
-
// profile. A user-owned entry sharing a
|
|
666
|
+
// profile. A user-owned entry sharing a cloud name is not locked. Enforced
|
|
667
667
|
// by `assertInvariantProfilesPreserved` at the commitConfigWrite choke
|
|
668
668
|
// point, so PATCH, SET, and PUT are all covered by the same checks.
|
|
669
669
|
// ---------------------------------------------------------------------------
|
|
670
670
|
|
|
671
|
-
describe("
|
|
671
|
+
describe("cloud-profile invariant guard — rejected writes", () => {
|
|
672
672
|
test("PATCH disabling balanced is rejected (active → disabled)", async () => {
|
|
673
673
|
await expect(
|
|
674
674
|
patchRoute.handler({
|
|
675
675
|
body: { llm: { profiles: { balanced: { status: "disabled" } } } },
|
|
676
676
|
}),
|
|
677
|
-
).rejects.toThrow('Cannot disable
|
|
677
|
+
).rejects.toThrow('Cannot disable cloud profile "balanced".');
|
|
678
678
|
expectNothingCommitted();
|
|
679
679
|
});
|
|
680
680
|
|
|
@@ -684,8 +684,8 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
684
684
|
body: { llm: { profiles: { balanced: { label: "X" } } } },
|
|
685
685
|
}),
|
|
686
686
|
).rejects.toThrow(
|
|
687
|
-
'Cannot edit
|
|
688
|
-
"
|
|
687
|
+
'Cannot edit cloud profile "balanced" fields [label]. ' +
|
|
688
|
+
"Cloud profiles are read-only; duplicate to a custom profile to customize.",
|
|
689
689
|
);
|
|
690
690
|
expectNothingCommitted();
|
|
691
691
|
});
|
|
@@ -697,7 +697,7 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
697
697
|
patchRoute.handler({
|
|
698
698
|
body: { llm: { profiles: { balanced: { label: null } } } },
|
|
699
699
|
}),
|
|
700
|
-
).rejects.toThrow('Cannot edit
|
|
700
|
+
).rejects.toThrow('Cannot edit cloud profile "balanced" fields [label]');
|
|
701
701
|
expectNothingCommitted();
|
|
702
702
|
});
|
|
703
703
|
|
|
@@ -706,7 +706,7 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
706
706
|
patchRoute.handler({
|
|
707
707
|
body: { llm: { profiles: { balanced: { topP: 0.8 } } } },
|
|
708
708
|
}),
|
|
709
|
-
).rejects.toThrow('Cannot edit
|
|
709
|
+
).rejects.toThrow('Cannot edit cloud profile "balanced" fields [topP]');
|
|
710
710
|
expectNothingCommitted();
|
|
711
711
|
});
|
|
712
712
|
|
|
@@ -717,11 +717,11 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
717
717
|
patchRoute.handler({
|
|
718
718
|
body: { llm: { profiles: { balanced: { topP: null } } } },
|
|
719
719
|
}),
|
|
720
|
-
).rejects.toThrow('Cannot edit
|
|
720
|
+
).rejects.toThrow('Cannot edit cloud profile "balanced" fields [topP]');
|
|
721
721
|
expectNothingCommitted();
|
|
722
722
|
});
|
|
723
723
|
|
|
724
|
-
test("PATCH disabling a
|
|
724
|
+
test("PATCH disabling a cloud-source os-beta is rejected (active → disabled)", async () => {
|
|
725
725
|
(rawConfig as Record<string, any>).llm.profiles["os-beta"] = {
|
|
726
726
|
provider: "together",
|
|
727
727
|
model: "zai-org/GLM-5.2",
|
|
@@ -732,11 +732,11 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
732
732
|
patchRoute.handler({
|
|
733
733
|
body: { llm: { profiles: { "os-beta": { status: "disabled" } } } },
|
|
734
734
|
}),
|
|
735
|
-
).rejects.toThrow('Cannot disable
|
|
735
|
+
).rejects.toThrow('Cannot disable cloud profile "os-beta".');
|
|
736
736
|
expectNothingCommitted();
|
|
737
737
|
});
|
|
738
738
|
|
|
739
|
-
test("SET llm.profiles.os-beta.label is rejected on a
|
|
739
|
+
test("SET llm.profiles.os-beta.label is rejected on a cloud-source entry", async () => {
|
|
740
740
|
(rawConfig as Record<string, any>).llm.profiles["os-beta"] = {
|
|
741
741
|
provider: "together",
|
|
742
742
|
model: "zai-org/GLM-5.2",
|
|
@@ -747,7 +747,7 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
747
747
|
setRoute.handler({
|
|
748
748
|
body: { path: "llm.profiles.os-beta.label", value: "My OS Beta" },
|
|
749
749
|
}),
|
|
750
|
-
).rejects.toThrow('Cannot edit
|
|
750
|
+
).rejects.toThrow('Cannot edit cloud profile "os-beta" fields [label]');
|
|
751
751
|
expectNothingCommitted();
|
|
752
752
|
});
|
|
753
753
|
|
|
@@ -756,7 +756,7 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
756
756
|
patchRoute.handler({
|
|
757
757
|
body: { llm: { profiles: { balanced: "junk" } } },
|
|
758
758
|
}),
|
|
759
|
-
).rejects.toThrow(
|
|
759
|
+
).rejects.toThrow("expected object, received string");
|
|
760
760
|
expectNothingCommitted();
|
|
761
761
|
});
|
|
762
762
|
|
|
@@ -765,7 +765,7 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
765
765
|
patchRoute.handler({
|
|
766
766
|
body: { llm: { profiles: { balanced: ["disabled"] } } },
|
|
767
767
|
}),
|
|
768
|
-
).rejects.toThrow(
|
|
768
|
+
).rejects.toThrow("expected object, received array");
|
|
769
769
|
expectNothingCommitted();
|
|
770
770
|
});
|
|
771
771
|
|
|
@@ -780,7 +780,7 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
780
780
|
body: { status: "disabled" },
|
|
781
781
|
}),
|
|
782
782
|
).rejects.toThrow(
|
|
783
|
-
'Cannot edit
|
|
783
|
+
'Cannot edit cloud profile "balanced". Cloud profiles are read-only',
|
|
784
784
|
);
|
|
785
785
|
expectNothingCommitted();
|
|
786
786
|
});
|
|
@@ -790,14 +790,14 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
790
790
|
setRoute.handler({
|
|
791
791
|
body: { path: "llm.profiles.balanced.status", value: "disabled" },
|
|
792
792
|
}),
|
|
793
|
-
).rejects.toThrow('Cannot disable
|
|
793
|
+
).rejects.toThrow('Cannot disable cloud profile "balanced".');
|
|
794
794
|
expectNothingCommitted();
|
|
795
795
|
});
|
|
796
796
|
|
|
797
797
|
test("SET llm = {} is rejected (would drop all defaults)", async () => {
|
|
798
798
|
await expect(
|
|
799
799
|
setRoute.handler({ body: { path: "llm", value: {} } }),
|
|
800
|
-
).rejects.toThrow(/Cannot delete or replace
|
|
800
|
+
).rejects.toThrow(/Cannot delete or replace cloud profile/);
|
|
801
801
|
expectNothingCommitted();
|
|
802
802
|
});
|
|
803
803
|
|
|
@@ -806,10 +806,7 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
806
806
|
patchRoute.handler({
|
|
807
807
|
body: { llm: { profiles: { balanced: { status: "weird" } } } },
|
|
808
808
|
}),
|
|
809
|
-
).rejects.toThrow(
|
|
810
|
-
'Cannot set status "weird" on managed profile "balanced". ' +
|
|
811
|
-
'Only re-enabling (status "active") is allowed.',
|
|
812
|
-
);
|
|
809
|
+
).rejects.toThrow("llm.profiles.balanced.status: Invalid option");
|
|
813
810
|
expectNothingCommitted();
|
|
814
811
|
});
|
|
815
812
|
|
|
@@ -818,13 +815,13 @@ describe("managed-profile invariant guard — rejected writes", () => {
|
|
|
818
815
|
setRoute.handler({
|
|
819
816
|
body: { path: "llm.profiles.balanced.status", value: 123 },
|
|
820
817
|
}),
|
|
821
|
-
).rejects.toThrow(
|
|
818
|
+
).rejects.toThrow("llm.profiles.balanced.status: Invalid option");
|
|
822
819
|
expectNothingCommitted();
|
|
823
820
|
});
|
|
824
821
|
});
|
|
825
822
|
|
|
826
823
|
describe("default-profile invariant guard — allowed writes", () => {
|
|
827
|
-
test("PATCH re-enables a disabled
|
|
824
|
+
test("PATCH re-enables a disabled cloud profile (BYOK re-enable)", async () => {
|
|
828
825
|
(rawConfig as Record<string, any>).llm.profiles.balanced.status =
|
|
829
826
|
"disabled";
|
|
830
827
|
seedRawConfig(rawConfig);
|
|
@@ -848,7 +845,7 @@ describe("default-profile invariant guard — allowed writes", () => {
|
|
|
848
845
|
expect(savedProfile("balanced").status ?? null).toBeNull();
|
|
849
846
|
});
|
|
850
847
|
|
|
851
|
-
test("PUT { status: 'active' } re-enables a disabled
|
|
848
|
+
test("PUT { status: 'active' } re-enables a disabled cloud profile", async () => {
|
|
852
849
|
(rawConfig as Record<string, any>).llm.profiles.balanced.status =
|
|
853
850
|
"disabled";
|
|
854
851
|
seedRawConfig(rawConfig);
|
|
@@ -861,7 +858,7 @@ describe("default-profile invariant guard — allowed writes", () => {
|
|
|
861
858
|
expect(savedProfile("balanced").status).toBe("active");
|
|
862
859
|
});
|
|
863
860
|
|
|
864
|
-
test("SET llm.profiles.balanced.status = 'active' re-enables a disabled
|
|
861
|
+
test("SET llm.profiles.balanced.status = 'active' re-enables a disabled cloud profile", async () => {
|
|
865
862
|
(rawConfig as Record<string, any>).llm.profiles.balanced.status =
|
|
866
863
|
"disabled";
|
|
867
864
|
seedRawConfig(rawConfig);
|
|
@@ -893,9 +890,9 @@ describe("default-profile invariant guard — allowed writes", () => {
|
|
|
893
890
|
});
|
|
894
891
|
|
|
895
892
|
test("PATCH deleting a user-sourced balanced entry is allowed (invariance is source-gated)", async () => {
|
|
896
|
-
// A `source: "user"` entry passes the
|
|
893
|
+
// A `source: "user"` entry passes the cloud-deletion guard AND the
|
|
897
894
|
// invariant guard — both key on the on-disk entry's managed source, so
|
|
898
|
-
// a user-owned profile sharing a
|
|
895
|
+
// a user-owned profile sharing a cloud name stays deletable.
|
|
899
896
|
(rawConfig as Record<string, any>).llm.profiles.balanced.source = "user";
|
|
900
897
|
seedRawConfig(rawConfig);
|
|
901
898
|
const result = await patchRoute.handler({
|
|
@@ -939,12 +936,12 @@ describe("default-profile invariant guard — allowed writes", () => {
|
|
|
939
936
|
|
|
940
937
|
test("PATCH non-profile llm writes are unaffected", async () => {
|
|
941
938
|
const result = await patchRoute.handler({
|
|
942
|
-
body: { llm: { activeProfile: "
|
|
939
|
+
body: { llm: { activeProfile: "balanced" } },
|
|
943
940
|
});
|
|
944
941
|
expect(result).toHaveProperty("llm");
|
|
945
942
|
expectOneCommitCycle();
|
|
946
943
|
expect((committedRaw() as Record<string, any>).llm.activeProfile).toBe(
|
|
947
|
-
"
|
|
944
|
+
"balanced",
|
|
948
945
|
);
|
|
949
946
|
// The invariant profiles are untouched by an unrelated llm write.
|
|
950
947
|
expect(savedProfile("balanced")).toEqual(
|
|
@@ -1004,23 +1001,24 @@ describe("wire-only profile keys are stripped from writes", () => {
|
|
|
1004
1001
|
expect(profile.model).toBe("claude-sonnet");
|
|
1005
1002
|
});
|
|
1006
1003
|
|
|
1007
|
-
test("SET of a wire-only leaf path
|
|
1004
|
+
test("SET of a wire-only leaf path never persists the key", async () => {
|
|
1008
1005
|
const result = await setRoute.handler({
|
|
1009
1006
|
body: { path: "llm.profiles.balanced.supportsVision", value: true },
|
|
1010
1007
|
});
|
|
1011
1008
|
expect(result).toEqual({ ok: true });
|
|
1012
|
-
|
|
1009
|
+
expectOneCommitCycle();
|
|
1010
|
+
expect("supportsVision" in savedProfile("balanced")).toBe(false);
|
|
1013
1011
|
});
|
|
1014
1012
|
|
|
1015
1013
|
// -------------------------------------------------------------------------
|
|
1016
1014
|
// Stale wire-only keys on disk: configs written before the write-side strip
|
|
1017
|
-
// existed can carry `supportsVision` under a
|
|
1015
|
+
// existed can carry `supportsVision` under a cloud profile. The invariant
|
|
1018
1016
|
// guard ignores wire-only keys on both sides, so a GET → write round-trip
|
|
1019
1017
|
// (whose incoming copy is stripped) is not rejected for "removing" the
|
|
1020
1018
|
// stale key — and a full-entry SET drops it from disk.
|
|
1021
1019
|
// -------------------------------------------------------------------------
|
|
1022
1020
|
|
|
1023
|
-
test("SET round-trip re-enabling a
|
|
1021
|
+
test("SET round-trip re-enabling a cloud profile with stale on-disk supportsVision succeeds and drops the stale key", async () => {
|
|
1024
1022
|
const balanced = (rawConfig as Record<string, any>).llm.profiles.balanced;
|
|
1025
1023
|
balanced.supportsVision = true; // stale pre-strip persistence
|
|
1026
1024
|
balanced.status = "disabled";
|
|
@@ -1186,7 +1184,7 @@ describe("code-owned default profiles — wire view and write normalization", ()
|
|
|
1186
1184
|
},
|
|
1187
1185
|
}),
|
|
1188
1186
|
).rejects.toThrow(
|
|
1189
|
-
'Cannot edit
|
|
1187
|
+
'Cannot edit cloud profile "cost-optimized" fields [model].',
|
|
1190
1188
|
);
|
|
1191
1189
|
expectNothingCommitted();
|
|
1192
1190
|
});
|
|
@@ -1201,7 +1199,7 @@ describe("code-owned default profiles — wire view and write normalization", ()
|
|
|
1201
1199
|
},
|
|
1202
1200
|
},
|
|
1203
1201
|
}),
|
|
1204
|
-
).rejects.toThrow('Cannot disable
|
|
1202
|
+
).rejects.toThrow('Cannot disable cloud profile "balanced".');
|
|
1205
1203
|
expectNothingCommitted();
|
|
1206
1204
|
});
|
|
1207
1205
|
|
|
@@ -1302,7 +1300,7 @@ describe("code-owned default profiles — BYO default provider wire view", () =>
|
|
|
1302
1300
|
});
|
|
1303
1301
|
|
|
1304
1302
|
describe("code-owned default profiles — leaf SET source stamping", () => {
|
|
1305
|
-
test("a leaf SET creating a
|
|
1303
|
+
test("a leaf SET creating a cloud entry stamps the cloud marker", async () => {
|
|
1306
1304
|
seedRawConfig({ llm: { profiles: {} } });
|
|
1307
1305
|
const result = await setRoute.handler({
|
|
1308
1306
|
body: { path: "llm.profiles.balanced.status", value: "active" },
|
|
@@ -1348,7 +1346,7 @@ describe("code-owned default profiles — leaf SET source stamping", () => {
|
|
|
1348
1346
|
});
|
|
1349
1347
|
|
|
1350
1348
|
describe("code-owned default profiles — echoes over stale on-disk bodies", () => {
|
|
1351
|
-
// An overlay can persist a
|
|
1349
|
+
// An overlay can persist a cloud entry whose content differs from the
|
|
1352
1350
|
// catalog; GET serves catalog content, so a client echo carries values
|
|
1353
1351
|
// that match neither nothing — they match the wire view. The round-trip
|
|
1354
1352
|
// must still be a no-op.
|
|
@@ -1425,7 +1423,11 @@ describe("PATCH /v1/config — provider-only services scrub legacy mode", () =>
|
|
|
1425
1423
|
string,
|
|
1426
1424
|
Record<string, Record<string, unknown>>
|
|
1427
1425
|
>;
|
|
1428
|
-
|
|
1429
|
-
|
|
1426
|
+
// The section schemas are closed: the parse strips the legacy `mode`
|
|
1427
|
+
// key and materializes the section's defaults around the user's values.
|
|
1428
|
+
expect("mode" in raw.services["image-generation"]!).toBe(false);
|
|
1429
|
+
expect(raw.services["image-generation"]!.provider).toBe("cadet");
|
|
1430
|
+
expect("mode" in raw.services["web-search"]!).toBe(false);
|
|
1431
|
+
expect(raw.services["web-search"]!.provider).toBe("cadet");
|
|
1430
1432
|
});
|
|
1431
1433
|
});
|