@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
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
* Tests for `getOriginMode` — the vbundle manifest `origin.mode` derivation.
|
|
3
3
|
*
|
|
4
4
|
* Covers:
|
|
5
|
-
* - `
|
|
6
|
-
* - `IS_CONTAINERIZED=true` (no
|
|
5
|
+
* - `IS_CLOUD=true` → "managed" (wins over IS_CONTAINERIZED).
|
|
6
|
+
* - `IS_CONTAINERIZED=true` (no IS_CLOUD) → "self-hosted-remote".
|
|
7
7
|
* - Neither → "self-hosted-local".
|
|
8
|
-
* - Regression: a logged-in local assistant holding
|
|
8
|
+
* - Regression: a logged-in local assistant holding cloud-proxy
|
|
9
9
|
* credentials (platform URL + assistant_api_key) must NOT be classified
|
|
10
10
|
* "managed" — every logged-in local has those credentials, and a
|
|
11
11
|
* "managed" stamp trips the importer's `secrets_redacted must be true
|
|
12
12
|
* when origin.mode is 'managed'` refine, breaking local→platform
|
|
13
|
-
* teleport. The helper keys on the
|
|
13
|
+
* teleport. The helper keys on the IS_CLOUD deployment env only —
|
|
14
14
|
* nothing here consults the credential store, so the regression case is
|
|
15
15
|
* simply "no env flags set".
|
|
16
16
|
*/
|
|
@@ -19,7 +19,7 @@ import { afterEach, describe, expect, test } from "bun:test";
|
|
|
19
19
|
|
|
20
20
|
import { getOriginMode } from "../origin-mode.js";
|
|
21
21
|
|
|
22
|
-
const
|
|
22
|
+
const ORIGINAL_IS_CLOUD = process.env.IS_CLOUD;
|
|
23
23
|
const ORIGINAL_IS_CONTAINERIZED = process.env.IS_CONTAINERIZED;
|
|
24
24
|
|
|
25
25
|
function restore(name: string, value: string | undefined): void {
|
|
@@ -31,31 +31,31 @@ function restore(name: string, value: string | undefined): void {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
afterEach(() => {
|
|
34
|
-
restore("
|
|
34
|
+
restore("IS_CLOUD", ORIGINAL_IS_CLOUD);
|
|
35
35
|
restore("IS_CONTAINERIZED", ORIGINAL_IS_CONTAINERIZED);
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
describe("getOriginMode", () => {
|
|
39
|
-
test("
|
|
40
|
-
process.env.
|
|
39
|
+
test("IS_CLOUD=true → managed", async () => {
|
|
40
|
+
process.env.IS_CLOUD = "true";
|
|
41
41
|
delete process.env.IS_CONTAINERIZED;
|
|
42
42
|
expect(await getOriginMode()).toBe("managed");
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
-
test("
|
|
46
|
-
process.env.
|
|
45
|
+
test("IS_CLOUD wins over IS_CONTAINERIZED", async () => {
|
|
46
|
+
process.env.IS_CLOUD = "1";
|
|
47
47
|
process.env.IS_CONTAINERIZED = "true";
|
|
48
48
|
expect(await getOriginMode()).toBe("managed");
|
|
49
49
|
});
|
|
50
50
|
|
|
51
|
-
test("IS_CONTAINERIZED=true without
|
|
52
|
-
delete process.env.
|
|
51
|
+
test("IS_CONTAINERIZED=true without IS_CLOUD → self-hosted-remote", async () => {
|
|
52
|
+
delete process.env.IS_CLOUD;
|
|
53
53
|
process.env.IS_CONTAINERIZED = "true";
|
|
54
54
|
expect(await getOriginMode()).toBe("self-hosted-remote");
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
-
test("neither flag → self-hosted-local (incl. logged-in locals with
|
|
58
|
-
delete process.env.
|
|
57
|
+
test("neither flag → self-hosted-local (incl. logged-in locals with cloud-proxy creds)", async () => {
|
|
58
|
+
delete process.env.IS_CLOUD;
|
|
59
59
|
delete process.env.IS_CONTAINERIZED;
|
|
60
60
|
expect(await getOriginMode()).toBe("self-hosted-local");
|
|
61
61
|
});
|
|
@@ -34,7 +34,7 @@ export interface DefaultV1Options {
|
|
|
34
34
|
* Sensible defaults for the six caller-required v1 manifest options.
|
|
35
35
|
*
|
|
36
36
|
* `secretsRedacted` defaults to false to match the runtime's typical
|
|
37
|
-
* "credentials included by design" path; tests that exercise the
|
|
37
|
+
* "credentials included by design" path; tests that exercise the cloud
|
|
38
38
|
* cross-field refine override `origin.mode` and `secretsRedacted` directly.
|
|
39
39
|
*/
|
|
40
40
|
export function defaultV1Options(): DefaultV1Options {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Buffer importer runtime-version compat gate.
|
|
3
3
|
*
|
|
4
4
|
* Wires `commitImport` to `policy.evaluateRuntimeCompatibility` BEFORE any
|
|
5
|
-
* state mutation. The
|
|
5
|
+
* state mutation. The cloud-side gate is the primary check; this catches
|
|
6
6
|
* legacy bundles whose ExportJob row predates PR #5470 (compat columns NULL
|
|
7
|
-
* → platform gate skipped) and any caller that bypasses the
|
|
7
|
+
* → platform gate skipped) and any caller that bypasses the cloud-issued
|
|
8
8
|
* signed URL flow.
|
|
9
9
|
*
|
|
10
10
|
* Invariants pinned here:
|
|
@@ -48,10 +48,9 @@ interface Record {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
const CADET_FIELDS = [
|
|
51
|
-
"
|
|
51
|
+
"webhook_secret",
|
|
52
52
|
"assistant_api_key",
|
|
53
53
|
"platform_assistant_id",
|
|
54
|
-
"webhook_secret",
|
|
55
54
|
] as const;
|
|
56
55
|
|
|
57
56
|
function record(service: string, field: string, prefix = "id"): Record {
|
|
@@ -180,7 +179,7 @@ describe("commitImport — credential metadata merge", () => {
|
|
|
180
179
|
const metadataPath = seedTargetMetadata(workspaceDir, cadetRecords());
|
|
181
180
|
const bundleMetadata = metadataJson([
|
|
182
181
|
record("cadet", "assistant_api_key", "source-rogue"),
|
|
183
|
-
record("cadet", "
|
|
182
|
+
record("cadet", "webhook_secret", "source-rogue"),
|
|
184
183
|
record("telegram", "bot_token", "source"),
|
|
185
184
|
]);
|
|
186
185
|
const { archive } = buildVBundle({
|
|
@@ -207,7 +206,7 @@ describe("commitImport — credential metadata merge", () => {
|
|
|
207
206
|
|
|
208
207
|
const merged = readMetadata(metadataPath);
|
|
209
208
|
const legacyRows = merged.credentials.filter((r) => r.service === "cadet");
|
|
210
|
-
expect(legacyRows.length).toBe(
|
|
209
|
+
expect(legacyRows.length).toBe(3);
|
|
211
210
|
for (const r of legacyRows) {
|
|
212
211
|
expect(r.credentialId.startsWith("target-")).toBe(true);
|
|
213
212
|
}
|
|
@@ -59,10 +59,9 @@ function keys(records: Record[]): Set<string> {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
const CADET_FIELDS = [
|
|
62
|
-
"
|
|
62
|
+
"webhook_secret",
|
|
63
63
|
"assistant_api_key",
|
|
64
64
|
"platform_assistant_id",
|
|
65
|
-
"webhook_secret",
|
|
66
65
|
] as const;
|
|
67
66
|
|
|
68
67
|
function cadetRecords(): Record[] {
|
|
@@ -103,9 +102,9 @@ describe("mergeMetadataPreservingCadet", () => {
|
|
|
103
102
|
mergeMetadataPreservingCadet(file(bundle), file(target)),
|
|
104
103
|
);
|
|
105
104
|
|
|
106
|
-
//
|
|
107
|
-
expect(merged.credentials.length).toBe(
|
|
108
|
-
expect(keys(merged.credentials).size).toBe(
|
|
105
|
+
// 3 cadet + 3 user = 6 total.
|
|
106
|
+
expect(merged.credentials.length).toBe(6);
|
|
107
|
+
expect(keys(merged.credentials).size).toBe(6);
|
|
109
108
|
|
|
110
109
|
// Target's credentialIds for cadet are preserved (not the bundle's).
|
|
111
110
|
for (const r of merged.credentials) {
|
|
@@ -128,7 +127,7 @@ describe("mergeMetadataPreservingCadet", () => {
|
|
|
128
127
|
}),
|
|
129
128
|
record({
|
|
130
129
|
service: "cadet",
|
|
131
|
-
field: "
|
|
130
|
+
field: "webhook_secret",
|
|
132
131
|
credentialId: "source-rogue-url",
|
|
133
132
|
}),
|
|
134
133
|
record({ service: "telegram", field: "bot_token" }),
|
|
@@ -141,7 +140,7 @@ describe("mergeMetadataPreservingCadet", () => {
|
|
|
141
140
|
const cadetRecordsOut = merged.credentials.filter(
|
|
142
141
|
(r) => r.service === "cadet",
|
|
143
142
|
);
|
|
144
|
-
expect(cadetRecordsOut.length).toBe(
|
|
143
|
+
expect(cadetRecordsOut.length).toBe(3);
|
|
145
144
|
for (const r of cadetRecordsOut) {
|
|
146
145
|
expect(r.credentialId.startsWith("target-")).toBe(true);
|
|
147
146
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - Accepts a v1 ten-field manifest produced by `buildVBundle`.
|
|
6
6
|
* - Rejects every legacy six-field manifest shape.
|
|
7
7
|
* - Rejects when `schema_version` is anything other than `1`.
|
|
8
|
-
* - Enforces the
|
|
8
|
+
* - Enforces the cloud-mode redaction `.refine()` (`origin.mode === "managed" ⇒ secrets_redacted === true`).
|
|
9
9
|
* - Enforces the `data/db/assistant.db`-in-contents `.refine()`.
|
|
10
10
|
* - Rejects when the declared `checksum` doesn't match the recomputed self-checksum.
|
|
11
11
|
*/
|
|
@@ -478,7 +478,7 @@ export async function importCommit(
|
|
|
478
478
|
}
|
|
479
479
|
|
|
480
480
|
/**
|
|
481
|
-
* Poll the status of a
|
|
481
|
+
* Poll the status of a cloud export job.
|
|
482
482
|
*
|
|
483
483
|
* Only applicable to managed targets. Runtime exports are synchronous
|
|
484
484
|
* and do not require status polling.
|
|
@@ -491,7 +491,7 @@ export async function pollExportStatus(
|
|
|
491
491
|
}
|
|
492
492
|
|
|
493
493
|
/**
|
|
494
|
-
* Poll the status of a
|
|
494
|
+
* Poll the status of a cloud import job.
|
|
495
495
|
*
|
|
496
496
|
* Only applicable to managed targets. Runtime imports are synchronous
|
|
497
497
|
* and do not require status polling.
|
|
@@ -579,7 +579,7 @@ interface PollOptions {
|
|
|
579
579
|
}
|
|
580
580
|
|
|
581
581
|
/**
|
|
582
|
-
* Poll a
|
|
582
|
+
* Poll a cloud job until it reaches a terminal state (complete or failed).
|
|
583
583
|
*
|
|
584
584
|
* Returns the final status response. Throws if maxAttempts is exceeded.
|
|
585
585
|
*/
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
* The vbundle manifest v1 schema's `origin.mode` enum captures the deployment
|
|
5
5
|
* shape that produced the bundle. The runtime's two underlying signals are:
|
|
6
6
|
*
|
|
7
|
-
* - `
|
|
8
|
-
* deployment (`
|
|
7
|
+
* - `getIsCloud()` — true when the daemon runs as a cloud-managed
|
|
8
|
+
* deployment (`IS_CLOUD`, set only on cloud pods).
|
|
9
9
|
* - `getIsContainerized()` — true when the daemon runs inside a container
|
|
10
10
|
* (`IS_CONTAINERIZED`), identifying where the daemon process is running.
|
|
11
11
|
*
|
|
12
|
-
* Deliberately NOT keyed on
|
|
13
|
-
* local assistant holds a
|
|
12
|
+
* Deliberately NOT keyed on cloud-proxy prerequisites: any logged-in
|
|
13
|
+
* local assistant holds a cloud URL and `assistant_api_key` (to use the
|
|
14
14
|
* platform LLM proxy), so proxy-prereq presence does not distinguish a
|
|
15
15
|
* managed deployment from a local one. Stamping a local export as
|
|
16
16
|
* "managed" would trip the importer's `secrets_redacted must be true when
|
|
@@ -18,10 +18,7 @@
|
|
|
18
18
|
* every logged-in local assistant.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import {
|
|
22
|
-
getIsContainerized,
|
|
23
|
-
getIsPlatform,
|
|
24
|
-
} from "../../config/env-registry.js";
|
|
21
|
+
import { getIsCloud, getIsContainerized } from "../../config/env-registry.js";
|
|
25
22
|
|
|
26
23
|
export type VBundleOriginMode =
|
|
27
24
|
| "managed"
|
|
@@ -35,7 +32,7 @@ export type VBundleOriginMode =
|
|
|
35
32
|
* "self-hosted-remote", bare-metal → "self-hosted-local".
|
|
36
33
|
*/
|
|
37
34
|
export async function getOriginMode(): Promise<VBundleOriginMode> {
|
|
38
|
-
if (
|
|
35
|
+
if (getIsCloud()) {
|
|
39
36
|
return "managed";
|
|
40
37
|
}
|
|
41
38
|
if (getIsContainerized()) {
|
|
@@ -114,7 +114,7 @@ type SemverTriple = readonly [number, number, number];
|
|
|
114
114
|
function parseSemverTriple(version: string): SemverTriple | null {
|
|
115
115
|
// Strip optional prerelease/build suffix ("-foo", "+sha"). We treat
|
|
116
116
|
// "0.7.1-staging.1" as equal-to-release "0.7.1" for gating purposes.
|
|
117
|
-
// The
|
|
117
|
+
// The cloud-side check uses packaging.version.Version, which sorts
|
|
118
118
|
// prereleases BEFORE the corresponding release; matching that exactly
|
|
119
119
|
// would require a fuller parser — for runtime-side defense-in-depth
|
|
120
120
|
// this conservative read is sufficient (matches release of the same
|
|
@@ -184,7 +184,7 @@ export function formatRuntimeCompatibilityMessage(
|
|
|
184
184
|
|
|
185
185
|
/**
|
|
186
186
|
* Whether `version` names a runtime built from a source checkout: the
|
|
187
|
-
* `<pkg.version>-local.<timestamp>.<sha>` `APP_VERSION` that the
|
|
187
|
+
* `<pkg.version>-local.<timestamp>.<sha>` `APP_VERSION` that the cloud
|
|
188
188
|
* repo's `vel up` stamps on the assistant images it builds for its local
|
|
189
189
|
* minikube cluster. The triple is the checkout's package.json version,
|
|
190
190
|
* which only moves on release cuts, so it says nothing about whether the
|
|
@@ -206,10 +206,10 @@ export function commitImport(options: ImportCommitOptions): ImportCommitResult {
|
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
// Defense-in-depth: refuse to import a bundle whose declared compat range
|
|
209
|
-
// excludes this runtime BEFORE any state mutation. The
|
|
209
|
+
// excludes this runtime BEFORE any state mutation. The cloud-side gate
|
|
210
210
|
// is the primary check; this catches legacy bundles whose ExportJob row
|
|
211
211
|
// predates PR #5470 (compat columns NULL → platform gate skipped) and
|
|
212
|
-
// any caller that bypasses the
|
|
212
|
+
// any caller that bypasses the cloud-issued signed URL flow.
|
|
213
213
|
const compatResult = policy.evaluateRuntimeCompatibility(
|
|
214
214
|
manifest.compatibility,
|
|
215
215
|
APP_VERSION,
|
|
@@ -253,7 +253,7 @@ export function commitImport(options: ImportCommitOptions): ImportCommitResult {
|
|
|
253
253
|
// Capture the target's credential metadata BEFORE the workspace clear
|
|
254
254
|
// runs. Step 1b wipes `data/credentials/`, so reading live metadata
|
|
255
255
|
// later (during the per-file write loop) would always miss. The merge
|
|
256
|
-
// helper needs this content to preserve the target's
|
|
256
|
+
// helper needs this content to preserve the target's cloud-identity
|
|
257
257
|
// (`cadet:*`) entries across the overwrite.
|
|
258
258
|
let liveCredentialMetadataJson: string | null = null;
|
|
259
259
|
const credentialMetadataDiskPath = pathResolver.resolve(
|
|
@@ -723,7 +723,7 @@ export function commitImport(options: ImportCommitOptions): ImportCommitResult {
|
|
|
723
723
|
// carry a metadata.json entry, the target's cadet:* entries were
|
|
724
724
|
// wiped along with the `data/credentials/` directory. Restore them by
|
|
725
725
|
// writing a minimal file containing just the preserved entries so the
|
|
726
|
-
// gateway can still locate the
|
|
726
|
+
// gateway can still locate the cloud API key. When Step 1b did NOT
|
|
727
727
|
// run (e.g. workspaceDir unset) the live metadata.json is still on
|
|
728
728
|
// disk untouched — we must not rewrite it here or we would drop the
|
|
729
729
|
// non-cadet entries the caller chose to keep.
|
|
@@ -333,9 +333,9 @@ export async function streamCommitImport(
|
|
|
333
333
|
// cleanupTempDir() in the catch — a safe no-op on a missing path
|
|
334
334
|
// — and mapThrownToResult translates VersionIncompatibleError into
|
|
335
335
|
// the version_incompatible result shape. Catches legacy bundles
|
|
336
|
-
// whose ExportJob row predates the
|
|
336
|
+
// whose ExportJob row predates the cloud compat-column rollout
|
|
337
337
|
// (compat columns NULL → platform gate skipped) and any future
|
|
338
|
-
// drift between the
|
|
338
|
+
// drift between the cloud gate and the manifest.
|
|
339
339
|
const compatResult = policy.evaluateRuntimeCompatibility(
|
|
340
340
|
manifest.compatibility,
|
|
341
341
|
APP_VERSION,
|
|
@@ -1061,13 +1061,13 @@ export async function streamCommitImport(
|
|
|
1061
1061
|
}
|
|
1062
1062
|
|
|
1063
1063
|
// Preserve the target's `cadet:*` credential metadata entries across
|
|
1064
|
-
// the swap. Django's post-hatch provisioning
|
|
1065
|
-
// `cadet:
|
|
1066
|
-
//
|
|
1064
|
+
// the swap. Django's post-hatch provisioning writes
|
|
1065
|
+
// `cadet:assistant_api_key` / `cadet:webhook_secret` via POST /v1/secrets,
|
|
1066
|
+
// which upserts into the live
|
|
1067
1067
|
// workspace's `data/credentials/metadata.json`. Without this merge the
|
|
1068
1068
|
// swap would replace that file with the source's copy (which has no
|
|
1069
1069
|
// cadet entries on local sources), and the gateway's
|
|
1070
|
-
// `readServiceCredentials` would stop finding the
|
|
1070
|
+
// `readServiceCredentials` would stop finding the cloud API key.
|
|
1071
1071
|
//
|
|
1072
1072
|
// Executes in the temp workspace only — no effect on the live workspace
|
|
1073
1073
|
// — so a failure here leaves pre-swap state untouched. Any filesystem
|
|
@@ -348,7 +348,7 @@ function sha256Hex(data: Uint8Array | string): string {
|
|
|
348
348
|
|
|
349
349
|
/**
|
|
350
350
|
* Canonicalize a JSON object by sorting keys recursively, then SHA-256 hash it.
|
|
351
|
-
* This matches the
|
|
351
|
+
* This matches the cloud's canonicalization approach.
|
|
352
352
|
*/
|
|
353
353
|
export function canonicalizeJson(obj: unknown): string {
|
|
354
354
|
return JSON.stringify(obj, (_key, value) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Unit tests for the
|
|
2
|
+
* Unit tests for the cloud_credits route handler: field mapping from the
|
|
3
3
|
* platform billing summary, including the daily-limit and low-balance state,
|
|
4
4
|
* and the fallbacks when a summary omits those fields.
|
|
5
5
|
*/
|
|
@@ -8,26 +8,26 @@ import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
|
|
|
8
8
|
|
|
9
9
|
import { UnprocessableEntityError } from "../errors.js";
|
|
10
10
|
|
|
11
|
-
let
|
|
11
|
+
let cloudBaseUrl = "https://platform.test";
|
|
12
12
|
let authHeader: string | null = "Api-Key test";
|
|
13
13
|
|
|
14
14
|
// Spread the real module: replacing it wholesale breaks unrelated importers
|
|
15
15
|
// pulled in by the module under test.
|
|
16
16
|
const actualRegistration =
|
|
17
|
-
await import("../../../inbound/
|
|
18
|
-
mock.module("../../../inbound/
|
|
17
|
+
await import("../../../inbound/cloud-callback-registration.js");
|
|
18
|
+
mock.module("../../../inbound/cloud-callback-registration.js", () => ({
|
|
19
19
|
...actualRegistration,
|
|
20
|
-
|
|
20
|
+
resolveCloudCallbackRegistrationContext: async () => ({
|
|
21
21
|
isPlatform: false,
|
|
22
|
-
|
|
22
|
+
cloudBaseUrl,
|
|
23
23
|
assistantId: "assistant-123",
|
|
24
24
|
hasAssistantApiKey: !!authHeader,
|
|
25
25
|
authHeader,
|
|
26
|
-
enabled: !!(
|
|
26
|
+
enabled: !!(cloudBaseUrl && authHeader),
|
|
27
27
|
}),
|
|
28
28
|
}));
|
|
29
29
|
|
|
30
|
-
const { ROUTES } = await import("../
|
|
30
|
+
const { ROUTES } = await import("../cloud-routes.js");
|
|
31
31
|
|
|
32
32
|
const creditsHandler = ROUTES.find(
|
|
33
33
|
(r) => r.operationId === "platform_credits",
|
|
@@ -84,7 +84,7 @@ function stubFetch(
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
beforeEach(() => {
|
|
87
|
-
|
|
87
|
+
cloudBaseUrl = "https://platform.test";
|
|
88
88
|
authHeader = "Api-Key test";
|
|
89
89
|
fetchedUrls = [];
|
|
90
90
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Unit tests for the
|
|
2
|
+
* Unit tests for the cloud_invoices_list and platform_invoices_by_id_get route
|
|
3
3
|
* handlers: cursor forwarding, page walking, the page cap, and error paths.
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -12,27 +12,27 @@ import {
|
|
|
12
12
|
UnprocessableEntityError,
|
|
13
13
|
} from "../errors.js";
|
|
14
14
|
|
|
15
|
-
let
|
|
15
|
+
let cloudBaseUrl = "https://platform.test";
|
|
16
16
|
let authHeader: string | null = "Api-Key test";
|
|
17
17
|
|
|
18
18
|
// Spread the real module: replacing it wholesale breaks unrelated importers
|
|
19
19
|
// pulled in by the module under test.
|
|
20
20
|
const actualRegistration =
|
|
21
|
-
await import("../../../inbound/
|
|
22
|
-
mock.module("../../../inbound/
|
|
21
|
+
await import("../../../inbound/cloud-callback-registration.js");
|
|
22
|
+
mock.module("../../../inbound/cloud-callback-registration.js", () => ({
|
|
23
23
|
...actualRegistration,
|
|
24
|
-
|
|
24
|
+
resolveCloudCallbackRegistrationContext: async () => ({
|
|
25
25
|
isPlatform: false,
|
|
26
|
-
|
|
26
|
+
cloudBaseUrl,
|
|
27
27
|
assistantId: "assistant-123",
|
|
28
28
|
hasAssistantApiKey: !!authHeader,
|
|
29
29
|
authHeader,
|
|
30
|
-
enabled: !!(
|
|
30
|
+
enabled: !!(cloudBaseUrl && authHeader),
|
|
31
31
|
}),
|
|
32
32
|
}));
|
|
33
33
|
|
|
34
34
|
const { INVOICE_WALK_DEADLINE_MS, MAX_INVOICE_PAGES, ROUTES } =
|
|
35
|
-
await import("../
|
|
35
|
+
await import("../cloud-routes.js");
|
|
36
36
|
|
|
37
37
|
const listHandler = ROUTES.find(
|
|
38
38
|
(r) => r.operationId === "platform_invoices_list",
|
|
@@ -103,7 +103,7 @@ function jsonResponse(body: unknown, status = 200): Response {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
beforeEach(() => {
|
|
106
|
-
|
|
106
|
+
cloudBaseUrl = "https://platform.test";
|
|
107
107
|
authHeader = "Api-Key test";
|
|
108
108
|
fetchCalls = [];
|
|
109
109
|
});
|
|
@@ -113,7 +113,7 @@ afterEach(() => {
|
|
|
113
113
|
});
|
|
114
114
|
|
|
115
115
|
describe("platform_invoices_list", () => {
|
|
116
|
-
test("returns the
|
|
116
|
+
test("returns the cloud page and calls the bare invoices URL", async () => {
|
|
117
117
|
const page = { invoices: [invoice("in_1")], has_more: false };
|
|
118
118
|
stubFetch(() => jsonResponse(page));
|
|
119
119
|
|
|
@@ -138,7 +138,7 @@ describe("platform_invoices_list", () => {
|
|
|
138
138
|
});
|
|
139
139
|
|
|
140
140
|
test("rejects with UnprocessableEntityError when credentials are missing", async () => {
|
|
141
|
-
|
|
141
|
+
cloudBaseUrl = "";
|
|
142
142
|
stubFetch(() => jsonResponse({ invoices: [], has_more: false }));
|
|
143
143
|
|
|
144
144
|
await expect(listHandler({})).rejects.toBeInstanceOf(
|
|
@@ -150,7 +150,7 @@ describe("platform_invoices_list", () => {
|
|
|
150
150
|
test("resolves an upstream 404 to an empty page", async () => {
|
|
151
151
|
stubFetch(() => new Response("Not found", { status: 404 }));
|
|
152
152
|
|
|
153
|
-
// The
|
|
153
|
+
// The cloud 404s the invoice list for an organization without invoice
|
|
154
154
|
// history; that is an empty page, not a server error.
|
|
155
155
|
expect(await listHandler({})).toEqual({ invoices: [], has_more: false });
|
|
156
156
|
expect(fetchCalls).toHaveLength(1);
|
|
@@ -241,7 +241,7 @@ describe("platform_invoices_by_id_get", () => {
|
|
|
241
241
|
test("rejects with NotFoundError, not InternalError, on an upstream 404", async () => {
|
|
242
242
|
stubFetch(() => new Response("Not found", { status: 404 }));
|
|
243
243
|
|
|
244
|
-
// A 404 from the
|
|
244
|
+
// A 404 from the cloud means no invoice history: the walk sees an
|
|
245
245
|
// empty first page and reports the invoice as not found.
|
|
246
246
|
const err = await expectRejection(() =>
|
|
247
247
|
getHandler({ pathParams: { id: "in_missing" } }),
|
|
@@ -99,7 +99,7 @@ describe("CLI vs HTTP route parity", () => {
|
|
|
99
99
|
|
|
100
100
|
test("platform connection: CLI createConnection and HTTP POST produce identical DB rows", async () => {
|
|
101
101
|
const payload = {
|
|
102
|
-
name: "parity-cadet-
|
|
102
|
+
name: "parity-cadet-cloud",
|
|
103
103
|
provider: "cadet" as const,
|
|
104
104
|
auth: { type: "platform" as const },
|
|
105
105
|
};
|
|
@@ -874,7 +874,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
874
874
|
expect(initializeProvidersCalls).toBe(0);
|
|
875
875
|
});
|
|
876
876
|
|
|
877
|
-
test("rejects a custom pointer at a
|
|
877
|
+
test("rejects a custom pointer at a cloud backup name", async () => {
|
|
878
878
|
await expect(
|
|
879
879
|
replaceProfileRoute.handler({
|
|
880
880
|
pathParams: { name: "custom" },
|
|
@@ -987,7 +987,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
987
987
|
// across tests in this file, so a leaked openai-personal would otherwise
|
|
988
988
|
// win the derivation.
|
|
989
989
|
getDb().delete(providerConnections).run();
|
|
990
|
-
// The single Cadet
|
|
990
|
+
// The single Cadet Cloud connection serves managed-routable providers.
|
|
991
991
|
createConnection(getDb(), {
|
|
992
992
|
name: "cadet",
|
|
993
993
|
provider: "cadet",
|
|
@@ -1021,7 +1021,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1021
1021
|
).profiles.custom;
|
|
1022
1022
|
|
|
1023
1023
|
// No personal openai connection exists, so the route auto-derives the
|
|
1024
|
-
// single Cadet
|
|
1024
|
+
// single Cadet Cloud connection for this managed-routable provider.
|
|
1025
1025
|
expect(savedProfile.provider_connection).toBe("cadet");
|
|
1026
1026
|
});
|
|
1027
1027
|
|
|
@@ -1136,10 +1136,10 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1136
1136
|
expect(conn!.provider).toBe("minimax");
|
|
1137
1137
|
});
|
|
1138
1138
|
|
|
1139
|
-
describe("
|
|
1139
|
+
describe("cloud profile guard", () => {
|
|
1140
1140
|
beforeEach(() => {
|
|
1141
1141
|
// Seed two managed-source profiles alongside the existing custom one.
|
|
1142
|
-
// Every
|
|
1142
|
+
// Every cloud profile name (including the flag-gated os-beta) is
|
|
1143
1143
|
// invariant while its entry is managed-source: fully read-only except
|
|
1144
1144
|
// the disabled → active status transition.
|
|
1145
1145
|
const profiles = (
|
|
@@ -1168,9 +1168,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1168
1168
|
pathParams: { name: "os-beta" },
|
|
1169
1169
|
body: { label: "My OS Beta" },
|
|
1170
1170
|
}),
|
|
1171
|
-
).rejects.toThrow(
|
|
1172
|
-
/Cannot edit managed profile "os-beta" fields \[label\]/,
|
|
1173
|
-
);
|
|
1171
|
+
).rejects.toThrow(/Cannot edit cloud profile "os-beta" fields \[label\]/);
|
|
1174
1172
|
// Guard rejects before any write — the seed label is untouched.
|
|
1175
1173
|
expect(persistedProfile("os-beta").label).toBe("OS Beta");
|
|
1176
1174
|
});
|
|
@@ -1182,7 +1180,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1182
1180
|
body: { status: "disabled" },
|
|
1183
1181
|
}),
|
|
1184
1182
|
).rejects.toThrow(
|
|
1185
|
-
'Cannot edit
|
|
1183
|
+
'Cannot edit cloud profile "os-beta". Cloud profiles are read-only',
|
|
1186
1184
|
);
|
|
1187
1185
|
// Guard rejects before any write — the seed status is untouched.
|
|
1188
1186
|
expect(persistedProfile("os-beta").status).toBe("active");
|
|
@@ -1215,10 +1213,10 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1215
1213
|
expect(savedProfile.source).toBe("managed");
|
|
1216
1214
|
});
|
|
1217
1215
|
|
|
1218
|
-
// The full commit-time rejection matrix for invariant
|
|
1219
|
-
// lives in src/__tests__/
|
|
1216
|
+
// The full commit-time rejection matrix for invariant cloud profiles
|
|
1217
|
+
// lives in src/__tests__/cloud-profile-guard.test.ts.
|
|
1220
1218
|
|
|
1221
|
-
test("rejects provider edit on
|
|
1219
|
+
test("rejects provider edit on cloud profile with disallowed-keys error", async () => {
|
|
1222
1220
|
// The handler is `async`, so synchronous BadRequest throws still
|
|
1223
1221
|
// surface as a rejected promise; assert via `.rejects.toThrow`.
|
|
1224
1222
|
await expect(
|
|
@@ -1227,12 +1225,12 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1227
1225
|
body: { provider: "openai", model: "gpt-5" },
|
|
1228
1226
|
}),
|
|
1229
1227
|
).rejects.toThrow(
|
|
1230
|
-
/Cannot edit
|
|
1228
|
+
/Cannot edit cloud profile "balanced" fields \[provider, model\]/,
|
|
1231
1229
|
);
|
|
1232
1230
|
});
|
|
1233
1231
|
|
|
1234
1232
|
test("rejects mixed-field bodies without partially applying anything", async () => {
|
|
1235
|
-
// Neither label nor maxTokens is writable on a
|
|
1233
|
+
// Neither label nor maxTokens is writable on a cloud profile — the
|
|
1236
1234
|
// reject must fire before any write, so the saver is never invoked.
|
|
1237
1235
|
await expect(
|
|
1238
1236
|
replaceProfileRoute.handler({
|
|
@@ -1240,7 +1238,7 @@ describe("PUT /v1/config/llm/profiles/:name", () => {
|
|
|
1240
1238
|
body: { label: "Try", maxTokens: 999 },
|
|
1241
1239
|
}),
|
|
1242
1240
|
).rejects.toThrow(
|
|
1243
|
-
/Cannot edit
|
|
1241
|
+
/Cannot edit cloud profile "balanced" fields \[maxTokens, label\]/,
|
|
1244
1242
|
);
|
|
1245
1243
|
// Reject path skips commitConfigWrite entirely — no provider reinit
|
|
1246
1244
|
// or cache invalidation should fire on a guard rejection.
|
|
@@ -1323,7 +1321,7 @@ describe("PATCH /v1/config fallbackProfile write protection", () => {
|
|
|
1323
1321
|
expect(initializeProvidersCalls).toBe(0);
|
|
1324
1322
|
});
|
|
1325
1323
|
|
|
1326
|
-
test("rejects a custom pointer at a
|
|
1324
|
+
test("rejects a custom pointer at a cloud backup name", async () => {
|
|
1327
1325
|
await expect(
|
|
1328
1326
|
patchRoute.handler({
|
|
1329
1327
|
body: {
|
|
@@ -1474,7 +1472,7 @@ describe("custom profile write normalization (complete overrides)", () => {
|
|
|
1474
1472
|
expect(saved.maxTokens).toBe(12345);
|
|
1475
1473
|
});
|
|
1476
1474
|
|
|
1477
|
-
test("a
|
|
1475
|
+
test("a cloud status re-enable stays a thin stub", async () => {
|
|
1478
1476
|
(
|
|
1479
1477
|
rawConfigFixture.llm as { profiles: Record<string, unknown> }
|
|
1480
1478
|
).profiles.balanced = { source: "managed", status: "disabled" };
|
|
@@ -1754,7 +1752,7 @@ describe("config invariant flag enrichment", () => {
|
|
|
1754
1752
|
label: "OS Beta",
|
|
1755
1753
|
status: "active",
|
|
1756
1754
|
},
|
|
1757
|
-
// A user-owned profile sharing a
|
|
1755
|
+
// A user-owned profile sharing a cloud name: no invariant flag —
|
|
1758
1756
|
// the stamp is gated on `source: "managed"` to match the guard.
|
|
1759
1757
|
"cost-optimized": {
|
|
1760
1758
|
source: "user",
|
|
@@ -2208,16 +2206,19 @@ describe("persisted chat settings", () => {
|
|
|
2208
2206
|
});
|
|
2209
2207
|
});
|
|
2210
2208
|
|
|
2211
|
-
test("sparse GET
|
|
2209
|
+
test("sparse GET returns the fully materialized typed config with effective chat settings", async () => {
|
|
2212
2210
|
rawConfigFixture = {};
|
|
2213
2211
|
seedRawConfig();
|
|
2214
2212
|
invalidateConfigCache();
|
|
2215
2213
|
const result = await getRoute.handler({});
|
|
2216
2214
|
expect(result).toMatchObject({
|
|
2217
|
-
conversations: {
|
|
2215
|
+
conversations: {
|
|
2216
|
+
autoArchive: { enabled: false, afterDays: 7 },
|
|
2217
|
+
skipAutoRetitling: false,
|
|
2218
|
+
},
|
|
2218
2219
|
notifications: { newMessageEnabled: true },
|
|
2219
2220
|
});
|
|
2220
|
-
|
|
2221
|
+
// Materialization is wire-only: nothing is written back to disk.
|
|
2221
2222
|
expect(loadRawConfig()).not.toHaveProperty("conversations");
|
|
2222
2223
|
expect(loadRawConfig()).not.toHaveProperty("notifications");
|
|
2223
2224
|
});
|
|
@@ -2237,9 +2238,9 @@ describe("persisted chat settings", () => {
|
|
|
2237
2238
|
expect(result).toMatchObject({
|
|
2238
2239
|
conversations: {
|
|
2239
2240
|
skipAutoRetitling: true,
|
|
2240
|
-
autoArchive: { enabled: true, afterDays: 30
|
|
2241
|
+
autoArchive: { enabled: true, afterDays: 30 },
|
|
2241
2242
|
},
|
|
2242
|
-
notifications: { newMessageEnabled: false
|
|
2243
|
+
notifications: { newMessageEnabled: false },
|
|
2243
2244
|
maxStepsPerSession: 75,
|
|
2244
2245
|
});
|
|
2245
2246
|
expect(loadRawConfig()).toEqual({
|
|
@@ -2280,9 +2281,9 @@ describe("persisted chat settings", () => {
|
|
|
2280
2281
|
expect(result).toMatchObject({
|
|
2281
2282
|
conversations: {
|
|
2282
2283
|
skipAutoRetitling: true,
|
|
2283
|
-
autoArchive: { enabled: false, afterDays: 7
|
|
2284
|
+
autoArchive: { enabled: false, afterDays: 7 },
|
|
2284
2285
|
},
|
|
2285
|
-
notifications: { newMessageEnabled: true
|
|
2286
|
+
notifications: { newMessageEnabled: true },
|
|
2286
2287
|
});
|
|
2287
2288
|
expect(loadRawConfig()).toMatchObject({
|
|
2288
2289
|
conversations: { autoArchive: { futureOption: "keep" } },
|