@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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
2
2
|
|
|
3
|
+
import { setOverridesForTesting } from "../__tests__/feature-flag-test-helpers.js";
|
|
3
4
|
import {
|
|
4
5
|
BadRequestError,
|
|
5
6
|
ForbiddenError,
|
|
@@ -17,7 +18,6 @@ let syncRejects: boolean;
|
|
|
17
18
|
let disconnectedProviders: string[];
|
|
18
19
|
let credentialIdCounter: number;
|
|
19
20
|
let scrubbedValues: string[];
|
|
20
|
-
let scrubRejects: boolean;
|
|
21
21
|
let liveRecordsUnreachable: boolean;
|
|
22
22
|
|
|
23
23
|
function metaKey(service: string, field: string): string {
|
|
@@ -37,11 +37,6 @@ mock.module("../runtime/auth/route-policy.js", () => ({
|
|
|
37
37
|
ACTOR_PRINCIPALS: [],
|
|
38
38
|
}));
|
|
39
39
|
|
|
40
|
-
let chatCredentialRevealFlag = false;
|
|
41
|
-
mock.module("../config/assistant-feature-flags.js", () => ({
|
|
42
|
-
isAssistantFeatureFlagEnabled: (key: string) =>
|
|
43
|
-
key === "chat-credential-reveal" && chatCredentialRevealFlag,
|
|
44
|
-
}));
|
|
45
40
|
mock.module("../config/loader.js", () => ({
|
|
46
41
|
getConfig: () => ({}),
|
|
47
42
|
}));
|
|
@@ -117,16 +112,13 @@ mock.module("../oauth/oauth-store.js", () => ({
|
|
|
117
112
|
}),
|
|
118
113
|
}));
|
|
119
114
|
|
|
120
|
-
mock.module("../credential-execution/
|
|
121
|
-
|
|
115
|
+
mock.module("../credential-execution/cloud-catalog.js", () => ({
|
|
116
|
+
fetchCloudCatalog: mock(async () => ({ ok: true, descriptors: [] })),
|
|
122
117
|
}));
|
|
123
118
|
|
|
124
119
|
mock.module("../daemon/credential-transcript-scrub.js", () => ({
|
|
125
120
|
scrubStoredCredentialFromTranscripts: mock(async (value: string) => {
|
|
126
121
|
scrubbedValues.push(value);
|
|
127
|
-
if (scrubRejects) {
|
|
128
|
-
throw new Error("transcript sweep failed");
|
|
129
|
-
}
|
|
130
122
|
return { dbMessagesScrubbed: 0, residentMessagesScrubbed: 0 };
|
|
131
123
|
}),
|
|
132
124
|
}));
|
|
@@ -179,7 +171,7 @@ type ListResponse = {
|
|
|
179
171
|
scrubbedValue: string;
|
|
180
172
|
hasSecret: boolean;
|
|
181
173
|
}>;
|
|
182
|
-
|
|
174
|
+
cloudCredentials: unknown[];
|
|
183
175
|
};
|
|
184
176
|
type DeleteResponse = {
|
|
185
177
|
service: string;
|
|
@@ -199,11 +191,10 @@ describe("credentials routes", () => {
|
|
|
199
191
|
disconnectedProviders = [];
|
|
200
192
|
credentialIdCounter = 0;
|
|
201
193
|
scrubbedValues = [];
|
|
202
|
-
scrubRejects = false;
|
|
203
194
|
liveRecordsUnreachable = false;
|
|
204
195
|
_resetRevealSuccessRegistryForTest();
|
|
205
196
|
resetForChatMintRegistryForTest();
|
|
206
|
-
|
|
197
|
+
setOverridesForTesting({ "chat-credential-reveal": false });
|
|
207
198
|
});
|
|
208
199
|
|
|
209
200
|
describe("credentials_reveal", () => {
|
|
@@ -341,7 +332,7 @@ describe("credentials routes", () => {
|
|
|
341
332
|
});
|
|
342
333
|
|
|
343
334
|
test("a direct local forChat reveal returns the sentinel, records the mint, and no plaintext proof", async () => {
|
|
344
|
-
|
|
335
|
+
setOverridesForTesting({ "chat-credential-reveal": true });
|
|
345
336
|
secureStore.set(seedKey("vercel", "api_token"), SECRET_VALUE);
|
|
346
337
|
openRevealProofWindow();
|
|
347
338
|
const watermark = currentRevealSuccessWatermark();
|
|
@@ -376,7 +367,7 @@ describe("credentials routes", () => {
|
|
|
376
367
|
});
|
|
377
368
|
|
|
378
369
|
test("a gateway-proxied forChat reveal returns the sentinel but records no mint", async () => {
|
|
379
|
-
|
|
370
|
+
setOverridesForTesting({ "chat-credential-reveal": true });
|
|
380
371
|
secureStore.set(seedKey("vercel", "api_token"), SECRET_VALUE);
|
|
381
372
|
|
|
382
373
|
const result = (await revealRoute!.handler({
|
|
@@ -400,7 +391,7 @@ describe("credentials routes", () => {
|
|
|
400
391
|
// Direct terminal use (outside any conversation's tool shell) has no
|
|
401
392
|
// nonce to forward. The reveal works, but neither registry records —
|
|
402
393
|
// there is no conversation whose transcript could spend the record.
|
|
403
|
-
|
|
394
|
+
setOverridesForTesting({ "chat-credential-reveal": true });
|
|
404
395
|
secureStore.set(seedKey("vercel", "api_token"), SECRET_VALUE);
|
|
405
396
|
openRevealProofWindow();
|
|
406
397
|
const watermark = currentRevealSuccessWatermark();
|
|
@@ -421,7 +412,7 @@ describe("credentials routes", () => {
|
|
|
421
412
|
});
|
|
422
413
|
|
|
423
414
|
test("a forChat reveal with no principal header records no mint (fails closed)", async () => {
|
|
424
|
-
|
|
415
|
+
setOverridesForTesting({ "chat-credential-reveal": true });
|
|
425
416
|
secureStore.set(seedKey("vercel", "api_token"), SECRET_VALUE);
|
|
426
417
|
|
|
427
418
|
const result = (await revealRoute!.handler({
|
|
@@ -622,57 +613,6 @@ describe("credentials routes", () => {
|
|
|
622
613
|
expect(scrubbedValues).toEqual([SECRET_VALUE]);
|
|
623
614
|
});
|
|
624
615
|
|
|
625
|
-
test("non-secret cadet cloud fields are stored but never scrubbed", async () => {
|
|
626
|
-
/**
|
|
627
|
-
* Platform identity ids are benign UUIDs that legitimately appear in
|
|
628
|
-
* transcripts; scrubbing them would redact ordinary conversation
|
|
629
|
-
* content. Shares the exemption with the /v1/secrets credential branch
|
|
630
|
-
* via isNonSecretPlatformField.
|
|
631
|
-
*
|
|
632
|
-
* `platform_base_url` carries the same exemption but is not settable
|
|
633
|
-
* here: it decides which host receives the platform API key, so the
|
|
634
|
-
* credentials API refuses it (see the platform-managed suite).
|
|
635
|
-
*/
|
|
636
|
-
for (const field of [
|
|
637
|
-
"platform_assistant_id",
|
|
638
|
-
"platform_organization_id",
|
|
639
|
-
"platform_user_id",
|
|
640
|
-
]) {
|
|
641
|
-
const result = (await setRoute!.handler({
|
|
642
|
-
body: {
|
|
643
|
-
service: "cadet",
|
|
644
|
-
field,
|
|
645
|
-
value: "0198f4c2-1111-2222-3333-444455556666",
|
|
646
|
-
},
|
|
647
|
-
})) as SetResponse;
|
|
648
|
-
expect(result.service).toBe("cadet");
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
expect(scrubbedValues).toEqual([]);
|
|
652
|
-
});
|
|
653
|
-
|
|
654
|
-
test("the set still succeeds when the transcript scrub rejects", async () => {
|
|
655
|
-
/**
|
|
656
|
-
* The scrub is post-store hygiene: the credential IS stored, so a
|
|
657
|
-
* scrub failure is logged and must stay invisible to the caller.
|
|
658
|
-
*/
|
|
659
|
-
// GIVEN a scrub that rejects
|
|
660
|
-
scrubRejects = true;
|
|
661
|
-
|
|
662
|
-
// WHEN a credential is stored
|
|
663
|
-
const result = (await setRoute!.handler({
|
|
664
|
-
body: { service: "vercel", field: "api_token", value: SECRET_VALUE },
|
|
665
|
-
})) as SetResponse;
|
|
666
|
-
|
|
667
|
-
// THEN the route still returns success and the secret is persisted
|
|
668
|
-
expect(result.service).toBe("vercel");
|
|
669
|
-
expect(result.credentialId).toBe("cred-1");
|
|
670
|
-
expect(secureStore.get(seedKey("vercel", "api_token"))).toBe(
|
|
671
|
-
SECRET_VALUE,
|
|
672
|
-
);
|
|
673
|
-
expect(scrubbedValues).toEqual([SECRET_VALUE]);
|
|
674
|
-
});
|
|
675
|
-
|
|
676
616
|
test("leaves a non-ACP service unaffected by the OAuth-field guard", async () => {
|
|
677
617
|
/**
|
|
678
618
|
* The guard is scoped to the ACP service; the same field name on another
|
|
@@ -858,16 +798,15 @@ describe("credentials routes", () => {
|
|
|
858
798
|
});
|
|
859
799
|
});
|
|
860
800
|
|
|
861
|
-
describe("
|
|
801
|
+
describe("cloud credentials", () => {
|
|
862
802
|
const PLATFORM_KEY = "vk-platform-provisioned-key";
|
|
863
|
-
const PLATFORM_BASE_URL = "https://platform.example";
|
|
864
803
|
|
|
865
804
|
/**
|
|
866
|
-
* The
|
|
805
|
+
* The cloud provisions the pod's own credentials by POSTing them to
|
|
867
806
|
* `/v1/secrets` as `credential` entries, which land in the same secure
|
|
868
807
|
* store and metadata table as a user's own credentials.
|
|
869
808
|
*/
|
|
870
|
-
function
|
|
809
|
+
function seedCloudCredential(field: string, value: string): string {
|
|
871
810
|
// The secure store speaks the REAL credentialKey format; the metadata
|
|
872
811
|
// mock keeps its own service:field addressing.
|
|
873
812
|
secureStore.set(seedKey("cadet", field), value);
|
|
@@ -886,9 +825,8 @@ describe("credentials routes", () => {
|
|
|
886
825
|
}
|
|
887
826
|
|
|
888
827
|
test("the listing omits cloud credentials and keeps the user's own", async () => {
|
|
889
|
-
// GIVEN the
|
|
890
|
-
|
|
891
|
-
seedPlatformCredential("platform_base_url", PLATFORM_BASE_URL);
|
|
828
|
+
// GIVEN the cloud's provisioned credentials alongside a user's
|
|
829
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
892
830
|
await setRoute!.handler({
|
|
893
831
|
body: { service: "vercel", field: "api_token", value: SECRET_VALUE },
|
|
894
832
|
});
|
|
@@ -903,12 +841,12 @@ describe("credentials routes", () => {
|
|
|
903
841
|
expect(JSON.stringify(result)).not.toContain(PLATFORM_KEY);
|
|
904
842
|
});
|
|
905
843
|
|
|
906
|
-
test("reveal refuses the
|
|
844
|
+
test("reveal refuses the cloud API key for every principal", async () => {
|
|
907
845
|
/**
|
|
908
846
|
* Both farming paths land on this handler: the assistant's own tool
|
|
909
847
|
* shell arrives as `local`, a Settings click as `user`.
|
|
910
848
|
*/
|
|
911
|
-
|
|
849
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
912
850
|
|
|
913
851
|
for (const principal of ["local", "user", "svc_gateway"]) {
|
|
914
852
|
await expect(
|
|
@@ -921,7 +859,7 @@ describe("credentials routes", () => {
|
|
|
921
859
|
});
|
|
922
860
|
|
|
923
861
|
test("reveal refuses a cloud credential looked up by UUID", async () => {
|
|
924
|
-
const credentialId =
|
|
862
|
+
const credentialId = seedCloudCredential(
|
|
925
863
|
"assistant_api_key",
|
|
926
864
|
PLATFORM_KEY,
|
|
927
865
|
);
|
|
@@ -935,75 +873,67 @@ describe("credentials routes", () => {
|
|
|
935
873
|
});
|
|
936
874
|
|
|
937
875
|
test("inspect refuses cloud credentials", async () => {
|
|
938
|
-
|
|
939
|
-
seedPlatformCredential("platform_base_url", PLATFORM_BASE_URL);
|
|
876
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
940
877
|
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
).rejects.toThrow(ForbiddenError);
|
|
947
|
-
}
|
|
878
|
+
await expect(
|
|
879
|
+
inspectRoute!.handler({
|
|
880
|
+
body: { service: "cadet", field: "assistant_api_key" },
|
|
881
|
+
}),
|
|
882
|
+
).rejects.toThrow(ForbiddenError);
|
|
948
883
|
});
|
|
949
884
|
|
|
950
885
|
test("set refuses cloud credentials", async () => {
|
|
951
886
|
/**
|
|
952
|
-
*
|
|
953
|
-
*
|
|
954
|
-
* writer chose. The
|
|
887
|
+
* The cloud key is owned by the cloud's own provisioning; a
|
|
888
|
+
* hand-set key would spend Cadet's inference budget on a caller the
|
|
889
|
+
* writer chose. The cloud's own provisioning does not come through
|
|
955
890
|
* this route; it writes over `POST /v1/secrets`.
|
|
956
891
|
*/
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
892
|
+
await expect(
|
|
893
|
+
setRoute!.handler({
|
|
894
|
+
body: {
|
|
895
|
+
service: "cadet",
|
|
896
|
+
field: "assistant_api_key",
|
|
897
|
+
value: "attacker-key",
|
|
898
|
+
},
|
|
899
|
+
}),
|
|
900
|
+
).rejects.toThrow(ForbiddenError);
|
|
964
901
|
|
|
965
902
|
expect(secureStore.has(seedKey("cadet", "assistant_api_key"))).toBe(
|
|
966
903
|
false,
|
|
967
904
|
);
|
|
968
|
-
expect(secureStore.has(seedKey("cadet", "platform_base_url"))).toBe(
|
|
969
|
-
false,
|
|
970
|
-
);
|
|
971
905
|
});
|
|
972
906
|
|
|
973
907
|
test("set does not overwrite an already-provisioned cloud credential", async () => {
|
|
974
|
-
|
|
908
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
975
909
|
|
|
976
910
|
await expect(
|
|
977
911
|
setRoute!.handler({
|
|
978
912
|
body: {
|
|
979
913
|
service: "cadet",
|
|
980
|
-
field: "
|
|
981
|
-
value: "
|
|
914
|
+
field: "assistant_api_key",
|
|
915
|
+
value: "attacker-key",
|
|
982
916
|
},
|
|
983
917
|
}),
|
|
984
918
|
).rejects.toThrow(/owned by Cadet Cloud/);
|
|
985
919
|
|
|
986
|
-
expect(secureStore.get(seedKey("cadet", "
|
|
987
|
-
|
|
920
|
+
expect(secureStore.get(seedKey("cadet", "assistant_api_key"))).toBe(
|
|
921
|
+
PLATFORM_KEY,
|
|
988
922
|
);
|
|
989
923
|
});
|
|
990
924
|
|
|
991
925
|
test("delete refuses cloud credentials", async () => {
|
|
992
|
-
|
|
993
|
-
seedPlatformCredential("platform_base_url", PLATFORM_BASE_URL);
|
|
926
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
994
927
|
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
)
|
|
999
|
-
|
|
928
|
+
await expect(
|
|
929
|
+
deleteRoute!.handler({
|
|
930
|
+
body: { service: "cadet", field: "assistant_api_key" },
|
|
931
|
+
}),
|
|
932
|
+
).rejects.toThrow(ForbiddenError);
|
|
1000
933
|
|
|
1001
934
|
expect(secureStore.get(seedKey("cadet", "assistant_api_key"))).toBe(
|
|
1002
935
|
PLATFORM_KEY,
|
|
1003
936
|
);
|
|
1004
|
-
expect(secureStore.get(seedKey("cadet", "platform_base_url"))).toBe(
|
|
1005
|
-
PLATFORM_BASE_URL,
|
|
1006
|
-
);
|
|
1007
937
|
});
|
|
1008
938
|
|
|
1009
939
|
test("a user credential is still writable and deletable", async () => {
|
|
@@ -1023,7 +953,7 @@ describe("credentials routes", () => {
|
|
|
1023
953
|
});
|
|
1024
954
|
|
|
1025
955
|
test("a user credential still inspects and reveals", async () => {
|
|
1026
|
-
|
|
956
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
1027
957
|
await setRoute!.handler({
|
|
1028
958
|
body: { service: "vercel", field: "api_token", value: SECRET_VALUE },
|
|
1029
959
|
});
|
|
@@ -1041,16 +971,15 @@ describe("credentials routes", () => {
|
|
|
1041
971
|
});
|
|
1042
972
|
});
|
|
1043
973
|
|
|
1044
|
-
describe("
|
|
974
|
+
describe("cloud credentials", () => {
|
|
1045
975
|
const PLATFORM_KEY = "vk-platform-provisioned-key";
|
|
1046
|
-
const PLATFORM_BASE_URL = "https://platform.example";
|
|
1047
976
|
|
|
1048
977
|
/**
|
|
1049
|
-
* The
|
|
978
|
+
* The cloud provisions the pod's own credentials by POSTing them to
|
|
1050
979
|
* `/v1/secrets` as `credential` entries, which land in the same secure
|
|
1051
980
|
* store and metadata table as a user's own credentials.
|
|
1052
981
|
*/
|
|
1053
|
-
function
|
|
982
|
+
function seedCloudCredential(field: string, value: string): string {
|
|
1054
983
|
// The secure store speaks the REAL credentialKey format; the metadata
|
|
1055
984
|
// mock keeps its own service:field addressing.
|
|
1056
985
|
secureStore.set(seedKey("cadet", field), value);
|
|
@@ -1069,9 +998,8 @@ describe("credentials routes", () => {
|
|
|
1069
998
|
}
|
|
1070
999
|
|
|
1071
1000
|
test("the listing omits cloud credentials and keeps the user's own", async () => {
|
|
1072
|
-
// GIVEN the
|
|
1073
|
-
|
|
1074
|
-
seedPlatformCredential("platform_base_url", PLATFORM_BASE_URL);
|
|
1001
|
+
// GIVEN the cloud's provisioned credentials alongside a user's
|
|
1002
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
1075
1003
|
await setRoute!.handler({
|
|
1076
1004
|
body: { service: "vercel", field: "api_token", value: SECRET_VALUE },
|
|
1077
1005
|
});
|
|
@@ -1086,12 +1014,12 @@ describe("credentials routes", () => {
|
|
|
1086
1014
|
expect(JSON.stringify(result)).not.toContain(PLATFORM_KEY);
|
|
1087
1015
|
});
|
|
1088
1016
|
|
|
1089
|
-
test("reveal refuses the
|
|
1017
|
+
test("reveal refuses the cloud API key for every principal", async () => {
|
|
1090
1018
|
/**
|
|
1091
1019
|
* Both farming paths land on this handler: the assistant's own tool
|
|
1092
1020
|
* shell arrives as `local`, a Settings click as `user`.
|
|
1093
1021
|
*/
|
|
1094
|
-
|
|
1022
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
1095
1023
|
|
|
1096
1024
|
for (const principal of ["local", "user", "svc_gateway"]) {
|
|
1097
1025
|
await expect(
|
|
@@ -1104,7 +1032,7 @@ describe("credentials routes", () => {
|
|
|
1104
1032
|
});
|
|
1105
1033
|
|
|
1106
1034
|
test("reveal refuses a cloud credential looked up by UUID", async () => {
|
|
1107
|
-
const credentialId =
|
|
1035
|
+
const credentialId = seedCloudCredential(
|
|
1108
1036
|
"assistant_api_key",
|
|
1109
1037
|
PLATFORM_KEY,
|
|
1110
1038
|
);
|
|
@@ -1118,75 +1046,67 @@ describe("credentials routes", () => {
|
|
|
1118
1046
|
});
|
|
1119
1047
|
|
|
1120
1048
|
test("inspect refuses cloud credentials", async () => {
|
|
1121
|
-
|
|
1122
|
-
seedPlatformCredential("platform_base_url", PLATFORM_BASE_URL);
|
|
1049
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
1123
1050
|
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
).rejects.toThrow(ForbiddenError);
|
|
1130
|
-
}
|
|
1051
|
+
await expect(
|
|
1052
|
+
inspectRoute!.handler({
|
|
1053
|
+
body: { service: "cadet", field: "assistant_api_key" },
|
|
1054
|
+
}),
|
|
1055
|
+
).rejects.toThrow(ForbiddenError);
|
|
1131
1056
|
});
|
|
1132
1057
|
|
|
1133
1058
|
test("set refuses cloud credentials", async () => {
|
|
1134
1059
|
/**
|
|
1135
|
-
*
|
|
1136
|
-
*
|
|
1137
|
-
* writer chose. The
|
|
1060
|
+
* The cloud key is owned by the cloud's own provisioning; a
|
|
1061
|
+
* hand-set key would spend Cadet's inference budget on a caller the
|
|
1062
|
+
* writer chose. The cloud's own provisioning does not come through
|
|
1138
1063
|
* this route; it writes over `POST /v1/secrets`.
|
|
1139
1064
|
*/
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1065
|
+
await expect(
|
|
1066
|
+
setRoute!.handler({
|
|
1067
|
+
body: {
|
|
1068
|
+
service: "cadet",
|
|
1069
|
+
field: "assistant_api_key",
|
|
1070
|
+
value: "attacker-key",
|
|
1071
|
+
},
|
|
1072
|
+
}),
|
|
1073
|
+
).rejects.toThrow(ForbiddenError);
|
|
1147
1074
|
|
|
1148
1075
|
expect(secureStore.has(seedKey("cadet", "assistant_api_key"))).toBe(
|
|
1149
1076
|
false,
|
|
1150
1077
|
);
|
|
1151
|
-
expect(secureStore.has(seedKey("cadet", "platform_base_url"))).toBe(
|
|
1152
|
-
false,
|
|
1153
|
-
);
|
|
1154
1078
|
});
|
|
1155
1079
|
|
|
1156
1080
|
test("set does not overwrite an already-provisioned cloud credential", async () => {
|
|
1157
|
-
|
|
1081
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
1158
1082
|
|
|
1159
1083
|
await expect(
|
|
1160
1084
|
setRoute!.handler({
|
|
1161
1085
|
body: {
|
|
1162
1086
|
service: "cadet",
|
|
1163
|
-
field: "
|
|
1164
|
-
value: "
|
|
1087
|
+
field: "assistant_api_key",
|
|
1088
|
+
value: "attacker-key",
|
|
1165
1089
|
},
|
|
1166
1090
|
}),
|
|
1167
1091
|
).rejects.toThrow(/owned by Cadet Cloud/);
|
|
1168
1092
|
|
|
1169
|
-
expect(secureStore.get(seedKey("cadet", "
|
|
1170
|
-
|
|
1093
|
+
expect(secureStore.get(seedKey("cadet", "assistant_api_key"))).toBe(
|
|
1094
|
+
PLATFORM_KEY,
|
|
1171
1095
|
);
|
|
1172
1096
|
});
|
|
1173
1097
|
|
|
1174
1098
|
test("delete refuses cloud credentials", async () => {
|
|
1175
|
-
|
|
1176
|
-
seedPlatformCredential("platform_base_url", PLATFORM_BASE_URL);
|
|
1099
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
1177
1100
|
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
)
|
|
1182
|
-
|
|
1101
|
+
await expect(
|
|
1102
|
+
deleteRoute!.handler({
|
|
1103
|
+
body: { service: "cadet", field: "assistant_api_key" },
|
|
1104
|
+
}),
|
|
1105
|
+
).rejects.toThrow(ForbiddenError);
|
|
1183
1106
|
|
|
1184
1107
|
expect(secureStore.get(seedKey("cadet", "assistant_api_key"))).toBe(
|
|
1185
1108
|
PLATFORM_KEY,
|
|
1186
1109
|
);
|
|
1187
|
-
expect(secureStore.get(seedKey("cadet", "platform_base_url"))).toBe(
|
|
1188
|
-
PLATFORM_BASE_URL,
|
|
1189
|
-
);
|
|
1190
1110
|
});
|
|
1191
1111
|
|
|
1192
1112
|
test("a user credential is still writable and deletable", async () => {
|
|
@@ -1206,7 +1126,7 @@ describe("credentials routes", () => {
|
|
|
1206
1126
|
});
|
|
1207
1127
|
|
|
1208
1128
|
test("a user credential still inspects and reveals", async () => {
|
|
1209
|
-
|
|
1129
|
+
seedCloudCredential("assistant_api_key", PLATFORM_KEY);
|
|
1210
1130
|
await setRoute!.handler({
|
|
1211
1131
|
body: { service: "vercel", field: "api_token", value: SECRET_VALUE },
|
|
1212
1132
|
});
|
|
@@ -179,8 +179,8 @@ describe("Invariant 2: no generic plaintext secret read API", () => {
|
|
|
179
179
|
"runtime/routes/inference-provider-connection-routes.ts", // connection delete removes its dedicated per-connection key slot (deleteSecureKeyAsync only; no reads)
|
|
180
180
|
"daemon/handlers/config-slack-channel.ts", // Slack channel config credential management
|
|
181
181
|
"daemon/handlers/config-discord-channel.ts", // Discord channel bot token management
|
|
182
|
-
"providers/
|
|
183
|
-
"
|
|
182
|
+
"providers/cloud-proxy/context.ts", // cloud proxy API key lookup for provider initialization
|
|
183
|
+
"cloud/client.ts", // cloud client credential store fallback for standalone CLI auth
|
|
184
184
|
"mcp/mcp-header-store.ts", // MCP static auth header persistence (credential store CRUD + legacy migration)
|
|
185
185
|
"mcp/mcp-oauth-provider.ts", // MCP OAuth token/client/discovery persistence
|
|
186
186
|
"messaging/providers/slack/auth.ts", // canonical Slack auth resolver (bot/user token lookup for adapter + routes)
|
|
@@ -211,8 +211,8 @@ describe("Invariant 2: no generic plaintext secret read API", () => {
|
|
|
211
211
|
"persistence/llm-request-log-source-clickhouse.ts", // ClickHouse read source — lazy lookup of clickhouse:url + clickhouse:password + cadet:platform_assistant_id for self-scoped mirror reads
|
|
212
212
|
"persistence/llm-request-log-sink-clickhouse.ts", // ClickHouse write sink — lazy lookup of clickhouse:url + clickhouse:password + cadet:platform_assistant_id for self-scoped log writes
|
|
213
213
|
"persistence/compaction-log-store-clickhouse.ts", // ClickHouse compaction log writer — lazy lookup of clickhouse:url + clickhouse:password + cadet:platform_assistant_id for self-scoped event writes
|
|
214
|
-
"config/
|
|
215
|
-
"config/
|
|
214
|
+
"config/cloud-identity.ts", // assistant API key lookup for platform identity validate
|
|
215
|
+
"config/cloud-rehydration.ts", // startup rehydration of platform base URL from the credential store and ids from platform validate
|
|
216
216
|
"workspace/migrations/006-services-config.ts", // services config migration reads provider API keys
|
|
217
217
|
"workspace/migrations/018-rekey-compound-credential-keys.ts", // re-key compound credential storage keys
|
|
218
218
|
"daemon/conversation-process.ts", // masked provider key display
|
|
@@ -223,14 +223,13 @@ describe("Invariant 2: no generic plaintext secret read API", () => {
|
|
|
223
223
|
"runtime/routes/credential-prompt-routes.ts", // Route for secure credential prompt (stores secret via setSecureKeyAsync)
|
|
224
224
|
"runtime/routes/credential-routes.ts", // CLI credential management routes (CLI-migrated to IPC)
|
|
225
225
|
"runtime/routes/sanity-routes.ts", // Sanity connect/discover routes (reads stored api_token from credential store)
|
|
226
|
-
"runtime/routes/
|
|
226
|
+
"runtime/routes/cloud-routes.ts", // CLI platform connect/disconnect/status routes (CLI-migrated to IPC)
|
|
227
227
|
"runtime/routes/roadmap-routes.ts", // signs public-roadmap calls with the assistant API key (outbound Authorization header only; the value never reaches a response, a log, or the CLI process)
|
|
228
|
-
"inbound/
|
|
228
|
+
"inbound/cloud-callback-registration.ts", // managed API key lookup for callback registration
|
|
229
229
|
"tts/providers/elevenlabs-provider.ts", // ElevenLabs TTS API key lookup
|
|
230
230
|
"tts/providers/deepgram-provider.ts", // Deepgram TTS API key lookup
|
|
231
231
|
"tts/providers/xai-provider.ts", // xAI TTS API key lookup
|
|
232
232
|
"credential-health/credential-health-service.ts", // credential health check reads access tokens for liveness pings
|
|
233
|
-
"runtime/routes/avatar-routes.ts", // avatar generate route reads platform_base_url from credential store
|
|
234
233
|
"cli/commands/keys.ts", // CLI provider key management
|
|
235
234
|
"cli/commands/oauth/connect.ts", // CLI OAuth connect stored-secret verification
|
|
236
235
|
"runtime/routes/identity-routes.ts", // health/readyz endpoint checks CES connectivity via getCesClient
|
|
@@ -80,7 +80,7 @@ describe("ensureCompleteCustomProfiles", () => {
|
|
|
80
80
|
expect(saved.provider_connection).toBeUndefined();
|
|
81
81
|
});
|
|
82
82
|
|
|
83
|
-
test("inherits the cadet
|
|
83
|
+
test("inherits the cadet cloud connection only onto managed-routable providers", () => {
|
|
84
84
|
writeConfig({
|
|
85
85
|
llm: {
|
|
86
86
|
default: { ...distinctiveDefault, provider_connection: "cadet" },
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* upstream than its primary, so an outage at the primary's provider can
|
|
10
10
|
* be served by the backup.
|
|
11
11
|
* - Probe coverage: every backup model is a catalog member of its upstream
|
|
12
|
-
* provider, which is what feeds the
|
|
13
|
-
* - Scoping: backups exist for the
|
|
12
|
+
* provider, which is what feeds the cloud's model liveness probe.
|
|
13
|
+
* - Scoping: backups exist for the cloud column only. A BYOK or chatgpt
|
|
14
14
|
* default provider materializes no backup profiles, and its primaries
|
|
15
15
|
* carry no `fallbackProfile` pointers.
|
|
16
16
|
* - The effective catalog parses under `LLMSchema` (exercising the
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
FALLBACK_PROFILE_BY_KEY,
|
|
39
39
|
} from "../config/default-profile-names.js";
|
|
40
40
|
import { LLMSchema, type ProfileEntry } from "../config/schemas/llm.js";
|
|
41
|
-
import {
|
|
41
|
+
import { getCloudUpstream } from "../providers/cadet-model-routing.js";
|
|
42
42
|
import { isModelInCatalog } from "../providers/model-catalog.js";
|
|
43
43
|
|
|
44
44
|
const cadet = { provider: "cadet" as const };
|
|
@@ -76,12 +76,12 @@ describe("fallbackProfile pointers on the cadet column", () => {
|
|
|
76
76
|
});
|
|
77
77
|
|
|
78
78
|
describe("cross-provider rule", () => {
|
|
79
|
-
test("every backup dispatches through a different
|
|
79
|
+
test("every backup dispatches through a different cloud upstream than its primary", () => {
|
|
80
80
|
for (const key of DEFAULT_PROFILE_KEYS) {
|
|
81
81
|
const primary = CODE_DEFAULT_PROFILE_ENTRIES[key];
|
|
82
82
|
const backup = CODE_DEFAULT_PROFILE_ENTRIES[FALLBACK_PROFILE_BY_KEY[key]];
|
|
83
|
-
const primaryUpstream =
|
|
84
|
-
const backupUpstream =
|
|
83
|
+
const primaryUpstream = getCloudUpstream(primary.model as string);
|
|
84
|
+
const backupUpstream = getCloudUpstream(backup.model as string);
|
|
85
85
|
expect(primaryUpstream).not.toBeNull();
|
|
86
86
|
expect(backupUpstream).not.toBeNull();
|
|
87
87
|
expect(backupUpstream).not.toBe(primaryUpstream);
|
|
@@ -91,7 +91,7 @@ describe("cross-provider rule", () => {
|
|
|
91
91
|
test("every backup model is a catalog member of its upstream (liveness-probe coverage)", () => {
|
|
92
92
|
for (const key of BACKUP_PROFILE_KEYS) {
|
|
93
93
|
const model = CODE_DEFAULT_PROFILE_ENTRIES[key].model as string;
|
|
94
|
-
const upstream =
|
|
94
|
+
const upstream = getCloudUpstream(model);
|
|
95
95
|
expect(upstream).not.toBeNull();
|
|
96
96
|
expect(isModelInCatalog(upstream as string, model)).toBe(true);
|
|
97
97
|
}
|
|
@@ -99,7 +99,7 @@ describe("cross-provider rule", () => {
|
|
|
99
99
|
});
|
|
100
100
|
|
|
101
101
|
describe("managed-column-only scoping", () => {
|
|
102
|
-
test("the
|
|
102
|
+
test("the cloud column materializes the backups after the primaries", () => {
|
|
103
103
|
const effective = getEffectiveProfilesForProvider(
|
|
104
104
|
LLMSchema.parse({ default: cadet }),
|
|
105
105
|
);
|
|
@@ -158,10 +158,10 @@ describe("managed-column-only scoping", () => {
|
|
|
158
158
|
}
|
|
159
159
|
});
|
|
160
160
|
|
|
161
|
-
test("a persisted managed stub does not resurrect a backup off the
|
|
162
|
-
// A `config get` -> `config set` round-trip on a
|
|
161
|
+
test("a persisted managed stub does not resurrect a backup off the cloud column", () => {
|
|
162
|
+
// A `config get` -> `config set` round-trip on a cloud install can
|
|
163
163
|
// leave a thin managed stub for a backup in `llm.profiles`
|
|
164
|
-
// (`
|
|
164
|
+
// (`normalizeCloudProfileWrites`). The stub is the workspace's slot for
|
|
165
165
|
// a code-owned body, not a profile, so once the column has no body behind
|
|
166
166
|
// it the name must stop being listed rather than resolve to a
|
|
167
167
|
// providerless entry the pickers would offer and `LLMSchema` would
|
|
@@ -183,7 +183,7 @@ describe("managed-column-only scoping", () => {
|
|
|
183
183
|
}),
|
|
184
184
|
).toBeUndefined();
|
|
185
185
|
}
|
|
186
|
-
// The
|
|
186
|
+
// The cloud column still has a body for the stub to stand for.
|
|
187
187
|
expect(
|
|
188
188
|
getEffectiveProfilesForProvider(
|
|
189
189
|
LLMSchema.parse({ profiles: workspace, default: cadet }),
|
|
@@ -191,7 +191,7 @@ describe("managed-column-only scoping", () => {
|
|
|
191
191
|
).toBe(CODE_DEFAULT_PROFILE_ENTRIES["balanced-backup"]?.model);
|
|
192
192
|
});
|
|
193
193
|
|
|
194
|
-
test("a user-owned entry under a backup name stays listed off the
|
|
194
|
+
test("a user-owned entry under a backup name stays listed off the cloud column", () => {
|
|
195
195
|
// Nothing code-owned resolves there, so the entry is simply a profile of
|
|
196
196
|
// that name and keeps its own body.
|
|
197
197
|
const workspace: Record<string, ProfileEntry> = {
|
|
@@ -234,7 +234,7 @@ describe("effective-profile machinery", () => {
|
|
|
234
234
|
test("a workspace entry never overlays a backup, whatever its source", () => {
|
|
235
235
|
// Backups are code-owned (`CODE_OWNED_PROFILE_NAMES`), so unlike the
|
|
236
236
|
// primaries they take no workspace overlay at all: not the usual
|
|
237
|
-
// label/status/topP whitelist from a
|
|
237
|
+
// label/status/topP whitelist from a cloud stub, and not a user-owned
|
|
238
238
|
// shadow. Disabling a backup through a hand-edited config would strand
|
|
239
239
|
// the primary's fallback exactly when it is needed.
|
|
240
240
|
for (const source of ["managed", "user"] as const) {
|
|
@@ -263,7 +263,7 @@ describe("effective-profile machinery", () => {
|
|
|
263
263
|
|
|
264
264
|
test("backup profiles are delete-protected like the other managed defaults", () => {
|
|
265
265
|
// Membership in these sets is what wires the route-level deletion
|
|
266
|
-
// rejection (`
|
|
266
|
+
// rejection (`rejectCloudProfileDeletion`, `handleCreateProfile`) and
|
|
267
267
|
// the commitConfigWrite invariant guard
|
|
268
268
|
// (`assertInvariantProfilesPreserved`).
|
|
269
269
|
for (const key of BACKUP_PROFILE_KEYS) {
|