@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
|
@@ -285,7 +285,7 @@ export interface BroadcastDecisionOptions {
|
|
|
285
285
|
resultsSink?: NotificationDeliveryResult[];
|
|
286
286
|
}
|
|
287
287
|
|
|
288
|
-
// Cap on how long the deferred cadet send waits for the
|
|
288
|
+
// Cap on how long the deferred cadet send waits for the cloud dispatch
|
|
289
289
|
// outcome: a duplicate banner beats a late one.
|
|
290
290
|
const PLATFORM_OUTCOME_DEADLINE_MS = 2_500;
|
|
291
291
|
|
|
@@ -384,7 +384,7 @@ export class NotificationBroadcaster {
|
|
|
384
384
|
// event fires immediately, before slower channel sends (e.g. Telegram 30s
|
|
385
385
|
// timeout) can delay it. Platform sorts second: the cadet intent carries
|
|
386
386
|
// remotePushDispatched, so its deferred send (below) flushes right after
|
|
387
|
-
// the
|
|
387
|
+
// the cloud outcome is known instead of waiting behind slower channels.
|
|
388
388
|
const dispatchRank = (channel: NotificationChannel): number => {
|
|
389
389
|
if (channel === "cadet") {
|
|
390
390
|
return 0;
|
|
@@ -413,7 +413,7 @@ export class NotificationBroadcaster {
|
|
|
413
413
|
: undefined;
|
|
414
414
|
const results: NotificationDeliveryResult[] = options?.resultsSink ?? [];
|
|
415
415
|
|
|
416
|
-
// Cadet pairing carried forward for the
|
|
416
|
+
// Cadet pairing carried forward for the cloud channel's deep link.
|
|
417
417
|
// A single-pass carry is safe because orderedChannels sorts cadet first.
|
|
418
418
|
let cadetPairing: {
|
|
419
419
|
conversationId: string;
|
|
@@ -424,9 +424,9 @@ export class NotificationBroadcaster {
|
|
|
424
424
|
// platform dispatch outcome, not channel selection: when both channels
|
|
425
425
|
// are selected, the cadet channel is still prepared first (pairing, the
|
|
426
426
|
// conversation-created emission, and the pending delivery row all run
|
|
427
|
-
// eagerly, so the
|
|
428
|
-
// its adapter send is deferred until the
|
|
429
|
-
// the
|
|
427
|
+
// eagerly, so the cloud deep link keeps the cadet pairing carry), but
|
|
428
|
+
// its adapter send is deferred until the cloud adapter reports whether
|
|
429
|
+
// the cloud accepted a device push. Typical cost: one fast HTTP
|
|
430
430
|
// round-trip before the local banner goes out, capped at
|
|
431
431
|
// PLATFORM_OUTCOME_DEADLINE_MS.
|
|
432
432
|
let deferredCadetSend: PendingChannelDispatch | null = null;
|
|
@@ -446,7 +446,7 @@ export class NotificationBroadcaster {
|
|
|
446
446
|
try {
|
|
447
447
|
for (const channel of orderedChannels) {
|
|
448
448
|
// Platform sorts immediately after cadet, so reaching any later
|
|
449
|
-
// channel means the
|
|
449
|
+
// channel means the cloud outcome is settled (or the cloud
|
|
450
450
|
// channel was skipped): flush the deferred cadet send now so the
|
|
451
451
|
// local banner is not held behind slower sends. On the cadet
|
|
452
452
|
// iteration itself this is a no-op -- cadet appears at most once in
|
|
@@ -592,7 +592,7 @@ export class NotificationBroadcaster {
|
|
|
592
592
|
);
|
|
593
593
|
if (existingDelivery) {
|
|
594
594
|
// On retry paths the cadet row already exists, so the fresh-pairing
|
|
595
|
-
// carry below never runs -- seed the
|
|
595
|
+
// carry below never runs -- seed the cloud deep-link carry from
|
|
596
596
|
// the duplicate row's conversation instead.
|
|
597
597
|
if (channel === "cadet" && existingDelivery.conversationId) {
|
|
598
598
|
cadetPairing = {
|
|
@@ -838,14 +838,14 @@ export class NotificationBroadcaster {
|
|
|
838
838
|
|
|
839
839
|
if (channel === "cadet" && orderedChannels.includes("platform")) {
|
|
840
840
|
// The cadet intent carries remotePushDispatched, so its send waits
|
|
841
|
-
// for the
|
|
841
|
+
// for the cloud outcome; everything else (pairing, events, the
|
|
842
842
|
// pending delivery row) already ran above.
|
|
843
843
|
deferredCadetSend = dispatch;
|
|
844
844
|
continue;
|
|
845
845
|
}
|
|
846
846
|
|
|
847
847
|
if (channel === "platform" && deferredCadetSend) {
|
|
848
|
-
// The local banner is urgent: wait for the
|
|
848
|
+
// The local banner is urgent: wait for the cloud outcome only up
|
|
849
849
|
// to the deadline (a duplicate banner beats a late one). On expiry
|
|
850
850
|
// the cadet send flushes with remotePushDispatched=false while the
|
|
851
851
|
// dispatch keeps running, recording its delivery row when it
|
|
@@ -244,7 +244,7 @@ const TITLE_FIELD_DESCRIPTION = [
|
|
|
244
244
|
"- No quotes, no markdown, no trailing punctuation",
|
|
245
245
|
"- Never describe missing or thin context. Titles like 'Notification', 'Update', 'Activity complete', 'Missing context' are forbidden. Say what was done from the words that ARE present",
|
|
246
246
|
"Examples:",
|
|
247
|
-
"- Body 'Your 9am standup with the platform team starts in 5 minutes' -> '
|
|
247
|
+
"- Body 'Your 9am standup with the platform team starts in 5 minutes' -> 'Cloud standup in 5 minutes', NOT 'Cloud Standup'",
|
|
248
248
|
"- Body 'The nightly backup job failed on db-primary at 02:14' -> 'Nightly backup failed', NOT 'Nightly Backup Failure'",
|
|
249
249
|
"- Body 'Alice replied about the Q3 pricing deck and wants your notes' -> 'Alice wants notes on the Q3 deck', NOT 'Q3 Pricing Deck'",
|
|
250
250
|
"- Body 'Recapped the 12 emails that needed a reply and deleted 6 newsletters' -> 'Recapped 12 emails, deleted 6', NOT 'Inbox Recap'",
|
|
@@ -193,7 +193,7 @@ export function resolveDestinations(
|
|
|
193
193
|
break;
|
|
194
194
|
}
|
|
195
195
|
case "platform": {
|
|
196
|
-
// Platform delivery goes through the daemon's
|
|
196
|
+
// Platform delivery goes through the daemon's CadetCloudClient —
|
|
197
197
|
// no external binding needed. Include guardianPrincipalId so the
|
|
198
198
|
// adapter can scope guardian-sensitive notifications.
|
|
199
199
|
const platformGuardian = resolveGuardian(guardians, "cadet");
|
|
@@ -13,18 +13,18 @@ import type { GuardianDelivery } from "@mycadet/gateway-client";
|
|
|
13
13
|
import { v4 as uuid } from "uuid";
|
|
14
14
|
|
|
15
15
|
import { getDeliverableChannels } from "../channels/config.js";
|
|
16
|
+
import { isCloudClientConfigured } from "../cloud/client.js";
|
|
16
17
|
import {
|
|
17
18
|
getGuardianDelivery,
|
|
18
19
|
guardianForChannel,
|
|
19
20
|
} from "../contacts/guardian-delivery-reader.js";
|
|
20
21
|
import type { ConversationCreateType } from "../persistence/conversation-types.js";
|
|
21
|
-
import { isPlatformClientConfigured } from "../platform/client.js";
|
|
22
22
|
import { broadcastMessage } from "../runtime/assistant-event-hub.js";
|
|
23
23
|
import { getLogger } from "../util/logger.js";
|
|
24
24
|
import { withSqliteRetry } from "../util/sqlite-retry.js";
|
|
25
|
+
import { CloudPushAdapter } from "./adapters/cloud.js";
|
|
25
26
|
import { DiscordAdapter } from "./adapters/discord.js";
|
|
26
27
|
import { CadetAdapter } from "./adapters/macos.js";
|
|
27
|
-
import { PlatformPushAdapter } from "./adapters/platform.js";
|
|
28
28
|
import { SlackAdapter } from "./adapters/slack.js";
|
|
29
29
|
import { TelegramAdapter } from "./adapters/telegram.js";
|
|
30
30
|
import { resolveAssistantInitiatedThread } from "./assistant-initiated-thread.js";
|
|
@@ -72,7 +72,7 @@ export function getBroadcaster(): NotificationBroadcaster {
|
|
|
72
72
|
new TelegramAdapter(),
|
|
73
73
|
new SlackAdapter(),
|
|
74
74
|
new DiscordAdapter(),
|
|
75
|
-
new
|
|
75
|
+
new CloudPushAdapter(),
|
|
76
76
|
]);
|
|
77
77
|
|
|
78
78
|
// Wire the conversation-created callback so the event goes out as soon
|
|
@@ -142,7 +142,7 @@ export async function getConnectedChannels(): Promise<NotificationChannel[]> {
|
|
|
142
142
|
case "platform":
|
|
143
143
|
// Platform push is treated as connected at the decision-engine
|
|
144
144
|
// layer; the actual delivery path lazily resolves
|
|
145
|
-
// `
|
|
145
|
+
// `CadetCloudClient.create()` in `CloudPushAdapter.send()`
|
|
146
146
|
// and reports a delivery failure when credentials are absent.
|
|
147
147
|
channels.push(channel);
|
|
148
148
|
break;
|
|
@@ -316,7 +316,7 @@ function emitOutcome(
|
|
|
316
316
|
|
|
317
317
|
/**
|
|
318
318
|
* True when at least one channel adapter has already been handed the signal.
|
|
319
|
-
* `sent` is a completed delivery; `pending` is the
|
|
319
|
+
* `sent` is a completed delivery; `pending` is the cloud push that passed
|
|
320
320
|
* its outcome deadline and is still in flight. Both mean a retry would
|
|
321
321
|
* re-deliver.
|
|
322
322
|
*/
|
|
@@ -449,7 +449,7 @@ export async function emitNotificationSignal<TEventName extends string>(
|
|
|
449
449
|
const prePolicyDecision = decision;
|
|
450
450
|
let platformConfigured: Promise<boolean> | undefined;
|
|
451
451
|
const platformIsConfigured = () =>
|
|
452
|
-
(platformConfigured ??=
|
|
452
|
+
(platformConfigured ??= isCloudClientConfigured());
|
|
453
453
|
|
|
454
454
|
// Step 2.5a: High/critical urgency signals always get both the in-app
|
|
455
455
|
// system notification (cadet) and the remote push (platform),
|
|
@@ -69,7 +69,7 @@ export const DeliveryResultSchema = z.object({
|
|
|
69
69
|
skipped: z.boolean().optional(),
|
|
70
70
|
error: z.string().optional(),
|
|
71
71
|
messageId: z.string().optional(),
|
|
72
|
-
/** Set only by the
|
|
72
|
+
/** Set only by the cloud push adapter: true when the cloud accepted
|
|
73
73
|
* at least one device push for delivery (not proof of device receipt). */
|
|
74
74
|
remotePushAccepted: z.boolean().optional(),
|
|
75
75
|
remotePushPlatforms: z.array(z.enum(["ios", "android"])).optional(),
|
|
@@ -124,7 +124,7 @@ export const ChannelDeliveryPayloadSchema = z.object({
|
|
|
124
124
|
* broadcaster so channel adapters render it without re-parsing
|
|
125
125
|
* `contextPayload`. */
|
|
126
126
|
toolApprovalSource: ToolApprovalSourceViewSchema.optional(),
|
|
127
|
-
/** True when the
|
|
127
|
+
/** True when the cloud (APNs) channel accepted a remote push for this
|
|
128
128
|
* delivery. Set only on the cadet channel's payload so clients can avoid
|
|
129
129
|
* double-bannering. */
|
|
130
130
|
remotePushDispatched: z.boolean().optional(),
|
|
@@ -7,7 +7,7 @@ describe("PROVIDER_SEED_DATA managed mode wiring", () => {
|
|
|
7
7
|
test("github provider is wired up for managed mode", () => {
|
|
8
8
|
const github = PROVIDER_SEED_DATA.github;
|
|
9
9
|
expect(github).toBeDefined();
|
|
10
|
-
expect(github.
|
|
10
|
+
expect(github.cloudServiceConfigKey).toBe("github-oauth");
|
|
11
11
|
expect("github-oauth" in ServicesSchema.shape).toBe(true);
|
|
12
12
|
});
|
|
13
13
|
|
|
@@ -32,7 +32,7 @@ describe("PROVIDER_SEED_DATA managed mode wiring", () => {
|
|
|
32
32
|
test("figma requests only scopes an app on any plan can grant", () => {
|
|
33
33
|
const figma = PROVIDER_SEED_DATA.figma;
|
|
34
34
|
expect(figma).toBeDefined();
|
|
35
|
-
expect(figma.
|
|
35
|
+
expect(figma.cloudServiceConfigKey).toBe("figma-oauth");
|
|
36
36
|
expect("figma-oauth" in ServicesSchema.shape).toBe(true);
|
|
37
37
|
|
|
38
38
|
// Figma rejects the whole authorization request when the app cannot grant
|
|
@@ -114,12 +114,12 @@ describe("PROVIDER_SEED_DATA managed mode wiring", () => {
|
|
|
114
114
|
|
|
115
115
|
test("Link does not ship a Stripe publishable key to BYO installs", () => {
|
|
116
116
|
// Link's authorize endpoint needs a `key` param naming the Stripe account
|
|
117
|
-
// behind the client_id. Cadet's belongs only in the
|
|
118
|
-
// where it pairs with the
|
|
117
|
+
// behind the client_id. Cadet's belongs only in the cloud registry,
|
|
118
|
+
// where it pairs with the cloud's own client. Seeding it here would
|
|
119
119
|
// send our merchant identity from every self-hosted install.
|
|
120
120
|
const link = PROVIDER_SEED_DATA.stripe_link;
|
|
121
121
|
expect(link).toBeDefined();
|
|
122
|
-
expect(link.
|
|
122
|
+
expect(link.cloudServiceConfigKey).toBe("stripe-link-oauth");
|
|
123
123
|
expect(link.authorizeParams).toBeUndefined();
|
|
124
124
|
expect(JSON.stringify(link)).not.toContain("pk_live_");
|
|
125
125
|
});
|
|
@@ -151,7 +151,7 @@ describe("PROVIDER_SEED_DATA managed mode wiring", () => {
|
|
|
151
151
|
// Shopify has no global OAuth host: every endpoint lives on the
|
|
152
152
|
// merchant's own domain. Hardcoding any host here would send every
|
|
153
153
|
// merchant's authorization to the wrong store, so the {tenant_host}
|
|
154
|
-
// placeholder the
|
|
154
|
+
// placeholder the cloud substitutes must survive.
|
|
155
155
|
const shopify = PROVIDER_SEED_DATA.shopify;
|
|
156
156
|
expect(shopify).toBeDefined();
|
|
157
157
|
for (const url of [
|
|
@@ -204,9 +204,9 @@ describe("PROVIDER_SEED_DATA managed mode wiring", () => {
|
|
|
204
204
|
test("quickbooks is wired up for managed mode behind its flag", () => {
|
|
205
205
|
const quickbooks = PROVIDER_SEED_DATA.quickbooks;
|
|
206
206
|
expect(quickbooks).toBeDefined();
|
|
207
|
-
expect(quickbooks.
|
|
207
|
+
expect(quickbooks.cloudServiceConfigKey).toBe("quickbooks-oauth");
|
|
208
208
|
expect("quickbooks-oauth" in ServicesSchema.shape).toBe(true);
|
|
209
|
-
// Hidden until the
|
|
209
|
+
// Hidden until the cloud side and client ids are live, like Figma
|
|
210
210
|
// and Shopify.
|
|
211
211
|
expect(quickbooks.featureFlag).toBe("quickbooks-oauth");
|
|
212
212
|
});
|
|
@@ -225,7 +225,7 @@ describe("PROVIDER_SEED_DATA managed mode wiring", () => {
|
|
|
225
225
|
|
|
226
226
|
test("quickbooks keeps its per-company URL templates", () => {
|
|
227
227
|
// Every Accounting API path is scoped to the realm the user picked on
|
|
228
|
-
// Intuit's consent screen. The
|
|
228
|
+
// Intuit's consent screen. The cloud fills {realm_id} from the
|
|
229
229
|
// connection; a hardcoded realm here would send every company's calls
|
|
230
230
|
// to the wrong books.
|
|
231
231
|
const quickbooks = PROVIDER_SEED_DATA.quickbooks;
|
|
@@ -276,13 +276,13 @@ describe("PROVIDER_SEED_DATA managed mode wiring", () => {
|
|
|
276
276
|
}
|
|
277
277
|
});
|
|
278
278
|
|
|
279
|
-
test("every
|
|
280
|
-
// Cross-repo invariant: a provider with
|
|
279
|
+
test("every cloudServiceConfigKey resolves to a ServicesSchema key", () => {
|
|
280
|
+
// Cross-repo invariant: a provider with cloudServiceConfigKey but no
|
|
281
281
|
// matching ServicesSchema entry silently falls back to BYO mode in
|
|
282
282
|
// connection-resolver.ts. This test guards against that drift.
|
|
283
283
|
const offenders: Array<{ provider: string; key: string }> = [];
|
|
284
284
|
for (const [provider, seed] of Object.entries(PROVIDER_SEED_DATA)) {
|
|
285
|
-
const key = seed.
|
|
285
|
+
const key = seed.cloudServiceConfigKey;
|
|
286
286
|
if (key && !(key in ServicesSchema.shape)) {
|
|
287
287
|
offenders.push({ provider, key });
|
|
288
288
|
}
|
|
@@ -290,7 +290,7 @@ describe("PROVIDER_SEED_DATA managed mode wiring", () => {
|
|
|
290
290
|
expect(offenders).toEqual([]);
|
|
291
291
|
});
|
|
292
292
|
|
|
293
|
-
test("github
|
|
293
|
+
test("github cloud service schema defaults to your-own", () => {
|
|
294
294
|
const parsed = ServicesSchema.shape["github-oauth"].parse({});
|
|
295
295
|
expect(parsed.mode).toBe("your-own");
|
|
296
296
|
});
|
|
@@ -89,7 +89,7 @@ const mockProviders = new Map<
|
|
|
89
89
|
tokenEndpointAuthMethod?: string;
|
|
90
90
|
tokenExchangeBodyFormat?: string;
|
|
91
91
|
baseUrl?: string;
|
|
92
|
-
|
|
92
|
+
cloudServiceConfigKey?: string | null;
|
|
93
93
|
}
|
|
94
94
|
>();
|
|
95
95
|
|
|
@@ -225,7 +225,7 @@ async function setupCredential(
|
|
|
225
225
|
service === "google"
|
|
226
226
|
? "https://gmail.googleapis.com/gmail/v1/users/me"
|
|
227
227
|
: undefined,
|
|
228
|
-
|
|
228
|
+
cloudServiceConfigKey: null,
|
|
229
229
|
});
|
|
230
230
|
mockApps.set(appId, {
|
|
231
231
|
id: appId,
|
|
@@ -8,19 +8,17 @@ mock.module("../util/retry.js", () => ({
|
|
|
8
8
|
sleep: () => Promise.resolve(),
|
|
9
9
|
}));
|
|
10
10
|
|
|
11
|
-
import type {
|
|
11
|
+
import type { CadetCloudClient } from "../cloud/client.js";
|
|
12
12
|
import { BackendError, CadetError } from "../util/errors.js";
|
|
13
13
|
import {
|
|
14
|
+
CloudOAuthConnection,
|
|
14
15
|
CredentialRequiredError,
|
|
15
16
|
InsufficientBalanceError,
|
|
16
|
-
PlatformOAuthConnection,
|
|
17
17
|
ProviderUnreachableError,
|
|
18
18
|
unhonoredManagedOptions,
|
|
19
|
-
} from "./
|
|
19
|
+
} from "./cloud-connection.js";
|
|
20
20
|
|
|
21
|
-
function makeMockClient(
|
|
22
|
-
fetchImpl?: typeof globalThis.fetch,
|
|
23
|
-
): CadetPlatformClient {
|
|
21
|
+
function makeMockClient(fetchImpl?: typeof globalThis.fetch): CadetCloudClient {
|
|
24
22
|
const mockFetchFn =
|
|
25
23
|
fetchImpl ??
|
|
26
24
|
(mock(async () => {
|
|
@@ -33,14 +31,14 @@ function makeMockClient(
|
|
|
33
31
|
return {
|
|
34
32
|
baseUrl: "https://platform.example.com",
|
|
35
33
|
assistantApiKey: "test-api-key",
|
|
36
|
-
|
|
34
|
+
cloudAssistantId: "asst-abc",
|
|
37
35
|
fetch: mock(async (path: string, init?: RequestInit) => {
|
|
38
36
|
const url = `https://platform.example.com${path}`;
|
|
39
37
|
const headers = new Headers(init?.headers);
|
|
40
38
|
headers.set("Authorization", "Bearer test-api-key");
|
|
41
39
|
return mockFetchFn(url, { ...init, headers });
|
|
42
40
|
}),
|
|
43
|
-
} as unknown as
|
|
41
|
+
} as unknown as CadetCloudClient;
|
|
44
42
|
}
|
|
45
43
|
|
|
46
44
|
const DEFAULT_OPTIONS = {
|
|
@@ -52,7 +50,7 @@ const DEFAULT_OPTIONS = {
|
|
|
52
50
|
connectionId: "platform-conn-123",
|
|
53
51
|
};
|
|
54
52
|
|
|
55
|
-
describe("
|
|
53
|
+
describe("CloudOAuthConnection", () => {
|
|
56
54
|
test("successful proxied request", async () => {
|
|
57
55
|
const upstreamBody = { messages: [{ id: "msg-1", snippet: "Hello" }] };
|
|
58
56
|
|
|
@@ -88,7 +86,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
88
86
|
}) as unknown as typeof globalThis.fetch,
|
|
89
87
|
);
|
|
90
88
|
|
|
91
|
-
const conn = new
|
|
89
|
+
const conn = new CloudOAuthConnection({
|
|
92
90
|
...DEFAULT_OPTIONS,
|
|
93
91
|
client,
|
|
94
92
|
});
|
|
@@ -126,7 +124,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
126
124
|
}) as unknown as typeof globalThis.fetch,
|
|
127
125
|
);
|
|
128
126
|
|
|
129
|
-
const conn = new
|
|
127
|
+
const conn = new CloudOAuthConnection({
|
|
130
128
|
...DEFAULT_OPTIONS,
|
|
131
129
|
client,
|
|
132
130
|
});
|
|
@@ -157,7 +155,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
157
155
|
}) as unknown as typeof globalThis.fetch,
|
|
158
156
|
);
|
|
159
157
|
|
|
160
|
-
const conn = new
|
|
158
|
+
const conn = new CloudOAuthConnection({
|
|
161
159
|
...DEFAULT_OPTIONS,
|
|
162
160
|
client,
|
|
163
161
|
});
|
|
@@ -187,7 +185,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
187
185
|
}) as unknown as typeof globalThis.fetch,
|
|
188
186
|
);
|
|
189
187
|
|
|
190
|
-
const conn = new
|
|
188
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
191
189
|
await conn.request({
|
|
192
190
|
method: "GET",
|
|
193
191
|
path: "/calendars/primary/events",
|
|
@@ -210,7 +208,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
210
208
|
}) as unknown as typeof globalThis.fetch,
|
|
211
209
|
);
|
|
212
210
|
|
|
213
|
-
const conn = new
|
|
211
|
+
const conn = new CloudOAuthConnection({
|
|
214
212
|
...DEFAULT_OPTIONS,
|
|
215
213
|
client,
|
|
216
214
|
baseUrl: "https://gmail.googleapis.com/gmail/v1/users/me",
|
|
@@ -233,7 +231,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
233
231
|
}) as unknown as typeof globalThis.fetch,
|
|
234
232
|
);
|
|
235
233
|
|
|
236
|
-
const conn = new
|
|
234
|
+
const conn = new CloudOAuthConnection({
|
|
237
235
|
...DEFAULT_OPTIONS,
|
|
238
236
|
client,
|
|
239
237
|
baseUrl: "https://gmail.googleapis.com/gmail/v1/users/me",
|
|
@@ -258,7 +256,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
258
256
|
}) as unknown as typeof globalThis.fetch,
|
|
259
257
|
);
|
|
260
258
|
|
|
261
|
-
const conn = new
|
|
259
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
262
260
|
await conn.request({ method: "GET", path: "/some/path" });
|
|
263
261
|
});
|
|
264
262
|
|
|
@@ -283,7 +281,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
283
281
|
) as unknown as typeof globalThis.fetch,
|
|
284
282
|
);
|
|
285
283
|
|
|
286
|
-
const conn = new
|
|
284
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
287
285
|
await expect(
|
|
288
286
|
conn.request({ method: "GET", path: "/test" }),
|
|
289
287
|
).rejects.toThrow(InsufficientBalanceError);
|
|
@@ -296,7 +294,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
296
294
|
) as unknown as typeof globalThis.fetch,
|
|
297
295
|
);
|
|
298
296
|
|
|
299
|
-
const conn = new
|
|
297
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
300
298
|
await expect(
|
|
301
299
|
conn.request({ method: "GET", path: "/test" }),
|
|
302
300
|
).rejects.toThrow(/add funds/i);
|
|
@@ -311,7 +309,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
311
309
|
}) as unknown as typeof globalThis.fetch,
|
|
312
310
|
);
|
|
313
311
|
|
|
314
|
-
const conn = new
|
|
312
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
315
313
|
await expect(
|
|
316
314
|
conn.request({ method: "GET", path: "/test" }),
|
|
317
315
|
).rejects.toThrow(InsufficientBalanceError);
|
|
@@ -325,7 +323,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
325
323
|
) as unknown as typeof globalThis.fetch,
|
|
326
324
|
);
|
|
327
325
|
|
|
328
|
-
const conn = new
|
|
326
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
329
327
|
await expect(
|
|
330
328
|
conn.request({ method: "GET", path: "/test" }),
|
|
331
329
|
).rejects.toThrow(CredentialRequiredError);
|
|
@@ -340,7 +338,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
340
338
|
}) as unknown as typeof globalThis.fetch,
|
|
341
339
|
);
|
|
342
340
|
|
|
343
|
-
const conn = new
|
|
341
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
344
342
|
await expect(
|
|
345
343
|
conn.request({ method: "GET", path: "/test" }),
|
|
346
344
|
).rejects.toThrow(ProviderUnreachableError);
|
|
@@ -355,7 +353,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
355
353
|
) as unknown as typeof globalThis.fetch,
|
|
356
354
|
);
|
|
357
355
|
|
|
358
|
-
const conn = new
|
|
356
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
359
357
|
await expect(
|
|
360
358
|
conn.request({ method: "GET", path: "/test" }),
|
|
361
359
|
).rejects.toThrow(/upstream timeout after 30s/);
|
|
@@ -376,7 +374,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
376
374
|
}) as unknown as typeof globalThis.fetch,
|
|
377
375
|
);
|
|
378
376
|
|
|
379
|
-
const conn = new
|
|
377
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
380
378
|
const result = await conn.request({ method: "GET", path: "/test" });
|
|
381
379
|
|
|
382
380
|
expect(result.status).toBe(200);
|
|
@@ -385,9 +383,9 @@ describe("PlatformOAuthConnection", () => {
|
|
|
385
383
|
});
|
|
386
384
|
|
|
387
385
|
test("withToken throws clear error", async () => {
|
|
388
|
-
const conn = new
|
|
386
|
+
const conn = new CloudOAuthConnection(DEFAULT_OPTIONS);
|
|
389
387
|
await expect(conn.withToken(async (token) => token)).rejects.toThrow(
|
|
390
|
-
"Raw token access is not supported for
|
|
388
|
+
"Raw token access is not supported for cloud connections. Use connection.request() instead.",
|
|
391
389
|
);
|
|
392
390
|
});
|
|
393
391
|
|
|
@@ -406,7 +404,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
406
404
|
}) as unknown as typeof globalThis.fetch,
|
|
407
405
|
);
|
|
408
406
|
|
|
409
|
-
const conn = new
|
|
407
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
410
408
|
const result = await conn.request({ method: "GET", path: "/test" });
|
|
411
409
|
|
|
412
410
|
expect(result.status).toBe(200);
|
|
@@ -421,7 +419,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
421
419
|
) as unknown as typeof globalThis.fetch,
|
|
422
420
|
);
|
|
423
421
|
|
|
424
|
-
const conn = new
|
|
422
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
425
423
|
await expect(
|
|
426
424
|
conn.request({ method: "GET", path: "/test" }),
|
|
427
425
|
).rejects.toThrow("Platform proxy returned unexpected status 429");
|
|
@@ -442,7 +440,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
442
440
|
}) as unknown as typeof globalThis.fetch,
|
|
443
441
|
);
|
|
444
442
|
|
|
445
|
-
const conn = new
|
|
443
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
446
444
|
const result = await conn.request({ method: "GET", path: "/test" });
|
|
447
445
|
|
|
448
446
|
expect(result.status).toBe(200);
|
|
@@ -458,7 +456,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
458
456
|
}) as unknown as typeof globalThis.fetch,
|
|
459
457
|
);
|
|
460
458
|
|
|
461
|
-
const conn = new
|
|
459
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
462
460
|
await expect(
|
|
463
461
|
conn.request({ method: "GET", path: "/test" }),
|
|
464
462
|
).rejects.toThrow(CredentialRequiredError);
|
|
@@ -474,7 +472,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
474
472
|
}) as unknown as typeof globalThis.fetch,
|
|
475
473
|
);
|
|
476
474
|
|
|
477
|
-
const conn = new
|
|
475
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
478
476
|
await expect(
|
|
479
477
|
conn.request({ method: "GET", path: "/test" }),
|
|
480
478
|
).rejects.toThrow("Platform proxy returned unexpected status 403");
|
|
@@ -490,7 +488,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
490
488
|
}) as unknown as typeof globalThis.fetch,
|
|
491
489
|
);
|
|
492
490
|
|
|
493
|
-
const conn = new
|
|
491
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
494
492
|
await expect(
|
|
495
493
|
conn.request({
|
|
496
494
|
method: "POST",
|
|
@@ -510,7 +508,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
510
508
|
}) as unknown as typeof globalThis.fetch,
|
|
511
509
|
);
|
|
512
510
|
|
|
513
|
-
const conn = new
|
|
511
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
514
512
|
await expect(
|
|
515
513
|
conn.request({
|
|
516
514
|
method: "POST",
|
|
@@ -536,7 +534,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
536
534
|
}) as unknown as typeof globalThis.fetch,
|
|
537
535
|
);
|
|
538
536
|
|
|
539
|
-
const conn = new
|
|
537
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
540
538
|
const result = await conn.request({
|
|
541
539
|
method: "POST",
|
|
542
540
|
path: "/messages/send",
|
|
@@ -559,7 +557,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
559
557
|
}) as unknown as typeof globalThis.fetch,
|
|
560
558
|
);
|
|
561
559
|
|
|
562
|
-
const conn = new
|
|
560
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
563
561
|
const result = await conn.request({
|
|
564
562
|
method: "POST",
|
|
565
563
|
path: "/v1/payment_intents",
|
|
@@ -583,7 +581,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
583
581
|
|
|
584
582
|
// 700 reaches `new Response(body, { status })` as a RangeError, which is
|
|
585
583
|
// not a mapped error, so the caller would see an opaque 500.
|
|
586
|
-
const conn = new
|
|
584
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
587
585
|
await expect(conn.request({ method: "GET", path: "/x" })).rejects.toThrow(
|
|
588
586
|
"Platform proxy returned an unusable response status: 700",
|
|
589
587
|
);
|
|
@@ -598,13 +596,13 @@ describe("PlatformOAuthConnection", () => {
|
|
|
598
596
|
}) as unknown as typeof globalThis.fetch,
|
|
599
597
|
);
|
|
600
598
|
|
|
601
|
-
const conn = new
|
|
599
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
602
600
|
await expect(conn.request({ method: "GET", path: "/x" })).rejects.toThrow(
|
|
603
601
|
BackendError,
|
|
604
602
|
);
|
|
605
603
|
});
|
|
606
604
|
|
|
607
|
-
// The
|
|
605
|
+
// The cloud proxy rebuilds the query from the parsed record, so managed
|
|
608
606
|
// mode cannot carry a signed query string.
|
|
609
607
|
test("sends the parsed query and never rawQuery", async () => {
|
|
610
608
|
const client = makeMockClient(
|
|
@@ -621,7 +619,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
621
619
|
}) as unknown as typeof globalThis.fetch,
|
|
622
620
|
);
|
|
623
621
|
|
|
624
|
-
const conn = new
|
|
622
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
625
623
|
await conn.request({
|
|
626
624
|
method: "GET",
|
|
627
625
|
path: "/x",
|
|
@@ -630,10 +628,10 @@ describe("PlatformOAuthConnection", () => {
|
|
|
630
628
|
});
|
|
631
629
|
});
|
|
632
630
|
|
|
633
|
-
// The
|
|
631
|
+
// The cloud proxy parses the response, rebuilds the query, and follows
|
|
634
632
|
// redirects server-side, so managed mode diverges from BYO on all three by
|
|
635
633
|
// design.
|
|
636
|
-
test("names every option the
|
|
634
|
+
test("names every option the cloud proxy cannot honor", () => {
|
|
637
635
|
expect(unhonoredManagedOptions({ method: "GET", path: "/x" })).toEqual([]);
|
|
638
636
|
expect(
|
|
639
637
|
unhonoredManagedOptions({
|
|
@@ -670,7 +668,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
670
668
|
}) as unknown as typeof globalThis.fetch,
|
|
671
669
|
);
|
|
672
670
|
|
|
673
|
-
const conn = new
|
|
671
|
+
const conn = new CloudOAuthConnection({ ...DEFAULT_OPTIONS, client });
|
|
674
672
|
const result = await conn.request({
|
|
675
673
|
method: "GET",
|
|
676
674
|
path: "/v1/redirecting",
|
|
@@ -678,7 +676,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
678
676
|
rawResponseBody: true,
|
|
679
677
|
});
|
|
680
678
|
|
|
681
|
-
// The
|
|
679
|
+
// The cloud already followed the redirect and parsed the body, so the
|
|
682
680
|
// caller sees the destination's JSON rather than a 3xx or raw bytes.
|
|
683
681
|
expect(result.status).toBe(200);
|
|
684
682
|
expect(result.body).toEqual({ followed: true });
|
|
@@ -697,7 +695,7 @@ describe("PlatformOAuthConnection", () => {
|
|
|
697
695
|
}) as unknown as typeof globalThis.fetch,
|
|
698
696
|
);
|
|
699
697
|
|
|
700
|
-
const conn = new
|
|
698
|
+
const conn = new CloudOAuthConnection({
|
|
701
699
|
...DEFAULT_OPTIONS,
|
|
702
700
|
client,
|
|
703
701
|
provider: "slack",
|