@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
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Tests for UsageTelemetryReporter.
|
|
3
3
|
*
|
|
4
4
|
* Covers the authenticated send path (and the skip behavior when credentials
|
|
5
|
-
* are absent or the
|
|
5
|
+
* are absent or the cloud is disabled), watermark advancement, error
|
|
6
6
|
* handling, batch recursion, device ID resolution, and payload shape.
|
|
7
7
|
*/
|
|
8
8
|
import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
|
|
9
9
|
|
|
10
|
-
import type { ConsentState } from "../
|
|
10
|
+
import type { ConsentState } from "../cloud/consent-cache.js";
|
|
11
11
|
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
13
|
// Module mocks (must precede production imports)
|
|
@@ -60,23 +60,23 @@ mock.module("./turn-events-store.js", () => ({
|
|
|
60
60
|
queryUnreportedTurnEvents: mockQueryUnreportedTurnEvents,
|
|
61
61
|
}));
|
|
62
62
|
|
|
63
|
-
let
|
|
63
|
+
let mockCloudClient: Record<string, unknown> | null = null;
|
|
64
64
|
|
|
65
|
-
mock.module("../
|
|
66
|
-
|
|
67
|
-
create: async () =>
|
|
65
|
+
mock.module("../cloud/client.js", () => ({
|
|
66
|
+
CadetCloudClient: {
|
|
67
|
+
create: async () => mockCloudClient,
|
|
68
68
|
},
|
|
69
69
|
}));
|
|
70
70
|
|
|
71
|
-
const
|
|
71
|
+
const mockGetCloudBaseUrl = mock(() => "https://cloud.mycadet.ai");
|
|
72
72
|
|
|
73
73
|
const mockGetPlatformOrganizationId = mock(() => "");
|
|
74
74
|
const mockGetPlatformUserId = mock(() => "");
|
|
75
75
|
|
|
76
76
|
mock.module("../config/env.js", () => ({
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
getCloudBaseUrl: mockGetCloudBaseUrl,
|
|
78
|
+
getCloudOrganizationId: mockGetPlatformOrganizationId,
|
|
79
|
+
getCloudUserId: mockGetPlatformUserId,
|
|
80
80
|
// Re-export anything else the module might import transitively
|
|
81
81
|
str: () => undefined,
|
|
82
82
|
num: () => undefined,
|
|
@@ -105,7 +105,7 @@ const mockGetCachedShareDiagnostics = mock(() => false);
|
|
|
105
105
|
// cases override it with old/empty values.
|
|
106
106
|
const mockGetCachedShareDiagnosticsVersion = mock(() => "2999-01-01");
|
|
107
107
|
|
|
108
|
-
mock.module("../
|
|
108
|
+
mock.module("../cloud/consent-cache.js", () => ({
|
|
109
109
|
getRawShareAnalytics: mockGetRawShareAnalytics,
|
|
110
110
|
getCachedShareDiagnostics: mockGetCachedShareDiagnostics,
|
|
111
111
|
getCachedShareDiagnosticsVersion: mockGetCachedShareDiagnosticsVersion,
|
|
@@ -362,9 +362,9 @@ beforeEach(() => {
|
|
|
362
362
|
mockQueryUnreportedTurnEvents.mockReturnValue([]);
|
|
363
363
|
getDb().delete(toolInvocations).run();
|
|
364
364
|
getTelemetryDb()!.delete(telemetryEvents).run();
|
|
365
|
-
delete process.env.
|
|
366
|
-
delete process.env.
|
|
367
|
-
|
|
365
|
+
delete process.env.CADET_DISABLE_CLOUD;
|
|
366
|
+
delete process.env.IS_CLOUD;
|
|
367
|
+
mockGetCloudBaseUrl.mockReset();
|
|
368
368
|
mockGetDeviceId.mockReset();
|
|
369
369
|
mockGetDeviceId.mockReturnValue("test-device-id");
|
|
370
370
|
mockGetPlatformOrganizationId.mockReset();
|
|
@@ -374,7 +374,7 @@ beforeEach(() => {
|
|
|
374
374
|
|
|
375
375
|
// Defaults
|
|
376
376
|
mockGetFlushCheckpoint.mockReturnValue(null);
|
|
377
|
-
|
|
377
|
+
mockGetCloudBaseUrl.mockReturnValue("https://cloud.mycadet.ai");
|
|
378
378
|
|
|
379
379
|
mockFetch = mock(() =>
|
|
380
380
|
Promise.resolve(new Response('{"accepted":0}', { status: 200 })),
|
|
@@ -384,19 +384,19 @@ beforeEach(() => {
|
|
|
384
384
|
// Default to an authenticated client whose fetch delegates to the mockFetch
|
|
385
385
|
// spy, so the existing payload/body assertions keep working. The reporter
|
|
386
386
|
// sends authenticated-only; tests that exercise the no-credentials path
|
|
387
|
-
// override this with `
|
|
388
|
-
|
|
387
|
+
// override this with `mockCloudClient = null`.
|
|
388
|
+
mockCloudClient = {
|
|
389
389
|
baseUrl: "https://test.mycadet.ai",
|
|
390
390
|
assistantApiKey: "test-key",
|
|
391
|
-
|
|
391
|
+
cloudAssistantId: "asst-123",
|
|
392
392
|
fetch: (path: string, init?: RequestInit) => mockFetch(path, init),
|
|
393
393
|
};
|
|
394
394
|
});
|
|
395
395
|
|
|
396
396
|
afterEach(() => {
|
|
397
397
|
globalThis.fetch = originalFetch;
|
|
398
|
-
delete process.env.
|
|
399
|
-
delete process.env.
|
|
398
|
+
delete process.env.CADET_DISABLE_CLOUD;
|
|
399
|
+
delete process.env.IS_CLOUD;
|
|
400
400
|
});
|
|
401
401
|
|
|
402
402
|
// ---------------------------------------------------------------------------
|
|
@@ -408,10 +408,10 @@ describe("UsageTelemetryReporter", () => {
|
|
|
408
408
|
const clientFetchMock = mock(async (_path: string, _init?: RequestInit) => {
|
|
409
409
|
return new Response('{"accepted":2}', { status: 200 });
|
|
410
410
|
});
|
|
411
|
-
|
|
411
|
+
mockCloudClient = {
|
|
412
412
|
baseUrl: "https://test.mycadet.ai",
|
|
413
413
|
assistantApiKey: "test-key",
|
|
414
|
-
|
|
414
|
+
cloudAssistantId: "asst-123",
|
|
415
415
|
fetch: clientFetchMock,
|
|
416
416
|
};
|
|
417
417
|
const events = [makeUsageEvent(), makeUsageEvent()];
|
|
@@ -430,7 +430,7 @@ describe("UsageTelemetryReporter", () => {
|
|
|
430
430
|
test("flush is skipped when no platform credentials are available", async () => {
|
|
431
431
|
// Authenticated-only: with no client, nothing is sent and the watermark is
|
|
432
432
|
// left intact so the backlog ships once credentials resolve.
|
|
433
|
-
|
|
433
|
+
mockCloudClient = null;
|
|
434
434
|
|
|
435
435
|
const events = [makeUsageEvent()];
|
|
436
436
|
mockQueryUnreportedUsageEvents.mockReturnValue(events);
|
|
@@ -445,11 +445,11 @@ describe("UsageTelemetryReporter", () => {
|
|
|
445
445
|
expect(watermarkCalls.length).toBe(0);
|
|
446
446
|
});
|
|
447
447
|
|
|
448
|
-
test("flush is skipped when
|
|
449
|
-
// The
|
|
448
|
+
test("flush is skipped when CADET_DISABLE_CLOUD is set in local mode", async () => {
|
|
449
|
+
// The cloud-disabled toggle suppresses the send. Unlike the opt-out
|
|
450
450
|
// branch, watermarks are NOT advanced, so the backlog ships once the flag
|
|
451
451
|
// is cleared.
|
|
452
|
-
process.env.
|
|
452
|
+
process.env.CADET_DISABLE_CLOUD = "true";
|
|
453
453
|
|
|
454
454
|
const events = [makeUsageEvent()];
|
|
455
455
|
mockQueryUnreportedUsageEvents.mockReturnValue(events);
|
|
@@ -464,12 +464,12 @@ describe("UsageTelemetryReporter", () => {
|
|
|
464
464
|
expect(mockSetFlushCheckpoint).not.toHaveBeenCalled();
|
|
465
465
|
});
|
|
466
466
|
|
|
467
|
-
test("
|
|
468
|
-
//
|
|
469
|
-
//
|
|
470
|
-
//
|
|
471
|
-
process.env.
|
|
472
|
-
process.env.
|
|
467
|
+
test("CADET_DISABLE_CLOUD is ignored when IS_CLOUD is set (managed mode)", async () => {
|
|
468
|
+
// Cloud assistants always connect to the cloud; an inherited
|
|
469
|
+
// CADET_DISABLE_CLOUD must not suppress telemetry for them (matches
|
|
470
|
+
// areCloudFeaturesEnabled / CadetCloudClient.create()).
|
|
471
|
+
process.env.IS_CLOUD = "true";
|
|
472
|
+
process.env.CADET_DISABLE_CLOUD = "true";
|
|
473
473
|
|
|
474
474
|
const events = [makeUsageEvent()];
|
|
475
475
|
mockQueryUnreportedUsageEvents.mockReturnValue(events);
|
|
@@ -677,7 +677,7 @@ describe("UsageTelemetryReporter", () => {
|
|
|
677
677
|
mockGetRawShareAnalytics.mockReturnValue(true);
|
|
678
678
|
|
|
679
679
|
// no-credentials: authenticated-only, no platform client resolved.
|
|
680
|
-
|
|
680
|
+
mockCloudClient = null;
|
|
681
681
|
expect(await reporter.flush()).toEqual({
|
|
682
682
|
flushed: false,
|
|
683
683
|
reason: "no-credentials",
|
|
@@ -1230,7 +1230,7 @@ describe("UsageTelemetryReporter", () => {
|
|
|
1230
1230
|
test("omits the trace when the accepted consent version predates the disclosure threshold (share_diagnostics on)", async () => {
|
|
1231
1231
|
mockGetCachedShareDiagnostics.mockReturnValue(true);
|
|
1232
1232
|
// Consent recorded under an older version that never disclosed trace
|
|
1233
|
-
// collection → gate closed, mirroring the
|
|
1233
|
+
// collection → gate closed, mirroring the cloud ingest gate.
|
|
1234
1234
|
mockGetCachedShareDiagnosticsVersion.mockReturnValue("2000-01-01");
|
|
1235
1235
|
mockQueryUnreportedUsageEvents.mockReturnValue([]);
|
|
1236
1236
|
mockQueryUnreportedTurnEvents.mockReturnValue(singleTurnEvent());
|
|
@@ -1836,12 +1836,12 @@ describe("UsageTelemetryReporter", () => {
|
|
|
1836
1836
|
});
|
|
1837
1837
|
|
|
1838
1838
|
test("platform disabled takes precedence over consent off — watermarks NOT advanced", async () => {
|
|
1839
|
-
//
|
|
1840
|
-
// refresh can't create a
|
|
1839
|
+
// CADET_DISABLE_CLOUD keeps the consent cache false (the consent
|
|
1840
|
+
// refresh can't create a cloud client), so both gates would fire. The
|
|
1841
1841
|
// platform-disabled gate runs first and returns without advancing
|
|
1842
1842
|
// watermarks, preserving the backlog until the flag is cleared — a
|
|
1843
1843
|
// deployment toggle must not be treated as a privacy opt-out.
|
|
1844
|
-
process.env.
|
|
1844
|
+
process.env.CADET_DISABLE_CLOUD = "true";
|
|
1845
1845
|
mockGetRawShareAnalytics.mockReturnValue(false);
|
|
1846
1846
|
const events = [makeUsageEvent()];
|
|
1847
1847
|
mockQueryUnreportedUsageEvents.mockReturnValue(events);
|
|
@@ -1913,7 +1913,7 @@ describe("UsageTelemetryReporter", () => {
|
|
|
1913
1913
|
// `APP_VERSION` directly until their respective follow-ups land.
|
|
1914
1914
|
// Nullable llm_usage cases (legacy rows from before migration 267 ran)
|
|
1915
1915
|
// fall back to the running binary's `APP_VERSION` rather than emitting
|
|
1916
|
-
// explicit `null` — under the
|
|
1916
|
+
// explicit `null` — under the cloud contract a present-but-null
|
|
1917
1917
|
// per-event value would override the envelope, and we'd rather have a
|
|
1918
1918
|
// concrete version than no version.
|
|
1919
1919
|
// -------------------------------------------------------------------------
|
|
@@ -1960,7 +1960,7 @@ describe("UsageTelemetryReporter", () => {
|
|
|
1960
1960
|
);
|
|
1961
1961
|
// No explicit null on the wire — the running binary's APP_VERSION is
|
|
1962
1962
|
// stamped instead so a present-but-null value can't override the
|
|
1963
|
-
// envelope under the
|
|
1963
|
+
// envelope under the cloud's per-event-wins contract.
|
|
1964
1964
|
expect(body.events[0].assistant_version).toBe("1.2.3-test");
|
|
1965
1965
|
});
|
|
1966
1966
|
|
|
@@ -1969,7 +1969,7 @@ describe("UsageTelemetryReporter", () => {
|
|
|
1969
1969
|
// don't yet carry a per-event version. Until the follow-up migration
|
|
1970
1970
|
// adds a column to `messages`, we stamp the running binary's
|
|
1971
1971
|
// APP_VERSION instead of explicit null — matches what the envelope
|
|
1972
|
-
// would have provided but per-event so it survives the
|
|
1972
|
+
// would have provided but per-event so it survives the cloud
|
|
1973
1973
|
// contract that treats present per-event values as winning over the
|
|
1974
1974
|
// envelope.
|
|
1975
1975
|
mockQueryUnreportedUsageEvents.mockReturnValue([]);
|
|
@@ -2978,7 +2978,7 @@ describe("UsageTelemetryReporter", () => {
|
|
|
2978
2978
|
});
|
|
2979
2979
|
|
|
2980
2980
|
test("acknowledge is NOT called when platform credentials are missing", async () => {
|
|
2981
|
-
|
|
2981
|
+
mockCloudClient = null;
|
|
2982
2982
|
const { source, acknowledge, pending } = makeAckSource("fake_ack", [
|
|
2983
2983
|
"row-1",
|
|
2984
2984
|
]);
|
|
@@ -3315,7 +3315,7 @@ describe("UsageTelemetryReporter", () => {
|
|
|
3315
3315
|
});
|
|
3316
3316
|
|
|
3317
3317
|
test("expired rows are pruned even when the flush skips for platform-disabled", async () => {
|
|
3318
|
-
process.env.
|
|
3318
|
+
process.env.CADET_DISABLE_CLOUD = "true";
|
|
3319
3319
|
seedExpiredAndFreshRows();
|
|
3320
3320
|
const reporter = new UsageTelemetryReporter(
|
|
3321
3321
|
[outboxSource(OUTBOX_NAME)],
|
|
@@ -20,16 +20,16 @@
|
|
|
20
20
|
* processes open read-write; each instance only touches its own sources'
|
|
21
21
|
* cursors, so the split shares no flush state.
|
|
22
22
|
*
|
|
23
|
-
* Authenticated-only: events are sent via the
|
|
23
|
+
* Authenticated-only: events are sent via the cloud proxy context
|
|
24
24
|
* (Api-Key header). When no cloud credentials are available, or when
|
|
25
|
-
* platform features are disabled (
|
|
25
|
+
* platform features are disabled (CADET_DISABLE_CLOUD in local mode), the
|
|
26
26
|
* flush is skipped and retried next cycle.
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
29
|
+
import { CadetCloudClient } from "../cloud/client.js";
|
|
30
|
+
import { getRawShareAnalytics } from "../cloud/consent-cache.js";
|
|
31
|
+
import { areCloudFeaturesEnabled } from "../cloud/feature-gate.js";
|
|
32
|
+
import { getCloudOrganizationId, getCloudUserId } from "../config/env.js";
|
|
33
33
|
import { getDeviceId } from "../util/device-id.js";
|
|
34
34
|
import { getLogger } from "../util/logger.js";
|
|
35
35
|
import { APP_VERSION } from "../version.js";
|
|
@@ -71,8 +71,8 @@ const TELEMETRY_PATH = "/v1/telemetry/ingest/";
|
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
73
|
* Outcome of a {@link UsageTelemetryReporter.flush} call. `flushed: true` means
|
|
74
|
-
* at least one batch reached the
|
|
75
|
-
* POSTed; `persisted` is the count the
|
|
74
|
+
* at least one batch reached the cloud (2xx). `sent` is the count the daemon
|
|
75
|
+
* POSTed; `persisted` is the count the cloud confirmed written; `dropped` is
|
|
76
76
|
* `sent - persisted` — folding server-side drops (opt-out, unauthenticated) and
|
|
77
77
|
* events silently skipped at ingest validation (unknown/invalid type) into one
|
|
78
78
|
* "did not land" number. `flushed: false` carries a kebab-case skip reason.
|
|
@@ -257,7 +257,7 @@ export class UsageTelemetryReporter {
|
|
|
257
257
|
|
|
258
258
|
start(): void {
|
|
259
259
|
// Delay the first flush to allow the credential infrastructure (CES
|
|
260
|
-
// handshake) to complete. Without this delay,
|
|
260
|
+
// handshake) to complete. Without this delay, CadetCloudClient.create()
|
|
261
261
|
// returns null because the credential backend hasn't resolved yet, causing
|
|
262
262
|
// the initial flush to be skipped (we send authenticated-only); the
|
|
263
263
|
// delay lets credentials resolve so the first flush can actually ship.
|
|
@@ -338,12 +338,12 @@ export class UsageTelemetryReporter {
|
|
|
338
338
|
}
|
|
339
339
|
}
|
|
340
340
|
|
|
341
|
-
// Skip when platform features are disabled (
|
|
342
|
-
// local mode; the flag is ignored when
|
|
343
|
-
//
|
|
341
|
+
// Skip when platform features are disabled (CADET_DISABLE_CLOUD in
|
|
342
|
+
// local mode; the flag is ignored when IS_CLOUD is set, matching
|
|
343
|
+
// CadetCloudClient.create()). Watermarks are NOT advanced here: this
|
|
344
344
|
// is a deployment/local-mode toggle, not a privacy opt-out, so the unsent
|
|
345
345
|
// backlog ships once the flag is cleared.
|
|
346
|
-
if (!
|
|
346
|
+
if (!areCloudFeaturesEnabled()) {
|
|
347
347
|
return settle("disabled");
|
|
348
348
|
}
|
|
349
349
|
|
|
@@ -377,7 +377,7 @@ export class UsageTelemetryReporter {
|
|
|
377
377
|
return settle("unknown-consent");
|
|
378
378
|
}
|
|
379
379
|
|
|
380
|
-
// Respect a confirmed opt-out: if the
|
|
380
|
+
// Respect a confirmed opt-out: if the cloud owner declined
|
|
381
381
|
// `share_analytics` consent, skip the flush and advance watermarks so
|
|
382
382
|
// events recorded during the opt-out window are never sent
|
|
383
383
|
// retroactively. The daemon runs the reporter even when opted out
|
|
@@ -468,7 +468,7 @@ export class UsageTelemetryReporter {
|
|
|
468
468
|
// Resolve auth context. We send authenticated-only: if no platform
|
|
469
469
|
// credentials are available yet, skip without advancing watermarks so the
|
|
470
470
|
// backlog ships on a later cycle once credentials resolve.
|
|
471
|
-
const client = await
|
|
471
|
+
const client = await CadetCloudClient.create();
|
|
472
472
|
if (!client) {
|
|
473
473
|
log.debug(
|
|
474
474
|
{
|
|
@@ -501,8 +501,8 @@ export class UsageTelemetryReporter {
|
|
|
501
501
|
// the server would silently drop; the batch is POSTed unchanged.
|
|
502
502
|
validateWireEvents(typedEvents, log);
|
|
503
503
|
|
|
504
|
-
const organizationId =
|
|
505
|
-
const userId =
|
|
504
|
+
const organizationId = getCloudOrganizationId() || undefined;
|
|
505
|
+
const userId = getCloudUserId() || undefined;
|
|
506
506
|
const payload = {
|
|
507
507
|
device_id: getDeviceId(),
|
|
508
508
|
assistant_version: APP_VERSION,
|
|
@@ -8,22 +8,22 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
10
10
|
|
|
11
|
-
import type { ConsentState } from "../
|
|
11
|
+
import type { ConsentState } from "../cloud/consent-cache.js";
|
|
12
12
|
|
|
13
13
|
let shareAnalytics: ConsentState = true;
|
|
14
|
-
mock.module("../
|
|
14
|
+
mock.module("../cloud/consent-cache.js", () => ({
|
|
15
15
|
getRawShareAnalytics: () => shareAnalytics,
|
|
16
16
|
}));
|
|
17
17
|
|
|
18
18
|
let platformEnabled = true;
|
|
19
|
-
mock.module("../
|
|
20
|
-
|
|
19
|
+
mock.module("../cloud/feature-gate.js", () => ({
|
|
20
|
+
areCloudFeaturesEnabled: () => platformEnabled,
|
|
21
21
|
}));
|
|
22
22
|
|
|
23
23
|
const fetchCalls: Array<{ path: string; body: string }> = [];
|
|
24
24
|
let clientAvailable = true;
|
|
25
|
-
mock.module("../
|
|
26
|
-
|
|
25
|
+
mock.module("../cloud/client.js", () => ({
|
|
26
|
+
CadetCloudClient: {
|
|
27
27
|
create: async () =>
|
|
28
28
|
clientAvailable
|
|
29
29
|
? {
|
|
@@ -36,9 +36,9 @@ mock.module("../platform/client.js", () => ({
|
|
|
36
36
|
},
|
|
37
37
|
}));
|
|
38
38
|
|
|
39
|
-
import {
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
import { setCloudOrganizationId, setCloudUserId } from "../config/env.js";
|
|
40
|
+
setCloudOrganizationId("org-1");
|
|
41
|
+
setCloudUserId("user-1");
|
|
42
42
|
|
|
43
43
|
mock.module("../util/device-id.js", () => ({
|
|
44
44
|
getDeviceId: () => "device-xyz",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* damage it is reporting, and the store's `recordWatchdogEvent` drags the whole
|
|
10
10
|
* `db-connection` graph in behind it.
|
|
11
11
|
*
|
|
12
|
-
* This helper POSTs the event straight to the
|
|
12
|
+
* This helper POSTs the event straight to the cloud ingest instead. It is
|
|
13
13
|
* best-effort: opt-out, missing credentials (early boot, before the CES
|
|
14
14
|
* handshake), platform-disabled, and HTTP failures all no-op. No retry — a lost
|
|
15
15
|
* event is acceptable for a rare, high-signal check. Deduped downstream on
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
|
|
19
19
|
import { v4 as uuid } from "uuid";
|
|
20
20
|
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
21
|
+
import { CadetCloudClient } from "../cloud/client.js";
|
|
22
|
+
import { getRawShareAnalytics } from "../cloud/consent-cache.js";
|
|
23
|
+
import { areCloudFeaturesEnabled } from "../cloud/feature-gate.js";
|
|
24
|
+
import { getCloudOrganizationId, getCloudUserId } from "../config/env.js";
|
|
25
25
|
import { getDeviceId } from "../util/device-id.js";
|
|
26
26
|
import { getLogger } from "../util/logger.js";
|
|
27
27
|
import { APP_VERSION } from "../version.js";
|
|
@@ -34,7 +34,7 @@ const log = getLogger("watchdog-direct-emit");
|
|
|
34
34
|
const TELEMETRY_INGEST_PATH = "/v1/telemetry/ingest/";
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
|
-
* POST one `watchdog` event directly to the
|
|
37
|
+
* POST one `watchdog` event directly to the cloud, bypassing the SQLite
|
|
38
38
|
* buffer. Honors a confirmed `share_analytics` opt-out and the
|
|
39
39
|
* platform-features gate. An unknown consent state emits: this path reports
|
|
40
40
|
* SQLite corruption and has no outbox to defer into, and platform ingest
|
|
@@ -52,13 +52,13 @@ export async function emitWatchdogEventDirect(
|
|
|
52
52
|
if (getRawShareAnalytics() === false) {
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
if (!
|
|
55
|
+
if (!areCloudFeaturesEnabled()) {
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// Authenticated-only. Null before the CES handshake resolves credentials;
|
|
60
60
|
// the event is simply dropped (no durable backlog to retry from).
|
|
61
|
-
const client = await
|
|
61
|
+
const client = await CadetCloudClient.create();
|
|
62
62
|
if (!client) {
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
@@ -77,8 +77,8 @@ export async function emitWatchdogEventDirect(
|
|
|
77
77
|
// would silently drop the event; the POST proceeds unchanged.
|
|
78
78
|
validateWireEvents([event], log);
|
|
79
79
|
|
|
80
|
-
const organizationId =
|
|
81
|
-
const userId =
|
|
80
|
+
const organizationId = getCloudOrganizationId() || undefined;
|
|
81
|
+
const userId = getCloudUserId() || undefined;
|
|
82
82
|
const resp = await client.fetch(TELEMETRY_INGEST_PATH, {
|
|
83
83
|
method: "POST",
|
|
84
84
|
headers: { "Content-Type": "application/json" },
|
|
@@ -293,7 +293,7 @@ const SKILL_TOOLS: GuardedTool[] = [
|
|
|
293
293
|
proxied("screen_point_at"),
|
|
294
294
|
|
|
295
295
|
{
|
|
296
|
-
name: "
|
|
296
|
+
name: "scaffold_cloud_skill",
|
|
297
297
|
input: {
|
|
298
298
|
skill_id: "guard-skill",
|
|
299
299
|
name: "Guard Skill",
|
|
@@ -302,7 +302,7 @@ const SKILL_TOOLS: GuardedTool[] = [
|
|
|
302
302
|
activation_hints: ["guard"],
|
|
303
303
|
},
|
|
304
304
|
},
|
|
305
|
-
{ name: "
|
|
305
|
+
{ name: "delete_cloud_skill", input: { skill_id: "guard-skill" } },
|
|
306
306
|
{ name: "find_similar_skills", input: { goal: "do a thing" } },
|
|
307
307
|
|
|
308
308
|
{
|
|
@@ -1268,7 +1268,7 @@ function extractCdpError(
|
|
|
1268
1268
|
* `BrowserBackend.send`. Converts thrown CdpErrors back into a
|
|
1269
1269
|
* `CdpResult` envelope with an `error` payload so the manager does
|
|
1270
1270
|
* not need to know about our thrown-error convention, then the
|
|
1271
|
-
* envelope is unwrapped again on the way out of the
|
|
1271
|
+
* envelope is unwrapped again on the way out of the cloud client.
|
|
1272
1272
|
*
|
|
1273
1273
|
* The per-command `command.sessionId` (populated by the manager from
|
|
1274
1274
|
* a session's opaque `targetId`) is intentionally not forwarded to
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
isVirtualDesktopCloud,
|
|
3
3
|
shouldUseVirtualDesktop,
|
|
4
4
|
} from "../../desktop/virtual-desktop-feature.js";
|
|
5
5
|
import type { ExecutionTarget } from "../tool-types.js";
|
|
@@ -13,7 +13,7 @@ export function computerUseTarget(
|
|
|
13
13
|
input.target ??
|
|
14
14
|
(input.target_client_id === undefined &&
|
|
15
15
|
context &&
|
|
16
|
-
shouldUseVirtualDesktop(context,
|
|
16
|
+
shouldUseVirtualDesktop(context, isVirtualDesktopCloud())
|
|
17
17
|
? "assistant-desktop"
|
|
18
18
|
: "connected-computer");
|
|
19
19
|
if (target !== "connected-computer" && target !== "assistant-desktop") {
|
|
@@ -131,28 +131,10 @@ export async function storeCredentialValue(
|
|
|
131
131
|
);
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
// The stored plaintext may already sit in recent transcripts: the user
|
|
135
|
-
// message that pasted it, the persisted tool_use input, the tool result
|
|
136
|
-
// echoing the command. This is the scrub seam, not setSecureKeyAsync, which
|
|
137
|
-
// also fires on OAuth refresh rotations and MCP header writes whose values
|
|
138
|
-
// never transited a transcript.
|
|
139
134
|
if (!input.skipTranscriptScrub) {
|
|
140
|
-
const {
|
|
135
|
+
const { scrubStoredCredentialFromTranscripts } =
|
|
141
136
|
await import("../../daemon/credential-transcript-scrub.js");
|
|
142
|
-
|
|
143
|
-
try {
|
|
144
|
-
const scrubbed = await scrubStoredCredentialFromTranscripts(value);
|
|
145
|
-
log.info(
|
|
146
|
-
{ service, field, ...scrubbed },
|
|
147
|
-
"Credential stored; scrubbed value from recent transcripts",
|
|
148
|
-
);
|
|
149
|
-
} catch (err) {
|
|
150
|
-
log.warn(
|
|
151
|
-
{ err, service, field },
|
|
152
|
-
"Credential stored, but transcript scrub failed",
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
137
|
+
await scrubStoredCredentialFromTranscripts(value, { service, field });
|
|
156
138
|
}
|
|
157
139
|
|
|
158
140
|
const metadata = upsertCredentialMetadata(service, field, {
|
package/src/tools/network/__tests__/{managed-search-proxy.test.ts → cloud-search-proxy.test.ts}
RENAMED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
|
|
2
2
|
|
|
3
|
-
interface
|
|
4
|
-
|
|
3
|
+
interface MockCloudClient {
|
|
4
|
+
cloudAssistantId: string;
|
|
5
5
|
fetch: ReturnType<typeof mock>;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
let mockClient:
|
|
8
|
+
let mockClient: MockCloudClient | null = null;
|
|
9
9
|
|
|
10
|
-
mock.module("../../../
|
|
11
|
-
|
|
10
|
+
mock.module("../../../cloud/client.js", () => ({
|
|
11
|
+
CadetCloudClient: {
|
|
12
12
|
create: async () => mockClient,
|
|
13
13
|
},
|
|
14
14
|
}));
|
|
15
15
|
|
|
16
|
-
import { callManagedSearchProxy } from "../
|
|
16
|
+
import { callManagedSearchProxy } from "../cloud-search-proxy.js";
|
|
17
17
|
|
|
18
18
|
describe("callManagedSearchProxy", () => {
|
|
19
19
|
beforeEach(() => {
|
|
20
20
|
mockClient = {
|
|
21
|
-
|
|
21
|
+
cloudAssistantId: "asst-123",
|
|
22
22
|
fetch: mock(async () => {
|
|
23
23
|
return new Response(
|
|
24
24
|
JSON.stringify({
|
|
@@ -36,7 +36,7 @@ describe("callManagedSearchProxy", () => {
|
|
|
36
36
|
mockClient = null;
|
|
37
37
|
});
|
|
38
38
|
|
|
39
|
-
test("posts to the
|
|
39
|
+
test("posts to the cloud search proxy endpoint for the assistant and provider", async () => {
|
|
40
40
|
await callManagedSearchProxy("brave", {
|
|
41
41
|
method: "GET",
|
|
42
42
|
path: "/res/v1/web/search",
|
|
@@ -44,12 +44,12 @@ describe("callManagedSearchProxy", () => {
|
|
|
44
44
|
|
|
45
45
|
expect(mockClient!.fetch).toHaveBeenCalledTimes(1);
|
|
46
46
|
expect(mockClient!.fetch.mock.calls[0][0]).toBe(
|
|
47
|
-
"/v1/assistants/asst-123/
|
|
47
|
+
"/v1/assistants/asst-123/cloud-search-proxy/brave/",
|
|
48
48
|
);
|
|
49
49
|
});
|
|
50
50
|
|
|
51
51
|
test("encodes URL path segments", async () => {
|
|
52
|
-
mockClient!.
|
|
52
|
+
mockClient!.cloudAssistantId = "asst/123";
|
|
53
53
|
|
|
54
54
|
await callManagedSearchProxy("brave", {
|
|
55
55
|
method: "GET",
|
|
@@ -57,11 +57,11 @@ describe("callManagedSearchProxy", () => {
|
|
|
57
57
|
});
|
|
58
58
|
|
|
59
59
|
expect(mockClient!.fetch.mock.calls[0][0]).toBe(
|
|
60
|
-
"/v1/assistants/asst%2F123/
|
|
60
|
+
"/v1/assistants/asst%2F123/cloud-search-proxy/brave/",
|
|
61
61
|
);
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
-
test("sends the
|
|
64
|
+
test("sends the cloud contract request envelope", async () => {
|
|
65
65
|
await callManagedSearchProxy("brave", {
|
|
66
66
|
method: "GET",
|
|
67
67
|
path: "/res/v1/web/search",
|
|
@@ -173,7 +173,7 @@ describe("callManagedSearchProxy", () => {
|
|
|
173
173
|
test("returns a typed platform error for non-2xx platform responses", async () => {
|
|
174
174
|
mockClient!.fetch = mock(async () => {
|
|
175
175
|
return new Response(
|
|
176
|
-
JSON.stringify({ detail: "unsupported
|
|
176
|
+
JSON.stringify({ detail: "unsupported cloud search provider" }),
|
|
177
177
|
{
|
|
178
178
|
status: 400,
|
|
179
179
|
headers: {
|
|
@@ -197,9 +197,9 @@ describe("callManagedSearchProxy", () => {
|
|
|
197
197
|
"content-type": "application/json",
|
|
198
198
|
"x-platform-request-id": "platform-req-123",
|
|
199
199
|
},
|
|
200
|
-
body: { detail: "unsupported
|
|
200
|
+
body: { detail: "unsupported cloud search provider" },
|
|
201
201
|
message:
|
|
202
|
-
"
|
|
202
|
+
"Cloud search proxy returned status 400: unsupported cloud search provider",
|
|
203
203
|
});
|
|
204
204
|
});
|
|
205
205
|
|
|
@@ -224,7 +224,7 @@ describe("callManagedSearchProxy", () => {
|
|
|
224
224
|
"content-type": "application/json",
|
|
225
225
|
},
|
|
226
226
|
body: { detail: "Insufficient balance" },
|
|
227
|
-
message: "
|
|
227
|
+
message: "Cloud search proxy returned status 402: Insufficient balance",
|
|
228
228
|
});
|
|
229
229
|
});
|
|
230
230
|
|
|
@@ -239,12 +239,12 @@ describe("callManagedSearchProxy", () => {
|
|
|
239
239
|
expect(result).toEqual({
|
|
240
240
|
ok: false,
|
|
241
241
|
kind: "unavailable",
|
|
242
|
-
message: "
|
|
242
|
+
message: "Cloud search proxy is unavailable in this environment.",
|
|
243
243
|
});
|
|
244
244
|
});
|
|
245
245
|
|
|
246
246
|
test("returns unavailable when platform assistant ID is missing", async () => {
|
|
247
|
-
mockClient!.
|
|
247
|
+
mockClient!.cloudAssistantId = "";
|
|
248
248
|
|
|
249
249
|
const result = await callManagedSearchProxy("brave", {
|
|
250
250
|
method: "GET",
|
|
@@ -255,7 +255,7 @@ describe("callManagedSearchProxy", () => {
|
|
|
255
255
|
ok: false,
|
|
256
256
|
kind: "unavailable",
|
|
257
257
|
message:
|
|
258
|
-
"
|
|
258
|
+
"Cloud search proxy is unavailable: platform assistant ID is missing.",
|
|
259
259
|
});
|
|
260
260
|
});
|
|
261
261
|
|
|
@@ -276,7 +276,7 @@ describe("callManagedSearchProxy", () => {
|
|
|
276
276
|
ok: false,
|
|
277
277
|
kind: "invalid-response",
|
|
278
278
|
body: { ok: true },
|
|
279
|
-
message: "
|
|
279
|
+
message: "Cloud search proxy returned an invalid response envelope.",
|
|
280
280
|
});
|
|
281
281
|
});
|
|
282
282
|
});
|