@mycadet/assistant 0.12.7 → 0.12.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/docs/activation-funnel-telemetry.md +6 -6
- package/docs/cadet-doctor.md +7 -7
- package/docs/desktop-browser-cli.md +7 -7
- package/docs/skills.md +2 -2
- package/docs/voice-input-diagnostics.md +1 -1
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +2 -2
- package/node_modules/@mycadet/avatar-manifest/src/__tests__/notification-avatar.test.ts +1 -1
- package/node_modules/@mycadet/avatar-manifest/src/notification-avatar.ts +2 -2
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/package.json +2 -2
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/node_modules/@mycadet/ces-client/package.json +1 -1
- package/node_modules/@mycadet/ces-client/src/__tests__/ces-client.test.ts +14 -14
- package/node_modules/@mycadet/ces-client/src/rpc-client.ts +1 -1
- package/node_modules/@mycadet/credential-storage/src/oauth-runtime.ts +1 -1
- package/node_modules/@mycadet/credential-storage/src/static-credentials.ts +1 -1
- package/node_modules/@mycadet/environments/src/seeds.ts +6 -6
- package/node_modules/@mycadet/environments/src/shell.test.ts +1 -1
- package/node_modules/@mycadet/environments/src/types.ts +6 -6
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/package.json +2 -2
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/node_modules/@mycadet/gateway-client/src/binding-strength-contract.ts +5 -5
- package/node_modules/@mycadet/gateway-client/src/gateway-ipc-contracts.ts +1 -1
- package/node_modules/@mycadet/gateway-client/src/inbound-contract.ts +2 -2
- package/node_modules/@mycadet/gateway-client/src/outbound-contract.ts +1 -1
- package/node_modules/@mycadet/service-contracts/package.json +2 -2
- package/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/openapi.yaml +6804 -799
- package/package.json +2 -2
- package/scripts/build-test-fixtures.ts +1 -1
- package/scripts/probe-skill-retrieval.ts +1 -1
- package/scripts/sync-llm-catalog.ts +2 -2
- package/scripts/voice-ttft-spike.ts +2 -2
- package/src/__tests__/adaptive-thinking-repair.test.ts +4 -4
- package/src/__tests__/agent-loop-override-profile.test.ts +4 -4
- package/src/__tests__/agent-loop-subagent-billing-headers.test.ts +1 -1
- package/src/__tests__/anthropic-provider.test.ts +2 -2
- package/src/__tests__/available-skills.test.ts +11 -12
- package/src/__tests__/avatar-identity-sync.test.ts +1 -1
- package/src/__tests__/byok-default-profile-ensure.test.ts +7 -7
- package/src/__tests__/call-domain.test.ts +1 -1
- package/src/__tests__/call-site-routing-connection-auto-resolve.test.ts +2 -2
- package/src/__tests__/catalog-files.test.ts +10 -10
- package/src/__tests__/catalog-install-normalize.test.ts +3 -3
- package/src/__tests__/channel-availability-routes.test.ts +8 -8
- package/src/__tests__/channel-readiness-routes.test.ts +4 -4
- package/src/__tests__/channel-readiness-service.test.ts +14 -14
- package/src/__tests__/channel-readiness-telegram-remote.test.ts +1 -1
- package/src/__tests__/chat-reveal-guard-priming.test.ts +5 -6
- package/src/__tests__/checker.test.ts +6 -6
- package/src/__tests__/clawhub.test.ts +1 -1
- package/src/__tests__/{platform-callback-registration.test.ts → cloud-callback-registration.test.ts} +66 -90
- package/src/__tests__/{platform-client-verify-credential.test.ts → cloud-client-verify-credential.test.ts} +14 -14
- package/src/__tests__/{managed-credential-catalog-cli.test.ts → cloud-credential-catalog-cli.test.ts} +41 -41
- package/src/__tests__/{managed-fallback-dispatch.test.ts → cloud-fallback-dispatch.test.ts} +21 -16
- package/src/__tests__/{managed-profile-guard.test.ts → cloud-profile-guard.test.ts} +77 -75
- package/src/__tests__/{platform-proxy-context.test.ts → cloud-proxy-context.test.ts} +44 -44
- package/src/__tests__/{managed-speech-defaults.test.ts → cloud-speech-defaults.test.ts} +41 -41
- package/src/__tests__/{managed-store.test.ts → cloud-store.test.ts} +99 -99
- package/src/__tests__/compaction-events.test.ts +7 -5
- package/src/__tests__/config-loader-backfill.test.ts +65 -65
- package/src/__tests__/config-loader-cloud-defaults.test.ts +373 -0
- package/src/__tests__/config-loader-corrupt.test.ts +1 -1
- package/src/__tests__/config-loader-validation-reset-notice.test.ts +1 -1
- package/src/__tests__/config-schema.test.ts +3 -3
- package/src/__tests__/{config-set-platform-guard.test.ts → config-set-cloud-guard.test.ts} +6 -6
- package/src/__tests__/config-set-route.test.ts +12 -8
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +0 -8
- package/src/__tests__/config-watcher.test.ts +1 -1
- package/src/__tests__/contacts-write.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop.test.ts +2 -2
- package/src/__tests__/conversation-app-control-instantiation.test.ts +18 -18
- package/src/__tests__/conversation-error.test.ts +45 -45
- package/src/__tests__/conversation-inference-profile-route.test.ts +4 -4
- package/src/__tests__/conversation-rendered-delegation-state.test.ts +4 -4
- package/src/__tests__/conversation-skill-tools.test.ts +7 -8
- package/src/__tests__/conversation-slash.test.ts +2 -2
- package/src/__tests__/conversation-speed-override.test.ts +8 -10
- package/src/__tests__/conversation-summarize-up-to.test.ts +4 -4
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +1 -1
- package/src/__tests__/conversation-wait-for-idle.test.ts +7 -5
- package/src/__tests__/credential-execution-api-key-propagation.test.ts +5 -5
- package/src/__tests__/{credential-execution-managed-contract.test.ts → credential-execution-cloud-contract.test.ts} +24 -24
- package/src/__tests__/credential-health-service.test.ts +28 -40
- package/src/__tests__/credential-routes.test.ts +85 -165
- package/src/__tests__/credential-security-invariants.test.ts +6 -7
- package/src/__tests__/custom-profile-ensure.test.ts +1 -1
- package/src/__tests__/date-context.test.ts +1 -1
- package/src/__tests__/default-profile-catalog-fallback.test.ts +15 -15
- package/src/__tests__/delete-managed-skill-tool.test.ts +8 -8
- package/src/__tests__/discord-callback-round-trip.test.ts +1 -1
- package/src/__tests__/disk-usage.test.ts +3 -3
- package/src/__tests__/email-invite-adapter.test.ts +5 -5
- package/src/__tests__/{embedding-managed-proxy-selection.test.ts → embedding-cloud-proxy-selection.test.ts} +44 -43
- package/src/__tests__/emit-signal-routing-intent.test.ts +13 -15
- package/src/__tests__/events-dev-bypass-actor.test.ts +2 -2
- package/src/__tests__/fallback-breaker.test.ts +7 -7
- package/src/__tests__/feature-flag-test-helpers.ts +106 -0
- package/src/__tests__/gateway-flag-listener.test.ts +1 -1
- package/src/__tests__/gemini-image-service.test.ts +2 -2
- package/src/__tests__/gemini-provider.test.ts +5 -5
- package/src/__tests__/get-skill-detail-audit.test.ts +134 -288
- package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -1
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +5 -5
- package/src/__tests__/host-cu-routes-targeted.test.ts +8 -8
- package/src/__tests__/image-credentials.test.ts +13 -13
- package/src/__tests__/inbound-admitted-introduction-nudge.test.ts +14 -6
- package/src/__tests__/inbound-trust-verdict.test.ts +14 -6
- package/src/__tests__/inference-no-mode-boot-e2e.test.ts +11 -11
- package/src/__tests__/inference-profile-session-handler.test.ts +7 -7
- package/src/__tests__/inference-profile-session-ipc.test.ts +5 -5
- package/src/__tests__/inference-profile-validation-jev.test.ts +1 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +40 -24
- package/src/__tests__/input-repairs.test.ts +1 -1
- package/src/__tests__/install-skill-routing.test.ts +10 -8
- package/src/__tests__/integration-status.test.ts +5 -5
- package/src/__tests__/internal-telemetry-routes.test.ts +3 -3
- package/src/__tests__/invite-routes-http.test.ts +1 -1
- package/src/__tests__/llm-catalog-parity.test.ts +5 -7
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +2 -2
- package/src/__tests__/llm-resolver-override-or-default.test.ts +3 -3
- package/src/__tests__/llm-resolver.test.ts +1 -1
- package/src/__tests__/llm-schema-fallback-profile.test.ts +25 -19
- package/src/__tests__/llm-usage-store.test.ts +1 -1
- package/src/__tests__/managed-skill-lifecycle.test.ts +12 -12
- package/src/__tests__/mcp-abort-signal.test.ts +1 -2
- package/src/__tests__/mcp-client-auth.test.ts +1 -2
- package/src/__tests__/mcp-config-secret-boundary.test.ts +44 -40
- package/src/__tests__/mcp-tool-annotations-risk.test.ts +1 -2
- package/src/__tests__/media-generate-image.test.ts +30 -30
- package/src/__tests__/memory-config-file-parity.test.ts +6 -6
- package/src/__tests__/migration-export-to-gcs.test.ts +4 -4
- package/src/__tests__/migration-import-commit-http.test.ts +1 -1
- package/src/__tests__/mtime-cache.test.ts +2 -2
- package/src/__tests__/{notification-platform-adapter.test.ts → notification-cloud-adapter.test.ts} +39 -39
- package/src/__tests__/notification-deep-link.test.ts +40 -40
- package/src/__tests__/oauth-apps-routes.test.ts +3 -3
- package/src/__tests__/oauth-cli.test.ts +9 -9
- package/src/__tests__/oauth-commands-routes.test.ts +16 -16
- package/src/__tests__/oauth-connect-orchestrator.test.ts +2 -2
- package/src/__tests__/oauth-provider-serializer.test.ts +11 -11
- package/src/__tests__/oauth-providers-routes.test.ts +12 -12
- package/src/__tests__/oauth-store.test.ts +1 -1
- package/src/__tests__/oauth2-gateway-transport.test.ts +3 -3
- package/src/__tests__/onboarding-persona-write.test.ts +2 -2
- package/src/__tests__/openai-image-service.test.ts +2 -2
- package/src/__tests__/openai-responses-cutover-guard.test.ts +2 -2
- package/src/__tests__/openai-responses-provider.test.ts +1 -1
- package/src/__tests__/path-policy.test.ts +4 -4
- package/src/__tests__/personal-memory-auth-bypass.test.ts +1 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +18 -18
- package/src/__tests__/plugin-api-model-profiles.test.ts +1 -1
- package/src/__tests__/plugin-api-provider.test.ts +1 -1
- package/src/__tests__/plugin-api-store-credential.test.ts +4 -1
- package/src/__tests__/plugin-api-webhook-url.test.ts +4 -5
- package/src/__tests__/plugin-import-boundary-guard.test.ts +8 -39
- package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +2 -2
- package/src/__tests__/{provider-platform-proxy-integration.test.ts → provider-cloud-proxy-integration.test.ts} +70 -72
- package/src/__tests__/provider-commit-message-generator.test.ts +1 -1
- package/src/__tests__/provider-connections-backfill.test.ts +9 -9
- package/src/__tests__/provider-error-scenarios.test.ts +8 -8
- package/src/__tests__/provider-registry-ollama.test.ts +1 -1
- package/src/__tests__/provider-send-message-override-profile.test.ts +5 -5
- package/src/__tests__/registry.test.ts +3 -3
- package/src/__tests__/requests-mock.ts +972 -0
- package/src/__tests__/resolve-trust-class.test.ts +1 -1
- package/src/__tests__/resource-pressure-guard.test.ts +6 -6
- package/src/__tests__/resource-pressure-routes.test.ts +5 -5
- package/src/__tests__/retry-fallback-escalation.test.ts +5 -5
- package/src/__tests__/sanitize-config-for-transfer.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +97 -97
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/search-skills-unified.test.ts +9 -7
- package/src/__tests__/{secret-routes-platform-proxy.test.ts → secret-routes-cloud-proxy.test.ts} +48 -95
- package/src/__tests__/secret-routes-scrub.test.ts +2 -59
- package/src/__tests__/secure-keys.test.ts +1 -1
- package/src/__tests__/skill-load-plugin-scope.test.ts +2 -2
- package/src/__tests__/skill-load-tool.test.ts +1 -1
- package/src/__tests__/skill-projection-feature-flag.test.ts +0 -19
- package/src/__tests__/skill-projection.benchmark.test.ts +5 -7
- package/src/__tests__/skill-tool-factory.test.ts +1 -1
- package/src/__tests__/skills-file-content-endpoint.test.ts +222 -536
- package/src/__tests__/skills-files-catalog-fallback.test.ts +259 -577
- package/src/__tests__/skills.test.ts +1 -1
- package/src/__tests__/slim-skill-category.test.ts +11 -9
- package/src/__tests__/stt-stream-session.test.ts +3 -3
- package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
- package/src/__tests__/subagent-disposal.test.ts +5 -5
- package/src/__tests__/subagent-fork-notifications.test.ts +4 -4
- package/src/__tests__/subagent-fork-spawn.test.ts +5 -5
- package/src/__tests__/subagent-manager-notify.test.ts +5 -5
- package/src/__tests__/subagent-tool-gate-mode.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +1 -1
- package/src/__tests__/telegram-bot-username-resolution.test.ts +34 -52
- package/src/__tests__/telegram-config.test.ts +16 -16
- package/src/__tests__/telephony-tts-guard.test.ts +13 -13
- package/src/__tests__/test-preload.ts +17 -7
- package/src/__tests__/tool-audit.test.ts +1 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +7 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -1
- package/src/__tests__/turn-events-store.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +2 -1
- package/src/__tests__/ui-choice-copy-surfaces.test.ts +1 -1
- package/src/__tests__/unified-turn-context-client-os.test.ts +1 -1
- package/src/__tests__/validate-input.test.ts +5 -5
- package/src/__tests__/verification-outbound-delivery.test.ts +1 -1
- package/src/__tests__/voice-config-update.test.ts +15 -15
- package/src/__tests__/voice-ingress-preflight.test.ts +4 -4
- package/src/__tests__/web-search.test.ts +340 -859
- package/src/__tests__/workspace-git-service.test.ts +1 -1
- package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +12 -12
- package/src/__tests__/workspace-migration-087-memory-router-balanced-profile.test.ts +1 -1
- package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +1 -1
- package/src/__tests__/workspace-migration-100-upgrade-quality-profile-to-fable-5.test.ts +1 -1
- package/src/__tests__/workspace-migration-103-upgrade-quality-profile-to-opus-4-8.test.ts +1 -1
- package/src/__tests__/workspace-migration-110-flip-balanced-profile-to-together.test.ts +1 -1
- package/src/__tests__/workspace-migration-113-swap-balanced-profile-to-glm-5p2.test.ts +1 -1
- package/src/__tests__/workspace-migration-114-swap-quality-profile-to-opus.test.ts +1 -1
- package/src/__tests__/workspace-migration-123-swap-quality-profile-to-fable.test.ts +1 -1
- package/src/__tests__/workspace-migration-125-repoint-managed-connections-to-cadet.test.ts +3 -3
- package/src/__tests__/workspace-migration-126-strip-managed-profile-bodies.test.ts +9 -9
- package/src/__tests__/workspace-migration-127-backfill-default-provider.test.ts +11 -11
- package/src/__tests__/workspace-migration-130-speech-mode-to-provider.test.ts +3 -3
- package/src/__tests__/workspace-migration-132-web-search-mode-to-provider.test.ts +6 -6
- package/src/__tests__/workspace-migration-133-collapse-provider-connections.test.ts +3 -3
- package/src/__tests__/workspace-migration-134-image-generation-mode-to-provider.test.ts +6 -6
- package/src/__tests__/workspace-migration-136-repair-stale-fireworks-kimi-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-137-repair-retired-fireworks-minimax-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-146-repair-retired-fireworks-deepseek-flash-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-147-rename-colliding-backup-profile-names.test.ts +1 -1
- package/src/__tests__/workspace-migration-151-repair-renamed-fireworks-deepseek-pro-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-152-repair-retired-fireworks-minimax-m2p7-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-159-rename-colliding-jev-profile-name.test.ts +1 -1
- package/src/__tests__/workspace-migration-160-repair-retired-fireworks-model-ids.test.ts +1 -1
- package/src/__tests__/workspace-migration-161-repair-retired-fireworks-glm-5p2-model-id.test.ts +1 -1
- package/src/api/events/cloud-disconnected.ts +21 -0
- package/src/api/events/host-bash.ts +1 -1
- package/src/api/events/host-cu.ts +1 -1
- package/src/api/events/host-file.ts +1 -1
- package/src/api/events/notification-intent.ts +1 -1
- package/src/api/events/show-cloud-login.ts +18 -0
- package/src/api/index.ts +11 -11
- package/src/api/responses/home.ts +1 -1
- package/src/api/surfaces.ts +4 -4
- package/src/approvals/guardian-request-resolvers.ts +2 -2
- package/src/avatar/accent-backfill.ts +1 -1
- package/src/avatar/identity-avatar.ts +1 -1
- package/src/avatar/notification-avatar.test.ts +2 -2
- package/src/avatar/notification-avatar.ts +2 -2
- package/src/avatar/resvg-lazy.test.ts +1 -1
- package/src/avatar/resvg-lazy.ts +3 -3
- package/src/avatar/sync-avatar.test.ts +76 -76
- package/src/avatar/sync-avatar.ts +15 -15
- package/src/avatar/traits-png-sync.ts +1 -1
- package/src/background-wake/background-wake-routes.test.ts +39 -39
- package/src/background-wake/{platform-client.test.ts → cloud-client.test.ts} +11 -11
- package/src/background-wake/{platform-client.ts → cloud-client.ts} +14 -14
- package/src/background-wake/publisher.ts +4 -4
- package/src/background-wake/wake-intent-hooks.test.ts +3 -3
- package/src/calls/__tests__/call-controller.test.ts +2 -2
- package/src/calls/__tests__/voice-session-bridge.test.ts +1 -1
- package/src/calls/call-domain.ts +1 -1
- package/src/calls/resolve-call-tts-provider.ts +6 -6
- package/src/calls/telephony-credential-preflight.ts +3 -3
- package/src/calls/telephony-tts-capability.ts +5 -6
- package/src/calls/tts-call-strategy.ts +1 -1
- package/src/calls/voice-escalation-judge.ts +1 -1
- package/src/calls/voice-ingress-preflight.ts +4 -4
- package/src/cli/bundled-modules.ts +1 -1
- package/src/cli/commands/__tests__/apps.test.ts +18 -53
- package/src/cli/commands/__tests__/plugins.test.ts +13 -13
- package/src/cli/commands/__tests__/tts.test.ts +1 -1
- package/src/cli/commands/auth.help.ts +3 -3
- package/src/cli/commands/auth.ts +2 -4
- package/src/cli/commands/browser.help.ts +2 -2
- package/src/cli/commands/channels/index.help.ts +2 -2
- package/src/cli/commands/channels/index.ts +1 -1
- package/src/cli/commands/channels/send.ts +1 -1
- package/src/cli/commands/cloud/__tests__/callback-routes-list.test.ts +2 -2
- package/src/cli/commands/cloud/__tests__/connect.test.ts +1 -1
- package/src/cli/commands/cloud/__tests__/disconnect.test.ts +3 -4
- package/src/cli/commands/cloud/connect.ts +2 -2
- package/src/cli/commands/cloud/credits-format.ts +1 -1
- package/src/cli/commands/cloud/index.help.ts +35 -35
- package/src/cli/commands/cloud/index.ts +1 -1
- package/src/cli/commands/config.ts +2 -2
- package/src/cli/commands/credentials.ts +10 -12
- package/src/cli/commands/domain.ts +1 -1
- package/src/cli/commands/email.help.ts +1 -1
- package/src/cli/commands/email.ts +2 -2
- package/src/cli/commands/gateway.help.ts +1 -1
- package/src/cli/commands/gateway.ts +1 -1
- package/src/cli/commands/image-generation.help.ts +1 -1
- package/src/cli/commands/inference-providers.ts +1 -1
- package/src/cli/commands/inference.help.ts +2 -2
- package/src/cli/commands/memory/index.help.ts +1 -1
- package/src/cli/commands/oauth/connect.test.ts +2 -2
- package/src/cli/commands/oauth/connect.ts +1 -1
- package/src/cli/commands/oauth/index.help.ts +5 -5
- package/src/cli/commands/oauth/providers.ts +2 -2
- package/src/cli/commands/oauth/shared.ts +3 -3
- package/src/cli/commands/plugins.help.ts +2 -3
- package/src/cli/commands/plugins.ts +5 -5
- package/src/cli/commands/roadmap.help.ts +1 -1
- package/src/cli/commands/telemetry.help.ts +2 -2
- package/src/cli/commands/telemetry.ts +2 -2
- package/src/cli/commands/tts.help.ts +3 -3
- package/src/cli/commands/webhooks.help.ts +9 -9
- package/src/cli/commands/webhooks.ts +1 -1
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +8 -8
- package/src/cli/lib/__tests__/{install-from-platform.test.ts → install-from-cloud.test.ts} +54 -54
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +18 -18
- package/src/cli/lib/__tests__/{plugin-catalog-platform.test.ts → plugin-catalog-cloud.test.ts} +2 -2
- package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +1 -1
- package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +9 -9
- package/src/cli/lib/__tests__/plugin-details.test.ts +10 -10
- package/src/cli/lib/__tests__/plugins-install-offline.test.ts +24 -24
- package/src/cli/lib/bundled-marketplace.json +1 -1
- package/src/cli/lib/inspect-plugin.ts +2 -2
- package/src/cli/lib/{install-from-platform.ts → install-from-cloud.ts} +29 -29
- package/src/cli/lib/install-from-github.ts +4 -4
- package/src/cli/lib/plugin-catalog-cache.ts +7 -7
- package/src/cli/lib/{plugin-catalog-platform.ts → plugin-catalog-cloud.ts} +6 -6
- package/src/cli/lib/plugin-catalog-local.ts +2 -2
- package/src/cli/lib/publish-plugin.ts +9 -10
- package/src/cli/lib/search-plugins.ts +2 -2
- package/src/{platform → cloud}/client.test.ts +85 -86
- package/src/{platform → cloud}/client.ts +38 -46
- package/src/{platform/platform-patch-queue.test.ts → cloud/cloud-patch-queue.test.ts} +6 -9
- package/src/{platform/platform-patch-queue.ts → cloud/cloud-patch-queue.ts} +11 -11
- package/src/{platform/managed-speech.test.ts → cloud/cloud-speech.test.ts} +19 -19
- package/src/{platform/managed-speech.ts → cloud/cloud-speech.ts} +41 -41
- package/src/{platform → cloud}/consent-cache.test.ts +5 -5
- package/src/{platform → cloud}/consent-cache.ts +8 -8
- package/src/cloud/feature-gate.ts +8 -0
- package/src/{platform → cloud}/sync-identity.test.ts +4 -4
- package/src/{platform → cloud}/sync-identity.ts +6 -6
- package/src/config/__tests__/{platform-identity.test.ts → cloud-identity.test.ts} +54 -56
- package/src/config/__tests__/{platform-rehydration.test.ts → cloud-rehydration.test.ts} +47 -80
- package/src/config/__tests__/default-profile-catalog.test.ts +12 -12
- package/src/config/__tests__/default-provider.test.ts +4 -4
- package/src/config/__tests__/deployment-context-defaults.test.ts +23 -23
- package/src/config/__tests__/{jev-managed-profile.test.ts → jev-cloud-profile.test.ts} +3 -5
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +2 -2
- package/src/config/__tests__/loader-last-known-good.test.ts +6 -6
- package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +2 -2
- package/src/config/__tests__/profile-materialization.test.ts +7 -7
- package/src/config/__tests__/seed-default-provider.test.ts +17 -17
- package/src/config/__tests__/substrate-twin-shadowing.test.ts +36 -26
- package/src/config/__tests__/sync-gated-profiles.test.ts +20 -20
- package/src/config/__tests__/webhook-routing.test.ts +51 -51
- package/src/config/bundled-skills/computer-use/TOOLS.json +12 -12
- package/src/config/bundled-skills/messaging/SKILL.md +8 -8
- package/src/config/bundled-skills/messaging/TOOLS.json +2 -2
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +1 -1
- package/src/config/bundled-skills/messaging/tools/shared.ts +1 -1
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +2 -2
- package/src/config/bundled-skills/settings/TOOLS.json +3 -3
- package/src/config/bundled-skills/settings/tools/shared.ts +1 -1
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +12 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +3 -3
- package/src/config/bundled-skills/skill-management/TOOLS.json +8 -8
- package/src/config/bundled-skills/skill-management/tools/{delete-managed.ts → delete-cloud.ts} +2 -2
- package/src/config/bundled-skills/skill-management/tools/{scaffold-managed.ts → scaffold-cloud.ts} +2 -2
- package/src/config/call-site-defaults.ts +6 -6
- package/src/config/{platform-identity.ts → cloud-identity.ts} +39 -42
- package/src/config/cloud-rehydration.ts +35 -0
- package/src/config/{managed-speech-defaults.ts → cloud-speech-defaults.ts} +13 -13
- package/src/config/default-profile-catalog.ts +36 -38
- package/src/config/default-profile-names.ts +11 -11
- package/src/config/default-provider-resolution.ts +2 -2
- package/src/config/default-provider.ts +1 -1
- package/src/config/env-registry.ts +21 -26
- package/src/config/env.ts +33 -46
- package/src/config/feature-flag-registry.json +5 -5
- package/src/config/inference-profile-validation.ts +1 -1
- package/src/config/llm-resolver.ts +9 -10
- package/src/config/loader.ts +33 -17
- package/src/config/profile-materialization.ts +8 -8
- package/src/config/profile-text-generation.test.ts +1 -1
- package/src/config/sanitize-for-transfer.ts +1 -1
- package/src/config/schema.ts +6 -6
- package/src/config/schemas/__tests__/stt.test.ts +2 -2
- package/src/config/schemas/call-site-catalog.ts +1 -1
- package/src/config/schemas/channels.ts +8 -0
- package/src/config/schemas/{platform.ts → cloud.ts} +7 -6
- package/src/config/schemas/host-browser.ts +1 -0
- package/src/config/schemas/ingress.ts +29 -10
- package/src/config/schemas/llm.ts +36 -36
- package/src/config/schemas/memory-lifecycle.ts +11 -1
- package/src/config/schemas/services.ts +4 -4
- package/src/config/schemas/stt.ts +3 -3
- package/src/config/schemas/tts.ts +10 -5
- package/src/config/schemas/voice.ts +1 -1
- package/src/config/seed-inference-profiles.ts +19 -19
- package/src/config/skill-state.ts +2 -2
- package/src/config/skills.ts +4 -4
- package/src/config/substrate-twin-shadowing.ts +12 -17
- package/src/config/sync-gated-profiles.ts +8 -9
- package/src/config/webhook-routing.ts +19 -19
- package/src/contacts/contacts-write.ts +1 -1
- package/src/credential-execution/ces-runtime.ts +6 -6
- package/src/credential-execution/{managed-catalog.ts → cloud-catalog.ts} +24 -24
- package/src/credential-execution/prompted-credential.ts +2 -23
- package/src/credential-health/credential-health-service.ts +59 -70
- package/src/daemon/__tests__/can-spawn-subagents.test.ts +1 -1
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +4 -4
- package/src/daemon/config-watcher.ts +2 -2
- package/src/daemon/conversation-agent-loop.ts +9 -9
- package/src/daemon/conversation-error.ts +36 -36
- package/src/daemon/conversation-skill-tools.ts +7 -7
- package/src/daemon/conversation-surfaces.ts +1 -1
- package/src/daemon/conversation-tool-setup.ts +2 -2
- package/src/daemon/conversation-turn-finalize.ts +1 -1
- package/src/daemon/conversation-workspace.ts +1 -1
- package/src/daemon/conversation.ts +1 -1
- package/src/daemon/credential-transcript-scrub.ts +32 -35
- package/src/daemon/daemon-readiness.ts +1 -1
- package/src/daemon/event-loop-watchdog.ts +2 -2
- package/src/daemon/handlers/config-ingress.ts +9 -9
- package/src/daemon/handlers/config-telegram.ts +6 -6
- package/src/daemon/handlers/skills.ts +20 -20
- package/src/daemon/host-cu-proxy.ts +1 -1
- package/src/daemon/lifecycle.ts +19 -19
- package/src/daemon/parse-actual-tokens-from-error.ts +3 -3
- package/src/daemon/providers-setup.ts +6 -6
- package/src/daemon/resource-pressure-guard-lifecycle.ts +1 -1
- package/src/daemon/resource-pressure-guard.ts +6 -6
- package/src/daemon/shutdown-handlers.ts +1 -1
- package/src/daemon/sqlite-corruption-watchdog.ts +3 -3
- package/src/daemon/trust-context.ts +1 -1
- package/src/desktop/desktop-automation-lease.ts +1 -1
- package/src/desktop/desktop-browser-endpoint.ts +2 -4
- package/src/desktop/desktop-computer-use-routing.test.ts +6 -6
- package/src/desktop/desktop-stream-bridge.test.ts +4 -4
- package/src/desktop/desktop-stream-bridge.ts +1 -1
- package/src/desktop/{virtual-desktop-platform.test.ts → virtual-desktop-cloud.test.ts} +6 -6
- package/src/desktop/virtual-desktop-feature.ts +7 -7
- package/src/email/byo-email-credential.ts +1 -1
- package/src/email/registered-inbox.test.ts +16 -16
- package/src/email/registered-inbox.ts +20 -20
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/hooks/hook-loader.ts +2 -2
- package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
- package/src/inbound/__tests__/tunnel-probe.test.ts +8 -8
- package/src/inbound/{platform-callback-registration.ts → cloud-callback-registration.ts} +49 -60
- package/src/inbound/oauth-callback-url.ts +6 -6
- package/src/inbound/pod-webhook-claim.ts +2 -2
- package/src/inbound/public-ingress-urls.ts +3 -3
- package/src/inbound/tunnel-probe.ts +21 -15
- package/src/inbound/tunnel-webhooks-gate.ts +3 -3
- package/src/ipc/__tests__/db-readiness-ipc-gate.test.ts +1 -1
- package/src/ipc/__tests__/email-ipc.test.ts +8 -8
- package/src/ipc/gateway-client.test.ts +55 -59
- package/src/ipc/gateway-flag-listener.ts +3 -3
- package/src/ipc/routes/db-proxy.ts +1 -1
- package/src/live-voice/__tests__/live-activity-reporter.test.ts +2 -2
- package/src/live-voice/__tests__/{live-voice-managed-speech-fallback.test.ts → live-voice-cloud-speech-fallback.test.ts} +15 -15
- package/src/live-voice/__tests__/live-voice-credential-preflight.test.ts +7 -7
- package/src/live-voice/__tests__/live-voice-stt.test.ts +1 -1
- package/src/live-voice/live-activity-reporter.ts +7 -7
- package/src/live-voice/live-voice-credential-preflight.ts +6 -6
- package/src/live-voice/live-voice-session.ts +3 -3
- package/src/live-voice/live-voice-tts.ts +1 -1
- package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +4 -4
- package/src/mcp/__tests__/mcp-oauth-provider.test.ts +1 -1
- package/src/mcp/mcp-oauth-provider.ts +2 -2
- package/src/media/gemini-image-service.ts +11 -13
- package/src/media/image-credentials.ts +9 -9
- package/src/media/openai-image-service.ts +1 -1
- package/src/media/types.ts +3 -3
- package/src/messaging/providers/channel-transport.ts +1 -1
- package/src/messaging/providers/discord/transport.ts +1 -1
- package/src/messaging/providers/gmail/adapter.ts +1 -1
- package/src/messaging/providers/gmail/client.ts +4 -4
- package/src/messaging/providers/outlook/adapter.ts +1 -1
- package/src/messaging/providers/slack/adapter.ts +1 -1
- package/src/messaging/providers/slack/transport.ts +1 -1
- package/src/messaging/providers/telegram-bot/transport.ts +1 -1
- package/src/monitoring/db-integrity-check.ts +1 -1
- package/src/monitoring/db-integrity-sample.ts +2 -2
- package/src/monitoring/mount-watch.ts +1 -1
- package/src/monitoring/oom-kill-reporter.ts +1 -1
- package/src/monitoring/worker.ts +5 -5
- package/src/notifications/README.md +2 -2
- package/src/notifications/__tests__/broadcaster.test.ts +9 -9
- package/src/notifications/__tests__/completion-policy.test.ts +1 -1
- package/src/notifications/__tests__/emit-signal-pipeline-failure.test.ts +4 -4
- package/src/notifications/activity-failed-dedupe.ts +1 -1
- package/src/notifications/adapters/{platform.ts → cloud.ts} +8 -8
- package/src/notifications/broadcaster.ts +10 -10
- package/src/notifications/decision-engine.ts +1 -1
- package/src/notifications/destination-resolver.ts +1 -1
- package/src/notifications/emit-signal.ts +6 -6
- package/src/notifications/types.ts +2 -2
- package/src/oauth/__tests__/identity-verifier.test.ts +1 -1
- package/src/oauth/__tests__/{seed-providers-managed.test.ts → seed-providers-cloud.test.ts} +13 -13
- package/src/oauth/byo-connection.test.ts +2 -2
- package/src/oauth/{platform-connection.test.ts → cloud-connection.test.ts} +41 -43
- package/src/oauth/{platform-connection.ts → cloud-connection.ts} +19 -19
- package/src/oauth/connection-resolver.test.ts +59 -61
- package/src/oauth/connection-resolver.ts +22 -22
- package/src/oauth/connection.ts +1 -1
- package/src/oauth/oauth-store.ts +8 -8
- package/src/oauth/provider-serializer.ts +4 -4
- package/src/oauth/revoke.ts +1 -1
- package/src/oauth/seed-providers.ts +32 -32
- package/src/permissions/approval-provenance.ts +1 -1
- package/src/permissions/checker.test.ts +18 -16
- package/src/permissions/checker.ts +3 -3
- package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
- package/src/persistence/embeddings/embedding-backend.test.ts +16 -16
- package/src/persistence/embeddings/embedding-backend.ts +13 -13
- package/src/persistence/embeddings/embedding-gemini.test.ts +9 -12
- package/src/persistence/embeddings/embedding-gemini.ts +11 -11
- package/src/persistence/embeddings/embedding-runtime-manager.ts +2 -2
- package/src/persistence/jobs-store.ts +1 -1
- package/src/persistence/lifecycle-events-store.ts +1 -1
- package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
- package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
- package/src/persistence/migrations/224-oauth-providers-managed-service-is-paid.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.ts +2 -2
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.ts +1 -1
- package/src/persistence/migrations/351-schedule-skill-script-handoff.ts +1 -1
- package/src/persistence/migrations/361-normalize-managed-connection-rows.test.ts +3 -3
- package/src/persistence/migrations/361-normalize-managed-connection-rows.ts +7 -7
- package/src/persistence/migrations/__tests__/319-remove-legacy-managed-connections.test.ts +2 -2
- package/src/persistence/schema/oauth.ts +1 -1
- package/src/plugin-api/index.ts +4 -4
- package/src/plugin-api/model-profiles.test.ts +1 -1
- package/src/plugin-api/model-profiles.ts +1 -1
- package/src/plugin-api/transcription-session.ts +1 -1
- package/src/plugin-api/vision-support.test.ts +1 -1
- package/src/plugin-api/webhook-url.ts +12 -12
- package/src/plugins/__tests__/source-fingerprint.test.ts +1 -1
- package/src/plugins/defaults/{platform-hosted → cloud-hosted}/__tests__/reengage.test.ts +5 -6
- package/src/plugins/defaults/cloud-hosted/package.json +14 -0
- package/src/plugins/defaults/{platform-hosted → cloud-hosted}/routes/reengage.ts +3 -3
- package/src/plugins/defaults/index.ts +6 -6
- package/src/plugins/defaults/main.ts +5 -5
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +5 -5
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-prompt.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-provider-path.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +5 -0
- package/src/plugins/defaults/memory/config.ts +4 -4
- package/src/plugins/defaults/memory/memory-retrospective-constants.ts +2 -2
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +7 -7
- package/src/plugins/defaults/memory/memory-retrospective-prompt.ts +5 -5
- package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +2 -2
- package/src/plugins/defaults/memory/src/__tests__/memory-v2-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/boot-maintenance.test.ts +20 -20
- package/src/plugins/defaults/memory/substrate/__tests__/cli-command-store.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/skill-store.test.ts +3 -3
- package/src/plugins/defaults/memory/substrate/boot-maintenance.ts +17 -17
- package/src/plugins/defaults/memory/substrate/cli-command-store.ts +2 -2
- package/src/plugins/defaults/memory/substrate/prompts/consolidation.ts +1 -1
- package/src/plugins/defaults/memory/substrate/skill-store.ts +4 -4
- package/src/plugins/defaults/memory/v3/__tests__/maintain-job.test.ts +3 -3
- package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +2 -2
- package/src/plugins/defaults/memory/v3/maintain-job.ts +10 -10
- package/src/plugins/defaults/memory/v3/orchestrate.ts +3 -3
- package/src/plugins/defaults/memory/worker.ts +5 -5
- package/src/plugins/defaults/workspace/injectors.ts +2 -2
- package/src/plugins/mtime-cache.ts +1 -1
- package/src/plugins/source-versions.ts +1 -1
- package/src/plugins/types.ts +1 -1
- package/src/prompts/__tests__/system-prompt.test.ts +1 -1
- package/src/prompts/normalize-onboarding.ts +1 -1
- package/src/prompts/persona-resolver.ts +1 -1
- package/src/prompts/templates/system-sections.ts +3 -3
- package/src/providers/__tests__/cadet-connection-routing.test.ts +7 -7
- package/src/providers/__tests__/cadet-mismatch-routing.test.ts +12 -12
- package/src/providers/__tests__/connection-model-compat.test.ts +2 -2
- package/src/providers/__tests__/dispatch-connection-routing.test.ts +10 -10
- package/src/providers/__tests__/inference.test.ts +2 -2
- package/src/providers/__tests__/preflight-resolved-config.test.ts +16 -16
- package/src/providers/__tests__/retry-callsite.test.ts +1 -1
- package/src/providers/__tests__/satellite-connection-routing.test.ts +4 -4
- package/src/providers/__tests__/search-provider-catalog.test.ts +2 -2
- package/src/providers/__tests__/voice-error-copy.test.ts +3 -3
- package/src/providers/anthropic/client.ts +1 -1
- package/src/providers/cadet/client.ts +1 -1
- package/src/providers/cadet-model-routing.test.ts +19 -19
- package/src/providers/cadet-model-routing.ts +23 -23
- package/src/providers/call-site-routing.ts +10 -10
- package/src/providers/{platform-proxy → cloud-proxy}/constants.ts +11 -11
- package/src/providers/{platform-proxy → cloud-proxy}/context.ts +26 -26
- package/src/providers/connection-resolution.ts +43 -43
- package/src/providers/fallback-breaker.ts +2 -2
- package/src/providers/fetch-provider-catalog.ts +3 -3
- package/src/providers/gemini/client.ts +5 -5
- package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +3 -3
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +8 -8
- package/src/providers/inference/__tests__/base-url-security.test.ts +4 -4
- package/src/providers/inference/adapter-factory.ts +35 -35
- package/src/providers/inference/auth.ts +10 -10
- package/src/providers/inference/backfill.ts +11 -11
- package/src/providers/inference/connection-availability.ts +24 -24
- package/src/providers/inference/connections.ts +18 -20
- package/src/providers/inference/profile-probe.ts +4 -4
- package/src/providers/inference/resolve-auth.ts +8 -8
- package/src/providers/jev/ask.test.ts +1 -1
- package/src/providers/jev/ask.ts +2 -2
- package/src/providers/model-catalog.ts +8 -9
- package/src/providers/openai/__tests__/api-error-normalization.test.ts +3 -3
- package/src/providers/openai/api-error-normalization.ts +2 -2
- package/src/providers/provider-availability.ts +4 -4
- package/src/providers/provider-env-vars.ts +1 -1
- package/src/providers/provider-secret-catalog.ts +1 -1
- package/src/providers/registry.ts +20 -20
- package/src/providers/retry.ts +26 -26
- package/src/providers/routing-identity.ts +10 -10
- package/src/providers/search-provider-catalog.ts +2 -2
- package/src/providers/speech-to-text/__tests__/{cadet-managed-realtime.test.ts → cadet-cloud-realtime.test.ts} +3 -3
- package/src/providers/speech-to-text/__tests__/{cadet-managed.test.ts → cadet-cloud.test.ts} +35 -35
- package/src/providers/speech-to-text/__tests__/deepgram-flux-realtime.test.ts +1 -1
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +27 -27
- package/src/providers/speech-to-text/{cadet-managed-flux-realtime.ts → cadet-cloud-flux-realtime.ts} +6 -8
- package/src/providers/speech-to-text/{cadet-managed-realtime.ts → cadet-cloud-realtime.ts} +3 -3
- package/src/providers/speech-to-text/{cadet-managed.ts → cadet-cloud.ts} +18 -20
- package/src/providers/speech-to-text/cadet-speech-relay-connection.ts +7 -7
- package/src/providers/speech-to-text/deepgram-flux-frames.ts +3 -3
- package/src/providers/speech-to-text/deepgram-flux-realtime.ts +4 -4
- package/src/providers/speech-to-text/provider-catalog.ts +3 -3
- package/src/providers/speech-to-text/resolve.ts +26 -28
- package/src/providers/together/client.ts +1 -1
- package/src/providers/types.ts +4 -4
- package/src/providers/voice-error-copy.ts +1 -1
- package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +10 -10
- package/src/runtime/agent-wake.ts +1 -1
- package/src/runtime/auth/__tests__/middleware.test.ts +1 -1
- package/src/runtime/auth/middleware.ts +1 -1
- package/src/runtime/auth/scopes.ts +1 -1
- package/src/runtime/capabilities.ts +1 -1
- package/src/runtime/channel-invite-transports/discord.ts +1 -1
- package/src/runtime/channel-invite-transports/email.ts +2 -2
- package/src/runtime/channel-readiness-service.ts +15 -13
- package/src/runtime/channel-reply-session.test.ts +1 -1
- package/src/runtime/channel-reply-session.ts +1 -1
- package/src/runtime/http-server.ts +4 -4
- package/src/runtime/introduction-policy.ts +4 -4
- package/src/runtime/migrations/__tests__/origin-mode.test.ts +14 -14
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +1 -1
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +3 -4
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge.test.ts +6 -7
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +1 -1
- package/src/runtime/migrations/migration-transport.ts +3 -3
- package/src/runtime/migrations/origin-mode.ts +6 -9
- package/src/runtime/migrations/vbundle-import-policy.ts +2 -2
- package/src/runtime/migrations/vbundle-importer.ts +4 -4
- package/src/runtime/migrations/vbundle-streaming-importer.ts +6 -6
- package/src/runtime/migrations/vbundle-validator.ts +1 -1
- package/src/runtime/routes/__tests__/{platform-credits-routes.test.ts → cloud-credits-routes.test.ts} +9 -9
- package/src/runtime/routes/__tests__/{platform-invoice-routes.test.ts → cloud-invoice-routes.test.ts} +13 -13
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +1 -1
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +126 -82
- package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +5 -5
- package/src/runtime/routes/__tests__/default-provider-routes.test.ts +10 -10
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +18 -18
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +18 -16
- package/src/runtime/routes/__tests__/inference-send-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/migration-cadet-metadata-reconcile.test.ts +5 -20
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -22
- package/src/runtime/routes/__tests__/oauth-proxy-routes.test.ts +27 -27
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +5 -5
- package/src/runtime/routes/__tests__/ps-routes.test.ts +5 -3
- package/src/runtime/routes/__tests__/roadmap-routes.test.ts +15 -15
- package/src/runtime/routes/__tests__/webhook-routes.test.ts +31 -31
- package/src/runtime/routes/app-management-routes.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +1 -1
- package/src/runtime/routes/auth-routes.ts +14 -14
- package/src/runtime/routes/avatar-routes.ts +0 -14
- package/src/runtime/routes/background-wake-routes.ts +4 -4
- package/src/runtime/routes/channel-availability-routes.ts +4 -4
- package/src/runtime/routes/client-routes.ts +5 -5
- package/src/runtime/routes/cloud-credentials.ts +45 -0
- package/src/runtime/routes/{platform-routes.ts → cloud-routes.ts} +86 -119
- package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +345 -667
- package/src/runtime/routes/credential-routes.ts +28 -30
- package/src/runtime/routes/default-provider-routes.ts +1 -1
- package/src/runtime/routes/desktop-setup-routes.test.ts +5 -5
- package/src/runtime/routes/desktop-setup-routes.ts +1 -1
- package/src/runtime/routes/domain-routes.ts +15 -21
- package/src/runtime/routes/email-routes.ts +13 -13
- package/src/runtime/routes/errors.ts +1 -1
- package/src/runtime/routes/gateway-status-routes.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +3 -3
- package/src/runtime/routes/inbound-message-handler.ts +1 -1
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +1 -1
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +1 -1
- package/src/runtime/routes/index.ts +1 -1
- package/src/runtime/routes/inference-profile-availability-guard.ts +5 -5
- package/src/runtime/routes/inference-profiles-routes.ts +11 -11
- package/src/runtime/routes/inference-provider-connection-routes.ts +24 -24
- package/src/runtime/routes/ingress-status-routes.ts +1 -1
- package/src/runtime/routes/integrations/a2a.ts +2 -2
- package/src/runtime/routes/integrations/twilio.ts +21 -35
- package/src/runtime/routes/internal-telemetry-routes.ts +2 -2
- package/src/runtime/routes/live-voice-routes.test.ts +4 -4
- package/src/runtime/routes/live-voice-routes.ts +6 -6
- package/src/runtime/routes/migration-routes.ts +34 -40
- package/src/runtime/routes/oauth-commands-routes.ts +31 -31
- package/src/runtime/routes/oauth-providers.ts +5 -5
- package/src/runtime/routes/oauth-proxy-passthrough.test.ts +1 -1
- package/src/runtime/routes/oauth-proxy-passthrough.ts +8 -8
- package/src/runtime/routes/oauth-proxy-routes.ts +15 -17
- package/src/runtime/routes/oauth-request-hints.test.ts +1 -1
- package/src/runtime/routes/oauth-request-hints.ts +1 -1
- package/src/runtime/routes/plugins-routes.ts +9 -9
- package/src/runtime/routes/profiler-routes.ts +1 -1
- package/src/runtime/routes/ps-routes.ts +4 -0
- package/src/runtime/routes/roadmap-routes.ts +18 -20
- package/src/runtime/routes/secret-routes.ts +20 -61
- package/src/runtime/routes/settings-routes.ts +18 -23
- package/src/runtime/routes/telemetry-routes.ts +4 -4
- package/src/runtime/routes/tts-routes.ts +4 -4
- package/src/runtime/routes/user-route-resolution.ts +1 -1
- package/src/runtime/routes/webhook-routes.ts +18 -18
- package/src/runtime/routes/workflow-routes.ts +5 -5
- package/src/runtime/sync/resource-sync-events.ts +2 -2
- package/src/runtime/verification-outbound-actions.ts +4 -4
- package/src/schedule/integration-status.ts +6 -6
- package/src/schedule/run-script.ts +1 -1
- package/src/schedule/schedule-timezone.ts +1 -1
- package/src/schedule/worker.ts +5 -5
- package/src/security/auth-fallback-events-store.ts +1 -1
- package/src/security/oauth2.ts +4 -4
- package/src/skills/available-skills.ts +4 -4
- package/src/skills/catalog-files.ts +8 -8
- package/src/skills/catalog-install.ts +12 -12
- package/src/skills/categories-cache.ts +3 -3
- package/src/skills/clawhub.ts +1 -1
- package/src/skills/{platform-compatibility.test.ts → cloud-compatibility.test.ts} +7 -7
- package/src/skills/{platform-compatibility.ts → cloud-compatibility.ts} +2 -4
- package/src/skills/{managed-store.ts → cloud-store.ts} +21 -23
- package/src/skills/inline-command-runner.ts +1 -1
- package/src/skills/install-meta.ts +1 -1
- package/src/skills/path-classifier.ts +4 -4
- package/src/skills/skill-history.ts +4 -4
- package/src/skills/skillssh-registry.ts +1 -1
- package/src/stt/__tests__/daemon-batch-transcriber.test.ts +1 -1
- package/src/stt/daemon-batch-transcriber.ts +7 -7
- package/src/stt/types.ts +3 -3
- package/src/subagent/manager.ts +15 -15
- package/src/subagent/types.ts +1 -1
- package/src/telegram/__tests__/webhook-health.test.ts +16 -16
- package/src/telegram/webhook-health.ts +10 -10
- package/src/telemetry/__tests__/config-setting-events-store.test.ts +1 -1
- package/src/telemetry/__tests__/outbox-test-harness.ts +2 -2
- package/src/telemetry/config-setting-events-store.ts +1 -1
- package/src/telemetry/config-setting-snapshot.ts +1 -1
- package/src/telemetry/memory-corpus-size.ts +1 -1
- package/src/telemetry/memory-tier-reporter.test.ts +2 -2
- package/src/telemetry/memory-tier-reporter.ts +3 -3
- package/src/telemetry/telemetry-event-sources.test.ts +2 -2
- package/src/telemetry/telemetry-event-sources.ts +9 -9
- package/src/telemetry/telemetry-events-outbox.ts +2 -2
- package/src/telemetry/telemetry-wire-validation.test.ts +1 -1
- package/src/telemetry/telemetry-wire-validation.ts +3 -3
- package/src/telemetry/telemetry-wire.generated.ts +1 -1
- package/src/telemetry/tool-audit.ts +1 -1
- package/src/telemetry/tool-executed-events-store.test.ts +1 -1
- package/src/telemetry/trace-collection-policy.ts +4 -4
- package/src/telemetry/turn-events-store.ts +1 -1
- package/src/telemetry/turn-outcome.ts +1 -1
- package/src/telemetry/turn-trace-store.ts +2 -2
- package/src/telemetry/types.test.ts +1 -1
- package/src/telemetry/types.ts +19 -19
- package/src/telemetry/usage-telemetry-reporter.test.ts +42 -42
- package/src/telemetry/usage-telemetry-reporter.ts +17 -17
- package/src/telemetry/watchdog-direct-emit.test.ts +9 -9
- package/src/telemetry/watchdog-direct-emit.ts +10 -10
- package/src/tools/__tests__/side-effect-abort-guard.test.ts +2 -2
- package/src/tools/browser/cdp-client/factory.ts +1 -1
- package/src/tools/computer-use/target.ts +2 -2
- package/src/tools/credentials/store.ts +2 -20
- package/src/tools/network/__tests__/{managed-search-proxy.test.ts → cloud-search-proxy.test.ts} +20 -20
- package/src/tools/network/__tests__/web-search.test.ts +14 -14
- package/src/tools/network/{managed-search-proxy.ts → cloud-search-proxy.ts} +13 -13
- package/src/tools/network/web-search.ts +9 -9
- package/src/tools/permission-checker.ts +2 -2
- package/src/tools/shared/input-misuse.ts +1 -1
- package/src/tools/shared/input-repairs.ts +4 -4
- package/src/tools/skills/{delete-managed.ts → delete-cloud.ts} +4 -4
- package/src/tools/skills/find-similar-skills.test.ts +7 -7
- package/src/tools/skills/find-similar-skills.ts +15 -15
- package/src/tools/skills/load.ts +6 -6
- package/src/tools/skills/{scaffold-managed.ts → scaffold-cloud.ts} +16 -16
- package/src/tools/skills/skill-script-runner.ts +2 -2
- package/src/tools/terminal/safe-env.ts +3 -3
- package/src/tools/tool-types.ts +2 -2
- package/src/tools/types.ts +2 -2
- package/src/tools/ui-surface/surface-shape-docs.ts +2 -2
- package/src/tools/workflows/manage-workflows.ts +1 -1
- package/src/tools/workspace-tools/loader.ts +1 -1
- package/src/tts/__tests__/cadet-provider.test.ts +5 -5
- package/src/tts/provider-catalog.ts +1 -1
- package/src/tts/providers/cadet-provider.ts +23 -23
- package/src/tts/providers/cadet-tts-socket.ts +2 -2
- package/src/tts/tts-config-resolver.ts +1 -1
- package/src/tts/tts-voice-field.ts +3 -3
- package/src/usage/subagent-attribution.ts +1 -1
- package/src/util/__tests__/process-table.test.ts +47 -0
- package/src/util/canonicalize-identity.ts +1 -1
- package/src/util/cgroup-cpu.ts +5 -5
- package/src/util/cgroup-memory.ts +2 -2
- package/src/util/container-cpu-sampler.ts +4 -4
- package/src/util/disk-usage.ts +4 -4
- package/src/util/errors.ts +3 -3
- package/src/util/layout.ts +479 -0
- package/src/util/oom-priority.ts +1 -1
- package/src/util/platform.ts +12 -468
- package/src/util/process-table.ts +39 -5
- package/src/util/provider-error-patterns.ts +2 -2
- package/src/watch/__tests__/watch-retro.test.ts +2 -2
- package/src/watch/watch-retro.ts +1 -1
- package/src/watcher/__tests__/telemetry.test.ts +2 -2
- package/src/watcher/telemetry.ts +1 -1
- package/src/windows-compiled-cli.ts +1 -1
- package/src/workspace/adaptive-thinking-repair.ts +4 -4
- package/src/workspace/byok-default-profile-ensure.ts +7 -7
- package/src/workspace/git-service.ts +2 -2
- package/src/workspace/migrations/006-services-config.ts +1 -1
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +1 -1
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +1 -1
- package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +1 -1
- package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +4 -4
- package/src/workspace/migrations/087-memory-router-balanced-profile.ts +3 -3
- package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +4 -4
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +5 -5
- package/src/workspace/migrations/100-upgrade-quality-profile-to-fable-5.ts +4 -4
- package/src/workspace/migrations/101-upgrade-balanced-economy-to-minimax-m3.ts +4 -4
- package/src/workspace/migrations/103-upgrade-quality-profile-to-opus-4-8.ts +5 -5
- package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +1 -1
- package/src/workspace/migrations/106-drop-collect-usage-data.ts +1 -1
- package/src/workspace/migrations/108-drop-balanced-economy-profile.ts +4 -4
- package/src/workspace/migrations/109-swap-quality-profile-to-glm-5p2.ts +11 -11
- package/src/workspace/migrations/110-flip-balanced-profile-to-together.ts +6 -6
- package/src/workspace/migrations/113-swap-balanced-profile-to-glm-5p2.ts +5 -5
- package/src/workspace/migrations/114-swap-quality-profile-to-opus.ts +4 -4
- package/src/workspace/migrations/115-drop-frontier-profile.ts +5 -5
- package/src/workspace/migrations/123-swap-quality-profile-to-fable.ts +5 -5
- package/src/workspace/migrations/125-repoint-managed-connections-to-cadet.ts +3 -3
- package/src/workspace/migrations/126-strip-managed-profile-bodies.ts +2 -2
- package/src/workspace/migrations/127-backfill-default-provider.ts +6 -6
- package/src/workspace/migrations/130-speech-mode-to-provider.ts +4 -4
- package/src/workspace/migrations/131-drop-web-fetch-mode.ts +1 -1
- package/src/workspace/migrations/132-web-search-mode-to-provider.ts +6 -6
- package/src/workspace/migrations/133-collapse-provider-connections.ts +3 -3
- package/src/workspace/migrations/134-image-generation-mode-to-provider.ts +4 -4
- package/src/workspace/migrations/136-repair-stale-fireworks-kimi-model-id.ts +2 -2
- package/src/workspace/migrations/137-repair-retired-fireworks-minimax-model-id.ts +2 -2
- package/src/workspace/migrations/139-clear-renamed-cost-profile-label.ts +2 -2
- package/src/workspace/migrations/141-stt-english-default-to-multilingual.ts +4 -4
- package/src/workspace/migrations/144-convert-stranded-subscription-openai-profiles.ts +1 -1
- package/src/workspace/migrations/145-collapse-profile-bindings-to-entries.ts +2 -2
- package/src/workspace/migrations/146-repair-retired-fireworks-deepseek-flash-model-id.ts +2 -2
- package/src/workspace/migrations/148-strip-unsupported-fallback-profiles.ts +2 -2
- package/src/workspace/migrations/150-stt-flux-provider-to-model-family.ts +1 -1
- package/src/workspace/migrations/151-repair-renamed-fireworks-deepseek-pro-model-id.ts +2 -2
- package/src/workspace/migrations/152-repair-retired-fireworks-minimax-m2p7-model-id.ts +2 -2
- package/src/workspace/migrations/159-rename-colliding-jev-profile-name.ts +2 -2
- package/src/workspace/migrations/160-repair-retired-fireworks-model-ids.ts +2 -2
- package/src/workspace/migrations/161-repair-retired-fireworks-glm-5p2-model-id.ts +2 -2
- package/src/workspace/migrations/__tests__/141-stt-english-default-to-multilingual.test.ts +1 -1
- package/src/workspace/migrations/__tests__/150-stt-flux-provider-to-model-family.test.ts +1 -1
- package/src/workspace/migrations/registry.ts +6 -6
- package/src/workspace/top-level-renderer.ts +1 -1
- package/src/workspace/turn-commit.ts +2 -2
- package/src/__tests__/config-loader-platform-defaults.test.ts +0 -606
- package/src/__tests__/mock-gateway-ipc.ts +0 -260
- package/src/api/events/platform-disconnected.ts +0 -21
- package/src/api/events/show-platform-login.ts +0 -20
- package/src/config/platform-rehydration.ts +0 -60
- package/src/platform/feature-gate.ts +0 -8
- package/src/plugins/defaults/platform-hosted/package.json +0 -14
- package/src/runtime/routes/platform-managed-credentials.ts +0 -50
- /package/src/__tests__/{gateway-client-managed-outbound.test.ts → gateway-client-cloud-outbound.test.ts} +0 -0
- /package/src/__tests__/{secure-keys-managed-failover.test.ts → secure-keys-cloud-failover.test.ts} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
2
|
+
* The cloud-pod tier of webhook URL resolution, shared by the two seams that
|
|
3
3
|
* resolve callback URLs: `resolveCallbackUrl` and the `webhooks_register` route
|
|
4
4
|
* handler.
|
|
5
5
|
*
|
|
6
6
|
* A pod's Tunnel only forwards subpaths the gateway has claimed, so the
|
|
7
7
|
* published ingress URL is handed out only once the claim succeeds. Anything
|
|
8
|
-
* else leaves the caller to register with the
|
|
8
|
+
* else leaves the caller to register with the cloud instead.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -51,11 +51,11 @@ export interface IngressConfig {
|
|
|
51
51
|
* True when the user has explicitly switched public ingress off.
|
|
52
52
|
*
|
|
53
53
|
* An explicit opt-out is a decision not to accept inbound webhooks at all, so
|
|
54
|
-
* it must not be silently routed around via
|
|
55
|
-
* ingress config is merely "not set up yet" and is eligible for the
|
|
54
|
+
* it must not be silently routed around via cloud callbacks. An *absent*
|
|
55
|
+
* ingress config is merely "not set up yet" and is eligible for the cloud
|
|
56
56
|
* fallback, so only a literal `false` counts here.
|
|
57
57
|
*
|
|
58
|
-
* Every consumer that offers a
|
|
58
|
+
* Every consumer that offers a cloud-callback fallback has to consult this
|
|
59
59
|
* before falling back, which is why it lives here rather than in each caller.
|
|
60
60
|
*/
|
|
61
61
|
export function isPublicIngressDisabled(config: IngressConfig): boolean {
|
|
@@ -39,6 +39,7 @@ import {
|
|
|
39
39
|
normalizeHttpPublicBaseUrlWithoutTrailingSlash,
|
|
40
40
|
trimmedNonEmptyString,
|
|
41
41
|
} from "@mycadet/service-contracts/ingress";
|
|
42
|
+
import { z } from "zod";
|
|
42
43
|
|
|
43
44
|
import { isPlainObject } from "../util/object.js";
|
|
44
45
|
import { truncate } from "../util/truncate.js";
|
|
@@ -81,11 +82,17 @@ const UNREADABLE_CONFIG_DETAIL = "no assistant config served";
|
|
|
81
82
|
const UNMARKED_CONFIG_DETAIL = "not a pairing edge config";
|
|
82
83
|
|
|
83
84
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
85
|
+
* The config a self-hosted edge serves (`remoteWebIngressConfig` in
|
|
86
|
+
* `cli/src/lib/nginx-ingress.ts`). The `remote` field is always stamped by
|
|
87
|
+
* that injector and never carries `"cloud"` — that spelling is the cloud's
|
|
88
|
+
* own serving, which is not an edge — so the field is the marker separating
|
|
89
|
+
* the edge from any other JSON a live URL serves.
|
|
87
90
|
*/
|
|
88
|
-
const
|
|
91
|
+
const ServedConfigSchema = z.object({
|
|
92
|
+
remote: z.string(),
|
|
93
|
+
assistantId: z.string().optional(),
|
|
94
|
+
assistantName: z.string().optional(),
|
|
95
|
+
});
|
|
89
96
|
|
|
90
97
|
export async function probeTunnel(args: {
|
|
91
98
|
publicBaseUrl: string;
|
|
@@ -241,18 +248,17 @@ async function readServedConfig(
|
|
|
241
248
|
let detail = UNREADABLE_CONFIG_DETAIL;
|
|
242
249
|
try {
|
|
243
250
|
const body: unknown = await response.json();
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
}
|
|
254
|
-
detail = UNMARKED_CONFIG_DETAIL;
|
|
251
|
+
const parsed = ServedConfigSchema.safeParse(body);
|
|
252
|
+
if (parsed.success && parsed.data.remote !== "cloud") {
|
|
253
|
+
return {
|
|
254
|
+
kind: "served",
|
|
255
|
+
config: {
|
|
256
|
+
assistantId: trimmedNonEmptyString(parsed.data.assistantId),
|
|
257
|
+
assistantName: trimmedNonEmptyString(parsed.data.assistantName),
|
|
258
|
+
},
|
|
259
|
+
};
|
|
255
260
|
}
|
|
261
|
+
detail = UNMARKED_CONFIG_DETAIL;
|
|
256
262
|
} catch {
|
|
257
263
|
/* an unparseable body is an edge answering with something else */
|
|
258
264
|
}
|
|
@@ -3,14 +3,14 @@ import { isAssistantFeatureFlagEnabled } from "../config/assistant-feature-flags
|
|
|
3
3
|
const TUNNEL_WEBHOOKS_FLAG_KEY = "tunnel-webhooks" as const;
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Whether
|
|
6
|
+
* Whether cloud pods resolve webhook callback URLs from the
|
|
7
7
|
* Tunnel-published ingress URL instead of registering platform callback
|
|
8
8
|
* routes.
|
|
9
9
|
*
|
|
10
|
-
* Gates the
|
|
10
|
+
* Gates the cloud-pod tier in all three webhook resolution sites
|
|
11
11
|
* (`resolveCallbackUrl`, `hasWebhookRoutingConfigured`,
|
|
12
12
|
* `handleWebhooksRegister`), which must agree tier for tier. Off means the
|
|
13
|
-
* pre-Tunnel behavior:
|
|
13
|
+
* pre-Tunnel behavior: cloud pods always register with the cloud
|
|
14
14
|
* gateway. On means ingress-first with platform registration as the
|
|
15
15
|
* fallback, so a pod whose tunnel has not published a URL yet keeps
|
|
16
16
|
* working either way.
|
|
@@ -108,7 +108,7 @@ describe("AssistantIpcServer DB migration readiness gate", () => {
|
|
|
108
108
|
setDbMigrationFailed(new Error("boom"));
|
|
109
109
|
expect(gate("admin_rollbackmigrations_post")).toBeNull();
|
|
110
110
|
expect(gate("migrations_import_post")).toBeNull();
|
|
111
|
-
// All restore transports are repair-capable: preflights, the
|
|
111
|
+
// All restore transports are repair-capable: preflights, the cloud
|
|
112
112
|
// platform's GCS path, and its job-status polling.
|
|
113
113
|
expect(gate("migrations_importpreflight_post")).toBeNull();
|
|
114
114
|
expect(gate("migrations_importfromgcs_post")).toBeNull();
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Behavioral parity tests for the email CLI commands.
|
|
3
3
|
*
|
|
4
4
|
* Exercises the full IPC round-trip using a real AssistantIpcServer with a
|
|
5
|
-
* mocked
|
|
6
|
-
* - sends the correct HTTP request to the
|
|
5
|
+
* mocked CadetCloudClient. Validates that each email subcommand:
|
|
6
|
+
* - sends the correct HTTP request to the cloud API
|
|
7
7
|
* - surfaces success responses to the CLI caller
|
|
8
8
|
* - surfaces platform errors to the CLI caller
|
|
9
9
|
*/
|
|
@@ -20,7 +20,7 @@ import { runAssistantCommandFull } from "../../cli/__tests__/run-assistant-comma
|
|
|
20
20
|
import { AssistantIpcServer } from "../assistant-server.js";
|
|
21
21
|
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
23
|
-
// Mock state — set up a controllable
|
|
23
|
+
// Mock state — set up a controllable CadetCloudClient at module boundary
|
|
24
24
|
// ---------------------------------------------------------------------------
|
|
25
25
|
|
|
26
26
|
let mockFetchFn: (
|
|
@@ -31,10 +31,10 @@ let mockFetchFn: (
|
|
|
31
31
|
|
|
32
32
|
const mockAssistantId = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
|
|
33
33
|
|
|
34
|
-
mock.module("../../
|
|
35
|
-
|
|
34
|
+
mock.module("../../cloud/client.js", () => ({
|
|
35
|
+
CadetCloudClient: {
|
|
36
36
|
create: async () => ({
|
|
37
|
-
|
|
37
|
+
cloudAssistantId: mockAssistantId,
|
|
38
38
|
fetch: (path: string, init?: RequestInit) => mockFetchFn(path, init),
|
|
39
39
|
}),
|
|
40
40
|
},
|
|
@@ -361,7 +361,7 @@ test("send --json returns delivery_id", async () => {
|
|
|
361
361
|
expect(process.exitCode).toBe(0);
|
|
362
362
|
});
|
|
363
363
|
|
|
364
|
-
test("send --attach reads the file and forwards base64 attachments to the
|
|
364
|
+
test("send --attach reads the file and forwards base64 attachments to the cloud", async () => {
|
|
365
365
|
const dir = mkdtempSync(join(tmpdir(), "email-attach-"));
|
|
366
366
|
const filePath = join(dir, "report.pdf");
|
|
367
367
|
const fileBytes = "pdf-bytes-here";
|
|
@@ -413,7 +413,7 @@ test("send --attach reads the file and forwards base64 attachments to the platfo
|
|
|
413
413
|
}
|
|
414
414
|
});
|
|
415
415
|
|
|
416
|
-
test("send with a missing --attach path fails without calling the
|
|
416
|
+
test("send with a missing --attach path fails without calling the cloud", async () => {
|
|
417
417
|
let sendCalled = false;
|
|
418
418
|
mockFetchFn = async (path) => {
|
|
419
419
|
if (path.includes("/email-addresses/")) {
|
|
@@ -8,11 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { afterEach, describe, expect, test } from "bun:test";
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
getMockPersistentCallCount,
|
|
13
|
-
mockGatewayIpc,
|
|
14
|
-
resetMockGatewayIpc,
|
|
15
|
-
} from "../__tests__/mock-gateway-ipc.js";
|
|
11
|
+
import { mockIpc } from "../__tests__/requests-mock.js";
|
|
16
12
|
import { ServiceUnavailableError } from "../runtime/routes/errors.js";
|
|
17
13
|
import {
|
|
18
14
|
ipcCall,
|
|
@@ -25,7 +21,6 @@ import {
|
|
|
25
21
|
|
|
26
22
|
afterEach(() => {
|
|
27
23
|
resetPersistentClient();
|
|
28
|
-
resetMockGatewayIpc();
|
|
29
24
|
});
|
|
30
25
|
|
|
31
26
|
// ---------------------------------------------------------------------------
|
|
@@ -34,22 +29,24 @@ afterEach(() => {
|
|
|
34
29
|
|
|
35
30
|
describe("ipcCall", () => {
|
|
36
31
|
test("delegates to package ipcCall and returns result", async () => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
});
|
|
32
|
+
const gateway = await mockIpc("gateway");
|
|
33
|
+
gateway.setDefaults({ test_method: { key: "value" } });
|
|
40
34
|
|
|
41
35
|
const result = await ipcCall("test_method");
|
|
42
36
|
expect(result).toEqual({ key: "value" });
|
|
43
37
|
});
|
|
44
38
|
|
|
45
39
|
test("returns undefined when mock simulates error", async () => {
|
|
46
|
-
|
|
40
|
+
const gateway = await mockIpc("gateway");
|
|
41
|
+
gateway.failConnect();
|
|
47
42
|
|
|
48
43
|
const result = await ipcCall("test_method");
|
|
49
44
|
expect(result).toBeUndefined();
|
|
50
45
|
});
|
|
51
46
|
|
|
52
47
|
test("returns undefined for unconfigured methods", async () => {
|
|
48
|
+
await mockIpc("gateway");
|
|
49
|
+
|
|
53
50
|
const result = await ipcCall("unconfigured_method");
|
|
54
51
|
expect(result).toBeUndefined();
|
|
55
52
|
});
|
|
@@ -61,16 +58,16 @@ describe("ipcCall", () => {
|
|
|
61
58
|
|
|
62
59
|
describe("ipcCallPersistent", () => {
|
|
63
60
|
test("returns result from persistent client", async () => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
});
|
|
61
|
+
const gateway = await mockIpc("gateway");
|
|
62
|
+
gateway.setDefaults({ persistent_test: "persistent-result" });
|
|
67
63
|
|
|
68
64
|
const result = await ipcCallPersistent("persistent_test");
|
|
69
65
|
expect(result).toBe("persistent-result");
|
|
70
66
|
});
|
|
71
67
|
|
|
72
68
|
test("maps a missing gateway socket to ServiceUnavailableError", async () => {
|
|
73
|
-
|
|
69
|
+
const gateway = await mockIpc("gateway");
|
|
70
|
+
gateway.failConnect();
|
|
74
71
|
|
|
75
72
|
await expect(ipcCallPersistent("any_method")).rejects.toBeInstanceOf(
|
|
76
73
|
ServiceUnavailableError,
|
|
@@ -92,21 +89,23 @@ describe("ipcCallPersistent", () => {
|
|
|
92
89
|
|
|
93
90
|
describe("ipcGetFeatureFlags", () => {
|
|
94
91
|
test("parses boolean flag values from IPC response", async () => {
|
|
95
|
-
|
|
92
|
+
const gateway = await mockIpc("gateway");
|
|
93
|
+
gateway.setDefaults({
|
|
94
|
+
get_feature_flags: { "flag-a": true, "flag-b": false },
|
|
95
|
+
});
|
|
96
96
|
|
|
97
97
|
const flags = await ipcGetFeatureFlags();
|
|
98
98
|
expect(flags).toEqual({ "flag-a": true, "flag-b": false });
|
|
99
99
|
});
|
|
100
100
|
|
|
101
101
|
test("accepts boolean and string values, filters other types from response", async () => {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
},
|
|
102
|
+
const gateway = await mockIpc("gateway");
|
|
103
|
+
gateway.setDefaults({
|
|
104
|
+
get_feature_flags: {
|
|
105
|
+
valid: true,
|
|
106
|
+
number: 42,
|
|
107
|
+
string: "yes",
|
|
108
|
+
nested: { deep: true },
|
|
110
109
|
},
|
|
111
110
|
});
|
|
112
111
|
|
|
@@ -115,25 +114,26 @@ describe("ipcGetFeatureFlags", () => {
|
|
|
115
114
|
});
|
|
116
115
|
|
|
117
116
|
test("returns empty record when IPC returns undefined", async () => {
|
|
118
|
-
// Explicitly suppress the
|
|
119
|
-
// (which exists to short-circuit `initFeatureFlagOverrides()`'s
|
|
120
|
-
// loop) so this test exercises the underlying-undefined path.
|
|
121
|
-
|
|
117
|
+
// Explicitly suppress the transport's default `get_feature_flags`
|
|
118
|
+
// sentinel (which exists to short-circuit `initFeatureFlagOverrides()`'s
|
|
119
|
+
// retry loop) so this test exercises the underlying-undefined path.
|
|
120
|
+
const gateway = await mockIpc("gateway");
|
|
121
|
+
gateway.setDefaults({ get_feature_flags: undefined });
|
|
122
122
|
const flags = await ipcGetFeatureFlags();
|
|
123
123
|
expect(flags).toEqual({});
|
|
124
124
|
});
|
|
125
125
|
|
|
126
126
|
test("returns empty record when IPC returns array", async () => {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
});
|
|
127
|
+
const gateway = await mockIpc("gateway");
|
|
128
|
+
gateway.setDefaults({ get_feature_flags: [true, false] });
|
|
130
129
|
|
|
131
130
|
const flags = await ipcGetFeatureFlags();
|
|
132
131
|
expect(flags).toEqual({});
|
|
133
132
|
});
|
|
134
133
|
|
|
135
134
|
test("returns empty record on error", async () => {
|
|
136
|
-
|
|
135
|
+
const gateway = await mockIpc("gateway");
|
|
136
|
+
gateway.failConnect();
|
|
137
137
|
|
|
138
138
|
const flags = await ipcGetFeatureFlags();
|
|
139
139
|
expect(flags).toEqual({});
|
|
@@ -142,12 +142,11 @@ describe("ipcGetFeatureFlags", () => {
|
|
|
142
142
|
|
|
143
143
|
describe("ipcGetTunnelStatus", () => {
|
|
144
144
|
test("parses the shared Tunnel status response", async () => {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
},
|
|
145
|
+
const gateway = await mockIpc("gateway");
|
|
146
|
+
gateway.setDefaults({
|
|
147
|
+
get_tunnel_status: {
|
|
148
|
+
connected: true,
|
|
149
|
+
publicUrl: "https://example.test",
|
|
151
150
|
},
|
|
152
151
|
});
|
|
153
152
|
|
|
@@ -158,10 +157,9 @@ describe("ipcGetTunnelStatus", () => {
|
|
|
158
157
|
});
|
|
159
158
|
|
|
160
159
|
test("keeps connected status when publicUrl is malformed", async () => {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
},
|
|
160
|
+
const gateway = await mockIpc("gateway");
|
|
161
|
+
gateway.setDefaults({
|
|
162
|
+
get_tunnel_status: { connected: false, publicUrl: 42 },
|
|
165
163
|
});
|
|
166
164
|
|
|
167
165
|
expect(await ipcGetTunnelStatus()).toEqual({
|
|
@@ -171,9 +169,8 @@ describe("ipcGetTunnelStatus", () => {
|
|
|
171
169
|
});
|
|
172
170
|
|
|
173
171
|
test("returns null when connected is missing or malformed", async () => {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
});
|
|
172
|
+
const gateway = await mockIpc("gateway");
|
|
173
|
+
gateway.setDefaults({ get_tunnel_status: { connected: "yes" } });
|
|
177
174
|
|
|
178
175
|
expect(await ipcGetTunnelStatus()).toBeNull();
|
|
179
176
|
});
|
|
@@ -193,38 +190,37 @@ describe("ipcClassifyRisk retry", () => {
|
|
|
193
190
|
const emptyParams = {} as unknown as Parameters<typeof ipcClassifyRisk>[0];
|
|
194
191
|
|
|
195
192
|
test("retries a transient failure and then succeeds", async () => {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
});
|
|
193
|
+
const gateway = await mockIpc("gateway");
|
|
194
|
+
gateway.failFirstN(1);
|
|
195
|
+
gateway.setDefaults({ classify_risk: CLASSIFY_OK });
|
|
200
196
|
|
|
201
197
|
const result = await ipcClassifyRisk(emptyParams);
|
|
202
198
|
expect(result?.risk).toBe("low");
|
|
203
|
-
expect(
|
|
199
|
+
expect(gateway.persistentCallCount("classify_risk")).toBe(2);
|
|
204
200
|
});
|
|
205
201
|
|
|
206
202
|
test("returns undefined after exhausting retries (3 attempts)", async () => {
|
|
207
|
-
|
|
203
|
+
const gateway = await mockIpc("gateway");
|
|
204
|
+
gateway.failConnect();
|
|
208
205
|
|
|
209
206
|
const result = await ipcClassifyRisk(emptyParams);
|
|
210
207
|
expect(result).toBeUndefined();
|
|
211
|
-
expect(
|
|
208
|
+
expect(gateway.persistentCallCount("classify_risk")).toBe(3);
|
|
212
209
|
});
|
|
213
210
|
|
|
214
211
|
test("does NOT retry a structured IpcCallError (fails after 1 attempt)", async () => {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
results: { classify_risk: CLASSIFY_OK },
|
|
219
|
-
});
|
|
212
|
+
const gateway = await mockIpc("gateway");
|
|
213
|
+
gateway.failFirstN(3, { ipcCallError: true });
|
|
214
|
+
gateway.setDefaults({ classify_risk: CLASSIFY_OK });
|
|
220
215
|
|
|
221
216
|
const result = await ipcClassifyRisk(emptyParams);
|
|
222
217
|
expect(result).toBeUndefined();
|
|
223
|
-
expect(
|
|
218
|
+
expect(gateway.persistentCallCount("classify_risk")).toBe(1);
|
|
224
219
|
});
|
|
225
220
|
|
|
226
221
|
test("stops retrying once the signal is aborted", async () => {
|
|
227
|
-
|
|
222
|
+
const gateway = await mockIpc("gateway");
|
|
223
|
+
gateway.failConnect();
|
|
228
224
|
const controller = new AbortController();
|
|
229
225
|
controller.abort();
|
|
230
226
|
|
|
@@ -232,6 +228,6 @@ describe("ipcClassifyRisk retry", () => {
|
|
|
232
228
|
expect(result).toBeUndefined();
|
|
233
229
|
// An already-aborted signal short-circuits the retry loop after the first
|
|
234
230
|
// failed attempt rather than exhausting all three.
|
|
235
|
-
expect(
|
|
231
|
+
expect(gateway.persistentCallCount("classify_risk")).toBe(1);
|
|
236
232
|
});
|
|
237
233
|
});
|
|
@@ -12,9 +12,9 @@ const log = getLogger("gateway-flag-listener");
|
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Refresh the flag-overrides cache from the gateway, then reconcile the
|
|
15
|
-
* flag-gated
|
|
15
|
+
* flag-gated cloud profile (OS Beta). Both the `feature_flags_changed` event
|
|
16
16
|
* and a reconnect refresh the cache; `reconcileFlagGatedProfiles` then adds or
|
|
17
|
-
* removes the
|
|
17
|
+
* removes the cloud profile and, when it reports a change, a `config_changed`
|
|
18
18
|
* broadcast refreshes the profile picker on clients. The reconcile runs only
|
|
19
19
|
* when the refresh confirmed flags loaded from the gateway — a transient IPC
|
|
20
20
|
* failure leaves the cache unset and resolves `os-beta` to its registry default
|
|
@@ -109,7 +109,7 @@ function connectToGateway(): void {
|
|
|
109
109
|
currentBackoffMs = INITIAL_BACKOFF_MS;
|
|
110
110
|
socket = conn;
|
|
111
111
|
// A reconnect may have missed a flag flip while disconnected, so reconcile
|
|
112
|
-
// the
|
|
112
|
+
// the cloud profile too — not just the cache.
|
|
113
113
|
refreshFlagsAndReconcileProfiles("reconnect");
|
|
114
114
|
});
|
|
115
115
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* against the assistant's SQLite database. Migrations (m0002, m0010, m0014,
|
|
4
4
|
* et al.) need raw read/drop access to legacy assistant tables on first boot
|
|
5
5
|
* of upgraded installs, and cross-container SQLite file access corrupts the
|
|
6
|
-
* DB on
|
|
6
|
+
* DB on cloud pods (fcntl locks are not shared across mount namespaces) —
|
|
7
7
|
* so they go through this route.
|
|
8
8
|
*
|
|
9
9
|
* This route is intentionally NOT in the shared ROUTES array — it is a
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tests for the Live Activity phase reporter.
|
|
3
3
|
*
|
|
4
|
-
* The dispatch itself reaches the
|
|
4
|
+
* The dispatch itself reaches the cloud, so these cover the decisions made
|
|
5
5
|
* before it: which frames move the phase, which repeats are suppressed, and
|
|
6
6
|
* that ending is latched. The suppression is the load-bearing part —
|
|
7
7
|
* `tts_audio` arrives many times a second and ActivityKit silently drops
|
|
@@ -258,7 +258,7 @@ describe("LiveActivityReporter", () => {
|
|
|
258
258
|
});
|
|
259
259
|
});
|
|
260
260
|
|
|
261
|
-
// A session can end more than one way and the
|
|
261
|
+
// A session can end more than one way and the cloud deletes the
|
|
262
262
|
// registration on the first, so a second end would push at an activity that
|
|
263
263
|
// is already gone.
|
|
264
264
|
test("ending twice pushes once", async () => {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Live voice on
|
|
2
|
+
* Live voice on cloud speech without a config write.
|
|
3
3
|
*
|
|
4
4
|
* `/v1/live-voice` validates guardian identity only — it does not enforce the
|
|
5
5
|
* caller's `settings.write` scope — so the WebSocket transport must never
|
|
6
6
|
* persist `services.stt/tts.provider`. Instead every live-voice leg resolves
|
|
7
|
-
* the EFFECTIVE providers: while
|
|
7
|
+
* the EFFECTIVE providers: while cloud speech is available, a configured
|
|
8
8
|
* BYOK provider whose credential does not resolve is served by `"cadet"`.
|
|
9
9
|
* These tests pin both halves of that contract — the readiness verdict and
|
|
10
10
|
* the runtime legs agree, and `config.json` is byte-identical afterwards.
|
|
@@ -39,13 +39,13 @@ const realSttResolveModule = {
|
|
|
39
39
|
const realSecureKeysModule = {
|
|
40
40
|
...(await import("../../security/secure-keys.js")),
|
|
41
41
|
};
|
|
42
|
-
const
|
|
43
|
-
...(await import("../../
|
|
42
|
+
const realCloudSpeechModule = {
|
|
43
|
+
...(await import("../../cloud/cloud-speech.js")),
|
|
44
44
|
};
|
|
45
45
|
|
|
46
46
|
// -- Mutable stub state -------------------------------------------------------
|
|
47
47
|
|
|
48
|
-
/** Whether the
|
|
48
|
+
/** Whether the cloud connection can serve cloud speech. */
|
|
49
49
|
let managedAvailable = false;
|
|
50
50
|
/** Credential-store keys that resolve to a value. */
|
|
51
51
|
let providerKeys: Record<string, string>;
|
|
@@ -89,16 +89,16 @@ mock.module("../../security/secure-keys.js", () => ({
|
|
|
89
89
|
: realSecureKeysModule.getSecureKeyAsync(account),
|
|
90
90
|
}));
|
|
91
91
|
|
|
92
|
-
mock.module("../../
|
|
93
|
-
...
|
|
92
|
+
mock.module("../../cloud/cloud-speech.js", () => ({
|
|
93
|
+
...realCloudSpeechModule,
|
|
94
94
|
managedSpeechAvailable: async () =>
|
|
95
95
|
fallbackMocksActive
|
|
96
96
|
? managedAvailable
|
|
97
|
-
:
|
|
97
|
+
: realCloudSpeechModule.managedSpeechAvailable(),
|
|
98
98
|
}));
|
|
99
99
|
|
|
100
|
+
import { resolveEffectiveSpeechProviders } from "../../config/cloud-speech-defaults.js";
|
|
100
101
|
import { getConfig, invalidateConfigCache } from "../../config/loader.js";
|
|
101
|
-
import { resolveEffectiveSpeechProviders } from "../../config/managed-speech-defaults.js";
|
|
102
102
|
import {
|
|
103
103
|
_resetTtsProviderOverridesForTests,
|
|
104
104
|
_setTtsProviderForTests,
|
|
@@ -134,7 +134,7 @@ function readConfigFile(): string {
|
|
|
134
134
|
return readFileSync(CONFIG_PATH, "utf8");
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
/** A streaming TTS adapter standing in for the
|
|
137
|
+
/** A streaming TTS adapter standing in for the cloud `cadet` provider. */
|
|
138
138
|
function registerManagedTtsProvider(): TtsProvider {
|
|
139
139
|
const provider: TtsProvider = {
|
|
140
140
|
id: "cadet",
|
|
@@ -173,8 +173,8 @@ beforeEach(() => {
|
|
|
173
173
|
requestedSttProviders = [];
|
|
174
174
|
});
|
|
175
175
|
|
|
176
|
-
describe("live voice on
|
|
177
|
-
test("unkeyed BYOK TTS resolves the
|
|
176
|
+
describe("live voice on cloud speech", () => {
|
|
177
|
+
test("unkeyed BYOK TTS resolves the cloud provider and reports ready", async () => {
|
|
178
178
|
managedAvailable = true;
|
|
179
179
|
providerKeys = { deepgram: "test-key" };
|
|
180
180
|
const configBefore = readConfigFile();
|
|
@@ -188,7 +188,7 @@ describe("live voice on managed speech", () => {
|
|
|
188
188
|
expect(readConfigFile()).toBe(configBefore);
|
|
189
189
|
});
|
|
190
190
|
|
|
191
|
-
test("synthesis runs on the
|
|
191
|
+
test("synthesis runs on the cloud provider while the config still names the BYOK one", async () => {
|
|
192
192
|
managedAvailable = true;
|
|
193
193
|
providerKeys = { deepgram: "test-key" };
|
|
194
194
|
registerManagedTtsProvider();
|
|
@@ -209,7 +209,7 @@ describe("live voice on managed speech", () => {
|
|
|
209
209
|
expect(readConfigFile()).toBe(configBefore);
|
|
210
210
|
});
|
|
211
211
|
|
|
212
|
-
test("unkeyed BYOK STT resolves the
|
|
212
|
+
test("unkeyed BYOK STT resolves the cloud provider and reports ready", async () => {
|
|
213
213
|
managedAvailable = true;
|
|
214
214
|
providerKeys = { elevenlabs: "test-key" };
|
|
215
215
|
const configBefore = readConfigFile();
|
|
@@ -228,7 +228,7 @@ describe("live voice on managed speech", () => {
|
|
|
228
228
|
expect(readConfigFile()).toBe(configBefore);
|
|
229
229
|
});
|
|
230
230
|
|
|
231
|
-
test("
|
|
231
|
+
test("cloud speech unavailable keeps the configured providers and reports not-ready", async () => {
|
|
232
232
|
managedAvailable = false;
|
|
233
233
|
const configBefore = readConfigFile();
|
|
234
234
|
|
|
@@ -40,8 +40,8 @@ const realSttResolveModule = {
|
|
|
40
40
|
const realSecureKeysModule = {
|
|
41
41
|
...(await import("../../security/secure-keys.js")),
|
|
42
42
|
};
|
|
43
|
-
const
|
|
44
|
-
...(await import("../../
|
|
43
|
+
const realCloudSpeechModule = {
|
|
44
|
+
...(await import("../../cloud/cloud-speech.js")),
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
// -- Mutable stub state --------------------------------------------------------
|
|
@@ -76,12 +76,12 @@ mock.module("../../security/secure-keys.js", () => ({
|
|
|
76
76
|
|
|
77
77
|
let managedAvailable = false;
|
|
78
78
|
|
|
79
|
-
mock.module("../../
|
|
80
|
-
...
|
|
79
|
+
mock.module("../../cloud/cloud-speech.js", () => ({
|
|
80
|
+
...realCloudSpeechModule,
|
|
81
81
|
managedSpeechAvailable: async () =>
|
|
82
82
|
preflightMocksActive
|
|
83
83
|
? managedAvailable
|
|
84
|
-
:
|
|
84
|
+
: realCloudSpeechModule.managedSpeechAvailable(),
|
|
85
85
|
}));
|
|
86
86
|
|
|
87
87
|
import { setConfig } from "../../__tests__/helpers/set-config.js";
|
|
@@ -295,7 +295,7 @@ describe("resolveLiveVoiceCredentialReadiness — managed (cadet) TTS", () => {
|
|
|
295
295
|
expect(readiness).toEqual({ status: "ready" });
|
|
296
296
|
});
|
|
297
297
|
|
|
298
|
-
test("cadet TTS without a
|
|
298
|
+
test("cadet TTS without a cloud connection → connection copy, not API-key copy", async () => {
|
|
299
299
|
ttsProvider = "cadet";
|
|
300
300
|
ttsProviders = {};
|
|
301
301
|
managedAvailable = false;
|
|
@@ -306,7 +306,7 @@ describe("resolveLiveVoiceCredentialReadiness — managed (cadet) TTS", () => {
|
|
|
306
306
|
kind: "tts",
|
|
307
307
|
providerId: "cadet",
|
|
308
308
|
reason:
|
|
309
|
-
'TTS provider "cadet" needs a Cadet Cloud connection for
|
|
309
|
+
'TTS provider "cadet" needs a Cadet Cloud connection for cloud speech',
|
|
310
310
|
},
|
|
311
311
|
]);
|
|
312
312
|
expect(readiness.userMessage).toContain("assistant cloud connect");
|
|
@@ -1593,7 +1593,7 @@ describe("LiveVoiceSession STT", () => {
|
|
|
1593
1593
|
});
|
|
1594
1594
|
|
|
1595
1595
|
test("the pin gate follows the dialed provider, not the configured one", async () => {
|
|
1596
|
-
// A BYOK gemini config without credentials silently dials the
|
|
1596
|
+
// A BYOK gemini config without credentials silently dials the cloud
|
|
1597
1597
|
// cadet transcriber, which DOES honor the pin; the gate must follow
|
|
1598
1598
|
// what was dialed, not what was configured.
|
|
1599
1599
|
const originalRaw = loadRawConfig();
|