@mycadet/assistant 0.12.7 → 0.12.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/docs/activation-funnel-telemetry.md +6 -6
- package/docs/cadet-doctor.md +7 -7
- package/docs/desktop-browser-cli.md +7 -7
- package/docs/skills.md +2 -2
- package/docs/voice-input-diagnostics.md +1 -1
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +2 -2
- package/node_modules/@mycadet/avatar-manifest/src/__tests__/notification-avatar.test.ts +1 -1
- package/node_modules/@mycadet/avatar-manifest/src/notification-avatar.ts +2 -2
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/package.json +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/node_modules/@mycadet/ces-client/src/rpc-client.ts +1 -1
- package/node_modules/@mycadet/credential-storage/src/oauth-runtime.ts +1 -1
- package/node_modules/@mycadet/credential-storage/src/static-credentials.ts +1 -1
- package/node_modules/@mycadet/environments/src/seeds.ts +6 -6
- package/node_modules/@mycadet/environments/src/shell.test.ts +1 -1
- package/node_modules/@mycadet/environments/src/types.ts +6 -6
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/package.json +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/node_modules/@mycadet/gateway-client/src/binding-strength-contract.ts +5 -5
- package/node_modules/@mycadet/gateway-client/src/gateway-ipc-contracts.ts +1 -1
- package/node_modules/@mycadet/gateway-client/src/inbound-contract.ts +2 -2
- package/node_modules/@mycadet/gateway-client/src/outbound-contract.ts +1 -1
- package/node_modules/@mycadet/service-contracts/package.json +1 -1
- package/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/openapi.yaml +6815 -794
- package/package.json +2 -2
- package/scripts/build-test-fixtures.ts +1 -1
- package/scripts/probe-skill-retrieval.ts +1 -1
- package/scripts/sync-llm-catalog.ts +2 -2
- package/scripts/voice-ttft-spike.ts +2 -2
- package/src/__tests__/adaptive-thinking-repair.test.ts +4 -4
- package/src/__tests__/agent-loop-override-profile.test.ts +4 -4
- package/src/__tests__/agent-loop-subagent-billing-headers.test.ts +1 -1
- package/src/__tests__/anthropic-provider.test.ts +2 -2
- package/src/__tests__/available-skills.test.ts +11 -12
- package/src/__tests__/avatar-identity-sync.test.ts +1 -1
- package/src/__tests__/byok-default-profile-ensure.test.ts +7 -7
- package/src/__tests__/call-domain.test.ts +1 -1
- package/src/__tests__/call-site-routing-connection-auto-resolve.test.ts +2 -2
- package/src/__tests__/catalog-files.test.ts +10 -10
- package/src/__tests__/catalog-install-normalize.test.ts +3 -3
- package/src/__tests__/channel-availability-routes.test.ts +8 -8
- package/src/__tests__/channel-readiness-routes.test.ts +4 -4
- package/src/__tests__/channel-readiness-service.test.ts +14 -14
- package/src/__tests__/channel-readiness-telegram-remote.test.ts +1 -1
- package/src/__tests__/chat-reveal-guard-priming.test.ts +5 -6
- package/src/__tests__/checker.test.ts +6 -6
- package/src/__tests__/clawhub.test.ts +1 -1
- package/src/__tests__/{platform-callback-registration.test.ts → cloud-callback-registration.test.ts} +66 -90
- package/src/__tests__/{platform-client-verify-credential.test.ts → cloud-client-verify-credential.test.ts} +14 -14
- package/src/__tests__/{managed-credential-catalog-cli.test.ts → cloud-credential-catalog-cli.test.ts} +41 -41
- package/src/__tests__/{managed-fallback-dispatch.test.ts → cloud-fallback-dispatch.test.ts} +21 -16
- package/src/__tests__/{managed-profile-guard.test.ts → cloud-profile-guard.test.ts} +60 -60
- package/src/__tests__/{platform-proxy-context.test.ts → cloud-proxy-context.test.ts} +44 -44
- package/src/__tests__/{managed-speech-defaults.test.ts → cloud-speech-defaults.test.ts} +41 -41
- package/src/__tests__/{managed-store.test.ts → cloud-store.test.ts} +99 -99
- package/src/__tests__/compaction-events.test.ts +7 -5
- package/src/__tests__/config-loader-backfill.test.ts +65 -65
- package/src/__tests__/config-loader-cloud-defaults.test.ts +373 -0
- package/src/__tests__/config-loader-corrupt.test.ts +1 -1
- package/src/__tests__/config-loader-validation-reset-notice.test.ts +1 -1
- package/src/__tests__/config-schema.test.ts +3 -3
- package/src/__tests__/{config-set-platform-guard.test.ts → config-set-cloud-guard.test.ts} +6 -6
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +0 -8
- package/src/__tests__/config-watcher.test.ts +1 -1
- package/src/__tests__/contacts-write.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop.test.ts +2 -2
- package/src/__tests__/conversation-app-control-instantiation.test.ts +18 -18
- package/src/__tests__/conversation-error.test.ts +45 -45
- package/src/__tests__/conversation-inference-profile-route.test.ts +4 -4
- package/src/__tests__/conversation-rendered-delegation-state.test.ts +4 -4
- package/src/__tests__/conversation-skill-tools.test.ts +7 -8
- package/src/__tests__/conversation-slash.test.ts +2 -2
- package/src/__tests__/conversation-speed-override.test.ts +8 -10
- package/src/__tests__/conversation-summarize-up-to.test.ts +4 -4
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +1 -1
- package/src/__tests__/conversation-wait-for-idle.test.ts +7 -5
- package/src/__tests__/credential-execution-api-key-propagation.test.ts +5 -5
- package/src/__tests__/{credential-execution-managed-contract.test.ts → credential-execution-cloud-contract.test.ts} +24 -24
- package/src/__tests__/credential-health-service.test.ts +27 -41
- package/src/__tests__/credential-routes.test.ts +85 -165
- package/src/__tests__/credential-security-invariants.test.ts +6 -7
- package/src/__tests__/custom-profile-ensure.test.ts +1 -1
- package/src/__tests__/date-context.test.ts +1 -1
- package/src/__tests__/default-profile-catalog-fallback.test.ts +15 -15
- package/src/__tests__/delete-managed-skill-tool.test.ts +8 -8
- package/src/__tests__/discord-callback-round-trip.test.ts +1 -1
- package/src/__tests__/disk-usage.test.ts +3 -3
- package/src/__tests__/email-invite-adapter.test.ts +5 -5
- package/src/__tests__/{embedding-managed-proxy-selection.test.ts → embedding-cloud-proxy-selection.test.ts} +44 -43
- package/src/__tests__/emit-signal-routing-intent.test.ts +13 -15
- package/src/__tests__/events-dev-bypass-actor.test.ts +2 -2
- package/src/__tests__/fallback-breaker.test.ts +7 -7
- package/src/__tests__/feature-flag-test-helpers.ts +106 -0
- package/src/__tests__/gateway-flag-listener.test.ts +1 -1
- package/src/__tests__/gemini-image-service.test.ts +2 -2
- package/src/__tests__/gemini-provider.test.ts +5 -5
- package/src/__tests__/get-skill-detail-audit.test.ts +9 -8
- package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -1
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +5 -5
- package/src/__tests__/host-cu-routes-targeted.test.ts +8 -8
- package/src/__tests__/image-credentials.test.ts +13 -13
- package/src/__tests__/inbound-admitted-introduction-nudge.test.ts +14 -6
- package/src/__tests__/inbound-trust-verdict.test.ts +14 -6
- package/src/__tests__/inference-no-mode-boot-e2e.test.ts +11 -11
- package/src/__tests__/inference-profile-session-handler.test.ts +7 -7
- package/src/__tests__/inference-profile-session-ipc.test.ts +5 -5
- package/src/__tests__/inference-profile-validation-jev.test.ts +1 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +40 -24
- package/src/__tests__/input-repairs.test.ts +1 -1
- package/src/__tests__/install-skill-routing.test.ts +10 -8
- package/src/__tests__/integration-status.test.ts +5 -5
- package/src/__tests__/internal-telemetry-routes.test.ts +3 -3
- package/src/__tests__/invite-routes-http.test.ts +1 -1
- package/src/__tests__/llm-catalog-parity.test.ts +5 -7
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +2 -2
- package/src/__tests__/llm-resolver-override-or-default.test.ts +3 -3
- package/src/__tests__/llm-resolver.test.ts +1 -1
- package/src/__tests__/llm-schema-fallback-profile.test.ts +25 -19
- package/src/__tests__/llm-usage-store.test.ts +1 -1
- package/src/__tests__/managed-skill-lifecycle.test.ts +12 -12
- package/src/__tests__/mcp-abort-signal.test.ts +2 -2
- package/src/__tests__/mcp-client-auth.test.ts +2 -2
- package/src/__tests__/mcp-tool-annotations-risk.test.ts +2 -2
- package/src/__tests__/media-generate-image.test.ts +30 -30
- package/src/__tests__/memory-config-file-parity.test.ts +6 -6
- package/src/__tests__/migration-export-to-gcs.test.ts +4 -4
- package/src/__tests__/migration-import-commit-http.test.ts +1 -1
- package/src/__tests__/mtime-cache.test.ts +2 -2
- package/src/__tests__/{notification-platform-adapter.test.ts → notification-cloud-adapter.test.ts} +39 -39
- package/src/__tests__/notification-deep-link.test.ts +40 -40
- package/src/__tests__/oauth-apps-routes.test.ts +3 -3
- package/src/__tests__/oauth-cli.test.ts +9 -9
- package/src/__tests__/oauth-commands-routes.test.ts +16 -16
- package/src/__tests__/oauth-connect-orchestrator.test.ts +2 -2
- package/src/__tests__/oauth-provider-serializer.test.ts +11 -11
- package/src/__tests__/oauth-providers-routes.test.ts +12 -12
- package/src/__tests__/oauth-store.test.ts +1 -1
- package/src/__tests__/oauth2-gateway-transport.test.ts +3 -3
- package/src/__tests__/onboarding-persona-write.test.ts +2 -2
- package/src/__tests__/openai-image-service.test.ts +2 -2
- package/src/__tests__/openai-responses-cutover-guard.test.ts +2 -2
- package/src/__tests__/openai-responses-provider.test.ts +1 -1
- package/src/__tests__/path-policy.test.ts +4 -4
- package/src/__tests__/personal-memory-auth-bypass.test.ts +1 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +18 -18
- package/src/__tests__/plugin-api-model-profiles.test.ts +1 -1
- package/src/__tests__/plugin-api-provider.test.ts +1 -1
- package/src/__tests__/plugin-api-webhook-url.test.ts +4 -5
- package/src/__tests__/plugin-import-boundary-guard.test.ts +8 -39
- package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +2 -2
- package/src/__tests__/{provider-platform-proxy-integration.test.ts → provider-cloud-proxy-integration.test.ts} +70 -72
- package/src/__tests__/provider-commit-message-generator.test.ts +1 -1
- package/src/__tests__/provider-connections-backfill.test.ts +9 -9
- package/src/__tests__/provider-error-scenarios.test.ts +8 -8
- package/src/__tests__/provider-registry-ollama.test.ts +1 -1
- package/src/__tests__/provider-send-message-override-profile.test.ts +5 -5
- package/src/__tests__/registry.test.ts +3 -3
- package/src/__tests__/requests-mock.ts +972 -0
- package/src/__tests__/resolve-trust-class.test.ts +1 -1
- package/src/__tests__/resource-pressure-guard.test.ts +6 -6
- package/src/__tests__/resource-pressure-routes.test.ts +5 -5
- package/src/__tests__/retry-fallback-escalation.test.ts +5 -5
- package/src/__tests__/sanitize-config-for-transfer.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +97 -97
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/search-skills-unified.test.ts +9 -7
- package/src/__tests__/{secret-routes-platform-proxy.test.ts → secret-routes-cloud-proxy.test.ts} +48 -95
- package/src/__tests__/secret-routes-scrub.test.ts +2 -59
- package/src/__tests__/secure-keys.test.ts +1 -1
- package/src/__tests__/skill-load-plugin-scope.test.ts +2 -2
- package/src/__tests__/skill-load-tool.test.ts +1 -1
- package/src/__tests__/skill-projection-feature-flag.test.ts +0 -19
- package/src/__tests__/skill-projection.benchmark.test.ts +5 -7
- package/src/__tests__/skill-tool-factory.test.ts +1 -1
- package/src/__tests__/skills-file-content-endpoint.test.ts +12 -12
- package/src/__tests__/skills-files-catalog-fallback.test.ts +9 -9
- package/src/__tests__/skills.test.ts +1 -1
- package/src/__tests__/slim-skill-category.test.ts +11 -9
- package/src/__tests__/stt-stream-session.test.ts +3 -3
- package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
- package/src/__tests__/subagent-disposal.test.ts +5 -5
- package/src/__tests__/subagent-fork-notifications.test.ts +4 -4
- package/src/__tests__/subagent-fork-spawn.test.ts +5 -5
- package/src/__tests__/subagent-manager-notify.test.ts +5 -5
- package/src/__tests__/subagent-tool-gate-mode.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +1 -1
- package/src/__tests__/telegram-bot-username-resolution.test.ts +34 -52
- package/src/__tests__/telegram-config.test.ts +16 -16
- package/src/__tests__/telephony-tts-guard.test.ts +13 -13
- package/src/__tests__/test-preload.ts +17 -7
- package/src/__tests__/tool-audit.test.ts +1 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +7 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -1
- package/src/__tests__/turn-events-store.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +2 -1
- package/src/__tests__/ui-choice-copy-surfaces.test.ts +1 -1
- package/src/__tests__/unified-turn-context-client-os.test.ts +1 -1
- package/src/__tests__/validate-input.test.ts +5 -5
- package/src/__tests__/verification-outbound-delivery.test.ts +1 -1
- package/src/__tests__/voice-config-update.test.ts +15 -15
- package/src/__tests__/voice-ingress-preflight.test.ts +4 -4
- package/src/__tests__/web-search.test.ts +340 -859
- package/src/__tests__/workspace-git-service.test.ts +1 -1
- package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +12 -12
- package/src/__tests__/workspace-migration-087-memory-router-balanced-profile.test.ts +1 -1
- package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +1 -1
- package/src/__tests__/workspace-migration-100-upgrade-quality-profile-to-fable-5.test.ts +1 -1
- package/src/__tests__/workspace-migration-103-upgrade-quality-profile-to-opus-4-8.test.ts +1 -1
- package/src/__tests__/workspace-migration-110-flip-balanced-profile-to-together.test.ts +1 -1
- package/src/__tests__/workspace-migration-113-swap-balanced-profile-to-glm-5p2.test.ts +1 -1
- package/src/__tests__/workspace-migration-114-swap-quality-profile-to-opus.test.ts +1 -1
- package/src/__tests__/workspace-migration-123-swap-quality-profile-to-fable.test.ts +1 -1
- package/src/__tests__/workspace-migration-125-repoint-managed-connections-to-cadet.test.ts +3 -3
- package/src/__tests__/workspace-migration-126-strip-managed-profile-bodies.test.ts +9 -9
- package/src/__tests__/workspace-migration-127-backfill-default-provider.test.ts +11 -11
- package/src/__tests__/workspace-migration-130-speech-mode-to-provider.test.ts +3 -3
- package/src/__tests__/workspace-migration-132-web-search-mode-to-provider.test.ts +6 -6
- package/src/__tests__/workspace-migration-133-collapse-provider-connections.test.ts +3 -3
- package/src/__tests__/workspace-migration-134-image-generation-mode-to-provider.test.ts +6 -6
- package/src/__tests__/workspace-migration-136-repair-stale-fireworks-kimi-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-137-repair-retired-fireworks-minimax-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-146-repair-retired-fireworks-deepseek-flash-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-147-rename-colliding-backup-profile-names.test.ts +1 -1
- package/src/__tests__/workspace-migration-151-repair-renamed-fireworks-deepseek-pro-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-152-repair-retired-fireworks-minimax-m2p7-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-159-rename-colliding-jev-profile-name.test.ts +1 -1
- package/src/__tests__/workspace-migration-160-repair-retired-fireworks-model-ids.test.ts +1 -1
- package/src/__tests__/workspace-migration-161-repair-retired-fireworks-glm-5p2-model-id.test.ts +1 -1
- package/src/api/events/cloud-disconnected.ts +21 -0
- package/src/api/events/host-bash.ts +1 -1
- package/src/api/events/host-cu.ts +1 -1
- package/src/api/events/host-file.ts +1 -1
- package/src/api/events/notification-intent.ts +1 -1
- package/src/api/events/{show-platform-login.ts → show-cloud-login.ts} +3 -5
- package/src/api/index.ts +11 -11
- package/src/api/responses/home.ts +1 -1
- package/src/api/surfaces.ts +4 -4
- package/src/approvals/guardian-request-resolvers.ts +2 -2
- package/src/avatar/accent-backfill.ts +1 -1
- package/src/avatar/identity-avatar.ts +1 -1
- package/src/avatar/notification-avatar.test.ts +2 -2
- package/src/avatar/notification-avatar.ts +2 -2
- package/src/avatar/resvg-lazy.test.ts +1 -1
- package/src/avatar/resvg-lazy.ts +3 -3
- package/src/avatar/sync-avatar.test.ts +76 -76
- package/src/avatar/sync-avatar.ts +15 -15
- package/src/avatar/traits-png-sync.ts +1 -1
- package/src/background-wake/background-wake-routes.test.ts +39 -39
- package/src/background-wake/{platform-client.test.ts → cloud-client.test.ts} +11 -11
- package/src/background-wake/{platform-client.ts → cloud-client.ts} +14 -14
- package/src/background-wake/publisher.ts +4 -4
- package/src/background-wake/wake-intent-hooks.test.ts +3 -3
- package/src/calls/__tests__/call-controller.test.ts +2 -2
- package/src/calls/__tests__/voice-session-bridge.test.ts +1 -1
- package/src/calls/call-domain.ts +1 -1
- package/src/calls/resolve-call-tts-provider.ts +6 -6
- package/src/calls/telephony-credential-preflight.ts +3 -3
- package/src/calls/telephony-tts-capability.ts +5 -6
- package/src/calls/tts-call-strategy.ts +1 -1
- package/src/calls/voice-escalation-judge.ts +1 -1
- package/src/calls/voice-ingress-preflight.ts +4 -4
- package/src/cli/bundled-modules.ts +1 -1
- package/src/cli/commands/__tests__/apps.test.ts +18 -53
- package/src/cli/commands/__tests__/plugins.test.ts +13 -13
- package/src/cli/commands/__tests__/tts.test.ts +1 -1
- package/src/cli/commands/auth.help.ts +3 -3
- package/src/cli/commands/auth.ts +2 -4
- package/src/cli/commands/browser.help.ts +2 -2
- package/src/cli/commands/channels/index.help.ts +2 -2
- package/src/cli/commands/channels/index.ts +1 -1
- package/src/cli/commands/channels/send.ts +1 -1
- package/src/cli/commands/cloud/__tests__/connect.test.ts +1 -1
- package/src/cli/commands/cloud/__tests__/disconnect.test.ts +3 -4
- package/src/cli/commands/cloud/connect.ts +2 -2
- package/src/cli/commands/cloud/credits-format.ts +1 -1
- package/src/cli/commands/cloud/index.help.ts +35 -35
- package/src/cli/commands/config.ts +1 -1
- package/src/cli/commands/credentials.ts +10 -12
- package/src/cli/commands/domain.ts +1 -1
- package/src/cli/commands/email.help.ts +1 -1
- package/src/cli/commands/email.ts +2 -2
- package/src/cli/commands/gateway.help.ts +1 -1
- package/src/cli/commands/gateway.ts +1 -1
- package/src/cli/commands/image-generation.help.ts +1 -1
- package/src/cli/commands/inference-providers.ts +1 -1
- package/src/cli/commands/inference.help.ts +2 -2
- package/src/cli/commands/memory/index.help.ts +1 -1
- package/src/cli/commands/oauth/connect.test.ts +2 -2
- package/src/cli/commands/oauth/connect.ts +1 -1
- package/src/cli/commands/oauth/index.help.ts +5 -5
- package/src/cli/commands/oauth/providers.ts +2 -2
- package/src/cli/commands/oauth/shared.ts +3 -3
- package/src/cli/commands/plugins.help.ts +2 -3
- package/src/cli/commands/plugins.ts +5 -5
- package/src/cli/commands/roadmap.help.ts +1 -1
- package/src/cli/commands/telemetry.help.ts +2 -2
- package/src/cli/commands/telemetry.ts +2 -2
- package/src/cli/commands/tts.help.ts +3 -3
- package/src/cli/commands/webhooks.help.ts +9 -9
- package/src/cli/commands/webhooks.ts +1 -1
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +8 -8
- package/src/cli/lib/__tests__/{install-from-platform.test.ts → install-from-cloud.test.ts} +54 -54
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +18 -18
- package/src/cli/lib/__tests__/{plugin-catalog-platform.test.ts → plugin-catalog-cloud.test.ts} +2 -2
- package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +1 -1
- package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +9 -9
- package/src/cli/lib/__tests__/plugin-details.test.ts +10 -10
- package/src/cli/lib/__tests__/plugins-install-offline.test.ts +24 -24
- package/src/cli/lib/bundled-marketplace.json +1 -1
- package/src/cli/lib/inspect-plugin.ts +2 -2
- package/src/cli/lib/{install-from-platform.ts → install-from-cloud.ts} +29 -29
- package/src/cli/lib/install-from-github.ts +4 -4
- package/src/cli/lib/plugin-catalog-cache.ts +7 -7
- package/src/cli/lib/{plugin-catalog-platform.ts → plugin-catalog-cloud.ts} +6 -6
- package/src/cli/lib/plugin-catalog-local.ts +2 -2
- package/src/cli/lib/publish-plugin.ts +9 -10
- package/src/cli/lib/search-plugins.ts +2 -2
- package/src/{platform → cloud}/client.test.ts +85 -86
- package/src/{platform → cloud}/client.ts +38 -46
- package/src/{platform/platform-patch-queue.test.ts → cloud/cloud-patch-queue.test.ts} +6 -9
- package/src/{platform/platform-patch-queue.ts → cloud/cloud-patch-queue.ts} +11 -11
- package/src/{platform/managed-speech.test.ts → cloud/cloud-speech.test.ts} +19 -19
- package/src/{platform/managed-speech.ts → cloud/cloud-speech.ts} +41 -41
- package/src/{platform → cloud}/consent-cache.test.ts +5 -5
- package/src/{platform → cloud}/consent-cache.ts +8 -8
- package/src/cloud/feature-gate.ts +8 -0
- package/src/{platform → cloud}/sync-identity.test.ts +4 -4
- package/src/{platform → cloud}/sync-identity.ts +6 -6
- package/src/config/__tests__/{platform-identity.test.ts → cloud-identity.test.ts} +54 -56
- package/src/config/__tests__/{platform-rehydration.test.ts → cloud-rehydration.test.ts} +47 -80
- package/src/config/__tests__/default-profile-catalog.test.ts +12 -12
- package/src/config/__tests__/default-provider.test.ts +4 -4
- package/src/config/__tests__/deployment-context-defaults.test.ts +23 -23
- package/src/config/__tests__/{jev-managed-profile.test.ts → jev-cloud-profile.test.ts} +3 -5
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +2 -2
- package/src/config/__tests__/loader-last-known-good.test.ts +6 -6
- package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +2 -2
- package/src/config/__tests__/profile-materialization.test.ts +7 -7
- package/src/config/__tests__/seed-default-provider.test.ts +17 -17
- package/src/config/__tests__/sync-gated-profiles.test.ts +20 -20
- package/src/config/__tests__/webhook-routing.test.ts +51 -51
- package/src/config/bundled-skills/computer-use/TOOLS.json +12 -12
- package/src/config/bundled-skills/messaging/SKILL.md +8 -8
- package/src/config/bundled-skills/messaging/TOOLS.json +2 -2
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +1 -1
- package/src/config/bundled-skills/messaging/tools/shared.ts +1 -1
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +2 -2
- package/src/config/bundled-skills/settings/TOOLS.json +3 -3
- package/src/config/bundled-skills/settings/tools/shared.ts +1 -1
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +12 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +3 -3
- package/src/config/bundled-skills/skill-management/TOOLS.json +8 -8
- package/src/config/bundled-skills/skill-management/tools/{delete-managed.ts → delete-cloud.ts} +2 -2
- package/src/config/bundled-skills/skill-management/tools/{scaffold-managed.ts → scaffold-cloud.ts} +2 -2
- package/src/config/call-site-defaults.ts +6 -6
- package/src/config/{platform-identity.ts → cloud-identity.ts} +39 -42
- package/src/config/cloud-rehydration.ts +35 -0
- package/src/config/{managed-speech-defaults.ts → cloud-speech-defaults.ts} +13 -13
- package/src/config/default-profile-catalog.ts +36 -38
- package/src/config/default-profile-names.ts +11 -11
- package/src/config/default-provider-resolution.ts +2 -2
- package/src/config/default-provider.ts +1 -1
- package/src/config/env-registry.ts +23 -21
- package/src/config/env.ts +33 -46
- package/src/config/feature-flag-registry.json +5 -5
- package/src/config/inference-profile-validation.ts +1 -1
- package/src/config/llm-resolver.ts +9 -10
- package/src/config/loader.ts +33 -17
- package/src/config/profile-materialization.ts +8 -8
- package/src/config/profile-text-generation.test.ts +1 -1
- package/src/config/sanitize-for-transfer.ts +1 -1
- package/src/config/schema.ts +6 -6
- package/src/config/schemas/__tests__/stt.test.ts +2 -2
- package/src/config/schemas/call-site-catalog.ts +1 -1
- package/src/config/schemas/channels.ts +8 -0
- package/src/config/schemas/{platform.ts → cloud.ts} +7 -6
- package/src/config/schemas/host-browser.ts +1 -0
- package/src/config/schemas/ingress.ts +1 -12
- package/src/config/schemas/llm.ts +45 -36
- package/src/config/schemas/memory-lifecycle.ts +11 -1
- package/src/config/schemas/services.ts +4 -4
- package/src/config/schemas/stt.ts +3 -3
- package/src/config/schemas/tts.ts +10 -5
- package/src/config/schemas/voice.ts +1 -1
- package/src/config/seed-inference-profiles.ts +19 -19
- package/src/config/skill-state.ts +2 -2
- package/src/config/skills.ts +4 -4
- package/src/config/sync-gated-profiles.ts +8 -8
- package/src/config/webhook-routing.ts +19 -19
- package/src/contacts/contacts-write.ts +1 -1
- package/src/credential-execution/ces-runtime.ts +6 -6
- package/src/credential-execution/{managed-catalog.ts → cloud-catalog.ts} +24 -24
- package/src/credential-execution/prompted-credential.ts +6 -18
- package/src/credential-health/credential-health-service.ts +61 -76
- package/src/daemon/__tests__/can-spawn-subagents.test.ts +1 -1
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +4 -4
- package/src/daemon/config-watcher.ts +2 -2
- package/src/daemon/conversation-agent-loop.ts +9 -9
- package/src/daemon/conversation-error.ts +36 -36
- package/src/daemon/conversation-skill-tools.ts +7 -7
- package/src/daemon/conversation-surfaces.ts +1 -1
- package/src/daemon/conversation-tool-setup.ts +2 -2
- package/src/daemon/conversation-turn-finalize.ts +1 -1
- package/src/daemon/conversation-workspace.ts +1 -1
- package/src/daemon/conversation.ts +1 -1
- package/src/daemon/credential-transcript-scrub.ts +21 -35
- package/src/daemon/daemon-readiness.ts +1 -1
- package/src/daemon/event-loop-watchdog.ts +2 -2
- package/src/daemon/handlers/config-ingress.ts +9 -9
- package/src/daemon/handlers/config-telegram.ts +6 -6
- package/src/daemon/handlers/skills.ts +20 -20
- package/src/daemon/host-cu-proxy.ts +1 -1
- package/src/daemon/lifecycle.ts +19 -19
- package/src/daemon/parse-actual-tokens-from-error.ts +3 -3
- package/src/daemon/providers-setup.ts +6 -6
- package/src/daemon/resource-pressure-guard-lifecycle.ts +1 -1
- package/src/daemon/resource-pressure-guard.ts +6 -6
- package/src/daemon/shutdown-handlers.ts +1 -1
- package/src/daemon/sqlite-corruption-watchdog.ts +3 -3
- package/src/daemon/trust-context.ts +1 -1
- package/src/desktop/desktop-automation-lease.ts +1 -1
- package/src/desktop/desktop-browser-endpoint.ts +2 -4
- package/src/desktop/desktop-computer-use-routing.test.ts +6 -6
- package/src/desktop/desktop-stream-bridge.test.ts +4 -4
- package/src/desktop/desktop-stream-bridge.ts +1 -1
- package/src/desktop/{virtual-desktop-platform.test.ts → virtual-desktop-cloud.test.ts} +6 -6
- package/src/desktop/virtual-desktop-feature.ts +7 -7
- package/src/email/byo-email-credential.ts +1 -1
- package/src/email/registered-inbox.test.ts +16 -16
- package/src/email/registered-inbox.ts +20 -20
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/hooks/hook-loader.ts +2 -2
- package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
- package/src/inbound/__tests__/tunnel-probe.test.ts +8 -8
- package/src/inbound/{platform-callback-registration.ts → cloud-callback-registration.ts} +49 -60
- package/src/inbound/oauth-callback-url.ts +6 -6
- package/src/inbound/pod-webhook-claim.ts +2 -2
- package/src/inbound/public-ingress-urls.ts +3 -3
- package/src/inbound/tunnel-probe.ts +21 -15
- package/src/inbound/tunnel-webhooks-gate.ts +3 -3
- package/src/ipc/__tests__/db-readiness-ipc-gate.test.ts +1 -1
- package/src/ipc/__tests__/email-ipc.test.ts +8 -8
- package/src/ipc/gateway-client.test.ts +55 -59
- package/src/ipc/gateway-flag-listener.ts +3 -3
- package/src/ipc/routes/db-proxy.ts +1 -1
- package/src/live-voice/__tests__/live-activity-reporter.test.ts +2 -2
- package/src/live-voice/__tests__/{live-voice-managed-speech-fallback.test.ts → live-voice-cloud-speech-fallback.test.ts} +15 -15
- package/src/live-voice/__tests__/live-voice-credential-preflight.test.ts +7 -7
- package/src/live-voice/__tests__/live-voice-stt.test.ts +1 -1
- package/src/live-voice/live-activity-reporter.ts +7 -7
- package/src/live-voice/live-voice-credential-preflight.ts +6 -6
- package/src/live-voice/live-voice-session.ts +3 -3
- package/src/live-voice/live-voice-tts.ts +1 -1
- package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +4 -4
- package/src/mcp/__tests__/mcp-oauth-provider.test.ts +1 -1
- package/src/mcp/mcp-oauth-provider.ts +2 -2
- package/src/media/gemini-image-service.ts +11 -13
- package/src/media/image-credentials.ts +9 -9
- package/src/media/openai-image-service.ts +1 -1
- package/src/media/types.ts +3 -3
- package/src/messaging/providers/channel-transport.ts +1 -1
- package/src/messaging/providers/discord/transport.ts +1 -1
- package/src/messaging/providers/gmail/adapter.ts +1 -1
- package/src/messaging/providers/gmail/client.ts +4 -4
- package/src/messaging/providers/outlook/adapter.ts +1 -1
- package/src/messaging/providers/slack/adapter.ts +1 -1
- package/src/messaging/providers/slack/transport.ts +1 -1
- package/src/messaging/providers/telegram-bot/transport.ts +1 -1
- package/src/monitoring/db-integrity-check.ts +1 -1
- package/src/monitoring/db-integrity-sample.ts +2 -2
- package/src/monitoring/mount-watch.ts +1 -1
- package/src/monitoring/oom-kill-reporter.ts +1 -1
- package/src/monitoring/worker.ts +5 -5
- package/src/notifications/README.md +2 -2
- package/src/notifications/__tests__/broadcaster.test.ts +9 -9
- package/src/notifications/__tests__/completion-policy.test.ts +1 -1
- package/src/notifications/__tests__/emit-signal-pipeline-failure.test.ts +4 -4
- package/src/notifications/activity-failed-dedupe.ts +1 -1
- package/src/notifications/adapters/{platform.ts → cloud.ts} +8 -8
- package/src/notifications/broadcaster.ts +10 -10
- package/src/notifications/decision-engine.ts +1 -1
- package/src/notifications/destination-resolver.ts +1 -1
- package/src/notifications/emit-signal.ts +6 -6
- package/src/notifications/types.ts +2 -2
- package/src/oauth/__tests__/identity-verifier.test.ts +1 -1
- package/src/oauth/__tests__/{seed-providers-managed.test.ts → seed-providers-cloud.test.ts} +13 -13
- package/src/oauth/byo-connection.test.ts +2 -2
- package/src/oauth/{platform-connection.test.ts → cloud-connection.test.ts} +41 -43
- package/src/oauth/{platform-connection.ts → cloud-connection.ts} +19 -19
- package/src/oauth/connection-resolver.test.ts +59 -61
- package/src/oauth/connection-resolver.ts +22 -22
- package/src/oauth/connection.ts +1 -1
- package/src/oauth/oauth-store.ts +8 -8
- package/src/oauth/provider-serializer.ts +4 -4
- package/src/oauth/revoke.ts +1 -1
- package/src/oauth/seed-providers.ts +32 -32
- package/src/permissions/approval-provenance.ts +1 -1
- package/src/permissions/checker.test.ts +18 -16
- package/src/permissions/checker.ts +3 -3
- package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
- package/src/persistence/embeddings/embedding-backend.test.ts +16 -16
- package/src/persistence/embeddings/embedding-backend.ts +13 -13
- package/src/persistence/embeddings/embedding-gemini.test.ts +9 -12
- package/src/persistence/embeddings/embedding-gemini.ts +11 -11
- package/src/persistence/embeddings/embedding-runtime-manager.ts +2 -2
- package/src/persistence/jobs-store.ts +1 -1
- package/src/persistence/lifecycle-events-store.ts +1 -1
- package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
- package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
- package/src/persistence/migrations/224-oauth-providers-managed-service-is-paid.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.ts +2 -2
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.ts +1 -1
- package/src/persistence/migrations/351-schedule-skill-script-handoff.ts +1 -1
- package/src/persistence/migrations/361-normalize-managed-connection-rows.test.ts +3 -3
- package/src/persistence/migrations/361-normalize-managed-connection-rows.ts +7 -7
- package/src/persistence/migrations/__tests__/319-remove-legacy-managed-connections.test.ts +2 -2
- package/src/persistence/schema/oauth.ts +1 -1
- package/src/plugin-api/index.ts +4 -4
- package/src/plugin-api/model-profiles.test.ts +1 -1
- package/src/plugin-api/model-profiles.ts +1 -1
- package/src/plugin-api/transcription-session.ts +1 -1
- package/src/plugin-api/vision-support.test.ts +1 -1
- package/src/plugin-api/webhook-url.ts +12 -12
- package/src/plugins/__tests__/source-fingerprint.test.ts +1 -1
- package/src/plugins/defaults/{platform-hosted → cloud-hosted}/__tests__/reengage.test.ts +5 -6
- package/src/plugins/defaults/cloud-hosted/package.json +14 -0
- package/src/plugins/defaults/{platform-hosted → cloud-hosted}/routes/reengage.ts +3 -3
- package/src/plugins/defaults/index.ts +6 -6
- package/src/plugins/defaults/main.ts +5 -5
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +5 -5
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-prompt.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-provider-path.test.ts +1 -1
- package/src/plugins/defaults/memory/config.ts +4 -4
- package/src/plugins/defaults/memory/memory-retrospective-constants.ts +2 -2
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +7 -7
- package/src/plugins/defaults/memory/memory-retrospective-prompt.ts +5 -5
- package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +2 -2
- package/src/plugins/defaults/memory/src/__tests__/memory-v2-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/boot-maintenance.test.ts +20 -20
- package/src/plugins/defaults/memory/substrate/__tests__/cli-command-store.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/skill-store.test.ts +3 -3
- package/src/plugins/defaults/memory/substrate/boot-maintenance.ts +17 -17
- package/src/plugins/defaults/memory/substrate/cli-command-store.ts +2 -2
- package/src/plugins/defaults/memory/substrate/prompts/consolidation.ts +1 -1
- package/src/plugins/defaults/memory/substrate/skill-store.ts +4 -4
- package/src/plugins/defaults/memory/v3/__tests__/maintain-job.test.ts +3 -3
- package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +2 -2
- package/src/plugins/defaults/memory/v3/maintain-job.ts +10 -10
- package/src/plugins/defaults/memory/v3/orchestrate.ts +3 -3
- package/src/plugins/defaults/memory/worker.ts +5 -5
- package/src/plugins/defaults/workspace/injectors.ts +2 -2
- package/src/plugins/mtime-cache.ts +1 -1
- package/src/plugins/source-versions.ts +1 -1
- package/src/plugins/types.ts +1 -1
- package/src/prompts/__tests__/system-prompt.test.ts +1 -1
- package/src/prompts/normalize-onboarding.ts +1 -1
- package/src/prompts/persona-resolver.ts +1 -1
- package/src/prompts/templates/system-sections.ts +3 -3
- package/src/providers/__tests__/cadet-connection-routing.test.ts +7 -7
- package/src/providers/__tests__/cadet-mismatch-routing.test.ts +12 -12
- package/src/providers/__tests__/connection-model-compat.test.ts +2 -2
- package/src/providers/__tests__/dispatch-connection-routing.test.ts +10 -10
- package/src/providers/__tests__/inference.test.ts +2 -2
- package/src/providers/__tests__/preflight-resolved-config.test.ts +16 -16
- package/src/providers/__tests__/retry-callsite.test.ts +1 -1
- package/src/providers/__tests__/satellite-connection-routing.test.ts +4 -4
- package/src/providers/__tests__/search-provider-catalog.test.ts +2 -2
- package/src/providers/__tests__/voice-error-copy.test.ts +3 -3
- package/src/providers/anthropic/client.ts +1 -1
- package/src/providers/cadet/client.ts +1 -1
- package/src/providers/cadet-model-routing.test.ts +19 -19
- package/src/providers/cadet-model-routing.ts +23 -23
- package/src/providers/call-site-routing.ts +10 -10
- package/src/providers/{platform-proxy → cloud-proxy}/constants.ts +11 -11
- package/src/providers/{platform-proxy → cloud-proxy}/context.ts +26 -26
- package/src/providers/connection-resolution.ts +43 -43
- package/src/providers/fallback-breaker.ts +2 -2
- package/src/providers/fetch-provider-catalog.ts +3 -3
- package/src/providers/gemini/client.ts +5 -5
- package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +3 -3
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +8 -8
- package/src/providers/inference/__tests__/base-url-security.test.ts +4 -4
- package/src/providers/inference/adapter-factory.ts +35 -35
- package/src/providers/inference/auth.ts +10 -10
- package/src/providers/inference/backfill.ts +11 -11
- package/src/providers/inference/connection-availability.ts +24 -24
- package/src/providers/inference/connections.ts +18 -20
- package/src/providers/inference/profile-probe.ts +4 -4
- package/src/providers/inference/resolve-auth.ts +8 -8
- package/src/providers/jev/ask.test.ts +1 -1
- package/src/providers/jev/ask.ts +2 -2
- package/src/providers/model-catalog.ts +8 -9
- package/src/providers/openai/__tests__/api-error-normalization.test.ts +3 -3
- package/src/providers/openai/api-error-normalization.ts +2 -2
- package/src/providers/provider-availability.ts +4 -4
- package/src/providers/provider-env-vars.ts +1 -1
- package/src/providers/provider-secret-catalog.ts +1 -1
- package/src/providers/registry.ts +20 -20
- package/src/providers/retry.ts +26 -26
- package/src/providers/routing-identity.ts +10 -10
- package/src/providers/search-provider-catalog.ts +2 -2
- package/src/providers/speech-to-text/__tests__/{cadet-managed-realtime.test.ts → cadet-cloud-realtime.test.ts} +3 -3
- package/src/providers/speech-to-text/__tests__/{cadet-managed.test.ts → cadet-cloud.test.ts} +35 -35
- package/src/providers/speech-to-text/__tests__/deepgram-flux-realtime.test.ts +1 -1
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +27 -27
- package/src/providers/speech-to-text/{cadet-managed-flux-realtime.ts → cadet-cloud-flux-realtime.ts} +6 -8
- package/src/providers/speech-to-text/{cadet-managed-realtime.ts → cadet-cloud-realtime.ts} +3 -3
- package/src/providers/speech-to-text/{cadet-managed.ts → cadet-cloud.ts} +18 -20
- package/src/providers/speech-to-text/cadet-speech-relay-connection.ts +7 -7
- package/src/providers/speech-to-text/deepgram-flux-frames.ts +3 -3
- package/src/providers/speech-to-text/deepgram-flux-realtime.ts +4 -4
- package/src/providers/speech-to-text/provider-catalog.ts +3 -3
- package/src/providers/speech-to-text/resolve.ts +26 -28
- package/src/providers/together/client.ts +1 -1
- package/src/providers/types.ts +4 -4
- package/src/providers/voice-error-copy.ts +1 -1
- package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +10 -10
- package/src/runtime/agent-wake.ts +1 -1
- package/src/runtime/auth/__tests__/middleware.test.ts +1 -1
- package/src/runtime/auth/middleware.ts +1 -1
- package/src/runtime/auth/scopes.ts +1 -1
- package/src/runtime/capabilities.ts +1 -1
- package/src/runtime/channel-invite-transports/discord.ts +1 -1
- package/src/runtime/channel-invite-transports/email.ts +2 -2
- package/src/runtime/channel-readiness-service.ts +15 -13
- package/src/runtime/channel-reply-session.test.ts +1 -1
- package/src/runtime/channel-reply-session.ts +1 -1
- package/src/runtime/http-server.ts +4 -4
- package/src/runtime/introduction-policy.ts +4 -4
- package/src/runtime/migrations/__tests__/origin-mode.test.ts +14 -14
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +1 -1
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +3 -4
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge.test.ts +6 -7
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +1 -1
- package/src/runtime/migrations/migration-transport.ts +3 -3
- package/src/runtime/migrations/origin-mode.ts +6 -9
- package/src/runtime/migrations/vbundle-import-policy.ts +2 -2
- package/src/runtime/migrations/vbundle-importer.ts +4 -4
- package/src/runtime/migrations/vbundle-streaming-importer.ts +6 -6
- package/src/runtime/migrations/vbundle-validator.ts +1 -1
- package/src/runtime/routes/__tests__/{platform-credits-routes.test.ts → cloud-credits-routes.test.ts} +9 -9
- package/src/runtime/routes/__tests__/{platform-invoice-routes.test.ts → cloud-invoice-routes.test.ts} +13 -13
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +1 -1
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +26 -25
- package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +5 -5
- package/src/runtime/routes/__tests__/default-provider-routes.test.ts +10 -10
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +18 -18
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +18 -16
- package/src/runtime/routes/__tests__/inference-send-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/migration-cadet-metadata-reconcile.test.ts +5 -20
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -22
- package/src/runtime/routes/__tests__/oauth-proxy-routes.test.ts +27 -27
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +5 -5
- package/src/runtime/routes/__tests__/ps-routes.test.ts +5 -3
- package/src/runtime/routes/__tests__/roadmap-routes.test.ts +15 -15
- package/src/runtime/routes/__tests__/webhook-routes.test.ts +31 -31
- package/src/runtime/routes/app-management-routes.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +1 -1
- package/src/runtime/routes/auth-routes.ts +14 -14
- package/src/runtime/routes/avatar-routes.ts +0 -14
- package/src/runtime/routes/background-wake-routes.ts +4 -4
- package/src/runtime/routes/channel-availability-routes.ts +4 -4
- package/src/runtime/routes/client-routes.ts +5 -5
- package/src/runtime/routes/cloud-credentials.ts +45 -0
- package/src/runtime/routes/{platform-routes.ts → cloud-routes.ts} +83 -116
- package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +82 -282
- package/src/runtime/routes/credential-routes.ts +28 -30
- package/src/runtime/routes/default-provider-routes.ts +1 -1
- package/src/runtime/routes/desktop-setup-routes.test.ts +5 -5
- package/src/runtime/routes/desktop-setup-routes.ts +1 -1
- package/src/runtime/routes/domain-routes.ts +15 -21
- package/src/runtime/routes/email-routes.ts +13 -13
- package/src/runtime/routes/errors.ts +1 -1
- package/src/runtime/routes/gateway-status-routes.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +3 -3
- package/src/runtime/routes/inbound-message-handler.ts +1 -1
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +1 -1
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +1 -1
- package/src/runtime/routes/index.ts +1 -1
- package/src/runtime/routes/inference-profile-availability-guard.ts +5 -5
- package/src/runtime/routes/inference-profiles-routes.ts +11 -11
- package/src/runtime/routes/inference-provider-connection-routes.ts +24 -24
- package/src/runtime/routes/ingress-status-routes.ts +1 -1
- package/src/runtime/routes/integrations/a2a.ts +2 -2
- package/src/runtime/routes/integrations/twilio.ts +21 -35
- package/src/runtime/routes/internal-telemetry-routes.ts +2 -2
- package/src/runtime/routes/live-voice-routes.test.ts +4 -4
- package/src/runtime/routes/live-voice-routes.ts +6 -6
- package/src/runtime/routes/migration-routes.ts +34 -40
- package/src/runtime/routes/oauth-commands-routes.ts +31 -31
- package/src/runtime/routes/oauth-providers.ts +5 -5
- package/src/runtime/routes/oauth-proxy-passthrough.test.ts +1 -1
- package/src/runtime/routes/oauth-proxy-passthrough.ts +8 -8
- package/src/runtime/routes/oauth-proxy-routes.ts +15 -17
- package/src/runtime/routes/oauth-request-hints.test.ts +1 -1
- package/src/runtime/routes/oauth-request-hints.ts +1 -1
- package/src/runtime/routes/plugins-routes.ts +9 -9
- package/src/runtime/routes/profiler-routes.ts +1 -1
- package/src/runtime/routes/ps-routes.ts +4 -0
- package/src/runtime/routes/roadmap-routes.ts +18 -20
- package/src/runtime/routes/secret-routes.ts +29 -55
- package/src/runtime/routes/settings-routes.ts +18 -23
- package/src/runtime/routes/telemetry-routes.ts +4 -4
- package/src/runtime/routes/tts-routes.ts +4 -4
- package/src/runtime/routes/user-route-resolution.ts +1 -1
- package/src/runtime/routes/webhook-routes.ts +18 -18
- package/src/runtime/routes/workflow-routes.ts +5 -5
- package/src/runtime/sync/resource-sync-events.ts +2 -2
- package/src/runtime/verification-outbound-actions.ts +4 -4
- package/src/schedule/integration-status.ts +6 -6
- package/src/schedule/run-script.ts +1 -1
- package/src/schedule/schedule-timezone.ts +1 -1
- package/src/schedule/worker.ts +5 -5
- package/src/security/auth-fallback-events-store.ts +1 -1
- package/src/security/oauth2.ts +4 -4
- package/src/skills/available-skills.ts +4 -4
- package/src/skills/catalog-files.ts +8 -8
- package/src/skills/catalog-install.ts +12 -12
- package/src/skills/categories-cache.ts +3 -3
- package/src/skills/clawhub.ts +1 -1
- package/src/skills/{platform-compatibility.test.ts → cloud-compatibility.test.ts} +7 -7
- package/src/skills/{platform-compatibility.ts → cloud-compatibility.ts} +2 -4
- package/src/skills/{managed-store.ts → cloud-store.ts} +21 -23
- package/src/skills/inline-command-runner.ts +1 -1
- package/src/skills/install-meta.ts +1 -1
- package/src/skills/path-classifier.ts +4 -4
- package/src/skills/skill-history.ts +4 -4
- package/src/skills/skillssh-registry.ts +1 -1
- package/src/stt/__tests__/daemon-batch-transcriber.test.ts +1 -1
- package/src/stt/daemon-batch-transcriber.ts +7 -7
- package/src/stt/types.ts +3 -3
- package/src/subagent/manager.ts +15 -15
- package/src/subagent/types.ts +1 -1
- package/src/telegram/__tests__/webhook-health.test.ts +16 -16
- package/src/telegram/webhook-health.ts +10 -10
- package/src/telemetry/__tests__/config-setting-events-store.test.ts +1 -1
- package/src/telemetry/__tests__/outbox-test-harness.ts +2 -2
- package/src/telemetry/config-setting-events-store.ts +1 -1
- package/src/telemetry/config-setting-snapshot.ts +1 -1
- package/src/telemetry/memory-corpus-size.ts +1 -1
- package/src/telemetry/memory-tier-reporter.test.ts +2 -2
- package/src/telemetry/memory-tier-reporter.ts +3 -3
- package/src/telemetry/telemetry-event-sources.test.ts +2 -2
- package/src/telemetry/telemetry-event-sources.ts +9 -9
- package/src/telemetry/telemetry-events-outbox.ts +2 -2
- package/src/telemetry/telemetry-wire-validation.test.ts +1 -1
- package/src/telemetry/telemetry-wire-validation.ts +3 -3
- package/src/telemetry/telemetry-wire.generated.ts +1 -1
- package/src/telemetry/tool-audit.ts +1 -1
- package/src/telemetry/tool-executed-events-store.test.ts +1 -1
- package/src/telemetry/trace-collection-policy.ts +4 -4
- package/src/telemetry/turn-events-store.ts +1 -1
- package/src/telemetry/turn-outcome.ts +1 -1
- package/src/telemetry/turn-trace-store.ts +2 -2
- package/src/telemetry/types.test.ts +1 -1
- package/src/telemetry/types.ts +19 -19
- package/src/telemetry/usage-telemetry-reporter.test.ts +42 -42
- package/src/telemetry/usage-telemetry-reporter.ts +17 -17
- package/src/telemetry/watchdog-direct-emit.test.ts +9 -9
- package/src/telemetry/watchdog-direct-emit.ts +10 -10
- package/src/tools/__tests__/side-effect-abort-guard.test.ts +2 -2
- package/src/tools/browser/cdp-client/factory.ts +1 -1
- package/src/tools/computer-use/target.ts +2 -2
- package/src/tools/credentials/store.ts +6 -15
- package/src/tools/network/__tests__/{managed-search-proxy.test.ts → cloud-search-proxy.test.ts} +20 -20
- package/src/tools/network/__tests__/web-search.test.ts +14 -14
- package/src/tools/network/{managed-search-proxy.ts → cloud-search-proxy.ts} +13 -13
- package/src/tools/network/web-search.ts +9 -9
- package/src/tools/permission-checker.ts +2 -2
- package/src/tools/shared/input-misuse.ts +1 -1
- package/src/tools/shared/input-repairs.ts +4 -4
- package/src/tools/skills/{delete-managed.ts → delete-cloud.ts} +4 -4
- package/src/tools/skills/find-similar-skills.test.ts +7 -7
- package/src/tools/skills/find-similar-skills.ts +15 -15
- package/src/tools/skills/load.ts +6 -6
- package/src/tools/skills/{scaffold-managed.ts → scaffold-cloud.ts} +16 -16
- package/src/tools/skills/skill-script-runner.ts +2 -2
- package/src/tools/terminal/safe-env.ts +3 -3
- package/src/tools/tool-types.ts +2 -2
- package/src/tools/types.ts +2 -2
- package/src/tools/ui-surface/surface-shape-docs.ts +2 -2
- package/src/tools/workflows/manage-workflows.ts +1 -1
- package/src/tools/workspace-tools/loader.ts +1 -1
- package/src/tts/__tests__/cadet-provider.test.ts +5 -5
- package/src/tts/provider-catalog.ts +1 -1
- package/src/tts/providers/cadet-provider.ts +23 -23
- package/src/tts/providers/cadet-tts-socket.ts +2 -2
- package/src/tts/tts-config-resolver.ts +1 -1
- package/src/tts/tts-voice-field.ts +3 -3
- package/src/usage/subagent-attribution.ts +1 -1
- package/src/util/__tests__/process-table.test.ts +47 -0
- package/src/util/canonicalize-identity.ts +1 -1
- package/src/util/cgroup-cpu.ts +5 -5
- package/src/util/cgroup-memory.ts +2 -2
- package/src/util/container-cpu-sampler.ts +4 -4
- package/src/util/disk-usage.ts +4 -4
- package/src/util/errors.ts +3 -3
- package/src/util/oom-priority.ts +1 -1
- package/src/util/platform.ts +5 -5
- package/src/util/process-table.ts +39 -5
- package/src/util/provider-error-patterns.ts +2 -2
- package/src/watch/__tests__/watch-retro.test.ts +2 -2
- package/src/watch/watch-retro.ts +1 -1
- package/src/watcher/__tests__/telemetry.test.ts +2 -2
- package/src/watcher/telemetry.ts +1 -1
- package/src/windows-compiled-cli.ts +1 -1
- package/src/workspace/adaptive-thinking-repair.ts +4 -4
- package/src/workspace/byok-default-profile-ensure.ts +7 -7
- package/src/workspace/git-service.ts +2 -2
- package/src/workspace/migrations/006-services-config.ts +1 -1
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +1 -1
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +1 -1
- package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +1 -1
- package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +4 -4
- package/src/workspace/migrations/087-memory-router-balanced-profile.ts +3 -3
- package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +4 -4
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +5 -5
- package/src/workspace/migrations/100-upgrade-quality-profile-to-fable-5.ts +4 -4
- package/src/workspace/migrations/101-upgrade-balanced-economy-to-minimax-m3.ts +4 -4
- package/src/workspace/migrations/103-upgrade-quality-profile-to-opus-4-8.ts +5 -5
- package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +1 -1
- package/src/workspace/migrations/106-drop-collect-usage-data.ts +1 -1
- package/src/workspace/migrations/108-drop-balanced-economy-profile.ts +4 -4
- package/src/workspace/migrations/109-swap-quality-profile-to-glm-5p2.ts +11 -11
- package/src/workspace/migrations/110-flip-balanced-profile-to-together.ts +6 -6
- package/src/workspace/migrations/113-swap-balanced-profile-to-glm-5p2.ts +5 -5
- package/src/workspace/migrations/114-swap-quality-profile-to-opus.ts +4 -4
- package/src/workspace/migrations/115-drop-frontier-profile.ts +5 -5
- package/src/workspace/migrations/123-swap-quality-profile-to-fable.ts +5 -5
- package/src/workspace/migrations/125-repoint-managed-connections-to-cadet.ts +3 -3
- package/src/workspace/migrations/126-strip-managed-profile-bodies.ts +2 -2
- package/src/workspace/migrations/127-backfill-default-provider.ts +4 -4
- package/src/workspace/migrations/130-speech-mode-to-provider.ts +4 -4
- package/src/workspace/migrations/131-drop-web-fetch-mode.ts +1 -1
- package/src/workspace/migrations/132-web-search-mode-to-provider.ts +6 -6
- package/src/workspace/migrations/133-collapse-provider-connections.ts +3 -3
- package/src/workspace/migrations/134-image-generation-mode-to-provider.ts +4 -4
- package/src/workspace/migrations/136-repair-stale-fireworks-kimi-model-id.ts +2 -2
- package/src/workspace/migrations/137-repair-retired-fireworks-minimax-model-id.ts +2 -2
- package/src/workspace/migrations/139-clear-renamed-cost-profile-label.ts +2 -2
- package/src/workspace/migrations/141-stt-english-default-to-multilingual.ts +4 -4
- package/src/workspace/migrations/144-convert-stranded-subscription-openai-profiles.ts +1 -1
- package/src/workspace/migrations/145-collapse-profile-bindings-to-entries.ts +2 -2
- package/src/workspace/migrations/146-repair-retired-fireworks-deepseek-flash-model-id.ts +2 -2
- package/src/workspace/migrations/148-strip-unsupported-fallback-profiles.ts +2 -2
- package/src/workspace/migrations/150-stt-flux-provider-to-model-family.ts +1 -1
- package/src/workspace/migrations/151-repair-renamed-fireworks-deepseek-pro-model-id.ts +2 -2
- package/src/workspace/migrations/152-repair-retired-fireworks-minimax-m2p7-model-id.ts +2 -2
- package/src/workspace/migrations/159-rename-colliding-jev-profile-name.ts +2 -2
- package/src/workspace/migrations/160-repair-retired-fireworks-model-ids.ts +2 -2
- package/src/workspace/migrations/161-repair-retired-fireworks-glm-5p2-model-id.ts +2 -2
- package/src/workspace/migrations/__tests__/141-stt-english-default-to-multilingual.test.ts +1 -1
- package/src/workspace/migrations/__tests__/150-stt-flux-provider-to-model-family.test.ts +1 -1
- package/src/workspace/migrations/registry.ts +6 -6
- package/src/workspace/top-level-renderer.ts +1 -1
- package/src/workspace/turn-commit.ts +2 -2
- package/src/__tests__/config-loader-platform-defaults.test.ts +0 -606
- package/src/__tests__/mock-gateway-ipc.ts +0 -260
- package/src/api/events/platform-disconnected.ts +0 -21
- package/src/config/platform-rehydration.ts +0 -60
- package/src/platform/feature-gate.ts +0 -8
- package/src/plugins/defaults/platform-hosted/package.json +0 -14
- package/src/runtime/routes/platform-managed-credentials.ts +0 -50
- /package/src/__tests__/{gateway-client-managed-outbound.test.ts → gateway-client-cloud-outbound.test.ts} +0 -0
- /package/src/__tests__/{secure-keys-managed-failover.test.ts → secure-keys-cloud-failover.test.ts} +0 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* When IS_CLOUD=true and no config.json exists yet, loadConfig() must
|
|
3
|
+
* write all managed-capable service modes as "managed" instead of the
|
|
4
|
+
* per-service schema default. When IS_CLOUD is absent/false, or when
|
|
5
|
+
* config.json already exists, the Zod schema defaults and existing values
|
|
6
|
+
* are preserved unchanged — note that `google-oauth` and `notion-oauth`
|
|
7
|
+
* default to "managed" at the schema level (per JARVIS-966), while every
|
|
8
|
+
* other managed-capable service defaults to "your-own".
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
existsSync,
|
|
13
|
+
mkdirSync,
|
|
14
|
+
readdirSync,
|
|
15
|
+
readFileSync,
|
|
16
|
+
rmSync,
|
|
17
|
+
writeFileSync,
|
|
18
|
+
} from "node:fs";
|
|
19
|
+
import { join } from "node:path";
|
|
20
|
+
import {
|
|
21
|
+
afterAll,
|
|
22
|
+
afterEach,
|
|
23
|
+
beforeEach,
|
|
24
|
+
describe,
|
|
25
|
+
expect,
|
|
26
|
+
mock,
|
|
27
|
+
test,
|
|
28
|
+
} from "bun:test";
|
|
29
|
+
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Mocks — declared before imports that depend on platform/logger
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
|
|
34
|
+
const WORKSPACE_DIR = process.env.CADET_WORKSPACE_DIR!;
|
|
35
|
+
const CONFIG_PATH = join(WORKSPACE_DIR, "config.json");
|
|
36
|
+
|
|
37
|
+
afterAll(() => {
|
|
38
|
+
mock.restore();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
import { invalidateConfigCache, loadConfig } from "../config/loader.js";
|
|
42
|
+
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Helpers
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
|
|
47
|
+
function ensureTestDir(): void {
|
|
48
|
+
const dirs = [
|
|
49
|
+
WORKSPACE_DIR,
|
|
50
|
+
join(WORKSPACE_DIR, "data"),
|
|
51
|
+
join(WORKSPACE_DIR, "data", "memory"),
|
|
52
|
+
join(WORKSPACE_DIR, "data", "memory", "knowledge"),
|
|
53
|
+
join(WORKSPACE_DIR, "data", "logs"),
|
|
54
|
+
];
|
|
55
|
+
for (const dir of dirs) {
|
|
56
|
+
if (!existsSync(dir)) {
|
|
57
|
+
mkdirSync(dir, { recursive: true });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function resetWorkspace(): void {
|
|
63
|
+
if (existsSync(WORKSPACE_DIR)) {
|
|
64
|
+
for (const name of readdirSync(WORKSPACE_DIR)) {
|
|
65
|
+
rmSync(join(WORKSPACE_DIR, name), { recursive: true, force: true });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
ensureTestDir();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function readConfig(): Record<string, unknown> {
|
|
72
|
+
return JSON.parse(readFileSync(CONFIG_PATH, "utf-8"));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// When IS_CLOUD=true, every managed-capable service defaults to "managed".
|
|
76
|
+
// Without IS_CLOUD, services split by Zod schema default: google/notion-oauth
|
|
77
|
+
// resolve to "managed" (per JARVIS-966), the rest resolve to "your-own".
|
|
78
|
+
// web-search is deliberately absent: `provider` is its only axis, so the
|
|
79
|
+
// platform context injects no mode for it. image-generation is also absent:
|
|
80
|
+
// its managed axis is the provider ("cadet" proxies through the cloud),
|
|
81
|
+
// so the cloud context fills `provider: "cadet"` rather than a mode.
|
|
82
|
+
const MANAGED_SERVICES = [
|
|
83
|
+
"google-oauth",
|
|
84
|
+
"outlook-oauth",
|
|
85
|
+
"linear-oauth",
|
|
86
|
+
"github-oauth",
|
|
87
|
+
"notion-oauth",
|
|
88
|
+
] as const;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Services whose Zod schema default is `"managed"` rather than `"your-own"`.
|
|
92
|
+
* For these, the fresh-write and in-memory paths produce `"managed"` even
|
|
93
|
+
* when IS_CLOUD is false/unset — the schema default applies regardless of
|
|
94
|
+
* deployment context. See `assistant/src/config/schemas/services.ts` and
|
|
95
|
+
* JARVIS-966: managed mode is the optimization target for new users on
|
|
96
|
+
* managed-capable infra, since the BYO flow requires a Google Cloud /
|
|
97
|
+
* Notion integration setup that most users never complete.
|
|
98
|
+
*/
|
|
99
|
+
const SCHEMA_MANAGED_DEFAULT_SERVICES = [
|
|
100
|
+
"google-oauth",
|
|
101
|
+
"notion-oauth",
|
|
102
|
+
] as const;
|
|
103
|
+
|
|
104
|
+
// web-search is absent from both lists: it carries no mode at all.
|
|
105
|
+
// image-generation and web-search are absent from both lists: they carry
|
|
106
|
+
// no mode at all.
|
|
107
|
+
const SCHEMA_YOUR_OWN_DEFAULT_SERVICES = [
|
|
108
|
+
"outlook-oauth",
|
|
109
|
+
"linear-oauth",
|
|
110
|
+
"github-oauth",
|
|
111
|
+
] as const;
|
|
112
|
+
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
// Tests
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
|
|
117
|
+
describe("cloud-managed config defaults", () => {
|
|
118
|
+
const originalIsPlatform = process.env.IS_CLOUD;
|
|
119
|
+
|
|
120
|
+
beforeEach(() => {
|
|
121
|
+
resetWorkspace();
|
|
122
|
+
invalidateConfigCache();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
afterEach(() => {
|
|
126
|
+
invalidateConfigCache();
|
|
127
|
+
// Restore env to its original value
|
|
128
|
+
if (originalIsPlatform === undefined) {
|
|
129
|
+
delete process.env.IS_CLOUD;
|
|
130
|
+
} else {
|
|
131
|
+
process.env.IS_CLOUD = originalIsPlatform;
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
test("IS_CLOUD=true, no config file → all 6 cloud service modes written as 'managed', image-generation provider written as 'cadet'", () => {
|
|
136
|
+
process.env.IS_CLOUD = "true";
|
|
137
|
+
|
|
138
|
+
loadConfig();
|
|
139
|
+
|
|
140
|
+
expect(existsSync(CONFIG_PATH)).toBe(true);
|
|
141
|
+
const written = readConfig() as { services?: Record<string, unknown> };
|
|
142
|
+
expect(written.services).toBeDefined();
|
|
143
|
+
const services = written.services!;
|
|
144
|
+
for (const svc of MANAGED_SERVICES) {
|
|
145
|
+
expect((services[svc] as { mode?: string })?.mode).toBe("managed");
|
|
146
|
+
}
|
|
147
|
+
expect((services["web-search"] as { provider?: string })?.provider).toBe(
|
|
148
|
+
"inference-provider-native",
|
|
149
|
+
);
|
|
150
|
+
// image-generation's managed axis is its provider: the cloud context
|
|
151
|
+
// fills "cadet" and never injects a cloud mode (the persisted mode is
|
|
152
|
+
// the schema default).
|
|
153
|
+
const imageGen = services["image-generation"] as {
|
|
154
|
+
provider?: string;
|
|
155
|
+
mode?: string;
|
|
156
|
+
};
|
|
157
|
+
expect(imageGen?.provider).toBe("cadet");
|
|
158
|
+
expect(imageGen?.mode).not.toBe("managed");
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test("IS_CLOUD=false, no config file → service modes follow schema defaults (your-own except google/notion-oauth which are managed)", () => {
|
|
162
|
+
process.env.IS_CLOUD = "false";
|
|
163
|
+
|
|
164
|
+
loadConfig();
|
|
165
|
+
|
|
166
|
+
expect(existsSync(CONFIG_PATH)).toBe(true);
|
|
167
|
+
const written = readConfig() as { services?: Record<string, unknown> };
|
|
168
|
+
expect(written.services).toBeDefined();
|
|
169
|
+
const services = written.services!;
|
|
170
|
+
for (const svc of SCHEMA_YOUR_OWN_DEFAULT_SERVICES) {
|
|
171
|
+
expect((services[svc] as { mode?: string })?.mode).toBe("your-own");
|
|
172
|
+
}
|
|
173
|
+
for (const svc of SCHEMA_MANAGED_DEFAULT_SERVICES) {
|
|
174
|
+
expect((services[svc] as { mode?: string })?.mode).toBe("managed");
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
test("IS_CLOUD unset, no config file → service modes follow schema defaults (your-own except google/notion-oauth which are managed)", () => {
|
|
179
|
+
delete process.env.IS_CLOUD;
|
|
180
|
+
|
|
181
|
+
loadConfig();
|
|
182
|
+
|
|
183
|
+
expect(existsSync(CONFIG_PATH)).toBe(true);
|
|
184
|
+
const written = readConfig() as { services?: Record<string, unknown> };
|
|
185
|
+
expect(written.services).toBeDefined();
|
|
186
|
+
const services = written.services!;
|
|
187
|
+
for (const svc of SCHEMA_YOUR_OWN_DEFAULT_SERVICES) {
|
|
188
|
+
expect((services[svc] as { mode?: string })?.mode).toBe("your-own");
|
|
189
|
+
}
|
|
190
|
+
for (const svc of SCHEMA_MANAGED_DEFAULT_SERVICES) {
|
|
191
|
+
expect((services[svc] as { mode?: string })?.mode).toBe("managed");
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
test("IS_CLOUD=true, config file already exists → existing service mode values are preserved", () => {
|
|
196
|
+
process.env.IS_CLOUD = "true";
|
|
197
|
+
|
|
198
|
+
// Write an existing config with image-generation mode explicitly set to "your-own"
|
|
199
|
+
writeFileSync(
|
|
200
|
+
CONFIG_PATH,
|
|
201
|
+
JSON.stringify(
|
|
202
|
+
{
|
|
203
|
+
services: {
|
|
204
|
+
"image-generation": { mode: "your-own" },
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
null,
|
|
208
|
+
2,
|
|
209
|
+
) + "\n",
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
const config = loadConfig();
|
|
213
|
+
|
|
214
|
+
const written = readConfig() as { services?: Record<string, unknown> };
|
|
215
|
+
expect(written.services).toBeDefined();
|
|
216
|
+
// The raw value must be preserved — backfill path, not fresh-write path.
|
|
217
|
+
// (Migration 134 rewrites this legacy shape at daemon startup; the loader
|
|
218
|
+
// itself must simply leave it alone.)
|
|
219
|
+
expect(
|
|
220
|
+
(written.services!["image-generation"] as { mode?: string })?.mode,
|
|
221
|
+
).toBe("your-own");
|
|
222
|
+
// The parsed config strips the legacy key and carries the filled
|
|
223
|
+
// provider; no mode survives the schema.
|
|
224
|
+
expect(config.services["image-generation"]).not.toHaveProperty("mode");
|
|
225
|
+
expect(config.services["image-generation"].provider).toBe("cadet");
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
test("IS_CLOUD=true, config file with explicit notion-oauth mode='your-own' → preserved (schema default is 'managed')", () => {
|
|
229
|
+
process.env.IS_CLOUD = "true";
|
|
230
|
+
|
|
231
|
+
// notion-oauth's schema default is "managed" (per JARVIS-966), but an
|
|
232
|
+
// explicit user choice of "your-own" must win — the fill-defaults pass
|
|
233
|
+
// must never override an explicit value, even one that contradicts the
|
|
234
|
+
// schema default. Mirror of the image-generation "your-own preserved"
|
|
235
|
+
// test above, but for a service whose schema default is "managed".
|
|
236
|
+
writeFileSync(
|
|
237
|
+
CONFIG_PATH,
|
|
238
|
+
JSON.stringify(
|
|
239
|
+
{
|
|
240
|
+
services: {
|
|
241
|
+
"notion-oauth": { mode: "your-own" },
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
null,
|
|
245
|
+
2,
|
|
246
|
+
) + "\n",
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
const config = loadConfig();
|
|
250
|
+
|
|
251
|
+
const written = readConfig() as { services?: Record<string, unknown> };
|
|
252
|
+
expect(written.services).toBeDefined();
|
|
253
|
+
expect((written.services!["notion-oauth"] as { mode?: string })?.mode).toBe(
|
|
254
|
+
"your-own",
|
|
255
|
+
);
|
|
256
|
+
expect(config.services["notion-oauth"].mode).toBe("your-own");
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
test("IS_CLOUD=true, config file exists without a services key → in-memory config has all managed modes", () => {
|
|
260
|
+
// Regression guard for the cloud-managed boot order: by the time
|
|
261
|
+
// `loadConfig()` runs, lifecycle steps such as `seedInferenceProfiles`
|
|
262
|
+
// have already written `config.json` (with `llm.profiles` etc.), so
|
|
263
|
+
// `configFileExisted` is true even on a brand-new cloud-managed
|
|
264
|
+
// assistant. Deployment-context defaults must still be applied to the
|
|
265
|
+
// in-memory config for any leaf keys that are absent from disk.
|
|
266
|
+
process.env.IS_CLOUD = "true";
|
|
267
|
+
|
|
268
|
+
writeFileSync(
|
|
269
|
+
CONFIG_PATH,
|
|
270
|
+
JSON.stringify(
|
|
271
|
+
{
|
|
272
|
+
llm: {
|
|
273
|
+
profiles: {
|
|
274
|
+
balanced: { provider: "anthropic", model: "claude-sonnet-4.5" },
|
|
275
|
+
},
|
|
276
|
+
activeProfile: "balanced",
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
null,
|
|
280
|
+
2,
|
|
281
|
+
) + "\n",
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
const config = loadConfig();
|
|
285
|
+
|
|
286
|
+
// In-memory config has the deployment-context defaults applied for the
|
|
287
|
+
// missing service-mode fields.
|
|
288
|
+
for (const svc of MANAGED_SERVICES) {
|
|
289
|
+
expect(
|
|
290
|
+
(config.services as unknown as Record<string, { mode: string }>)[svc]!
|
|
291
|
+
.mode,
|
|
292
|
+
).toBe("managed");
|
|
293
|
+
}
|
|
294
|
+
// ...and for image-generation's provider, whose fill is "cadet".
|
|
295
|
+
expect(config.services["image-generation"].provider).toBe("cadet");
|
|
296
|
+
|
|
297
|
+
// The on-disk file is NOT modified by the fill pass — disk reflects only
|
|
298
|
+
// what was already there. Existing-file branch never re-writes config.json.
|
|
299
|
+
const onDisk = readConfig() as Record<string, unknown>;
|
|
300
|
+
expect(onDisk["services"]).toBeUndefined();
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
test("IS_CLOUD=true, config file exists with an explicit image-generation provider → provider wins over the cadet fill", () => {
|
|
304
|
+
process.env.IS_CLOUD = "true";
|
|
305
|
+
|
|
306
|
+
// User has an explicit BYOK image-generation provider on disk. The fill
|
|
307
|
+
// pass targets exactly that leaf (`provider: "cadet"`), so the explicit
|
|
308
|
+
// value must win and no mode is injected — the effective mode is the
|
|
309
|
+
// schema default.
|
|
310
|
+
writeFileSync(
|
|
311
|
+
CONFIG_PATH,
|
|
312
|
+
JSON.stringify(
|
|
313
|
+
{
|
|
314
|
+
services: {
|
|
315
|
+
"image-generation": { provider: "openai" },
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
null,
|
|
319
|
+
2,
|
|
320
|
+
) + "\n",
|
|
321
|
+
);
|
|
322
|
+
|
|
323
|
+
const config = loadConfig();
|
|
324
|
+
|
|
325
|
+
const imageGen = (
|
|
326
|
+
config.services as unknown as Record<
|
|
327
|
+
string,
|
|
328
|
+
{ mode?: string; provider?: string }
|
|
329
|
+
>
|
|
330
|
+
)["image-generation"]!;
|
|
331
|
+
expect(imageGen.provider).toBe("openai");
|
|
332
|
+
expect(imageGen).not.toHaveProperty("mode");
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
test("IS_CLOUD=false, config file exists without services key → in-memory config keeps schema defaults (your-own except google/notion-oauth which are managed)", () => {
|
|
336
|
+
// Sanity guard: deployment-context defaults are a no-op when IS_CLOUD
|
|
337
|
+
// is not enabled, regardless of whether config.json existed. The Zod
|
|
338
|
+
// schema defaults still apply, so google-oauth and notion-oauth resolve
|
|
339
|
+
// to "managed" while the remaining services resolve to "your-own".
|
|
340
|
+
process.env.IS_CLOUD = "false";
|
|
341
|
+
|
|
342
|
+
writeFileSync(
|
|
343
|
+
CONFIG_PATH,
|
|
344
|
+
JSON.stringify(
|
|
345
|
+
{
|
|
346
|
+
llm: {
|
|
347
|
+
profiles: {
|
|
348
|
+
balanced: { provider: "anthropic", model: "claude-sonnet-4.5" },
|
|
349
|
+
},
|
|
350
|
+
activeProfile: "balanced",
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
null,
|
|
354
|
+
2,
|
|
355
|
+
) + "\n",
|
|
356
|
+
);
|
|
357
|
+
|
|
358
|
+
const config = loadConfig();
|
|
359
|
+
|
|
360
|
+
for (const svc of SCHEMA_YOUR_OWN_DEFAULT_SERVICES) {
|
|
361
|
+
expect(
|
|
362
|
+
(config.services as unknown as Record<string, { mode: string }>)[svc]!
|
|
363
|
+
.mode,
|
|
364
|
+
).toBe("your-own");
|
|
365
|
+
}
|
|
366
|
+
for (const svc of SCHEMA_MANAGED_DEFAULT_SERVICES) {
|
|
367
|
+
expect(
|
|
368
|
+
(config.services as unknown as Record<string, { mode: string }>)[svc]!
|
|
369
|
+
.mode,
|
|
370
|
+
).toBe("managed");
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
});
|
|
@@ -148,7 +148,7 @@ describe("loadConfig corrupt-file recovery", () => {
|
|
|
148
148
|
|
|
149
149
|
// ---------------------------------------------------------------------------
|
|
150
150
|
// Shape-mismatch quarantine — same JSON.parse caveat as `loadRawConfig`.
|
|
151
|
-
// Without an `isPlainObject` check, downstream code (e.g. the
|
|
151
|
+
// Without an `isPlainObject` check, downstream code (e.g. the cloud-Gemini
|
|
152
152
|
// `setNestedValue` block in `loadConfig`) would TypeError on `null` or
|
|
153
153
|
// primitive `fileConfig`, and only the broad try/catch around the migration
|
|
154
154
|
// saved startup. Treating the wrong-shape case as a parse error here moves
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* cloneDefaultConfig), it writes a JSON sentinel to
|
|
5
5
|
* <workspace>/data/config-validation-reset-notice.json recording the reset.
|
|
6
6
|
* The per-turn `config-validation-reset-notice` injector surfaces that event to
|
|
7
|
-
* the agent so a setting that silently reverted (e.g. a
|
|
7
|
+
* the agent so a setting that silently reverted (e.g. a cloud Outlook/OAuth
|
|
8
8
|
* service mode) becomes explainable — matching LUM-2758.
|
|
9
9
|
*
|
|
10
10
|
* The revealing case: a wrong-type `llm.profiles` fails the first parse so
|
|
@@ -1637,7 +1637,7 @@ describe("AssistantConfigSchema", () => {
|
|
|
1637
1637
|
});
|
|
1638
1638
|
|
|
1639
1639
|
// Legacy config objects on disk may carry a `mode` key. Parsing must strip
|
|
1640
|
-
// it rather than reject the config — and must not treat it as a
|
|
1640
|
+
// it rather than reject the config — and must not treat it as a cloud
|
|
1641
1641
|
// selection, which is what migration 130 rewrites to `provider: "cadet"`.
|
|
1642
1642
|
test("ignores a legacy tts mode key", () => {
|
|
1643
1643
|
const result = AssistantConfigSchema.parse({
|
|
@@ -1799,7 +1799,7 @@ describe("AssistantConfigSchema", () => {
|
|
|
1799
1799
|
});
|
|
1800
1800
|
|
|
1801
1801
|
// Legacy config objects on disk may carry a `mode` key. Parsing must strip
|
|
1802
|
-
// it rather than reject the config — and must not treat it as a
|
|
1802
|
+
// it rather than reject the config — and must not treat it as a cloud
|
|
1803
1803
|
// selection, which is what migration 130 rewrites to `provider: "cadet"`.
|
|
1804
1804
|
test("ignores a legacy stt mode key", () => {
|
|
1805
1805
|
const result = AssistantConfigSchema.parse({
|
|
@@ -2098,7 +2098,7 @@ describe("TTS provider catalog integration", () => {
|
|
|
2098
2098
|
const resolved = resolveTtsConfig(config);
|
|
2099
2099
|
expect(resolved.provider).toBe(providerId);
|
|
2100
2100
|
if (providerId === "cadet") {
|
|
2101
|
-
// The cadet config block is intentionally empty — the
|
|
2101
|
+
// The cadet config block is intentionally empty — the cloud
|
|
2102
2102
|
// pins the voice and model.
|
|
2103
2103
|
expect(resolved.providerConfig).toEqual({});
|
|
2104
2104
|
} else {
|
|
@@ -8,10 +8,10 @@ import { Command } from "commander";
|
|
|
8
8
|
// The `config` CLI is now an IPC-tagged command (routed via cliIpcCall) so
|
|
9
9
|
// these tests assert on the IPC calls the CLI emits, not on direct loader
|
|
10
10
|
// writes. The only non-IPC interaction is `requirePlatformConnection`, which
|
|
11
|
-
// reads the
|
|
11
|
+
// reads the cloud client - mocked below.
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
13
|
|
|
14
|
-
let
|
|
14
|
+
let mockCloudClientCreate: () => Promise<Record<
|
|
15
15
|
string,
|
|
16
16
|
unknown
|
|
17
17
|
> | null> = async () => null;
|
|
@@ -32,9 +32,9 @@ let mockIpcResult: {
|
|
|
32
32
|
// Mocks - platform/client (controls requirePlatformConnection)
|
|
33
33
|
// ---------------------------------------------------------------------------
|
|
34
34
|
|
|
35
|
-
mock.module("../
|
|
36
|
-
|
|
37
|
-
create: () =>
|
|
35
|
+
mock.module("../cloud/client.js", () => ({
|
|
36
|
+
CadetCloudClient: {
|
|
37
|
+
create: () => mockCloudClientCreate(),
|
|
38
38
|
},
|
|
39
39
|
}));
|
|
40
40
|
|
|
@@ -152,7 +152,7 @@ async function runCli(
|
|
|
152
152
|
describe("config set - cloud connection guard for service mode paths", () => {
|
|
153
153
|
beforeEach(() => {
|
|
154
154
|
// Default: not connected to platform
|
|
155
|
-
|
|
155
|
+
mockCloudClientCreate = async () => null;
|
|
156
156
|
mockIpcCalls.length = 0;
|
|
157
157
|
mockIpcResult = { ok: true, result: { ok: true } };
|
|
158
158
|
});
|
|
@@ -144,14 +144,6 @@ function seedCleanup(
|
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
mock.module("../config/assistant-feature-flags.js", () => ({
|
|
148
|
-
clearFeatureFlagOverridesCache: () => {},
|
|
149
|
-
}));
|
|
150
|
-
|
|
151
|
-
mock.module("../persistence/embeddings/embedding-backend.js", () => ({
|
|
152
|
-
clearEmbeddingBackendCache: () => {},
|
|
153
|
-
}));
|
|
154
|
-
|
|
155
147
|
mock.module("../providers/registry.js", () => ({
|
|
156
148
|
initializeProviders: async () => {},
|
|
157
149
|
}));
|
|
@@ -215,7 +215,7 @@ describe("identity-mirror faithful-replica semantics", () => {
|
|
|
215
215
|
sourceChannel: "slack",
|
|
216
216
|
externalUserId: "UDEE",
|
|
217
217
|
externalChatId: "DDEE",
|
|
218
|
-
displayName: "Raw
|
|
218
|
+
displayName: "Raw Cloud Name",
|
|
219
219
|
contactId: "co-dee",
|
|
220
220
|
});
|
|
221
221
|
|
|
@@ -2797,7 +2797,7 @@ describe("session-agent-loop", () => {
|
|
|
2797
2797
|
});
|
|
2798
2798
|
|
|
2799
2799
|
test("attributes a fallback serve to the profile that actually served", async () => {
|
|
2800
|
-
// The turn resolved to the primary
|
|
2800
|
+
// The turn resolved to the primary cloud profile, the request hit an
|
|
2801
2801
|
// outage-shaped failure, and `RetryProvider` escalated to a backup
|
|
2802
2802
|
// profile on a different provider, stamping `actualProvider` and
|
|
2803
2803
|
// `actualInferenceProfile` on the response it returns.
|
|
@@ -4054,7 +4054,7 @@ describe("session-agent-loop", () => {
|
|
|
4054
4054
|
});
|
|
4055
4055
|
});
|
|
4056
4056
|
|
|
4057
|
-
test("does not persist
|
|
4057
|
+
test("does not persist cloud credential refresh failures as assistant text", async () => {
|
|
4058
4058
|
mockConversationErrorClassification = {
|
|
4059
4059
|
code: "MANAGED_KEY_INVALID",
|
|
4060
4060
|
userMessage: "Couldn't refresh assistant credentials.",
|
|
@@ -33,6 +33,17 @@
|
|
|
33
33
|
import { createRequire } from "node:module";
|
|
34
34
|
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
35
35
|
|
|
36
|
+
import {
|
|
37
|
+
ALL_REGISTRY_FLAG_KEYS,
|
|
38
|
+
setOverridesForTesting,
|
|
39
|
+
} from "../__tests__/feature-flag-test-helpers.js";
|
|
40
|
+
|
|
41
|
+
// Real flag cache seeded to mirror the former module mock: every declared
|
|
42
|
+
// flag on, with "app-control" pinned per test.
|
|
43
|
+
const ALL_ON = Object.fromEntries(
|
|
44
|
+
ALL_REGISTRY_FLAG_KEYS.map((k) => [k, true]),
|
|
45
|
+
) as Record<string, boolean>;
|
|
46
|
+
|
|
36
47
|
// Freeze the real node:fs exports before `mock.module("node:fs", ...)` below
|
|
37
48
|
// registers. A live `import * as` namespace would be remapped to the mock
|
|
38
49
|
// itself once the factory runs, turning the pass-through fallback into
|
|
@@ -52,17 +63,6 @@ import type { Tool } from "../tools/types.js";
|
|
|
52
63
|
// Module mocks for the skill-projection layer
|
|
53
64
|
// ---------------------------------------------------------------------------
|
|
54
65
|
|
|
55
|
-
let appControlFlagEnabled = false;
|
|
56
|
-
mock.module("../config/assistant-feature-flags.js", () => ({
|
|
57
|
-
isAssistantFeatureFlagEnabled: (key: string) => {
|
|
58
|
-
if (key === "app-control") {
|
|
59
|
-
return appControlFlagEnabled;
|
|
60
|
-
}
|
|
61
|
-
return true;
|
|
62
|
-
},
|
|
63
|
-
loadDefaultsRegistry: () => ({}),
|
|
64
|
-
}));
|
|
65
|
-
|
|
66
66
|
mock.module("../config/skill-state.js", () => ({
|
|
67
67
|
skillFlagKey: (skill: { featureFlag?: string }) =>
|
|
68
68
|
skill.featureFlag ?? undefined,
|
|
@@ -336,11 +336,11 @@ function makeAppControlManifest(): SkillToolManifest {
|
|
|
336
336
|
|
|
337
337
|
describe("HostAppControlProxy instantiation gate", () => {
|
|
338
338
|
beforeEach(() => {
|
|
339
|
-
|
|
339
|
+
setOverridesForTesting({ ...ALL_ON, "app-control": false });
|
|
340
340
|
});
|
|
341
341
|
|
|
342
342
|
test("macOS client attaches HostAppControlProxy and preactivates app-control (flag off)", () => {
|
|
343
|
-
|
|
343
|
+
setOverridesForTesting({ ...ALL_ON, "app-control": false });
|
|
344
344
|
const conv = makeFakeConversation();
|
|
345
345
|
|
|
346
346
|
applyAppControlInstantiation(conv, "macos");
|
|
@@ -351,7 +351,7 @@ describe("HostAppControlProxy instantiation gate", () => {
|
|
|
351
351
|
});
|
|
352
352
|
|
|
353
353
|
test("macOS client attaches HostAppControlProxy and preactivates app-control (flag on)", () => {
|
|
354
|
-
|
|
354
|
+
setOverridesForTesting({ ...ALL_ON, "app-control": true });
|
|
355
355
|
const conv = makeFakeConversation();
|
|
356
356
|
|
|
357
357
|
applyAppControlInstantiation(conv, "macos");
|
|
@@ -361,7 +361,7 @@ describe("HostAppControlProxy instantiation gate", () => {
|
|
|
361
361
|
});
|
|
362
362
|
|
|
363
363
|
test("non-macOS client (slack) does not attach HostAppControlProxy nor preactivate app-control", () => {
|
|
364
|
-
|
|
364
|
+
setOverridesForTesting({ ...ALL_ON, "app-control": true });
|
|
365
365
|
const conv = makeFakeConversation();
|
|
366
366
|
|
|
367
367
|
applyAppControlInstantiation(conv, "slack");
|
|
@@ -371,7 +371,7 @@ describe("HostAppControlProxy instantiation gate", () => {
|
|
|
371
371
|
});
|
|
372
372
|
|
|
373
373
|
test("chrome-extension client does not attach HostAppControlProxy (host_app_control unsupported)", () => {
|
|
374
|
-
|
|
374
|
+
setOverridesForTesting({ ...ALL_ON, "app-control": true });
|
|
375
375
|
const conv = makeFakeConversation();
|
|
376
376
|
// Sanity check: chrome-extension supports host_browser, NOT host_app_control.
|
|
377
377
|
expect(supportsHostProxy("chrome-extension", "host_app_control")).toBe(
|
|
@@ -399,7 +399,7 @@ describe("Skill projection — app-control feature-flag gating", () => {
|
|
|
399
399
|
});
|
|
400
400
|
|
|
401
401
|
test("flag off: app-control is filtered out of projected tools even when preactivated", () => {
|
|
402
|
-
|
|
402
|
+
setOverridesForTesting({ ...ALL_ON, "app-control": false });
|
|
403
403
|
|
|
404
404
|
const sessionState = new Map<string, string>();
|
|
405
405
|
const result = projectSkillTools([], {
|
|
@@ -412,7 +412,7 @@ describe("Skill projection — app-control feature-flag gating", () => {
|
|
|
412
412
|
});
|
|
413
413
|
|
|
414
414
|
test("flag on: app-control tools are projected when preactivated", () => {
|
|
415
|
-
|
|
415
|
+
setOverridesForTesting({ ...ALL_ON, "app-control": true });
|
|
416
416
|
|
|
417
417
|
const sessionState = new Map<string, string>();
|
|
418
418
|
const result = projectSkillTools([], {
|