@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
|
@@ -35,7 +35,6 @@ import {
|
|
|
35
35
|
scrubNulledChatSettings,
|
|
36
36
|
validateChatSettingsWrite,
|
|
37
37
|
} from "../../config/chat-settings.js";
|
|
38
|
-
import { DefaultProviderSelectionSchema } from "../../config/default-provider.js";
|
|
39
38
|
import {
|
|
40
39
|
catalogEntryFor,
|
|
41
40
|
type InputModalities,
|
|
@@ -44,10 +43,9 @@ import {
|
|
|
44
43
|
} from "../../config/input-modalities.js";
|
|
45
44
|
import {
|
|
46
45
|
deepMergeOverwrite,
|
|
47
|
-
fillContextDefaultsForMissingKeys,
|
|
48
46
|
getConfig,
|
|
49
|
-
getDeploymentContextDefaults,
|
|
50
47
|
invalidateConfigCache,
|
|
48
|
+
loadConfig,
|
|
51
49
|
loadRawConfig,
|
|
52
50
|
saveRawConfig,
|
|
53
51
|
setNestedValue,
|
|
@@ -58,22 +56,21 @@ import {
|
|
|
58
56
|
completeCustomProfile,
|
|
59
57
|
mergePreservingUnknownKeys,
|
|
60
58
|
} from "../../config/profile-materialization.js";
|
|
61
|
-
import {
|
|
59
|
+
import {
|
|
60
|
+
type AssistantConfig,
|
|
61
|
+
AssistantConfigSchema,
|
|
62
|
+
} from "../../config/schema.js";
|
|
62
63
|
import { getSchemaAtPath } from "../../config/schema-utils.js";
|
|
63
|
-
import { AutoArchiveConfigSchema } from "../../config/schemas/conversations.js";
|
|
64
64
|
import {
|
|
65
65
|
collectFallbackProfileIssues,
|
|
66
|
-
isDefaultProviderChoice,
|
|
67
66
|
LLMConfigBase,
|
|
68
67
|
LLMConfigFragment,
|
|
69
|
-
LLMDefaultConfigSchema,
|
|
70
68
|
LLMSchema,
|
|
71
69
|
ProfileEntry,
|
|
72
70
|
routingIdentityModelIssue,
|
|
73
71
|
unknownLlmProviderIssue,
|
|
74
72
|
} from "../../config/schemas/llm.js";
|
|
75
73
|
import { VALID_MEMORY_EMBEDDING_PROVIDERS } from "../../config/schemas/memory-storage.js";
|
|
76
|
-
import { NotificationsConfigSchema } from "../../config/schemas/notifications.js";
|
|
77
74
|
import { ServiceModeSchema } from "../../config/schemas/services.js";
|
|
78
75
|
import { isSidebarDoneEnabled } from "../../config/sidebar-done-gate.js";
|
|
79
76
|
import {
|
|
@@ -123,12 +120,12 @@ import { type LogRow } from "../../persistence/llm-request-log-store.js";
|
|
|
123
120
|
import { getMemoryRecallLogByMessageIds } from "../../plugins/defaults/memory/memory-recall-log-store.js";
|
|
124
121
|
import { getMemoryV2ActivationLogByMessageIds } from "../../plugins/defaults/memory/v2/activation-log-store.js";
|
|
125
122
|
import { getMemoryV3SelectionForInspectorByMessageIds } from "../../plugins/defaults/memory/v3/selection-log-store.js";
|
|
126
|
-
import {
|
|
123
|
+
import { CLOUD_ROUTABLE_PROVIDERS } from "../../providers/cadet-model-routing.js";
|
|
127
124
|
import { writableProfileProviderIssue } from "../../providers/connection-resolution.js";
|
|
128
125
|
import { ROUTING_IDENTITY_PROVIDERS } from "../../providers/inference/auth.js";
|
|
129
126
|
import { PROVIDERS_REQUIRING_BASE_URL_AND_MODELS } from "../../providers/inference/auth.js";
|
|
130
127
|
import {
|
|
131
|
-
|
|
128
|
+
CADET_CLOUD_CONNECTION_NAME,
|
|
132
129
|
createConnection,
|
|
133
130
|
getConnection,
|
|
134
131
|
LEGACY_MANAGED_CONNECTION_NAMES,
|
|
@@ -526,85 +523,6 @@ async function handleSetEmbeddingConfig({ body }: RouteHandlerArgs) {
|
|
|
526
523
|
}
|
|
527
524
|
}
|
|
528
525
|
|
|
529
|
-
/**
|
|
530
|
-
* Apply deployment-context defaults to a raw config payload before it goes
|
|
531
|
-
* out over the wire from `GET /v1/config`. The in-memory `loadConfig()`
|
|
532
|
-
* already layers these defaults for daemon-internal consumers; the GET
|
|
533
|
-
* response needs the same treatment so external clients (macOS, web, CLI)
|
|
534
|
-
* see the effective value rather than `undefined` when the daemon hasn't
|
|
535
|
-
* persisted an explicit choice yet. For example, on a freshly-hatched
|
|
536
|
-
* platform-managed assistant, `services.image-generation.provider` may be
|
|
537
|
-
* absent from disk (only `llm.profiles` was written by
|
|
538
|
-
* `seedInferenceProfiles`); the fill pass ensures clients receive `"cadet"`
|
|
539
|
-
* rather than falling back to their own defaults.
|
|
540
|
-
*
|
|
541
|
-
* Guards against `loadRawConfig()` handing us a value that is technically
|
|
542
|
-
* valid JSON but not a plain object (e.g. literal `null`, a number, or an
|
|
543
|
-
* array). `loadRawConfig` is typed `Record<string, unknown>` but `JSON.parse`
|
|
544
|
-
* itself doesn't enforce that — a malformed-but-parseable `config.json`
|
|
545
|
-
* would blow up `fillContextDefaultsForMissingKeys` on its `target[key]` /
|
|
546
|
-
* `fileConfig[key]` accesses, turning `GET /v1/config` into a 500 where it
|
|
547
|
-
* used to succeed (returning the malformed payload as-is). When `raw` is
|
|
548
|
-
* not a plain object, we return it unchanged.
|
|
549
|
-
*
|
|
550
|
-
* Exported for direct unit testing.
|
|
551
|
-
*/
|
|
552
|
-
export function applyContextDefaultsToRawConfig(raw: unknown): unknown {
|
|
553
|
-
const contextDefaults = getDeploymentContextDefaults();
|
|
554
|
-
if (
|
|
555
|
-
Object.keys(contextDefaults).length === 0 ||
|
|
556
|
-
raw === null ||
|
|
557
|
-
typeof raw !== "object" ||
|
|
558
|
-
Array.isArray(raw)
|
|
559
|
-
) {
|
|
560
|
-
return raw;
|
|
561
|
-
}
|
|
562
|
-
fillContextDefaultsForMissingKeys(
|
|
563
|
-
raw as Record<string, unknown>,
|
|
564
|
-
raw as Record<string, unknown>,
|
|
565
|
-
contextDefaults,
|
|
566
|
-
);
|
|
567
|
-
synthesizeLegacyInferenceModeForPlatform(raw as Record<string, unknown>);
|
|
568
|
-
return raw;
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
/**
|
|
572
|
-
* Backwards-compat wire field for `GET /v1/config`. PR removed
|
|
573
|
-
* `services.inference.mode` from the typed schema (routing is governed by
|
|
574
|
-
* `provider_connections` rows + per-profile `provider_connection`), but
|
|
575
|
-
* the macOS settings client (`SettingsStore.swift:loadServiceModes`) still
|
|
576
|
-
* reads this field and falls back to its `@Published` default of "your-own"
|
|
577
|
-
* when absent. On a platform-managed assistant served by a newer daemon and
|
|
578
|
-
* an older macOS client, that fallback would show the wrong mode in the UI
|
|
579
|
-
* until the user explicitly saved. Synthesize the value here so the wire
|
|
580
|
-
* shape stays compatible during the rollout window. Remove once the macOS
|
|
581
|
-
* Providers UI (the follow-up PR that retires this field on the client) has
|
|
582
|
-
* shipped to the majority of installs.
|
|
583
|
-
*
|
|
584
|
-
* The synthesis is wire-only: it never persists to disk and never reaches
|
|
585
|
-
* the typed `AssistantConfig` consumed by daemon-internal code. The on-disk
|
|
586
|
-
* config is stripped of `mode` by workspace migration 076.
|
|
587
|
-
*
|
|
588
|
-
* Only runs when this function is reached, which is guarded by
|
|
589
|
-
* `getDeploymentContextDefaults()` returning non-empty (IS_PLATFORM=true).
|
|
590
|
-
*/
|
|
591
|
-
function synthesizeLegacyInferenceModeForPlatform(
|
|
592
|
-
root: Record<string, unknown>,
|
|
593
|
-
): void {
|
|
594
|
-
const services = readPlainObject(root.services);
|
|
595
|
-
if (!services) {
|
|
596
|
-
return;
|
|
597
|
-
}
|
|
598
|
-
let inference = readPlainObject(services.inference);
|
|
599
|
-
if (!inference) {
|
|
600
|
-
inference = {};
|
|
601
|
-
services.inference = inference;
|
|
602
|
-
}
|
|
603
|
-
if (inference.mode === undefined) {
|
|
604
|
-
inference.mode = "managed";
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
|
|
608
526
|
function readPlainObject(value: unknown): Record<string, unknown> | undefined {
|
|
609
527
|
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
610
528
|
return undefined;
|
|
@@ -732,13 +650,6 @@ function nestPath(path: string, value: unknown): unknown {
|
|
|
732
650
|
return current;
|
|
733
651
|
}
|
|
734
652
|
|
|
735
|
-
const WireProfileEntry = ProfileEntry.extend({
|
|
736
|
-
supportsVision: z.boolean().optional(),
|
|
737
|
-
invariant: z.boolean().optional(),
|
|
738
|
-
})
|
|
739
|
-
.passthrough()
|
|
740
|
-
.meta({ id: "ProfileEntry" });
|
|
741
|
-
|
|
742
653
|
/**
|
|
743
654
|
* Wire shape of the `memory` section in config responses. Passthrough
|
|
744
655
|
* preserves fields beyond `enabled` and `v2` so the client doesn't strip
|
|
@@ -752,97 +663,6 @@ const MemoryWireConfigSchema = z
|
|
|
752
663
|
.passthrough()
|
|
753
664
|
.meta({ id: "MemoryConfig" });
|
|
754
665
|
|
|
755
|
-
/**
|
|
756
|
-
* Response schema for `GET /v1/config`.
|
|
757
|
-
*
|
|
758
|
-
* Describes the wire shape of the raw `settings.json` response after
|
|
759
|
-
* context-default filling and vision-flag enrichment. Chat settings include
|
|
760
|
-
* effective defaults. Fields remain optional for older assistants and sparse
|
|
761
|
-
* on-disk config. Additional top-level sections are preserved via
|
|
762
|
-
* passthrough. This schema types the fields that web/macOS clients consume
|
|
763
|
-
* without restricting the full config surface.
|
|
764
|
-
*/
|
|
765
|
-
const ConfigGetResponseSchema = z
|
|
766
|
-
.object({
|
|
767
|
-
// A malformed or absent stored chat-settings subtree falls back to its
|
|
768
|
-
// schema defaults so one bad leaf can't fail the whole wire parse (which
|
|
769
|
-
// would strip every derived field from the response); the chat-settings
|
|
770
|
-
// read overlay refills both from the effective config.
|
|
771
|
-
conversations: z
|
|
772
|
-
.object({
|
|
773
|
-
autoArchive: AutoArchiveConfigSchema.passthrough().catch(
|
|
774
|
-
AutoArchiveConfigSchema.parse({}),
|
|
775
|
-
),
|
|
776
|
-
})
|
|
777
|
-
.passthrough()
|
|
778
|
-
.optional(),
|
|
779
|
-
notifications: NotificationsConfigSchema.passthrough()
|
|
780
|
-
.optional()
|
|
781
|
-
.catch(undefined),
|
|
782
|
-
llm: z
|
|
783
|
-
.object({
|
|
784
|
-
default: LLMDefaultConfigSchema.optional(),
|
|
785
|
-
// Wire-compat view of the default provider, derived from `default`
|
|
786
|
-
// by the read overlay (the key is never stored anymore).
|
|
787
|
-
defaultProvider: DefaultProviderSelectionSchema.optional(),
|
|
788
|
-
profiles: z.record(z.string(), WireProfileEntry).optional(),
|
|
789
|
-
profileOrder: z.array(z.string()).optional(),
|
|
790
|
-
activeProfile: z.string().optional(),
|
|
791
|
-
// The profile the advisor consults; excluded from chat-profile pickers.
|
|
792
|
-
advisorProfile: z.string().optional(),
|
|
793
|
-
callSites: z
|
|
794
|
-
.record(
|
|
795
|
-
z.string(),
|
|
796
|
-
LLMConfigFragment.extend({
|
|
797
|
-
profile: z.string().optional(),
|
|
798
|
-
}).nullable(),
|
|
799
|
-
)
|
|
800
|
-
.optional(),
|
|
801
|
-
profileSession: z
|
|
802
|
-
.object({
|
|
803
|
-
defaultTtlSeconds: z.number().optional(),
|
|
804
|
-
maxTtlSeconds: z.number().optional(),
|
|
805
|
-
})
|
|
806
|
-
.optional(),
|
|
807
|
-
pricingOverrides: z.array(z.unknown()).optional(),
|
|
808
|
-
})
|
|
809
|
-
.passthrough()
|
|
810
|
-
.optional(),
|
|
811
|
-
memory: MemoryWireConfigSchema.optional(),
|
|
812
|
-
services: z
|
|
813
|
-
.object({
|
|
814
|
-
"web-search": z
|
|
815
|
-
.object({
|
|
816
|
-
provider: z.string().optional(),
|
|
817
|
-
})
|
|
818
|
-
.passthrough()
|
|
819
|
-
.optional(),
|
|
820
|
-
"web-fetch": z
|
|
821
|
-
.object({
|
|
822
|
-
provider: z.string().optional(),
|
|
823
|
-
})
|
|
824
|
-
.passthrough()
|
|
825
|
-
.optional(),
|
|
826
|
-
"image-generation": z
|
|
827
|
-
.object({
|
|
828
|
-
provider: z.string().optional(),
|
|
829
|
-
model: z.string().optional(),
|
|
830
|
-
})
|
|
831
|
-
.passthrough()
|
|
832
|
-
.optional(),
|
|
833
|
-
inference: z
|
|
834
|
-
.object({ mode: ServiceModeSchema.optional() })
|
|
835
|
-
.passthrough()
|
|
836
|
-
.optional(),
|
|
837
|
-
})
|
|
838
|
-
.passthrough()
|
|
839
|
-
.optional(),
|
|
840
|
-
})
|
|
841
|
-
.passthrough()
|
|
842
|
-
.meta({ id: "ConfigGetResponse" });
|
|
843
|
-
|
|
844
|
-
type ConfigGetResponse = z.infer<typeof ConfigGetResponseSchema>;
|
|
845
|
-
|
|
846
666
|
/**
|
|
847
667
|
* Given a `z.object(...)` schema, returns a new schema where every property
|
|
848
668
|
* is `.nullable().optional()`. Used to express PATCH body semantics where any
|
|
@@ -880,7 +700,7 @@ const CallSiteOverrideDraftSchema = nullablePartial(
|
|
|
880
700
|
*
|
|
881
701
|
* Mirrors the response shape but every field is `.nullable().optional()`:
|
|
882
702
|
* omitted keys are left unchanged by the daemon's deep-merge, `null` values
|
|
883
|
-
* delete the key. Uses the same Zod enums as `
|
|
703
|
+
* delete the key. Uses the same Zod enums as `AssistantConfigSchema` so
|
|
884
704
|
* the generated SDK produces literal-union types — no hand-written patch
|
|
885
705
|
* types needed downstream.
|
|
886
706
|
*/
|
|
@@ -953,54 +773,37 @@ const ConfigPatchRequestSchema = z
|
|
|
953
773
|
.passthrough()
|
|
954
774
|
.meta({ id: "ConfigPatchRequest" });
|
|
955
775
|
|
|
776
|
+
/**
|
|
777
|
+
* The response contract for `GET`/`PATCH /v1/config` — the five subtrees
|
|
778
|
+
* external clients actually read, picked out of the full graph. Rendering
|
|
779
|
+
* the whole `AssistantConfigSchema` into the spec blasted openapi.yaml past
|
|
780
|
+
* 12K lines; we're not ready to trim the response schema itself yet, so the
|
|
781
|
+
* runtime still returns the full config and the spec documents these.
|
|
782
|
+
*/
|
|
783
|
+
const ConfigGetResponseSchema = AssistantConfigSchema.pick({
|
|
784
|
+
conversations: true,
|
|
785
|
+
notifications: true,
|
|
786
|
+
llm: true,
|
|
787
|
+
memory: true,
|
|
788
|
+
services: true,
|
|
789
|
+
});
|
|
790
|
+
|
|
956
791
|
function handleGetConfig() {
|
|
957
792
|
try {
|
|
958
|
-
const config =
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
return config;
|
|
966
|
-
}
|
|
967
|
-
const wire = parsed.data;
|
|
968
|
-
overlayWorkspaceMcpForConfigRead(wire);
|
|
969
|
-
sanitizeMcpTransportHeadersForSettingsRead(wire);
|
|
970
|
-
overlayEffectiveProfilesForWire(wire);
|
|
971
|
-
enrichProfilesForWire(wire);
|
|
972
|
-
overlayDefaultProviderForWire(wire);
|
|
973
|
-
overlayChatSettingsForWire(wire);
|
|
974
|
-
return wire;
|
|
793
|
+
const config = loadConfig();
|
|
794
|
+
overlayWorkspaceMcpForConfigRead(config);
|
|
795
|
+
sanitizeMcpTransportHeadersForSettingsRead(config);
|
|
796
|
+
overlayEffectiveProfilesForWire(config);
|
|
797
|
+
enrichProfilesForWire(config);
|
|
798
|
+
overlayChatSettingsForWire(config);
|
|
799
|
+
return config;
|
|
975
800
|
} catch (err) {
|
|
976
801
|
const message = err instanceof Error ? err.message : String(err);
|
|
977
802
|
throw new InternalError(`Failed to read config: ${message}`);
|
|
978
803
|
}
|
|
979
804
|
}
|
|
980
805
|
|
|
981
|
-
|
|
982
|
-
* Surface the default-provider selection on config reads. The selection lives
|
|
983
|
-
* in the `llm.default` blob; the dedicated `defaultProvider` response field is
|
|
984
|
-
* a derived wire-compat view (readers of the config GET predate the blob) and
|
|
985
|
-
* is never stored on disk — it is stamped here from the blob on every read.
|
|
986
|
-
*/
|
|
987
|
-
function overlayDefaultProviderForWire(config: ConfigGetResponse): void {
|
|
988
|
-
if (!config.llm) {
|
|
989
|
-
return;
|
|
990
|
-
}
|
|
991
|
-
const blob = config.llm.default;
|
|
992
|
-
const provider = blob?.provider;
|
|
993
|
-
if (provider != null && isDefaultProviderChoice(provider)) {
|
|
994
|
-
config.llm.defaultProvider = {
|
|
995
|
-
provider,
|
|
996
|
-
connectionName: blob?.provider_connection,
|
|
997
|
-
};
|
|
998
|
-
} else {
|
|
999
|
-
delete config.llm.defaultProvider;
|
|
1000
|
-
}
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
function overlayChatSettingsForWire(config: ConfigGetResponse): void {
|
|
806
|
+
function overlayChatSettingsForWire(config: AssistantConfig): void {
|
|
1004
807
|
const effective = getConfig();
|
|
1005
808
|
config.conversations = {
|
|
1006
809
|
...config.conversations,
|
|
@@ -1023,7 +826,7 @@ function overlayChatSettingsForWire(config: ConfigGetResponse): void {
|
|
|
1023
826
|
* render labels/models — so the wire view materializes them, resolved through
|
|
1024
827
|
* `llm.default`'s column of the intent × provider matrix so a BYO
|
|
1025
828
|
* install sees the provider/model that actually dispatches. Wire-only:
|
|
1026
|
-
* `
|
|
829
|
+
* `normalizeCloudProfileWrites` reduces echoed bodies back to the
|
|
1027
830
|
* workspace-owned fields on the write paths, so a `config get` →
|
|
1028
831
|
* `config set` round-trip never persists catalog content — the two must
|
|
1029
832
|
* resolve through the same column or honest round-trips are rejected.
|
|
@@ -1033,10 +836,7 @@ function overlayChatSettingsForWire(config: ConfigGetResponse): void {
|
|
|
1033
836
|
* shields the matrix lookup from a persisted value the matrix cannot
|
|
1034
837
|
* implement, which a raw read would feed straight into resolution.
|
|
1035
838
|
*/
|
|
1036
|
-
function overlayEffectiveProfilesForWire(config:
|
|
1037
|
-
if (!config.llm) {
|
|
1038
|
-
config.llm = {};
|
|
1039
|
-
}
|
|
839
|
+
function overlayEffectiveProfilesForWire(config: AssistantConfig): void {
|
|
1040
840
|
const parsedLlm = LLMSchema.safeParse(config.llm);
|
|
1041
841
|
config.llm.profiles = getUserSelectableProfilesForProvider(
|
|
1042
842
|
parsedLlm.success ? parsedLlm.data : undefined,
|
|
@@ -1097,7 +897,7 @@ function stripWireOnlyProfileKeys(patch: unknown): void {
|
|
|
1097
897
|
* `handleSetConfig`'s `raw` write, which shares object references with the
|
|
1098
898
|
* inspected patch shape.
|
|
1099
899
|
*/
|
|
1100
|
-
export function
|
|
900
|
+
export function normalizeCloudProfileWrites(patch: unknown): void {
|
|
1101
901
|
const root = readPlainObject(patch);
|
|
1102
902
|
const llm = readPlainObject(root?.llm);
|
|
1103
903
|
const profiles = readPlainObject(llm?.profiles);
|
|
@@ -1182,15 +982,15 @@ export function normalizeManagedProfileWrites(patch: unknown): void {
|
|
|
1182
982
|
entry.status != null &&
|
|
1183
983
|
entry.status !== "active"
|
|
1184
984
|
) {
|
|
1185
|
-
throw new BadRequestError(`Cannot disable
|
|
985
|
+
throw new BadRequestError(`Cannot disable cloud profile "${name}".`);
|
|
1186
986
|
}
|
|
1187
987
|
const residual = Object.keys(entry).filter(
|
|
1188
988
|
(key) => key !== "source" && key !== "status",
|
|
1189
989
|
);
|
|
1190
990
|
if (residual.length > 0) {
|
|
1191
991
|
throw new BadRequestError(
|
|
1192
|
-
`Cannot edit
|
|
1193
|
-
`
|
|
992
|
+
`Cannot edit cloud profile "${name}" fields [${residual.join(", ")}]. ` +
|
|
993
|
+
`Cloud profiles are read-only; duplicate to a custom profile to customize.`,
|
|
1194
994
|
);
|
|
1195
995
|
}
|
|
1196
996
|
entry.source = "managed";
|
|
@@ -1205,10 +1005,10 @@ export function normalizeManagedProfileWrites(patch: unknown): void {
|
|
|
1205
1005
|
* `inputModalities.image` override winning when set. Unknown (provider,
|
|
1206
1006
|
* model) pairs with no override default to `true` (fail-open) so image
|
|
1207
1007
|
* upload remains available for custom / unlisted models.
|
|
1208
|
-
* - `invariant`: `true` for managed-source entries of the
|
|
1008
|
+
* - `invariant`: `true` for managed-source entries of the cloud profile
|
|
1209
1009
|
* names (`INVARIANT_PROFILE_NAMES`); absent otherwise. Source-gated to
|
|
1210
1010
|
* match `assertInvariantProfilesPreserved` — a user-owned profile sharing
|
|
1211
|
-
* a
|
|
1011
|
+
* a cloud name is fully editable, so it must render as a normal custom
|
|
1212
1012
|
* profile.
|
|
1213
1013
|
*/
|
|
1214
1014
|
function enrichProfilesForWire(config: unknown): void {
|
|
@@ -1281,7 +1081,7 @@ function handleGetConfigSchema({ queryParams = {} }: RouteHandlerArgs) {
|
|
|
1281
1081
|
};
|
|
1282
1082
|
}
|
|
1283
1083
|
|
|
1284
|
-
export function
|
|
1084
|
+
export function rejectCloudProfileDeletion(
|
|
1285
1085
|
body: Record<string, unknown>,
|
|
1286
1086
|
): void {
|
|
1287
1087
|
const llm = asMutablePlainObject(body.llm);
|
|
@@ -1290,7 +1090,7 @@ export function rejectManagedProfileDeletion(
|
|
|
1290
1090
|
}
|
|
1291
1091
|
if ("profiles" in llm && llm.profiles === null) {
|
|
1292
1092
|
throw new BadRequestError(
|
|
1293
|
-
"Cannot null llm.profiles —
|
|
1093
|
+
"Cannot null llm.profiles — cloud profiles would be deleted.",
|
|
1294
1094
|
);
|
|
1295
1095
|
}
|
|
1296
1096
|
const profiles = asMutablePlainObject(llm.profiles);
|
|
@@ -1302,23 +1102,23 @@ export function rejectManagedProfileDeletion(
|
|
|
1302
1102
|
if (profiles[name] !== null || !MANAGED_PROFILE_NAMES.has(name)) {
|
|
1303
1103
|
continue;
|
|
1304
1104
|
}
|
|
1305
|
-
// Only block deletion when the on-disk entry is Cadet
|
|
1306
|
-
// user-owned profile sharing a
|
|
1105
|
+
// Only block deletion when the on-disk entry is Cadet Cloud. A
|
|
1106
|
+
// user-owned profile sharing a cloud name carries a non-managed `source`
|
|
1307
1107
|
// and is freely deletable.
|
|
1308
1108
|
const existing = asMutablePlainObject(existingProfiles[name]);
|
|
1309
1109
|
if (existing?.source === "managed") {
|
|
1310
|
-
throw new BadRequestError(`Cannot delete
|
|
1110
|
+
throw new BadRequestError(`Cannot delete cloud profile "${name}".`);
|
|
1311
1111
|
}
|
|
1312
1112
|
}
|
|
1313
1113
|
}
|
|
1314
1114
|
|
|
1315
1115
|
/**
|
|
1316
|
-
* Enforce the
|
|
1116
|
+
* Enforce the cloud-profile invariants at the config-write choke point.
|
|
1317
1117
|
*
|
|
1318
1118
|
* Protects the thin managed stubs (`INVARIANT_PROFILE_NAMES`) that live in
|
|
1319
1119
|
* workspace config. Default profile CONTENT is code-owned and only exists on
|
|
1320
1120
|
* the wire, so the guard's job is the stub itself: it checks entries present
|
|
1321
|
-
* in the OLD config, and `
|
|
1121
|
+
* in the OLD config, and `normalizeCloudProfileWrites` reduces incoming
|
|
1322
1122
|
* managed entries to the workspace-owned fields before this comparison runs.
|
|
1323
1123
|
*
|
|
1324
1124
|
* Invariance is gated on managed ownership: a name is enforced only when the
|
|
@@ -1327,7 +1127,7 @@ export function rejectManagedProfileDeletion(
|
|
|
1327
1127
|
* is real and supported, because the flag-gated reconcile refuses to
|
|
1328
1128
|
* overwrite a same-named user profile.
|
|
1329
1129
|
*
|
|
1330
|
-
* For each invariant name where the OLD raw config carries a
|
|
1130
|
+
* For each invariant name where the OLD raw config carries a cloud-source
|
|
1331
1131
|
* plain-object entry at `llm.profiles[name]`:
|
|
1332
1132
|
*
|
|
1333
1133
|
* - The NEW raw config must still carry a plain-object entry at the same
|
|
@@ -1376,17 +1176,17 @@ function assertInvariantProfilesPreserved(
|
|
|
1376
1176
|
: null;
|
|
1377
1177
|
if (!newEntry) {
|
|
1378
1178
|
throw new BadRequestError(
|
|
1379
|
-
`Cannot delete or replace
|
|
1179
|
+
`Cannot delete or replace cloud profile "${name}". Cloud profiles are read-only.`,
|
|
1380
1180
|
);
|
|
1381
1181
|
}
|
|
1382
1182
|
|
|
1383
1183
|
if (!isDeepStrictEqual(oldEntry.status, newEntry.status)) {
|
|
1384
1184
|
if (newEntry.status === "disabled") {
|
|
1385
|
-
throw new BadRequestError(`Cannot disable
|
|
1185
|
+
throw new BadRequestError(`Cannot disable cloud profile "${name}".`);
|
|
1386
1186
|
}
|
|
1387
1187
|
if (newEntry.status !== "active" && newEntry.status != null) {
|
|
1388
1188
|
throw new BadRequestError(
|
|
1389
|
-
`Cannot set status ${JSON.stringify(newEntry.status)} on
|
|
1189
|
+
`Cannot set status ${JSON.stringify(newEntry.status)} on cloud profile "${name}". ` +
|
|
1390
1190
|
`Only re-enabling (status "active") is allowed.`,
|
|
1391
1191
|
);
|
|
1392
1192
|
}
|
|
@@ -1402,8 +1202,8 @@ function assertInvariantProfilesPreserved(
|
|
|
1402
1202
|
);
|
|
1403
1203
|
if (changedKeys.length > 0) {
|
|
1404
1204
|
throw new BadRequestError(
|
|
1405
|
-
`Cannot edit
|
|
1406
|
-
`
|
|
1205
|
+
`Cannot edit cloud profile "${name}" fields [${changedKeys.join(", ")}]. ` +
|
|
1206
|
+
`Cloud profiles are read-only; duplicate to a custom profile to customize.`,
|
|
1407
1207
|
);
|
|
1408
1208
|
}
|
|
1409
1209
|
}
|
|
@@ -1561,8 +1361,8 @@ function assertRoutableIdentityEntries(
|
|
|
1561
1361
|
function assertCodeOwnedFallbackProfiles(raw: Record<string, unknown>): void {
|
|
1562
1362
|
const llm = readPlainObject(raw.llm);
|
|
1563
1363
|
const profiles = readPlainObject(llm?.profiles);
|
|
1564
|
-
// The sibling `llm.default` decides whether the
|
|
1565
|
-
// fallback targets: they resolve on the
|
|
1364
|
+
// The sibling `llm.default` decides whether the cloud backups are valid
|
|
1365
|
+
// fallback targets: they resolve on the cloud column alone.
|
|
1566
1366
|
const issues = collectFallbackProfileIssues(
|
|
1567
1367
|
profiles ?? undefined,
|
|
1568
1368
|
llm?.default,
|
|
@@ -1703,8 +1503,8 @@ async function handlePatchConfig({ body }: RouteHandlerArgs) {
|
|
|
1703
1503
|
throw new BadRequestError(chatSettings.error.message);
|
|
1704
1504
|
}
|
|
1705
1505
|
stripWireOnlyProfileKeys(body);
|
|
1706
|
-
|
|
1707
|
-
|
|
1506
|
+
normalizeCloudProfileWrites(body);
|
|
1507
|
+
rejectCloudProfileDeletion(body as Record<string, unknown>);
|
|
1708
1508
|
rejectMcpTransportHeaderWrite(body);
|
|
1709
1509
|
stripMcpFromConfigWrite(body as Record<string, unknown>);
|
|
1710
1510
|
|
|
@@ -1772,24 +1572,24 @@ async function handleSetConfig({ body }: RouteHandlerArgs) {
|
|
|
1772
1572
|
) {
|
|
1773
1573
|
return { ok: true };
|
|
1774
1574
|
}
|
|
1775
|
-
// Build the equivalent patch shape so the
|
|
1575
|
+
// Build the equivalent patch shape so the cloud-profile guard can
|
|
1776
1576
|
// inspect the touched subtree. `setNestedValue` places `value` into
|
|
1777
1577
|
// `patchShape` by reference, so stripping wire-only profile keys here
|
|
1778
1578
|
// also strips the object written to `raw` below.
|
|
1779
1579
|
const patchShape: Record<string, unknown> = {};
|
|
1780
1580
|
setNestedValue(patchShape, path, value);
|
|
1781
1581
|
stripWireOnlyProfileKeys(patchShape);
|
|
1782
|
-
|
|
1783
|
-
|
|
1582
|
+
normalizeCloudProfileWrites(patchShape);
|
|
1583
|
+
rejectCloudProfileDeletion(patchShape);
|
|
1784
1584
|
rejectMcpConfigSetPath(path, value);
|
|
1785
1585
|
rejectMcpTransportHeaderWrite(patchShape);
|
|
1786
1586
|
|
|
1787
1587
|
const raw = loadRawConfig();
|
|
1788
1588
|
// A SET below the entry level (`llm.profiles.<name>.<leaf>`) writes the
|
|
1789
1589
|
// primitive leaf directly into `raw`, bypassing the by-reference
|
|
1790
|
-
// normalization above — creating an entry for a
|
|
1590
|
+
// normalization above — creating an entry for a cloud-owned name would
|
|
1791
1591
|
// leave it source-less, and a source-less entry reads as a user shadow
|
|
1792
|
-
// that blocks the catalog body. Stamp the
|
|
1592
|
+
// that blocks the catalog body. Stamp the cloud marker onto the written
|
|
1793
1593
|
// entry when the name was absent or managed-owned before this write.
|
|
1794
1594
|
const managedEntryName =
|
|
1795
1595
|
pathSegments[0] === "llm" &&
|
|
@@ -1890,12 +1690,12 @@ async function handleReplaceInferenceProfile({
|
|
|
1890
1690
|
throw new BadRequestError(`Invalid profile fragment: ${detail}`);
|
|
1891
1691
|
}
|
|
1892
1692
|
// A managed name with no existing entry stays protected so users can't
|
|
1893
|
-
// shadow a seeded
|
|
1693
|
+
// shadow a seeded cloud profile. An existing entry carrying a non-managed
|
|
1894
1694
|
// `source` is user-owned and remains fully editable.
|
|
1895
1695
|
const existingProfile = asMutablePlainObject(
|
|
1896
1696
|
getConfig().llm.profiles?.[name],
|
|
1897
1697
|
);
|
|
1898
|
-
const
|
|
1698
|
+
const isCloud =
|
|
1899
1699
|
MANAGED_PROFILE_NAMES.has(name) &&
|
|
1900
1700
|
(existingProfile == null || existingProfile.source === "managed");
|
|
1901
1701
|
if (CODE_OWNED_PROFILE_NAMES.has(name)) {
|
|
@@ -1924,11 +1724,11 @@ async function handleReplaceInferenceProfile({
|
|
|
1924
1724
|
`Profile "${name}" is not currently available and cannot be edited.`,
|
|
1925
1725
|
);
|
|
1926
1726
|
}
|
|
1927
|
-
if (
|
|
1928
|
-
//
|
|
1727
|
+
if (isCloud) {
|
|
1728
|
+
// Cloud profiles are daemon-seeded and read-only — the commit guard
|
|
1929
1729
|
// (`assertInvariantProfilesPreserved`) rejects every write to them
|
|
1930
1730
|
// except re-enabling a disabled profile. Enforce the same contract up
|
|
1931
|
-
// front: the only body a
|
|
1731
|
+
// front: the only body a cloud PUT accepts is a pure status re-enable
|
|
1932
1732
|
// (`{status: "active"}`, or `{status: null}` to clear back to
|
|
1933
1733
|
// active-by-absence). Rejecting here keeps the error message ahead of
|
|
1934
1734
|
// any side effects and mirrors the guard's wording.
|
|
@@ -1942,8 +1742,8 @@ async function handleReplaceInferenceProfile({
|
|
|
1942
1742
|
const detail =
|
|
1943
1743
|
disallowed.length > 0 ? ` fields [${disallowed.join(", ")}]` : "";
|
|
1944
1744
|
throw new BadRequestError(
|
|
1945
|
-
`Cannot edit
|
|
1946
|
-
`
|
|
1745
|
+
`Cannot edit cloud profile "${name}"${detail}. ` +
|
|
1746
|
+
`Cloud profiles are read-only (a disabled profile can be re-enabled); ` +
|
|
1947
1747
|
`duplicate to a custom profile to customize.`,
|
|
1948
1748
|
);
|
|
1949
1749
|
}
|
|
@@ -2046,10 +1846,10 @@ async function handleReplaceInferenceProfile({
|
|
|
2046
1846
|
|
|
2047
1847
|
// When the UI sends provider but no provider_connection, derive the connection
|
|
2048
1848
|
// now so the config deep-merge doesn't inherit a stale connection from the
|
|
2049
|
-
// default layer. Managed entries are excluded: the
|
|
1849
|
+
// default layer. Managed entries are excluded: the cloud gate above
|
|
2050
1850
|
// already rejected any provider-carrying fragment, so their only surviving
|
|
2051
1851
|
// body is a status re-enable, which derives no connection. A user-owned
|
|
2052
|
-
// profile sharing a
|
|
1852
|
+
// profile sharing a cloud name is fully editable, so it takes the
|
|
2053
1853
|
// derivation like any other custom profile.
|
|
2054
1854
|
const fragment = parsed.data as Record<string, unknown>;
|
|
2055
1855
|
// Routing identities resolve their connection per-request from the
|
|
@@ -2057,7 +1857,7 @@ async function handleReplaceInferenceProfile({
|
|
|
2057
1857
|
// ("cadet" is its stored provider) or create a junk "<identity>-personal"
|
|
2058
1858
|
// connection for chatgpt.
|
|
2059
1859
|
if (
|
|
2060
|
-
!
|
|
1860
|
+
!isCloud &&
|
|
2061
1861
|
fragment.provider &&
|
|
2062
1862
|
!fragment.provider_connection &&
|
|
2063
1863
|
!ROUTING_IDENTITY_PROVIDERS.has(fragment.provider as string)
|
|
@@ -2074,12 +1874,12 @@ async function handleReplaceInferenceProfile({
|
|
|
2074
1874
|
if (active) {
|
|
2075
1875
|
fragment.provider_connection = active.name;
|
|
2076
1876
|
} else if (
|
|
2077
|
-
|
|
2078
|
-
getConnection(db,
|
|
1877
|
+
CLOUD_ROUTABLE_PROVIDERS.has(provider) &&
|
|
1878
|
+
getConnection(db, CADET_CLOUD_CONNECTION_NAME)
|
|
2079
1879
|
) {
|
|
2080
|
-
// Managed-routable providers are served by the single Cadet
|
|
1880
|
+
// Managed-routable providers are served by the single Cadet Cloud
|
|
2081
1881
|
// connection; prefer it over lazily creating a personal connection.
|
|
2082
|
-
fragment.provider_connection =
|
|
1882
|
+
fragment.provider_connection = CADET_CLOUD_CONNECTION_NAME;
|
|
2083
1883
|
} else if (!PROVIDERS_REQUIRING_BASE_URL_AND_MODELS.has(provider)) {
|
|
2084
1884
|
const connectionName = `${provider}-personal`;
|
|
2085
1885
|
const isKeyless = provider === "ollama";
|
|
@@ -2100,13 +1900,13 @@ async function handleReplaceInferenceProfile({
|
|
|
2100
1900
|
}
|
|
2101
1901
|
|
|
2102
1902
|
const raw = loadRawConfig();
|
|
2103
|
-
if (
|
|
1903
|
+
if (isCloud) {
|
|
2104
1904
|
// Partial overlay: keep every existing key intact, only apply the status
|
|
2105
|
-
// re-enable (the sole body the
|
|
1905
|
+
// re-enable (the sole body the cloud gate above admits). Using
|
|
2106
1906
|
// `replaceInferenceProfileConfig` here would wipe the seed-owned fields
|
|
2107
1907
|
// (provider, model, advanced params) because that function assumes the
|
|
2108
1908
|
// body carries the full UI surface.
|
|
2109
|
-
|
|
1909
|
+
applyCloudProfileReenable(raw, name, fragment.status as "active" | null);
|
|
2110
1910
|
} else {
|
|
2111
1911
|
replaceInferenceProfileConfig(raw, name, fragment);
|
|
2112
1912
|
}
|
|
@@ -2115,7 +1915,7 @@ async function handleReplaceInferenceProfile({
|
|
|
2115
1915
|
// `handleSetConfig`: file-watcher suppression so the in-process reload
|
|
2116
1916
|
// doesn't race the explicit reinit, embedding backend cache clear,
|
|
2117
1917
|
// in-process `getConfig` cache invalidation, and provider registry
|
|
2118
|
-
// reinitialization. `status: "disabled"` on a
|
|
1918
|
+
// reinitialization. `status: "disabled"` on a cloud profile (and any
|
|
2119
1919
|
// `provider` / `model` / `provider_connection` change on a custom
|
|
2120
1920
|
// profile) must take effect immediately rather than waiting for the
|
|
2121
1921
|
// next watcher tick.
|
|
@@ -2124,11 +1924,11 @@ async function handleReplaceInferenceProfile({
|
|
|
2124
1924
|
}
|
|
2125
1925
|
|
|
2126
1926
|
/**
|
|
2127
|
-
* Apply the disabled→active re-enable to a
|
|
1927
|
+
* Apply the disabled→active re-enable to a cloud profile entry, preserving
|
|
2128
1928
|
* every other field already on disk (provider, model, advanced params, etc).
|
|
2129
1929
|
* `status: "active"` sets the key; `null` clears it (active-by-absence).
|
|
2130
1930
|
*/
|
|
2131
|
-
function
|
|
1931
|
+
function applyCloudProfileReenable(
|
|
2132
1932
|
raw: Record<string, unknown>,
|
|
2133
1933
|
name: string,
|
|
2134
1934
|
status: "active" | null,
|
|
@@ -2149,7 +1949,7 @@ function applyManagedProfileReenable(
|
|
|
2149
1949
|
...(asMutablePlainObject(profiles[name]) ?? {}),
|
|
2150
1950
|
};
|
|
2151
1951
|
// Only reached for managed-owned names (the route's managed gate), so a
|
|
2152
|
-
// freshly created stub must carry the
|
|
1952
|
+
// freshly created stub must carry the cloud marker the effective view
|
|
2153
1953
|
// and write guards key on.
|
|
2154
1954
|
nextProfile.source = "managed";
|
|
2155
1955
|
if (status === null) {
|