@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,8 +4,8 @@ import { getOllamaBaseUrlEnv } from "../../config/env.js";
|
|
|
4
4
|
import { resolveCallSiteConfig } from "../../config/llm-resolver.js";
|
|
5
5
|
import { isMemoryEnabled } from "../../config/memory-v3-gate.js";
|
|
6
6
|
import type { AssistantConfig } from "../../config/types.js";
|
|
7
|
-
import { PLATFORM_PROVIDER_META } from "../../providers/
|
|
8
|
-
import {
|
|
7
|
+
import { PLATFORM_PROVIDER_META } from "../../providers/cloud-proxy/constants.js";
|
|
8
|
+
import { resolveCloudProxyContext } from "../../providers/cloud-proxy/context.js";
|
|
9
9
|
import { getProviderKeyAsync } from "../../security/secure-keys.js";
|
|
10
10
|
import { getLogger } from "../../util/logger.js";
|
|
11
11
|
import {
|
|
@@ -522,19 +522,19 @@ function getCustomEmbeddingBackend(
|
|
|
522
522
|
}
|
|
523
523
|
|
|
524
524
|
/**
|
|
525
|
-
* Build (or reuse) the
|
|
526
|
-
* when the
|
|
525
|
+
* Build (or reuse) the cloud-proxy Gemini backend, or return undefined
|
|
526
|
+
* when the cloud proxy prerequisites (platform URL + assistant API key)
|
|
527
527
|
* are not satisfied.
|
|
528
528
|
*/
|
|
529
529
|
async function tryGetManagedGeminiBackend(
|
|
530
530
|
config: AssistantConfig,
|
|
531
531
|
): Promise<EmbeddingBackend | undefined> {
|
|
532
|
-
const proxyCtx = await
|
|
532
|
+
const proxyCtx = await resolveCloudProxyContext();
|
|
533
533
|
const meta = PLATFORM_PROVIDER_META["gemini"];
|
|
534
534
|
if (!proxyCtx.enabled || !meta?.managed || !meta.proxyPath) {
|
|
535
535
|
return undefined;
|
|
536
536
|
}
|
|
537
|
-
const
|
|
537
|
+
const cloudBaseUrl = `${proxyCtx.cloudBaseUrl}${meta.proxyPath}`;
|
|
538
538
|
return getCachedOrCreate(
|
|
539
539
|
"gemini",
|
|
540
540
|
config.memory.embeddings.geminiModel,
|
|
@@ -545,7 +545,7 @@ async function tryGetManagedGeminiBackend(
|
|
|
545
545
|
{
|
|
546
546
|
taskType: config.memory.embeddings.geminiTaskType,
|
|
547
547
|
dimensions: config.memory.embeddings.geminiDimensions ?? 3072,
|
|
548
|
-
|
|
548
|
+
cloudBaseUrl,
|
|
549
549
|
},
|
|
550
550
|
),
|
|
551
551
|
[...geminiCacheExtras(config), "managed"],
|
|
@@ -607,8 +607,8 @@ export async function selectEmbeddingBackend(
|
|
|
607
607
|
};
|
|
608
608
|
}
|
|
609
609
|
|
|
610
|
-
// When
|
|
611
|
-
// at the front of the auto chain so platform assistants use Cadet
|
|
610
|
+
// When cloud proxy prerequisites are satisfied, insert cloud-proxy Gemini
|
|
611
|
+
// at the front of the auto chain so platform assistants use Cadet Cloud
|
|
612
612
|
// Gemini embeddings.
|
|
613
613
|
if (requested === "auto" || requested === "gemini") {
|
|
614
614
|
const managed = await tryGetManagedGeminiBackend(config);
|
|
@@ -817,7 +817,7 @@ export async function isEmbeddingDimensionAvailable(
|
|
|
817
817
|
}
|
|
818
818
|
|
|
819
819
|
// Probe the exact backend chain `embedWithBackend` would try (primary +
|
|
820
|
-
// auto-mode fallbacks + the
|
|
820
|
+
// auto-mode fallbacks + the cloud→direct Gemini fallback) via the shared
|
|
821
821
|
// assembler, so this preflight can never be more pessimistic than the real
|
|
822
822
|
// embed path. Dense recall stays available if ANY backend in the chain
|
|
823
823
|
// produces the committed dimension. `resolveBackendDimension` memoizes per
|
|
@@ -898,7 +898,7 @@ export class EmbeddingBackendUnavailableError extends Error {
|
|
|
898
898
|
* Assemble the ordered backend chain {@link embedWithBackend} will try for a
|
|
899
899
|
* given primary selection: the primary, then (in `auto` mode, non-Gemini
|
|
900
900
|
* primary) the configured fallbacks, then a direct-key Gemini fallback when the
|
|
901
|
-
* primary is
|
|
901
|
+
* primary is cloud-proxy Gemini. This is the single source of truth for the
|
|
902
902
|
* fallback chain, shared with the dimension-availability preflight
|
|
903
903
|
* ({@link isEmbeddingDimensionAvailable}) so the preflight cannot diverge from
|
|
904
904
|
* what the real embed path attempts.
|
|
@@ -916,7 +916,7 @@ async function assembleEmbeddingBackends(
|
|
|
916
916
|
? await selectFallbackBackends(config, primary.provider)
|
|
917
917
|
: [];
|
|
918
918
|
|
|
919
|
-
// A
|
|
919
|
+
// A cloud-proxy Gemini primary can fail at the proxy (e.g. a stale or
|
|
920
920
|
// revoked cloud credential) while a valid direct Gemini key sits in the
|
|
921
921
|
// credential store. The provider chain above never includes Gemini when
|
|
922
922
|
// Gemini IS the primary, so without this the direct key would never be tried.
|
|
@@ -1133,7 +1133,7 @@ async function selectFallbackBackends(
|
|
|
1133
1133
|
if (geminiKey) {
|
|
1134
1134
|
backends.push(getDirectGeminiBackend(config, geminiKey));
|
|
1135
1135
|
} else {
|
|
1136
|
-
// Try
|
|
1136
|
+
// Try cloud proxy Gemini as fallback when no direct key exists.
|
|
1137
1137
|
const managed = await tryGetManagedGeminiBackend(config);
|
|
1138
1138
|
if (managed) {
|
|
1139
1139
|
backends.push(managed);
|
|
@@ -295,14 +295,13 @@ describe("GeminiEmbeddingBackend", () => {
|
|
|
295
295
|
});
|
|
296
296
|
});
|
|
297
297
|
|
|
298
|
-
describe("
|
|
299
|
-
test("routes through
|
|
298
|
+
describe("cloud proxy transport", () => {
|
|
299
|
+
test("routes through cloud proxy base URL when cloudBaseUrl is set", async () => {
|
|
300
300
|
const backend = new GeminiEmbeddingBackend(
|
|
301
301
|
"ast-managed-key",
|
|
302
302
|
"gemini-embedding-2",
|
|
303
303
|
{
|
|
304
|
-
|
|
305
|
-
"https://platform.example.com/v1/runtime-proxy/gemini",
|
|
304
|
+
cloudBaseUrl: "https://platform.example.com/v1/runtime-proxy/gemini",
|
|
306
305
|
},
|
|
307
306
|
);
|
|
308
307
|
await backend.embed(["hello"]);
|
|
@@ -335,8 +334,7 @@ describe("GeminiEmbeddingBackend", () => {
|
|
|
335
334
|
"ast-managed-key",
|
|
336
335
|
"gemini-embedding-2",
|
|
337
336
|
{
|
|
338
|
-
|
|
339
|
-
"https://platform.example.com/v1/runtime-proxy/gemini",
|
|
337
|
+
cloudBaseUrl: "https://platform.example.com/v1/runtime-proxy/gemini",
|
|
340
338
|
taskType: "RETRIEVAL_DOCUMENT",
|
|
341
339
|
dimensions: 3072,
|
|
342
340
|
},
|
|
@@ -358,7 +356,7 @@ describe("GeminiEmbeddingBackend", () => {
|
|
|
358
356
|
}
|
|
359
357
|
});
|
|
360
358
|
|
|
361
|
-
test("uses direct Google API URL when
|
|
359
|
+
test("uses direct Google API URL when cloudBaseUrl is not set", async () => {
|
|
362
360
|
const backend = new GeminiEmbeddingBackend("direct-key", "test-model");
|
|
363
361
|
await backend.embed(["hello"]);
|
|
364
362
|
|
|
@@ -370,13 +368,12 @@ describe("GeminiEmbeddingBackend", () => {
|
|
|
370
368
|
expect(headers["Authorization"]).toBeUndefined();
|
|
371
369
|
});
|
|
372
370
|
|
|
373
|
-
test("includes outputDimensionality with
|
|
371
|
+
test("includes outputDimensionality with cloud proxy", async () => {
|
|
374
372
|
const backend = new GeminiEmbeddingBackend(
|
|
375
373
|
"ast-managed-key",
|
|
376
374
|
"gemini-embedding-2",
|
|
377
375
|
{
|
|
378
|
-
|
|
379
|
-
"https://platform.example.com/v1/runtime-proxy/gemini",
|
|
376
|
+
cloudBaseUrl: "https://platform.example.com/v1/runtime-proxy/gemini",
|
|
380
377
|
dimensions: 3072,
|
|
381
378
|
},
|
|
382
379
|
);
|
|
@@ -475,11 +472,11 @@ describe("GeminiEmbeddingBackend: batched text inputs", () => {
|
|
|
475
472
|
expect(vectors.map((v) => v[0])).toEqual(texts(250).map(textIndex));
|
|
476
473
|
});
|
|
477
474
|
|
|
478
|
-
test("
|
|
475
|
+
test("cloud text inputs use single calls from the first request and preserve vector order", async () => {
|
|
479
476
|
const fetchMock = routedFetch();
|
|
480
477
|
globalThis.fetch = fetchMock as unknown as typeof fetch;
|
|
481
478
|
const backend = new GeminiEmbeddingBackend("test-key", "test-model", {
|
|
482
|
-
|
|
479
|
+
cloudBaseUrl: "https://proxy.example.com/v1/runtime-proxy/gemini",
|
|
483
480
|
interCallDelayMs: 0,
|
|
484
481
|
});
|
|
485
482
|
|
|
@@ -44,8 +44,8 @@ const BATCH_ROUTE_UNAVAILABLE_STATUSES = new Set([404, 405, 501]);
|
|
|
44
44
|
export interface GeminiEmbeddingOptions {
|
|
45
45
|
taskType?: EmbeddingTaskType;
|
|
46
46
|
dimensions?: number;
|
|
47
|
-
/** When set, routes requests through the
|
|
48
|
-
|
|
47
|
+
/** When set, routes requests through the cloud proxy at this base URL. */
|
|
48
|
+
cloudBaseUrl?: string;
|
|
49
49
|
/**
|
|
50
50
|
* Milliseconds to sleep between sequential embed calls to yield to the
|
|
51
51
|
* event loop. Defaults to 5000 in production; set to 0 in tests.
|
|
@@ -59,7 +59,7 @@ export class GeminiEmbeddingBackend implements EmbeddingBackend {
|
|
|
59
59
|
private readonly apiKey: string;
|
|
60
60
|
private readonly taskType?: EmbeddingTaskType;
|
|
61
61
|
private readonly dimensions?: number;
|
|
62
|
-
private readonly
|
|
62
|
+
private readonly cloudBaseUrl?: string;
|
|
63
63
|
private readonly interCallDelayMs: number;
|
|
64
64
|
/**
|
|
65
65
|
* Set once the batch route has answered that it does not exist, so later
|
|
@@ -72,13 +72,13 @@ export class GeminiEmbeddingBackend implements EmbeddingBackend {
|
|
|
72
72
|
this.model = model;
|
|
73
73
|
this.taskType = options?.taskType;
|
|
74
74
|
this.dimensions = options?.dimensions;
|
|
75
|
-
this.
|
|
75
|
+
this.cloudBaseUrl = options?.cloudBaseUrl;
|
|
76
76
|
this.interCallDelayMs = options?.interCallDelayMs ?? 100;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
/** True when requests route through the
|
|
79
|
+
/** True when requests route through the cloud cloud proxy. */
|
|
80
80
|
get managed(): boolean {
|
|
81
|
-
return Boolean(this.
|
|
81
|
+
return Boolean(this.cloudBaseUrl);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
/**
|
|
@@ -272,7 +272,7 @@ export class GeminiEmbeddingBackend implements EmbeddingBackend {
|
|
|
272
272
|
// as a protobuf oneof populated from the URL path (internally `_model`),
|
|
273
273
|
// so adding it to the body triggers a 400: "oneof field '_model' is
|
|
274
274
|
// already set. Cannot set 'model'". This holds for both the direct API
|
|
275
|
-
// and the
|
|
275
|
+
// and the cloud proxy, which forwards the body unchanged; the cloud
|
|
276
276
|
// billing layer parses the model from the URL path instead.
|
|
277
277
|
if (this.taskType) {
|
|
278
278
|
body.taskType = this.taskType;
|
|
@@ -305,11 +305,11 @@ export class GeminiEmbeddingBackend implements EmbeddingBackend {
|
|
|
305
305
|
return values;
|
|
306
306
|
}
|
|
307
307
|
|
|
308
|
-
/** The model's `:embedContent` or `:batchEmbedContents` URL, direct or via the
|
|
308
|
+
/** The model's `:embedContent` or `:batchEmbedContents` URL, direct or via the cloud proxy. */
|
|
309
309
|
private endpointUrl(method: "embedContent" | "batchEmbedContents"): string {
|
|
310
310
|
const model = encodeURIComponent(this.model);
|
|
311
|
-
return this.
|
|
312
|
-
? `${this.
|
|
311
|
+
return this.cloudBaseUrl
|
|
312
|
+
? `${this.cloudBaseUrl}/v1beta/models/${model}:${method}`
|
|
313
313
|
: `https://generativelanguage.googleapis.com/v1beta/models/${model}:${method}?key=${encodeURIComponent(this.apiKey)}`;
|
|
314
314
|
}
|
|
315
315
|
|
|
@@ -317,7 +317,7 @@ export class GeminiEmbeddingBackend implements EmbeddingBackend {
|
|
|
317
317
|
const headers: Record<string, string> = {
|
|
318
318
|
"Content-Type": "application/json",
|
|
319
319
|
};
|
|
320
|
-
if (this.
|
|
320
|
+
if (this.cloudBaseUrl) {
|
|
321
321
|
headers["Authorization"] = `Bearer ${this.apiKey}`;
|
|
322
322
|
}
|
|
323
323
|
return headers;
|
|
@@ -469,9 +469,9 @@ export class EmbeddingRuntimeManager {
|
|
|
469
469
|
throw new DOMException("Aborted", "AbortError");
|
|
470
470
|
}
|
|
471
471
|
|
|
472
|
-
log.info("npm packages downloaded, stripping non-
|
|
472
|
+
log.info("npm packages downloaded, stripping non-cloud binaries");
|
|
473
473
|
|
|
474
|
-
// Step 2: Strip non-
|
|
474
|
+
// Step 2: Strip non-cloud native binaries
|
|
475
475
|
const onnxBinDir = join(
|
|
476
476
|
nodeModules,
|
|
477
477
|
"onnxruntime-node",
|
|
@@ -381,7 +381,7 @@ function mergeSkillCardEntries(
|
|
|
381
381
|
}
|
|
382
382
|
|
|
383
383
|
/**
|
|
384
|
-
* One rewrite of a
|
|
384
|
+
* One rewrite of a cloud skill by a background pass, as the receipt job's
|
|
385
385
|
* payload carries it. `entryId` is the producing tool call's, so a replayed
|
|
386
386
|
* call merges as a no-op; the conversation ids are what the receipt links
|
|
387
387
|
* to and what a conversation delete purges by.
|
|
@@ -15,7 +15,7 @@ export interface LifecycleEvent {
|
|
|
15
15
|
* Optional typed attributes a lifecycle event carries alongside its name.
|
|
16
16
|
*
|
|
17
17
|
* Every one is nullable and optional on the wire, so a caller with nothing to
|
|
18
|
-
* say omits it and a
|
|
18
|
+
* say omits it and a cloud that predates the field ignores it. They exist
|
|
19
19
|
* so grouping dimensions (risk, access preset, surface) are columns rather
|
|
20
20
|
* than substrings of `event_name`, which the server caps at 64 chars.
|
|
21
21
|
*/
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
* Writes are best-effort: a ClickHouse outage logs and is swallowed so it
|
|
30
30
|
* can never abort a turn.
|
|
31
31
|
*/
|
|
32
|
+
import { resolveCloudAssistantIdOrNull } from "../config/cloud-identity.js";
|
|
32
33
|
import { getConfigReadOnly } from "../config/loader.js";
|
|
33
|
-
import { resolvePlatformAssistantIdOrNull } from "../config/platform-identity.js";
|
|
34
34
|
import type { LlmRequestLogsClickHouseConfig } from "../config/schemas/llm-request-logs.js";
|
|
35
35
|
import { credentialKey } from "../security/credential-key.js";
|
|
36
36
|
import { getSecureKeyAsync } from "../security/secure-keys.js";
|
|
@@ -99,7 +99,7 @@ export class ClickHouseLlmRequestLogSink implements LlmRequestLogWriter {
|
|
|
99
99
|
deps.resolvePassword ??
|
|
100
100
|
(() => readCredentialOrNull("clickhouse", "password"));
|
|
101
101
|
this.resolveAssistantId =
|
|
102
|
-
deps.resolveAssistantId ??
|
|
102
|
+
deps.resolveAssistantId ?? resolveCloudAssistantIdOrNull;
|
|
103
103
|
this.fetchImpl = deps.fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
104
104
|
}
|
|
105
105
|
|
|
@@ -258,7 +258,7 @@ export class ClickHouseLlmRequestLogSink implements LlmRequestLogWriter {
|
|
|
258
258
|
const val = await this.resolveAssistantId();
|
|
259
259
|
if (!val) {
|
|
260
260
|
throw new Error(
|
|
261
|
-
"
|
|
261
|
+
"Cadet Cloud assistant id is required when readSource=clickhouse",
|
|
262
262
|
);
|
|
263
263
|
}
|
|
264
264
|
this.cachedAssistantId = val;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* than the local source. Acceptable for the "internal use while we
|
|
16
16
|
* finetune prompts" use case; revisit when mirror updates are added.
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
18
|
+
import { resolveCloudAssistantIdOrNull } from "../config/cloud-identity.js";
|
|
19
19
|
import type { LlmRequestLogsClickHouseConfig } from "../config/schemas/llm-request-logs.js";
|
|
20
20
|
import { credentialKey } from "../security/credential-key.js";
|
|
21
21
|
import { getSecureKeyAsync } from "../security/secure-keys.js";
|
|
@@ -139,7 +139,7 @@ export class ClickHouseLlmRequestLogSource implements LlmRequestLogSource {
|
|
|
139
139
|
deps.resolvePassword ??
|
|
140
140
|
(() => readCredentialOrNull("clickhouse", "password"));
|
|
141
141
|
this.resolveAssistantId =
|
|
142
|
-
deps.resolveAssistantId ??
|
|
142
|
+
deps.resolveAssistantId ?? resolveCloudAssistantIdOrNull;
|
|
143
143
|
this.resolveTurnMessageIds =
|
|
144
144
|
deps.resolveTurnMessageIds ?? getAssistantMessageIdsInTurn;
|
|
145
145
|
this.resolveMessage = deps.resolveMessage ?? getMessageById;
|
|
@@ -500,7 +500,7 @@ export class ClickHouseLlmRequestLogSource implements LlmRequestLogSource {
|
|
|
500
500
|
const val = await this.resolveAssistantId();
|
|
501
501
|
if (!val) {
|
|
502
502
|
throw new Error(
|
|
503
|
-
"
|
|
503
|
+
"Cadet Cloud assistant id is required when readSource=clickhouse",
|
|
504
504
|
);
|
|
505
505
|
}
|
|
506
506
|
this.cachedAssistantId = val;
|
|
@@ -4,7 +4,7 @@ import { getSqliteFrom } from "../db-connection.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* Add the `managed_service_is_paid` column to `oauth_providers`.
|
|
6
6
|
*
|
|
7
|
-
* Flags whether a provider's
|
|
7
|
+
* Flags whether a provider's cloud OAuth variant requires a paid plan
|
|
8
8
|
* upstream (e.g. Twitter). Defaults to 0 (false) for all existing rows.
|
|
9
9
|
*
|
|
10
10
|
* Mirrors the pattern from migration 178. The raw.exec() call below is
|
|
@@ -96,7 +96,7 @@ describe("migration 296: rewrite balanced-economy profile pins", () => {
|
|
|
96
96
|
expect(pin(sqlite, "conversations", "c1")).toBe("balanced-economy");
|
|
97
97
|
});
|
|
98
98
|
|
|
99
|
-
test("rewrites pins when balanced-economy is the
|
|
99
|
+
test("rewrites pins when balanced-economy is the cloud profile in config", () => {
|
|
100
100
|
writeWorkspaceConfig({
|
|
101
101
|
llm: { profiles: { "balanced-economy": { source: "managed" } } },
|
|
102
102
|
});
|
|
@@ -13,14 +13,14 @@ const PIN_TABLES = ["conversations", "cron_jobs"] as const;
|
|
|
13
13
|
/**
|
|
14
14
|
* Rewrite persisted `balanced-economy` inference-profile pins to `balanced`.
|
|
15
15
|
*
|
|
16
|
-
* The
|
|
16
|
+
* The cloud `balanced-economy` profile folds into `balanced` (both resolve to
|
|
17
17
|
* MiniMax M3 on Fireworks). The workspace-config migration removes the profile
|
|
18
18
|
* definition, but a profile key can also be pinned outside config.json — on a
|
|
19
19
|
* conversation (`conversations.inference_profile`) or a schedule
|
|
20
20
|
* (`cron_jobs.inference_profile`). Left unrewritten those pins dangle, and
|
|
21
21
|
* `resolveCallSiteConfig` treats an unresolvable override as a silent
|
|
22
22
|
* fall-through to the active/default profile — dropping the user's intended
|
|
23
|
-
* MiniMax route. `balanced-economy` is a reserved
|
|
23
|
+
* MiniMax route. `balanced-economy` is a reserved cloud-profile key, so every
|
|
24
24
|
* persisted pin refers to the now-folded profile.
|
|
25
25
|
*
|
|
26
26
|
* Ownership guard: the companion workspace migration keeps a `balanced-economy`
|
|
@@ -96,7 +96,7 @@ describe("migration 306: rewrite frontier profile pins", () => {
|
|
|
96
96
|
expect(pin(sqlite, "conversations", "c1")).toBe("frontier");
|
|
97
97
|
});
|
|
98
98
|
|
|
99
|
-
test("rewrites pins when frontier is the
|
|
99
|
+
test("rewrites pins when frontier is the cloud profile in config", () => {
|
|
100
100
|
writeWorkspaceConfig({
|
|
101
101
|
llm: { profiles: { frontier: { source: "managed" } } },
|
|
102
102
|
});
|
|
@@ -13,7 +13,7 @@ const PIN_TABLES = ["conversations", "cron_jobs"] as const;
|
|
|
13
13
|
/**
|
|
14
14
|
* Rewrite persisted `frontier` inference-profile pins to `quality-optimized`.
|
|
15
15
|
*
|
|
16
|
-
* The
|
|
16
|
+
* The cloud `frontier` profile folds into `quality-optimized` (both resolve to
|
|
17
17
|
* Anthropic Opus on `anthropic-managed`). The workspace-config migration removes
|
|
18
18
|
* the profile definition, but a profile key can also be pinned outside
|
|
19
19
|
* config.json — on a conversation (`conversations.inference_profile`) or a
|
|
@@ -8,7 +8,7 @@ import { getSqliteFrom } from "../db-connection.js";
|
|
|
8
8
|
* script's stdout to an agent turn instead of only recording it on the run
|
|
9
9
|
* row. Defaults to 0 so every pre-existing script schedule keeps its
|
|
10
10
|
* no-LLM behaviour.
|
|
11
|
-
* - `skill_id` — the
|
|
11
|
+
* - `skill_id` — the cloud skill whose `scripts/` the command invokes. NULL
|
|
12
12
|
* (all pre-existing rows) means the schedule is not bound to a skill.
|
|
13
13
|
* - `skill_version_hash` — the skill's content hash at creation time,
|
|
14
14
|
* re-checked before each firing so a rewritten script cannot keep running
|
|
@@ -58,8 +58,8 @@ function readRow(
|
|
|
58
58
|
return row;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
describe("migration 361: normalize
|
|
62
|
-
test("rewrites a
|
|
61
|
+
describe("migration 361: normalize cloud connection rows", () => {
|
|
62
|
+
test("rewrites a cloud-auth row with a concrete provider to provider cadet", () => {
|
|
63
63
|
const { sqlite, db } = createTestDb();
|
|
64
64
|
insertRow(sqlite, "managed-openai", "openai", '{"type":"platform"}');
|
|
65
65
|
|
|
@@ -79,7 +79,7 @@ describe("migration 361: normalize managed connection rows", () => {
|
|
|
79
79
|
expect(readRow(sqlite, "cadet").provider).toBe("cadet");
|
|
80
80
|
});
|
|
81
81
|
|
|
82
|
-
test("rewrites a cadet-provider row with non-
|
|
82
|
+
test("rewrites a cadet-provider row with non-cloud auth to platform auth", () => {
|
|
83
83
|
const { sqlite, db } = createTestDb();
|
|
84
84
|
insertRow(
|
|
85
85
|
sqlite,
|
|
@@ -5,23 +5,23 @@ const PLATFORM_AUTH_JSON = JSON.stringify({ type: "platform" });
|
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Reconcile `provider_connections` rows so platform auth and provider
|
|
8
|
-
* "cadet" always pair. The two columns record the same fact (the
|
|
8
|
+
* "cadet" always pair. The two columns record the same fact (the cloud,
|
|
9
9
|
* platform-billed route); auth derivation sets them together and the
|
|
10
10
|
* connection routes reject writes that split them, but rows written before
|
|
11
11
|
* that guard can disagree. The provider column is the authoritative managed
|
|
12
|
-
* signal (`
|
|
12
|
+
* signal (`isCadetCloudConnection`), so mismatched rows must converge:
|
|
13
13
|
*
|
|
14
14
|
* - Platform auth with any other provider: the provider becomes "cadet".
|
|
15
|
-
* These rows dispatch through the
|
|
16
|
-
* on the
|
|
15
|
+
* These rows dispatch through the cloud proxy (transport selection keys
|
|
16
|
+
* on the cloud identity), so normalizing the provider preserves billing
|
|
17
17
|
* and transport behavior, while normalizing the auth instead would
|
|
18
|
-
* silently turn a
|
|
18
|
+
* silently turn a cloud-billed row into a keyless BYOK row. This also
|
|
19
19
|
* heals a stuck pre-consolidation canonical row (name "cadet", concrete
|
|
20
20
|
* provider, platform auth) that boot seeding skips because its provider
|
|
21
21
|
* differs from the sentinel.
|
|
22
22
|
* - Provider "cadet" with any other auth: the auth becomes
|
|
23
|
-
* `{"type":"platform"}`. A cadet row means the
|
|
24
|
-
* definition, and non-
|
|
23
|
+
* `{"type":"platform"}`. A cadet row means the cloud route by
|
|
24
|
+
* definition, and non-cloud auth on it never yields a usable adapter.
|
|
25
25
|
*
|
|
26
26
|
* Rows whose auth column is not valid JSON are left alone (the DB loaders
|
|
27
27
|
* already treat them as invalid). Idempotent: a reconciled row matches
|
|
@@ -45,8 +45,8 @@ const LEGACY = [
|
|
|
45
45
|
"together-managed",
|
|
46
46
|
];
|
|
47
47
|
|
|
48
|
-
describe("migration 319 — remove legacy *-
|
|
49
|
-
test("deletes all five legacy
|
|
48
|
+
describe("migration 319 — remove legacy *-cloud connections", () => {
|
|
49
|
+
test("deletes all five legacy cloud connections", () => {
|
|
50
50
|
const db = createTestDb();
|
|
51
51
|
migrateCreateProviderConnections(db); // seeds anthropic/openai/gemini-managed
|
|
52
52
|
for (const name of LEGACY) {
|
|
@@ -29,7 +29,7 @@ export const oauthProviders = sqliteTable("oauth_providers", {
|
|
|
29
29
|
pingBody: text("ping_body"),
|
|
30
30
|
revokeUrl: text("revoke_url"),
|
|
31
31
|
revokeBodyTemplate: text("revoke_body_template"),
|
|
32
|
-
|
|
32
|
+
cloudServiceConfigKey: text("managed_service_config_key"),
|
|
33
33
|
managedServiceIsPaid: integer("managed_service_is_paid", { mode: "boolean" })
|
|
34
34
|
.notNull()
|
|
35
35
|
.default(false),
|
package/src/plugin-api/index.ts
CHANGED
|
@@ -197,10 +197,10 @@ export type {
|
|
|
197
197
|
export { CredentialStoreError, storeCredential } from "./store-credential.js";
|
|
198
198
|
// Resolve the public URL a third party should deliver to for one of the
|
|
199
199
|
// plugin's own ingress routes. Which URL is correct depends on how the
|
|
200
|
-
// assistant is reachable (a
|
|
200
|
+
// assistant is reachable (a cloud platform callback route, or a configured
|
|
201
201
|
// public ingress), and `ingress.publicBaseUrl` alone does not decide it. Uses
|
|
202
202
|
// the same resolution as `webhooks register`, and registers the callback route
|
|
203
|
-
// on the
|
|
203
|
+
// on the cloud branches. The plugin defaults to the one in context.
|
|
204
204
|
export { resolveWebhookUrl, type WebhookUrlOptions } from "./webhook-url.js";
|
|
205
205
|
// Resolve the redirect URI an authorization server should send a user back
|
|
206
206
|
// to after consent. One shared route serves every OAuth flow in the
|
|
@@ -209,12 +209,12 @@ export { resolveWebhookUrl, type WebhookUrlOptions } from "./webhook-url.js";
|
|
|
209
209
|
// when it publishes something that has to name the redirect URI ahead of the
|
|
210
210
|
// flow, such as a Client ID Metadata Document, whose `redirect_uris` an
|
|
211
211
|
// authorization server matches exactly. Throws when no public ingress is
|
|
212
|
-
// configured and the assistant is not connected to the
|
|
212
|
+
// configured and the assistant is not connected to the cloud, which is the
|
|
213
213
|
// case where no URL would work.
|
|
214
214
|
export { resolveOauthCallbackUrl } from "../inbound/oauth-callback-url.js";
|
|
215
215
|
// Resolve a provider for a call site (optionally overriding the profile) so a
|
|
216
216
|
// plugin can run inference through the workspace's configured profiles and
|
|
217
|
-
// credentials —
|
|
217
|
+
// credentials — cloud-proxy or BYOK — without supplying its own API key.
|
|
218
218
|
// Pair with `getModelProfiles` to pick a profile. Returns `null` when no
|
|
219
219
|
// provider is configured. By default `overrideProfile` layers below any
|
|
220
220
|
// per-call-site config the workspace has pinned (e.g. a cheap `inference`
|
|
@@ -158,7 +158,7 @@ describe("getModelProfiles", () => {
|
|
|
158
158
|
);
|
|
159
159
|
});
|
|
160
160
|
|
|
161
|
-
test("default profile descriptions use the
|
|
161
|
+
test("default profile descriptions use the cloud column without a default provider", () => {
|
|
162
162
|
const result = listProfiles();
|
|
163
163
|
expect(result.find((p) => p.key === "quality-optimized")?.description).toBe(
|
|
164
164
|
"High-quality results with the most capable model",
|
|
@@ -7,7 +7,7 @@ import type { ModelProfileInfo } from "./types.js";
|
|
|
7
7
|
/**
|
|
8
8
|
* List the workspace inference profiles a plugin can route to, in the order a
|
|
9
9
|
* user-facing model picker presents them (`llm.profileOrder` first, then the
|
|
10
|
-
* rest alphabetically). Managed backup routes and the
|
|
10
|
+
* rest alphabetically). Managed backup routes and the cloud Jev profile
|
|
11
11
|
* are omitted with the rest of the conversation view: a plugin routes
|
|
12
12
|
* conversation turns, and a decision model cannot answer them.
|
|
13
13
|
* Metadata-only entries without a provider, model, or mix are not routing
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* receives partial and final transcript events back through the
|
|
8
8
|
* `start(onEvent)` callback, closing with `stop`. The consumer drives this
|
|
9
9
|
* three-method contract without knowing the concrete provider (Deepgram,
|
|
10
|
-
* Whisper, Gemini, xAI, or Cadet
|
|
10
|
+
* Whisper, Gemini, xAI, or Cadet Cloud speech), its wire protocol, or its
|
|
11
11
|
* credentials.
|
|
12
12
|
*/
|
|
13
13
|
|
|
@@ -243,7 +243,7 @@ describe("doesSupportVision with a BYO default provider", () => {
|
|
|
243
243
|
expect(doesSupportVision(profile("cost-optimized"))).toBe(false);
|
|
244
244
|
});
|
|
245
245
|
|
|
246
|
-
test("without a default provider, a default profile judges the
|
|
246
|
+
test("without a default provider, a default profile judges the cloud column", () => {
|
|
247
247
|
// Null-reduction: no default provider resolves cost-optimized through the
|
|
248
248
|
// cadet column (deepseek-v4p1-flash, vision-capable).
|
|
249
249
|
setMockConfig({});
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A plugin that receives third-party webhooks has to tell the vendor where to
|
|
5
5
|
* deliver. Which URL is correct depends on how the assistant is reachable:
|
|
6
|
-
* a
|
|
6
|
+
* a cloud pod and a cloud-connected assistant are served through a
|
|
7
7
|
* managed callback route, while a self-hosted deployment is served through its
|
|
8
8
|
* configured public ingress. `ingress.publicBaseUrl` alone does not decide it,
|
|
9
|
-
* because on a
|
|
9
|
+
* because on a cloud-connected assistant that value holds the Tunnel
|
|
10
10
|
* address, which is not where plugin routes are served.
|
|
11
11
|
*
|
|
12
12
|
* `resolveCallbackUrl` owns that decision for every caller in the codebase
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
|
|
17
17
|
import { createHash } from "node:crypto";
|
|
18
18
|
|
|
19
|
-
import {
|
|
19
|
+
import { getIsCloud } from "../config/env-registry.js";
|
|
20
20
|
import { getConfig } from "../config/loader.js";
|
|
21
|
-
import { resolveCallbackUrl } from "../inbound/
|
|
21
|
+
import { resolveCallbackUrl } from "../inbound/cloud-callback-registration.js";
|
|
22
22
|
import { getPublicBaseUrl } from "../inbound/public-ingress-urls.js";
|
|
23
23
|
import { getCurrentPluginName } from "../plugins/plugin-execution-context.js";
|
|
24
24
|
|
|
@@ -72,16 +72,16 @@ export interface WebhookUrlOptions {
|
|
|
72
72
|
* explicitly from a plugin route handler, where no context is established.
|
|
73
73
|
*/
|
|
74
74
|
plugin?: string;
|
|
75
|
-
/** Human-readable label for the
|
|
75
|
+
/** Human-readable label for the cloud's admin display. */
|
|
76
76
|
sourceIdentifier?: string;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
80
|
* Registration type for one route.
|
|
81
81
|
*
|
|
82
|
-
* The
|
|
82
|
+
* The cloud keys a callback route by type, so two routes of one plugin need
|
|
83
83
|
* two types or the second registration replaces the first. The slug keeps the
|
|
84
|
-
* type legible in the
|
|
84
|
+
* type legible in the cloud's admin display and the digest keeps it unique:
|
|
85
85
|
* `events-v1` and `events_v1` share a slug and differ here.
|
|
86
86
|
*/
|
|
87
87
|
function registrationType(plugin: string, route: string): string {
|
|
@@ -91,7 +91,7 @@ function registrationType(plugin: string, route: string): string {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
/**
|
|
94
|
-
* Keep a trailing slash on a
|
|
94
|
+
* Keep a trailing slash on a cloud callback URL.
|
|
95
95
|
*
|
|
96
96
|
* Django in front of managed callbacks canonicalizes onto `/`. A vendor given
|
|
97
97
|
* the slashless spelling is 301'd, and clients that follow a 301 on POST
|
|
@@ -99,7 +99,7 @@ function registrationType(plugin: string, route: string): string {
|
|
|
99
99
|
*
|
|
100
100
|
* Query-bearing URLs are left alone: this resolver passes no query
|
|
101
101
|
* parameters, and appending there would cut into the query rather than the
|
|
102
|
-
* path. The callback path registered with the
|
|
102
|
+
* path. The callback path registered with the cloud stays slashless. The
|
|
103
103
|
* platform strips slashes on store, and Django's path converter typically
|
|
104
104
|
* does not include the final `/` in the lookup key.
|
|
105
105
|
*/
|
|
@@ -113,12 +113,12 @@ function withTrailingSlash(url: string): string {
|
|
|
113
113
|
/**
|
|
114
114
|
* Resolve the public URL a third party should deliver to for `path`.
|
|
115
115
|
*
|
|
116
|
-
* On the
|
|
116
|
+
* On the cloud branches this registers a callback route with the cloud,
|
|
117
117
|
* which is idempotent and matches what `assistant webhooks register` does.
|
|
118
118
|
*
|
|
119
119
|
* @throws when the plugin cannot be determined, when `path` is not one the
|
|
120
120
|
* gateway would serve, or when no ingress is configured and the assistant is
|
|
121
|
-
* not connected to the
|
|
121
|
+
* not connected to the cloud. That last case has no URL that would work,
|
|
122
122
|
* and a plausible one would produce a vendor registration that silently
|
|
123
123
|
* receives nothing.
|
|
124
124
|
*/
|
|
@@ -160,7 +160,7 @@ export async function resolveWebhookUrl(
|
|
|
160
160
|
// so that is the spelling to hand out. On a pod the supplier URL is only
|
|
161
161
|
// returned once its path is claimed, so this condition holds exactly for
|
|
162
162
|
// tunnel URLs; every other branch keeps the trailing slash.
|
|
163
|
-
if (
|
|
163
|
+
if (getIsCloud() && resolved === ingressUrl) {
|
|
164
164
|
return resolved;
|
|
165
165
|
}
|
|
166
166
|
return withTrailingSlash(resolved);
|
|
@@ -21,7 +21,7 @@ import { afterAll, describe, expect, test } from "bun:test";
|
|
|
21
21
|
|
|
22
22
|
import { snapshotPluginSource } from "../source-fingerprint.js";
|
|
23
23
|
|
|
24
|
-
// Resolved: snapshots report realpaths, and the
|
|
24
|
+
// Resolved: snapshots report realpaths, and the cloud temp directory can
|
|
25
25
|
// itself sit behind a link, so an unresolved fixture root would make every
|
|
26
26
|
// fixture path an alias of itself.
|
|
27
27
|
const root = realpathSync(mkdtempSync(join(tmpdir(), "source-fingerprint-")));
|