@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.
Files changed (892) hide show
  1. package/README.md +1 -1
  2. package/docs/activation-funnel-telemetry.md +6 -6
  3. package/docs/cadet-doctor.md +7 -7
  4. package/docs/desktop-browser-cli.md +7 -7
  5. package/docs/skills.md +2 -2
  6. package/docs/voice-input-diagnostics.md +1 -1
  7. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +2 -2
  8. package/node_modules/@mycadet/avatar-manifest/src/__tests__/notification-avatar.test.ts +1 -1
  9. package/node_modules/@mycadet/avatar-manifest/src/notification-avatar.ts +2 -2
  10. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/package.json +1 -1
  11. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
  12. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
  13. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
  14. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
  15. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
  16. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
  17. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
  18. package/node_modules/@mycadet/ces-client/src/rpc-client.ts +1 -1
  19. package/node_modules/@mycadet/credential-storage/src/oauth-runtime.ts +1 -1
  20. package/node_modules/@mycadet/credential-storage/src/static-credentials.ts +1 -1
  21. package/node_modules/@mycadet/environments/src/seeds.ts +6 -6
  22. package/node_modules/@mycadet/environments/src/shell.test.ts +1 -1
  23. package/node_modules/@mycadet/environments/src/types.ts +6 -6
  24. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/package.json +1 -1
  25. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
  26. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
  27. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
  28. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
  29. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
  30. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
  31. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
  32. package/node_modules/@mycadet/gateway-client/src/binding-strength-contract.ts +5 -5
  33. package/node_modules/@mycadet/gateway-client/src/gateway-ipc-contracts.ts +1 -1
  34. package/node_modules/@mycadet/gateway-client/src/inbound-contract.ts +2 -2
  35. package/node_modules/@mycadet/gateway-client/src/outbound-contract.ts +1 -1
  36. package/node_modules/@mycadet/service-contracts/package.json +1 -1
  37. package/node_modules/@mycadet/service-contracts/src/{platform-credential.ts → cloud-credential.ts} +9 -9
  38. package/node_modules/@mycadet/service-contracts/src/handles.ts +3 -3
  39. package/node_modules/@mycadet/service-contracts/src/index.ts +1 -1
  40. package/node_modules/@mycadet/service-contracts/src/ingress.ts +11 -5
  41. package/node_modules/@mycadet/service-contracts/src/remote-web-pairing.ts +1 -1
  42. package/node_modules/@mycadet/service-contracts/src/rpc.ts +14 -14
  43. package/node_modules/@mycadet/service-contracts/src/trust-rules.ts +5 -5
  44. package/openapi.yaml +6815 -794
  45. package/package.json +2 -2
  46. package/scripts/build-test-fixtures.ts +1 -1
  47. package/scripts/probe-skill-retrieval.ts +1 -1
  48. package/scripts/sync-llm-catalog.ts +2 -2
  49. package/scripts/voice-ttft-spike.ts +2 -2
  50. package/src/__tests__/adaptive-thinking-repair.test.ts +4 -4
  51. package/src/__tests__/agent-loop-override-profile.test.ts +4 -4
  52. package/src/__tests__/agent-loop-subagent-billing-headers.test.ts +1 -1
  53. package/src/__tests__/anthropic-provider.test.ts +2 -2
  54. package/src/__tests__/available-skills.test.ts +11 -12
  55. package/src/__tests__/avatar-identity-sync.test.ts +1 -1
  56. package/src/__tests__/byok-default-profile-ensure.test.ts +7 -7
  57. package/src/__tests__/call-domain.test.ts +1 -1
  58. package/src/__tests__/call-site-routing-connection-auto-resolve.test.ts +2 -2
  59. package/src/__tests__/catalog-files.test.ts +10 -10
  60. package/src/__tests__/catalog-install-normalize.test.ts +3 -3
  61. package/src/__tests__/channel-availability-routes.test.ts +8 -8
  62. package/src/__tests__/channel-readiness-routes.test.ts +4 -4
  63. package/src/__tests__/channel-readiness-service.test.ts +14 -14
  64. package/src/__tests__/channel-readiness-telegram-remote.test.ts +1 -1
  65. package/src/__tests__/chat-reveal-guard-priming.test.ts +5 -6
  66. package/src/__tests__/checker.test.ts +6 -6
  67. package/src/__tests__/clawhub.test.ts +1 -1
  68. package/src/__tests__/{platform-callback-registration.test.ts → cloud-callback-registration.test.ts} +66 -90
  69. package/src/__tests__/{platform-client-verify-credential.test.ts → cloud-client-verify-credential.test.ts} +14 -14
  70. package/src/__tests__/{managed-credential-catalog-cli.test.ts → cloud-credential-catalog-cli.test.ts} +41 -41
  71. package/src/__tests__/{managed-fallback-dispatch.test.ts → cloud-fallback-dispatch.test.ts} +21 -16
  72. package/src/__tests__/{managed-profile-guard.test.ts → cloud-profile-guard.test.ts} +60 -60
  73. package/src/__tests__/{platform-proxy-context.test.ts → cloud-proxy-context.test.ts} +44 -44
  74. package/src/__tests__/{managed-speech-defaults.test.ts → cloud-speech-defaults.test.ts} +41 -41
  75. package/src/__tests__/{managed-store.test.ts → cloud-store.test.ts} +99 -99
  76. package/src/__tests__/compaction-events.test.ts +7 -5
  77. package/src/__tests__/config-loader-backfill.test.ts +65 -65
  78. package/src/__tests__/config-loader-cloud-defaults.test.ts +373 -0
  79. package/src/__tests__/config-loader-corrupt.test.ts +1 -1
  80. package/src/__tests__/config-loader-validation-reset-notice.test.ts +1 -1
  81. package/src/__tests__/config-schema.test.ts +3 -3
  82. package/src/__tests__/{config-set-platform-guard.test.ts → config-set-cloud-guard.test.ts} +6 -6
  83. package/src/__tests__/config-watcher-cleanup-throttle.test.ts +0 -8
  84. package/src/__tests__/config-watcher.test.ts +1 -1
  85. package/src/__tests__/contacts-write.test.ts +1 -1
  86. package/src/__tests__/conversation-agent-loop.test.ts +2 -2
  87. package/src/__tests__/conversation-app-control-instantiation.test.ts +18 -18
  88. package/src/__tests__/conversation-error.test.ts +45 -45
  89. package/src/__tests__/conversation-inference-profile-route.test.ts +4 -4
  90. package/src/__tests__/conversation-rendered-delegation-state.test.ts +4 -4
  91. package/src/__tests__/conversation-skill-tools.test.ts +7 -8
  92. package/src/__tests__/conversation-slash.test.ts +2 -2
  93. package/src/__tests__/conversation-speed-override.test.ts +8 -10
  94. package/src/__tests__/conversation-summarize-up-to.test.ts +4 -4
  95. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +1 -1
  96. package/src/__tests__/conversation-wait-for-idle.test.ts +7 -5
  97. package/src/__tests__/credential-execution-api-key-propagation.test.ts +5 -5
  98. package/src/__tests__/{credential-execution-managed-contract.test.ts → credential-execution-cloud-contract.test.ts} +24 -24
  99. package/src/__tests__/credential-health-service.test.ts +27 -41
  100. package/src/__tests__/credential-routes.test.ts +85 -165
  101. package/src/__tests__/credential-security-invariants.test.ts +6 -7
  102. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  103. package/src/__tests__/date-context.test.ts +1 -1
  104. package/src/__tests__/default-profile-catalog-fallback.test.ts +15 -15
  105. package/src/__tests__/delete-managed-skill-tool.test.ts +8 -8
  106. package/src/__tests__/discord-callback-round-trip.test.ts +1 -1
  107. package/src/__tests__/disk-usage.test.ts +3 -3
  108. package/src/__tests__/email-invite-adapter.test.ts +5 -5
  109. package/src/__tests__/{embedding-managed-proxy-selection.test.ts → embedding-cloud-proxy-selection.test.ts} +44 -43
  110. package/src/__tests__/emit-signal-routing-intent.test.ts +13 -15
  111. package/src/__tests__/events-dev-bypass-actor.test.ts +2 -2
  112. package/src/__tests__/fallback-breaker.test.ts +7 -7
  113. package/src/__tests__/feature-flag-test-helpers.ts +106 -0
  114. package/src/__tests__/gateway-flag-listener.test.ts +1 -1
  115. package/src/__tests__/gemini-image-service.test.ts +2 -2
  116. package/src/__tests__/gemini-provider.test.ts +5 -5
  117. package/src/__tests__/get-skill-detail-audit.test.ts +9 -8
  118. package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -1
  119. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +5 -5
  120. package/src/__tests__/host-cu-routes-targeted.test.ts +8 -8
  121. package/src/__tests__/image-credentials.test.ts +13 -13
  122. package/src/__tests__/inbound-admitted-introduction-nudge.test.ts +14 -6
  123. package/src/__tests__/inbound-trust-verdict.test.ts +14 -6
  124. package/src/__tests__/inference-no-mode-boot-e2e.test.ts +11 -11
  125. package/src/__tests__/inference-profile-session-handler.test.ts +7 -7
  126. package/src/__tests__/inference-profile-session-ipc.test.ts +5 -5
  127. package/src/__tests__/inference-profile-validation-jev.test.ts +1 -1
  128. package/src/__tests__/init-feature-flag-overrides.test.ts +40 -24
  129. package/src/__tests__/input-repairs.test.ts +1 -1
  130. package/src/__tests__/install-skill-routing.test.ts +10 -8
  131. package/src/__tests__/integration-status.test.ts +5 -5
  132. package/src/__tests__/internal-telemetry-routes.test.ts +3 -3
  133. package/src/__tests__/invite-routes-http.test.ts +1 -1
  134. package/src/__tests__/llm-catalog-parity.test.ts +5 -7
  135. package/src/__tests__/llm-request-log-source-clickhouse.test.ts +2 -2
  136. package/src/__tests__/llm-resolver-override-or-default.test.ts +3 -3
  137. package/src/__tests__/llm-resolver.test.ts +1 -1
  138. package/src/__tests__/llm-schema-fallback-profile.test.ts +25 -19
  139. package/src/__tests__/llm-usage-store.test.ts +1 -1
  140. package/src/__tests__/managed-skill-lifecycle.test.ts +12 -12
  141. package/src/__tests__/mcp-abort-signal.test.ts +2 -2
  142. package/src/__tests__/mcp-client-auth.test.ts +2 -2
  143. package/src/__tests__/mcp-tool-annotations-risk.test.ts +2 -2
  144. package/src/__tests__/media-generate-image.test.ts +30 -30
  145. package/src/__tests__/memory-config-file-parity.test.ts +6 -6
  146. package/src/__tests__/migration-export-to-gcs.test.ts +4 -4
  147. package/src/__tests__/migration-import-commit-http.test.ts +1 -1
  148. package/src/__tests__/mtime-cache.test.ts +2 -2
  149. package/src/__tests__/{notification-platform-adapter.test.ts → notification-cloud-adapter.test.ts} +39 -39
  150. package/src/__tests__/notification-deep-link.test.ts +40 -40
  151. package/src/__tests__/oauth-apps-routes.test.ts +3 -3
  152. package/src/__tests__/oauth-cli.test.ts +9 -9
  153. package/src/__tests__/oauth-commands-routes.test.ts +16 -16
  154. package/src/__tests__/oauth-connect-orchestrator.test.ts +2 -2
  155. package/src/__tests__/oauth-provider-serializer.test.ts +11 -11
  156. package/src/__tests__/oauth-providers-routes.test.ts +12 -12
  157. package/src/__tests__/oauth-store.test.ts +1 -1
  158. package/src/__tests__/oauth2-gateway-transport.test.ts +3 -3
  159. package/src/__tests__/onboarding-persona-write.test.ts +2 -2
  160. package/src/__tests__/openai-image-service.test.ts +2 -2
  161. package/src/__tests__/openai-responses-cutover-guard.test.ts +2 -2
  162. package/src/__tests__/openai-responses-provider.test.ts +1 -1
  163. package/src/__tests__/path-policy.test.ts +4 -4
  164. package/src/__tests__/personal-memory-auth-bypass.test.ts +1 -1
  165. package/src/__tests__/platform-bash-auto-approve.test.ts +18 -18
  166. package/src/__tests__/plugin-api-model-profiles.test.ts +1 -1
  167. package/src/__tests__/plugin-api-provider.test.ts +1 -1
  168. package/src/__tests__/plugin-api-webhook-url.test.ts +4 -5
  169. package/src/__tests__/plugin-import-boundary-guard.test.ts +8 -39
  170. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +2 -2
  171. package/src/__tests__/{provider-platform-proxy-integration.test.ts → provider-cloud-proxy-integration.test.ts} +70 -72
  172. package/src/__tests__/provider-commit-message-generator.test.ts +1 -1
  173. package/src/__tests__/provider-connections-backfill.test.ts +9 -9
  174. package/src/__tests__/provider-error-scenarios.test.ts +8 -8
  175. package/src/__tests__/provider-registry-ollama.test.ts +1 -1
  176. package/src/__tests__/provider-send-message-override-profile.test.ts +5 -5
  177. package/src/__tests__/registry.test.ts +3 -3
  178. package/src/__tests__/requests-mock.ts +972 -0
  179. package/src/__tests__/resolve-trust-class.test.ts +1 -1
  180. package/src/__tests__/resource-pressure-guard.test.ts +6 -6
  181. package/src/__tests__/resource-pressure-routes.test.ts +5 -5
  182. package/src/__tests__/retry-fallback-escalation.test.ts +5 -5
  183. package/src/__tests__/sanitize-config-for-transfer.test.ts +1 -1
  184. package/src/__tests__/scaffold-managed-skill-tool.test.ts +97 -97
  185. package/src/__tests__/schedule-store.test.ts +1 -1
  186. package/src/__tests__/search-skills-unified.test.ts +9 -7
  187. package/src/__tests__/{secret-routes-platform-proxy.test.ts → secret-routes-cloud-proxy.test.ts} +48 -95
  188. package/src/__tests__/secret-routes-scrub.test.ts +2 -59
  189. package/src/__tests__/secure-keys.test.ts +1 -1
  190. package/src/__tests__/skill-load-plugin-scope.test.ts +2 -2
  191. package/src/__tests__/skill-load-tool.test.ts +1 -1
  192. package/src/__tests__/skill-projection-feature-flag.test.ts +0 -19
  193. package/src/__tests__/skill-projection.benchmark.test.ts +5 -7
  194. package/src/__tests__/skill-tool-factory.test.ts +1 -1
  195. package/src/__tests__/skills-file-content-endpoint.test.ts +12 -12
  196. package/src/__tests__/skills-files-catalog-fallback.test.ts +9 -9
  197. package/src/__tests__/skills.test.ts +1 -1
  198. package/src/__tests__/slim-skill-category.test.ts +11 -9
  199. package/src/__tests__/stt-stream-session.test.ts +3 -3
  200. package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
  201. package/src/__tests__/subagent-disposal.test.ts +5 -5
  202. package/src/__tests__/subagent-fork-notifications.test.ts +4 -4
  203. package/src/__tests__/subagent-fork-spawn.test.ts +5 -5
  204. package/src/__tests__/subagent-manager-notify.test.ts +5 -5
  205. package/src/__tests__/subagent-tool-gate-mode.test.ts +2 -2
  206. package/src/__tests__/system-prompt.test.ts +1 -1
  207. package/src/__tests__/telegram-bot-username-resolution.test.ts +34 -52
  208. package/src/__tests__/telegram-config.test.ts +16 -16
  209. package/src/__tests__/telephony-tts-guard.test.ts +13 -13
  210. package/src/__tests__/test-preload.ts +17 -7
  211. package/src/__tests__/tool-audit.test.ts +1 -1
  212. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +7 -5
  213. package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -1
  214. package/src/__tests__/turn-events-store.test.ts +1 -1
  215. package/src/__tests__/twilio-routes.test.ts +2 -1
  216. package/src/__tests__/ui-choice-copy-surfaces.test.ts +1 -1
  217. package/src/__tests__/unified-turn-context-client-os.test.ts +1 -1
  218. package/src/__tests__/validate-input.test.ts +5 -5
  219. package/src/__tests__/verification-outbound-delivery.test.ts +1 -1
  220. package/src/__tests__/voice-config-update.test.ts +15 -15
  221. package/src/__tests__/voice-ingress-preflight.test.ts +4 -4
  222. package/src/__tests__/web-search.test.ts +340 -859
  223. package/src/__tests__/workspace-git-service.test.ts +1 -1
  224. package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +12 -12
  225. package/src/__tests__/workspace-migration-087-memory-router-balanced-profile.test.ts +1 -1
  226. package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +1 -1
  227. package/src/__tests__/workspace-migration-100-upgrade-quality-profile-to-fable-5.test.ts +1 -1
  228. package/src/__tests__/workspace-migration-103-upgrade-quality-profile-to-opus-4-8.test.ts +1 -1
  229. package/src/__tests__/workspace-migration-110-flip-balanced-profile-to-together.test.ts +1 -1
  230. package/src/__tests__/workspace-migration-113-swap-balanced-profile-to-glm-5p2.test.ts +1 -1
  231. package/src/__tests__/workspace-migration-114-swap-quality-profile-to-opus.test.ts +1 -1
  232. package/src/__tests__/workspace-migration-123-swap-quality-profile-to-fable.test.ts +1 -1
  233. package/src/__tests__/workspace-migration-125-repoint-managed-connections-to-cadet.test.ts +3 -3
  234. package/src/__tests__/workspace-migration-126-strip-managed-profile-bodies.test.ts +9 -9
  235. package/src/__tests__/workspace-migration-127-backfill-default-provider.test.ts +11 -11
  236. package/src/__tests__/workspace-migration-130-speech-mode-to-provider.test.ts +3 -3
  237. package/src/__tests__/workspace-migration-132-web-search-mode-to-provider.test.ts +6 -6
  238. package/src/__tests__/workspace-migration-133-collapse-provider-connections.test.ts +3 -3
  239. package/src/__tests__/workspace-migration-134-image-generation-mode-to-provider.test.ts +6 -6
  240. package/src/__tests__/workspace-migration-136-repair-stale-fireworks-kimi-model-id.test.ts +1 -1
  241. package/src/__tests__/workspace-migration-137-repair-retired-fireworks-minimax-model-id.test.ts +1 -1
  242. package/src/__tests__/workspace-migration-146-repair-retired-fireworks-deepseek-flash-model-id.test.ts +1 -1
  243. package/src/__tests__/workspace-migration-147-rename-colliding-backup-profile-names.test.ts +1 -1
  244. package/src/__tests__/workspace-migration-151-repair-renamed-fireworks-deepseek-pro-model-id.test.ts +1 -1
  245. package/src/__tests__/workspace-migration-152-repair-retired-fireworks-minimax-m2p7-model-id.test.ts +1 -1
  246. package/src/__tests__/workspace-migration-159-rename-colliding-jev-profile-name.test.ts +1 -1
  247. package/src/__tests__/workspace-migration-160-repair-retired-fireworks-model-ids.test.ts +1 -1
  248. package/src/__tests__/workspace-migration-161-repair-retired-fireworks-glm-5p2-model-id.test.ts +1 -1
  249. package/src/api/events/cloud-disconnected.ts +21 -0
  250. package/src/api/events/host-bash.ts +1 -1
  251. package/src/api/events/host-cu.ts +1 -1
  252. package/src/api/events/host-file.ts +1 -1
  253. package/src/api/events/notification-intent.ts +1 -1
  254. package/src/api/events/{show-platform-login.ts → show-cloud-login.ts} +3 -5
  255. package/src/api/index.ts +11 -11
  256. package/src/api/responses/home.ts +1 -1
  257. package/src/api/surfaces.ts +4 -4
  258. package/src/approvals/guardian-request-resolvers.ts +2 -2
  259. package/src/avatar/accent-backfill.ts +1 -1
  260. package/src/avatar/identity-avatar.ts +1 -1
  261. package/src/avatar/notification-avatar.test.ts +2 -2
  262. package/src/avatar/notification-avatar.ts +2 -2
  263. package/src/avatar/resvg-lazy.test.ts +1 -1
  264. package/src/avatar/resvg-lazy.ts +3 -3
  265. package/src/avatar/sync-avatar.test.ts +76 -76
  266. package/src/avatar/sync-avatar.ts +15 -15
  267. package/src/avatar/traits-png-sync.ts +1 -1
  268. package/src/background-wake/background-wake-routes.test.ts +39 -39
  269. package/src/background-wake/{platform-client.test.ts → cloud-client.test.ts} +11 -11
  270. package/src/background-wake/{platform-client.ts → cloud-client.ts} +14 -14
  271. package/src/background-wake/publisher.ts +4 -4
  272. package/src/background-wake/wake-intent-hooks.test.ts +3 -3
  273. package/src/calls/__tests__/call-controller.test.ts +2 -2
  274. package/src/calls/__tests__/voice-session-bridge.test.ts +1 -1
  275. package/src/calls/call-domain.ts +1 -1
  276. package/src/calls/resolve-call-tts-provider.ts +6 -6
  277. package/src/calls/telephony-credential-preflight.ts +3 -3
  278. package/src/calls/telephony-tts-capability.ts +5 -6
  279. package/src/calls/tts-call-strategy.ts +1 -1
  280. package/src/calls/voice-escalation-judge.ts +1 -1
  281. package/src/calls/voice-ingress-preflight.ts +4 -4
  282. package/src/cli/bundled-modules.ts +1 -1
  283. package/src/cli/commands/__tests__/apps.test.ts +18 -53
  284. package/src/cli/commands/__tests__/plugins.test.ts +13 -13
  285. package/src/cli/commands/__tests__/tts.test.ts +1 -1
  286. package/src/cli/commands/auth.help.ts +3 -3
  287. package/src/cli/commands/auth.ts +2 -4
  288. package/src/cli/commands/browser.help.ts +2 -2
  289. package/src/cli/commands/channels/index.help.ts +2 -2
  290. package/src/cli/commands/channels/index.ts +1 -1
  291. package/src/cli/commands/channels/send.ts +1 -1
  292. package/src/cli/commands/cloud/__tests__/connect.test.ts +1 -1
  293. package/src/cli/commands/cloud/__tests__/disconnect.test.ts +3 -4
  294. package/src/cli/commands/cloud/connect.ts +2 -2
  295. package/src/cli/commands/cloud/credits-format.ts +1 -1
  296. package/src/cli/commands/cloud/index.help.ts +35 -35
  297. package/src/cli/commands/config.ts +1 -1
  298. package/src/cli/commands/credentials.ts +10 -12
  299. package/src/cli/commands/domain.ts +1 -1
  300. package/src/cli/commands/email.help.ts +1 -1
  301. package/src/cli/commands/email.ts +2 -2
  302. package/src/cli/commands/gateway.help.ts +1 -1
  303. package/src/cli/commands/gateway.ts +1 -1
  304. package/src/cli/commands/image-generation.help.ts +1 -1
  305. package/src/cli/commands/inference-providers.ts +1 -1
  306. package/src/cli/commands/inference.help.ts +2 -2
  307. package/src/cli/commands/memory/index.help.ts +1 -1
  308. package/src/cli/commands/oauth/connect.test.ts +2 -2
  309. package/src/cli/commands/oauth/connect.ts +1 -1
  310. package/src/cli/commands/oauth/index.help.ts +5 -5
  311. package/src/cli/commands/oauth/providers.ts +2 -2
  312. package/src/cli/commands/oauth/shared.ts +3 -3
  313. package/src/cli/commands/plugins.help.ts +2 -3
  314. package/src/cli/commands/plugins.ts +5 -5
  315. package/src/cli/commands/roadmap.help.ts +1 -1
  316. package/src/cli/commands/telemetry.help.ts +2 -2
  317. package/src/cli/commands/telemetry.ts +2 -2
  318. package/src/cli/commands/tts.help.ts +3 -3
  319. package/src/cli/commands/webhooks.help.ts +9 -9
  320. package/src/cli/commands/webhooks.ts +1 -1
  321. package/src/cli/lib/__tests__/inspect-plugin.test.ts +8 -8
  322. package/src/cli/lib/__tests__/{install-from-platform.test.ts → install-from-cloud.test.ts} +54 -54
  323. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +18 -18
  324. package/src/cli/lib/__tests__/{plugin-catalog-platform.test.ts → plugin-catalog-cloud.test.ts} +2 -2
  325. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +1 -1
  326. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +9 -9
  327. package/src/cli/lib/__tests__/plugin-details.test.ts +10 -10
  328. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +24 -24
  329. package/src/cli/lib/bundled-marketplace.json +1 -1
  330. package/src/cli/lib/inspect-plugin.ts +2 -2
  331. package/src/cli/lib/{install-from-platform.ts → install-from-cloud.ts} +29 -29
  332. package/src/cli/lib/install-from-github.ts +4 -4
  333. package/src/cli/lib/plugin-catalog-cache.ts +7 -7
  334. package/src/cli/lib/{plugin-catalog-platform.ts → plugin-catalog-cloud.ts} +6 -6
  335. package/src/cli/lib/plugin-catalog-local.ts +2 -2
  336. package/src/cli/lib/publish-plugin.ts +9 -10
  337. package/src/cli/lib/search-plugins.ts +2 -2
  338. package/src/{platform → cloud}/client.test.ts +85 -86
  339. package/src/{platform → cloud}/client.ts +38 -46
  340. package/src/{platform/platform-patch-queue.test.ts → cloud/cloud-patch-queue.test.ts} +6 -9
  341. package/src/{platform/platform-patch-queue.ts → cloud/cloud-patch-queue.ts} +11 -11
  342. package/src/{platform/managed-speech.test.ts → cloud/cloud-speech.test.ts} +19 -19
  343. package/src/{platform/managed-speech.ts → cloud/cloud-speech.ts} +41 -41
  344. package/src/{platform → cloud}/consent-cache.test.ts +5 -5
  345. package/src/{platform → cloud}/consent-cache.ts +8 -8
  346. package/src/cloud/feature-gate.ts +8 -0
  347. package/src/{platform → cloud}/sync-identity.test.ts +4 -4
  348. package/src/{platform → cloud}/sync-identity.ts +6 -6
  349. package/src/config/__tests__/{platform-identity.test.ts → cloud-identity.test.ts} +54 -56
  350. package/src/config/__tests__/{platform-rehydration.test.ts → cloud-rehydration.test.ts} +47 -80
  351. package/src/config/__tests__/default-profile-catalog.test.ts +12 -12
  352. package/src/config/__tests__/default-provider.test.ts +4 -4
  353. package/src/config/__tests__/deployment-context-defaults.test.ts +23 -23
  354. package/src/config/__tests__/{jev-managed-profile.test.ts → jev-cloud-profile.test.ts} +3 -5
  355. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +2 -2
  356. package/src/config/__tests__/loader-last-known-good.test.ts +6 -6
  357. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +2 -2
  358. package/src/config/__tests__/profile-materialization.test.ts +7 -7
  359. package/src/config/__tests__/seed-default-provider.test.ts +17 -17
  360. package/src/config/__tests__/sync-gated-profiles.test.ts +20 -20
  361. package/src/config/__tests__/webhook-routing.test.ts +51 -51
  362. package/src/config/bundled-skills/computer-use/TOOLS.json +12 -12
  363. package/src/config/bundled-skills/messaging/SKILL.md +8 -8
  364. package/src/config/bundled-skills/messaging/TOOLS.json +2 -2
  365. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +1 -1
  366. package/src/config/bundled-skills/messaging/tools/shared.ts +1 -1
  367. package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +2 -2
  368. package/src/config/bundled-skills/settings/TOOLS.json +3 -3
  369. package/src/config/bundled-skills/settings/tools/shared.ts +1 -1
  370. package/src/config/bundled-skills/settings/tools/voice-config-update.ts +12 -12
  371. package/src/config/bundled-skills/skill-management/SKILL.md +3 -3
  372. package/src/config/bundled-skills/skill-management/TOOLS.json +8 -8
  373. package/src/config/bundled-skills/skill-management/tools/{delete-managed.ts → delete-cloud.ts} +2 -2
  374. package/src/config/bundled-skills/skill-management/tools/{scaffold-managed.ts → scaffold-cloud.ts} +2 -2
  375. package/src/config/call-site-defaults.ts +6 -6
  376. package/src/config/{platform-identity.ts → cloud-identity.ts} +39 -42
  377. package/src/config/cloud-rehydration.ts +35 -0
  378. package/src/config/{managed-speech-defaults.ts → cloud-speech-defaults.ts} +13 -13
  379. package/src/config/default-profile-catalog.ts +36 -38
  380. package/src/config/default-profile-names.ts +11 -11
  381. package/src/config/default-provider-resolution.ts +2 -2
  382. package/src/config/default-provider.ts +1 -1
  383. package/src/config/env-registry.ts +23 -21
  384. package/src/config/env.ts +33 -46
  385. package/src/config/feature-flag-registry.json +5 -5
  386. package/src/config/inference-profile-validation.ts +1 -1
  387. package/src/config/llm-resolver.ts +9 -10
  388. package/src/config/loader.ts +33 -17
  389. package/src/config/profile-materialization.ts +8 -8
  390. package/src/config/profile-text-generation.test.ts +1 -1
  391. package/src/config/sanitize-for-transfer.ts +1 -1
  392. package/src/config/schema.ts +6 -6
  393. package/src/config/schemas/__tests__/stt.test.ts +2 -2
  394. package/src/config/schemas/call-site-catalog.ts +1 -1
  395. package/src/config/schemas/channels.ts +8 -0
  396. package/src/config/schemas/{platform.ts → cloud.ts} +7 -6
  397. package/src/config/schemas/host-browser.ts +1 -0
  398. package/src/config/schemas/ingress.ts +1 -12
  399. package/src/config/schemas/llm.ts +45 -36
  400. package/src/config/schemas/memory-lifecycle.ts +11 -1
  401. package/src/config/schemas/services.ts +4 -4
  402. package/src/config/schemas/stt.ts +3 -3
  403. package/src/config/schemas/tts.ts +10 -5
  404. package/src/config/schemas/voice.ts +1 -1
  405. package/src/config/seed-inference-profiles.ts +19 -19
  406. package/src/config/skill-state.ts +2 -2
  407. package/src/config/skills.ts +4 -4
  408. package/src/config/sync-gated-profiles.ts +8 -8
  409. package/src/config/webhook-routing.ts +19 -19
  410. package/src/contacts/contacts-write.ts +1 -1
  411. package/src/credential-execution/ces-runtime.ts +6 -6
  412. package/src/credential-execution/{managed-catalog.ts → cloud-catalog.ts} +24 -24
  413. package/src/credential-execution/prompted-credential.ts +6 -18
  414. package/src/credential-health/credential-health-service.ts +61 -76
  415. package/src/daemon/__tests__/can-spawn-subagents.test.ts +1 -1
  416. package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +4 -4
  417. package/src/daemon/config-watcher.ts +2 -2
  418. package/src/daemon/conversation-agent-loop.ts +9 -9
  419. package/src/daemon/conversation-error.ts +36 -36
  420. package/src/daemon/conversation-skill-tools.ts +7 -7
  421. package/src/daemon/conversation-surfaces.ts +1 -1
  422. package/src/daemon/conversation-tool-setup.ts +2 -2
  423. package/src/daemon/conversation-turn-finalize.ts +1 -1
  424. package/src/daemon/conversation-workspace.ts +1 -1
  425. package/src/daemon/conversation.ts +1 -1
  426. package/src/daemon/credential-transcript-scrub.ts +21 -35
  427. package/src/daemon/daemon-readiness.ts +1 -1
  428. package/src/daemon/event-loop-watchdog.ts +2 -2
  429. package/src/daemon/handlers/config-ingress.ts +9 -9
  430. package/src/daemon/handlers/config-telegram.ts +6 -6
  431. package/src/daemon/handlers/skills.ts +20 -20
  432. package/src/daemon/host-cu-proxy.ts +1 -1
  433. package/src/daemon/lifecycle.ts +19 -19
  434. package/src/daemon/parse-actual-tokens-from-error.ts +3 -3
  435. package/src/daemon/providers-setup.ts +6 -6
  436. package/src/daemon/resource-pressure-guard-lifecycle.ts +1 -1
  437. package/src/daemon/resource-pressure-guard.ts +6 -6
  438. package/src/daemon/shutdown-handlers.ts +1 -1
  439. package/src/daemon/sqlite-corruption-watchdog.ts +3 -3
  440. package/src/daemon/trust-context.ts +1 -1
  441. package/src/desktop/desktop-automation-lease.ts +1 -1
  442. package/src/desktop/desktop-browser-endpoint.ts +2 -4
  443. package/src/desktop/desktop-computer-use-routing.test.ts +6 -6
  444. package/src/desktop/desktop-stream-bridge.test.ts +4 -4
  445. package/src/desktop/desktop-stream-bridge.ts +1 -1
  446. package/src/desktop/{virtual-desktop-platform.test.ts → virtual-desktop-cloud.test.ts} +6 -6
  447. package/src/desktop/virtual-desktop-feature.ts +7 -7
  448. package/src/email/byo-email-credential.ts +1 -1
  449. package/src/email/registered-inbox.test.ts +16 -16
  450. package/src/email/registered-inbox.ts +20 -20
  451. package/src/heartbeat/heartbeat-service.ts +1 -1
  452. package/src/hooks/hook-loader.ts +2 -2
  453. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  454. package/src/inbound/__tests__/tunnel-probe.test.ts +8 -8
  455. package/src/inbound/{platform-callback-registration.ts → cloud-callback-registration.ts} +49 -60
  456. package/src/inbound/oauth-callback-url.ts +6 -6
  457. package/src/inbound/pod-webhook-claim.ts +2 -2
  458. package/src/inbound/public-ingress-urls.ts +3 -3
  459. package/src/inbound/tunnel-probe.ts +21 -15
  460. package/src/inbound/tunnel-webhooks-gate.ts +3 -3
  461. package/src/ipc/__tests__/db-readiness-ipc-gate.test.ts +1 -1
  462. package/src/ipc/__tests__/email-ipc.test.ts +8 -8
  463. package/src/ipc/gateway-client.test.ts +55 -59
  464. package/src/ipc/gateway-flag-listener.ts +3 -3
  465. package/src/ipc/routes/db-proxy.ts +1 -1
  466. package/src/live-voice/__tests__/live-activity-reporter.test.ts +2 -2
  467. package/src/live-voice/__tests__/{live-voice-managed-speech-fallback.test.ts → live-voice-cloud-speech-fallback.test.ts} +15 -15
  468. package/src/live-voice/__tests__/live-voice-credential-preflight.test.ts +7 -7
  469. package/src/live-voice/__tests__/live-voice-stt.test.ts +1 -1
  470. package/src/live-voice/live-activity-reporter.ts +7 -7
  471. package/src/live-voice/live-voice-credential-preflight.ts +6 -6
  472. package/src/live-voice/live-voice-session.ts +3 -3
  473. package/src/live-voice/live-voice-tts.ts +1 -1
  474. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +4 -4
  475. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +1 -1
  476. package/src/mcp/mcp-oauth-provider.ts +2 -2
  477. package/src/media/gemini-image-service.ts +11 -13
  478. package/src/media/image-credentials.ts +9 -9
  479. package/src/media/openai-image-service.ts +1 -1
  480. package/src/media/types.ts +3 -3
  481. package/src/messaging/providers/channel-transport.ts +1 -1
  482. package/src/messaging/providers/discord/transport.ts +1 -1
  483. package/src/messaging/providers/gmail/adapter.ts +1 -1
  484. package/src/messaging/providers/gmail/client.ts +4 -4
  485. package/src/messaging/providers/outlook/adapter.ts +1 -1
  486. package/src/messaging/providers/slack/adapter.ts +1 -1
  487. package/src/messaging/providers/slack/transport.ts +1 -1
  488. package/src/messaging/providers/telegram-bot/transport.ts +1 -1
  489. package/src/monitoring/db-integrity-check.ts +1 -1
  490. package/src/monitoring/db-integrity-sample.ts +2 -2
  491. package/src/monitoring/mount-watch.ts +1 -1
  492. package/src/monitoring/oom-kill-reporter.ts +1 -1
  493. package/src/monitoring/worker.ts +5 -5
  494. package/src/notifications/README.md +2 -2
  495. package/src/notifications/__tests__/broadcaster.test.ts +9 -9
  496. package/src/notifications/__tests__/completion-policy.test.ts +1 -1
  497. package/src/notifications/__tests__/emit-signal-pipeline-failure.test.ts +4 -4
  498. package/src/notifications/activity-failed-dedupe.ts +1 -1
  499. package/src/notifications/adapters/{platform.ts → cloud.ts} +8 -8
  500. package/src/notifications/broadcaster.ts +10 -10
  501. package/src/notifications/decision-engine.ts +1 -1
  502. package/src/notifications/destination-resolver.ts +1 -1
  503. package/src/notifications/emit-signal.ts +6 -6
  504. package/src/notifications/types.ts +2 -2
  505. package/src/oauth/__tests__/identity-verifier.test.ts +1 -1
  506. package/src/oauth/__tests__/{seed-providers-managed.test.ts → seed-providers-cloud.test.ts} +13 -13
  507. package/src/oauth/byo-connection.test.ts +2 -2
  508. package/src/oauth/{platform-connection.test.ts → cloud-connection.test.ts} +41 -43
  509. package/src/oauth/{platform-connection.ts → cloud-connection.ts} +19 -19
  510. package/src/oauth/connection-resolver.test.ts +59 -61
  511. package/src/oauth/connection-resolver.ts +22 -22
  512. package/src/oauth/connection.ts +1 -1
  513. package/src/oauth/oauth-store.ts +8 -8
  514. package/src/oauth/provider-serializer.ts +4 -4
  515. package/src/oauth/revoke.ts +1 -1
  516. package/src/oauth/seed-providers.ts +32 -32
  517. package/src/permissions/approval-provenance.ts +1 -1
  518. package/src/permissions/checker.test.ts +18 -16
  519. package/src/permissions/checker.ts +3 -3
  520. package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
  521. package/src/persistence/embeddings/embedding-backend.test.ts +16 -16
  522. package/src/persistence/embeddings/embedding-backend.ts +13 -13
  523. package/src/persistence/embeddings/embedding-gemini.test.ts +9 -12
  524. package/src/persistence/embeddings/embedding-gemini.ts +11 -11
  525. package/src/persistence/embeddings/embedding-runtime-manager.ts +2 -2
  526. package/src/persistence/jobs-store.ts +1 -1
  527. package/src/persistence/lifecycle-events-store.ts +1 -1
  528. package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
  529. package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
  530. package/src/persistence/migrations/224-oauth-providers-managed-service-is-paid.ts +1 -1
  531. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  532. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.ts +2 -2
  533. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  534. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.ts +1 -1
  535. package/src/persistence/migrations/351-schedule-skill-script-handoff.ts +1 -1
  536. package/src/persistence/migrations/361-normalize-managed-connection-rows.test.ts +3 -3
  537. package/src/persistence/migrations/361-normalize-managed-connection-rows.ts +7 -7
  538. package/src/persistence/migrations/__tests__/319-remove-legacy-managed-connections.test.ts +2 -2
  539. package/src/persistence/schema/oauth.ts +1 -1
  540. package/src/plugin-api/index.ts +4 -4
  541. package/src/plugin-api/model-profiles.test.ts +1 -1
  542. package/src/plugin-api/model-profiles.ts +1 -1
  543. package/src/plugin-api/transcription-session.ts +1 -1
  544. package/src/plugin-api/vision-support.test.ts +1 -1
  545. package/src/plugin-api/webhook-url.ts +12 -12
  546. package/src/plugins/__tests__/source-fingerprint.test.ts +1 -1
  547. package/src/plugins/defaults/{platform-hosted → cloud-hosted}/__tests__/reengage.test.ts +5 -6
  548. package/src/plugins/defaults/cloud-hosted/package.json +14 -0
  549. package/src/plugins/defaults/{platform-hosted → cloud-hosted}/routes/reengage.ts +3 -3
  550. package/src/plugins/defaults/index.ts +6 -6
  551. package/src/plugins/defaults/main.ts +5 -5
  552. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +5 -5
  553. package/src/plugins/defaults/memory/__tests__/memory-retrospective-prompt.test.ts +1 -1
  554. package/src/plugins/defaults/memory/__tests__/memory-retrospective-provider-path.test.ts +1 -1
  555. package/src/plugins/defaults/memory/config.ts +4 -4
  556. package/src/plugins/defaults/memory/memory-retrospective-constants.ts +2 -2
  557. package/src/plugins/defaults/memory/memory-retrospective-job.ts +7 -7
  558. package/src/plugins/defaults/memory/memory-retrospective-prompt.ts +5 -5
  559. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +2 -2
  560. package/src/plugins/defaults/memory/src/__tests__/memory-v2-routes.test.ts +1 -1
  561. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  562. package/src/plugins/defaults/memory/substrate/__tests__/boot-maintenance.test.ts +20 -20
  563. package/src/plugins/defaults/memory/substrate/__tests__/cli-command-store.test.ts +1 -1
  564. package/src/plugins/defaults/memory/substrate/__tests__/skill-store.test.ts +3 -3
  565. package/src/plugins/defaults/memory/substrate/boot-maintenance.ts +17 -17
  566. package/src/plugins/defaults/memory/substrate/cli-command-store.ts +2 -2
  567. package/src/plugins/defaults/memory/substrate/prompts/consolidation.ts +1 -1
  568. package/src/plugins/defaults/memory/substrate/skill-store.ts +4 -4
  569. package/src/plugins/defaults/memory/v3/__tests__/maintain-job.test.ts +3 -3
  570. package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +2 -2
  571. package/src/plugins/defaults/memory/v3/maintain-job.ts +10 -10
  572. package/src/plugins/defaults/memory/v3/orchestrate.ts +3 -3
  573. package/src/plugins/defaults/memory/worker.ts +5 -5
  574. package/src/plugins/defaults/workspace/injectors.ts +2 -2
  575. package/src/plugins/mtime-cache.ts +1 -1
  576. package/src/plugins/source-versions.ts +1 -1
  577. package/src/plugins/types.ts +1 -1
  578. package/src/prompts/__tests__/system-prompt.test.ts +1 -1
  579. package/src/prompts/normalize-onboarding.ts +1 -1
  580. package/src/prompts/persona-resolver.ts +1 -1
  581. package/src/prompts/templates/system-sections.ts +3 -3
  582. package/src/providers/__tests__/cadet-connection-routing.test.ts +7 -7
  583. package/src/providers/__tests__/cadet-mismatch-routing.test.ts +12 -12
  584. package/src/providers/__tests__/connection-model-compat.test.ts +2 -2
  585. package/src/providers/__tests__/dispatch-connection-routing.test.ts +10 -10
  586. package/src/providers/__tests__/inference.test.ts +2 -2
  587. package/src/providers/__tests__/preflight-resolved-config.test.ts +16 -16
  588. package/src/providers/__tests__/retry-callsite.test.ts +1 -1
  589. package/src/providers/__tests__/satellite-connection-routing.test.ts +4 -4
  590. package/src/providers/__tests__/search-provider-catalog.test.ts +2 -2
  591. package/src/providers/__tests__/voice-error-copy.test.ts +3 -3
  592. package/src/providers/anthropic/client.ts +1 -1
  593. package/src/providers/cadet/client.ts +1 -1
  594. package/src/providers/cadet-model-routing.test.ts +19 -19
  595. package/src/providers/cadet-model-routing.ts +23 -23
  596. package/src/providers/call-site-routing.ts +10 -10
  597. package/src/providers/{platform-proxy → cloud-proxy}/constants.ts +11 -11
  598. package/src/providers/{platform-proxy → cloud-proxy}/context.ts +26 -26
  599. package/src/providers/connection-resolution.ts +43 -43
  600. package/src/providers/fallback-breaker.ts +2 -2
  601. package/src/providers/fetch-provider-catalog.ts +3 -3
  602. package/src/providers/gemini/client.ts +5 -5
  603. package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +3 -3
  604. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +8 -8
  605. package/src/providers/inference/__tests__/base-url-security.test.ts +4 -4
  606. package/src/providers/inference/adapter-factory.ts +35 -35
  607. package/src/providers/inference/auth.ts +10 -10
  608. package/src/providers/inference/backfill.ts +11 -11
  609. package/src/providers/inference/connection-availability.ts +24 -24
  610. package/src/providers/inference/connections.ts +18 -20
  611. package/src/providers/inference/profile-probe.ts +4 -4
  612. package/src/providers/inference/resolve-auth.ts +8 -8
  613. package/src/providers/jev/ask.test.ts +1 -1
  614. package/src/providers/jev/ask.ts +2 -2
  615. package/src/providers/model-catalog.ts +8 -9
  616. package/src/providers/openai/__tests__/api-error-normalization.test.ts +3 -3
  617. package/src/providers/openai/api-error-normalization.ts +2 -2
  618. package/src/providers/provider-availability.ts +4 -4
  619. package/src/providers/provider-env-vars.ts +1 -1
  620. package/src/providers/provider-secret-catalog.ts +1 -1
  621. package/src/providers/registry.ts +20 -20
  622. package/src/providers/retry.ts +26 -26
  623. package/src/providers/routing-identity.ts +10 -10
  624. package/src/providers/search-provider-catalog.ts +2 -2
  625. package/src/providers/speech-to-text/__tests__/{cadet-managed-realtime.test.ts → cadet-cloud-realtime.test.ts} +3 -3
  626. package/src/providers/speech-to-text/__tests__/{cadet-managed.test.ts → cadet-cloud.test.ts} +35 -35
  627. package/src/providers/speech-to-text/__tests__/deepgram-flux-realtime.test.ts +1 -1
  628. package/src/providers/speech-to-text/__tests__/resolve.test.ts +27 -27
  629. package/src/providers/speech-to-text/{cadet-managed-flux-realtime.ts → cadet-cloud-flux-realtime.ts} +6 -8
  630. package/src/providers/speech-to-text/{cadet-managed-realtime.ts → cadet-cloud-realtime.ts} +3 -3
  631. package/src/providers/speech-to-text/{cadet-managed.ts → cadet-cloud.ts} +18 -20
  632. package/src/providers/speech-to-text/cadet-speech-relay-connection.ts +7 -7
  633. package/src/providers/speech-to-text/deepgram-flux-frames.ts +3 -3
  634. package/src/providers/speech-to-text/deepgram-flux-realtime.ts +4 -4
  635. package/src/providers/speech-to-text/provider-catalog.ts +3 -3
  636. package/src/providers/speech-to-text/resolve.ts +26 -28
  637. package/src/providers/together/client.ts +1 -1
  638. package/src/providers/types.ts +4 -4
  639. package/src/providers/voice-error-copy.ts +1 -1
  640. package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +10 -10
  641. package/src/runtime/agent-wake.ts +1 -1
  642. package/src/runtime/auth/__tests__/middleware.test.ts +1 -1
  643. package/src/runtime/auth/middleware.ts +1 -1
  644. package/src/runtime/auth/scopes.ts +1 -1
  645. package/src/runtime/capabilities.ts +1 -1
  646. package/src/runtime/channel-invite-transports/discord.ts +1 -1
  647. package/src/runtime/channel-invite-transports/email.ts +2 -2
  648. package/src/runtime/channel-readiness-service.ts +15 -13
  649. package/src/runtime/channel-reply-session.test.ts +1 -1
  650. package/src/runtime/channel-reply-session.ts +1 -1
  651. package/src/runtime/http-server.ts +4 -4
  652. package/src/runtime/introduction-policy.ts +4 -4
  653. package/src/runtime/migrations/__tests__/origin-mode.test.ts +14 -14
  654. package/src/runtime/migrations/__tests__/v1-test-helpers.ts +1 -1
  655. package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +2 -2
  656. package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +3 -4
  657. package/src/runtime/migrations/__tests__/vbundle-metadata-merge.test.ts +6 -7
  658. package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +1 -1
  659. package/src/runtime/migrations/migration-transport.ts +3 -3
  660. package/src/runtime/migrations/origin-mode.ts +6 -9
  661. package/src/runtime/migrations/vbundle-import-policy.ts +2 -2
  662. package/src/runtime/migrations/vbundle-importer.ts +4 -4
  663. package/src/runtime/migrations/vbundle-streaming-importer.ts +6 -6
  664. package/src/runtime/migrations/vbundle-validator.ts +1 -1
  665. package/src/runtime/routes/__tests__/{platform-credits-routes.test.ts → cloud-credits-routes.test.ts} +9 -9
  666. package/src/runtime/routes/__tests__/{platform-invoice-routes.test.ts → cloud-invoice-routes.test.ts} +13 -13
  667. package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +1 -1
  668. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +26 -25
  669. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +5 -5
  670. package/src/runtime/routes/__tests__/default-provider-routes.test.ts +10 -10
  671. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +18 -18
  672. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +18 -16
  673. package/src/runtime/routes/__tests__/inference-send-routes.test.ts +1 -1
  674. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  675. package/src/runtime/routes/__tests__/migration-cadet-metadata-reconcile.test.ts +5 -20
  676. package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -22
  677. package/src/runtime/routes/__tests__/oauth-proxy-routes.test.ts +27 -27
  678. package/src/runtime/routes/__tests__/plugins-routes.test.ts +5 -5
  679. package/src/runtime/routes/__tests__/ps-routes.test.ts +5 -3
  680. package/src/runtime/routes/__tests__/roadmap-routes.test.ts +15 -15
  681. package/src/runtime/routes/__tests__/webhook-routes.test.ts +31 -31
  682. package/src/runtime/routes/app-management-routes.ts +1 -1
  683. package/src/runtime/routes/attachment-routes.ts +1 -1
  684. package/src/runtime/routes/auth-routes.ts +14 -14
  685. package/src/runtime/routes/avatar-routes.ts +0 -14
  686. package/src/runtime/routes/background-wake-routes.ts +4 -4
  687. package/src/runtime/routes/channel-availability-routes.ts +4 -4
  688. package/src/runtime/routes/client-routes.ts +5 -5
  689. package/src/runtime/routes/cloud-credentials.ts +45 -0
  690. package/src/runtime/routes/{platform-routes.ts → cloud-routes.ts} +83 -116
  691. package/src/runtime/routes/conversation-compaction-routes.ts +1 -1
  692. package/src/runtime/routes/conversation-query-routes.ts +82 -282
  693. package/src/runtime/routes/credential-routes.ts +28 -30
  694. package/src/runtime/routes/default-provider-routes.ts +1 -1
  695. package/src/runtime/routes/desktop-setup-routes.test.ts +5 -5
  696. package/src/runtime/routes/desktop-setup-routes.ts +1 -1
  697. package/src/runtime/routes/domain-routes.ts +15 -21
  698. package/src/runtime/routes/email-routes.ts +13 -13
  699. package/src/runtime/routes/errors.ts +1 -1
  700. package/src/runtime/routes/gateway-status-routes.ts +1 -1
  701. package/src/runtime/routes/identity-routes.ts +3 -3
  702. package/src/runtime/routes/inbound-message-handler.ts +1 -1
  703. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +1 -1
  704. package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +1 -1
  705. package/src/runtime/routes/index.ts +1 -1
  706. package/src/runtime/routes/inference-profile-availability-guard.ts +5 -5
  707. package/src/runtime/routes/inference-profiles-routes.ts +11 -11
  708. package/src/runtime/routes/inference-provider-connection-routes.ts +24 -24
  709. package/src/runtime/routes/ingress-status-routes.ts +1 -1
  710. package/src/runtime/routes/integrations/a2a.ts +2 -2
  711. package/src/runtime/routes/integrations/twilio.ts +21 -35
  712. package/src/runtime/routes/internal-telemetry-routes.ts +2 -2
  713. package/src/runtime/routes/live-voice-routes.test.ts +4 -4
  714. package/src/runtime/routes/live-voice-routes.ts +6 -6
  715. package/src/runtime/routes/migration-routes.ts +34 -40
  716. package/src/runtime/routes/oauth-commands-routes.ts +31 -31
  717. package/src/runtime/routes/oauth-providers.ts +5 -5
  718. package/src/runtime/routes/oauth-proxy-passthrough.test.ts +1 -1
  719. package/src/runtime/routes/oauth-proxy-passthrough.ts +8 -8
  720. package/src/runtime/routes/oauth-proxy-routes.ts +15 -17
  721. package/src/runtime/routes/oauth-request-hints.test.ts +1 -1
  722. package/src/runtime/routes/oauth-request-hints.ts +1 -1
  723. package/src/runtime/routes/plugins-routes.ts +9 -9
  724. package/src/runtime/routes/profiler-routes.ts +1 -1
  725. package/src/runtime/routes/ps-routes.ts +4 -0
  726. package/src/runtime/routes/roadmap-routes.ts +18 -20
  727. package/src/runtime/routes/secret-routes.ts +29 -55
  728. package/src/runtime/routes/settings-routes.ts +18 -23
  729. package/src/runtime/routes/telemetry-routes.ts +4 -4
  730. package/src/runtime/routes/tts-routes.ts +4 -4
  731. package/src/runtime/routes/user-route-resolution.ts +1 -1
  732. package/src/runtime/routes/webhook-routes.ts +18 -18
  733. package/src/runtime/routes/workflow-routes.ts +5 -5
  734. package/src/runtime/sync/resource-sync-events.ts +2 -2
  735. package/src/runtime/verification-outbound-actions.ts +4 -4
  736. package/src/schedule/integration-status.ts +6 -6
  737. package/src/schedule/run-script.ts +1 -1
  738. package/src/schedule/schedule-timezone.ts +1 -1
  739. package/src/schedule/worker.ts +5 -5
  740. package/src/security/auth-fallback-events-store.ts +1 -1
  741. package/src/security/oauth2.ts +4 -4
  742. package/src/skills/available-skills.ts +4 -4
  743. package/src/skills/catalog-files.ts +8 -8
  744. package/src/skills/catalog-install.ts +12 -12
  745. package/src/skills/categories-cache.ts +3 -3
  746. package/src/skills/clawhub.ts +1 -1
  747. package/src/skills/{platform-compatibility.test.ts → cloud-compatibility.test.ts} +7 -7
  748. package/src/skills/{platform-compatibility.ts → cloud-compatibility.ts} +2 -4
  749. package/src/skills/{managed-store.ts → cloud-store.ts} +21 -23
  750. package/src/skills/inline-command-runner.ts +1 -1
  751. package/src/skills/install-meta.ts +1 -1
  752. package/src/skills/path-classifier.ts +4 -4
  753. package/src/skills/skill-history.ts +4 -4
  754. package/src/skills/skillssh-registry.ts +1 -1
  755. package/src/stt/__tests__/daemon-batch-transcriber.test.ts +1 -1
  756. package/src/stt/daemon-batch-transcriber.ts +7 -7
  757. package/src/stt/types.ts +3 -3
  758. package/src/subagent/manager.ts +15 -15
  759. package/src/subagent/types.ts +1 -1
  760. package/src/telegram/__tests__/webhook-health.test.ts +16 -16
  761. package/src/telegram/webhook-health.ts +10 -10
  762. package/src/telemetry/__tests__/config-setting-events-store.test.ts +1 -1
  763. package/src/telemetry/__tests__/outbox-test-harness.ts +2 -2
  764. package/src/telemetry/config-setting-events-store.ts +1 -1
  765. package/src/telemetry/config-setting-snapshot.ts +1 -1
  766. package/src/telemetry/memory-corpus-size.ts +1 -1
  767. package/src/telemetry/memory-tier-reporter.test.ts +2 -2
  768. package/src/telemetry/memory-tier-reporter.ts +3 -3
  769. package/src/telemetry/telemetry-event-sources.test.ts +2 -2
  770. package/src/telemetry/telemetry-event-sources.ts +9 -9
  771. package/src/telemetry/telemetry-events-outbox.ts +2 -2
  772. package/src/telemetry/telemetry-wire-validation.test.ts +1 -1
  773. package/src/telemetry/telemetry-wire-validation.ts +3 -3
  774. package/src/telemetry/telemetry-wire.generated.ts +1 -1
  775. package/src/telemetry/tool-audit.ts +1 -1
  776. package/src/telemetry/tool-executed-events-store.test.ts +1 -1
  777. package/src/telemetry/trace-collection-policy.ts +4 -4
  778. package/src/telemetry/turn-events-store.ts +1 -1
  779. package/src/telemetry/turn-outcome.ts +1 -1
  780. package/src/telemetry/turn-trace-store.ts +2 -2
  781. package/src/telemetry/types.test.ts +1 -1
  782. package/src/telemetry/types.ts +19 -19
  783. package/src/telemetry/usage-telemetry-reporter.test.ts +42 -42
  784. package/src/telemetry/usage-telemetry-reporter.ts +17 -17
  785. package/src/telemetry/watchdog-direct-emit.test.ts +9 -9
  786. package/src/telemetry/watchdog-direct-emit.ts +10 -10
  787. package/src/tools/__tests__/side-effect-abort-guard.test.ts +2 -2
  788. package/src/tools/browser/cdp-client/factory.ts +1 -1
  789. package/src/tools/computer-use/target.ts +2 -2
  790. package/src/tools/credentials/store.ts +6 -15
  791. package/src/tools/network/__tests__/{managed-search-proxy.test.ts → cloud-search-proxy.test.ts} +20 -20
  792. package/src/tools/network/__tests__/web-search.test.ts +14 -14
  793. package/src/tools/network/{managed-search-proxy.ts → cloud-search-proxy.ts} +13 -13
  794. package/src/tools/network/web-search.ts +9 -9
  795. package/src/tools/permission-checker.ts +2 -2
  796. package/src/tools/shared/input-misuse.ts +1 -1
  797. package/src/tools/shared/input-repairs.ts +4 -4
  798. package/src/tools/skills/{delete-managed.ts → delete-cloud.ts} +4 -4
  799. package/src/tools/skills/find-similar-skills.test.ts +7 -7
  800. package/src/tools/skills/find-similar-skills.ts +15 -15
  801. package/src/tools/skills/load.ts +6 -6
  802. package/src/tools/skills/{scaffold-managed.ts → scaffold-cloud.ts} +16 -16
  803. package/src/tools/skills/skill-script-runner.ts +2 -2
  804. package/src/tools/terminal/safe-env.ts +3 -3
  805. package/src/tools/tool-types.ts +2 -2
  806. package/src/tools/types.ts +2 -2
  807. package/src/tools/ui-surface/surface-shape-docs.ts +2 -2
  808. package/src/tools/workflows/manage-workflows.ts +1 -1
  809. package/src/tools/workspace-tools/loader.ts +1 -1
  810. package/src/tts/__tests__/cadet-provider.test.ts +5 -5
  811. package/src/tts/provider-catalog.ts +1 -1
  812. package/src/tts/providers/cadet-provider.ts +23 -23
  813. package/src/tts/providers/cadet-tts-socket.ts +2 -2
  814. package/src/tts/tts-config-resolver.ts +1 -1
  815. package/src/tts/tts-voice-field.ts +3 -3
  816. package/src/usage/subagent-attribution.ts +1 -1
  817. package/src/util/__tests__/process-table.test.ts +47 -0
  818. package/src/util/canonicalize-identity.ts +1 -1
  819. package/src/util/cgroup-cpu.ts +5 -5
  820. package/src/util/cgroup-memory.ts +2 -2
  821. package/src/util/container-cpu-sampler.ts +4 -4
  822. package/src/util/disk-usage.ts +4 -4
  823. package/src/util/errors.ts +3 -3
  824. package/src/util/oom-priority.ts +1 -1
  825. package/src/util/platform.ts +5 -5
  826. package/src/util/process-table.ts +39 -5
  827. package/src/util/provider-error-patterns.ts +2 -2
  828. package/src/watch/__tests__/watch-retro.test.ts +2 -2
  829. package/src/watch/watch-retro.ts +1 -1
  830. package/src/watcher/__tests__/telemetry.test.ts +2 -2
  831. package/src/watcher/telemetry.ts +1 -1
  832. package/src/windows-compiled-cli.ts +1 -1
  833. package/src/workspace/adaptive-thinking-repair.ts +4 -4
  834. package/src/workspace/byok-default-profile-ensure.ts +7 -7
  835. package/src/workspace/git-service.ts +2 -2
  836. package/src/workspace/migrations/006-services-config.ts +1 -1
  837. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  838. package/src/workspace/migrations/052-seed-default-inference-profiles.ts +1 -1
  839. package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +1 -1
  840. package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +1 -1
  841. package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +4 -4
  842. package/src/workspace/migrations/087-memory-router-balanced-profile.ts +3 -3
  843. package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +4 -4
  844. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +5 -5
  845. package/src/workspace/migrations/100-upgrade-quality-profile-to-fable-5.ts +4 -4
  846. package/src/workspace/migrations/101-upgrade-balanced-economy-to-minimax-m3.ts +4 -4
  847. package/src/workspace/migrations/103-upgrade-quality-profile-to-opus-4-8.ts +5 -5
  848. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +1 -1
  849. package/src/workspace/migrations/106-drop-collect-usage-data.ts +1 -1
  850. package/src/workspace/migrations/108-drop-balanced-economy-profile.ts +4 -4
  851. package/src/workspace/migrations/109-swap-quality-profile-to-glm-5p2.ts +11 -11
  852. package/src/workspace/migrations/110-flip-balanced-profile-to-together.ts +6 -6
  853. package/src/workspace/migrations/113-swap-balanced-profile-to-glm-5p2.ts +5 -5
  854. package/src/workspace/migrations/114-swap-quality-profile-to-opus.ts +4 -4
  855. package/src/workspace/migrations/115-drop-frontier-profile.ts +5 -5
  856. package/src/workspace/migrations/123-swap-quality-profile-to-fable.ts +5 -5
  857. package/src/workspace/migrations/125-repoint-managed-connections-to-cadet.ts +3 -3
  858. package/src/workspace/migrations/126-strip-managed-profile-bodies.ts +2 -2
  859. package/src/workspace/migrations/127-backfill-default-provider.ts +4 -4
  860. package/src/workspace/migrations/130-speech-mode-to-provider.ts +4 -4
  861. package/src/workspace/migrations/131-drop-web-fetch-mode.ts +1 -1
  862. package/src/workspace/migrations/132-web-search-mode-to-provider.ts +6 -6
  863. package/src/workspace/migrations/133-collapse-provider-connections.ts +3 -3
  864. package/src/workspace/migrations/134-image-generation-mode-to-provider.ts +4 -4
  865. package/src/workspace/migrations/136-repair-stale-fireworks-kimi-model-id.ts +2 -2
  866. package/src/workspace/migrations/137-repair-retired-fireworks-minimax-model-id.ts +2 -2
  867. package/src/workspace/migrations/139-clear-renamed-cost-profile-label.ts +2 -2
  868. package/src/workspace/migrations/141-stt-english-default-to-multilingual.ts +4 -4
  869. package/src/workspace/migrations/144-convert-stranded-subscription-openai-profiles.ts +1 -1
  870. package/src/workspace/migrations/145-collapse-profile-bindings-to-entries.ts +2 -2
  871. package/src/workspace/migrations/146-repair-retired-fireworks-deepseek-flash-model-id.ts +2 -2
  872. package/src/workspace/migrations/148-strip-unsupported-fallback-profiles.ts +2 -2
  873. package/src/workspace/migrations/150-stt-flux-provider-to-model-family.ts +1 -1
  874. package/src/workspace/migrations/151-repair-renamed-fireworks-deepseek-pro-model-id.ts +2 -2
  875. package/src/workspace/migrations/152-repair-retired-fireworks-minimax-m2p7-model-id.ts +2 -2
  876. package/src/workspace/migrations/159-rename-colliding-jev-profile-name.ts +2 -2
  877. package/src/workspace/migrations/160-repair-retired-fireworks-model-ids.ts +2 -2
  878. package/src/workspace/migrations/161-repair-retired-fireworks-glm-5p2-model-id.ts +2 -2
  879. package/src/workspace/migrations/__tests__/141-stt-english-default-to-multilingual.test.ts +1 -1
  880. package/src/workspace/migrations/__tests__/150-stt-flux-provider-to-model-family.test.ts +1 -1
  881. package/src/workspace/migrations/registry.ts +6 -6
  882. package/src/workspace/top-level-renderer.ts +1 -1
  883. package/src/workspace/turn-commit.ts +2 -2
  884. package/src/__tests__/config-loader-platform-defaults.test.ts +0 -606
  885. package/src/__tests__/mock-gateway-ipc.ts +0 -260
  886. package/src/api/events/platform-disconnected.ts +0 -21
  887. package/src/config/platform-rehydration.ts +0 -60
  888. package/src/platform/feature-gate.ts +0 -8
  889. package/src/plugins/defaults/platform-hosted/package.json +0 -14
  890. package/src/runtime/routes/platform-managed-credentials.ts +0 -50
  891. /package/src/__tests__/{gateway-client-managed-outbound.test.ts → gateway-client-cloud-outbound.test.ts} +0 -0
  892. /package/src/__tests__/{secure-keys-managed-failover.test.ts → secure-keys-cloud-failover.test.ts} +0 -0
