@mycadet/assistant 0.12.7 → 0.12.9
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 +2 -2
- 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/package.json +1 -1
- package/node_modules/@mycadet/ces-client/src/__tests__/ces-client.test.ts +14 -14
- 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 +2 -2
- 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 +2 -2
- 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 +6804 -799
- 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} +77 -75
- 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-set-route.test.ts +12 -8
- 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 +28 -40
- 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 +134 -288
- 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 +1 -2
- package/src/__tests__/mcp-client-auth.test.ts +1 -2
- package/src/__tests__/mcp-config-secret-boundary.test.ts +44 -40
- package/src/__tests__/mcp-tool-annotations-risk.test.ts +1 -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-store-credential.test.ts +4 -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 +222 -536
- package/src/__tests__/skills-files-catalog-fallback.test.ts +259 -577
- 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-cloud-login.ts +18 -0
- 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__/callback-routes-list.test.ts +2 -2
- 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/cloud/index.ts +1 -1
- package/src/cli/commands/config.ts +2 -2
- 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__/substrate-twin-shadowing.test.ts +36 -26
- 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 +21 -26
- 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 +29 -10
- package/src/config/schemas/llm.ts +36 -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/substrate-twin-shadowing.ts +12 -17
- package/src/config/sync-gated-profiles.ts +8 -9
- 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 +2 -23
- package/src/credential-health/credential-health-service.ts +59 -70
- 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 +32 -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/__tests__/memory-tier-boundary-guard.test.ts +5 -0
- 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 +126 -82
- 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} +86 -119
- package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +345 -667
- 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 +20 -61
- 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 +2 -20
- 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/layout.ts +479 -0
- package/src/util/oom-priority.ts +1 -1
- package/src/util/platform.ts +12 -468
- 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 +6 -6
- 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/api/events/show-platform-login.ts +0 -20
- 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
|
@@ -22,8 +22,8 @@ mock.module("../../../util/process-tree.js", () => ({
|
|
|
22
22
|
},
|
|
23
23
|
buildProcessTree: (_procs: ProcInfo[], rootPid: number): ProcTreeNode => ({
|
|
24
24
|
pid: rootPid,
|
|
25
|
-
name: "
|
|
26
|
-
command: "bun run
|
|
25
|
+
name: "daemon-main",
|
|
26
|
+
command: "bun run /app/daemon/main.ts",
|
|
27
27
|
origin: "workspace",
|
|
28
28
|
children: [
|
|
29
29
|
{
|
|
@@ -81,7 +81,9 @@ describe("ps route handler", () => {
|
|
|
81
81
|
|
|
82
82
|
expect(processes).toHaveLength(1);
|
|
83
83
|
const root = processes[0];
|
|
84
|
-
|
|
84
|
+
// The route must surface the daemon's node as "assistant", not the
|
|
85
|
+
// entry-script name the tree builder derives ("daemon-main").
|
|
86
|
+
expect(root.name).toBe("assistant");
|
|
85
87
|
expect(root.status).toBe("running");
|
|
86
88
|
expect(root.info).toBe(`pid ${process.pid}`);
|
|
87
89
|
expect(root.children).toHaveLength(2);
|
|
@@ -9,14 +9,14 @@ import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
|
|
|
9
9
|
import { UnprocessableEntityError } from "../errors.js";
|
|
10
10
|
import type { RouteDefinition } from "../types.js";
|
|
11
11
|
|
|
12
|
-
let
|
|
12
|
+
let cloudBaseUrl = "https://cloud.mycadet.ai";
|
|
13
13
|
|
|
14
14
|
// Spread the real module: replacing it wholesale strips the other exports the
|
|
15
15
|
// route graph pulls in.
|
|
16
16
|
const actualEnv = await import("../../../config/env.js");
|
|
17
17
|
mock.module("../../../config/env.js", () => ({
|
|
18
18
|
...actualEnv,
|
|
19
|
-
|
|
19
|
+
getCloudBaseUrl: () => cloudBaseUrl,
|
|
20
20
|
}));
|
|
21
21
|
|
|
22
22
|
import { useMemorySecureKeys } from "../../../__tests__/helpers/secure-keys.js";
|
|
@@ -90,7 +90,7 @@ const UPSTREAM_ITEM = {
|
|
|
90
90
|
|
|
91
91
|
beforeEach(() => {
|
|
92
92
|
secureKeys[ASSISTANT_API_KEY] = "assistant-key";
|
|
93
|
-
|
|
93
|
+
cloudBaseUrl = "https://cloud.mycadet.ai";
|
|
94
94
|
calls = [];
|
|
95
95
|
process.env.CADET_MARKETING_URL = "https://marketing.test";
|
|
96
96
|
process.env.CADET_WEB_URL = "https://web.test";
|
|
@@ -113,8 +113,8 @@ describe("which deployment the roadmap calls reach", () => {
|
|
|
113
113
|
expect(calls[0].url).toBe("https://marketing.mycadet.ai/v1/roadmap");
|
|
114
114
|
});
|
|
115
115
|
|
|
116
|
-
// The deployment is judged by the
|
|
117
|
-
// CADET_ENVIRONMENT: unset, that variable means dev to
|
|
116
|
+
// The deployment is judged by the cloud that issued the key, never by
|
|
117
|
+
// CADET_ENVIRONMENT: unset, that variable means dev to getCloudBaseUrl
|
|
118
118
|
// and local to every launcher, so trusting it would let exactly the assistant
|
|
119
119
|
// with no label post to the real roadmap.
|
|
120
120
|
test.each([
|
|
@@ -124,7 +124,7 @@ describe("which deployment the roadmap calls reach", () => {
|
|
|
124
124
|
])(
|
|
125
125
|
"an unconfigured %s assistant refuses to touch the public roadmap",
|
|
126
126
|
async (baseUrl) => {
|
|
127
|
-
|
|
127
|
+
cloudBaseUrl = baseUrl;
|
|
128
128
|
delete process.env.CADET_MARKETING_URL;
|
|
129
129
|
delete process.env.CADET_ENVIRONMENT;
|
|
130
130
|
stubFetch({ items: [], total: 0 });
|
|
@@ -135,7 +135,7 @@ describe("which deployment the roadmap calls reach", () => {
|
|
|
135
135
|
);
|
|
136
136
|
|
|
137
137
|
test("CADET_ENVIRONMENT=production does not by itself unlock the real roadmap", async () => {
|
|
138
|
-
|
|
138
|
+
cloudBaseUrl = "https://dev-cloud.mycadet.ai";
|
|
139
139
|
delete process.env.CADET_MARKETING_URL;
|
|
140
140
|
process.env.CADET_ENVIRONMENT = "production";
|
|
141
141
|
stubFetch({ items: [], total: 0 });
|
|
@@ -146,7 +146,7 @@ describe("which deployment the roadmap calls reach", () => {
|
|
|
146
146
|
|
|
147
147
|
test("item links point at the deployment the item was read from", async () => {
|
|
148
148
|
// Labelled staging, but authenticating against production: the link has to
|
|
149
|
-
// follow the
|
|
149
|
+
// follow the cloud, or it points at a staging page for a real item.
|
|
150
150
|
process.env.CADET_ENVIRONMENT = "staging";
|
|
151
151
|
delete process.env.CADET_WEB_URL;
|
|
152
152
|
delete process.env.CADET_MARKETING_URL;
|
|
@@ -160,7 +160,7 @@ describe("which deployment the roadmap calls reach", () => {
|
|
|
160
160
|
// A self-hosted platform is not in the seed table, so nothing is known about
|
|
161
161
|
// it: naming its roadmap API says nothing about where its items are rendered.
|
|
162
162
|
test("a self-hosted deployment must name its web origin too", async () => {
|
|
163
|
-
|
|
163
|
+
cloudBaseUrl = "https://platform.self-hosted.example";
|
|
164
164
|
delete process.env.CADET_WEB_URL;
|
|
165
165
|
stubFetch({ items: [], total: 0 });
|
|
166
166
|
|
|
@@ -169,7 +169,7 @@ describe("which deployment the roadmap calls reach", () => {
|
|
|
169
169
|
});
|
|
170
170
|
|
|
171
171
|
test("a self-hosted deployment works once both endpoints are named", async () => {
|
|
172
|
-
|
|
172
|
+
cloudBaseUrl = "https://platform.self-hosted.example";
|
|
173
173
|
stubFetch({ items: [UPSTREAM_ITEM], total: 1 });
|
|
174
174
|
|
|
175
175
|
const result = (await list({})) as { items: { url: string }[] };
|
|
@@ -178,7 +178,7 @@ describe("which deployment the roadmap calls reach", () => {
|
|
|
178
178
|
expect(result.items[0].url).toBe("https://web.test/roadmap/dark-mode");
|
|
179
179
|
});
|
|
180
180
|
|
|
181
|
-
test("a
|
|
181
|
+
test("a cloud change mid-flight cannot fail a create that already published", async () => {
|
|
182
182
|
delete process.env.CADET_MARKETING_URL;
|
|
183
183
|
delete process.env.CADET_WEB_URL;
|
|
184
184
|
globalThis.fetch = (async (
|
|
@@ -186,9 +186,9 @@ describe("which deployment the roadmap calls reach", () => {
|
|
|
186
186
|
_init?: RequestInit,
|
|
187
187
|
): Promise<Response> => {
|
|
188
188
|
// The item is published. Only now is the assistant repointed at a
|
|
189
|
-
// platform with no roadmap deployment, as a concurrent
|
|
190
|
-
//
|
|
191
|
-
|
|
189
|
+
// platform with no roadmap deployment, as a concurrent cloud base
|
|
190
|
+
// URL change would do.
|
|
191
|
+
cloudBaseUrl = "https://platform.self-hosted.example";
|
|
192
192
|
return new Response(
|
|
193
193
|
JSON.stringify({
|
|
194
194
|
slug: "dark-mode",
|
|
@@ -207,7 +207,7 @@ describe("which deployment the roadmap calls reach", () => {
|
|
|
207
207
|
});
|
|
208
208
|
|
|
209
209
|
test("a named endpoint is honored on any deployment", async () => {
|
|
210
|
-
|
|
210
|
+
cloudBaseUrl = "https://dev-cloud.mycadet.ai";
|
|
211
211
|
stubFetch({ items: [], total: 0 });
|
|
212
212
|
|
|
213
213
|
await list({});
|
|
@@ -10,7 +10,7 @@ import { InternalError, UnprocessableEntityError } from "../errors.js";
|
|
|
10
10
|
let isPlatform = false;
|
|
11
11
|
let tunnelWebhooksEnabled = false;
|
|
12
12
|
let config: Record<string, unknown> = {};
|
|
13
|
-
let
|
|
13
|
+
let cloudContextEnabled = false;
|
|
14
14
|
let registerCallbackRouteError: Error | undefined;
|
|
15
15
|
|
|
16
16
|
let localWebhookRouteRegistered = true;
|
|
@@ -34,7 +34,7 @@ const registerLocalWebhookRouteMock = mock(
|
|
|
34
34
|
const actualEnvRegistry = await import("../../../config/env-registry.js");
|
|
35
35
|
mock.module("../../../config/env-registry.js", () => ({
|
|
36
36
|
...actualEnvRegistry,
|
|
37
|
-
|
|
37
|
+
getIsCloud: () => isPlatform,
|
|
38
38
|
}));
|
|
39
39
|
|
|
40
40
|
const actualLoader = await import("../../../config/loader.js");
|
|
@@ -50,16 +50,16 @@ mock.module("../../../inbound/tunnel-webhooks-gate.js", () => ({
|
|
|
50
50
|
isTunnelWebhooksEnabled: () => tunnelWebhooksEnabled,
|
|
51
51
|
}));
|
|
52
52
|
|
|
53
|
-
mock.module("../../../inbound/
|
|
53
|
+
mock.module("../../../inbound/cloud-callback-registration.js", () => ({
|
|
54
54
|
registerCallbackRoute: registerCallbackRouteMock,
|
|
55
55
|
registerLocalWebhookRoute: registerLocalWebhookRouteMock,
|
|
56
|
-
|
|
56
|
+
resolveCloudCallbackRegistrationContext: async () => ({
|
|
57
57
|
isPlatform,
|
|
58
|
-
|
|
59
|
-
assistantId:
|
|
60
|
-
hasAssistantApiKey:
|
|
61
|
-
authHeader:
|
|
62
|
-
enabled:
|
|
58
|
+
cloudBaseUrl: "https://cloud.mycadet.ai",
|
|
59
|
+
assistantId: cloudContextEnabled ? "assistant-123" : "",
|
|
60
|
+
hasAssistantApiKey: cloudContextEnabled,
|
|
61
|
+
authHeader: cloudContextEnabled ? "Api-Key secret" : null,
|
|
62
|
+
enabled: cloudContextEnabled,
|
|
63
63
|
}),
|
|
64
64
|
}));
|
|
65
65
|
|
|
@@ -77,16 +77,16 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
77
77
|
isPlatform = false;
|
|
78
78
|
tunnelWebhooksEnabled = false;
|
|
79
79
|
config = {};
|
|
80
|
-
|
|
80
|
+
cloudContextEnabled = false;
|
|
81
81
|
registerCallbackRouteError = undefined;
|
|
82
82
|
localWebhookRouteRegistered = true;
|
|
83
83
|
registerCallbackRouteMock.mockClear();
|
|
84
84
|
registerLocalWebhookRouteMock.mockClear();
|
|
85
85
|
});
|
|
86
86
|
|
|
87
|
-
test("
|
|
87
|
+
test("cloud pods register with the cloud gateway", async () => {
|
|
88
88
|
isPlatform = true;
|
|
89
|
-
|
|
89
|
+
cloudContextEnabled = true;
|
|
90
90
|
|
|
91
91
|
expect(await register({ type: "telegram" })).toEqual({
|
|
92
92
|
callbackUrl: "https://tunnel.mycadet.ai/assistant-123/webhooks/telegram",
|
|
@@ -97,10 +97,10 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
97
97
|
expect(registerLocalWebhookRouteMock).not.toHaveBeenCalled();
|
|
98
98
|
});
|
|
99
99
|
|
|
100
|
-
// The bug: a local assistant that IS connected to the
|
|
100
|
+
// The bug: a local assistant that IS connected to the cloud used to fall
|
|
101
101
|
// through to the self-hosted branch and 422 when it had no public ingress.
|
|
102
|
-
test("platform-connected local assistant with no ingress gets the
|
|
103
|
-
|
|
102
|
+
test("platform-connected local assistant with no ingress gets the cloud callback URL", async () => {
|
|
103
|
+
cloudContextEnabled = true;
|
|
104
104
|
|
|
105
105
|
expect(await register({ type: "telegram" })).toEqual({
|
|
106
106
|
callbackUrl: "https://tunnel.mycadet.ai/assistant-123/webhooks/telegram",
|
|
@@ -118,7 +118,7 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
118
118
|
test("tunnel-webhooks on: a pod claims the subpath and uses the published URL", async () => {
|
|
119
119
|
isPlatform = true;
|
|
120
120
|
tunnelWebhooksEnabled = true;
|
|
121
|
-
|
|
121
|
+
cloudContextEnabled = true;
|
|
122
122
|
config = {
|
|
123
123
|
ingress: { publicBaseUrl: "https://tunnel.mycadet.ai/assistant-123" },
|
|
124
124
|
};
|
|
@@ -137,10 +137,10 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
137
137
|
expect(registerCallbackRouteMock).not.toHaveBeenCalled();
|
|
138
138
|
});
|
|
139
139
|
|
|
140
|
-
test("tunnel-webhooks on: a refused claim falls back to the
|
|
140
|
+
test("tunnel-webhooks on: a refused claim falls back to the cloud", async () => {
|
|
141
141
|
isPlatform = true;
|
|
142
142
|
tunnelWebhooksEnabled = true;
|
|
143
|
-
|
|
143
|
+
cloudContextEnabled = true;
|
|
144
144
|
localWebhookRouteRegistered = false;
|
|
145
145
|
config = {
|
|
146
146
|
ingress: { publicBaseUrl: "https://tunnel.mycadet.ai/assistant-123" },
|
|
@@ -153,10 +153,10 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
153
153
|
expect(registerLocalWebhookRouteMock).toHaveBeenCalled();
|
|
154
154
|
});
|
|
155
155
|
|
|
156
|
-
test("tunnel-webhooks on: a pod with no published URL still registers with the
|
|
156
|
+
test("tunnel-webhooks on: a pod with no published URL still registers with the cloud", async () => {
|
|
157
157
|
isPlatform = true;
|
|
158
158
|
tunnelWebhooksEnabled = true;
|
|
159
|
-
|
|
159
|
+
cloudContextEnabled = true;
|
|
160
160
|
|
|
161
161
|
expect(await register({ type: "telegram" })).toMatchObject({
|
|
162
162
|
callbackUrl: "https://tunnel.mycadet.ai/assistant-123/webhooks/telegram",
|
|
@@ -165,10 +165,10 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
165
165
|
expect(registerLocalWebhookRouteMock).not.toHaveBeenCalled();
|
|
166
166
|
});
|
|
167
167
|
|
|
168
|
-
test("tunnel-webhooks on: a pod with ingress disabled falls back to the
|
|
168
|
+
test("tunnel-webhooks on: a pod with ingress disabled falls back to the cloud", async () => {
|
|
169
169
|
isPlatform = true;
|
|
170
170
|
tunnelWebhooksEnabled = true;
|
|
171
|
-
|
|
171
|
+
cloudContextEnabled = true;
|
|
172
172
|
config = { ingress: { enabled: false } };
|
|
173
173
|
|
|
174
174
|
expect(await register({ type: "telegram" })).toMatchObject({
|
|
@@ -199,7 +199,7 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
199
199
|
// A logged-in local assistant holds platform credentials for the LLM proxy,
|
|
200
200
|
// so credential presence must not override an explicitly configured tunnel.
|
|
201
201
|
test("a configured publicBaseUrl wins over platform connectivity", async () => {
|
|
202
|
-
|
|
202
|
+
cloudContextEnabled = true;
|
|
203
203
|
config = { ingress: { publicBaseUrl: "https://abc.ngrok.io" } };
|
|
204
204
|
|
|
205
205
|
expect(await register({ type: "telegram" })).toMatchObject({
|
|
@@ -214,7 +214,7 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
214
214
|
// a tunneled platform-connected assistant already resolves to a stable
|
|
215
215
|
// platform-owned URL through the ingress tier.
|
|
216
216
|
test("a Tunnel-managed publicBaseUrl resolves through the ingress tier", async () => {
|
|
217
|
-
|
|
217
|
+
cloudContextEnabled = true;
|
|
218
218
|
config = {
|
|
219
219
|
ingress: {
|
|
220
220
|
publicBaseUrl: "https://tunnel.mycadet.ai/assistant-123",
|
|
@@ -231,8 +231,8 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
231
231
|
});
|
|
232
232
|
});
|
|
233
233
|
|
|
234
|
-
test("explicitly disabled ingress is not routed around via the
|
|
235
|
-
|
|
234
|
+
test("explicitly disabled ingress is not routed around via the cloud", async () => {
|
|
235
|
+
cloudContextEnabled = true;
|
|
236
236
|
config = { ingress: { enabled: false } };
|
|
237
237
|
|
|
238
238
|
await expect(register({ type: "telegram" })).rejects.toBeInstanceOf(
|
|
@@ -241,8 +241,8 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
241
241
|
expect(registerCallbackRouteMock).not.toHaveBeenCalled();
|
|
242
242
|
});
|
|
243
243
|
|
|
244
|
-
test("the source identifier is forwarded to the
|
|
245
|
-
|
|
244
|
+
test("the source identifier is forwarded to the cloud registration", async () => {
|
|
245
|
+
cloudContextEnabled = true;
|
|
246
246
|
|
|
247
247
|
await register({ type: "telegram", source: "@my_bot" });
|
|
248
248
|
|
|
@@ -254,7 +254,7 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
254
254
|
});
|
|
255
255
|
|
|
256
256
|
test("a failed platform registration surfaces as a 500", async () => {
|
|
257
|
-
|
|
257
|
+
cloudContextEnabled = true;
|
|
258
258
|
registerCallbackRouteError = new Error(
|
|
259
259
|
"Platform callback route registration failed (HTTP 502)",
|
|
260
260
|
);
|
|
@@ -265,7 +265,7 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
265
265
|
});
|
|
266
266
|
|
|
267
267
|
test("a missing platform registration context surfaces as a 422", async () => {
|
|
268
|
-
|
|
268
|
+
cloudContextEnabled = true;
|
|
269
269
|
registerCallbackRouteError = new Error(
|
|
270
270
|
"Platform callbacks not available — missing platform registration context",
|
|
271
271
|
);
|
|
@@ -276,7 +276,7 @@ describe("webhooks_register callback URL resolution", () => {
|
|
|
276
276
|
});
|
|
277
277
|
|
|
278
278
|
test("a path override replaces the derived webhook path", async () => {
|
|
279
|
-
|
|
279
|
+
cloudContextEnabled = true;
|
|
280
280
|
|
|
281
281
|
expect(
|
|
282
282
|
await register({ type: "custom", path: "webhooks/my-provider" }),
|
|
@@ -528,7 +528,7 @@ async function importBundle(
|
|
|
528
528
|
let bundleBytes: Uint8Array;
|
|
529
529
|
const contentType = headers["content-type"] ?? "";
|
|
530
530
|
if (contentType.includes("multipart/form-data")) {
|
|
531
|
-
// Reconstruct a Request to use the
|
|
531
|
+
// Reconstruct a Request to use the cloud's multipart parser
|
|
532
532
|
const syntheticReq = new Request("http://localhost", {
|
|
533
533
|
method: "POST",
|
|
534
534
|
headers: { "content-type": contentType },
|
|
@@ -207,7 +207,7 @@ async function handleMultipartUpload(
|
|
|
207
207
|
);
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
// Reconstruct a Request to use the
|
|
210
|
+
// Reconstruct a Request to use the cloud's multipart parser.
|
|
211
211
|
const syntheticReq = new Request("http://localhost", {
|
|
212
212
|
method: "POST",
|
|
213
213
|
headers: { "content-type": headers["content-type"] ?? "" },
|
|
@@ -7,17 +7,17 @@
|
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
getCloudAssistantId,
|
|
11
|
+
getCloudBaseUrl,
|
|
12
|
+
getCloudOrganizationId,
|
|
13
|
+
getCloudUserId,
|
|
14
14
|
} from "../../config/env.js";
|
|
15
|
-
import {
|
|
15
|
+
import { resolveCloudProxyContext } from "../../providers/cloud-proxy/context.js";
|
|
16
16
|
import { ACTOR_PRINCIPALS } from "../auth/route-policy.js";
|
|
17
17
|
import type { RouteDefinition, RouteHandlerArgs } from "./types.js";
|
|
18
18
|
|
|
19
19
|
interface AuthInfoResult {
|
|
20
|
-
|
|
20
|
+
cloudUrl: string | null;
|
|
21
21
|
assistantId: string | null;
|
|
22
22
|
organizationId: string | null;
|
|
23
23
|
userId: string | null;
|
|
@@ -28,16 +28,16 @@ interface AuthInfoResult {
|
|
|
28
28
|
async function handleAuthInfo(
|
|
29
29
|
_args: RouteHandlerArgs,
|
|
30
30
|
): Promise<AuthInfoResult> {
|
|
31
|
-
const ctx = await
|
|
31
|
+
const ctx = await resolveCloudProxyContext();
|
|
32
32
|
|
|
33
|
-
const
|
|
34
|
-
const assistantId =
|
|
35
|
-
const organizationId =
|
|
36
|
-
const userId =
|
|
33
|
+
const cloudUrl = getCloudBaseUrl();
|
|
34
|
+
const assistantId = getCloudAssistantId();
|
|
35
|
+
const organizationId = getCloudOrganizationId();
|
|
36
|
+
const userId = getCloudUserId();
|
|
37
37
|
const authenticated = ctx.enabled;
|
|
38
38
|
|
|
39
39
|
const result: AuthInfoResult = {
|
|
40
|
-
|
|
40
|
+
cloudUrl: cloudUrl || null,
|
|
41
41
|
assistantId: assistantId || null,
|
|
42
42
|
organizationId: organizationId || null,
|
|
43
43
|
userId: userId || null,
|
|
@@ -45,7 +45,7 @@ async function handleAuthInfo(
|
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
if (!authenticated) {
|
|
48
|
-
result.message = !
|
|
48
|
+
result.message = !cloudUrl
|
|
49
49
|
? "Platform URL not configured. Run assistant config set platform.baseUrl <url>"
|
|
50
50
|
: "Assistant API key not found. Store one with: assistant keys set credential/cadet/assistant_api_key <key>";
|
|
51
51
|
}
|
|
@@ -67,7 +67,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
67
67
|
"Returns platform identity and authentication status for this assistant.",
|
|
68
68
|
tags: ["auth"],
|
|
69
69
|
responseBody: z.object({
|
|
70
|
-
|
|
70
|
+
cloudUrl: z.string().nullable(),
|
|
71
71
|
assistantId: z.string().nullable(),
|
|
72
72
|
organizationId: z.string().nullable(),
|
|
73
73
|
userId: z.string().nullable(),
|
|
@@ -32,9 +32,6 @@ import {
|
|
|
32
32
|
ensureAvatarRasterPath,
|
|
33
33
|
} from "../../avatar/ensure-raster.js";
|
|
34
34
|
import type { CharacterTraits } from "../../avatar/traits-png-sync.js";
|
|
35
|
-
import { setPlatformBaseUrl } from "../../config/env.js";
|
|
36
|
-
import { credentialKey } from "../../security/credential-key.js";
|
|
37
|
-
import { getSecureKeyAsync } from "../../security/secure-keys.js";
|
|
38
35
|
import { detectMediaType } from "../../tools/shared/filesystem/image-read.js";
|
|
39
36
|
import { generateAvatarImage } from "../../tools/system/avatar-generator.js";
|
|
40
37
|
import { getLogger } from "../../util/logger.js";
|
|
@@ -178,17 +175,6 @@ async function handleGenerateAvatar({ body, headers }: RouteHandlerArgs) {
|
|
|
178
175
|
throw new BadRequestError("description is required");
|
|
179
176
|
}
|
|
180
177
|
|
|
181
|
-
// Rehydrate platform base URL from credential store
|
|
182
|
-
try {
|
|
183
|
-
const key = credentialKey("cadet", "platform_base_url");
|
|
184
|
-
const persisted = await getSecureKeyAsync(key);
|
|
185
|
-
if (persisted) {
|
|
186
|
-
setPlatformBaseUrl(persisted);
|
|
187
|
-
}
|
|
188
|
-
} catch {
|
|
189
|
-
// Non-fatal
|
|
190
|
-
}
|
|
191
|
-
|
|
192
178
|
const result = await generateAvatarImage(description);
|
|
193
179
|
if (result.isError || !result.pngBuffer) {
|
|
194
180
|
throw new ServiceUnavailableError(result.content);
|
|
@@ -20,7 +20,7 @@ import type { RouteDefinition, RouteHandlerArgs } from "./types.js";
|
|
|
20
20
|
/** The scheduler and heartbeat surface the drain-due lease needs. */
|
|
21
21
|
type BackgroundWakeRuntime = {
|
|
22
22
|
scheduler: Pick<SchedulerHandle, "runOnce" | "runDueWorkOnce">;
|
|
23
|
-
heartbeat: Pick<HeartbeatService, "nextRunAt" | "
|
|
23
|
+
heartbeat: Pick<HeartbeatService, "nextRunAt" | "runCloudWakeIfDue">;
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
const PREPARE_SLEEP_DEFER_WINDOW_MS = 60_000;
|
|
@@ -127,7 +127,7 @@ function parseDrainDueBody(body: Record<string, unknown>): DrainDueRequest {
|
|
|
127
127
|
|
|
128
128
|
async function defaultRenewWakeLease(leaseId: string): Promise<unknown> {
|
|
129
129
|
const { renewBackgroundWakeLease } =
|
|
130
|
-
await import("../../background-wake/
|
|
130
|
+
await import("../../background-wake/cloud-client.js");
|
|
131
131
|
return renewBackgroundWakeLease(leaseId);
|
|
132
132
|
}
|
|
133
133
|
|
|
@@ -135,7 +135,7 @@ async function defaultCompleteWakeLease(
|
|
|
135
135
|
args: Parameters<CompleteWakeLease>[0],
|
|
136
136
|
): Promise<unknown> {
|
|
137
137
|
const { completeBackgroundWakeLease } =
|
|
138
|
-
await import("../../background-wake/
|
|
138
|
+
await import("../../background-wake/cloud-client.js");
|
|
139
139
|
return completeBackgroundWakeLease(args);
|
|
140
140
|
}
|
|
141
141
|
|
|
@@ -242,7 +242,7 @@ async function performDrainDue(
|
|
|
242
242
|
|
|
243
243
|
if (heartbeatDue) {
|
|
244
244
|
if (hasStartBudget(request.deadlineAt)) {
|
|
245
|
-
await runtime.heartbeat.
|
|
245
|
+
await runtime.heartbeat.runCloudWakeIfDue({
|
|
246
246
|
now,
|
|
247
247
|
toleranceMs: HEARTBEAT_DUE_TOLERANCE_MS,
|
|
248
248
|
scheduledFor: request.startedAt,
|
|
@@ -41,11 +41,11 @@ const BASE_AVAILABLE_CHANNELS: readonly ChannelId[] = [
|
|
|
41
41
|
] as const;
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
|
-
* Best-effort check that email is configured for this assistant: a
|
|
45
|
-
* inbox registered on the
|
|
46
|
-
* (whose gateway webhook routes carry inbound just as the
|
|
44
|
+
* Best-effort check that email is configured for this assistant: a cloud
|
|
45
|
+
* inbox registered on the cloud, or a "your own" provider credential
|
|
46
|
+
* (whose gateway webhook routes carry inbound just as the cloud pipeline
|
|
47
47
|
* does). An unavailable platform is treated as "no inbox": we prefer to
|
|
48
|
-
* under-report than block the entire Contacts page when the
|
|
48
|
+
* under-report than block the entire Contacts page when the cloud is
|
|
49
49
|
* briefly unreachable.
|
|
50
50
|
*
|
|
51
51
|
* Fresh, preserving this route's long-standing live-read-per-request
|
|
@@ -95,7 +95,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
95
95
|
// — fail-closed is the right default for this security boundary.
|
|
96
96
|
// Dev-bypass mode (DISABLE_HTTP_AUTH=true, mirroring
|
|
97
97
|
// require-bound-guardian.ts) preserves the previous "return all" behavior
|
|
98
|
-
// for
|
|
98
|
+
// for cloud-managed deployments where the cloud handles auth.
|
|
99
99
|
const callerPrincipalId = headers?.["x-cadet-actor-principal-id"];
|
|
100
100
|
const filtered = isHttpAuthDisabled()
|
|
101
101
|
? clients
|
|
@@ -274,8 +274,8 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
274
274
|
// spoof that desktop. Clients with no stored `actorPrincipalId` (legacy
|
|
275
275
|
// SSE subscribers, service-gateway tokens) never match: fail-closed, the
|
|
276
276
|
// same posture as the listing filter above. Dev-bypass mode
|
|
277
|
-
// (DISABLE_HTTP_AUTH=true) skips the check for
|
|
278
|
-
// deployments where the
|
|
277
|
+
// (DISABLE_HTTP_AUTH=true) skips the check for cloud-managed
|
|
278
|
+
// deployments where the cloud handles auth.
|
|
279
279
|
if (!isHttpAuthDisabled()) {
|
|
280
280
|
const callerPrincipalId = headers?.["x-cadet-actor-principal-id"];
|
|
281
281
|
const ownerPrincipalId = client.actorPrincipalId;
|
|
@@ -371,8 +371,8 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
371
371
|
// spoof that tab. Clients with no stored `actorPrincipalId` (legacy SSE
|
|
372
372
|
// subscribers, service-gateway tokens) never match: fail-closed, the
|
|
373
373
|
// same posture as `report_client_presence`. Dev-bypass mode
|
|
374
|
-
// (DISABLE_HTTP_AUTH=true) skips the check for
|
|
375
|
-
// deployments where the
|
|
374
|
+
// (DISABLE_HTTP_AUTH=true) skips the check for cloud-managed
|
|
375
|
+
// deployments where the cloud handles auth.
|
|
376
376
|
if (!isHttpAuthDisabled()) {
|
|
377
377
|
const callerPrincipalId = headers?.["x-cadet-actor-principal-id"];
|
|
378
378
|
const ownerPrincipalId = client.actorPrincipalId;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The credential Cadet Cloud provisions onto a cloud assistant pod for
|
|
3
|
+
* its own use: the API key the daemon authenticates to the cloud LLM proxy
|
|
4
|
+
* with.
|
|
5
|
+
*
|
|
6
|
+
* The cloud writes it over `POST /v1/secrets`, and the daemon, the
|
|
7
|
+
* gateway, and CES read it straight out of the vault. The user never sets it
|
|
8
|
+
* through the credentials API and can do nothing useful with it there, so
|
|
9
|
+
* that API treats it as neither readable nor writable: omitted from listings,
|
|
10
|
+
* and refused by inspect, reveal, set, and delete, whatever the calling
|
|
11
|
+
* principal.
|
|
12
|
+
*
|
|
13
|
+
* The key spends inference on Cadet's account; the host it is sent to
|
|
14
|
+
* resolves from config or the `CADET_CLOUD_URL` environment variable, so
|
|
15
|
+
* there is no stored URL credential to guard alongside it.
|
|
16
|
+
*/
|
|
17
|
+
// The cloud pushes the pre-rebrand display name ("cadet:*"); the
|
|
18
|
+
// canonical storage service is "cadet".
|
|
19
|
+
const MANAGED_PROXY_CREDENTIALS = [
|
|
20
|
+
{ service: "cadet", field: "assistant_api_key" },
|
|
21
|
+
] as const;
|
|
22
|
+
|
|
23
|
+
export function isPlatformCloudCredential(
|
|
24
|
+
service: string,
|
|
25
|
+
field: string,
|
|
26
|
+
): boolean {
|
|
27
|
+
return MANAGED_PROXY_CREDENTIALS.some(
|
|
28
|
+
(c) => c.service === service && c.field === field,
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** What a caller was trying to do with a cloud credential. */
|
|
33
|
+
export type PlatformCloudCredentialAction = "read" | "change";
|
|
34
|
+
|
|
35
|
+
/** Message the credentials API refuses one of these with. */
|
|
36
|
+
export function platformCloudCredentialRefusal(
|
|
37
|
+
service: string | undefined,
|
|
38
|
+
field: string | undefined,
|
|
39
|
+
action: PlatformCloudCredentialAction,
|
|
40
|
+
): string {
|
|
41
|
+
const name = service && field ? `${service}:${field}` : "This credential";
|
|
42
|
+
const verb =
|
|
43
|
+
action === "read" ? "inspected or revealed" : "changed or deleted";
|
|
44
|
+
return `${name} is provisioned and owned by Cadet Cloud. It cannot be ${verb} through the credentials API.`;
|
|
45
|
+
}
|