@mycadet/assistant 0.12.7 → 0.12.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/docs/activation-funnel-telemetry.md +6 -6
- package/docs/cadet-doctor.md +7 -7
- package/docs/desktop-browser-cli.md +7 -7
- package/docs/skills.md +2 -2
- package/docs/voice-input-diagnostics.md +1 -1
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +2 -2
- package/node_modules/@mycadet/avatar-manifest/src/__tests__/notification-avatar.test.ts +1 -1
- package/node_modules/@mycadet/avatar-manifest/src/notification-avatar.ts +2 -2
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/package.json +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/node_modules/@mycadet/ces-client/src/rpc-client.ts +1 -1
- package/node_modules/@mycadet/credential-storage/src/oauth-runtime.ts +1 -1
- package/node_modules/@mycadet/credential-storage/src/static-credentials.ts +1 -1
- package/node_modules/@mycadet/environments/src/seeds.ts +6 -6
- package/node_modules/@mycadet/environments/src/shell.test.ts +1 -1
- package/node_modules/@mycadet/environments/src/types.ts +6 -6
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/package.json +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/node_modules/@mycadet/gateway-client/src/binding-strength-contract.ts +5 -5
- package/node_modules/@mycadet/gateway-client/src/gateway-ipc-contracts.ts +1 -1
- package/node_modules/@mycadet/gateway-client/src/inbound-contract.ts +2 -2
- package/node_modules/@mycadet/gateway-client/src/outbound-contract.ts +1 -1
- package/node_modules/@mycadet/service-contracts/package.json +1 -1
- package/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
- package/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
- package/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
- package/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
- package/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
- package/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
- package/openapi.yaml +6815 -794
- package/package.json +2 -2
- package/scripts/build-test-fixtures.ts +1 -1
- package/scripts/probe-skill-retrieval.ts +1 -1
- package/scripts/sync-llm-catalog.ts +2 -2
- package/scripts/voice-ttft-spike.ts +2 -2
- package/src/__tests__/adaptive-thinking-repair.test.ts +4 -4
- package/src/__tests__/agent-loop-override-profile.test.ts +4 -4
- package/src/__tests__/agent-loop-subagent-billing-headers.test.ts +1 -1
- package/src/__tests__/anthropic-provider.test.ts +2 -2
- package/src/__tests__/available-skills.test.ts +11 -12
- package/src/__tests__/avatar-identity-sync.test.ts +1 -1
- package/src/__tests__/byok-default-profile-ensure.test.ts +7 -7
- package/src/__tests__/call-domain.test.ts +1 -1
- package/src/__tests__/call-site-routing-connection-auto-resolve.test.ts +2 -2
- package/src/__tests__/catalog-files.test.ts +10 -10
- package/src/__tests__/catalog-install-normalize.test.ts +3 -3
- package/src/__tests__/channel-availability-routes.test.ts +8 -8
- package/src/__tests__/channel-readiness-routes.test.ts +4 -4
- package/src/__tests__/channel-readiness-service.test.ts +14 -14
- package/src/__tests__/channel-readiness-telegram-remote.test.ts +1 -1
- package/src/__tests__/chat-reveal-guard-priming.test.ts +5 -6
- package/src/__tests__/checker.test.ts +6 -6
- package/src/__tests__/clawhub.test.ts +1 -1
- package/src/__tests__/{platform-callback-registration.test.ts → cloud-callback-registration.test.ts} +66 -90
- package/src/__tests__/{platform-client-verify-credential.test.ts → cloud-client-verify-credential.test.ts} +14 -14
- package/src/__tests__/{managed-credential-catalog-cli.test.ts → cloud-credential-catalog-cli.test.ts} +41 -41
- package/src/__tests__/{managed-fallback-dispatch.test.ts → cloud-fallback-dispatch.test.ts} +21 -16
- package/src/__tests__/{managed-profile-guard.test.ts → cloud-profile-guard.test.ts} +60 -60
- package/src/__tests__/{platform-proxy-context.test.ts → cloud-proxy-context.test.ts} +44 -44
- package/src/__tests__/{managed-speech-defaults.test.ts → cloud-speech-defaults.test.ts} +41 -41
- package/src/__tests__/{managed-store.test.ts → cloud-store.test.ts} +99 -99
- package/src/__tests__/compaction-events.test.ts +7 -5
- package/src/__tests__/config-loader-backfill.test.ts +65 -65
- package/src/__tests__/config-loader-cloud-defaults.test.ts +373 -0
- package/src/__tests__/config-loader-corrupt.test.ts +1 -1
- package/src/__tests__/config-loader-validation-reset-notice.test.ts +1 -1
- package/src/__tests__/config-schema.test.ts +3 -3
- package/src/__tests__/{config-set-platform-guard.test.ts → config-set-cloud-guard.test.ts} +6 -6
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +0 -8
- package/src/__tests__/config-watcher.test.ts +1 -1
- package/src/__tests__/contacts-write.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop.test.ts +2 -2
- package/src/__tests__/conversation-app-control-instantiation.test.ts +18 -18
- package/src/__tests__/conversation-error.test.ts +45 -45
- package/src/__tests__/conversation-inference-profile-route.test.ts +4 -4
- package/src/__tests__/conversation-rendered-delegation-state.test.ts +4 -4
- package/src/__tests__/conversation-skill-tools.test.ts +7 -8
- package/src/__tests__/conversation-slash.test.ts +2 -2
- package/src/__tests__/conversation-speed-override.test.ts +8 -10
- package/src/__tests__/conversation-summarize-up-to.test.ts +4 -4
- package/src/__tests__/conversation-surfaces-activation-emit.test.ts +1 -1
- package/src/__tests__/conversation-wait-for-idle.test.ts +7 -5
- package/src/__tests__/credential-execution-api-key-propagation.test.ts +5 -5
- package/src/__tests__/{credential-execution-managed-contract.test.ts → credential-execution-cloud-contract.test.ts} +24 -24
- package/src/__tests__/credential-health-service.test.ts +27 -41
- package/src/__tests__/credential-routes.test.ts +85 -165
- package/src/__tests__/credential-security-invariants.test.ts +6 -7
- package/src/__tests__/custom-profile-ensure.test.ts +1 -1
- package/src/__tests__/date-context.test.ts +1 -1
- package/src/__tests__/default-profile-catalog-fallback.test.ts +15 -15
- package/src/__tests__/delete-managed-skill-tool.test.ts +8 -8
- package/src/__tests__/discord-callback-round-trip.test.ts +1 -1
- package/src/__tests__/disk-usage.test.ts +3 -3
- package/src/__tests__/email-invite-adapter.test.ts +5 -5
- package/src/__tests__/{embedding-managed-proxy-selection.test.ts → embedding-cloud-proxy-selection.test.ts} +44 -43
- package/src/__tests__/emit-signal-routing-intent.test.ts +13 -15
- package/src/__tests__/events-dev-bypass-actor.test.ts +2 -2
- package/src/__tests__/fallback-breaker.test.ts +7 -7
- package/src/__tests__/feature-flag-test-helpers.ts +106 -0
- package/src/__tests__/gateway-flag-listener.test.ts +1 -1
- package/src/__tests__/gemini-image-service.test.ts +2 -2
- package/src/__tests__/gemini-provider.test.ts +5 -5
- package/src/__tests__/get-skill-detail-audit.test.ts +9 -8
- package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -1
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +5 -5
- package/src/__tests__/host-cu-routes-targeted.test.ts +8 -8
- package/src/__tests__/image-credentials.test.ts +13 -13
- package/src/__tests__/inbound-admitted-introduction-nudge.test.ts +14 -6
- package/src/__tests__/inbound-trust-verdict.test.ts +14 -6
- package/src/__tests__/inference-no-mode-boot-e2e.test.ts +11 -11
- package/src/__tests__/inference-profile-session-handler.test.ts +7 -7
- package/src/__tests__/inference-profile-session-ipc.test.ts +5 -5
- package/src/__tests__/inference-profile-validation-jev.test.ts +1 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +40 -24
- package/src/__tests__/input-repairs.test.ts +1 -1
- package/src/__tests__/install-skill-routing.test.ts +10 -8
- package/src/__tests__/integration-status.test.ts +5 -5
- package/src/__tests__/internal-telemetry-routes.test.ts +3 -3
- package/src/__tests__/invite-routes-http.test.ts +1 -1
- package/src/__tests__/llm-catalog-parity.test.ts +5 -7
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +2 -2
- package/src/__tests__/llm-resolver-override-or-default.test.ts +3 -3
- package/src/__tests__/llm-resolver.test.ts +1 -1
- package/src/__tests__/llm-schema-fallback-profile.test.ts +25 -19
- package/src/__tests__/llm-usage-store.test.ts +1 -1
- package/src/__tests__/managed-skill-lifecycle.test.ts +12 -12
- package/src/__tests__/mcp-abort-signal.test.ts +2 -2
- package/src/__tests__/mcp-client-auth.test.ts +2 -2
- package/src/__tests__/mcp-tool-annotations-risk.test.ts +2 -2
- package/src/__tests__/media-generate-image.test.ts +30 -30
- package/src/__tests__/memory-config-file-parity.test.ts +6 -6
- package/src/__tests__/migration-export-to-gcs.test.ts +4 -4
- package/src/__tests__/migration-import-commit-http.test.ts +1 -1
- package/src/__tests__/mtime-cache.test.ts +2 -2
- package/src/__tests__/{notification-platform-adapter.test.ts → notification-cloud-adapter.test.ts} +39 -39
- package/src/__tests__/notification-deep-link.test.ts +40 -40
- package/src/__tests__/oauth-apps-routes.test.ts +3 -3
- package/src/__tests__/oauth-cli.test.ts +9 -9
- package/src/__tests__/oauth-commands-routes.test.ts +16 -16
- package/src/__tests__/oauth-connect-orchestrator.test.ts +2 -2
- package/src/__tests__/oauth-provider-serializer.test.ts +11 -11
- package/src/__tests__/oauth-providers-routes.test.ts +12 -12
- package/src/__tests__/oauth-store.test.ts +1 -1
- package/src/__tests__/oauth2-gateway-transport.test.ts +3 -3
- package/src/__tests__/onboarding-persona-write.test.ts +2 -2
- package/src/__tests__/openai-image-service.test.ts +2 -2
- package/src/__tests__/openai-responses-cutover-guard.test.ts +2 -2
- package/src/__tests__/openai-responses-provider.test.ts +1 -1
- package/src/__tests__/path-policy.test.ts +4 -4
- package/src/__tests__/personal-memory-auth-bypass.test.ts +1 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +18 -18
- package/src/__tests__/plugin-api-model-profiles.test.ts +1 -1
- package/src/__tests__/plugin-api-provider.test.ts +1 -1
- package/src/__tests__/plugin-api-webhook-url.test.ts +4 -5
- package/src/__tests__/plugin-import-boundary-guard.test.ts +8 -39
- package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +2 -2
- package/src/__tests__/{provider-platform-proxy-integration.test.ts → provider-cloud-proxy-integration.test.ts} +70 -72
- package/src/__tests__/provider-commit-message-generator.test.ts +1 -1
- package/src/__tests__/provider-connections-backfill.test.ts +9 -9
- package/src/__tests__/provider-error-scenarios.test.ts +8 -8
- package/src/__tests__/provider-registry-ollama.test.ts +1 -1
- package/src/__tests__/provider-send-message-override-profile.test.ts +5 -5
- package/src/__tests__/registry.test.ts +3 -3
- package/src/__tests__/requests-mock.ts +972 -0
- package/src/__tests__/resolve-trust-class.test.ts +1 -1
- package/src/__tests__/resource-pressure-guard.test.ts +6 -6
- package/src/__tests__/resource-pressure-routes.test.ts +5 -5
- package/src/__tests__/retry-fallback-escalation.test.ts +5 -5
- package/src/__tests__/sanitize-config-for-transfer.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +97 -97
- package/src/__tests__/schedule-store.test.ts +1 -1
- package/src/__tests__/search-skills-unified.test.ts +9 -7
- package/src/__tests__/{secret-routes-platform-proxy.test.ts → secret-routes-cloud-proxy.test.ts} +48 -95
- package/src/__tests__/secret-routes-scrub.test.ts +2 -59
- package/src/__tests__/secure-keys.test.ts +1 -1
- package/src/__tests__/skill-load-plugin-scope.test.ts +2 -2
- package/src/__tests__/skill-load-tool.test.ts +1 -1
- package/src/__tests__/skill-projection-feature-flag.test.ts +0 -19
- package/src/__tests__/skill-projection.benchmark.test.ts +5 -7
- package/src/__tests__/skill-tool-factory.test.ts +1 -1
- package/src/__tests__/skills-file-content-endpoint.test.ts +12 -12
- package/src/__tests__/skills-files-catalog-fallback.test.ts +9 -9
- package/src/__tests__/skills.test.ts +1 -1
- package/src/__tests__/slim-skill-category.test.ts +11 -9
- package/src/__tests__/stt-stream-session.test.ts +3 -3
- package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
- package/src/__tests__/subagent-disposal.test.ts +5 -5
- package/src/__tests__/subagent-fork-notifications.test.ts +4 -4
- package/src/__tests__/subagent-fork-spawn.test.ts +5 -5
- package/src/__tests__/subagent-manager-notify.test.ts +5 -5
- package/src/__tests__/subagent-tool-gate-mode.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +1 -1
- package/src/__tests__/telegram-bot-username-resolution.test.ts +34 -52
- package/src/__tests__/telegram-config.test.ts +16 -16
- package/src/__tests__/telephony-tts-guard.test.ts +13 -13
- package/src/__tests__/test-preload.ts +17 -7
- package/src/__tests__/tool-audit.test.ts +1 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +7 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -1
- package/src/__tests__/turn-events-store.test.ts +1 -1
- package/src/__tests__/twilio-routes.test.ts +2 -1
- package/src/__tests__/ui-choice-copy-surfaces.test.ts +1 -1
- package/src/__tests__/unified-turn-context-client-os.test.ts +1 -1
- package/src/__tests__/validate-input.test.ts +5 -5
- package/src/__tests__/verification-outbound-delivery.test.ts +1 -1
- package/src/__tests__/voice-config-update.test.ts +15 -15
- package/src/__tests__/voice-ingress-preflight.test.ts +4 -4
- package/src/__tests__/web-search.test.ts +340 -859
- package/src/__tests__/workspace-git-service.test.ts +1 -1
- package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +12 -12
- package/src/__tests__/workspace-migration-087-memory-router-balanced-profile.test.ts +1 -1
- package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +1 -1
- package/src/__tests__/workspace-migration-100-upgrade-quality-profile-to-fable-5.test.ts +1 -1
- package/src/__tests__/workspace-migration-103-upgrade-quality-profile-to-opus-4-8.test.ts +1 -1
- package/src/__tests__/workspace-migration-110-flip-balanced-profile-to-together.test.ts +1 -1
- package/src/__tests__/workspace-migration-113-swap-balanced-profile-to-glm-5p2.test.ts +1 -1
- package/src/__tests__/workspace-migration-114-swap-quality-profile-to-opus.test.ts +1 -1
- package/src/__tests__/workspace-migration-123-swap-quality-profile-to-fable.test.ts +1 -1
- package/src/__tests__/workspace-migration-125-repoint-managed-connections-to-cadet.test.ts +3 -3
- package/src/__tests__/workspace-migration-126-strip-managed-profile-bodies.test.ts +9 -9
- package/src/__tests__/workspace-migration-127-backfill-default-provider.test.ts +11 -11
- package/src/__tests__/workspace-migration-130-speech-mode-to-provider.test.ts +3 -3
- package/src/__tests__/workspace-migration-132-web-search-mode-to-provider.test.ts +6 -6
- package/src/__tests__/workspace-migration-133-collapse-provider-connections.test.ts +3 -3
- package/src/__tests__/workspace-migration-134-image-generation-mode-to-provider.test.ts +6 -6
- package/src/__tests__/workspace-migration-136-repair-stale-fireworks-kimi-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-137-repair-retired-fireworks-minimax-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-146-repair-retired-fireworks-deepseek-flash-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-147-rename-colliding-backup-profile-names.test.ts +1 -1
- package/src/__tests__/workspace-migration-151-repair-renamed-fireworks-deepseek-pro-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-152-repair-retired-fireworks-minimax-m2p7-model-id.test.ts +1 -1
- package/src/__tests__/workspace-migration-159-rename-colliding-jev-profile-name.test.ts +1 -1
- package/src/__tests__/workspace-migration-160-repair-retired-fireworks-model-ids.test.ts +1 -1
- package/src/__tests__/workspace-migration-161-repair-retired-fireworks-glm-5p2-model-id.test.ts +1 -1
- package/src/api/events/cloud-disconnected.ts +21 -0
- package/src/api/events/host-bash.ts +1 -1
- package/src/api/events/host-cu.ts +1 -1
- package/src/api/events/host-file.ts +1 -1
- package/src/api/events/notification-intent.ts +1 -1
- package/src/api/events/{show-platform-login.ts → show-cloud-login.ts} +3 -5
- package/src/api/index.ts +11 -11
- package/src/api/responses/home.ts +1 -1
- package/src/api/surfaces.ts +4 -4
- package/src/approvals/guardian-request-resolvers.ts +2 -2
- package/src/avatar/accent-backfill.ts +1 -1
- package/src/avatar/identity-avatar.ts +1 -1
- package/src/avatar/notification-avatar.test.ts +2 -2
- package/src/avatar/notification-avatar.ts +2 -2
- package/src/avatar/resvg-lazy.test.ts +1 -1
- package/src/avatar/resvg-lazy.ts +3 -3
- package/src/avatar/sync-avatar.test.ts +76 -76
- package/src/avatar/sync-avatar.ts +15 -15
- package/src/avatar/traits-png-sync.ts +1 -1
- package/src/background-wake/background-wake-routes.test.ts +39 -39
- package/src/background-wake/{platform-client.test.ts → cloud-client.test.ts} +11 -11
- package/src/background-wake/{platform-client.ts → cloud-client.ts} +14 -14
- package/src/background-wake/publisher.ts +4 -4
- package/src/background-wake/wake-intent-hooks.test.ts +3 -3
- package/src/calls/__tests__/call-controller.test.ts +2 -2
- package/src/calls/__tests__/voice-session-bridge.test.ts +1 -1
- package/src/calls/call-domain.ts +1 -1
- package/src/calls/resolve-call-tts-provider.ts +6 -6
- package/src/calls/telephony-credential-preflight.ts +3 -3
- package/src/calls/telephony-tts-capability.ts +5 -6
- package/src/calls/tts-call-strategy.ts +1 -1
- package/src/calls/voice-escalation-judge.ts +1 -1
- package/src/calls/voice-ingress-preflight.ts +4 -4
- package/src/cli/bundled-modules.ts +1 -1
- package/src/cli/commands/__tests__/apps.test.ts +18 -53
- package/src/cli/commands/__tests__/plugins.test.ts +13 -13
- package/src/cli/commands/__tests__/tts.test.ts +1 -1
- package/src/cli/commands/auth.help.ts +3 -3
- package/src/cli/commands/auth.ts +2 -4
- package/src/cli/commands/browser.help.ts +2 -2
- package/src/cli/commands/channels/index.help.ts +2 -2
- package/src/cli/commands/channels/index.ts +1 -1
- package/src/cli/commands/channels/send.ts +1 -1
- package/src/cli/commands/cloud/__tests__/connect.test.ts +1 -1
- package/src/cli/commands/cloud/__tests__/disconnect.test.ts +3 -4
- package/src/cli/commands/cloud/connect.ts +2 -2
- package/src/cli/commands/cloud/credits-format.ts +1 -1
- package/src/cli/commands/cloud/index.help.ts +35 -35
- package/src/cli/commands/config.ts +1 -1
- package/src/cli/commands/credentials.ts +10 -12
- package/src/cli/commands/domain.ts +1 -1
- package/src/cli/commands/email.help.ts +1 -1
- package/src/cli/commands/email.ts +2 -2
- package/src/cli/commands/gateway.help.ts +1 -1
- package/src/cli/commands/gateway.ts +1 -1
- package/src/cli/commands/image-generation.help.ts +1 -1
- package/src/cli/commands/inference-providers.ts +1 -1
- package/src/cli/commands/inference.help.ts +2 -2
- package/src/cli/commands/memory/index.help.ts +1 -1
- package/src/cli/commands/oauth/connect.test.ts +2 -2
- package/src/cli/commands/oauth/connect.ts +1 -1
- package/src/cli/commands/oauth/index.help.ts +5 -5
- package/src/cli/commands/oauth/providers.ts +2 -2
- package/src/cli/commands/oauth/shared.ts +3 -3
- package/src/cli/commands/plugins.help.ts +2 -3
- package/src/cli/commands/plugins.ts +5 -5
- package/src/cli/commands/roadmap.help.ts +1 -1
- package/src/cli/commands/telemetry.help.ts +2 -2
- package/src/cli/commands/telemetry.ts +2 -2
- package/src/cli/commands/tts.help.ts +3 -3
- package/src/cli/commands/webhooks.help.ts +9 -9
- package/src/cli/commands/webhooks.ts +1 -1
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +8 -8
- package/src/cli/lib/__tests__/{install-from-platform.test.ts → install-from-cloud.test.ts} +54 -54
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +18 -18
- package/src/cli/lib/__tests__/{plugin-catalog-platform.test.ts → plugin-catalog-cloud.test.ts} +2 -2
- package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +1 -1
- package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +9 -9
- package/src/cli/lib/__tests__/plugin-details.test.ts +10 -10
- package/src/cli/lib/__tests__/plugins-install-offline.test.ts +24 -24
- package/src/cli/lib/bundled-marketplace.json +1 -1
- package/src/cli/lib/inspect-plugin.ts +2 -2
- package/src/cli/lib/{install-from-platform.ts → install-from-cloud.ts} +29 -29
- package/src/cli/lib/install-from-github.ts +4 -4
- package/src/cli/lib/plugin-catalog-cache.ts +7 -7
- package/src/cli/lib/{plugin-catalog-platform.ts → plugin-catalog-cloud.ts} +6 -6
- package/src/cli/lib/plugin-catalog-local.ts +2 -2
- package/src/cli/lib/publish-plugin.ts +9 -10
- package/src/cli/lib/search-plugins.ts +2 -2
- package/src/{platform → cloud}/client.test.ts +85 -86
- package/src/{platform → cloud}/client.ts +38 -46
- package/src/{platform/platform-patch-queue.test.ts → cloud/cloud-patch-queue.test.ts} +6 -9
- package/src/{platform/platform-patch-queue.ts → cloud/cloud-patch-queue.ts} +11 -11
- package/src/{platform/managed-speech.test.ts → cloud/cloud-speech.test.ts} +19 -19
- package/src/{platform/managed-speech.ts → cloud/cloud-speech.ts} +41 -41
- package/src/{platform → cloud}/consent-cache.test.ts +5 -5
- package/src/{platform → cloud}/consent-cache.ts +8 -8
- package/src/cloud/feature-gate.ts +8 -0
- package/src/{platform → cloud}/sync-identity.test.ts +4 -4
- package/src/{platform → cloud}/sync-identity.ts +6 -6
- package/src/config/__tests__/{platform-identity.test.ts → cloud-identity.test.ts} +54 -56
- package/src/config/__tests__/{platform-rehydration.test.ts → cloud-rehydration.test.ts} +47 -80
- package/src/config/__tests__/default-profile-catalog.test.ts +12 -12
- package/src/config/__tests__/default-provider.test.ts +4 -4
- package/src/config/__tests__/deployment-context-defaults.test.ts +23 -23
- package/src/config/__tests__/{jev-managed-profile.test.ts → jev-cloud-profile.test.ts} +3 -5
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +2 -2
- package/src/config/__tests__/loader-last-known-good.test.ts +6 -6
- package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +2 -2
- package/src/config/__tests__/profile-materialization.test.ts +7 -7
- package/src/config/__tests__/seed-default-provider.test.ts +17 -17
- package/src/config/__tests__/sync-gated-profiles.test.ts +20 -20
- package/src/config/__tests__/webhook-routing.test.ts +51 -51
- package/src/config/bundled-skills/computer-use/TOOLS.json +12 -12
- package/src/config/bundled-skills/messaging/SKILL.md +8 -8
- package/src/config/bundled-skills/messaging/TOOLS.json +2 -2
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +1 -1
- package/src/config/bundled-skills/messaging/tools/shared.ts +1 -1
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +2 -2
- package/src/config/bundled-skills/settings/TOOLS.json +3 -3
- package/src/config/bundled-skills/settings/tools/shared.ts +1 -1
- package/src/config/bundled-skills/settings/tools/voice-config-update.ts +12 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +3 -3
- package/src/config/bundled-skills/skill-management/TOOLS.json +8 -8
- package/src/config/bundled-skills/skill-management/tools/{delete-managed.ts → delete-cloud.ts} +2 -2
- package/src/config/bundled-skills/skill-management/tools/{scaffold-managed.ts → scaffold-cloud.ts} +2 -2
- package/src/config/call-site-defaults.ts +6 -6
- package/src/config/{platform-identity.ts → cloud-identity.ts} +39 -42
- package/src/config/cloud-rehydration.ts +35 -0
- package/src/config/{managed-speech-defaults.ts → cloud-speech-defaults.ts} +13 -13
- package/src/config/default-profile-catalog.ts +36 -38
- package/src/config/default-profile-names.ts +11 -11
- package/src/config/default-provider-resolution.ts +2 -2
- package/src/config/default-provider.ts +1 -1
- package/src/config/env-registry.ts +23 -21
- package/src/config/env.ts +33 -46
- package/src/config/feature-flag-registry.json +5 -5
- package/src/config/inference-profile-validation.ts +1 -1
- package/src/config/llm-resolver.ts +9 -10
- package/src/config/loader.ts +33 -17
- package/src/config/profile-materialization.ts +8 -8
- package/src/config/profile-text-generation.test.ts +1 -1
- package/src/config/sanitize-for-transfer.ts +1 -1
- package/src/config/schema.ts +6 -6
- package/src/config/schemas/__tests__/stt.test.ts +2 -2
- package/src/config/schemas/call-site-catalog.ts +1 -1
- package/src/config/schemas/channels.ts +8 -0
- package/src/config/schemas/{platform.ts → cloud.ts} +7 -6
- package/src/config/schemas/host-browser.ts +1 -0
- package/src/config/schemas/ingress.ts +1 -12
- package/src/config/schemas/llm.ts +45 -36
- package/src/config/schemas/memory-lifecycle.ts +11 -1
- package/src/config/schemas/services.ts +4 -4
- package/src/config/schemas/stt.ts +3 -3
- package/src/config/schemas/tts.ts +10 -5
- package/src/config/schemas/voice.ts +1 -1
- package/src/config/seed-inference-profiles.ts +19 -19
- package/src/config/skill-state.ts +2 -2
- package/src/config/skills.ts +4 -4
- package/src/config/sync-gated-profiles.ts +8 -8
- package/src/config/webhook-routing.ts +19 -19
- package/src/contacts/contacts-write.ts +1 -1
- package/src/credential-execution/ces-runtime.ts +6 -6
- package/src/credential-execution/{managed-catalog.ts → cloud-catalog.ts} +24 -24
- package/src/credential-execution/prompted-credential.ts +6 -18
- package/src/credential-health/credential-health-service.ts +61 -76
- package/src/daemon/__tests__/can-spawn-subagents.test.ts +1 -1
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +4 -4
- package/src/daemon/config-watcher.ts +2 -2
- package/src/daemon/conversation-agent-loop.ts +9 -9
- package/src/daemon/conversation-error.ts +36 -36
- package/src/daemon/conversation-skill-tools.ts +7 -7
- package/src/daemon/conversation-surfaces.ts +1 -1
- package/src/daemon/conversation-tool-setup.ts +2 -2
- package/src/daemon/conversation-turn-finalize.ts +1 -1
- package/src/daemon/conversation-workspace.ts +1 -1
- package/src/daemon/conversation.ts +1 -1
- package/src/daemon/credential-transcript-scrub.ts +21 -35
- package/src/daemon/daemon-readiness.ts +1 -1
- package/src/daemon/event-loop-watchdog.ts +2 -2
- package/src/daemon/handlers/config-ingress.ts +9 -9
- package/src/daemon/handlers/config-telegram.ts +6 -6
- package/src/daemon/handlers/skills.ts +20 -20
- package/src/daemon/host-cu-proxy.ts +1 -1
- package/src/daemon/lifecycle.ts +19 -19
- package/src/daemon/parse-actual-tokens-from-error.ts +3 -3
- package/src/daemon/providers-setup.ts +6 -6
- package/src/daemon/resource-pressure-guard-lifecycle.ts +1 -1
- package/src/daemon/resource-pressure-guard.ts +6 -6
- package/src/daemon/shutdown-handlers.ts +1 -1
- package/src/daemon/sqlite-corruption-watchdog.ts +3 -3
- package/src/daemon/trust-context.ts +1 -1
- package/src/desktop/desktop-automation-lease.ts +1 -1
- package/src/desktop/desktop-browser-endpoint.ts +2 -4
- package/src/desktop/desktop-computer-use-routing.test.ts +6 -6
- package/src/desktop/desktop-stream-bridge.test.ts +4 -4
- package/src/desktop/desktop-stream-bridge.ts +1 -1
- package/src/desktop/{virtual-desktop-platform.test.ts → virtual-desktop-cloud.test.ts} +6 -6
- package/src/desktop/virtual-desktop-feature.ts +7 -7
- package/src/email/byo-email-credential.ts +1 -1
- package/src/email/registered-inbox.test.ts +16 -16
- package/src/email/registered-inbox.ts +20 -20
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/hooks/hook-loader.ts +2 -2
- package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
- package/src/inbound/__tests__/tunnel-probe.test.ts +8 -8
- package/src/inbound/{platform-callback-registration.ts → cloud-callback-registration.ts} +49 -60
- package/src/inbound/oauth-callback-url.ts +6 -6
- package/src/inbound/pod-webhook-claim.ts +2 -2
- package/src/inbound/public-ingress-urls.ts +3 -3
- package/src/inbound/tunnel-probe.ts +21 -15
- package/src/inbound/tunnel-webhooks-gate.ts +3 -3
- package/src/ipc/__tests__/db-readiness-ipc-gate.test.ts +1 -1
- package/src/ipc/__tests__/email-ipc.test.ts +8 -8
- package/src/ipc/gateway-client.test.ts +55 -59
- package/src/ipc/gateway-flag-listener.ts +3 -3
- package/src/ipc/routes/db-proxy.ts +1 -1
- package/src/live-voice/__tests__/live-activity-reporter.test.ts +2 -2
- package/src/live-voice/__tests__/{live-voice-managed-speech-fallback.test.ts → live-voice-cloud-speech-fallback.test.ts} +15 -15
- package/src/live-voice/__tests__/live-voice-credential-preflight.test.ts +7 -7
- package/src/live-voice/__tests__/live-voice-stt.test.ts +1 -1
- package/src/live-voice/live-activity-reporter.ts +7 -7
- package/src/live-voice/live-voice-credential-preflight.ts +6 -6
- package/src/live-voice/live-voice-session.ts +3 -3
- package/src/live-voice/live-voice-tts.ts +1 -1
- package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +4 -4
- package/src/mcp/__tests__/mcp-oauth-provider.test.ts +1 -1
- package/src/mcp/mcp-oauth-provider.ts +2 -2
- package/src/media/gemini-image-service.ts +11 -13
- package/src/media/image-credentials.ts +9 -9
- package/src/media/openai-image-service.ts +1 -1
- package/src/media/types.ts +3 -3
- package/src/messaging/providers/channel-transport.ts +1 -1
- package/src/messaging/providers/discord/transport.ts +1 -1
- package/src/messaging/providers/gmail/adapter.ts +1 -1
- package/src/messaging/providers/gmail/client.ts +4 -4
- package/src/messaging/providers/outlook/adapter.ts +1 -1
- package/src/messaging/providers/slack/adapter.ts +1 -1
- package/src/messaging/providers/slack/transport.ts +1 -1
- package/src/messaging/providers/telegram-bot/transport.ts +1 -1
- package/src/monitoring/db-integrity-check.ts +1 -1
- package/src/monitoring/db-integrity-sample.ts +2 -2
- package/src/monitoring/mount-watch.ts +1 -1
- package/src/monitoring/oom-kill-reporter.ts +1 -1
- package/src/monitoring/worker.ts +5 -5
- package/src/notifications/README.md +2 -2
- package/src/notifications/__tests__/broadcaster.test.ts +9 -9
- package/src/notifications/__tests__/completion-policy.test.ts +1 -1
- package/src/notifications/__tests__/emit-signal-pipeline-failure.test.ts +4 -4
- package/src/notifications/activity-failed-dedupe.ts +1 -1
- package/src/notifications/adapters/{platform.ts → cloud.ts} +8 -8
- package/src/notifications/broadcaster.ts +10 -10
- package/src/notifications/decision-engine.ts +1 -1
- package/src/notifications/destination-resolver.ts +1 -1
- package/src/notifications/emit-signal.ts +6 -6
- package/src/notifications/types.ts +2 -2
- package/src/oauth/__tests__/identity-verifier.test.ts +1 -1
- package/src/oauth/__tests__/{seed-providers-managed.test.ts → seed-providers-cloud.test.ts} +13 -13
- package/src/oauth/byo-connection.test.ts +2 -2
- package/src/oauth/{platform-connection.test.ts → cloud-connection.test.ts} +41 -43
- package/src/oauth/{platform-connection.ts → cloud-connection.ts} +19 -19
- package/src/oauth/connection-resolver.test.ts +59 -61
- package/src/oauth/connection-resolver.ts +22 -22
- package/src/oauth/connection.ts +1 -1
- package/src/oauth/oauth-store.ts +8 -8
- package/src/oauth/provider-serializer.ts +4 -4
- package/src/oauth/revoke.ts +1 -1
- package/src/oauth/seed-providers.ts +32 -32
- package/src/permissions/approval-provenance.ts +1 -1
- package/src/permissions/checker.test.ts +18 -16
- package/src/permissions/checker.ts +3 -3
- package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
- package/src/persistence/embeddings/embedding-backend.test.ts +16 -16
- package/src/persistence/embeddings/embedding-backend.ts +13 -13
- package/src/persistence/embeddings/embedding-gemini.test.ts +9 -12
- package/src/persistence/embeddings/embedding-gemini.ts +11 -11
- package/src/persistence/embeddings/embedding-runtime-manager.ts +2 -2
- package/src/persistence/jobs-store.ts +1 -1
- package/src/persistence/lifecycle-events-store.ts +1 -1
- package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
- package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
- package/src/persistence/migrations/224-oauth-providers-managed-service-is-paid.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.ts +2 -2
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
- package/src/persistence/migrations/306-rewrite-frontier-profile-pins.ts +1 -1
- package/src/persistence/migrations/351-schedule-skill-script-handoff.ts +1 -1
- package/src/persistence/migrations/361-normalize-managed-connection-rows.test.ts +3 -3
- package/src/persistence/migrations/361-normalize-managed-connection-rows.ts +7 -7
- package/src/persistence/migrations/__tests__/319-remove-legacy-managed-connections.test.ts +2 -2
- package/src/persistence/schema/oauth.ts +1 -1
- package/src/plugin-api/index.ts +4 -4
- package/src/plugin-api/model-profiles.test.ts +1 -1
- package/src/plugin-api/model-profiles.ts +1 -1
- package/src/plugin-api/transcription-session.ts +1 -1
- package/src/plugin-api/vision-support.test.ts +1 -1
- package/src/plugin-api/webhook-url.ts +12 -12
- package/src/plugins/__tests__/source-fingerprint.test.ts +1 -1
- package/src/plugins/defaults/{platform-hosted → cloud-hosted}/__tests__/reengage.test.ts +5 -6
- package/src/plugins/defaults/cloud-hosted/package.json +14 -0
- package/src/plugins/defaults/{platform-hosted → cloud-hosted}/routes/reengage.ts +3 -3
- package/src/plugins/defaults/index.ts +6 -6
- package/src/plugins/defaults/main.ts +5 -5
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +5 -5
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-prompt.test.ts +1 -1
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-provider-path.test.ts +1 -1
- package/src/plugins/defaults/memory/config.ts +4 -4
- package/src/plugins/defaults/memory/memory-retrospective-constants.ts +2 -2
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +7 -7
- package/src/plugins/defaults/memory/memory-retrospective-prompt.ts +5 -5
- package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +2 -2
- package/src/plugins/defaults/memory/src/__tests__/memory-v2-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/boot-maintenance.test.ts +20 -20
- package/src/plugins/defaults/memory/substrate/__tests__/cli-command-store.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/skill-store.test.ts +3 -3
- package/src/plugins/defaults/memory/substrate/boot-maintenance.ts +17 -17
- package/src/plugins/defaults/memory/substrate/cli-command-store.ts +2 -2
- package/src/plugins/defaults/memory/substrate/prompts/consolidation.ts +1 -1
- package/src/plugins/defaults/memory/substrate/skill-store.ts +4 -4
- package/src/plugins/defaults/memory/v3/__tests__/maintain-job.test.ts +3 -3
- package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +2 -2
- package/src/plugins/defaults/memory/v3/maintain-job.ts +10 -10
- package/src/plugins/defaults/memory/v3/orchestrate.ts +3 -3
- package/src/plugins/defaults/memory/worker.ts +5 -5
- package/src/plugins/defaults/workspace/injectors.ts +2 -2
- package/src/plugins/mtime-cache.ts +1 -1
- package/src/plugins/source-versions.ts +1 -1
- package/src/plugins/types.ts +1 -1
- package/src/prompts/__tests__/system-prompt.test.ts +1 -1
- package/src/prompts/normalize-onboarding.ts +1 -1
- package/src/prompts/persona-resolver.ts +1 -1
- package/src/prompts/templates/system-sections.ts +3 -3
- package/src/providers/__tests__/cadet-connection-routing.test.ts +7 -7
- package/src/providers/__tests__/cadet-mismatch-routing.test.ts +12 -12
- package/src/providers/__tests__/connection-model-compat.test.ts +2 -2
- package/src/providers/__tests__/dispatch-connection-routing.test.ts +10 -10
- package/src/providers/__tests__/inference.test.ts +2 -2
- package/src/providers/__tests__/preflight-resolved-config.test.ts +16 -16
- package/src/providers/__tests__/retry-callsite.test.ts +1 -1
- package/src/providers/__tests__/satellite-connection-routing.test.ts +4 -4
- package/src/providers/__tests__/search-provider-catalog.test.ts +2 -2
- package/src/providers/__tests__/voice-error-copy.test.ts +3 -3
- package/src/providers/anthropic/client.ts +1 -1
- package/src/providers/cadet/client.ts +1 -1
- package/src/providers/cadet-model-routing.test.ts +19 -19
- package/src/providers/cadet-model-routing.ts +23 -23
- package/src/providers/call-site-routing.ts +10 -10
- package/src/providers/{platform-proxy → cloud-proxy}/constants.ts +11 -11
- package/src/providers/{platform-proxy → cloud-proxy}/context.ts +26 -26
- package/src/providers/connection-resolution.ts +43 -43
- package/src/providers/fallback-breaker.ts +2 -2
- package/src/providers/fetch-provider-catalog.ts +3 -3
- package/src/providers/gemini/client.ts +5 -5
- package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +3 -3
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +8 -8
- package/src/providers/inference/__tests__/base-url-security.test.ts +4 -4
- package/src/providers/inference/adapter-factory.ts +35 -35
- package/src/providers/inference/auth.ts +10 -10
- package/src/providers/inference/backfill.ts +11 -11
- package/src/providers/inference/connection-availability.ts +24 -24
- package/src/providers/inference/connections.ts +18 -20
- package/src/providers/inference/profile-probe.ts +4 -4
- package/src/providers/inference/resolve-auth.ts +8 -8
- package/src/providers/jev/ask.test.ts +1 -1
- package/src/providers/jev/ask.ts +2 -2
- package/src/providers/model-catalog.ts +8 -9
- package/src/providers/openai/__tests__/api-error-normalization.test.ts +3 -3
- package/src/providers/openai/api-error-normalization.ts +2 -2
- package/src/providers/provider-availability.ts +4 -4
- package/src/providers/provider-env-vars.ts +1 -1
- package/src/providers/provider-secret-catalog.ts +1 -1
- package/src/providers/registry.ts +20 -20
- package/src/providers/retry.ts +26 -26
- package/src/providers/routing-identity.ts +10 -10
- package/src/providers/search-provider-catalog.ts +2 -2
- package/src/providers/speech-to-text/__tests__/{cadet-managed-realtime.test.ts → cadet-cloud-realtime.test.ts} +3 -3
- package/src/providers/speech-to-text/__tests__/{cadet-managed.test.ts → cadet-cloud.test.ts} +35 -35
- package/src/providers/speech-to-text/__tests__/deepgram-flux-realtime.test.ts +1 -1
- package/src/providers/speech-to-text/__tests__/resolve.test.ts +27 -27
- package/src/providers/speech-to-text/{cadet-managed-flux-realtime.ts → cadet-cloud-flux-realtime.ts} +6 -8
- package/src/providers/speech-to-text/{cadet-managed-realtime.ts → cadet-cloud-realtime.ts} +3 -3
- package/src/providers/speech-to-text/{cadet-managed.ts → cadet-cloud.ts} +18 -20
- package/src/providers/speech-to-text/cadet-speech-relay-connection.ts +7 -7
- package/src/providers/speech-to-text/deepgram-flux-frames.ts +3 -3
- package/src/providers/speech-to-text/deepgram-flux-realtime.ts +4 -4
- package/src/providers/speech-to-text/provider-catalog.ts +3 -3
- package/src/providers/speech-to-text/resolve.ts +26 -28
- package/src/providers/together/client.ts +1 -1
- package/src/providers/types.ts +4 -4
- package/src/providers/voice-error-copy.ts +1 -1
- package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +10 -10
- package/src/runtime/agent-wake.ts +1 -1
- package/src/runtime/auth/__tests__/middleware.test.ts +1 -1
- package/src/runtime/auth/middleware.ts +1 -1
- package/src/runtime/auth/scopes.ts +1 -1
- package/src/runtime/capabilities.ts +1 -1
- package/src/runtime/channel-invite-transports/discord.ts +1 -1
- package/src/runtime/channel-invite-transports/email.ts +2 -2
- package/src/runtime/channel-readiness-service.ts +15 -13
- package/src/runtime/channel-reply-session.test.ts +1 -1
- package/src/runtime/channel-reply-session.ts +1 -1
- package/src/runtime/http-server.ts +4 -4
- package/src/runtime/introduction-policy.ts +4 -4
- package/src/runtime/migrations/__tests__/origin-mode.test.ts +14 -14
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +1 -1
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +3 -4
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge.test.ts +6 -7
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +1 -1
- package/src/runtime/migrations/migration-transport.ts +3 -3
- package/src/runtime/migrations/origin-mode.ts +6 -9
- package/src/runtime/migrations/vbundle-import-policy.ts +2 -2
- package/src/runtime/migrations/vbundle-importer.ts +4 -4
- package/src/runtime/migrations/vbundle-streaming-importer.ts +6 -6
- package/src/runtime/migrations/vbundle-validator.ts +1 -1
- package/src/runtime/routes/__tests__/{platform-credits-routes.test.ts → cloud-credits-routes.test.ts} +9 -9
- package/src/runtime/routes/__tests__/{platform-invoice-routes.test.ts → cloud-invoice-routes.test.ts} +13 -13
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +1 -1
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +26 -25
- package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +5 -5
- package/src/runtime/routes/__tests__/default-provider-routes.test.ts +10 -10
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +18 -18
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +18 -16
- package/src/runtime/routes/__tests__/inference-send-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/migration-cadet-metadata-reconcile.test.ts +5 -20
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -22
- package/src/runtime/routes/__tests__/oauth-proxy-routes.test.ts +27 -27
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +5 -5
- package/src/runtime/routes/__tests__/ps-routes.test.ts +5 -3
- package/src/runtime/routes/__tests__/roadmap-routes.test.ts +15 -15
- package/src/runtime/routes/__tests__/webhook-routes.test.ts +31 -31
- package/src/runtime/routes/app-management-routes.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +1 -1
- package/src/runtime/routes/auth-routes.ts +14 -14
- package/src/runtime/routes/avatar-routes.ts +0 -14
- package/src/runtime/routes/background-wake-routes.ts +4 -4
- package/src/runtime/routes/channel-availability-routes.ts +4 -4
- package/src/runtime/routes/client-routes.ts +5 -5
- package/src/runtime/routes/cloud-credentials.ts +45 -0
- package/src/runtime/routes/{platform-routes.ts → cloud-routes.ts} +83 -116
- package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +82 -282
- package/src/runtime/routes/credential-routes.ts +28 -30
- package/src/runtime/routes/default-provider-routes.ts +1 -1
- package/src/runtime/routes/desktop-setup-routes.test.ts +5 -5
- package/src/runtime/routes/desktop-setup-routes.ts +1 -1
- package/src/runtime/routes/domain-routes.ts +15 -21
- package/src/runtime/routes/email-routes.ts +13 -13
- package/src/runtime/routes/errors.ts +1 -1
- package/src/runtime/routes/gateway-status-routes.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +3 -3
- package/src/runtime/routes/inbound-message-handler.ts +1 -1
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +1 -1
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +1 -1
- package/src/runtime/routes/index.ts +1 -1
- package/src/runtime/routes/inference-profile-availability-guard.ts +5 -5
- package/src/runtime/routes/inference-profiles-routes.ts +11 -11
- package/src/runtime/routes/inference-provider-connection-routes.ts +24 -24
- package/src/runtime/routes/ingress-status-routes.ts +1 -1
- package/src/runtime/routes/integrations/a2a.ts +2 -2
- package/src/runtime/routes/integrations/twilio.ts +21 -35
- package/src/runtime/routes/internal-telemetry-routes.ts +2 -2
- package/src/runtime/routes/live-voice-routes.test.ts +4 -4
- package/src/runtime/routes/live-voice-routes.ts +6 -6
- package/src/runtime/routes/migration-routes.ts +34 -40
- package/src/runtime/routes/oauth-commands-routes.ts +31 -31
- package/src/runtime/routes/oauth-providers.ts +5 -5
- package/src/runtime/routes/oauth-proxy-passthrough.test.ts +1 -1
- package/src/runtime/routes/oauth-proxy-passthrough.ts +8 -8
- package/src/runtime/routes/oauth-proxy-routes.ts +15 -17
- package/src/runtime/routes/oauth-request-hints.test.ts +1 -1
- package/src/runtime/routes/oauth-request-hints.ts +1 -1
- package/src/runtime/routes/plugins-routes.ts +9 -9
- package/src/runtime/routes/profiler-routes.ts +1 -1
- package/src/runtime/routes/ps-routes.ts +4 -0
- package/src/runtime/routes/roadmap-routes.ts +18 -20
- package/src/runtime/routes/secret-routes.ts +29 -55
- package/src/runtime/routes/settings-routes.ts +18 -23
- package/src/runtime/routes/telemetry-routes.ts +4 -4
- package/src/runtime/routes/tts-routes.ts +4 -4
- package/src/runtime/routes/user-route-resolution.ts +1 -1
- package/src/runtime/routes/webhook-routes.ts +18 -18
- package/src/runtime/routes/workflow-routes.ts +5 -5
- package/src/runtime/sync/resource-sync-events.ts +2 -2
- package/src/runtime/verification-outbound-actions.ts +4 -4
- package/src/schedule/integration-status.ts +6 -6
- package/src/schedule/run-script.ts +1 -1
- package/src/schedule/schedule-timezone.ts +1 -1
- package/src/schedule/worker.ts +5 -5
- package/src/security/auth-fallback-events-store.ts +1 -1
- package/src/security/oauth2.ts +4 -4
- package/src/skills/available-skills.ts +4 -4
- package/src/skills/catalog-files.ts +8 -8
- package/src/skills/catalog-install.ts +12 -12
- package/src/skills/categories-cache.ts +3 -3
- package/src/skills/clawhub.ts +1 -1
- package/src/skills/{platform-compatibility.test.ts → cloud-compatibility.test.ts} +7 -7
- package/src/skills/{platform-compatibility.ts → cloud-compatibility.ts} +2 -4
- package/src/skills/{managed-store.ts → cloud-store.ts} +21 -23
- package/src/skills/inline-command-runner.ts +1 -1
- package/src/skills/install-meta.ts +1 -1
- package/src/skills/path-classifier.ts +4 -4
- package/src/skills/skill-history.ts +4 -4
- package/src/skills/skillssh-registry.ts +1 -1
- package/src/stt/__tests__/daemon-batch-transcriber.test.ts +1 -1
- package/src/stt/daemon-batch-transcriber.ts +7 -7
- package/src/stt/types.ts +3 -3
- package/src/subagent/manager.ts +15 -15
- package/src/subagent/types.ts +1 -1
- package/src/telegram/__tests__/webhook-health.test.ts +16 -16
- package/src/telegram/webhook-health.ts +10 -10
- package/src/telemetry/__tests__/config-setting-events-store.test.ts +1 -1
- package/src/telemetry/__tests__/outbox-test-harness.ts +2 -2
- package/src/telemetry/config-setting-events-store.ts +1 -1
- package/src/telemetry/config-setting-snapshot.ts +1 -1
- package/src/telemetry/memory-corpus-size.ts +1 -1
- package/src/telemetry/memory-tier-reporter.test.ts +2 -2
- package/src/telemetry/memory-tier-reporter.ts +3 -3
- package/src/telemetry/telemetry-event-sources.test.ts +2 -2
- package/src/telemetry/telemetry-event-sources.ts +9 -9
- package/src/telemetry/telemetry-events-outbox.ts +2 -2
- package/src/telemetry/telemetry-wire-validation.test.ts +1 -1
- package/src/telemetry/telemetry-wire-validation.ts +3 -3
- package/src/telemetry/telemetry-wire.generated.ts +1 -1
- package/src/telemetry/tool-audit.ts +1 -1
- package/src/telemetry/tool-executed-events-store.test.ts +1 -1
- package/src/telemetry/trace-collection-policy.ts +4 -4
- package/src/telemetry/turn-events-store.ts +1 -1
- package/src/telemetry/turn-outcome.ts +1 -1
- package/src/telemetry/turn-trace-store.ts +2 -2
- package/src/telemetry/types.test.ts +1 -1
- package/src/telemetry/types.ts +19 -19
- package/src/telemetry/usage-telemetry-reporter.test.ts +42 -42
- package/src/telemetry/usage-telemetry-reporter.ts +17 -17
- package/src/telemetry/watchdog-direct-emit.test.ts +9 -9
- package/src/telemetry/watchdog-direct-emit.ts +10 -10
- package/src/tools/__tests__/side-effect-abort-guard.test.ts +2 -2
- package/src/tools/browser/cdp-client/factory.ts +1 -1
- package/src/tools/computer-use/target.ts +2 -2
- package/src/tools/credentials/store.ts +6 -15
- package/src/tools/network/__tests__/{managed-search-proxy.test.ts → cloud-search-proxy.test.ts} +20 -20
- package/src/tools/network/__tests__/web-search.test.ts +14 -14
- package/src/tools/network/{managed-search-proxy.ts → cloud-search-proxy.ts} +13 -13
- package/src/tools/network/web-search.ts +9 -9
- package/src/tools/permission-checker.ts +2 -2
- package/src/tools/shared/input-misuse.ts +1 -1
- package/src/tools/shared/input-repairs.ts +4 -4
- package/src/tools/skills/{delete-managed.ts → delete-cloud.ts} +4 -4
- package/src/tools/skills/find-similar-skills.test.ts +7 -7
- package/src/tools/skills/find-similar-skills.ts +15 -15
- package/src/tools/skills/load.ts +6 -6
- package/src/tools/skills/{scaffold-managed.ts → scaffold-cloud.ts} +16 -16
- package/src/tools/skills/skill-script-runner.ts +2 -2
- package/src/tools/terminal/safe-env.ts +3 -3
- package/src/tools/tool-types.ts +2 -2
- package/src/tools/types.ts +2 -2
- package/src/tools/ui-surface/surface-shape-docs.ts +2 -2
- package/src/tools/workflows/manage-workflows.ts +1 -1
- package/src/tools/workspace-tools/loader.ts +1 -1
- package/src/tts/__tests__/cadet-provider.test.ts +5 -5
- package/src/tts/provider-catalog.ts +1 -1
- package/src/tts/providers/cadet-provider.ts +23 -23
- package/src/tts/providers/cadet-tts-socket.ts +2 -2
- package/src/tts/tts-config-resolver.ts +1 -1
- package/src/tts/tts-voice-field.ts +3 -3
- package/src/usage/subagent-attribution.ts +1 -1
- package/src/util/__tests__/process-table.test.ts +47 -0
- package/src/util/canonicalize-identity.ts +1 -1
- package/src/util/cgroup-cpu.ts +5 -5
- package/src/util/cgroup-memory.ts +2 -2
- package/src/util/container-cpu-sampler.ts +4 -4
- package/src/util/disk-usage.ts +4 -4
- package/src/util/errors.ts +3 -3
- package/src/util/oom-priority.ts +1 -1
- package/src/util/platform.ts +5 -5
- package/src/util/process-table.ts +39 -5
- package/src/util/provider-error-patterns.ts +2 -2
- package/src/watch/__tests__/watch-retro.test.ts +2 -2
- package/src/watch/watch-retro.ts +1 -1
- package/src/watcher/__tests__/telemetry.test.ts +2 -2
- package/src/watcher/telemetry.ts +1 -1
- package/src/windows-compiled-cli.ts +1 -1
- package/src/workspace/adaptive-thinking-repair.ts +4 -4
- package/src/workspace/byok-default-profile-ensure.ts +7 -7
- package/src/workspace/git-service.ts +2 -2
- package/src/workspace/migrations/006-services-config.ts +1 -1
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +1 -1
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +1 -1
- package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +1 -1
- package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +4 -4
- package/src/workspace/migrations/087-memory-router-balanced-profile.ts +3 -3
- package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +4 -4
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +5 -5
- package/src/workspace/migrations/100-upgrade-quality-profile-to-fable-5.ts +4 -4
- package/src/workspace/migrations/101-upgrade-balanced-economy-to-minimax-m3.ts +4 -4
- package/src/workspace/migrations/103-upgrade-quality-profile-to-opus-4-8.ts +5 -5
- package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +1 -1
- package/src/workspace/migrations/106-drop-collect-usage-data.ts +1 -1
- package/src/workspace/migrations/108-drop-balanced-economy-profile.ts +4 -4
- package/src/workspace/migrations/109-swap-quality-profile-to-glm-5p2.ts +11 -11
- package/src/workspace/migrations/110-flip-balanced-profile-to-together.ts +6 -6
- package/src/workspace/migrations/113-swap-balanced-profile-to-glm-5p2.ts +5 -5
- package/src/workspace/migrations/114-swap-quality-profile-to-opus.ts +4 -4
- package/src/workspace/migrations/115-drop-frontier-profile.ts +5 -5
- package/src/workspace/migrations/123-swap-quality-profile-to-fable.ts +5 -5
- package/src/workspace/migrations/125-repoint-managed-connections-to-cadet.ts +3 -3
- package/src/workspace/migrations/126-strip-managed-profile-bodies.ts +2 -2
- package/src/workspace/migrations/127-backfill-default-provider.ts +4 -4
- package/src/workspace/migrations/130-speech-mode-to-provider.ts +4 -4
- package/src/workspace/migrations/131-drop-web-fetch-mode.ts +1 -1
- package/src/workspace/migrations/132-web-search-mode-to-provider.ts +6 -6
- package/src/workspace/migrations/133-collapse-provider-connections.ts +3 -3
- package/src/workspace/migrations/134-image-generation-mode-to-provider.ts +4 -4
- package/src/workspace/migrations/136-repair-stale-fireworks-kimi-model-id.ts +2 -2
- package/src/workspace/migrations/137-repair-retired-fireworks-minimax-model-id.ts +2 -2
- package/src/workspace/migrations/139-clear-renamed-cost-profile-label.ts +2 -2
- package/src/workspace/migrations/141-stt-english-default-to-multilingual.ts +4 -4
- package/src/workspace/migrations/144-convert-stranded-subscription-openai-profiles.ts +1 -1
- package/src/workspace/migrations/145-collapse-profile-bindings-to-entries.ts +2 -2
- package/src/workspace/migrations/146-repair-retired-fireworks-deepseek-flash-model-id.ts +2 -2
- package/src/workspace/migrations/148-strip-unsupported-fallback-profiles.ts +2 -2
- package/src/workspace/migrations/150-stt-flux-provider-to-model-family.ts +1 -1
- package/src/workspace/migrations/151-repair-renamed-fireworks-deepseek-pro-model-id.ts +2 -2
- package/src/workspace/migrations/152-repair-retired-fireworks-minimax-m2p7-model-id.ts +2 -2
- package/src/workspace/migrations/159-rename-colliding-jev-profile-name.ts +2 -2
- package/src/workspace/migrations/160-repair-retired-fireworks-model-ids.ts +2 -2
- package/src/workspace/migrations/161-repair-retired-fireworks-glm-5p2-model-id.ts +2 -2
- package/src/workspace/migrations/__tests__/141-stt-english-default-to-multilingual.test.ts +1 -1
- package/src/workspace/migrations/__tests__/150-stt-flux-provider-to-model-family.test.ts +1 -1
- package/src/workspace/migrations/registry.ts +6 -6
- package/src/workspace/top-level-renderer.ts +1 -1
- package/src/workspace/turn-commit.ts +2 -2
- package/src/__tests__/config-loader-platform-defaults.test.ts +0 -606
- package/src/__tests__/mock-gateway-ipc.ts +0 -260
- package/src/api/events/platform-disconnected.ts +0 -21
- package/src/config/platform-rehydration.ts +0 -60
- package/src/platform/feature-gate.ts +0 -8
- package/src/plugins/defaults/platform-hosted/package.json +0 -14
- package/src/runtime/routes/platform-managed-credentials.ts +0 -50
- /package/src/__tests__/{gateway-client-managed-outbound.test.ts → gateway-client-cloud-outbound.test.ts} +0 -0
- /package/src/__tests__/{secure-keys-managed-failover.test.ts → secure-keys-cloud-failover.test.ts} +0 -0
|
@@ -13,7 +13,7 @@ import type { BackgroundWakeIntent } from "./next-wake.js";
|
|
|
13
13
|
// the heartbeat mock exposes that too.
|
|
14
14
|
type BackgroundWakeRuntime = {
|
|
15
15
|
scheduler: Pick<SchedulerHandle, "runOnce" | "runDueWorkOnce">;
|
|
16
|
-
heartbeat: Pick<HeartbeatService, "nextRunAt" | "
|
|
16
|
+
heartbeat: Pick<HeartbeatService, "nextRunAt" | "runCloudWakeIfDue">;
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
let mockScheduler: BackgroundWakeRuntime["scheduler"] | null = null;
|
|
@@ -214,7 +214,7 @@ describe("background wake runtime routes", () => {
|
|
|
214
214
|
actualNextDueAt: dueAt,
|
|
215
215
|
reason: "mixed",
|
|
216
216
|
});
|
|
217
|
-
const
|
|
217
|
+
const heartbeatRunCloud = mock(async () => ({
|
|
218
218
|
due: true,
|
|
219
219
|
completed: 1,
|
|
220
220
|
skipped: 0,
|
|
@@ -226,7 +226,7 @@ describe("background wake runtime routes", () => {
|
|
|
226
226
|
setBackgroundWakeRuntime({
|
|
227
227
|
heartbeat: {
|
|
228
228
|
nextRunAt: dueAt,
|
|
229
|
-
|
|
229
|
+
runCloudWakeIfDue: heartbeatRunCloud,
|
|
230
230
|
},
|
|
231
231
|
scheduler: {
|
|
232
232
|
runOnce: mock(async () => 2),
|
|
@@ -240,11 +240,11 @@ describe("background wake runtime routes", () => {
|
|
|
240
240
|
});
|
|
241
241
|
await flushBackgroundWakeDrainsForTest();
|
|
242
242
|
|
|
243
|
-
expect(
|
|
244
|
-
expect(
|
|
243
|
+
expect(heartbeatRunCloud).toHaveBeenCalledTimes(1);
|
|
244
|
+
expect(heartbeatRunCloud).toHaveBeenCalledWith(
|
|
245
245
|
expect.objectContaining({ scheduledFor: NOW }),
|
|
246
246
|
);
|
|
247
|
-
expect(firstCallArg(
|
|
247
|
+
expect(firstCallArg(heartbeatRunCloud)).not.toHaveProperty("assumeDue");
|
|
248
248
|
expect(schedulerRunDue).toHaveBeenCalledTimes(1);
|
|
249
249
|
expect(response).toEqual(acceptedResponse({ reason: "mixed" }));
|
|
250
250
|
expect(lastCompletionPayload()).toEqual({
|
|
@@ -255,7 +255,7 @@ describe("background wake runtime routes", () => {
|
|
|
255
255
|
});
|
|
256
256
|
|
|
257
257
|
test("drain-due skips heartbeat when it is not due and reports no scheduler work", async () => {
|
|
258
|
-
const
|
|
258
|
+
const heartbeatRunCloud = mock(async () => ({
|
|
259
259
|
due: true,
|
|
260
260
|
completed: 1,
|
|
261
261
|
skipped: 0,
|
|
@@ -264,7 +264,7 @@ describe("background wake runtime routes", () => {
|
|
|
264
264
|
setBackgroundWakeRuntime({
|
|
265
265
|
heartbeat: {
|
|
266
266
|
nextRunAt: Date.now() + 5 * 60_000,
|
|
267
|
-
|
|
267
|
+
runCloudWakeIfDue: heartbeatRunCloud,
|
|
268
268
|
},
|
|
269
269
|
scheduler: {
|
|
270
270
|
runOnce: mock(async () => 0),
|
|
@@ -276,7 +276,7 @@ describe("background wake runtime routes", () => {
|
|
|
276
276
|
const response = await handler({ body: drainBodyFixture() });
|
|
277
277
|
await flushBackgroundWakeDrainsForTest();
|
|
278
278
|
|
|
279
|
-
expect(
|
|
279
|
+
expect(heartbeatRunCloud).not.toHaveBeenCalled();
|
|
280
280
|
expect(schedulerRunDue).toHaveBeenCalledTimes(1);
|
|
281
281
|
expect(response).toEqual(acceptedResponse());
|
|
282
282
|
expect(lastCompletionPayload()).toMatchObject({
|
|
@@ -297,7 +297,7 @@ describe("background wake runtime routes", () => {
|
|
|
297
297
|
setBackgroundWakeRuntime({
|
|
298
298
|
heartbeat: {
|
|
299
299
|
nextRunAt: null,
|
|
300
|
-
|
|
300
|
+
runCloudWakeIfDue: mock(async () => ({
|
|
301
301
|
due: false,
|
|
302
302
|
completed: 0,
|
|
303
303
|
skipped: 0,
|
|
@@ -328,7 +328,7 @@ describe("background wake runtime routes", () => {
|
|
|
328
328
|
actualNextDueAt: dueAt,
|
|
329
329
|
reason: "heartbeat",
|
|
330
330
|
});
|
|
331
|
-
const
|
|
331
|
+
const heartbeatRunCloud = mock(async () => ({
|
|
332
332
|
due: true,
|
|
333
333
|
completed: 1,
|
|
334
334
|
skipped: 0,
|
|
@@ -340,7 +340,7 @@ describe("background wake runtime routes", () => {
|
|
|
340
340
|
setBackgroundWakeRuntime({
|
|
341
341
|
heartbeat: {
|
|
342
342
|
nextRunAt: dueAt,
|
|
343
|
-
|
|
343
|
+
runCloudWakeIfDue: heartbeatRunCloud,
|
|
344
344
|
},
|
|
345
345
|
scheduler: {
|
|
346
346
|
runOnce: mock(async () => 1),
|
|
@@ -354,12 +354,12 @@ describe("background wake runtime routes", () => {
|
|
|
354
354
|
});
|
|
355
355
|
await flushBackgroundWakeDrainsForTest();
|
|
356
356
|
|
|
357
|
-
expect(
|
|
357
|
+
expect(heartbeatRunCloud).toHaveBeenCalledWith(
|
|
358
358
|
expect.objectContaining({
|
|
359
359
|
scheduledFor: NOW,
|
|
360
360
|
}),
|
|
361
361
|
);
|
|
362
|
-
expect(firstCallArg(
|
|
362
|
+
expect(firstCallArg(heartbeatRunCloud)).not.toHaveProperty("assumeDue");
|
|
363
363
|
expect(schedulerRunDue).toHaveBeenCalledTimes(1);
|
|
364
364
|
expect(response).toEqual(acceptedResponse({ reason: "heartbeat" }));
|
|
365
365
|
expect(lastCompletionPayload()).toMatchObject({
|
|
@@ -370,7 +370,7 @@ describe("background wake runtime routes", () => {
|
|
|
370
370
|
});
|
|
371
371
|
|
|
372
372
|
test("drain-due does not rerun heartbeat for stale heartbeat drain requests", async () => {
|
|
373
|
-
const
|
|
373
|
+
const heartbeatRunCloud = mock(async () => ({
|
|
374
374
|
due: true,
|
|
375
375
|
completed: 1,
|
|
376
376
|
skipped: 0,
|
|
@@ -379,7 +379,7 @@ describe("background wake runtime routes", () => {
|
|
|
379
379
|
setBackgroundWakeRuntime({
|
|
380
380
|
heartbeat: {
|
|
381
381
|
nextRunAt: Date.now() + 30 * 60_000,
|
|
382
|
-
|
|
382
|
+
runCloudWakeIfDue: heartbeatRunCloud,
|
|
383
383
|
},
|
|
384
384
|
scheduler: {
|
|
385
385
|
runOnce: mock(async () => 0),
|
|
@@ -393,7 +393,7 @@ describe("background wake runtime routes", () => {
|
|
|
393
393
|
});
|
|
394
394
|
await flushBackgroundWakeDrainsForTest();
|
|
395
395
|
|
|
396
|
-
expect(
|
|
396
|
+
expect(heartbeatRunCloud).not.toHaveBeenCalled();
|
|
397
397
|
expect(schedulerRunDue).not.toHaveBeenCalled();
|
|
398
398
|
expect(response).toEqual(acceptedResponse({ reason: "heartbeat" }));
|
|
399
399
|
expect(lastCompletionPayload()).toMatchObject({
|
|
@@ -409,7 +409,7 @@ describe("background wake runtime routes", () => {
|
|
|
409
409
|
actualNextDueAt: dueAt,
|
|
410
410
|
reason: "heartbeat",
|
|
411
411
|
});
|
|
412
|
-
const
|
|
412
|
+
const heartbeatRunCloud = mock(async () => ({
|
|
413
413
|
due: true,
|
|
414
414
|
completed: 1,
|
|
415
415
|
skipped: 0,
|
|
@@ -417,7 +417,7 @@ describe("background wake runtime routes", () => {
|
|
|
417
417
|
setBackgroundWakeRuntime({
|
|
418
418
|
heartbeat: {
|
|
419
419
|
nextRunAt: dueAt,
|
|
420
|
-
|
|
420
|
+
runCloudWakeIfDue: heartbeatRunCloud,
|
|
421
421
|
},
|
|
422
422
|
scheduler: {
|
|
423
423
|
runOnce: mock(async () => 0),
|
|
@@ -431,10 +431,10 @@ describe("background wake runtime routes", () => {
|
|
|
431
431
|
});
|
|
432
432
|
await flushBackgroundWakeDrainsForTest();
|
|
433
433
|
|
|
434
|
-
expect(
|
|
434
|
+
expect(heartbeatRunCloud).toHaveBeenCalledWith(
|
|
435
435
|
expect.objectContaining({ scheduledFor: NOW }),
|
|
436
436
|
);
|
|
437
|
-
expect(firstCallArg(
|
|
437
|
+
expect(firstCallArg(heartbeatRunCloud)).not.toHaveProperty("assumeDue");
|
|
438
438
|
expect(response).toEqual(acceptedResponse({ reason: "refresh" }));
|
|
439
439
|
});
|
|
440
440
|
|
|
@@ -451,7 +451,7 @@ describe("background wake runtime routes", () => {
|
|
|
451
451
|
setBackgroundWakeRuntime({
|
|
452
452
|
heartbeat: {
|
|
453
453
|
nextRunAt: Date.now() + 60_000,
|
|
454
|
-
|
|
454
|
+
runCloudWakeIfDue: mock(async () => ({
|
|
455
455
|
due: false,
|
|
456
456
|
completed: 0,
|
|
457
457
|
skipped: 0,
|
|
@@ -490,7 +490,7 @@ describe("background wake runtime routes", () => {
|
|
|
490
490
|
actualNextDueAt: scheduleDueAt,
|
|
491
491
|
reason: "schedule",
|
|
492
492
|
});
|
|
493
|
-
const
|
|
493
|
+
const heartbeatRunCloud = mock(async () => ({
|
|
494
494
|
due: true,
|
|
495
495
|
completed: 1,
|
|
496
496
|
skipped: 0,
|
|
@@ -502,7 +502,7 @@ describe("background wake runtime routes", () => {
|
|
|
502
502
|
setBackgroundWakeRuntime({
|
|
503
503
|
heartbeat: {
|
|
504
504
|
nextRunAt: heartbeatDueAt,
|
|
505
|
-
|
|
505
|
+
runCloudWakeIfDue: heartbeatRunCloud,
|
|
506
506
|
},
|
|
507
507
|
scheduler: {
|
|
508
508
|
runOnce: mock(async () => 1),
|
|
@@ -516,7 +516,7 @@ describe("background wake runtime routes", () => {
|
|
|
516
516
|
});
|
|
517
517
|
await flushBackgroundWakeDrainsForTest();
|
|
518
518
|
|
|
519
|
-
expect(
|
|
519
|
+
expect(heartbeatRunCloud).toHaveBeenCalledWith(
|
|
520
520
|
expect.objectContaining({ scheduledFor: NOW }),
|
|
521
521
|
);
|
|
522
522
|
expect(schedulerRunDue).toHaveBeenCalledTimes(1);
|
|
@@ -529,7 +529,7 @@ describe("background wake runtime routes", () => {
|
|
|
529
529
|
});
|
|
530
530
|
|
|
531
531
|
test("drain-due does no work for refresh-only wakes with no due intent", async () => {
|
|
532
|
-
const
|
|
532
|
+
const heartbeatRunCloud = mock(async () => ({
|
|
533
533
|
due: true,
|
|
534
534
|
completed: 1,
|
|
535
535
|
skipped: 0,
|
|
@@ -540,7 +540,7 @@ describe("background wake runtime routes", () => {
|
|
|
540
540
|
setBackgroundWakeRuntime({
|
|
541
541
|
heartbeat: {
|
|
542
542
|
nextRunAt: Date.now() + 60_000,
|
|
543
|
-
|
|
543
|
+
runCloudWakeIfDue: heartbeatRunCloud,
|
|
544
544
|
},
|
|
545
545
|
scheduler: {
|
|
546
546
|
runOnce: mock(async () => 1),
|
|
@@ -554,7 +554,7 @@ describe("background wake runtime routes", () => {
|
|
|
554
554
|
});
|
|
555
555
|
await flushBackgroundWakeDrainsForTest();
|
|
556
556
|
|
|
557
|
-
expect(
|
|
557
|
+
expect(heartbeatRunCloud).not.toHaveBeenCalled();
|
|
558
558
|
expect(schedulerRunDue).not.toHaveBeenCalled();
|
|
559
559
|
expect(response).toEqual(acceptedResponse({ reason: "refresh" }));
|
|
560
560
|
expect(lastCompletionPayload()).toMatchObject({
|
|
@@ -570,7 +570,7 @@ describe("background wake runtime routes", () => {
|
|
|
570
570
|
actualNextDueAt: dueAt,
|
|
571
571
|
reason: "mixed",
|
|
572
572
|
});
|
|
573
|
-
const
|
|
573
|
+
const heartbeatRunCloud = mock(async () => ({
|
|
574
574
|
due: true,
|
|
575
575
|
completed: 1,
|
|
576
576
|
skipped: 0,
|
|
@@ -581,7 +581,7 @@ describe("background wake runtime routes", () => {
|
|
|
581
581
|
setBackgroundWakeRuntime({
|
|
582
582
|
heartbeat: {
|
|
583
583
|
nextRunAt: dueAt,
|
|
584
|
-
|
|
584
|
+
runCloudWakeIfDue: heartbeatRunCloud,
|
|
585
585
|
},
|
|
586
586
|
scheduler: {
|
|
587
587
|
runOnce: mock(async () => 0),
|
|
@@ -598,7 +598,7 @@ describe("background wake runtime routes", () => {
|
|
|
598
598
|
});
|
|
599
599
|
await flushBackgroundWakeDrainsForTest();
|
|
600
600
|
|
|
601
|
-
expect(
|
|
601
|
+
expect(heartbeatRunCloud).not.toHaveBeenCalled();
|
|
602
602
|
expect(schedulerRunDue).toHaveBeenCalledWith(
|
|
603
603
|
expect.objectContaining({ minStartBudgetMs: 5_000 }),
|
|
604
604
|
);
|
|
@@ -619,7 +619,7 @@ describe("background wake runtime routes", () => {
|
|
|
619
619
|
actualNextDueAt: dueAt,
|
|
620
620
|
reason: "mixed",
|
|
621
621
|
});
|
|
622
|
-
const
|
|
622
|
+
const heartbeatRunCloud = mock(async () => ({
|
|
623
623
|
due: true,
|
|
624
624
|
completed: 1,
|
|
625
625
|
skipped: 0,
|
|
@@ -630,7 +630,7 @@ describe("background wake runtime routes", () => {
|
|
|
630
630
|
setBackgroundWakeRuntime({
|
|
631
631
|
heartbeat: {
|
|
632
632
|
nextRunAt: dueAt,
|
|
633
|
-
|
|
633
|
+
runCloudWakeIfDue: heartbeatRunCloud,
|
|
634
634
|
},
|
|
635
635
|
scheduler: {
|
|
636
636
|
runOnce: mock(async () => 1),
|
|
@@ -647,7 +647,7 @@ describe("background wake runtime routes", () => {
|
|
|
647
647
|
});
|
|
648
648
|
await flushBackgroundWakeDrainsForTest();
|
|
649
649
|
|
|
650
|
-
expect(
|
|
650
|
+
expect(heartbeatRunCloud).not.toHaveBeenCalled();
|
|
651
651
|
expect(schedulerRunDue).not.toHaveBeenCalled();
|
|
652
652
|
expect(response).toMatchObject({
|
|
653
653
|
accepted: true,
|
|
@@ -669,7 +669,7 @@ describe("background wake runtime routes", () => {
|
|
|
669
669
|
setBackgroundWakeRuntime({
|
|
670
670
|
heartbeat: {
|
|
671
671
|
nextRunAt: Date.now() + 60_000,
|
|
672
|
-
|
|
672
|
+
runCloudWakeIfDue: mock(async () => ({
|
|
673
673
|
due: false,
|
|
674
674
|
completed: 0,
|
|
675
675
|
skipped: 0,
|
|
@@ -735,7 +735,7 @@ describe("background wake runtime routes", () => {
|
|
|
735
735
|
setBackgroundWakeRuntime({
|
|
736
736
|
heartbeat: {
|
|
737
737
|
nextRunAt: Date.now() + 60_000,
|
|
738
|
-
|
|
738
|
+
runCloudWakeIfDue: mock(async () => ({
|
|
739
739
|
due: false,
|
|
740
740
|
completed: 0,
|
|
741
741
|
skipped: 0,
|
|
@@ -766,7 +766,7 @@ describe("background wake runtime routes", () => {
|
|
|
766
766
|
setBackgroundWakeRuntime({
|
|
767
767
|
heartbeat: {
|
|
768
768
|
nextRunAt: null,
|
|
769
|
-
|
|
769
|
+
runCloudWakeIfDue: mock(async () => ({
|
|
770
770
|
due: false,
|
|
771
771
|
completed: 0,
|
|
772
772
|
skipped: 0,
|
|
@@ -802,7 +802,7 @@ describe("background wake runtime routes", () => {
|
|
|
802
802
|
setBackgroundWakeRuntime({
|
|
803
803
|
heartbeat: {
|
|
804
804
|
nextRunAt: null,
|
|
805
|
-
|
|
805
|
+
runCloudWakeIfDue: mock(async () => ({
|
|
806
806
|
due: false,
|
|
807
807
|
completed: 0,
|
|
808
808
|
skipped: 0,
|
|
@@ -831,7 +831,7 @@ describe("background wake runtime routes", () => {
|
|
|
831
831
|
setBackgroundWakeRuntime({
|
|
832
832
|
heartbeat: {
|
|
833
833
|
nextRunAt: null,
|
|
834
|
-
|
|
834
|
+
runCloudWakeIfDue: mock(async () => ({
|
|
835
835
|
due: false,
|
|
836
836
|
completed: 0,
|
|
837
837
|
skipped: 0,
|
|
@@ -2,12 +2,12 @@ import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
|
2
2
|
|
|
3
3
|
import type { BackgroundWakeIntent } from "./next-wake.js";
|
|
4
4
|
|
|
5
|
-
let
|
|
5
|
+
let mockCloudAssistantId: string;
|
|
6
6
|
let mockClientFetch: ReturnType<typeof mock>;
|
|
7
7
|
let mockCreateClient: ReturnType<typeof mock>;
|
|
8
8
|
|
|
9
|
-
mock.module("../
|
|
10
|
-
|
|
9
|
+
mock.module("../cloud/client.js", () => ({
|
|
10
|
+
CadetCloudClient: {
|
|
11
11
|
create: () => mockCreateClient(),
|
|
12
12
|
},
|
|
13
13
|
}));
|
|
@@ -17,16 +17,16 @@ const {
|
|
|
17
17
|
completeBackgroundWakeLease,
|
|
18
18
|
publishBackgroundWakeIntent,
|
|
19
19
|
renewBackgroundWakeLease,
|
|
20
|
-
} = await import("./
|
|
20
|
+
} = await import("./cloud-client.js");
|
|
21
21
|
|
|
22
22
|
const NOW = 1_800_000_000_000;
|
|
23
23
|
|
|
24
24
|
describe("background wake platform client", () => {
|
|
25
25
|
beforeEach(() => {
|
|
26
|
-
|
|
26
|
+
mockCloudAssistantId = "asst-123";
|
|
27
27
|
mockClientFetch = mock(async () => new Response('{"status":"stored"}'));
|
|
28
28
|
mockCreateClient = mock(async () => ({
|
|
29
|
-
|
|
29
|
+
cloudAssistantId: mockCloudAssistantId,
|
|
30
30
|
fetch: mockClientFetch,
|
|
31
31
|
}));
|
|
32
32
|
});
|
|
@@ -108,7 +108,7 @@ describe("background wake platform client", () => {
|
|
|
108
108
|
test("clears wake intent with the last computed snapshot when available", async () => {
|
|
109
109
|
mockClientFetch = mock(async () => new Response('{"status":"cleared"}'));
|
|
110
110
|
mockCreateClient = mock(async () => ({
|
|
111
|
-
|
|
111
|
+
cloudAssistantId: mockCloudAssistantId,
|
|
112
112
|
fetch: mockClientFetch,
|
|
113
113
|
}));
|
|
114
114
|
|
|
@@ -227,7 +227,7 @@ describe("background wake platform client", () => {
|
|
|
227
227
|
expect(mockClientFetch).not.toHaveBeenCalled();
|
|
228
228
|
|
|
229
229
|
mockCreateClient = mock(async () => ({
|
|
230
|
-
|
|
230
|
+
cloudAssistantId: "",
|
|
231
231
|
fetch: mockClientFetch,
|
|
232
232
|
}));
|
|
233
233
|
|
|
@@ -243,7 +243,7 @@ describe("background wake platform client", () => {
|
|
|
243
243
|
test("treats Django disabled no-op responses as success", async () => {
|
|
244
244
|
mockClientFetch = mock(async () => new Response('{"status":"disabled"}'));
|
|
245
245
|
mockCreateClient = mock(async () => ({
|
|
246
|
-
|
|
246
|
+
cloudAssistantId: mockCloudAssistantId,
|
|
247
247
|
fetch: mockClientFetch,
|
|
248
248
|
}));
|
|
249
249
|
|
|
@@ -257,7 +257,7 @@ describe("background wake platform client", () => {
|
|
|
257
257
|
|
|
258
258
|
test("attaches an abort-timeout signal to every platform request", async () => {
|
|
259
259
|
// Guards the publisher's single-in-flight serialization: a wake request
|
|
260
|
-
// that hangs (half-open socket during a
|
|
260
|
+
// that hangs (half-open socket during a cloud reconnect) would wedge the
|
|
261
261
|
// in-flight promise and silence every future refresh. Each request must
|
|
262
262
|
// carry a timeout so it rejects instead of hanging forever.
|
|
263
263
|
await publishBackgroundWakeIntent(intentFixture());
|
|
@@ -280,7 +280,7 @@ describe("background wake platform client", () => {
|
|
|
280
280
|
async () => new Response("bad gateway", { status: 502 }),
|
|
281
281
|
);
|
|
282
282
|
mockCreateClient = mock(async () => ({
|
|
283
|
-
|
|
283
|
+
cloudAssistantId: mockCloudAssistantId,
|
|
284
284
|
fetch: mockClientFetch,
|
|
285
285
|
}));
|
|
286
286
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CadetCloudClient } from "../cloud/client.js";
|
|
2
2
|
import type { BackgroundWakeIntent } from "./next-wake.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -7,7 +7,7 @@ import type { BackgroundWakeIntent } from "./next-wake.js";
|
|
|
7
7
|
* Every call here is a lightweight control-plane request (publish/clear the
|
|
8
8
|
* wake intent, renew/complete a lease), so it must settle quickly. The bound
|
|
9
9
|
* exists because the publisher serializes refreshes behind a single in-flight
|
|
10
|
-
* promise: a request that hangs (half-open socket during a
|
|
10
|
+
* promise: a request that hangs (half-open socket during a cloud reconnect)
|
|
11
11
|
* would wedge that promise and silence every future refresh. The timeout
|
|
12
12
|
* guarantees each request rejects instead of hanging, so the publisher always
|
|
13
13
|
* makes forward progress.
|
|
@@ -34,15 +34,15 @@ type BackgroundWakeIntentSnapshot = Pick<
|
|
|
34
34
|
export async function publishBackgroundWakeIntent(
|
|
35
35
|
intent: BackgroundWakeIntent,
|
|
36
36
|
): Promise<BackgroundWakeIntentClientResult> {
|
|
37
|
-
const client = await
|
|
37
|
+
const client = await CadetCloudClient.create();
|
|
38
38
|
if (!client) {
|
|
39
39
|
return { status: "skipped", reason: "missing_platform_client" };
|
|
40
40
|
}
|
|
41
|
-
if (!client.
|
|
41
|
+
if (!client.cloudAssistantId) {
|
|
42
42
|
return { status: "skipped", reason: "missing_platform_assistant_id" };
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
const response = await client.fetch(intentPath(client.
|
|
45
|
+
const response = await client.fetch(intentPath(client.cloudAssistantId), {
|
|
46
46
|
method: "PUT",
|
|
47
47
|
headers: { "Content-Type": "application/json" },
|
|
48
48
|
body: JSON.stringify({
|
|
@@ -63,11 +63,11 @@ export async function publishBackgroundWakeIntent(
|
|
|
63
63
|
export async function clearBackgroundWakeIntent(
|
|
64
64
|
intentSnapshot: BackgroundWakeIntentSnapshot = null,
|
|
65
65
|
): Promise<BackgroundWakeIntentClientResult> {
|
|
66
|
-
const client = await
|
|
66
|
+
const client = await CadetCloudClient.create();
|
|
67
67
|
if (!client) {
|
|
68
68
|
return { status: "skipped", reason: "missing_platform_client" };
|
|
69
69
|
}
|
|
70
|
-
if (!client.
|
|
70
|
+
if (!client.cloudAssistantId) {
|
|
71
71
|
return { status: "skipped", reason: "missing_platform_assistant_id" };
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -77,7 +77,7 @@ export async function clearBackgroundWakeIntent(
|
|
|
77
77
|
body.computed_at = toIsoString(intentSnapshot.computedAt);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
const response = await client.fetch(intentPath(client.
|
|
80
|
+
const response = await client.fetch(intentPath(client.cloudAssistantId), {
|
|
81
81
|
method: "DELETE",
|
|
82
82
|
headers: { "Content-Type": "application/json" },
|
|
83
83
|
body: JSON.stringify(body),
|
|
@@ -91,16 +91,16 @@ export async function clearBackgroundWakeIntent(
|
|
|
91
91
|
export async function renewBackgroundWakeLease(
|
|
92
92
|
leaseId: string,
|
|
93
93
|
): Promise<BackgroundWakeLeaseClientResult> {
|
|
94
|
-
const client = await
|
|
94
|
+
const client = await CadetCloudClient.create();
|
|
95
95
|
if (!client) {
|
|
96
96
|
return { status: "skipped", reason: "missing_platform_client" };
|
|
97
97
|
}
|
|
98
|
-
if (!client.
|
|
98
|
+
if (!client.cloudAssistantId) {
|
|
99
99
|
return { status: "skipped", reason: "missing_platform_assistant_id" };
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
const response = await client.fetch(
|
|
103
|
-
leasePath(client.
|
|
103
|
+
leasePath(client.cloudAssistantId, leaseId, "renew"),
|
|
104
104
|
{
|
|
105
105
|
method: "POST",
|
|
106
106
|
headers: { "Content-Type": "application/json" },
|
|
@@ -119,11 +119,11 @@ export async function completeBackgroundWakeLease(args: {
|
|
|
119
119
|
error?: string;
|
|
120
120
|
nextIntent?: BackgroundWakeIntent | null;
|
|
121
121
|
}): Promise<BackgroundWakeLeaseClientResult> {
|
|
122
|
-
const client = await
|
|
122
|
+
const client = await CadetCloudClient.create();
|
|
123
123
|
if (!client) {
|
|
124
124
|
return { status: "skipped", reason: "missing_platform_client" };
|
|
125
125
|
}
|
|
126
|
-
if (!client.
|
|
126
|
+
if (!client.cloudAssistantId) {
|
|
127
127
|
return { status: "skipped", reason: "missing_platform_assistant_id" };
|
|
128
128
|
}
|
|
129
129
|
|
|
@@ -147,7 +147,7 @@ export async function completeBackgroundWakeLease(args: {
|
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
const response = await client.fetch(
|
|
150
|
-
leasePath(client.
|
|
150
|
+
leasePath(client.cloudAssistantId, args.leaseId, "complete"),
|
|
151
151
|
{
|
|
152
152
|
method: "POST",
|
|
153
153
|
headers: { "Content-Type": "application/json" },
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { getLogger } from "../util/logger.js";
|
|
2
|
+
import {
|
|
3
|
+
clearBackgroundWakeIntent,
|
|
4
|
+
publishBackgroundWakeIntent,
|
|
5
|
+
} from "./cloud-client.js";
|
|
2
6
|
import {
|
|
3
7
|
type BackgroundWakeIntent,
|
|
4
8
|
computeNextBackgroundWakeIntent,
|
|
5
9
|
} from "./next-wake.js";
|
|
6
|
-
import {
|
|
7
|
-
clearBackgroundWakeIntent,
|
|
8
|
-
publishBackgroundWakeIntent,
|
|
9
|
-
} from "./platform-client.js";
|
|
10
10
|
|
|
11
11
|
const log = getLogger("background-wake-publisher");
|
|
12
12
|
const REFRESH_DEBOUNCE_MS = 250;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
3
3
|
|
|
4
|
+
import type { BackgroundWakeIntentClientResult } from "./cloud-client.js";
|
|
4
5
|
import type { BackgroundWakeIntent } from "./next-wake.js";
|
|
5
|
-
import type { BackgroundWakeIntentClientResult } from "./platform-client.js";
|
|
6
6
|
|
|
7
7
|
const mockPublishBackgroundWakeIntent = mock(
|
|
8
8
|
async (): Promise<BackgroundWakeIntentClientResult> => ({
|
|
@@ -20,7 +20,7 @@ mock.module("./next-wake.js", () => ({
|
|
|
20
20
|
computeNextBackgroundWakeIntent: () => computedIntent,
|
|
21
21
|
}));
|
|
22
22
|
|
|
23
|
-
mock.module("./
|
|
23
|
+
mock.module("./cloud-client.js", () => ({
|
|
24
24
|
publishBackgroundWakeIntent: mockPublishBackgroundWakeIntent,
|
|
25
25
|
clearBackgroundWakeIntent: mockClearBackgroundWakeIntent,
|
|
26
26
|
}));
|
|
@@ -206,7 +206,7 @@ describe("background wake intent publisher hooks", () => {
|
|
|
206
206
|
|
|
207
207
|
expect(lifecycleSource).not.toContain("clearBackgroundWakeIntent");
|
|
208
208
|
expect(shutdownSource).not.toContain("clearBackgroundWakeIntent");
|
|
209
|
-
expect(shutdownSource).not.toContain("background-wake/
|
|
209
|
+
expect(shutdownSource).not.toContain("background-wake/cloud-client");
|
|
210
210
|
});
|
|
211
211
|
});
|
|
212
212
|
|
|
@@ -51,10 +51,10 @@ function seedDefaultResolvableKeys(): void {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
// Managed-speech defaulting reaches the
|
|
54
|
+
// Managed-speech defaulting reaches the cloud client and the credential
|
|
55
55
|
// store. The controller tests drive the bridge mock on a microtask budget, so
|
|
56
56
|
// the configured providers stand as the effective ones here.
|
|
57
|
-
mock.module("../../config/
|
|
57
|
+
mock.module("../../config/cloud-speech-defaults.js", () => ({
|
|
58
58
|
resolveEffectiveSpeechProviders: async (config?: {
|
|
59
59
|
services: { stt: { provider: string }; tts: { provider: string } };
|
|
60
60
|
}) => {
|
|
@@ -546,7 +546,7 @@ describe("startVoiceTurn escalation-continuation persistence", () => {
|
|
|
546
546
|
|
|
547
547
|
// `turn-events-store` projects `$.client` onto `TurnTelemetryEvent.client`,
|
|
548
548
|
// so this bag is what makes a voice turn countable per client and joinable
|
|
549
|
-
// to its session's funnel rows. The
|
|
549
|
+
// to its session's funnel rows. The cloud goes in `os`, the same key
|
|
550
550
|
// the HTTP send path fills, so voice turns sit in the column existing turn
|
|
551
551
|
// analytics already read.
|
|
552
552
|
expect(fake.lastPersistOpts()?.metadata).toEqual({
|
package/src/calls/call-domain.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { revokeScopedApprovalGrantsForContext } from "../approvals/scoped-approv
|
|
|
9
9
|
import { loadConfig } from "../config/loader.js";
|
|
10
10
|
import { VALID_CALLER_IDENTITY_MODES } from "../config/schema.js";
|
|
11
11
|
import type { AssistantConfig } from "../config/types.js";
|
|
12
|
-
import { resolveCallbackUrl } from "../inbound/
|
|
12
|
+
import { resolveCallbackUrl } from "../inbound/cloud-callback-registration.js";
|
|
13
13
|
import {
|
|
14
14
|
getTwilioStatusCallbackUrl,
|
|
15
15
|
getTwilioVoiceWebhookUrl,
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* native-vs-synthesized strategy decision stay in one implementation.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import { resolveEffectiveSpeechProviders } from "../config/cloud-speech-defaults.js";
|
|
10
11
|
import { loadConfig } from "../config/loader.js";
|
|
11
|
-
import { resolveEffectiveSpeechProviders } from "../config/managed-speech-defaults.js";
|
|
12
12
|
import {
|
|
13
13
|
getCatalogProvider,
|
|
14
14
|
getTtsProvider,
|
|
@@ -74,9 +74,9 @@ export interface ResolveCallTtsOptions {
|
|
|
74
74
|
/**
|
|
75
75
|
* Resolve the active TTS provider via the global provider abstraction.
|
|
76
76
|
*
|
|
77
|
-
* The provider is the effective one after
|
|
77
|
+
* The provider is the effective one after cloud-speech defaulting
|
|
78
78
|
* ({@link resolveEffectiveSpeechProviders}): a configured BYOK provider
|
|
79
|
-
* whose credential does not resolve is stood in for by
|
|
79
|
+
* whose credential does not resolve is stood in for by cloud speech
|
|
80
80
|
* while the cloud connection is usable, the same substitution live
|
|
81
81
|
* voice makes, so a fresh Cadet connection speaks on the phone with zero
|
|
82
82
|
* TTS configuration.
|
|
@@ -185,9 +185,9 @@ export async function resolveCallTtsProvider(
|
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
/**
|
|
188
|
-
* The TTS provider the call actually uses after
|
|
189
|
-
* A failure inside the
|
|
190
|
-
* keeps the configured provider: a
|
|
188
|
+
* The TTS provider the call actually uses after cloud-speech defaulting.
|
|
189
|
+
* A failure inside the cloud lookup (platform client, credential store)
|
|
190
|
+
* keeps the configured provider: a cloud-speech hiccup must not demote a
|
|
191
191
|
* working BYOK provider, and the outer resolver's own fallback is the
|
|
192
192
|
* silent native path.
|
|
193
193
|
*/
|
|
@@ -111,7 +111,7 @@ function sttGapClause(
|
|
|
111
111
|
// Connection-based providers are fixed by connecting the account,
|
|
112
112
|
// not by entering an API key.
|
|
113
113
|
if (capability.credentialProvider === "cadet") {
|
|
114
|
-
return `a Cadet Cloud connection for
|
|
114
|
+
return `a Cadet Cloud connection for cloud speech (run 'assistant cloud connect')`;
|
|
115
115
|
}
|
|
116
116
|
return `an API key for the speech-to-text provider "${providerId}"`;
|
|
117
117
|
}
|
|
@@ -140,14 +140,14 @@ function ttsGap(
|
|
|
140
140
|
clause: `an API key for the text-to-speech provider "${providerId}" (no fallback provider has usable credentials)`,
|
|
141
141
|
};
|
|
142
142
|
}
|
|
143
|
-
case "missing-
|
|
143
|
+
case "missing-cloud-connection": {
|
|
144
144
|
return {
|
|
145
145
|
gap: {
|
|
146
146
|
kind: "tts",
|
|
147
147
|
providerId,
|
|
148
148
|
reason: `Managed TTS has no usable Cadet Cloud connection and no playable fallback provider is available`,
|
|
149
149
|
},
|
|
150
|
-
clause: `a Cadet Cloud connection for
|
|
150
|
+
clause: `a Cadet Cloud connection for cloud speech (run 'assistant cloud connect'; no fallback provider has usable credentials)`,
|
|
151
151
|
};
|
|
152
152
|
}
|
|
153
153
|
case "missing-fish-audio-reference-id": {
|
|
@@ -38,7 +38,7 @@ export type TelephonyTtsNotPlayableReason =
|
|
|
38
38
|
| "unsupported-format"
|
|
39
39
|
| "missing-credentials"
|
|
40
40
|
| "missing-fish-audio-reference-id"
|
|
41
|
-
| "missing-
|
|
41
|
+
| "missing-cloud-connection";
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
44
|
* Result of resolving whether a TTS provider is playable over the
|
|
@@ -113,18 +113,17 @@ export async function evaluateTelephonyTtsPlayability(
|
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
// The cadet secret alone doesn't prove usability:
|
|
117
|
-
// needs the
|
|
116
|
+
// The cadet secret alone doesn't prove usability: cloud speech also
|
|
117
|
+
// needs the cloud assistant identity, or synthesis fails before any
|
|
118
118
|
// request is made — with allowNativeFallback false, that would mean
|
|
119
119
|
// silent call failures instead of a BYOK fallback.
|
|
120
120
|
if (entry.id === "cadet") {
|
|
121
|
-
const { managedSpeechAvailable } =
|
|
122
|
-
await import("../platform/managed-speech.js");
|
|
121
|
+
const { managedSpeechAvailable } = await import("../cloud/cloud-speech.js");
|
|
123
122
|
if (!(await managedSpeechAvailable())) {
|
|
124
123
|
return {
|
|
125
124
|
status: "not-playable",
|
|
126
125
|
providerId: entry.id,
|
|
127
|
-
reason: "missing-
|
|
126
|
+
reason: "missing-cloud-connection",
|
|
128
127
|
};
|
|
129
128
|
}
|
|
130
129
|
}
|