@@ -18,7 +18,7 @@ import { getMemoryConfig } from "../plugins/defaults/memory/config.js";
18
18
  import { getWorkspaceConfigPath } from "../util/platform.js";
19
19
 
20
20
  const configPath = getWorkspaceConfigPath();
21
- const savedIsPlatform = process.env.IS_PLATFORM;
21
+ const savedIsPlatform = process.env.IS_CLOUD;
22
22
 
23
23
  function writeConfig(value: unknown): void {
24
24
  writeFileSync(configPath, JSON.stringify(value, null, 2));
@@ -26,7 +26,7 @@ function writeConfig(value: unknown): void {
26
26
 
27
27
  function resetState(): void {
28
28
  rmSync(configPath, { force: true });
29
- delete process.env.IS_PLATFORM;
29
+ delete process.env.IS_CLOUD;
30
30
  }
31
31
 
32
32
  /** Assert the plugin resolution deep-equals the host loader's slice. */
@@ -41,7 +41,7 @@ describe("memory config file parity", () => {
41
41
  afterEach(() => {
42
42
  resetState();
43
43
  if (savedIsPlatform !== undefined) {
44
- process.env.IS_PLATFORM = savedIsPlatform;
44
+ process.env.IS_CLOUD = savedIsPlatform;
45
45
  }
46
46
  });
47
47
 
@@ -88,14 +88,14 @@ describe("memory config file parity", () => {
88
88
  });
89
89
 
90
90
  test("platform deployment fill applies when the leaf is absent on disk", () => {
91
- process.env.IS_PLATFORM = "true";
91
+ process.env.IS_CLOUD = "true";
92
92
  writeConfig({ memory: {} });
93
93
  const memory = expectParity();
94
94
  expect(memory.embeddings.provider).toBe("gemini");
95
95
  });
96
96
 
97
- test("an explicit on-disk provider beats the platform fill", () => {
98
- process.env.IS_PLATFORM = "true";
97
+ test("an explicit on-disk provider beats the cloud fill", () => {
98
+ process.env.IS_CLOUD = "true";
99
99
  writeConfig({ memory: { embeddings: { provider: "openai" } } });
100
100
  const memory = expectParity();
101
101
  expect(memory.embeddings.provider).toBe("openai");
@@ -284,8 +284,8 @@ describe("handleMigrationExportToGcs — happy path", () => {
284
284
  // manifest claims a truthful `secrets_redacted: true` regardless of
285
285
  // credential-store state, and the bundle passes validation with
286
286
  // `origin.mode: "managed"`.
287
- const originalIsPlatform = process.env.IS_PLATFORM;
288
- process.env.IS_PLATFORM = "true";
287
+ const originalIsPlatform = process.env.IS_CLOUD;
288
+ process.env.IS_CLOUD = "true";
289
289
 
290
290
  let capturedBody: Buffer | undefined;
291
291
  const fixture = await startFixtureServer(async (req, res) => {
@@ -328,9 +328,9 @@ describe("handleMigrationExportToGcs — happy path", () => {
328
328
  expect(validation.manifest?.secrets_redacted).toBe(true);
329
329
  } finally {
330
330
  if (originalIsPlatform === undefined) {
331
- delete process.env.IS_PLATFORM;
331
+ delete process.env.IS_CLOUD;
332
332
  } else {
333
- process.env.IS_PLATFORM = originalIsPlatform;
333
+ process.env.IS_CLOUD = originalIsPlatform;
334
334
  }
335
335
  await fixture.close();
336
336
  }
@@ -630,7 +630,7 @@ describe("handleMigrationImport — validation failures", () => {
630
630
  //
631
631
  // Pin: a bundle whose min_runtime_version exceeds APP_VERSION must surface as
632
632
  // a 4xx user-actionable response (422 Unprocessable Entity), not a 500
633
- // InternalError. Body mirrors the platform's PR #5470 response shape so
633
+ // InternalError. Body mirrors the cloud's PR #5470 response shape so
634
634
  // clients can render the same UX regardless of which gate (platform or
635
635
  // runtime) rejected the bundle.
636
636
  // ---------------------------------------------------------------------------
@@ -731,7 +731,7 @@ describe("plugin runtime activation", () => {
731
731
  getAllToolDefinitions().some((t) => t.name === "teardown-tool"),
732
732
  ).toBe(true);
733
733
 
734
- // This is the daemon uninstall route's teardown path: the managed uninstall
734
+ // This is the daemon uninstall route's teardown path: the cloud uninstall
735
735
  // runs `shutdown` itself (while the files are present) and removes the
736
736
  // directory, then reconciles. The reconcile here only mirrors the removal —
737
737
  // it drops the plugin's tools/hooks but must NOT run `shutdown` a second
@@ -766,7 +766,7 @@ describe("plugin runtime activation", () => {
766
766
  });
767
767
 
768
768
  test("an out-of-band directory removal unregisters tools but runs no shutdown", async () => {
769
- // A raw `rm` (bypassing the managed uninstall) is only noticed by the
769
+ // A raw `rm` (bypassing the cloud uninstall) is only noticed by the
770
770
  // monitor after the files are gone, so there's no `shutdown` to resolve —
771
771
  // the reconcile just evicts. A managed uninstall runs `shutdown` before
772
772
  // removal (see uninstall-plugin.test.ts).
@@ -30,7 +30,7 @@ mock.module("../util/retry.js", () => ({
30
30
  },
31
31
  }));
32
32
 
33
- // ── CadetPlatformClient mock state ──────────────────────────────────────────
33
+ // ── CadetCloudClient mock state ──────────────────────────────────────────
34
34
 
35
35
  interface FetchCall {
36
36
  path: string;
@@ -46,15 +46,15 @@ const fetchErrors: Error[] = [];
46
46
  let clientAvailable = true;
47
47
  let onClientCreation: () => Promise<void> = async () => {};
48
48
 
49
- mock.module("../platform/client.js", () => ({
50
- CadetPlatformClient: {
49
+ mock.module("../cloud/client.js", () => ({
50
+ CadetCloudClient: {
51
51
  create: async () => {
52
52
  await onClientCreation();
53
53
  if (!clientAvailable) {
54
54
  return null;
55
55
  }
56
56
  return {
57
- platformAssistantId: "test-assistant-id",
57
+ cloudAssistantId: "test-assistant-id",
58
58
  fetch: async (path: string, init?: RequestInit) => {
59
59
  const body = init?.body
60
60
  ? (JSON.parse(init.body as string) as Record<string, unknown>)
@@ -86,7 +86,7 @@ mock.module("../platform/client.js", () => ({
86
86
  },
87
87
  }));
88
88
 
89
- import { PlatformPushAdapter } from "../notifications/adapters/platform.js";
89
+ import { CloudPushAdapter } from "../notifications/adapters/cloud.js";
90
90
  import type {
91
91
  ChannelDeliveryPayload,
92
92
  ChannelDestination,
@@ -120,7 +120,7 @@ function makeDestination(
120
120
 
121
121
  // ── Tests ────────────────────────────────────────────────────────────────────
122
122
 
123
- describe("PlatformPushAdapter", () => {
123
+ describe("CloudPushAdapter", () => {
124
124
  beforeEach(() => {
125
125
  saveRawConfig({});
126
126
  fetchCalls.length = 0;
@@ -133,7 +133,7 @@ describe("PlatformPushAdapter", () => {
133
133
 
134
134
  test("skips a disabled chat reply without sending a native push", async () => {
135
135
  saveRawConfig({ notifications: { newMessageEnabled: false } });
136
- const result = await new PlatformPushAdapter().send(
136
+ const result = await new CloudPushAdapter().send(
137
137
  makePayload({ sourceEventName: "chat.assistant_reply" }),
138
138
  makeDestination(),
139
139
  );
@@ -149,7 +149,7 @@ describe("PlatformPushAdapter", () => {
149
149
  onClientCreation = async () => {
150
150
  saveRawConfig({ notifications: { newMessageEnabled: false } });
151
151
  };
152
- const result = await new PlatformPushAdapter().send(
152
+ const result = await new CloudPushAdapter().send(
153
153
  makePayload({ sourceEventName: "chat.assistant_reply" }),
154
154
  makeDestination(),
155
155
  );
@@ -172,7 +172,7 @@ describe("PlatformPushAdapter", () => {
172
172
  onRetrySleep = async () => {
173
173
  saveRawConfig({ notifications: { newMessageEnabled: false } });
174
174
  };
175
- const result = await new PlatformPushAdapter().send(
175
+ const result = await new CloudPushAdapter().send(
176
176
  makePayload({ sourceEventName: "chat.assistant_reply" }),
177
177
  makeDestination(),
178
178
  );
@@ -196,7 +196,7 @@ describe("PlatformPushAdapter", () => {
196
196
  "keeps %s native push enabled when ordinary reply alerts are off",
197
197
  async (sourceEventName) => {
198
198
  saveRawConfig({ notifications: { newMessageEnabled: false } });
199
- const result = await new PlatformPushAdapter().send(
199
+ const result = await new CloudPushAdapter().send(
200
200
  makePayload({ sourceEventName }),
201
201
  makeDestination(),
202
202
  );
@@ -206,11 +206,11 @@ describe("PlatformPushAdapter", () => {
206
206
  );
207
207
 
208
208
  test("channel is 'platform'", () => {
209
- expect(new PlatformPushAdapter().channel).toBe("platform");
209
+ expect(new CloudPushAdapter().channel).toBe("platform");
210
210
  });
211
211
 
212
212
  test("POSTs to the correct dispatch endpoint with snake_case body", async () => {
213
- const adapter = new PlatformPushAdapter();
213
+ const adapter = new CloudPushAdapter();
214
214
  const result = await adapter.send(makePayload(), makeDestination());
215
215
 
216
216
  expect(result.success).toBe(true);
@@ -232,7 +232,7 @@ describe("PlatformPushAdapter", () => {
232
232
  });
233
233
 
234
234
  test("sets target_guardian_principal_id for guardian-sensitive events", async () => {
235
- const adapter = new PlatformPushAdapter();
235
+ const adapter = new CloudPushAdapter();
236
236
  const payload = makePayload({ sourceEventName: "guardian.question" });
237
237
  const destination = makeDestination({
238
238
  metadata: { guardianPrincipalId: "principal-xyz" },
@@ -249,7 +249,7 @@ describe("PlatformPushAdapter", () => {
249
249
  test.each(["chat.assistant_reply", "schedule.result", "activity.complete"])(
250
250
  "%s targets the resolved completion recipient",
251
251
  async (sourceEventName) => {
252
- const adapter = new PlatformPushAdapter();
252
+ const adapter = new CloudPushAdapter();
253
253
  const result = await adapter.send(
254
254
  makePayload({
255
255
  sourceEventName,
@@ -275,7 +275,7 @@ describe("PlatformPushAdapter", () => {
275
275
  test.each([undefined, " ", "other-principal"])(
276
276
  "does not send typed completion preview with unavailable recipient %s",
277
277
  async (guardianPrincipalId) => {
278
- const adapter = new PlatformPushAdapter();
278
+ const adapter = new CloudPushAdapter();
279
279
  const result = await adapter.send(
280
280
  makePayload({
281
281
  sourceEventName: "activity.complete",
@@ -302,7 +302,7 @@ describe("PlatformPushAdapter", () => {
302
302
  test.each(["chat.assistant_reply", "schedule.result"])(
303
303
  "%s preserves owner-scoped push when recipient lookup is unavailable",
304
304
  async (sourceEventName) => {
305
- const result = await new PlatformPushAdapter().send(
305
+ const result = await new CloudPushAdapter().send(
306
306
  makePayload({ sourceEventName }),
307
307
  makeDestination(),
308
308
  );
@@ -325,7 +325,7 @@ describe("PlatformPushAdapter", () => {
325
325
  ])(
326
326
  "malformed ownership %j never dispatches a mobile preview",
327
327
  async (completion) => {
328
- const result = await new PlatformPushAdapter().send(
328
+ const result = await new CloudPushAdapter().send(
329
329
  makePayload({
330
330
  sourceEventName: "activity.complete",
331
331
  urgency: "high",
@@ -344,7 +344,7 @@ describe("PlatformPushAdapter", () => {
344
344
  );
345
345
 
346
346
  test("omits target_guardian_principal_id for non-guardian events even with principalId in metadata", async () => {
347
- const adapter = new PlatformPushAdapter();
347
+ const adapter = new CloudPushAdapter();
348
348
  const payload = makePayload({ sourceEventName: "schedule.notify" });
349
349
  const destination = makeDestination({
350
350
  metadata: { guardianPrincipalId: "principal-xyz" },
@@ -358,7 +358,7 @@ describe("PlatformPushAdapter", () => {
358
358
 
359
359
  test("returns failure when platform client is unavailable", async () => {
360
360
  clientAvailable = false;
361
- const adapter = new PlatformPushAdapter();
361
+ const adapter = new CloudPushAdapter();
362
362
  const result = await adapter.send(makePayload(), makeDestination());
363
363
 
364
364
  expect(result.success).toBe(false);
@@ -372,7 +372,7 @@ describe("PlatformPushAdapter", () => {
372
372
  { ok: false, status: 500, body: "internal error" },
373
373
  { ok: true, status: 200, body: "{}" },
374
374
  );
375
- const adapter = new PlatformPushAdapter();
375
+ const adapter = new CloudPushAdapter();
376
376
  const result = await adapter.send(makePayload(), makeDestination());
377
377
 
378
378
  expect(result.success).toBe(true);
@@ -386,7 +386,7 @@ describe("PlatformPushAdapter", () => {
386
386
  { ok: false, status: 503, body: "unavailable" },
387
387
  { ok: false, status: 500, body: "still failing" },
388
388
  );
389
- const adapter = new PlatformPushAdapter();
389
+ const adapter = new CloudPushAdapter();
390
390
  const result = await adapter.send(makePayload(), makeDestination());
391
391
 
392
392
  expect(result.success).toBe(false);
@@ -396,7 +396,7 @@ describe("PlatformPushAdapter", () => {
396
396
  });
397
397
 
398
398
  test("bounds every attempt with an abort signal", async () => {
399
- const adapter = new PlatformPushAdapter();
399
+ const adapter = new CloudPushAdapter();
400
400
  const result = await adapter.send(makePayload(), makeDestination());
401
401
 
402
402
  expect(result.success).toBe(true);
@@ -409,7 +409,7 @@ describe("PlatformPushAdapter", () => {
409
409
  );
410
410
  fetchResponses.push({ ok: true, status: 200, body: '{"tokens_sent": 1}' });
411
411
 
412
- const adapter = new PlatformPushAdapter();
412
+ const adapter = new CloudPushAdapter();
413
413
  const result = await adapter.send(makePayload(), makeDestination());
414
414
 
415
415
  expect(result.success).toBe(true);
@@ -419,7 +419,7 @@ describe("PlatformPushAdapter", () => {
419
419
 
420
420
  test("does not retry on 4xx responses", async () => {
421
421
  fetchResponses.push({ ok: false, status: 400, body: "bad request" });
422
- const adapter = new PlatformPushAdapter();
422
+ const adapter = new CloudPushAdapter();
423
423
  const result = await adapter.send(makePayload(), makeDestination());
424
424
 
425
425
  expect(result.success).toBe(false);
@@ -433,7 +433,7 @@ describe("PlatformPushAdapter", () => {
433
433
  status: 200,
434
434
  body: '{"tokens_sent":2,"accepted_platforms":[]}',
435
435
  });
436
- const adapter = new PlatformPushAdapter();
436
+ const adapter = new CloudPushAdapter();
437
437
  const result = await adapter.send(makePayload(), makeDestination());
438
438
 
439
439
  expect(result.success).toBe(true);
@@ -457,7 +457,7 @@ describe("PlatformPushAdapter", () => {
457
457
  },
458
458
  );
459
459
 
460
- const result = await new PlatformPushAdapter().send(
460
+ const result = await new CloudPushAdapter().send(
461
461
  makePayload(),
462
462
  makeDestination(),
463
463
  );
@@ -472,7 +472,7 @@ describe("PlatformPushAdapter", () => {
472
472
  status: 202,
473
473
  body: '{"skipped": "flag_off"}',
474
474
  });
475
- const adapter = new PlatformPushAdapter();
475
+ const adapter = new CloudPushAdapter();
476
476
  const result = await adapter.send(makePayload(), makeDestination());
477
477
 
478
478
  expect(result.success).toBe(true);
@@ -485,7 +485,7 @@ describe("PlatformPushAdapter", () => {
485
485
  status: 200,
486
486
  body: '{"idempotent": true, "tokens_sent": 0}',
487
487
  });
488
- const adapter = new PlatformPushAdapter();
488
+ const adapter = new CloudPushAdapter();
489
489
  const result = await adapter.send(makePayload(), makeDestination());
490
490
 
491
491
  expect(result.success).toBe(true);
@@ -494,7 +494,7 @@ describe("PlatformPushAdapter", () => {
494
494
 
495
495
  test("reports remotePushAccepted: false when the success body is unparseable", async () => {
496
496
  fetchResponses.push({ ok: true, status: 200, body: "not json" });
497
- const adapter = new PlatformPushAdapter();
497
+ const adapter = new CloudPushAdapter();
498
498
  const result = await adapter.send(makePayload(), makeDestination());
499
499
 
500
500
  expect(result.success).toBe(true);
@@ -503,16 +503,16 @@ describe("PlatformPushAdapter", () => {
503
503
 
504
504
  test("leaves remotePushAccepted unset on non-2xx failure", async () => {
505
505
  fetchResponses.push({ ok: false, status: 400, body: "bad request" });
506
- const adapter = new PlatformPushAdapter();
506
+ const adapter = new CloudPushAdapter();
507
507
  const result = await adapter.send(makePayload(), makeDestination());
508
508
 
509
509
  expect(result.success).toBe(false);
510
510
  expect(result.remotePushAccepted).toBeUndefined();
511
511
  });
512
512
 
513
- test("leaves remotePushAccepted unset when the platform client is unavailable", async () => {
513
+ test("leaves remotePushAccepted unset when the cloud client is unavailable", async () => {
514
514
  clientAvailable = false;
515
- const adapter = new PlatformPushAdapter();
515
+ const adapter = new CloudPushAdapter();
516
516
  const result = await adapter.send(makePayload(), makeDestination());
517
517
 
518
518
  expect(result.success).toBe(false);
@@ -523,7 +523,7 @@ describe("PlatformPushAdapter", () => {
523
523
  // dispatch body reads as literal punctuation. See `stripMarkdownForPreview`.
524
524
  describe("markdown flattening", () => {
525
525
  test("flattens markdown out of the dispatched title and body", async () => {
526
- const adapter = new PlatformPushAdapter();
526
+ const adapter = new CloudPushAdapter();
527
527
  const payload = makePayload({
528
528
  copy: {
529
529
  title: "**Build** finished",
@@ -556,7 +556,7 @@ describe("PlatformPushAdapter", () => {
556
556
  // Guardian question copy joins its question and instruction with a blank
557
557
  // line, and iOS renders the break, so flattening must not collapse it.
558
558
  test("preserves newlines in the dispatched body", async () => {
559
- const adapter = new PlatformPushAdapter();
559
+ const adapter = new CloudPushAdapter();
560
560
  const payload = makePayload({
561
561
  copy: {
562
562
  title: "Question",
@@ -573,7 +573,7 @@ describe("PlatformPushAdapter", () => {
573
573
  });
574
574
 
575
575
  test("leaves plain prose untouched", async () => {
576
- const adapter = new PlatformPushAdapter();
576
+ const adapter = new CloudPushAdapter();
577
577
  const result = await adapter.send(makePayload(), makeDestination());
578
578
 
579
579
  expect(result.success).toBe(true);
@@ -588,7 +588,7 @@ describe("PlatformPushAdapter", () => {
588
588
  // costs the whole notification.
589
589
  describe("copy that flattens to nothing", () => {
590
590
  test("names the media instead of dispatching blank fields", async () => {
591
- const adapter = new PlatformPushAdapter();
591
+ const adapter = new CloudPushAdapter();
592
592
  const embed = "![clip](cadet://workspace/a.mp4)";
593
593
  const payload = makePayload({ copy: { title: embed, body: embed } });
594
594
 
@@ -600,7 +600,7 @@ describe("PlatformPushAdapter", () => {
600
600
  });
601
601
 
602
602
  test("counts several embeds", async () => {
603
- const adapter = new PlatformPushAdapter();
603
+ const adapter = new CloudPushAdapter();
604
604
  const embeds =
605
605
  "![one](cadet://workspace/1.mp4) ![two](https://e.com/2.png)";
606
606
  const payload = makePayload({ copy: { title: embeds, body: embeds } });
@@ -613,7 +613,7 @@ describe("PlatformPushAdapter", () => {
613
613
  // Nothing nameable is left, so the original beats a blank field: ugly
614
614
  // copy still delivers, an empty title is a 400.
615
615
  test("keeps the original when there is no media to name", async () => {
616
- const adapter = new PlatformPushAdapter();
616
+ const adapter = new CloudPushAdapter();
617
617
  const payload = makePayload({ copy: { title: "###", body: "###" } });
618
618
 
619
619
  await adapter.send(payload, makeDestination());
@@ -624,7 +624,7 @@ describe("PlatformPushAdapter", () => {
624
624
  });
625
625
 
626
626
  test("omits optional fields when absent from payload", async () => {
627
- const adapter = new PlatformPushAdapter();
627
+ const adapter = new CloudPushAdapter();
628
628
  const payload: ChannelDeliveryPayload = {
629
629
  sourceEventName: "schedule.notify",
630
630
  copy: { title: "Hi", body: "Hello" },
@@ -4,7 +4,7 @@
4
4
  * Validates that the CadetAdapter broadcasts notification_intent with
5
5
  * deepLinkMetadata, and that the broadcaster correctly passes deepLinkTarget
6
6
  * from the decision through to the adapter payload — regardless of whether
7
- * the conversation was newly created or reused. Also covers the platform
7
+ * the conversation was newly created or reused. Also covers the cloud
8
8
  * (APNs) channel, whose deepLinkTarget must be enriched with the
9
9
  * conversationId so remote-push taps can navigate.
10
10
  */
@@ -691,14 +691,14 @@ describe("notification deep-link metadata", () => {
691
691
 
692
692
  // ── Platform (APNs) channel deep-link enrichment ──────────────────
693
693
  //
694
- // The platform adapter forwards deepLinkTarget verbatim as
694
+ // The cloud adapter forwards deepLinkTarget verbatim as
695
695
  // deep_link_metadata, so the broadcaster must enrich it with the
696
696
  // conversationId the same way it does for cadet — otherwise remote-push
697
697
  // taps have no routing key and cannot navigate.
698
698
 
699
699
  test("broadcaster merges pairing conversationId and messageId into deepLinkTarget for platform", async () => {
700
- const platformAdapter = new MockAdapter("platform");
701
- const broadcaster = new NotificationBroadcaster([platformAdapter]);
700
+ const cloudAdapter = new MockAdapter("platform");
701
+ const broadcaster = new NotificationBroadcaster([cloudAdapter]);
702
702
 
703
703
  nextPairingResult = {
704
704
  conversationId: "conv-paired-platform",
@@ -718,16 +718,16 @@ describe("notification deep-link metadata", () => {
718
718
 
719
719
  await broadcaster.broadcastDecision(signal, decision);
720
720
 
721
- expect(platformAdapter.sent).toHaveLength(1);
722
- const deepLink = platformAdapter.sent[0].deepLinkTarget;
721
+ expect(cloudAdapter.sent).toHaveLength(1);
722
+ const deepLink = cloudAdapter.sent[0].deepLinkTarget;
723
723
  expect(deepLink).toBeDefined();
724
724
  expect(deepLink!.conversationId).toBe("conv-paired-platform");
725
725
  expect(deepLink!.messageId).toBe("msg-paired-platform");
726
726
  });
727
727
 
728
728
  test("platform deep link falls back to signal.sourceContextId when pairing returns no conversation", async () => {
729
- const platformAdapter = new MockAdapter("platform");
730
- const broadcaster = new NotificationBroadcaster([platformAdapter]);
729
+ const cloudAdapter = new MockAdapter("platform");
730
+ const broadcaster = new NotificationBroadcaster([cloudAdapter]);
731
731
 
732
732
  // Production platform pairing: push_only strategy pairs no conversation.
733
733
  nextPairingResult = {
@@ -751,15 +751,15 @@ describe("notification deep-link metadata", () => {
751
751
 
752
752
  await broadcaster.broadcastDecision(signal, decision);
753
753
 
754
- expect(platformAdapter.sent).toHaveLength(1);
755
- const deepLink = platformAdapter.sent[0].deepLinkTarget;
754
+ expect(cloudAdapter.sent).toHaveLength(1);
755
+ const deepLink = cloudAdapter.sent[0].deepLinkTarget;
756
756
  expect(deepLink).toBeDefined();
757
757
  expect(deepLink!.conversationId).toBe(originConvId);
758
758
  });
759
759
 
760
760
  test("platform deep link omits conversationId when sourceContextId is a sentinel", async () => {
761
- const platformAdapter = new MockAdapter("platform");
762
- const broadcaster = new NotificationBroadcaster([platformAdapter]);
761
+ const cloudAdapter = new MockAdapter("platform");
762
+ const broadcaster = new NotificationBroadcaster([cloudAdapter]);
763
763
 
764
764
  nextPairingResult = {
765
765
  conversationId: null,
@@ -779,22 +779,22 @@ describe("notification deep-link metadata", () => {
779
779
 
780
780
  await broadcaster.broadcastDecision(signal, decision);
781
781
 
782
- expect(platformAdapter.sent).toHaveLength(1);
782
+ expect(cloudAdapter.sent).toHaveLength(1);
783
783
  expect(
784
- platformAdapter.sent[0].deepLinkTarget?.conversationId,
784
+ cloudAdapter.sent[0].deepLinkTarget?.conversationId,
785
785
  ).toBeUndefined();
786
786
  });
787
787
 
788
788
  test("cadet and platform each receive deep-link enrichment in the same broadcast", async () => {
789
789
  const cadetAdapter = new MockAdapter("cadet");
790
- const platformAdapter = new MockAdapter("platform");
790
+ const cloudAdapter = new MockAdapter("platform");
791
791
  const broadcaster = new NotificationBroadcaster([
792
792
  cadetAdapter,
793
- platformAdapter,
793
+ cloudAdapter,
794
794
  ]);
795
795
 
796
796
  // Cadet is ordered first and consumes the queued pairing result;
797
- // the platform pairing call then receives the mock's auto-generated
797
+ // the cloud pairing call then receives the mock's auto-generated
798
798
  // conversation, so each channel is enriched from its own pairing.
799
799
  nextPairingResult = {
800
800
  conversationId: "conv-cadet-paired",
@@ -822,26 +822,26 @@ describe("notification deep-link metadata", () => {
822
822
  );
823
823
 
824
824
  // Platform enriched independently from its own pairing call.
825
- expect(platformAdapter.sent).toHaveLength(1);
825
+ expect(cloudAdapter.sent).toHaveLength(1);
826
826
  const platformConvId =
827
- platformAdapter.sent[0].deepLinkTarget?.conversationId;
827
+ cloudAdapter.sent[0].deepLinkTarget?.conversationId;
828
828
  expect(String(platformConvId)).toStartWith("mock-conv-");
829
829
  });
830
830
 
831
- // ── Cadet pairing carried into the platform deep link ─────────────
831
+ // ── Cadet pairing carried into the cloud deep link ─────────────
832
832
  //
833
- // In production the platform channel is push_only: its own pairing
833
+ // In production the cloud channel is push_only: its own pairing
834
834
  // returns null. When the cadet channel creates (or reuses) a
835
- // conversation in the same broadcast, the platform deep link must
835
+ // conversation in the same broadcast, the cloud deep link must
836
836
  // carry that conversation so remote-push taps land in the thread the
837
837
  // notification is about (approval requests, guardian questions).
838
838
 
839
839
  test("platform deep link carries the cadet-created conversation in a mixed broadcast", async () => {
840
840
  const cadetAdapter = new MockAdapter("cadet");
841
- const platformAdapter = new MockAdapter("platform");
841
+ const cloudAdapter = new MockAdapter("platform");
842
842
  const broadcaster = new NotificationBroadcaster([
843
843
  cadetAdapter,
844
- platformAdapter,
844
+ cloudAdapter,
845
845
  ]);
846
846
 
847
847
  pairingResultsByChannel = {
@@ -886,21 +886,21 @@ describe("notification deep-link metadata", () => {
886
886
  );
887
887
 
888
888
  // Platform carries the cadet-created conversation and seed message.
889
- expect(platformAdapter.sent).toHaveLength(1);
890
- expect(platformAdapter.sent[0].deepLinkTarget?.conversationId).toBe(
889
+ expect(cloudAdapter.sent).toHaveLength(1);
890
+ expect(cloudAdapter.sent[0].deepLinkTarget?.conversationId).toBe(
891
891
  "conv-cadet-created",
892
892
  );
893
- expect(platformAdapter.sent[0].deepLinkTarget?.messageId).toBe(
893
+ expect(cloudAdapter.sent[0].deepLinkTarget?.messageId).toBe(
894
894
  "msg-cadet-seed",
895
895
  );
896
896
  });
897
897
 
898
898
  test("platform prefers the cadet pairing over the source-context fallback in a mixed broadcast", async () => {
899
899
  const cadetAdapter = new MockAdapter("cadet");
900
- const platformAdapter = new MockAdapter("platform");
900
+ const cloudAdapter = new MockAdapter("platform");
901
901
  const broadcaster = new NotificationBroadcaster([
902
902
  cadetAdapter,
903
- platformAdapter,
903
+ cloudAdapter,
904
904
  ]);
905
905
 
906
906
  pairingResultsByChannel = {
@@ -936,18 +936,18 @@ describe("notification deep-link metadata", () => {
936
936
 
937
937
  await broadcaster.broadcastDecision(signal, decision);
938
938
 
939
- expect(platformAdapter.sent).toHaveLength(1);
940
- expect(platformAdapter.sent[0].deepLinkTarget?.conversationId).toBe(
939
+ expect(cloudAdapter.sent).toHaveLength(1);
940
+ expect(cloudAdapter.sent[0].deepLinkTarget?.conversationId).toBe(
941
941
  "conv-approval-thread",
942
942
  );
943
943
  });
944
944
 
945
945
  test("platform deep link carries the conversation from a duplicate cadet delivery on retry", async () => {
946
946
  const cadetAdapter = new MockAdapter("cadet");
947
- const platformAdapter = new MockAdapter("platform");
947
+ const cloudAdapter = new MockAdapter("platform");
948
948
  const broadcaster = new NotificationBroadcaster([
949
949
  cadetAdapter,
950
- platformAdapter,
950
+ cloudAdapter,
951
951
  ]);
952
952
 
953
953
  // Persisted-decision retry: the cadet delivery row already exists
@@ -992,21 +992,21 @@ describe("notification deep-link metadata", () => {
992
992
  expect(cadetResult?.conversationId).toBe("conv-from-existing-row");
993
993
 
994
994
  // Platform still delivers, carrying the existing row's conversation.
995
- expect(platformAdapter.sent).toHaveLength(1);
996
- expect(platformAdapter.sent[0].deepLinkTarget?.conversationId).toBe(
995
+ expect(cloudAdapter.sent).toHaveLength(1);
996
+ expect(cloudAdapter.sent[0].deepLinkTarget?.conversationId).toBe(
997
997
  "conv-from-existing-row",
998
998
  );
999
- expect(platformAdapter.sent[0].deepLinkTarget?.messageId).toBe(
999
+ expect(cloudAdapter.sent[0].deepLinkTarget?.messageId).toBe(
1000
1000
  "msg-from-existing-row",
1001
1001
  );
1002
1002
  });
1003
1003
 
1004
1004
  test("platform falls back to sourceContextId in a mixed broadcast when cadet pairs no conversation", async () => {
1005
1005
  const cadetAdapter = new MockAdapter("cadet");
1006
- const platformAdapter = new MockAdapter("platform");
1006
+ const cloudAdapter = new MockAdapter("platform");
1007
1007
  const broadcaster = new NotificationBroadcaster([
1008
1008
  cadetAdapter,
1009
- platformAdapter,
1009
+ cloudAdapter,
1010
1010
  ]);
1011
1011
 
1012
1012
  // Passive cadet signal: pairing skips conversation creation.
@@ -1041,8 +1041,8 @@ describe("notification deep-link metadata", () => {
1041
1041
 
1042
1042
  await broadcaster.broadcastDecision(signal, decision);
1043
1043
 
1044
- expect(platformAdapter.sent).toHaveLength(1);
1045
- expect(platformAdapter.sent[0].deepLinkTarget?.conversationId).toBe(
1044
+ expect(cloudAdapter.sent).toHaveLength(1);
1045
+ expect(cloudAdapter.sent[0].deepLinkTarget?.conversationId).toBe(
1046
1046
  originConvId,
1047
1047
  );
1048
1048
  });
@@ -47,7 +47,7 @@ mock.module("../oauth/oauth-store.js", () => ({
47
47
  logoUrl: null,
48
48
  clientIdPlaceholder: null,
49
49
  requiresClientSecret: 1,
50
- managedServiceConfigKey: "google-oauth",
50
+ cloudServiceConfigKey: "google-oauth",
51
51
  authorizeUrl: "https://accounts.google.com/o/oauth2/v2/auth",
52
52
  tokenExchangeUrl: "https://oauth2.googleapis.com/token",
53
53
  refreshUrl: null,
@@ -168,7 +168,7 @@ describe("GET /v1/oauth/apps", () => {
168
168
  dashboard_url: string | null;
169
169
  client_id_placeholder: string | null;
170
170
  requires_client_secret: boolean;
171
- supports_managed_mode: boolean;
171
+ supports_cloud_mode: boolean;
172
172
  } | null;
173
173
  apps: unknown[];
174
174
  };
@@ -179,7 +179,7 @@ describe("GET /v1/oauth/apps", () => {
179
179
  expect(result.provider!.description).toBe("Google OAuth provider");
180
180
  expect(result.provider!.requires_client_secret).toBe(true);
181
181
  expect(typeof result.provider!.requires_client_secret).toBe("boolean");
182
- expect(result.provider!.supports_managed_mode).toBe(true);
182
+ expect(result.provider!.supports_cloud_mode).toBe(true);
183
183
  });
184
184
 
185
185
  test("returns null provider when provider does not exist", async () => {