@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
package/src/oauth/oauth-store.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Backed by Drizzle + SQLite. All JSON fields (default_scopes, available_scopes,
|
|
5
5
|
* extra_params, granted_scopes, metadata) are stored as serialized JSON strings.
|
|
6
6
|
*
|
|
7
|
-
* Note: TS field names use camelCase from the
|
|
7
|
+
* Note: TS field names use camelCase from the cloud's naming
|
|
8
8
|
* (provider, authorizeUrl, tokenExchangeUrl, displayLabel, authorizeParams),
|
|
9
9
|
* while underlying SQL columns retain their original snake_case names
|
|
10
10
|
* (provider_key, auth_url, token_url, display_name, extra_params).
|
|
@@ -56,7 +56,7 @@ export type OAuthConnectionRow = typeof oauthConnections.$inferSelect;
|
|
|
56
56
|
* CONFLICT DO UPDATE so that implementation fields (authorizeUrl, tokenExchangeUrl,
|
|
57
57
|
* refreshUrl, tokenEndpointAuthMethod, userinfoUrl, authorizeParams,
|
|
58
58
|
* pingUrl, pingMethod, pingHeaders, pingBody, revokeUrl, revokeBodyTemplate,
|
|
59
|
-
*
|
|
59
|
+
* cloudServiceConfigKey,
|
|
60
60
|
* loopbackPort, injectionTemplates, appType, setupNotes,
|
|
61
61
|
* identityUrl, identityMethod, identityHeaders, identityBody,
|
|
62
62
|
* identityResponsePaths, identityFormat, identityOkField, responseOkField, featureFlag,
|
|
@@ -87,7 +87,7 @@ export function seedProviders(
|
|
|
87
87
|
availableScopes?: AvailableScopes;
|
|
88
88
|
scopeSeparator?: string;
|
|
89
89
|
authorizeParams?: Record<string, string>;
|
|
90
|
-
|
|
90
|
+
cloudServiceConfigKey?: string;
|
|
91
91
|
managedServiceIsPaid?: boolean;
|
|
92
92
|
displayLabel?: string;
|
|
93
93
|
description?: string;
|
|
@@ -150,7 +150,7 @@ export function seedProviders(
|
|
|
150
150
|
const authorizeParams = p.authorizeParams
|
|
151
151
|
? JSON.stringify(p.authorizeParams)
|
|
152
152
|
: null;
|
|
153
|
-
const
|
|
153
|
+
const cloudServiceConfigKey = p.cloudServiceConfigKey ?? null;
|
|
154
154
|
const managedServiceIsPaid = p.managedServiceIsPaid === true;
|
|
155
155
|
const displayLabel = p.displayLabel ?? null;
|
|
156
156
|
const description = p.description ?? null;
|
|
@@ -199,7 +199,7 @@ export function seedProviders(
|
|
|
199
199
|
pingBody,
|
|
200
200
|
revokeUrl,
|
|
201
201
|
revokeBodyTemplate,
|
|
202
|
-
|
|
202
|
+
cloudServiceConfigKey,
|
|
203
203
|
managedServiceIsPaid,
|
|
204
204
|
displayLabel,
|
|
205
205
|
description,
|
|
@@ -243,7 +243,7 @@ export function seedProviders(
|
|
|
243
243
|
pingBody,
|
|
244
244
|
revokeUrl,
|
|
245
245
|
revokeBodyTemplate,
|
|
246
|
-
|
|
246
|
+
cloudServiceConfigKey,
|
|
247
247
|
managedServiceIsPaid,
|
|
248
248
|
displayLabel,
|
|
249
249
|
description,
|
|
@@ -339,7 +339,7 @@ export function registerProvider(params: {
|
|
|
339
339
|
availableScopes?: AvailableScopes;
|
|
340
340
|
scopeSeparator?: string;
|
|
341
341
|
authorizeParams?: Record<string, string>;
|
|
342
|
-
|
|
342
|
+
cloudServiceConfigKey?: string;
|
|
343
343
|
managedServiceIsPaid?: boolean;
|
|
344
344
|
displayLabel?: string;
|
|
345
345
|
description?: string;
|
|
@@ -402,7 +402,7 @@ export function registerProvider(params: {
|
|
|
402
402
|
revokeBodyTemplate: params.revokeBodyTemplate
|
|
403
403
|
? JSON.stringify(params.revokeBodyTemplate)
|
|
404
404
|
: null,
|
|
405
|
-
|
|
405
|
+
cloudServiceConfigKey: params.cloudServiceConfigKey ?? null,
|
|
406
406
|
managedServiceIsPaid: params.managedServiceIsPaid === true,
|
|
407
407
|
displayLabel: params.displayLabel ?? null,
|
|
408
408
|
description: params.description ?? null,
|
|
@@ -36,7 +36,7 @@ export interface SerializedProviderSummary {
|
|
|
36
36
|
client_id_placeholder: string | null;
|
|
37
37
|
requires_client_secret: boolean;
|
|
38
38
|
logo_url: string | null;
|
|
39
|
-
|
|
39
|
+
supports_cloud_mode: boolean;
|
|
40
40
|
managed_service_is_paid: boolean;
|
|
41
41
|
feature_flag: string | null;
|
|
42
42
|
/**
|
|
@@ -46,7 +46,7 @@ export interface SerializedProviderSummary {
|
|
|
46
46
|
category: IntegrationCategory | null;
|
|
47
47
|
/**
|
|
48
48
|
* Per-tenant providers only (Shopify): what a client must collect before
|
|
49
|
-
* starting a
|
|
49
|
+
* starting a cloud connect, since the provider's OAuth endpoints live on
|
|
50
50
|
* the customer's own host. `null` for providers with one global host.
|
|
51
51
|
*/
|
|
52
52
|
tenant_host: { pattern: string; label: string; placeholder: string } | null;
|
|
@@ -116,7 +116,7 @@ function _serializeProvider(
|
|
|
116
116
|
logoUrl: row.logoUrl ?? null,
|
|
117
117
|
clientIdPlaceholder: row.clientIdPlaceholder ?? null,
|
|
118
118
|
requiresClientSecret: !!(row.requiresClientSecret ?? 1),
|
|
119
|
-
supportsManagedMode: !!row.
|
|
119
|
+
supportsManagedMode: !!row.cloudServiceConfigKey,
|
|
120
120
|
managedServiceIsPaid: !!row.managedServiceIsPaid,
|
|
121
121
|
defaultScopes: row.defaultScopes ? JSON.parse(row.defaultScopes) : [],
|
|
122
122
|
availableScopes: row.availableScopes
|
|
@@ -176,7 +176,7 @@ export function serializeProviderSummary(
|
|
|
176
176
|
client_id_placeholder: row.clientIdPlaceholder ?? null,
|
|
177
177
|
requires_client_secret: !!(row.requiresClientSecret ?? 1),
|
|
178
178
|
logo_url: row.logoUrl ?? null,
|
|
179
|
-
|
|
179
|
+
supports_cloud_mode: !!row.cloudServiceConfigKey,
|
|
180
180
|
managed_service_is_paid: !!row.managedServiceIsPaid,
|
|
181
181
|
feature_flag: row.featureFlag ?? null,
|
|
182
182
|
category: PROVIDER_SEED_DATA[row.provider]?.category ?? null,
|
package/src/oauth/revoke.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Best-effort upstream OAuth token revocation.
|
|
3
3
|
*
|
|
4
|
-
* Mirrors the
|
|
4
|
+
* Mirrors the cloud's `try_revoke_token` (django/app/assistant/oauth/providers/base.py).
|
|
5
5
|
* The HTTP shape is fixed: POST + application/x-www-form-urlencoded body, no auth headers
|
|
6
6
|
* (credentials are expected to live in the body via {access_token}/{client_id} substitution),
|
|
7
7
|
* 10 second timeout, all errors swallowed and logged as warnings.
|
|
@@ -42,7 +42,7 @@ const SLACK_PROVIDER_INJECTION_TEMPLATES: NonNullable<
|
|
|
42
42
|
* every startup. Only Cadet implementation fields (authorizeUrl, tokenExchangeUrl,
|
|
43
43
|
* refreshUrl, tokenEndpointAuthMethod, userinfoUrl, authorizeParams,
|
|
44
44
|
* pingUrl, pingMethod, pingHeaders, pingBody, revokeUrl, revokeBodyTemplate,
|
|
45
|
-
*
|
|
45
|
+
* cloudServiceConfigKey, managedServiceIsPaid,
|
|
46
46
|
* loopbackPort, injectionTemplates, appType, setupNotes,
|
|
47
47
|
* identityUrl, identityMethod, identityHeaders, identityBody,
|
|
48
48
|
* identityResponsePaths, identityFormat, identityOkField, featureFlag,
|
|
@@ -76,7 +76,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
76
76
|
availableScopes?: AvailableScopes;
|
|
77
77
|
scopeSeparator?: string;
|
|
78
78
|
authorizeParams?: Record<string, string>;
|
|
79
|
-
|
|
79
|
+
cloudServiceConfigKey?: string;
|
|
80
80
|
managedServiceIsPaid?: boolean;
|
|
81
81
|
displayLabel: string;
|
|
82
82
|
description: string;
|
|
@@ -96,8 +96,8 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
96
96
|
setupNotes?: string[];
|
|
97
97
|
/**
|
|
98
98
|
* Per-tenant providers only: the host the user supplies at connect time,
|
|
99
|
-
* which the
|
|
100
|
-
* `pattern` mirrors the
|
|
99
|
+
* which the cloud substitutes into `{tenant_host}` URL placeholders.
|
|
100
|
+
* `pattern` mirrors the cloud registry's validation so clients can
|
|
101
101
|
* reject a malformed host before the request leaves the browser.
|
|
102
102
|
*/
|
|
103
103
|
tenantHost?: { pattern: string; label: string; placeholder: string };
|
|
@@ -155,7 +155,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
155
155
|
"https://developers.google.com/identity/protocols/oauth2/scopes",
|
|
156
156
|
authorizeParams: { access_type: "offline", prompt: "consent" },
|
|
157
157
|
loopbackPort: 17321,
|
|
158
|
-
|
|
158
|
+
cloudServiceConfigKey: "google-oauth",
|
|
159
159
|
injectionTemplates: [
|
|
160
160
|
{
|
|
161
161
|
hostPattern: "gmail.googleapis.com",
|
|
@@ -292,7 +292,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
292
292
|
authorizeParams: { owner: "user" },
|
|
293
293
|
tokenEndpointAuthMethod: "client_secret_basic",
|
|
294
294
|
tokenExchangeBodyFormat: "json",
|
|
295
|
-
|
|
295
|
+
cloudServiceConfigKey: "notion-oauth",
|
|
296
296
|
loopbackPort: 17323,
|
|
297
297
|
injectionTemplates: [
|
|
298
298
|
{
|
|
@@ -335,7 +335,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
335
335
|
"https://developer.x.com/en/docs/authentication/oauth-2-0/authorization-code",
|
|
336
336
|
tokenEndpointAuthMethod: "client_secret_basic",
|
|
337
337
|
loopbackPort: 17335,
|
|
338
|
-
|
|
338
|
+
cloudServiceConfigKey: "twitter-oauth",
|
|
339
339
|
managedServiceIsPaid: true,
|
|
340
340
|
injectionTemplates: [
|
|
341
341
|
{
|
|
@@ -372,7 +372,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
372
372
|
defaultScopes: ["repo", "read:user", "notifications"],
|
|
373
373
|
availableScopes:
|
|
374
374
|
"https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps",
|
|
375
|
-
|
|
375
|
+
cloudServiceConfigKey: "github-oauth",
|
|
376
376
|
loopbackPort: 17332,
|
|
377
377
|
injectionTemplates: [
|
|
378
378
|
{
|
|
@@ -421,7 +421,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
421
421
|
scopeSeparator: ",",
|
|
422
422
|
authorizeParams: { prompt: "consent" },
|
|
423
423
|
loopbackPort: 17324,
|
|
424
|
-
|
|
424
|
+
cloudServiceConfigKey: "linear-oauth",
|
|
425
425
|
injectionTemplates: [
|
|
426
426
|
{
|
|
427
427
|
hostPattern: "api.linear.app",
|
|
@@ -506,7 +506,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
506
506
|
{ scope: "project:delete", description: "Delete entire projects" },
|
|
507
507
|
],
|
|
508
508
|
loopbackPort: 17325,
|
|
509
|
-
|
|
509
|
+
cloudServiceConfigKey: "todoist-oauth",
|
|
510
510
|
injectionTemplates: [
|
|
511
511
|
{
|
|
512
512
|
hostPattern: "api.todoist.com",
|
|
@@ -543,7 +543,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
543
543
|
availableScopes:
|
|
544
544
|
"https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes",
|
|
545
545
|
loopbackPort: 17326,
|
|
546
|
-
|
|
546
|
+
cloudServiceConfigKey: "discord-oauth",
|
|
547
547
|
injectionTemplates: [
|
|
548
548
|
{
|
|
549
549
|
hostPattern: "discord.com",
|
|
@@ -614,7 +614,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
614
614
|
defaultScopes: ["default"],
|
|
615
615
|
availableScopes: "https://developers.asana.com/docs/oauth-scopes",
|
|
616
616
|
loopbackPort: 17328,
|
|
617
|
-
|
|
617
|
+
cloudServiceConfigKey: "asana-oauth",
|
|
618
618
|
injectionTemplates: [
|
|
619
619
|
{
|
|
620
620
|
hostPattern: "app.asana.com",
|
|
@@ -683,7 +683,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
683
683
|
availableScopes:
|
|
684
684
|
"https://developers.hubspot.com/docs/guides/apps/authentication/scopes",
|
|
685
685
|
loopbackPort: 17330,
|
|
686
|
-
|
|
686
|
+
cloudServiceConfigKey: "hubspot-oauth",
|
|
687
687
|
injectionTemplates: [
|
|
688
688
|
{
|
|
689
689
|
hostPattern: "api.hubapi.com",
|
|
@@ -860,7 +860,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
860
860
|
// time); 17339 is the real next-free slot once all three are seeded
|
|
861
861
|
// together.
|
|
862
862
|
loopbackPort: 17339,
|
|
863
|
-
|
|
863
|
+
cloudServiceConfigKey: "monday-oauth",
|
|
864
864
|
injectionTemplates: [
|
|
865
865
|
{
|
|
866
866
|
hostPattern: "api.monday.com",
|
|
@@ -902,7 +902,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
902
902
|
defaultScopes: [],
|
|
903
903
|
tokenEndpointAuthMethod: "client_secret_post",
|
|
904
904
|
loopbackPort: 17337,
|
|
905
|
-
|
|
905
|
+
cloudServiceConfigKey: "eventbrite-oauth",
|
|
906
906
|
injectionTemplates: [
|
|
907
907
|
{
|
|
908
908
|
hostPattern: "www.eventbriteapi.com",
|
|
@@ -1000,7 +1000,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1000
1000
|
// independently picked the next free port at the time); 17338 is the
|
|
1001
1001
|
// real next-free slot once both are seeded together.
|
|
1002
1002
|
loopbackPort: 17338,
|
|
1003
|
-
|
|
1003
|
+
cloudServiceConfigKey: "calendly-oauth",
|
|
1004
1004
|
injectionTemplates: [
|
|
1005
1005
|
{
|
|
1006
1006
|
hostPattern: "api.calendly.com",
|
|
@@ -1172,7 +1172,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1172
1172
|
],
|
|
1173
1173
|
tokenEndpointAuthMethod: "client_secret_basic",
|
|
1174
1174
|
loopbackPort: 17331,
|
|
1175
|
-
|
|
1175
|
+
cloudServiceConfigKey: "figma-oauth",
|
|
1176
1176
|
injectionTemplates: [
|
|
1177
1177
|
{
|
|
1178
1178
|
hostPattern: "api.figma.com",
|
|
@@ -1231,7 +1231,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1231
1231
|
authorizeParams: { prompt: "select_account" },
|
|
1232
1232
|
tokenEndpointAuthMethod: "client_secret_post",
|
|
1233
1233
|
loopbackPort: 17334,
|
|
1234
|
-
|
|
1234
|
+
cloudServiceConfigKey: "outlook-oauth",
|
|
1235
1235
|
injectionTemplates: [
|
|
1236
1236
|
{
|
|
1237
1237
|
hostPattern: "graph.microsoft.com",
|
|
@@ -1374,13 +1374,13 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1374
1374
|
tokenEndpointAuthMethod: "client_secret_post",
|
|
1375
1375
|
// Link's authorize request also needs a `key` param holding the Stripe
|
|
1376
1376
|
// publishable key of the account behind the OAuth client. Cadet's own
|
|
1377
|
-
// key lives in the
|
|
1378
|
-
// right answer: it pairs with the
|
|
1377
|
+
// key lives in the cloud registry, which is the only place it is the
|
|
1378
|
+
// right answer: it pairs with the cloud's client_id. Seeding it here
|
|
1379
1379
|
// would hand every self-hosted install our merchant identity to send
|
|
1380
1380
|
// alongside their own client_id, so BYO is deliberately left without one.
|
|
1381
1381
|
// See setupNotes.
|
|
1382
1382
|
loopbackPort: 17340,
|
|
1383
|
-
|
|
1383
|
+
cloudServiceConfigKey: "stripe-link-oauth",
|
|
1384
1384
|
injectionTemplates: [
|
|
1385
1385
|
{
|
|
1386
1386
|
hostPattern: "api.link.com",
|
|
@@ -1391,7 +1391,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1391
1391
|
],
|
|
1392
1392
|
appType: "App",
|
|
1393
1393
|
setupNotes: [
|
|
1394
|
-
"Link is available in managed mode only. Its authorize endpoint requires a `key` parameter carrying the Stripe publishable key for the account that owns the OAuth client, and a bring-your-own connection has nowhere to put one: authorizeParams is re-stamped from seed data on every startup and no CLI or API surface sets it. Use managed mode, where the
|
|
1394
|
+
"Link is available in managed mode only. Its authorize endpoint requires a `key` parameter carrying the Stripe publishable key for the account that owns the OAuth client, and a bring-your-own connection has nowhere to put one: authorizeParams is re-stamped from seed data on every startup and no CLI or API surface sets it. Use managed mode, where the cloud supplies both halves.",
|
|
1395
1395
|
],
|
|
1396
1396
|
// /userinfo returns no id, so email is the only stable-ish handle; phone
|
|
1397
1397
|
// backstops a wallet that has one but no email on file.
|
|
@@ -1581,8 +1581,8 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1581
1581
|
},
|
|
1582
1582
|
],
|
|
1583
1583
|
loopbackPort: 17341,
|
|
1584
|
-
|
|
1585
|
-
// Mirrors `extra_config.tenant_host` in the
|
|
1584
|
+
cloudServiceConfigKey: "shopify-oauth",
|
|
1585
|
+
// Mirrors `extra_config.tenant_host` in the cloud provider registry.
|
|
1586
1586
|
tenantHost: {
|
|
1587
1587
|
pattern: "^[a-z0-9][a-z0-9-]*\\.myshopify\\.com$",
|
|
1588
1588
|
label: "Shop domain",
|
|
@@ -1605,7 +1605,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1605
1605
|
// myshopify domain is the stable, human-recognisable handle.
|
|
1606
1606
|
identityUrl: "https://{tenant_host}/admin/api/2026-07/shop.json",
|
|
1607
1607
|
identityResponsePaths: ["shop.myshopify_domain", "shop.name"],
|
|
1608
|
-
// Gated like monday/figma/stripe-link: the
|
|
1608
|
+
// Gated like monday/figma/stripe-link: the cloud side and the
|
|
1609
1609
|
// shop-domain input in the clients land separately, and until both are
|
|
1610
1610
|
// in place a visible Shopify tile would offer a connect flow that
|
|
1611
1611
|
// cannot complete.
|
|
@@ -1618,21 +1618,21 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1618
1618
|
tokenExchangeUrl:
|
|
1619
1619
|
"https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer",
|
|
1620
1620
|
// Access tokens live an hour; refresh tokens 100 days and are rotated on
|
|
1621
|
-
// every refresh, which the
|
|
1621
|
+
// every refresh, which the cloud persists. Both token endpoints
|
|
1622
1622
|
// authenticate the client with HTTP Basic.
|
|
1623
1623
|
refreshUrl: "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer",
|
|
1624
1624
|
tokenEndpointAuthMethod: "client_secret_basic",
|
|
1625
1625
|
// No revokeUrl: Intuit's revocation endpoint wants a JSON body under HTTP
|
|
1626
1626
|
// Basic client auth, and the daemon's revoke helper only posts an
|
|
1627
1627
|
// unauthenticated form body, so a seeded URL would fail silently on every
|
|
1628
|
-
// your-own disconnect. The
|
|
1628
|
+
// your-own disconnect. The cloud registry revokes managed tokens itself.
|
|
1629
1629
|
// Every Accounting API path is scoped to the company (realm) the user
|
|
1630
1630
|
// picked on Intuit's consent screen. The realm arrives only as the
|
|
1631
|
-
// callback's `realmId` query parameter; the
|
|
1631
|
+
// callback's `realmId` query parameter; the cloud captures it into the
|
|
1632
1632
|
// connection's `provider_params` and fills the `{realm_id}` placeholder
|
|
1633
1633
|
// server-side, so managed callers send paths relative to the company
|
|
1634
1634
|
// (`/query`, `/customer/123`). Production and sandbox keys use different
|
|
1635
|
-
// hosts; the
|
|
1635
|
+
// hosts; the cloud picks the host per environment.
|
|
1636
1636
|
baseUrl: "https://quickbooks.api.intuit.com/v3/company/{realm_id}",
|
|
1637
1637
|
// No pingUrl: the only company-independent probe would still need the
|
|
1638
1638
|
// realm in its path, which the ping route cannot fill in (it sends the
|
|
@@ -1666,7 +1666,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1666
1666
|
{ scope: "address", description: "The signing-in user's address" },
|
|
1667
1667
|
],
|
|
1668
1668
|
loopbackPort: 17342,
|
|
1669
|
-
|
|
1669
|
+
cloudServiceConfigKey: "quickbooks-oauth",
|
|
1670
1670
|
injectionTemplates: [
|
|
1671
1671
|
{
|
|
1672
1672
|
hostPattern: "quickbooks.api.intuit.com",
|
|
@@ -1683,7 +1683,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1683
1683
|
],
|
|
1684
1684
|
appType: "App",
|
|
1685
1685
|
setupNotes: [
|
|
1686
|
-
"QuickBooks scopes every Accounting API call to the company (realm) chosen on Intuit's consent screen.
|
|
1686
|
+
"QuickBooks scopes every Accounting API call to the company (realm) chosen on Intuit's consent screen. Cloud connections carry the realm as provider_params.realm_id and requests are sent relative to /v3/company/{realmId}.",
|
|
1687
1687
|
"Intuit development keys only authorize sandbox companies, which live on sandbox-quickbooks.api.intuit.com; production keys use quickbooks.api.intuit.com.",
|
|
1688
1688
|
"The Accounting API returns XML unless the request carries Accept: application/json.",
|
|
1689
1689
|
],
|
|
@@ -1694,7 +1694,7 @@ export const PROVIDER_SEED_DATA: Record<
|
|
|
1694
1694
|
"https://quickbooks.api.intuit.com/v3/company/{realm_id}/companyinfo/{realm_id}",
|
|
1695
1695
|
identityHeaders: { Accept: "application/json" },
|
|
1696
1696
|
identityResponsePaths: ["CompanyInfo.CompanyName", "CompanyInfo.LegalName"],
|
|
1697
|
-
// Gated like figma/shopify: the
|
|
1697
|
+
// Gated like figma/shopify: the cloud side lands separately, and until
|
|
1698
1698
|
// the client ids are live a visible tile would offer a connect flow that
|
|
1699
1699
|
// cannot complete.
|
|
1700
1700
|
featureFlag: "quickbooks-oauth",
|
|
@@ -9,7 +9,7 @@ import type { ApprovalMode, ApprovalReason } from "./types.js";
|
|
|
9
9
|
* "allow" — auto-allowed by policy (sandbox, trust rule, or threshold)
|
|
10
10
|
* "deny" — user denied via interactive prompt
|
|
11
11
|
* "denied" — system denied (no interactive client, or trust rule deny)
|
|
12
|
-
* "platform_auto_approve" — guardian bash in
|
|
12
|
+
* "platform_auto_approve" — guardian bash in cloud-hosted session
|
|
13
13
|
* "guardian_auto_approve" — non-interactive guardian session within background threshold
|
|
14
14
|
*/
|
|
15
15
|
export function mapApprovalProvenance(
|
|
@@ -7,12 +7,11 @@
|
|
|
7
7
|
|
|
8
8
|
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
9
9
|
|
|
10
|
+
import { setAllFlagsOffForTesting } from "../__tests__/feature-flag-test-helpers.js";
|
|
11
|
+
|
|
10
12
|
// ── Module mocks ─────────────────────────────────────────────────────────────
|
|
11
13
|
|
|
12
14
|
// Mock feature flags to return false by default.
|
|
13
|
-
mock.module("../config/assistant-feature-flags.js", () => ({
|
|
14
|
-
isAssistantFeatureFlagEnabled: () => false,
|
|
15
|
-
}));
|
|
16
15
|
|
|
17
16
|
// `buildPolicyContext` (used by the integration tests below) precomputes the
|
|
18
17
|
// retrospective skill-improvement gate. Keep the v3 tier active while the
|
|
@@ -196,6 +195,9 @@ import { RiskLevel } from "./types.js";
|
|
|
196
195
|
|
|
197
196
|
describe("Permission Checker (gateway IPC)", () => {
|
|
198
197
|
beforeEach(() => {
|
|
198
|
+
// Real flag resolution with every default-enabled flag pinned off —
|
|
199
|
+
// replaces the former blanket `() => false` module mock.
|
|
200
|
+
setAllFlagsOffForTesting();
|
|
199
201
|
mockIsContainerized = false;
|
|
200
202
|
mockIpcClassifyRiskResult = undefined;
|
|
201
203
|
lastClassifyRiskParams = undefined;
|
|
@@ -883,7 +885,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
883
885
|
// ── Memory-retrospective skill-authoring auto-grant ─────────────────────
|
|
884
886
|
// The background retrospective guardian session (sourceChannel "cadet",
|
|
885
887
|
// trustClass "guardian", origin "memory_retrospective") cannot answer
|
|
886
|
-
// interactive prompts, so `
|
|
888
|
+
// interactive prompts, so `scaffold_cloud_skill`, `find_similar_skills`,
|
|
887
889
|
// and `skill_load skill-management` resolve to allow without prompting. The
|
|
888
890
|
// grant is scoped to that origin + those tools, and ONLY fires when the
|
|
889
891
|
// feature is active (`procToSkillsActive: true`).
|
|
@@ -896,11 +898,11 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
896
898
|
procToSkillsActive: true,
|
|
897
899
|
};
|
|
898
900
|
|
|
899
|
-
test("allows
|
|
901
|
+
test("allows scaffold_cloud_skill for the retrospective origin without prompting", async () => {
|
|
900
902
|
// High risk would normally force a prompt — the grant short-circuits
|
|
901
903
|
// before classification, so no IPC result is needed.
|
|
902
904
|
const result = await check(
|
|
903
|
-
"
|
|
905
|
+
"scaffold_cloud_skill",
|
|
904
906
|
{ skill_id: "deploy-preview" },
|
|
905
907
|
"/home/user/project",
|
|
906
908
|
retrospectiveContext,
|
|
@@ -958,7 +960,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
958
960
|
scopeOptions: [],
|
|
959
961
|
};
|
|
960
962
|
const result = await check(
|
|
961
|
-
"
|
|
963
|
+
"delete_cloud_skill",
|
|
962
964
|
{ skill_id: "deploy-preview" },
|
|
963
965
|
"/home/user/project",
|
|
964
966
|
retrospectiveContext,
|
|
@@ -975,7 +977,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
975
977
|
};
|
|
976
978
|
// A normal interactive turn carries no retrospective origin signals.
|
|
977
979
|
const result = await check(
|
|
978
|
-
"
|
|
980
|
+
"scaffold_cloud_skill",
|
|
979
981
|
{ skill_id: "deploy-preview" },
|
|
980
982
|
"/home/user/project",
|
|
981
983
|
{ executionContext: "conversation" },
|
|
@@ -994,7 +996,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
994
996
|
// consolidation origin does not authorize skill authoring; only the
|
|
995
997
|
// retrospective origin holds this grant.
|
|
996
998
|
const result = await check(
|
|
997
|
-
"
|
|
999
|
+
"scaffold_cloud_skill",
|
|
998
1000
|
{ skill_id: "deploy-preview" },
|
|
999
1001
|
"/home/user/project",
|
|
1000
1002
|
{
|
|
@@ -1018,7 +1020,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
1018
1020
|
// Same guardian/cadet background trust, but a different origin (e.g.
|
|
1019
1021
|
// the memory sweep job) must not inherit the retrospective grant.
|
|
1020
1022
|
const result = await check(
|
|
1021
|
-
"
|
|
1023
|
+
"scaffold_cloud_skill",
|
|
1022
1024
|
{ skill_id: "deploy-preview" },
|
|
1023
1025
|
"/home/user/project",
|
|
1024
1026
|
{
|
|
@@ -1040,7 +1042,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
1040
1042
|
scopeOptions: [],
|
|
1041
1043
|
};
|
|
1042
1044
|
const result = await check(
|
|
1043
|
-
"
|
|
1045
|
+
"scaffold_cloud_skill",
|
|
1044
1046
|
{ skill_id: "deploy-preview" },
|
|
1045
1047
|
"/home/user/project",
|
|
1046
1048
|
{
|
|
@@ -1065,7 +1067,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
1065
1067
|
// inactive — `procToSkillsActive` is not true — so the grant must NOT
|
|
1066
1068
|
// fire and the high-risk tool prompts.
|
|
1067
1069
|
const result = await check(
|
|
1068
|
-
"
|
|
1070
|
+
"scaffold_cloud_skill",
|
|
1069
1071
|
{ skill_id: "deploy-preview" },
|
|
1070
1072
|
"/home/user/project",
|
|
1071
1073
|
{ ...retrospectiveContext, procToSkillsActive: false },
|
|
@@ -1083,7 +1085,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
1083
1085
|
|
|
1084
1086
|
/** A bare core tool — `buildPolicyContext` reads only `tool.name`/owner. */
|
|
1085
1087
|
const scaffoldTool = {
|
|
1086
|
-
name: "
|
|
1088
|
+
name: "scaffold_cloud_skill",
|
|
1087
1089
|
} as unknown as Tool;
|
|
1088
1090
|
|
|
1089
1091
|
/** The ToolContext a memory-retrospective pass produces. */
|
|
@@ -1116,7 +1118,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
1116
1118
|
expect(policyContext.procToSkillsActive).toBe(true);
|
|
1117
1119
|
|
|
1118
1120
|
const result = await check(
|
|
1119
|
-
"
|
|
1121
|
+
"scaffold_cloud_skill",
|
|
1120
1122
|
{ skill_id: "deploy-preview" },
|
|
1121
1123
|
"/home/user/project",
|
|
1122
1124
|
policyContext,
|
|
@@ -1148,7 +1150,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
1148
1150
|
expect(policyContext.requestOrigin).toBeUndefined();
|
|
1149
1151
|
|
|
1150
1152
|
const result = await check(
|
|
1151
|
-
"
|
|
1153
|
+
"scaffold_cloud_skill",
|
|
1152
1154
|
{ skill_id: "deploy-preview" },
|
|
1153
1155
|
"/home/user/project",
|
|
1154
1156
|
policyContext,
|
|
@@ -1176,7 +1178,7 @@ describe("Permission Checker (gateway IPC)", () => {
|
|
|
1176
1178
|
expect(policyContext.requestOrigin).toBe("memory_retrospective");
|
|
1177
1179
|
|
|
1178
1180
|
const result = await check(
|
|
1179
|
-
"
|
|
1181
|
+
"scaffold_cloud_skill",
|
|
1180
1182
|
{ skill_id: "deploy-preview" },
|
|
1181
1183
|
"/home/user/project",
|
|
1182
1184
|
policyContext,
|
|
@@ -476,7 +476,7 @@ function buildClassifyRiskParams(
|
|
|
476
476
|
|
|
477
477
|
// ── Skill tools ──
|
|
478
478
|
if (
|
|
479
|
-
["skill_load", "
|
|
479
|
+
["skill_load", "scaffold_cloud_skill", "delete_cloud_skill"].includes(
|
|
480
480
|
toolName,
|
|
481
481
|
)
|
|
482
482
|
) {
|
|
@@ -610,7 +610,7 @@ export async function classifyRisk(
|
|
|
610
610
|
}
|
|
611
611
|
|
|
612
612
|
// ── Background memory-retrospective skill-authoring auto-grant ────────────────
|
|
613
|
-
// Skill scaffolding (`
|
|
613
|
+
// Skill scaffolding (`scaffold_cloud_skill`, risk: high + allowlist-gated),
|
|
614
614
|
// finding similar skills (`find_similar_skills`), and loading the
|
|
615
615
|
// `skill-management` skill (`skill_load skill-management`, which exposes the
|
|
616
616
|
// scaffold tool) require an interactive approval. The memory-retrospective
|
|
@@ -640,7 +640,7 @@ function isRetrospectiveSkillAuthoringGrant(
|
|
|
640
640
|
) {
|
|
641
641
|
return false;
|
|
642
642
|
}
|
|
643
|
-
if (toolName === "
|
|
643
|
+
if (toolName === "scaffold_cloud_skill") {
|
|
644
644
|
return true;
|
|
645
645
|
}
|
|
646
646
|
if (toolName === "find_similar_skills") {
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
* on first write so opting in requires no out-of-band DDL.
|
|
26
26
|
*/
|
|
27
27
|
import type { AgentEvent } from "../agent/loop.js";
|
|
28
|
+
import { resolveCloudAssistantIdOrNull } from "../config/cloud-identity.js";
|
|
28
29
|
import { getConfig } from "../config/loader.js";
|
|
29
|
-
import { resolvePlatformAssistantIdOrNull } from "../config/platform-identity.js";
|
|
30
30
|
import type { CompactionLogsClickHouseConfig } from "../config/schemas/compaction-logs.js";
|
|
31
31
|
import { credentialKey } from "../security/credential-key.js";
|
|
32
32
|
import { getSecureKeyAsync } from "../security/secure-keys.js";
|
|
@@ -164,7 +164,7 @@ export class ClickHouseCompactionLogStore {
|
|
|
164
164
|
deps.resolvePassword ??
|
|
165
165
|
(() => readCredentialOrNull("clickhouse", "password"));
|
|
166
166
|
this.resolveAssistantId =
|
|
167
|
-
deps.resolveAssistantId ??
|
|
167
|
+
deps.resolveAssistantId ?? resolveCloudAssistantIdOrNull;
|
|
168
168
|
this.fetchImpl = deps.fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
169
169
|
}
|
|
170
170
|
|
|
@@ -408,7 +408,7 @@ export class ClickHouseCompactionLogStore {
|
|
|
408
408
|
const val = await this.resolveAssistantId();
|
|
409
409
|
if (!val) {
|
|
410
410
|
throw new Error(
|
|
411
|
-
"
|
|
411
|
+
"Cadet Cloud assistant id is required when compactionLogs.destination=clickhouse",
|
|
412
412
|
);
|
|
413
413
|
}
|
|
414
414
|
this.cachedAssistantId = val;
|
|
@@ -31,14 +31,14 @@ function setKey(provider: string, value: string | undefined): void {
|
|
|
31
31
|
|
|
32
32
|
const DISABLED_PROXY_CONTEXT = {
|
|
33
33
|
enabled: false,
|
|
34
|
-
|
|
34
|
+
cloudBaseUrl: "",
|
|
35
35
|
assistantApiKey: "",
|
|
36
36
|
};
|
|
37
|
-
const
|
|
38
|
-
mock.module("../../providers/
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
const resolveCloudProxyContextMock = mock(async () => DISABLED_PROXY_CONTEXT);
|
|
38
|
+
mock.module("../../providers/cloud-proxy/context.js", () => ({
|
|
39
|
+
resolveCloudProxyContext: resolveCloudProxyContextMock,
|
|
40
|
+
hasCloudProxyPrereqs: mock(async () => false),
|
|
41
|
+
buildCloudBaseUrl: mock(async () => undefined),
|
|
42
42
|
managedFallbackEnabledFor: mock(async () => false),
|
|
43
43
|
}));
|
|
44
44
|
|
|
@@ -274,7 +274,7 @@ const GEMINI_CONFIG = {
|
|
|
274
274
|
|
|
275
275
|
const ENABLED_PROXY_CONTEXT = {
|
|
276
276
|
enabled: true,
|
|
277
|
-
|
|
277
|
+
cloudBaseUrl: "https://proxy.example.com",
|
|
278
278
|
assistantApiKey: "stale-platform-key",
|
|
279
279
|
};
|
|
280
280
|
|
|
@@ -285,13 +285,13 @@ function jsonResponse(body: unknown, status: number): Response {
|
|
|
285
285
|
});
|
|
286
286
|
}
|
|
287
287
|
|
|
288
|
-
describe("
|
|
288
|
+
describe("cloud-proxy Gemini fallback to direct key", () => {
|
|
289
289
|
const originalFetch = globalThis.fetch;
|
|
290
290
|
let fetchMock: ReturnType<typeof mock>;
|
|
291
291
|
|
|
292
292
|
beforeEach(() => {
|
|
293
293
|
clearEmbeddingBackendCache();
|
|
294
|
-
// Managed-proxy requests (proxy.example.com) are rejected like a
|
|
294
|
+
// Managed-proxy requests (proxy.example.com) are rejected like a cloud
|
|
295
295
|
// proxy with a bad credential; direct Google API requests succeed.
|
|
296
296
|
fetchMock = mock(async (url: string | URL) => {
|
|
297
297
|
if (String(url).startsWith("https://proxy.example.com/")) {
|
|
@@ -306,14 +306,14 @@ describe("managed-proxy Gemini fallback to direct key", () => {
|
|
|
306
306
|
globalThis.fetch = originalFetch;
|
|
307
307
|
clearEmbeddingBackendCache();
|
|
308
308
|
secureKeys.clear();
|
|
309
|
-
|
|
310
|
-
|
|
309
|
+
resolveCloudProxyContextMock.mockReset();
|
|
310
|
+
resolveCloudProxyContextMock.mockImplementation(
|
|
311
311
|
async () => DISABLED_PROXY_CONTEXT,
|
|
312
312
|
);
|
|
313
313
|
});
|
|
314
314
|
|
|
315
|
-
test("falls back to the direct key when the
|
|
316
|
-
|
|
315
|
+
test("falls back to the direct key when the cloud-proxy primary fails", async () => {
|
|
316
|
+
resolveCloudProxyContextMock.mockImplementation(
|
|
317
317
|
async () => ENABLED_PROXY_CONTEXT,
|
|
318
318
|
);
|
|
319
319
|
setKey("gemini", "direct-key");
|
|
@@ -339,8 +339,8 @@ describe("managed-proxy Gemini fallback to direct key", () => {
|
|
|
339
339
|
expect(directUrl).toContain("key=direct-key");
|
|
340
340
|
});
|
|
341
341
|
|
|
342
|
-
test("surfaces the
|
|
343
|
-
|
|
342
|
+
test("surfaces the cloud-proxy error when no direct key exists", async () => {
|
|
343
|
+
resolveCloudProxyContextMock.mockImplementation(
|
|
344
344
|
async () => ENABLED_PROXY_CONTEXT,
|
|
345
345
|
);
|
|
346
346
|
|
|
@@ -350,7 +350,7 @@ describe("managed-proxy Gemini fallback to direct key", () => {
|
|
|
350
350
|
expect(fetchMock).toHaveBeenCalledTimes(1);
|
|
351
351
|
});
|
|
352
352
|
|
|
353
|
-
test("uses the direct key as primary when the
|
|
353
|
+
test("uses the direct key as primary when the cloud proxy is disabled", async () => {
|
|
354
354
|
setKey("gemini", "direct-key");
|
|
355
355
|
|
|
356
356
|
const result = await embedWithBackend(GEMINI_CONFIG, ["another input"]);
|