@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
|
@@ -11,19 +11,19 @@
|
|
|
11
11
|
|
|
12
12
|
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
13
13
|
|
|
14
|
+
import type { CadetCloudClient } from "../../../cloud/client.js";
|
|
15
|
+
import {
|
|
16
|
+
CloudOAuthConnection,
|
|
17
|
+
CredentialRequiredError,
|
|
18
|
+
InsufficientBalanceError,
|
|
19
|
+
ProviderUnreachableError,
|
|
20
|
+
} from "../../../oauth/cloud-connection.js";
|
|
14
21
|
import type {
|
|
15
22
|
OAuthConnection,
|
|
16
23
|
OAuthConnectionRequest,
|
|
17
24
|
OAuthConnectionResponse,
|
|
18
25
|
} from "../../../oauth/connection.js";
|
|
19
26
|
import { decodeOAuthResponseBytes } from "../../../oauth/connection.js";
|
|
20
|
-
import {
|
|
21
|
-
CredentialRequiredError,
|
|
22
|
-
InsufficientBalanceError,
|
|
23
|
-
PlatformOAuthConnection,
|
|
24
|
-
ProviderUnreachableError,
|
|
25
|
-
} from "../../../oauth/platform-connection.js";
|
|
26
|
-
import type { CadetPlatformClient } from "../../../platform/client.js";
|
|
27
27
|
import { resolveScopeProfile } from "../../auth/scopes.js";
|
|
28
28
|
import type { AuthContext } from "../../auth/types.js";
|
|
29
29
|
import { routeDefinitionsToHTTPRoutes } from "../http-adapter.js";
|
|
@@ -70,29 +70,29 @@ const byoConnection: OAuthConnection = {
|
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
|
-
* A real
|
|
74
|
-
* lives inside `
|
|
73
|
+
* A real cloud connection over a stub platform, for the paths whose behavior
|
|
74
|
+
* lives inside `CloudOAuthConnection` rather than in the route.
|
|
75
75
|
*/
|
|
76
76
|
function realManagedConnection(
|
|
77
77
|
fetchImpl: (path: string, init?: RequestInit) => Promise<Response>,
|
|
78
|
-
):
|
|
79
|
-
return new
|
|
78
|
+
): CloudOAuthConnection {
|
|
79
|
+
return new CloudOAuthConnection({
|
|
80
80
|
id: "conn-managed",
|
|
81
81
|
provider: "stripe_link",
|
|
82
82
|
externalId: "ext-1",
|
|
83
83
|
accountInfo: null,
|
|
84
84
|
connectionId: "platform-conn-1",
|
|
85
85
|
client: {
|
|
86
|
-
|
|
86
|
+
cloudAssistantId: "asst-1",
|
|
87
87
|
fetch: fetchImpl,
|
|
88
|
-
} as unknown as
|
|
88
|
+
} as unknown as CadetCloudClient,
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
/** Satisfies the route's `instanceof
|
|
92
|
+
/** Satisfies the route's `instanceof CloudOAuthConnection` check. */
|
|
93
93
|
function managedConnection(): OAuthConnection {
|
|
94
94
|
return Object.assign(
|
|
95
|
-
Object.create(
|
|
95
|
+
Object.create(CloudOAuthConnection.prototype) as OAuthConnection,
|
|
96
96
|
{
|
|
97
97
|
id: "conn-managed",
|
|
98
98
|
provider: "stripe_link",
|
|
@@ -145,15 +145,15 @@ mock.module("../../../oauth/connection-resolver.js", () => ({
|
|
|
145
145
|
|
|
146
146
|
// Spread the real module so the rest of the import graph keeps its env
|
|
147
147
|
// readers; only the two auth-bypass readings are pinned. They move
|
|
148
|
-
// independently: DISABLE_HTTP_AUTH is set on any host, the
|
|
148
|
+
// independently: DISABLE_HTTP_AUTH is set on any host, the cloud-managed
|
|
149
149
|
// bypass only on a vembda pod.
|
|
150
150
|
let httpAuthDisabled = false;
|
|
151
|
-
let
|
|
151
|
+
let cloudAuthBypass = false;
|
|
152
152
|
const env = await import("../../../config/env.js");
|
|
153
153
|
mock.module("../../../config/env.js", () => ({
|
|
154
154
|
...env,
|
|
155
155
|
isHttpAuthDisabled: () => httpAuthDisabled,
|
|
156
|
-
|
|
156
|
+
isCloudAuthBypassActive: () => cloudAuthBypass,
|
|
157
157
|
}));
|
|
158
158
|
|
|
159
159
|
const { handleOAuthProxy, ROUTES } = await import("../oauth-proxy-routes.js");
|
|
@@ -271,7 +271,7 @@ function requireCaptured(): OAuthConnectionRequest {
|
|
|
271
271
|
|
|
272
272
|
beforeEach(() => {
|
|
273
273
|
httpAuthDisabled = false;
|
|
274
|
-
|
|
274
|
+
cloudAuthBypass = false;
|
|
275
275
|
captured = undefined;
|
|
276
276
|
upstreamBytes = undefined;
|
|
277
277
|
requestError = undefined;
|
|
@@ -322,7 +322,7 @@ describe("path and query fidelity", () => {
|
|
|
322
322
|
const req = requireCaptured();
|
|
323
323
|
// Byte-exact for a provider that signs the query it receives.
|
|
324
324
|
expect(req.rawQuery).toBe("?a=1&b=2&a=3&q=x%20y&flag");
|
|
325
|
-
// The parsed form is all a
|
|
325
|
+
// The parsed form is all a cloud connection can send.
|
|
326
326
|
expect(req.query).toEqual({ a: ["1", "3"], b: "2", q: "x y", flag: "" });
|
|
327
327
|
});
|
|
328
328
|
|
|
@@ -364,7 +364,7 @@ describe("method passthrough", () => {
|
|
|
364
364
|
expect((await response.arrayBuffer()).byteLength).toBe(0);
|
|
365
365
|
});
|
|
366
366
|
|
|
367
|
-
test("rejects HEAD against a
|
|
367
|
+
test("rejects HEAD against a cloud connection", async () => {
|
|
368
368
|
resolution = { ...resolution, connection: managedConnection() };
|
|
369
369
|
|
|
370
370
|
const response = await callProxy({ method: "HEAD" });
|
|
@@ -391,7 +391,7 @@ describe("write safety", () => {
|
|
|
391
391
|
});
|
|
392
392
|
}
|
|
393
393
|
|
|
394
|
-
test("a
|
|
394
|
+
test("a cloud write is not replayed after a 502", async () => {
|
|
395
395
|
let attempts = 0;
|
|
396
396
|
resolution = {
|
|
397
397
|
...resolution,
|
|
@@ -403,7 +403,7 @@ describe("write safety", () => {
|
|
|
403
403
|
|
|
404
404
|
const response = await callProxy({ method: "POST", body: "{}" });
|
|
405
405
|
|
|
406
|
-
// The
|
|
406
|
+
// The cloud answers 502 only after calling the provider, so a replay
|
|
407
407
|
// could land the write twice.
|
|
408
408
|
expect(attempts).toBe(1);
|
|
409
409
|
expect(response.status).toBe(502);
|
|
@@ -564,7 +564,7 @@ describe("header handling", () => {
|
|
|
564
564
|
["GET", "Stripe-Version"],
|
|
565
565
|
["GET", "X-Custom-Option"],
|
|
566
566
|
]) {
|
|
567
|
-
test(`rejects managed ${method} with ${name} before the
|
|
567
|
+
test(`rejects managed ${method} with ${name} before the cloud call`, async () => {
|
|
568
568
|
let attempts = 0;
|
|
569
569
|
resolution.connection = realManagedConnection(async () => {
|
|
570
570
|
attempts++;
|
|
@@ -930,18 +930,18 @@ describe("grant binding", () => {
|
|
|
930
930
|
expect(resolverCalls).toHaveLength(0);
|
|
931
931
|
});
|
|
932
932
|
|
|
933
|
-
test("a
|
|
933
|
+
test("a cloud-managed pod skips the comparison it has no subject for", async () => {
|
|
934
934
|
// The pod's daemon discards the token and synthesizes a context, so the
|
|
935
935
|
// grant's subject never reaches the handler.
|
|
936
936
|
httpAuthDisabled = true;
|
|
937
|
-
|
|
937
|
+
cloudAuthBypass = true;
|
|
938
938
|
|
|
939
939
|
const response = await callProxy({ subject: "actor:self:dev-bypass" });
|
|
940
940
|
|
|
941
941
|
expect(response.status).toBe(200);
|
|
942
942
|
});
|
|
943
943
|
|
|
944
|
-
test("DISABLE_HTTP_AUTH off a
|
|
944
|
+
test("DISABLE_HTTP_AUTH off a cloud pod still binds the grant", async () => {
|
|
945
945
|
httpAuthDisabled = true;
|
|
946
946
|
|
|
947
947
|
const response = await callProxy({ subject: "actor:self:dev-bypass" });
|
|
@@ -119,7 +119,7 @@ import {
|
|
|
119
119
|
type UpgradePluginOptions,
|
|
120
120
|
} from "../../../cli/lib/upgrade-plugin.js";
|
|
121
121
|
|
|
122
|
-
// Spy on the route logger so tests can assert that a
|
|
122
|
+
// Spy on the route logger so tests can assert that a cloud-catalog outage
|
|
123
123
|
// is recorded before it is mapped to a client 503. The catalog fetcher and the
|
|
124
124
|
// transport adapters swallow the failure otherwise (`RouteError` → wire error,
|
|
125
125
|
// no capture), so the log line is the only trace an operator gets — assert it.
|
|
@@ -1626,8 +1626,8 @@ describe("POST /v1/plugins/install", () => {
|
|
|
1626
1626
|
// The default (no-pin) path reads the same gated catalog `search`
|
|
1627
1627
|
// advertises and installs from a trusted pre-resolved source — no direct
|
|
1628
1628
|
// `plugins/marketplace.json` fetch (the pin/marketplace path is untouched).
|
|
1629
|
-
const prev = process.env.
|
|
1630
|
-
process.env.
|
|
1629
|
+
const prev = process.env.CADET_DISABLE_CLOUD;
|
|
1630
|
+
process.env.CADET_DISABLE_CLOUD = "true";
|
|
1631
1631
|
try {
|
|
1632
1632
|
installSpy.mockImplementation(async (opts) => trustedInstallResult(opts));
|
|
1633
1633
|
|
|
@@ -1660,9 +1660,9 @@ describe("POST /v1/plugins/install", () => {
|
|
|
1660
1660
|
});
|
|
1661
1661
|
} finally {
|
|
1662
1662
|
if (prev === undefined) {
|
|
1663
|
-
delete process.env.
|
|
1663
|
+
delete process.env.CADET_DISABLE_CLOUD;
|
|
1664
1664
|
} else {
|
|
1665
|
-
process.env.
|
|
1665
|
+
process.env.CADET_DISABLE_CLOUD = prev;
|
|
1666
1666
|
}
|
|
1667
1667
|
}
|
|
1668
1668
|
});
|
|
@@ -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,
|