@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
|
@@ -67,7 +67,7 @@ function readConfig(): Record<string, unknown> {
|
|
|
67
67
|
return JSON.parse(readFileSync(CONFIG_PATH, "utf-8"));
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
/** Stash and restore
|
|
70
|
+
/** Stash and restore IS_CLOUD across each test. */
|
|
71
71
|
let originalIsPlatform: string | undefined;
|
|
72
72
|
|
|
73
73
|
// ---------------------------------------------------------------------------
|
|
@@ -91,27 +91,27 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
|
|
|
91
91
|
ensureTestDir();
|
|
92
92
|
invalidateConfigCache();
|
|
93
93
|
|
|
94
|
-
originalIsPlatform = process.env.
|
|
95
|
-
delete process.env.
|
|
94
|
+
originalIsPlatform = process.env.IS_CLOUD;
|
|
95
|
+
delete process.env.IS_CLOUD;
|
|
96
96
|
});
|
|
97
97
|
|
|
98
98
|
afterEach(() => {
|
|
99
99
|
invalidateConfigCache();
|
|
100
100
|
|
|
101
101
|
if (originalIsPlatform !== undefined) {
|
|
102
|
-
process.env.
|
|
102
|
+
process.env.IS_CLOUD = originalIsPlatform;
|
|
103
103
|
} else {
|
|
104
|
-
delete process.env.
|
|
104
|
+
delete process.env.IS_CLOUD;
|
|
105
105
|
}
|
|
106
106
|
});
|
|
107
107
|
|
|
108
|
-
test("
|
|
108
|
+
test("IS_CLOUD=true fills provider=gemini in memory without persisting it", () => {
|
|
109
109
|
writeConfig({});
|
|
110
|
-
process.env.
|
|
110
|
+
process.env.IS_CLOUD = "true";
|
|
111
111
|
|
|
112
112
|
const config = loadConfig();
|
|
113
113
|
|
|
114
|
-
// In-memory effective config reflects the
|
|
114
|
+
// In-memory effective config reflects the cloud intent.
|
|
115
115
|
expect(config.memory.embeddings.provider).toBe("gemini");
|
|
116
116
|
// geminiModel carries its own schema default — not forced here.
|
|
117
117
|
expect(config.memory.embeddings.geminiModel).toBe("gemini-embedding-2");
|
|
@@ -130,20 +130,20 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
|
|
|
130
130
|
expect(qdrantRaw.vectorSize).toBeUndefined();
|
|
131
131
|
});
|
|
132
132
|
|
|
133
|
-
test("first launch (no config.json) persists
|
|
133
|
+
test("first launch (no config.json) persists cloud service modes but not the cloud embedding provider", () => {
|
|
134
134
|
// No config.json on disk: this is the first-launch SEED path that writes a
|
|
135
135
|
// default config so the file exists for users to edit.
|
|
136
136
|
if (existsSync(CONFIG_PATH)) {
|
|
137
137
|
rmSync(CONFIG_PATH, { force: true });
|
|
138
138
|
}
|
|
139
|
-
process.env.
|
|
139
|
+
process.env.IS_CLOUD = "true";
|
|
140
140
|
|
|
141
141
|
const config = loadConfig();
|
|
142
142
|
|
|
143
|
-
// In-memory effective config still reflects the
|
|
143
|
+
// In-memory effective config still reflects the cloud intent.
|
|
144
144
|
expect(config.memory.embeddings.provider).toBe("gemini");
|
|
145
145
|
|
|
146
|
-
// The seeded config.json persists the
|
|
146
|
+
// The seeded config.json persists the cloud service modes (for
|
|
147
147
|
// discoverability) but OMITS the embedding provider entirely — not even the
|
|
148
148
|
// schema default "auto". Persisting any value would be read back on the next
|
|
149
149
|
// load as an explicit user choice and permanently suppress re-applying the
|
|
@@ -168,7 +168,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
|
|
|
168
168
|
expect(webSearchRaw.mode).not.toBe("managed");
|
|
169
169
|
|
|
170
170
|
// image-generation's managed axis is its provider: the seeded value is
|
|
171
|
-
// the
|
|
171
|
+
// the cloud fill "cadet", never an injected managed mode.
|
|
172
172
|
const imageGenRaw = (servicesRaw["image-generation"] ?? {}) as Record<
|
|
173
173
|
string,
|
|
174
174
|
unknown
|
|
@@ -177,42 +177,42 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
|
|
|
177
177
|
expect(imageGenRaw.mode).not.toBe("managed");
|
|
178
178
|
|
|
179
179
|
// Regression guard: on the NEXT load (config.json now exists with the
|
|
180
|
-
// provider leaf absent), the
|
|
180
|
+
// provider leaf absent), the cloud default re-applies in memory rather
|
|
181
181
|
// than being lost to a persisted "auto" read back as an explicit choice.
|
|
182
182
|
invalidateConfigCache();
|
|
183
183
|
expect(loadConfig().memory.embeddings.provider).toBe("gemini");
|
|
184
184
|
});
|
|
185
185
|
|
|
186
|
-
test("
|
|
186
|
+
test("IS_CLOUD='1' also fills provider=gemini in memory", () => {
|
|
187
187
|
writeConfig({});
|
|
188
|
-
process.env.
|
|
188
|
+
process.env.IS_CLOUD = "1";
|
|
189
189
|
|
|
190
190
|
const config = loadConfig();
|
|
191
191
|
|
|
192
192
|
expect(config.memory.embeddings.provider).toBe("gemini");
|
|
193
193
|
});
|
|
194
194
|
|
|
195
|
-
test("explicit provider on disk wins over the
|
|
195
|
+
test("explicit provider on disk wins over the cloud default", () => {
|
|
196
196
|
writeConfig({
|
|
197
197
|
memory: { embeddings: { provider: "local" } },
|
|
198
198
|
});
|
|
199
|
-
process.env.
|
|
199
|
+
process.env.IS_CLOUD = "true";
|
|
200
200
|
|
|
201
201
|
const config = loadConfig();
|
|
202
202
|
|
|
203
203
|
expect(config.memory.embeddings.provider).toBe("local");
|
|
204
204
|
expect(config.memory.qdrant.vectorSize).toBe(384);
|
|
205
205
|
|
|
206
|
-
// On-disk value is preserved exactly; the
|
|
206
|
+
// On-disk value is preserved exactly; the cloud default does not bleed in.
|
|
207
207
|
const raw = readConfig();
|
|
208
208
|
const memoryRaw = raw.memory as Record<string, unknown>;
|
|
209
209
|
const embeddingsRaw = memoryRaw.embeddings as Record<string, unknown>;
|
|
210
210
|
expect(embeddingsRaw.provider).toBe("local");
|
|
211
211
|
});
|
|
212
212
|
|
|
213
|
-
test("provider stays auto when
|
|
213
|
+
test("provider stays auto when IS_CLOUD is unset", () => {
|
|
214
214
|
writeConfig({});
|
|
215
|
-
delete process.env.
|
|
215
|
+
delete process.env.IS_CLOUD;
|
|
216
216
|
|
|
217
217
|
const config = loadConfig();
|
|
218
218
|
|
|
@@ -224,7 +224,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
|
|
|
224
224
|
if (existsSync(CONFIG_PATH)) {
|
|
225
225
|
rmSync(CONFIG_PATH, { force: true });
|
|
226
226
|
}
|
|
227
|
-
delete process.env.
|
|
227
|
+
delete process.env.IS_CLOUD;
|
|
228
228
|
|
|
229
229
|
const config = loadConfig();
|
|
230
230
|
|
|
@@ -251,7 +251,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
|
|
|
251
251
|
if (existsSync(CONFIG_PATH)) {
|
|
252
252
|
rmSync(CONFIG_PATH, { force: true });
|
|
253
253
|
}
|
|
254
|
-
delete process.env.
|
|
254
|
+
delete process.env.IS_CLOUD;
|
|
255
255
|
|
|
256
256
|
loadConfig();
|
|
257
257
|
enableMemoryV3LiveForNewWorkspacesMigration.run(WORKSPACE_DIR, {
|
|
@@ -5,7 +5,7 @@ import { LLMSchema } from "../schemas/llm.js";
|
|
|
5
5
|
const PIN = { callSites: { voiceEscalationJudge: { profile: "jev-managed" } } };
|
|
6
6
|
|
|
7
7
|
describe("jev-managed as a call-site pin target", () => {
|
|
8
|
-
test("resolves under the
|
|
8
|
+
test("resolves under the cloud default provider", () => {
|
|
9
9
|
expect(LLMSchema.safeParse(PIN).success).toBe(true);
|
|
10
10
|
expect(
|
|
11
11
|
LLMSchema.safeParse({
|
|
@@ -53,7 +53,7 @@ describe("jev-managed as a call-site pin target", () => {
|
|
|
53
53
|
);
|
|
54
54
|
});
|
|
55
55
|
|
|
56
|
-
test("is rejected as the active or advisor profile even on the
|
|
56
|
+
test("is rejected as the active or advisor profile even on the cloud column", () => {
|
|
57
57
|
for (const field of ["activeProfile", "advisorProfile"] as const) {
|
|
58
58
|
const result = LLMSchema.safeParse({ [field]: "jev-managed" });
|
|
59
59
|
expect(result.success).toBe(false);
|
|
@@ -75,8 +75,6 @@ describe("jev-managed as a call-site pin target", () => {
|
|
|
75
75
|
},
|
|
76
76
|
});
|
|
77
77
|
expect(result.success).toBe(false);
|
|
78
|
-
expect(JSON.stringify(result.error?.issues)).toContain(
|
|
79
|
-
"managed Jev profile",
|
|
80
|
-
);
|
|
78
|
+
expect(JSON.stringify(result.error?.issues)).toContain("cloud Jev profile");
|
|
81
79
|
});
|
|
82
80
|
});
|
|
@@ -65,12 +65,12 @@ describe("config recovery prunes call-site overrides emptied by a strip", () =>
|
|
|
65
65
|
if (existsSync(CONFIG_PATH)) {
|
|
66
66
|
rmSync(CONFIG_PATH, { force: true });
|
|
67
67
|
}
|
|
68
|
-
delete process.env.
|
|
68
|
+
delete process.env.IS_CLOUD;
|
|
69
69
|
invalidateConfigCache();
|
|
70
70
|
});
|
|
71
71
|
|
|
72
72
|
afterEach(() => {
|
|
73
|
-
delete process.env.
|
|
73
|
+
delete process.env.IS_CLOUD;
|
|
74
74
|
if (existsSync(CONFIG_PATH)) {
|
|
75
75
|
rmSync(CONFIG_PATH, { force: true });
|
|
76
76
|
}
|
|
@@ -73,13 +73,13 @@ describe("config recovery ladder for cleanup-resistant invalid config", () => {
|
|
|
73
73
|
if (existsSync(CONFIG_PATH)) {
|
|
74
74
|
rmSync(CONFIG_PATH, { force: true });
|
|
75
75
|
}
|
|
76
|
-
delete process.env.
|
|
76
|
+
delete process.env.IS_CLOUD;
|
|
77
77
|
invalidateConfigCache();
|
|
78
78
|
_resetLastKnownGoodConfigForTests();
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
afterEach(() => {
|
|
82
|
-
delete process.env.
|
|
82
|
+
delete process.env.IS_CLOUD;
|
|
83
83
|
if (existsSync(CONFIG_PATH)) {
|
|
84
84
|
rmSync(CONFIG_PATH, { force: true });
|
|
85
85
|
}
|
|
@@ -187,16 +187,16 @@ describe("config recovery ladder for cleanup-resistant invalid config", () => {
|
|
|
187
187
|
expect(config.tools.exclude).toEqual([]);
|
|
188
188
|
});
|
|
189
189
|
|
|
190
|
-
test("recovery on a
|
|
191
|
-
process.env.
|
|
190
|
+
test("recovery on a cloud daemon returns the context-filled effective config", () => {
|
|
191
|
+
process.env.IS_CLOUD = "true";
|
|
192
192
|
|
|
193
193
|
// First load with no config.json seeds the file and fills the
|
|
194
|
-
// deployment-context
|
|
194
|
+
// deployment-context cloud OAuth service modes in memory; the
|
|
195
195
|
// last-known-good snapshot is refreshed AFTER that fill.
|
|
196
196
|
const seeded = loadConfig();
|
|
197
197
|
expect(seeded.services["outlook-oauth"].mode).toBe("managed");
|
|
198
198
|
|
|
199
|
-
// Recovery keeps the last-known-good EFFECTIVE config, so the
|
|
199
|
+
// Recovery keeps the last-known-good EFFECTIVE config, so the cloud mode
|
|
200
200
|
// survives rather than reverting to the schema default ("your-own").
|
|
201
201
|
const recovered = _recoverFromInvalidConfigForTests(
|
|
202
202
|
{},
|
|
@@ -43,12 +43,12 @@ describe("config recovery compacts arrays after stripping invalid elements", ()
|
|
|
43
43
|
if (existsSync(CONFIG_PATH)) {
|
|
44
44
|
rmSync(CONFIG_PATH, { force: true });
|
|
45
45
|
}
|
|
46
|
-
delete process.env.
|
|
46
|
+
delete process.env.IS_CLOUD;
|
|
47
47
|
invalidateConfigCache();
|
|
48
48
|
});
|
|
49
49
|
|
|
50
50
|
afterEach(() => {
|
|
51
|
-
delete process.env.
|
|
51
|
+
delete process.env.IS_CLOUD;
|
|
52
52
|
if (existsSync(CONFIG_PATH)) {
|
|
53
53
|
rmSync(CONFIG_PATH, { force: true });
|
|
54
54
|
}
|
|
@@ -14,7 +14,7 @@ mock.module("../../providers/inference/connections.js", () => ({
|
|
|
14
14
|
connectionRows.get(name) ?? null,
|
|
15
15
|
}));
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import { CADET_CLOUD_CONNECTION_NAME } from "../../providers/cadet-model-routing.js";
|
|
18
18
|
import { completeCustomProfile } from "../profile-materialization.js";
|
|
19
19
|
import { LLMConfigBase, ProfileEntry } from "../schemas/llm.js";
|
|
20
20
|
|
|
@@ -164,10 +164,10 @@ describe("completeCustomProfile", () => {
|
|
|
164
164
|
expect(completed.provider_connection).toBeUndefined();
|
|
165
165
|
});
|
|
166
166
|
|
|
167
|
-
test("a
|
|
167
|
+
test("a cloud default's binding becomes the routing identity, never a stamped field", () => {
|
|
168
168
|
const managedDefault = LLMConfigBase.parse({
|
|
169
169
|
...fullDefault,
|
|
170
|
-
provider_connection:
|
|
170
|
+
provider_connection: CADET_CLOUD_CONNECTION_NAME,
|
|
171
171
|
});
|
|
172
172
|
const implied = completeCustomProfile(managedDefault, { model: "gpt-5.5" });
|
|
173
173
|
expect(implied.provider).toBe("cadet");
|
|
@@ -223,16 +223,16 @@ describe("completeCustomProfile", () => {
|
|
|
223
223
|
}
|
|
224
224
|
});
|
|
225
225
|
|
|
226
|
-
test("a
|
|
226
|
+
test("a cloud default binding is not inherited when the identity cannot serve the model", () => {
|
|
227
227
|
const managedDefault = LLMConfigBase.parse({
|
|
228
228
|
...fullDefault,
|
|
229
|
-
provider_connection:
|
|
229
|
+
provider_connection: CADET_CLOUD_CONNECTION_NAME,
|
|
230
230
|
});
|
|
231
231
|
const completed = completeCustomProfile(managedDefault, {
|
|
232
232
|
model: "totally-custom-model",
|
|
233
233
|
});
|
|
234
234
|
// Dispatch auto-resolves by vendor instead of pinning an unservable
|
|
235
|
-
//
|
|
235
|
+
// cloud route.
|
|
236
236
|
expect(completed.provider).toBe("anthropic");
|
|
237
237
|
expect(completed.provider_connection).toBeUndefined();
|
|
238
238
|
});
|
|
@@ -248,7 +248,7 @@ describe("completeCustomProfile", () => {
|
|
|
248
248
|
expect(completeCustomProfile(fullDefault, mix)).toBe(mix);
|
|
249
249
|
});
|
|
250
250
|
|
|
251
|
-
test("passes
|
|
251
|
+
test("passes cloud profiles through untouched", () => {
|
|
252
252
|
const managed: ProfileEntry = { source: "managed", topP: 0.9 };
|
|
253
253
|
expect(completeCustomProfile(fullDefault, managed)).toBe(managed);
|
|
254
254
|
});
|
|
@@ -37,7 +37,7 @@ afterAll(() => {
|
|
|
37
37
|
mock.restore();
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
import {
|
|
40
|
+
import { CADET_CLOUD_PROVIDER } from "../../providers/cadet-model-routing.js";
|
|
41
41
|
import { invalidateConfigCache } from "../loader.js";
|
|
42
42
|
import { LLMSchema } from "../schemas/llm.js";
|
|
43
43
|
import {
|
|
@@ -75,17 +75,17 @@ describe("seedInferenceProfiles / llm.default", () => {
|
|
|
75
75
|
if (existsSync(CONFIG_PATH)) {
|
|
76
76
|
rmSync(CONFIG_PATH, { force: true });
|
|
77
77
|
}
|
|
78
|
-
delete process.env.
|
|
78
|
+
delete process.env.IS_CLOUD;
|
|
79
79
|
invalidateConfigCache();
|
|
80
80
|
});
|
|
81
81
|
|
|
82
82
|
afterEach(() => {
|
|
83
|
-
delete process.env.
|
|
83
|
+
delete process.env.IS_CLOUD;
|
|
84
84
|
invalidateConfigCache();
|
|
85
85
|
});
|
|
86
86
|
|
|
87
87
|
test("platform hatch writes cadet", () => {
|
|
88
|
-
process.env.
|
|
88
|
+
process.env.IS_CLOUD = "true";
|
|
89
89
|
const llm = seed({ llm: {} }, { isHatch: true });
|
|
90
90
|
expect(llm.default).toEqual({ provider: "cadet" });
|
|
91
91
|
});
|
|
@@ -93,7 +93,7 @@ describe("seedInferenceProfiles / llm.default", () => {
|
|
|
93
93
|
test("platform hatch trusts an existing usable blob provider", () => {
|
|
94
94
|
// Every real platform hatch either writes cadet (no overlay provider) or
|
|
95
95
|
// carries the hatch's own choice; a usable blob is never overwritten.
|
|
96
|
-
process.env.
|
|
96
|
+
process.env.IS_CLOUD = "true";
|
|
97
97
|
const llm = seed(
|
|
98
98
|
{ llm: { default: { provider: "anthropic" } } },
|
|
99
99
|
{ isHatch: true },
|
|
@@ -154,8 +154,8 @@ describe("seedInferenceProfiles / llm.default", () => {
|
|
|
154
154
|
expect(llm.default).toEqual({ provider: "anthropic" });
|
|
155
155
|
});
|
|
156
156
|
|
|
157
|
-
test("BYOK hatch that selected a
|
|
158
|
-
// The
|
|
157
|
+
test("BYOK hatch that selected a cloud connection writes cadet", () => {
|
|
158
|
+
// The cloud-connection detection reads the active profile (a cloud
|
|
159
159
|
// template name), not the blob — with no blob provider the seed writes
|
|
160
160
|
// the resolved decision.
|
|
161
161
|
const llm = seed(
|
|
@@ -165,8 +165,8 @@ describe("seedInferenceProfiles / llm.default", () => {
|
|
|
165
165
|
expect(llm.default).toEqual({ provider: "cadet" });
|
|
166
166
|
});
|
|
167
167
|
|
|
168
|
-
test("a pre-existing selection survives a
|
|
169
|
-
process.env.
|
|
168
|
+
test("a pre-existing selection survives a cloud hatch untouched", () => {
|
|
169
|
+
process.env.IS_CLOUD = "true";
|
|
170
170
|
const llm = seed(
|
|
171
171
|
{ llm: { default: { provider: "anthropic" } } },
|
|
172
172
|
{ isHatch: true },
|
|
@@ -182,7 +182,7 @@ describe("seedInferenceProfiles / llm.default", () => {
|
|
|
182
182
|
expect(llm.default).toEqual({ provider: "anthropic" });
|
|
183
183
|
});
|
|
184
184
|
|
|
185
|
-
test("a pre-existing selection survives a
|
|
185
|
+
test("a pre-existing selection survives a cloud-connection hatch untouched", () => {
|
|
186
186
|
const llm = seed(
|
|
187
187
|
{
|
|
188
188
|
llm: {
|
|
@@ -210,14 +210,14 @@ describe("seedInferenceProfiles / llm.default", () => {
|
|
|
210
210
|
});
|
|
211
211
|
|
|
212
212
|
test("no connectionName is ever written", () => {
|
|
213
|
-
process.env.
|
|
213
|
+
process.env.IS_CLOUD = "true";
|
|
214
214
|
const platformLLM = seed(
|
|
215
215
|
{ llm: { default: { provider: "anthropic" } } },
|
|
216
216
|
{ isHatch: true },
|
|
217
217
|
);
|
|
218
218
|
expect(platformLLM.default?.provider_connection).toBeUndefined();
|
|
219
219
|
|
|
220
|
-
delete process.env.
|
|
220
|
+
delete process.env.IS_CLOUD;
|
|
221
221
|
const byokLLM = seed(
|
|
222
222
|
{ llm: { default: { provider: "openai" } } },
|
|
223
223
|
{ isHatch: true },
|
|
@@ -228,7 +228,7 @@ describe("seedInferenceProfiles / llm.default", () => {
|
|
|
228
228
|
expect(fallbackLLM.default?.provider_connection).toBeUndefined();
|
|
229
229
|
});
|
|
230
230
|
|
|
231
|
-
test("hatch with the
|
|
231
|
+
test("hatch with the cloud provider creates no personal connection", async () => {
|
|
232
232
|
const { initializeDb } = await import("../../persistence/db-init.js");
|
|
233
233
|
const { getDb } = await import("../../persistence/db-connection.js");
|
|
234
234
|
const { providerConnections } =
|
|
@@ -237,16 +237,16 @@ describe("seedInferenceProfiles / llm.default", () => {
|
|
|
237
237
|
await import("../../providers/inference/connections.js");
|
|
238
238
|
await initializeDb();
|
|
239
239
|
try {
|
|
240
|
-
// A Cadet Cloud hatch: the modern overlay blob names the
|
|
241
|
-
// provider. The
|
|
240
|
+
// A Cadet Cloud hatch: the modern overlay blob names the cloud
|
|
241
|
+
// provider. The cloud column routes through the canonical
|
|
242
242
|
// platform-backed row — a `cadet-personal` connection backed by a
|
|
243
243
|
// user API key must not be created.
|
|
244
244
|
seed(
|
|
245
|
-
{ llm: { default: { provider:
|
|
245
|
+
{ llm: { default: { provider: CADET_CLOUD_PROVIDER } } },
|
|
246
246
|
{ isHatch: true, db: getDb() },
|
|
247
247
|
);
|
|
248
248
|
expect(
|
|
249
|
-
getConnection(getDb(), `${
|
|
249
|
+
getConnection(getDb(), `${CADET_CLOUD_PROVIDER}-personal`),
|
|
250
250
|
).toBeNull();
|
|
251
251
|
expect(getDb().select().from(providerConnections).all()).toEqual([]);
|
|
252
252
|
} finally {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { utimesSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
1
3
|
import { describe, expect, test } from "bun:test";
|
|
2
4
|
|
|
3
5
|
import { MemorySubstrateConfigSchema } from "../schemas/memory-substrate.js";
|
|
@@ -9,6 +11,18 @@ import {
|
|
|
9
11
|
SUBSTRATE_TWIN_BY_V2_KEY,
|
|
10
12
|
} from "../substrate-twin-shadowing.js";
|
|
11
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Write `raw` to the workspace config.json as the state the loader serves.
|
|
16
|
+
* A distinct mtime per write keeps the loader's file-signature cache from
|
|
17
|
+
* reading two consecutive seeds as identical.
|
|
18
|
+
*/
|
|
19
|
+
function seedRawConfig(raw: Record<string, unknown>): void {
|
|
20
|
+
const path = join(process.env.CADET_WORKSPACE_DIR!, "config.json");
|
|
21
|
+
writeFileSync(path, JSON.stringify(raw));
|
|
22
|
+
const stamp = new Date(Date.now() + Math.random());
|
|
23
|
+
utimesSync(path, stamp, stamp);
|
|
24
|
+
}
|
|
25
|
+
|
|
12
26
|
describe("substrate twin table", () => {
|
|
13
27
|
test("pairs exactly the memory.substrate schema's keys", () => {
|
|
14
28
|
// Drift guard: a substrate key with no entry here is a tunable whose
|
|
@@ -44,15 +58,15 @@ describe("substrate twin table", () => {
|
|
|
44
58
|
|
|
45
59
|
describe("findSubstrateShadowing", () => {
|
|
46
60
|
test("reports the winning substrate twin for a shadowed memory.v2 key", () => {
|
|
47
|
-
|
|
61
|
+
seedRawConfig({
|
|
48
62
|
memory: {
|
|
49
63
|
v2: { consolidation_interval_hours: 4 },
|
|
50
64
|
substrate: { consolidation_interval_hours: 876000 },
|
|
51
65
|
},
|
|
52
|
-
};
|
|
66
|
+
});
|
|
53
67
|
|
|
54
68
|
expect(
|
|
55
|
-
findSubstrateShadowing(
|
|
69
|
+
findSubstrateShadowing("memory.v2.consolidation_interval_hours"),
|
|
56
70
|
).toEqual({
|
|
57
71
|
substratePath: "memory.substrate.consolidation_interval_hours",
|
|
58
72
|
substrateValue: 876000,
|
|
@@ -61,29 +75,31 @@ describe("findSubstrateShadowing", () => {
|
|
|
61
75
|
});
|
|
62
76
|
|
|
63
77
|
test("maps the renamed spread keys to their substrate names", () => {
|
|
64
|
-
|
|
78
|
+
seedRawConfig({ memory: { v2: {}, substrate: { spread_k: 0.4 } } });
|
|
65
79
|
|
|
66
|
-
expect(findSubstrateShadowing(
|
|
80
|
+
expect(findSubstrateShadowing("memory.v2.k")).toEqual({
|
|
67
81
|
substratePath: "memory.substrate.spread_k",
|
|
68
82
|
substrateValue: 0.4,
|
|
69
83
|
alsoReadByV2Engine: true,
|
|
70
84
|
});
|
|
71
85
|
// hops has no twin set, so nothing shadows it.
|
|
72
|
-
expect(findSubstrateShadowing(
|
|
86
|
+
expect(findSubstrateShadowing("memory.v2.hops")).toBeUndefined();
|
|
73
87
|
});
|
|
74
88
|
|
|
75
89
|
test("treats an explicit null twin as set, matching resolveSubstrateTuning", () => {
|
|
76
90
|
// `orV2` falls back only on `undefined`, so a null substrate value wins —
|
|
77
|
-
// and it is exactly the value the consolidation freeze writes.
|
|
78
|
-
|
|
91
|
+
// and it is exactly the value the consolidation freeze writes. The field
|
|
92
|
+
// is nullable in the schema, so the null survives the loader's parse and
|
|
93
|
+
// stays present in the running config.
|
|
94
|
+
seedRawConfig({
|
|
79
95
|
memory: {
|
|
80
96
|
v2: { consolidation_max_buffer_lines: 100 },
|
|
81
97
|
substrate: { consolidation_max_buffer_lines: null },
|
|
82
98
|
},
|
|
83
|
-
};
|
|
99
|
+
});
|
|
84
100
|
|
|
85
101
|
expect(
|
|
86
|
-
findSubstrateShadowing(
|
|
102
|
+
findSubstrateShadowing("memory.v2.consolidation_max_buffer_lines"),
|
|
87
103
|
).toEqual({
|
|
88
104
|
substratePath: "memory.substrate.consolidation_max_buffer_lines",
|
|
89
105
|
substrateValue: null,
|
|
@@ -92,29 +108,23 @@ describe("findSubstrateShadowing", () => {
|
|
|
92
108
|
});
|
|
93
109
|
|
|
94
110
|
test("returns nothing for unshadowed paths", () => {
|
|
95
|
-
|
|
111
|
+
// No memory.substrate subtree at all.
|
|
112
|
+
seedRawConfig({ memory: { v2: { bm25_b: 0.6 } } });
|
|
113
|
+
expect(findSubstrateShadowing("memory.v2.bm25_b")).toBeUndefined();
|
|
114
|
+
|
|
115
|
+
seedRawConfig({
|
|
96
116
|
memory: {
|
|
97
117
|
v2: { bm25_b: 0.6, enabled: true },
|
|
98
118
|
substrate: { bm25_b: 0.3 },
|
|
99
119
|
},
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
// No memory.substrate subtree at all.
|
|
103
|
-
expect(
|
|
104
|
-
findSubstrateShadowing(
|
|
105
|
-
{ memory: { v2: { bm25_b: 0.6 } } },
|
|
106
|
-
"memory.v2.bm25_b",
|
|
107
|
-
),
|
|
108
|
-
).toBeUndefined();
|
|
120
|
+
});
|
|
109
121
|
// A v2 key with no substrate twin.
|
|
110
|
-
expect(findSubstrateShadowing(
|
|
122
|
+
expect(findSubstrateShadowing("memory.v2.enabled")).toBeUndefined();
|
|
111
123
|
// The substrate key itself is what wins — writing it is never shadowed.
|
|
112
|
-
expect(
|
|
113
|
-
findSubstrateShadowing(raw, "memory.substrate.bm25_b"),
|
|
114
|
-
).toBeUndefined();
|
|
124
|
+
expect(findSubstrateShadowing("memory.substrate.bm25_b")).toBeUndefined();
|
|
115
125
|
// Paths outside the memory namespace, and the wrong depth.
|
|
116
|
-
expect(findSubstrateShadowing(
|
|
117
|
-
expect(findSubstrateShadowing(
|
|
126
|
+
expect(findSubstrateShadowing("memory.v2")).toBeUndefined();
|
|
127
|
+
expect(findSubstrateShadowing("llm.v2.bm25_b")).toBeUndefined();
|
|
118
128
|
});
|
|
119
129
|
});
|
|
120
130
|
|
|
@@ -73,19 +73,19 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
73
73
|
if (existsSync(CONFIG_PATH)) {
|
|
74
74
|
rmSync(CONFIG_PATH, { force: true });
|
|
75
75
|
}
|
|
76
|
-
delete process.env.
|
|
76
|
+
delete process.env.IS_CLOUD;
|
|
77
77
|
setOverridesForTesting({});
|
|
78
78
|
invalidateConfigCache();
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
afterEach(() => {
|
|
82
|
-
delete process.env.
|
|
82
|
+
delete process.env.IS_CLOUD;
|
|
83
83
|
setOverridesForTesting({});
|
|
84
84
|
invalidateConfigCache();
|
|
85
85
|
});
|
|
86
86
|
|
|
87
|
-
test("flag on materializes the
|
|
88
|
-
process.env.
|
|
87
|
+
test("flag on materializes the cloud os-beta profile after balanced", () => {
|
|
88
|
+
process.env.IS_CLOUD = "true";
|
|
89
89
|
seedBalancedConfig();
|
|
90
90
|
setOverridesForTesting({ "os-beta": true });
|
|
91
91
|
|
|
@@ -127,7 +127,7 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
127
127
|
});
|
|
128
128
|
|
|
129
129
|
test("flag on is idempotent across repeated runs", () => {
|
|
130
|
-
process.env.
|
|
130
|
+
process.env.IS_CLOUD = "true";
|
|
131
131
|
seedBalancedConfig();
|
|
132
132
|
setOverridesForTesting({ "os-beta": true });
|
|
133
133
|
|
|
@@ -136,8 +136,8 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
136
136
|
expect(reconcileFlagGatedProfiles()).toBe(false);
|
|
137
137
|
});
|
|
138
138
|
|
|
139
|
-
test("flag on preserves user overrides on the
|
|
140
|
-
process.env.
|
|
139
|
+
test("flag on preserves user overrides on the cloud profile", () => {
|
|
140
|
+
process.env.IS_CLOUD = "true";
|
|
141
141
|
seedBalancedConfig();
|
|
142
142
|
setOverridesForTesting({ "os-beta": true });
|
|
143
143
|
reconcileFlagGatedProfiles();
|
|
@@ -165,8 +165,8 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
165
165
|
expect(effective.effort).toBe("low");
|
|
166
166
|
});
|
|
167
167
|
|
|
168
|
-
test("flag off removes a
|
|
169
|
-
process.env.
|
|
168
|
+
test("flag off removes a cloud os-beta and applies fallbacks", () => {
|
|
169
|
+
process.env.IS_CLOUD = "true";
|
|
170
170
|
seedBalancedConfig();
|
|
171
171
|
setOverridesForTesting({ "os-beta": true });
|
|
172
172
|
reconcileFlagGatedProfiles();
|
|
@@ -188,7 +188,7 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
188
188
|
});
|
|
189
189
|
|
|
190
190
|
test("flag off with no os-beta present is a no-op", () => {
|
|
191
|
-
process.env.
|
|
191
|
+
process.env.IS_CLOUD = "true";
|
|
192
192
|
seedBalancedConfig();
|
|
193
193
|
setOverridesForTesting({ "os-beta": false });
|
|
194
194
|
|
|
@@ -196,7 +196,7 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
196
196
|
});
|
|
197
197
|
|
|
198
198
|
test("flag off scrubs os-beta from user mix arms, keeping >= 2-arm mixes", () => {
|
|
199
|
-
process.env.
|
|
199
|
+
process.env.IS_CLOUD = "true";
|
|
200
200
|
seedBalancedConfig();
|
|
201
201
|
setOverridesForTesting({ "os-beta": true });
|
|
202
202
|
reconcileFlagGatedProfiles();
|
|
@@ -233,7 +233,7 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
233
233
|
});
|
|
234
234
|
|
|
235
235
|
test("flag off removes a two-arm mix that loses os-beta and repoints refs", () => {
|
|
236
|
-
process.env.
|
|
236
|
+
process.env.IS_CLOUD = "true";
|
|
237
237
|
seedBalancedConfig();
|
|
238
238
|
setOverridesForTesting({ "os-beta": true });
|
|
239
239
|
reconcileFlagGatedProfiles();
|
|
@@ -279,7 +279,7 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
279
279
|
});
|
|
280
280
|
|
|
281
281
|
test("flag off shortens a three-arm mix to two surviving arms", () => {
|
|
282
|
-
process.env.
|
|
282
|
+
process.env.IS_CLOUD = "true";
|
|
283
283
|
seedBalancedConfig();
|
|
284
284
|
setOverridesForTesting({ "os-beta": true });
|
|
285
285
|
reconcileFlagGatedProfiles();
|
|
@@ -312,7 +312,7 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
312
312
|
});
|
|
313
313
|
|
|
314
314
|
test("flag off clears a call-site profile reference to os-beta", () => {
|
|
315
|
-
process.env.
|
|
315
|
+
process.env.IS_CLOUD = "true";
|
|
316
316
|
seedBalancedConfig();
|
|
317
317
|
setOverridesForTesting({ "os-beta": true });
|
|
318
318
|
reconcileFlagGatedProfiles();
|
|
@@ -341,7 +341,7 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
341
341
|
});
|
|
342
342
|
|
|
343
343
|
test("a user-owned os-beta profile is never touched", () => {
|
|
344
|
-
process.env.
|
|
344
|
+
process.env.IS_CLOUD = "true";
|
|
345
345
|
writeConfig({
|
|
346
346
|
llm: {
|
|
347
347
|
default: { provider: "anthropic" },
|
|
@@ -369,8 +369,8 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
369
369
|
expect(readFileSync(CONFIG_PATH, "utf-8")).toBe(before);
|
|
370
370
|
});
|
|
371
371
|
|
|
372
|
-
test("auto-profile flag on materializes the
|
|
373
|
-
process.env.
|
|
372
|
+
test("auto-profile flag on materializes the cloud auto profile at the head of the order", () => {
|
|
373
|
+
process.env.IS_CLOUD = "true";
|
|
374
374
|
seedBalancedConfig();
|
|
375
375
|
setOverridesForTesting({ "auto-profile": true });
|
|
376
376
|
|
|
@@ -398,8 +398,8 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
398
398
|
expect(getEffectiveProfile(raw.llm.profiles, "auto")).toBeDefined();
|
|
399
399
|
});
|
|
400
400
|
|
|
401
|
-
test("auto-profile flag off removes the
|
|
402
|
-
process.env.
|
|
401
|
+
test("auto-profile flag off removes the cloud auto profile and repoints its references", () => {
|
|
402
|
+
process.env.IS_CLOUD = "true";
|
|
403
403
|
seedBalancedConfig();
|
|
404
404
|
setOverridesForTesting({ "auto-profile": true });
|
|
405
405
|
reconcileFlagGatedProfiles();
|
|
@@ -425,7 +425,7 @@ describe("reconcileFlagGatedProfiles", () => {
|
|
|
425
425
|
});
|
|
426
426
|
|
|
427
427
|
test("os-beta and auto-profile reconcile independently in one pass", () => {
|
|
428
|
-
process.env.
|
|
428
|
+
process.env.IS_CLOUD = "true";
|
|
429
429
|
seedBalancedConfig();
|
|
430
430
|
setOverridesForTesting({ "os-beta": true, "auto-profile": true });
|
|
431
431
|
expect(reconcileFlagGatedProfiles()).toBe(true);
|