@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
|
@@ -4,7 +4,7 @@ import { describe, expect, mock, test } from "bun:test";
|
|
|
4
4
|
// startGatewayCallback() dynamically imports these to resolve the public
|
|
5
5
|
// callback URL. Stub them so the gateway flow runs without platform infra.
|
|
6
6
|
|
|
7
|
-
mock.module("../../inbound/
|
|
7
|
+
mock.module("../../inbound/cloud-callback-registration.js", () => ({
|
|
8
8
|
resolveCallbackUrl: async () =>
|
|
9
9
|
"https://platform.example/v1/gateway/callbacks/abc/webhooks/oauth/callback/",
|
|
10
10
|
}));
|
|
@@ -29,7 +29,7 @@ import type {
|
|
|
29
29
|
} from "@modelcontextprotocol/sdk/shared/auth.js";
|
|
30
30
|
import { buildMcpOAuthClientMetadata } from "@mycadet/service-contracts/mcp-oauth";
|
|
31
31
|
|
|
32
|
-
import {
|
|
32
|
+
import { getCloudAssistantId } from "../config/env.js";
|
|
33
33
|
import { getAssistantName } from "../daemon/identity-helpers.js";
|
|
34
34
|
import {
|
|
35
35
|
deleteSecureKeyAsync,
|
|
@@ -143,7 +143,7 @@ export class McpOAuthProvider implements OAuthClientProvider {
|
|
|
143
143
|
*/
|
|
144
144
|
get clientMetadata(): OAuthClientMetadata {
|
|
145
145
|
const assistantName = getAssistantName();
|
|
146
|
-
const assistantId =
|
|
146
|
+
const assistantId = getCloudAssistantId().trim();
|
|
147
147
|
return buildMcpOAuthClientMetadata({
|
|
148
148
|
clientName: assistantName ?? "Cadet Assistant",
|
|
149
149
|
redirectUris: this._redirectUrl ? [this._redirectUrl] : [],
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ApiError, GoogleGenAI } from "@google/genai";
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
+
type CloudProxyCredentials,
|
|
4
5
|
type GeneratedImage,
|
|
5
6
|
type ImageGenCredentials,
|
|
6
7
|
type ImageGenerationRequest,
|
|
7
8
|
type ImageGenerationResult,
|
|
8
9
|
isImageProviderBillingError,
|
|
9
|
-
type ManagedProxyCredentials,
|
|
10
10
|
MAX_VARIANTS,
|
|
11
11
|
} from "./types.js";
|
|
12
12
|
|
|
@@ -47,8 +47,8 @@ export function mapGeminiError(error: unknown): string {
|
|
|
47
47
|
return `Gemini API error (status ${status}). Please try again.`;
|
|
48
48
|
}
|
|
49
49
|
if (error instanceof Error) {
|
|
50
|
-
// The
|
|
51
|
-
// the upstream status (e.g. "
|
|
50
|
+
// The cloud proxy surfaces failures as plain Errors whose message embeds
|
|
51
|
+
// the upstream status (e.g. "Cloud proxy request failed (402): ...").
|
|
52
52
|
if (isImageProviderBillingError({ message: error.message })) {
|
|
53
53
|
return GEMINI_BILLING_MESSAGE;
|
|
54
54
|
}
|
|
@@ -57,17 +57,17 @@ export function mapGeminiError(error: unknown): string {
|
|
|
57
57
|
return "An unexpected error occurred during image generation.";
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
// ---
|
|
60
|
+
// --- Cloud proxy direct HTTP call ---
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
|
-
* Call the
|
|
64
|
-
* The
|
|
63
|
+
* Call the cloud proxy directly via fetch, using the Gemini API URL format.
|
|
64
|
+
* The cloud proxy translates this to Vertex AI internally with ADC auth.
|
|
65
65
|
*
|
|
66
66
|
* Uses the Gemini API format:
|
|
67
67
|
* POST {baseUrl}/v1beta/models/{model}:generateContent
|
|
68
68
|
*/
|
|
69
69
|
async function generateImageViaProxy(
|
|
70
|
-
credentials:
|
|
70
|
+
credentials: CloudProxyCredentials,
|
|
71
71
|
model: string,
|
|
72
72
|
contents: unknown[],
|
|
73
73
|
config: Record<string, unknown>,
|
|
@@ -93,9 +93,7 @@ async function generateImageViaProxy(
|
|
|
93
93
|
|
|
94
94
|
if (!response.ok) {
|
|
95
95
|
const body = await response.text();
|
|
96
|
-
throw new Error(
|
|
97
|
-
`Managed proxy request failed (${response.status}): ${body}`,
|
|
98
|
-
);
|
|
96
|
+
throw new Error(`Cloud proxy request failed (${response.status}): ${body}`);
|
|
99
97
|
}
|
|
100
98
|
|
|
101
99
|
const data = (await response.json()) as {
|
|
@@ -161,11 +159,11 @@ export async function generateImage(
|
|
|
161
159
|
const config = { responseModalities: ["TEXT", "IMAGE"] as string[] };
|
|
162
160
|
const contents = [{ role: "user" as const, parts }];
|
|
163
161
|
|
|
164
|
-
// For the
|
|
162
|
+
// For the cloud proxy, bypass the @google/genai SDK and make direct HTTP
|
|
165
163
|
// calls. The SDK's generateContent doesn't support responseModalities for
|
|
166
164
|
// image generation. Direct fetch lets us use the Gemini API format with
|
|
167
|
-
// the
|
|
168
|
-
if (credentials.type === "
|
|
165
|
+
// the cloud proxy translating to Vertex internally.
|
|
166
|
+
if (credentials.type === "cloud-proxy") {
|
|
169
167
|
const makeSingleCall = () =>
|
|
170
168
|
generateImageViaProxy(
|
|
171
169
|
credentials,
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* Shared credential resolver for image-generation call sites (image-studio
|
|
3
3
|
* tool, CLI `image-generation` command, app-icon generator).
|
|
4
4
|
*
|
|
5
|
-
* Each call site picks between the
|
|
5
|
+
* Each call site picks between the cloud-proxy path (routes through the
|
|
6
6
|
* platform) and the "your own" path (direct provider API key). This module
|
|
7
7
|
* resolves either path and returns a provider-aware error hint when
|
|
8
8
|
* credentials are unavailable.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import { PLATFORM_PROVIDER_META } from "../providers/
|
|
12
|
-
import {
|
|
11
|
+
import { PLATFORM_PROVIDER_META } from "../providers/cloud-proxy/constants.js";
|
|
12
|
+
import { resolveCloudProxyContext } from "../providers/cloud-proxy/context.js";
|
|
13
13
|
import { getProviderKeyAsync } from "../security/secure-keys.js";
|
|
14
14
|
import type { ImageGenCredentials, ImageGenProvider } from "./types.js";
|
|
15
15
|
import { providerForImageModelPrefix, providerForModel } from "./types.js";
|
|
@@ -19,7 +19,7 @@ import { providerForImageModelPrefix, providerForModel } from "./types.js";
|
|
|
19
19
|
*
|
|
20
20
|
* `cadet` is unconditionally managed and carries no backend of its own: the
|
|
21
21
|
* backend derives from the model prefix (`gpt-*`/`dall-e-*` proxy OpenAI,
|
|
22
|
-
* anything else proxies Gemini), so one
|
|
22
|
+
* anything else proxies Gemini), so one cloud provider spans both runtime
|
|
23
23
|
* proxies. Managed routing never falls back to a stored BYOK key, and a BYOK
|
|
24
24
|
* provider never falls back to the proxy — billing follows the explicit
|
|
25
25
|
* provider choice. Other providers use the caller's key, with an explicit
|
|
@@ -52,7 +52,7 @@ export function resolveImageGenRouting(
|
|
|
52
52
|
/**
|
|
53
53
|
* Resolve credentials for an image-generation request.
|
|
54
54
|
*
|
|
55
|
-
* - `managed`: returns
|
|
55
|
+
* - `managed`: returns cloud-proxy credentials when the cloud URL and
|
|
56
56
|
* assistant API key are both configured, otherwise a hint telling the
|
|
57
57
|
* user to log in.
|
|
58
58
|
* - otherwise: returns direct credentials when the provider API key is
|
|
@@ -70,7 +70,7 @@ export async function resolveImageGenCredentials(opts: {
|
|
|
70
70
|
// baseUrl and assistantApiKey can't diverge if the credential is cleared
|
|
71
71
|
// between lookups.
|
|
72
72
|
const meta = PLATFORM_PROVIDER_META[provider];
|
|
73
|
-
const ctx = await
|
|
73
|
+
const ctx = await resolveCloudProxyContext();
|
|
74
74
|
if (
|
|
75
75
|
!meta?.managed ||
|
|
76
76
|
!meta.proxyPath ||
|
|
@@ -79,14 +79,14 @@ export async function resolveImageGenCredentials(opts: {
|
|
|
79
79
|
) {
|
|
80
80
|
return {
|
|
81
81
|
errorHint:
|
|
82
|
-
"
|
|
82
|
+
"Cloud proxy is not available. Please log in to Cadet or switch to Your Own mode.",
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
85
|
return {
|
|
86
86
|
credentials: {
|
|
87
|
-
type: "
|
|
87
|
+
type: "cloud-proxy",
|
|
88
88
|
assistantApiKey: ctx.assistantApiKey,
|
|
89
|
-
baseUrl: `${ctx.
|
|
89
|
+
baseUrl: `${ctx.cloudBaseUrl}${meta.proxyPath}`,
|
|
90
90
|
},
|
|
91
91
|
};
|
|
92
92
|
}
|
|
@@ -99,7 +99,7 @@ export async function generateImageOpenAI(
|
|
|
99
99
|
const variants = Math.max(1, Math.min(request.variants ?? 1, MAX_VARIANTS));
|
|
100
100
|
|
|
101
101
|
const client =
|
|
102
|
-
credentials.type === "
|
|
102
|
+
credentials.type === "cloud-proxy"
|
|
103
103
|
? new OpenAI({
|
|
104
104
|
apiKey: credentials.assistantApiKey,
|
|
105
105
|
baseURL: credentials.baseUrl,
|
package/src/media/types.ts
CHANGED
|
@@ -4,12 +4,12 @@ export interface DirectCredentials {
|
|
|
4
4
|
type: "direct";
|
|
5
5
|
apiKey: string;
|
|
6
6
|
}
|
|
7
|
-
export interface
|
|
8
|
-
type: "
|
|
7
|
+
export interface CloudProxyCredentials {
|
|
8
|
+
type: "cloud-proxy";
|
|
9
9
|
assistantApiKey: string;
|
|
10
10
|
baseUrl: string;
|
|
11
11
|
}
|
|
12
|
-
export type ImageGenCredentials = DirectCredentials |
|
|
12
|
+
export type ImageGenCredentials = DirectCredentials | CloudProxyCredentials;
|
|
13
13
|
|
|
14
14
|
export interface ImageGenerationRequest {
|
|
15
15
|
prompt: string;
|
|
@@ -105,7 +105,7 @@ export interface ReactionTarget {
|
|
|
105
105
|
* Tagged with its kind so a second way of naming a destination is additive
|
|
106
106
|
* rather than a reinterpretation of `chatId`. Reaching a person who has not
|
|
107
107
|
* been named as a chat is deliberately not a kind here: on Slack and Discord
|
|
108
|
-
* it costs a
|
|
108
|
+
* it costs a cloud call whose result must be resolved at send time rather
|
|
109
109
|
* than stored, and nothing asks for it yet.
|
|
110
110
|
*/
|
|
111
111
|
export type ProactiveTarget = {
|
|
@@ -55,7 +55,7 @@ export const discordTransport: ChannelTransport = {
|
|
|
55
55
|
/**
|
|
56
56
|
* A chat is a channel id, with `threadId` naming the thread, which is its
|
|
57
57
|
* own channel. Reaching a person who has not been named as a chat would
|
|
58
|
-
* mean opening their DM first, a
|
|
58
|
+
* mean opening their DM first, a cloud call this resolution does not
|
|
59
59
|
* make; the inbound `dm` param below is how an event-carried callback says
|
|
60
60
|
* its `chatId` is a recipient rather than a room.
|
|
61
61
|
*/
|
|
@@ -28,13 +28,13 @@ export const GMAIL_API_BASE_URL =
|
|
|
28
28
|
/**
|
|
29
29
|
* Minimum Google OAuth scope a connection must carry for Gmail read access.
|
|
30
30
|
*
|
|
31
|
-
* The
|
|
31
|
+
* The cloud `google` OAuth app bundles Gmail + Calendar + Drive, but a
|
|
32
32
|
* connection can be granted a narrow subset (e.g. the onboarding check-in flow
|
|
33
33
|
* requests Calendar-only). Resolving against Gmail read access turns a
|
|
34
34
|
* downstream 403 into an actionable "reconnect Google and grant Gmail" error
|
|
35
35
|
* at resolution time when the selected connection cannot read Gmail.
|
|
36
36
|
*
|
|
37
|
-
*
|
|
37
|
+
* Cloud connections never carry this scope: Cadet's app grants Gmail as
|
|
38
38
|
* `https://mail.google.com/`, which `scopeDifference` in `oauth/scope-utils.ts`
|
|
39
39
|
* accepts as covering it.
|
|
40
40
|
*/
|
|
@@ -526,7 +526,7 @@ async function fetchMessagesIndividually(
|
|
|
526
526
|
* Packs up to 100 sub-requests per HTTP call and runs up to BATCH_CONCURRENCY calls in parallel.
|
|
527
527
|
* Falls back to individual getMessage for any sub-requests that fail within a batch.
|
|
528
528
|
*
|
|
529
|
-
* For connections that do not support raw token access (e.g.
|
|
529
|
+
* For connections that do not support raw token access (e.g. cloud connections),
|
|
530
530
|
* falls back to fetching each message individually via connection.request().
|
|
531
531
|
*/
|
|
532
532
|
export async function batchGetMessages(
|
|
@@ -556,7 +556,7 @@ export async function batchGetMessages(
|
|
|
556
556
|
}
|
|
557
557
|
|
|
558
558
|
// Try batch API first; fall back to individual fetches if withToken is unavailable
|
|
559
|
-
// (e.g.
|
|
559
|
+
// (e.g. cloud connections where raw tokens cannot be exposed).
|
|
560
560
|
let useBatch = true;
|
|
561
561
|
try {
|
|
562
562
|
// Probe withToken availability with a no-op call
|
|
@@ -29,7 +29,7 @@ export const slackTransport: ChannelTransport = {
|
|
|
29
29
|
/**
|
|
30
30
|
* A chat is a channel or DM id, with `threadTs` naming the thread to post
|
|
31
31
|
* under. Reaching a person who has not been named as a chat would mean
|
|
32
|
-
* opening the DM first (`conversations.open`), a
|
|
32
|
+
* opening the DM first (`conversations.open`), a cloud call this
|
|
33
33
|
* resolution does not make.
|
|
34
34
|
*/
|
|
35
35
|
addressFor(target) {
|
|
@@ -150,7 +150,7 @@ export const telegramTransport: ChannelTransport = {
|
|
|
150
150
|
* A start that Telegram refuses (a chat that is not private, where drafts
|
|
151
151
|
* are not offered) reports not-ok, and the caller falls back to sending the
|
|
152
152
|
* finished reply. That is the whole of the per-conversation rule: it is
|
|
153
|
-
* answered here, where the
|
|
153
|
+
* answered here, where the cloud's constraint lives.
|
|
154
154
|
*/
|
|
155
155
|
async streamReply(ctx, chatId, op) {
|
|
156
156
|
const opts = threadOptions(ctx);
|
|
@@ -21,7 +21,7 @@ const MAX_ERRORS = 10;
|
|
|
21
21
|
* Cap on each error message's UTF-8 byte length. With MAX_ERRORS rows this
|
|
22
22
|
* bounds the whole error payload well under the 4096-byte watchdog `detail`
|
|
23
23
|
* limit (WATCHDOG_DETAIL_MAX_JSON_BYTES) — an oversized detail is silently
|
|
24
|
-
* dropped by the
|
|
24
|
+
* dropped by the cloud, which would selectively erase the most-corrupted
|
|
25
25
|
* databases from the prevalence metric. Bytes, not `String.length`: ten
|
|
26
26
|
* 160-character CJK messages would otherwise serialize to ~4.9 KB.
|
|
27
27
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Periodic database integrity sample, reported as a `db_integrity` watchdog
|
|
3
|
-
* event so the
|
|
3
|
+
* event so the cloud can read corruption prevalence across the fleet.
|
|
4
4
|
*
|
|
5
5
|
* The `PRAGMA quick_check` itself runs in a short-lived subprocess
|
|
6
6
|
* (`db-integrity-check.ts`) — bun:sqlite's page walk is synchronous, and a
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
import { existsSync, statSync, writeFileSync } from "node:fs";
|
|
19
19
|
import { join } from "node:path";
|
|
20
20
|
|
|
21
|
-
import { getRawShareAnalytics } from "../
|
|
21
|
+
import { getRawShareAnalytics } from "../cloud/consent-cache.js";
|
|
22
22
|
import { recordWatchdogEvent } from "../telemetry/watchdog-events-store.js";
|
|
23
23
|
import { getLogger } from "../util/logger.js";
|
|
24
24
|
import { getDbPath, getMonitoringDataDir } from "../util/platform.js";
|
|
@@ -19,7 +19,7 @@ import { getLogger } from "../util/logger.js";
|
|
|
19
19
|
|
|
20
20
|
const log = getLogger("mount-watch");
|
|
21
21
|
|
|
22
|
-
/** Assistant-container PVC bind targets in the
|
|
22
|
+
/** Assistant-container PVC bind targets in the cloud pod template. */
|
|
23
23
|
export const ASSISTANT_VOLUME_MOUNT_POINTS = ["/workspace", "/data"] as const;
|
|
24
24
|
|
|
25
25
|
const VIRTIOFS_TYPES = new Set(["virtiofs", "fuse.virtiofs"]);
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
15
15
|
import { dirname, join } from "node:path";
|
|
16
16
|
|
|
17
|
-
import { getRawShareAnalytics } from "../
|
|
17
|
+
import { getRawShareAnalytics } from "../cloud/consent-cache.js";
|
|
18
18
|
import { recordWatchdogEvent } from "../telemetry/watchdog-events-store.js";
|
|
19
19
|
import { getContainerMemoryEvents } from "../util/cgroup-memory.js";
|
|
20
20
|
import { getLogger } from "../util/logger.js";
|
package/src/monitoring/worker.ts
CHANGED
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
17
17
|
|
|
18
|
+
import { startConsentRefresh } from "../cloud/consent-cache.js";
|
|
19
|
+
import { rehydrateCloudCredentials } from "../config/cloud-rehydration.js";
|
|
18
20
|
import { getConfig } from "../config/loader.js";
|
|
19
|
-
import { rehydratePlatformCredentials } from "../config/platform-rehydration.js";
|
|
20
21
|
import { resetDb } from "../persistence/db-connection.js";
|
|
21
|
-
import { startConsentRefresh } from "../platform/consent-cache.js";
|
|
22
22
|
import { disableStreamSeqStamping } from "../runtime/assistant-stream-state.js";
|
|
23
23
|
import {
|
|
24
24
|
startConfigSnapshotReporter,
|
|
@@ -91,12 +91,12 @@ async function main(): Promise<void> {
|
|
|
91
91
|
"Resource monitor process started",
|
|
92
92
|
);
|
|
93
93
|
|
|
94
|
-
// Rehydrate the
|
|
94
|
+
// Rehydrate the cloud base URL and IDs from the credential store before
|
|
95
95
|
// the telemetry reporter starts. The daemon does this in
|
|
96
96
|
// initializeProvidersAndTools(); this standalone process must do it itself so
|
|
97
|
-
// the non-turn telemetry it flushes carries the
|
|
97
|
+
// the non-turn telemetry it flushes carries the cloud organization and
|
|
98
98
|
// user context instead of shipping with those fields empty.
|
|
99
|
-
await
|
|
99
|
+
await rehydrateCloudCredentials();
|
|
100
100
|
|
|
101
101
|
let sampler: ResourceSamplerHandle | null = null;
|
|
102
102
|
let fdMonitor: FileDescriptorMonitorHandle | null = null;
|
|
@@ -412,7 +412,7 @@ A guardian-sensitive notification (approval requests, access requests, channel a
|
|
|
412
412
|
|
|
413
413
|
### Platform (always connected)
|
|
414
414
|
|
|
415
|
-
The `
|
|
415
|
+
The `CloudPushAdapter` posts the notification to the cloud's `/v1/assistants/{id}/push/dispatch/` endpoint, which fans it out to the bound user's registered devices for native mobile push. Without cloud credentials the delivery is recorded as failed.
|
|
416
416
|
|
|
417
417
|
### External channels: Telegram, Slack, Discord
|
|
418
418
|
|
|
@@ -537,7 +537,7 @@ Where classification does not run, any other code-less reply falls through to th
|
|
|
537
537
|
| `conversation-seed-composer.ts` | Surface-aware conversation seed generation (richer than notification copy) |
|
|
538
538
|
| `destination-resolver.ts` | Resolves per-channel endpoints (Telegram and Slack chat ID, Discord user ID) |
|
|
539
539
|
| `adapters/macos.ts` | Cadet adapter -- broadcasts `notification_intent` via SSE with deep-link metadata |
|
|
540
|
-
| `adapters/platform.ts` | Platform adapter: posts to the
|
|
540
|
+
| `adapters/platform.ts` | Platform adapter: posts to the cloud push-dispatch endpoint for native mobile push |
|
|
541
541
|
| `adapters/telegram.ts` | Telegram adapter: calls the Telegram Bot API through `messaging/providers/telegram-bot/send.ts` |
|
|
542
542
|
| `adapters/slack.ts` | Slack adapter: posts to the guardian's DM through `messaging/providers/slack/send.ts` |
|
|
543
543
|
| `adapters/discord.ts` | Discord adapter: sends to the guardian's DM through `messaging/providers/discord/send.ts` |
|
|
@@ -1111,7 +1111,7 @@ describe("NotificationBroadcaster remotePushDispatched flag", () => {
|
|
|
1111
1111
|
renderedCopy: {},
|
|
1112
1112
|
});
|
|
1113
1113
|
|
|
1114
|
-
test("cadet payload carries true when the
|
|
1114
|
+
test("cadet payload carries true when the cloud adapter reports an accepted push; platform payload omits it", async () => {
|
|
1115
1115
|
bothChannelsCopy();
|
|
1116
1116
|
|
|
1117
1117
|
const cadet = makeCapturingAdapter("cadet");
|
|
@@ -1135,7 +1135,7 @@ describe("NotificationBroadcaster remotePushDispatched flag", () => {
|
|
|
1135
1135
|
expect(platform.sends[0]?.payload.remotePushDispatched).toBeUndefined();
|
|
1136
1136
|
});
|
|
1137
1137
|
|
|
1138
|
-
test("cadet payload carries false when the
|
|
1138
|
+
test("cadet payload carries false when the cloud dispatch fails", async () => {
|
|
1139
1139
|
bothChannelsCopy();
|
|
1140
1140
|
|
|
1141
1141
|
const cadet = makeCapturingAdapter("cadet");
|
|
@@ -1173,7 +1173,7 @@ describe("NotificationBroadcaster remotePushDispatched flag", () => {
|
|
|
1173
1173
|
expect(cadet.sends[0]?.payload.remotePushPlatforms).toEqual(["ios"]);
|
|
1174
1174
|
});
|
|
1175
1175
|
|
|
1176
|
-
test("cadet payload carries false when the
|
|
1176
|
+
test("cadet payload carries false when the cloud reports no accepted push (skipped or zero tokens)", async () => {
|
|
1177
1177
|
bothChannelsCopy();
|
|
1178
1178
|
|
|
1179
1179
|
const cadet = makeCapturingAdapter("cadet");
|
|
@@ -1192,7 +1192,7 @@ describe("NotificationBroadcaster remotePushDispatched flag", () => {
|
|
|
1192
1192
|
expect(cadet.sends[0]?.payload.remotePushDispatched).toBe(false);
|
|
1193
1193
|
});
|
|
1194
1194
|
|
|
1195
|
-
test("cadet payload carries false when the
|
|
1195
|
+
test("cadet payload carries false when the cloud result omits remotePushAccepted", async () => {
|
|
1196
1196
|
bothChannelsCopy();
|
|
1197
1197
|
|
|
1198
1198
|
const cadet = makeCapturingAdapter("cadet");
|
|
@@ -1208,7 +1208,7 @@ describe("NotificationBroadcaster remotePushDispatched flag", () => {
|
|
|
1208
1208
|
expect(cadet.sends[0]?.payload.remotePushDispatched).toBe(false);
|
|
1209
1209
|
});
|
|
1210
1210
|
|
|
1211
|
-
test("cadet payload carries false when the
|
|
1211
|
+
test("cadet payload carries false when the cloud adapter throws", async () => {
|
|
1212
1212
|
bothChannelsCopy();
|
|
1213
1213
|
|
|
1214
1214
|
const cadet = makeCapturingAdapter("cadet");
|
|
@@ -1233,7 +1233,7 @@ describe("NotificationBroadcaster remotePushDispatched flag", () => {
|
|
|
1233
1233
|
expect(results.find((r) => r.channel === "cadet")?.status).toBe("sent");
|
|
1234
1234
|
});
|
|
1235
1235
|
|
|
1236
|
-
test("cadet intent still flushes with false when the
|
|
1236
|
+
test("cadet intent still flushes with false when the cloud channel's prep throws", async () => {
|
|
1237
1237
|
bothChannelsCopy();
|
|
1238
1238
|
pairingErrorByChannel = { platform: new Error("pairing exploded") };
|
|
1239
1239
|
|
|
@@ -1251,14 +1251,14 @@ describe("NotificationBroadcaster remotePushDispatched flag", () => {
|
|
|
1251
1251
|
broadcaster.broadcastDecision(makeSignal(), bothChannelsDecision()),
|
|
1252
1252
|
).rejects.toThrow("pairing exploded");
|
|
1253
1253
|
|
|
1254
|
-
// The
|
|
1254
|
+
// The cloud adapter never ran, but the deferred cadet send must not
|
|
1255
1255
|
// be lost -- its pending delivery row would block retries forever.
|
|
1256
1256
|
expect(platform.sends.length).toBe(0);
|
|
1257
1257
|
expect(cadet.sends.length).toBe(1);
|
|
1258
1258
|
expect(cadet.sends[0]?.payload.remotePushDispatched).toBe(false);
|
|
1259
1259
|
});
|
|
1260
1260
|
|
|
1261
|
-
test("deadline expiry flushes cadet with false while the
|
|
1261
|
+
test("deadline expiry flushes cadet with false while the cloud dispatch finishes in the background", async () => {
|
|
1262
1262
|
bothChannelsCopy();
|
|
1263
1263
|
|
|
1264
1264
|
let resolvePlatform: ((result: DeliveryResult) => void) | undefined;
|
|
@@ -1325,7 +1325,7 @@ describe("NotificationBroadcaster remotePushDispatched flag", () => {
|
|
|
1325
1325
|
expect(results.find((r) => r.channel === "platform")?.status).toBe("sent");
|
|
1326
1326
|
});
|
|
1327
1327
|
|
|
1328
|
-
test("dispatches the
|
|
1328
|
+
test("dispatches the cloud adapter before the cadet intent when both are selected", async () => {
|
|
1329
1329
|
bothChannelsCopy();
|
|
1330
1330
|
|
|
1331
1331
|
const callOrder: string[] = [];
|
|
@@ -225,7 +225,7 @@ describe("completion local delivery policy", () => {
|
|
|
225
225
|
);
|
|
226
226
|
|
|
227
227
|
test.each(["chat.assistant_reply", "schedule.result"])(
|
|
228
|
-
"%s retains the
|
|
228
|
+
"%s retains the cloud owner fallback when the guardian lookup is unavailable",
|
|
229
229
|
(sourceEventName) => {
|
|
230
230
|
expect(
|
|
231
231
|
isCompletionRecipientUnavailable(
|
|
@@ -29,13 +29,13 @@ mock.module("../../contacts/guardian-delivery-reader.js", () => ({
|
|
|
29
29
|
guardianForChannel: () => undefined,
|
|
30
30
|
}));
|
|
31
31
|
|
|
32
|
-
mock.module("../../
|
|
33
|
-
|
|
32
|
+
mock.module("../../cloud/client.js", () => ({
|
|
33
|
+
CadetCloudClient: class {
|
|
34
34
|
static async create(): Promise<null> {
|
|
35
35
|
return null;
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
|
-
|
|
38
|
+
isCloudClientConfigured: async () => false,
|
|
39
39
|
}));
|
|
40
40
|
|
|
41
41
|
mock.module("../broadcaster.js", () => ({
|
|
@@ -153,7 +153,7 @@ describe("emitNotificationSignal dedupe claim on failure", () => {
|
|
|
153
153
|
);
|
|
154
154
|
});
|
|
155
155
|
|
|
156
|
-
// "sent" is a completed channel delivery; "pending" is the
|
|
156
|
+
// "sent" is a completed channel delivery; "pending" is the cloud push
|
|
157
157
|
// that passed its outcome deadline and is still in flight. Both are
|
|
158
158
|
// side effects a retry would repeat.
|
|
159
159
|
for (const status of ["sent", "pending"] as const) {
|
|
@@ -2,7 +2,7 @@ import type { ConversationErrorCode } from "../api/events/conversation-error.js"
|
|
|
2
2
|
import type { BackgroundJobErrorKind } from "../runtime/background-job-runner.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* Failure codes whose cause is the whole workspace: the
|
|
5
|
+
* Failure codes whose cause is the whole workspace: the cloud route and the
|
|
6
6
|
* local machine exist once, so every job they hit shares one root cause and
|
|
7
7
|
* one remedy, whatever provider or profile the job used. These collapse into
|
|
8
8
|
* a single notification per cause per UTC day.
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
* Platform push adapter for native mobile notification delivery.
|
|
3
3
|
*
|
|
4
4
|
* POSTs a `notification_intent` payload to
|
|
5
|
-
* `/v1/assistants/{id}/push/dispatch/`. The
|
|
5
|
+
* `/v1/assistants/{id}/push/dispatch/`. The cloud endpoint fans the
|
|
6
6
|
* notification out to registered device tokens for the bound user. Provider
|
|
7
7
|
* feature gates return 202 with `{ skipped: "flag_off" }` when no provider runs.
|
|
8
8
|
*
|
|
9
9
|
* Guardian-sensitive notifications and completion previews include the
|
|
10
|
-
* resolved guardian principal so the
|
|
10
|
+
* resolved guardian principal so the cloud can scope native fan-out.
|
|
11
11
|
* Explicitly owned background completions require that principal to match.
|
|
12
12
|
* Ordinary replies and scheduled results retain platform-owner delivery
|
|
13
13
|
* when the guardian lookup is unavailable.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import {
|
|
16
|
+
import { CadetCloudClient } from "../../cloud/client.js";
|
|
17
17
|
import { getLogger } from "../../util/logger.js";
|
|
18
18
|
import {
|
|
19
19
|
isRetryableNetworkError,
|
|
@@ -67,7 +67,7 @@ const ATTEMPT_TIMEOUT_MS = 5_000;
|
|
|
67
67
|
* The recovery is load-bearing rather than cosmetic. Copy composed entirely of
|
|
68
68
|
* media embeds, which the pass-through path copies into both the title and the
|
|
69
69
|
* body, flattens to nothing, and the pipeline's empty-copy guards all run
|
|
70
|
-
* upstream of this adapter. The
|
|
70
|
+
* upstream of this adapter. The cloud's serializer rejects a blank title,
|
|
71
71
|
* so an unrecovered field costs the whole notification, not just its wording.
|
|
72
72
|
*/
|
|
73
73
|
function flattenAlertField(value: string): string {
|
|
@@ -110,7 +110,7 @@ function acceptedPlatforms(body: unknown): RemotePushPlatform[] | undefined {
|
|
|
110
110
|
);
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
export class
|
|
113
|
+
export class CloudPushAdapter implements ChannelAdapter {
|
|
114
114
|
readonly channel: NotificationChannel = "platform";
|
|
115
115
|
|
|
116
116
|
async send(
|
|
@@ -121,7 +121,7 @@ export class PlatformPushAdapter implements ChannelAdapter {
|
|
|
121
121
|
if (isCompletionRecipientUnavailable(payload, destination)) {
|
|
122
122
|
return { success: false, error: "completion recipient unavailable" };
|
|
123
123
|
}
|
|
124
|
-
const client = await
|
|
124
|
+
const client = await CadetCloudClient.create();
|
|
125
125
|
if (!client) {
|
|
126
126
|
log.warn(
|
|
127
127
|
{ sourceEventName: payload.sourceEventName },
|
|
@@ -130,7 +130,7 @@ export class PlatformPushAdapter implements ChannelAdapter {
|
|
|
130
130
|
return { success: false, error: "platform client unavailable" };
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
if (!client.
|
|
133
|
+
if (!client.cloudAssistantId) {
|
|
134
134
|
log.warn(
|
|
135
135
|
{ sourceEventName: payload.sourceEventName },
|
|
136
136
|
"Platform assistant ID not configured — skipping push dispatch",
|
|
@@ -159,7 +159,7 @@ export class PlatformPushAdapter implements ChannelAdapter {
|
|
|
159
159
|
target_guardian_principal_id: targetGuardianPrincipalId,
|
|
160
160
|
};
|
|
161
161
|
|
|
162
|
-
const path = `/v1/assistants/${encodeURIComponent(client.
|
|
162
|
+
const path = `/v1/assistants/${encodeURIComponent(client.cloudAssistantId)}/push/dispatch/`;
|
|
163
163
|
const accumulatedPlatforms = new Set<RemotePushPlatform>();
|
|
164
164
|
let platformsReported = false;
|
|
165
165
|
const remotePushPlatforms = () =>
|