@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
@@ -1,10 +1,10 @@
1
1
  /**
2
- * The one place that answers "does this assistant have a managed inbox?".
2
+ * The one place that answers "does this assistant have a cloud inbox?".
3
3
  *
4
4
  * Managed email registration lives on Cadet Cloud: the
5
5
  * `/v1/assistants/:id/email-addresses/` API is the only writer and the only
6
6
  * source of truth. Nothing about a registration lands in workspace config, so
7
- * any reader that wants the inbox address has to ask the platform. Every
7
+ * any reader that wants the inbox address has to ask the cloud. Every
8
8
  * consumer of the listing (the email readiness probe, the email invite
9
9
  * adapter, the channel-availability route, the email management routes, and
10
10
  * verification email delivery) reads through this module so they cannot
@@ -18,19 +18,19 @@
18
18
 
19
19
  import { z } from "zod";
20
20
 
21
- import { CadetPlatformClient } from "../platform/client.js";
21
+ import { CadetCloudClient } from "../cloud/client.js";
22
22
 
23
23
  export type RegisteredInboxState =
24
- /** The platform holds a registered inbox address for this assistant. */
24
+ /** The cloud holds a registered inbox address for this assistant. */
25
25
  | { status: "registered"; address: string }
26
- /** The platform answered: no inbox is registered. */
26
+ /** The cloud answered: no inbox is registered. */
27
27
  | { status: "none" }
28
28
  /** No cloud credentials, so no managed inbox can exist. */
29
29
  | { status: "no_platform" }
30
- /** The platform could not be asked; nothing is known either way. */
30
+ /** The cloud could not be asked; nothing is known either way. */
31
31
  | { status: "unavailable"; detail: string };
32
32
 
33
- /** One row of the platform's email-address listing. */
33
+ /** One row of the cloud's email-address listing. */
34
34
  export interface RegisteredEmailAddress {
35
35
  id: string;
36
36
  address: string;
@@ -38,25 +38,25 @@ export interface RegisteredEmailAddress {
38
38
 
39
39
  export type EmailAddressListResult =
40
40
  | { ok: true; addresses: RegisteredEmailAddress[] }
41
- /** The platform could not be asked or answered unusably. */
41
+ /** The cloud could not be asked or answered unusably. */
42
42
  | { ok: false; status?: number; detail: string };
43
43
 
44
44
  /**
45
45
  * Validated rather than cast: the response crosses a runtime boundary, and a
46
46
  * shape drift should read as a failed listing (nothing established), not as a
47
- * confidently wrong answer. Unknown keys are ignored, since the platform adds
47
+ * confidently wrong answer. Unknown keys are ignored, since the cloud adds
48
48
  * fields over time.
49
49
  */
50
50
  const EmailAddressListSchema = z.object({
51
51
  count: z.number().optional(),
52
- // Required: the platform's paginated listing always carries `results`, so
52
+ // Required: the cloud's paginated listing always carries `results`, so
53
53
  // a 200 without it is shape drift and must read as a failed listing, never
54
54
  // as "no inbox".
55
55
  results: z.array(z.object({ id: z.string(), address: z.string() })),
56
56
  });
57
57
 
58
58
  /**
59
- * Fetch the platform's email-address listing for the caller's own client.
59
+ * Fetch the cloud's email-address listing for the caller's own client.
60
60
  *
61
61
  * The seam every consumer of the listing shares: the readiness resolver
62
62
  * below, the email register/unregister/status/send routes, and verification
@@ -65,12 +65,12 @@ const EmailAddressListSchema = z.object({
65
65
  * missing cloud connection) keeps its own error semantics.
66
66
  */
67
67
  export async function listEmailAddresses(
68
- client: CadetPlatformClient,
68
+ client: CadetCloudClient,
69
69
  ): Promise<EmailAddressListResult> {
70
70
  let response: Response;
71
71
  try {
72
72
  response = await client.fetch(
73
- `/v1/assistants/${client.platformAssistantId}/email-addresses/`,
73
+ `/v1/assistants/${client.cloudAssistantId}/email-addresses/`,
74
74
  );
75
75
  } catch (err) {
76
76
  const detail = err instanceof Error ? err.message : String(err);
@@ -108,7 +108,7 @@ export async function listEmailAddresses(
108
108
  /**
109
109
  * Matches the readiness service's remote-check TTL: the cache exists so the
110
110
  * invite-adapter enrichment on the readiness poll (every 15s per client) does
111
- * not turn into a platform request per poll, and registration changes made
111
+ * not turn into a cloud request per poll, and registration changes made
112
112
  * through the daemon invalidate it explicitly.
113
113
  */
114
114
  const CACHE_TTL_MS = 5 * 60 * 1000;
@@ -121,9 +121,9 @@ export function invalidateRegisteredInboxCache(): void {
121
121
  }
122
122
 
123
123
  /**
124
- * Resolve the managed inbox state, serving a cached answer within
124
+ * Resolve the cloud inbox state, serving a cached answer within
125
125
  * {@link CACHE_TTL_MS} unless `fresh` demands a live read. `unavailable` is
126
- * never cached: a platform blip should heal on the next call, not pin the
126
+ * never cached: a cloud blip should heal on the next call, not pin the
127
127
  * unknown state for the TTL.
128
128
  */
129
129
  export async function resolveRegisteredInbox(
@@ -142,17 +142,17 @@ export async function resolveRegisteredInbox(
142
142
  }
143
143
 
144
144
  async function fetchRegisteredInbox(): Promise<RegisteredInboxState> {
145
- // Creation resolves the managed-proxy context and the credential store,
145
+ // Creation resolves the cloud-proxy context and the credential store,
146
146
  // either of which can reject; a backend blip there is "could not ask",
147
147
  // not an error the caller should surface as a failed request.
148
- let client: CadetPlatformClient | null;
148
+ let client: CadetCloudClient | null;
149
149
  try {
150
- client = await CadetPlatformClient.create();
150
+ client = await CadetCloudClient.create();
151
151
  } catch (err) {
152
152
  const detail = err instanceof Error ? err.message : String(err);
153
153
  return { status: "unavailable", detail };
154
154
  }
155
- if (!client?.platformAssistantId) {
155
+ if (!client?.cloudAssistantId) {
156
156
  return { status: "no_platform" };
157
157
  }
158
158
 
@@ -236,7 +236,7 @@ export class HeartbeatService {
236
236
  return countCompletedRunsToday() >= config.maxDailyRuns;
237
237
  }
238
238
 
239
- async runManagedWakeIfDue(
239
+ async runCloudWakeIfDue(
240
240
  options: ManagedWakeHeartbeatRunOptions = {},
241
241
  ): Promise<ManagedWakeHeartbeatRunResult> {
242
242
  const now = options.now ?? Date.now();
@@ -343,14 +343,14 @@ export async function runInitHook(
343
343
  const SHUTDOWN_TIMEOUT_MS = 5_000;
344
344
 
345
345
  /**
346
- * Run one owner's `shutdown` — the targeted single-owner teardown for a managed
346
+ * Run one owner's `shutdown` — the targeted single-owner teardown for a cloud
347
347
  * uninstall, disable, or reload (the whole-chain `runHook(HOOKS.SHUTDOWN)` at
348
348
  * process exit runs *every* owner's; this runs exactly one). Resolves it through
349
349
  * the same {@link resolveHook} the dispatch path uses — cache or disk, so it
350
350
  * needs nothing pre-warmed and works in any process (a `shutdown` hook must not
351
351
  * assume it shares a process with its `init`; see {@link ShutdownContext}) —
352
352
  * then invokes it under the shared {@link withTimeout} so a hook that hangs
353
- * can't block teardown (e.g. the `rmSync` a managed uninstall runs next). No-op
353
+ * can't block teardown (e.g. the `rmSync` a cloud uninstall runs next). No-op
354
354
  * when the owner defines no `shutdown`. Best-effort: a thrown, timed-out, or
355
355
  * malformed shutdown is logged and swallowed.
356
356
  */
@@ -15,7 +15,7 @@ const resolveCallbackUrl = mock(
15
15
  async () => "https://ingress.example/webhooks/oauth/callback",
16
16
  );
17
17
 
18
- mock.module("../platform-callback-registration.js", () => ({
18
+ mock.module("../cloud-callback-registration.js", () => ({
19
19
  resolveCallbackUrl,
20
20
  }));
21
21
 
@@ -86,7 +86,7 @@ describe("resolveOauthCallbackUrl", () => {
86
86
  expect(typeA).toEqual(typeB);
87
87
  });
88
88
 
89
- test("registers one route type so the platform holds a single admin row", async () => {
89
+ test("registers one route type so the cloud holds a single admin row", async () => {
90
90
  await resolveOauthCallbackUrl();
91
91
  const [, , type] = resolveCallbackUrl.mock.calls[0] as unknown[];
92
92
  expect(type).toEqual("oauth");
@@ -21,8 +21,8 @@ import { probeTunnel } from "../tunnel-probe.js";
21
21
 
22
22
  const BASE = "https://edge.example";
23
23
 
24
- /** The marker the nginx pairing edge stamps into every config it serves. */
25
- const PAIRING_EDGE_MODE = "remote-gateway";
24
+ /** The remote value the nginx pairing edge stamps into every config it serves. */
25
+ const PAIRING_EDGE_REMOTE = "docker";
26
26
 
27
27
  type Route = { status?: number; body?: string; reject?: unknown };
28
28
 
@@ -68,7 +68,7 @@ function stubFetch(routes: { healthz?: Route; config?: Route }): {
68
68
  const route = isHealth
69
69
  ? (routes.healthz ?? { body: "ok" })
70
70
  : (routes.config ?? {
71
- body: JSON.stringify({ mode: PAIRING_EDGE_MODE }),
71
+ body: JSON.stringify({ remote: PAIRING_EDGE_REMOTE }),
72
72
  });
73
73
  if (route.reject !== undefined) {
74
74
  throw route.reject;
@@ -85,7 +85,7 @@ function stubFetch(routes: { healthz?: Route; config?: Route }): {
85
85
  function configBody(config: Record<string, unknown>): Route {
86
86
  return {
87
87
  status: 200,
88
- body: JSON.stringify({ mode: PAIRING_EDGE_MODE, ...config }),
88
+ body: JSON.stringify({ remote: PAIRING_EDGE_REMOTE, ...config }),
89
89
  };
90
90
  }
91
91
 
@@ -226,10 +226,10 @@ describe("probeTunnel", () => {
226
226
  config: {
227
227
  status: 200,
228
228
  body: JSON.stringify({
229
- mode: PAIRING_EDGE_MODE,
229
+ remote: PAIRING_EDGE_REMOTE,
230
230
  apiBaseUrl: "/v1",
231
- platformDisabled: true,
232
- disablePlatform: true,
231
+ cloudDisabled: true,
232
+ disableCloud: true,
233
233
  assistantName: "Ada",
234
234
  assistantId: "asst_1",
235
235
  hubUrl: "https://mycadet.ai",
@@ -437,7 +437,7 @@ describe("probeTunnel", () => {
437
437
  },
438
438
  },
439
439
  json: async (): Promise<unknown> => ({
440
- mode: PAIRING_EDGE_MODE,
440
+ remote: PAIRING_EDGE_REMOTE,
441
441
  assistantId: "asst_1",
442
442
  }),
443
443
  } as unknown as Response),
@@ -1,33 +1,30 @@
1
1
  /**
2
2
  * Platform callback route registration.
3
3
  *
4
- * Both platform-managed (IS_PLATFORM=true) and self-hosted assistants can
5
- * register callback routes with the platform so inbound provider webhooks
4
+ * Both cloud-managed (IS_CLOUD=true) and self-hosted assistants can
5
+ * register callback routes with the cloud so inbound provider webhooks
6
6
  * (Telegram, Twilio, email, OAuth) are forwarded correctly.
7
7
  *
8
- * Platform-managed assistants pick up context from environment variables.
8
+ * Cloud assistants pick up context from environment variables.
9
9
  * Self-hosted assistants use stored credentials (from `assistant cloud
10
10
  * connect` or the ensure-registration bootstrap).
11
11
  *
12
- * The platform endpoint is:
13
- * POST {CADET_PLATFORM_URL}/v1/internal/gateway/callback-routes/register/
12
+ * The cloud endpoint is:
13
+ * POST {CADET_CLOUD_URL}/v1/internal/gateway/callback-routes/register/
14
14
  *
15
15
  * It accepts { assistant_id, callback_path, type } and returns a stable
16
16
  * callback_url that external services should use. Self-hosted assistants
17
17
  * also send callback_base_url (configured or detected public ingress) so
18
- * the platform can register a route that points at this instance.
18
+ * the cloud can register a route that points at this instance.
19
19
  */
20
20
 
21
- import { getPlatformBaseUrl } from "../config/env.js";
22
- import { getIsPlatform } from "../config/env-registry.js";
21
+ import { resolveCloudAssistantId } from "../config/cloud-identity.js";
22
+ import { getCloudBaseUrl } from "../config/env.js";
23
+ import { getIsCloud } from "../config/env-registry.js";
23
24
  import { getConfig } from "../config/loader.js";
24
- import { resolvePlatformAssistantId } from "../config/platform-identity.js";
25
25
  import { ipcRegisterWebhookRoute } from "../ipc/gateway-client.js";
26
26
  import { credentialKey } from "../security/credential-key.js";
27
- import {
28
- getSecureKeyAsync,
29
- getSecureKeyResultAsync,
30
- } from "../security/secure-keys.js";
27
+ import { getSecureKeyResultAsync } from "../security/secure-keys.js";
31
28
  import { getLogger } from "../util/logger.js";
32
29
  import { resolveClaimedPodWebhookUrl } from "./pod-webhook-claim.js";
33
30
  import {
@@ -36,14 +33,14 @@ import {
36
33
  } from "./public-ingress-urls.js";
37
34
  import { isTunnelWebhooksEnabled } from "./tunnel-webhooks-gate.js";
38
35
 
39
- const log = getLogger("platform-callback-registration");
36
+ const log = getLogger("cloud-callback-registration");
40
37
 
41
- export interface PlatformCallbackRegistrationContext {
38
+ export interface CloudCallbackRegistrationContext {
42
39
  isPlatform: boolean;
43
- platformBaseUrl: string;
40
+ cloudBaseUrl: string;
44
41
  assistantId: string;
45
42
  /**
46
- * Whether a managed assistant API key is available: `null` when the
43
+ * Whether a cloud assistant API key is available: `null` when the
47
44
  * credential store could not be read, so its absence is not evidence that
48
45
  * no key is stored. A client deciding whether to provision one must not
49
46
  * read `null` as "missing".
@@ -53,20 +50,14 @@ export interface PlatformCallbackRegistrationContext {
53
50
  enabled: boolean;
54
51
  }
55
52
 
56
- export async function resolvePlatformCallbackRegistrationContext(): Promise<PlatformCallbackRegistrationContext> {
57
- const platform = getIsPlatform();
58
- const [storedBaseUrlRaw, storedAssistantApiKey, assistantId] =
59
- await Promise.all([
60
- getSecureKeyAsync(credentialKey("cadet", "platform_base_url")),
61
- getSecureKeyResultAsync(credentialKey("cadet", "assistant_api_key")),
62
- resolvePlatformAssistantId(),
63
- ]);
53
+ export async function resolveCloudCallbackRegistrationContext(): Promise<CloudCallbackRegistrationContext> {
54
+ const platform = getIsCloud();
55
+ const [storedAssistantApiKey, assistantId] = await Promise.all([
56
+ getSecureKeyResultAsync(credentialKey("cadet", "assistant_api_key")),
57
+ resolveCloudAssistantId(),
58
+ ]);
64
59
 
65
- const storedBaseUrl = storedBaseUrlRaw?.trim();
66
- const platformBaseUrl = (storedBaseUrl || getPlatformBaseUrl()).replace(
67
- /\/+$/,
68
- "",
69
- );
60
+ const cloudBaseUrl = getCloudBaseUrl().replace(/\/+$/, "");
70
61
  const envAssistantCredential = process.env.ASSISTANT_API_KEY?.trim();
71
62
  const assistantCredential =
72
63
  storedAssistantApiKey.value?.trim() || envAssistantCredential || undefined;
@@ -80,17 +71,15 @@ export async function resolvePlatformCallbackRegistrationContext(): Promise<Plat
80
71
 
81
72
  return {
82
73
  isPlatform: platform,
83
- platformBaseUrl,
74
+ cloudBaseUrl,
84
75
  assistantId,
85
76
  hasAssistantApiKey,
86
77
  authHeader,
87
78
  // Enabled when we have enough context to register callback routes.
88
- // Does NOT require IS_PLATFORM — self-hosted assistants with stored
79
+ // Does NOT require IS_CLOUD — self-hosted assistants with stored
89
80
  // credentials can also register routes.
90
81
  enabled:
91
- platformBaseUrl.length > 0 &&
92
- assistantId.length > 0 &&
93
- authHeader !== null,
82
+ cloudBaseUrl.length > 0 && assistantId.length > 0 && authHeader !== null,
94
83
  };
95
84
  }
96
85
 
@@ -102,34 +91,34 @@ interface RegisterCallbackRouteResponse {
102
91
  }
103
92
 
104
93
  /**
105
- * Register a callback route with the platform's internal gateway endpoint.
94
+ * Register a callback route with the cloud's internal gateway endpoint.
106
95
  *
107
96
  * @param callbackPath - The path portion after the ingress base URL
108
97
  * (e.g. "webhooks/twilio/voice"). Leading/trailing slashes are stripped
109
- * by the platform.
98
+ * by the cloud.
110
99
  * @param type - The route type identifier (e.g. "twilio_voice",
111
100
  * "twilio_status", "oauth", "telegram").
112
101
  * @param sourceIdentifier - Optional human-readable source identifier
113
102
  * (e.g. bot handle, phone number) for display in admin UI.
114
- * @returns The platform-provided callback URL that external services should use.
115
- * @throws If the platform request fails.
103
+ * @returns The cloud-provided callback URL that external services should use.
104
+ * @throws If the cloud request fails.
116
105
  */
117
106
  export async function registerCallbackRoute(
118
107
  callbackPath: string,
119
108
  type: string,
120
109
  sourceIdentifier?: string,
121
110
  ): Promise<string> {
122
- const context = await resolvePlatformCallbackRegistrationContext();
111
+ const context = await resolveCloudCallbackRegistrationContext();
123
112
  if (!context.enabled || !context.authHeader) {
124
113
  throw new Error(
125
114
  "Platform callbacks not available — missing platform registration context",
126
115
  );
127
116
  }
128
117
 
129
- const platformBaseUrl = context.platformBaseUrl;
118
+ const cloudBaseUrl = context.cloudBaseUrl;
130
119
  const assistantId = context.assistantId;
131
120
 
132
- const url = `${platformBaseUrl}/v1/internal/gateway/callback-routes/register/`;
121
+ const url = `${cloudBaseUrl}/v1/internal/gateway/callback-routes/register/`;
133
122
 
134
123
  const headers: Record<string, string> = {
135
124
  "Content-Type": "application/json",
@@ -178,11 +167,11 @@ export async function registerCallbackRoute(
178
167
 
179
168
  /**
180
169
  * Self-hosted assistants must send the public ingress URL when registering
181
- * with the platform. Platform pods omit it: Django ignores client-provided
182
- * bases and always uses the platform callback URL.
170
+ * with the cloud. Cloud pods omit it: Django ignores client-provided
171
+ * bases and always uses the cloud callback URL.
183
172
  */
184
173
  function resolveSelfHostedCallbackBaseUrl(): string | undefined {
185
- if (getIsPlatform()) {
174
+ if (getIsCloud()) {
186
175
  return undefined;
187
176
  }
188
177
  try {
@@ -217,14 +206,14 @@ export async function registerLocalWebhookRoute(
217
206
  if (!result.ok) {
218
207
  log.warn(
219
208
  { path, type, reason: result.reason },
220
- "Gateway webhook route registration failed, falling back to the platform",
209
+ "Gateway webhook route registration failed, falling back to the cloud",
221
210
  );
222
211
  return false;
223
212
  }
224
213
  if (result.disabled) {
225
214
  log.info(
226
215
  { path, type },
227
- "Gateway is not serving its own webhooks, falling back to the platform",
216
+ "Gateway is not serving its own webhooks, falling back to the cloud",
228
217
  );
229
218
  return false;
230
219
  }
@@ -234,14 +223,14 @@ export async function registerLocalWebhookRoute(
234
223
  }
235
224
 
236
225
  /**
237
- * Resolve a callback URL, registering with the platform when appropriate.
226
+ * Resolve a callback URL, registering with the cloud when appropriate.
238
227
  *
239
228
  * Resolution order, matching `handleWebhooksRegister` in
240
229
  * `runtime/routes/webhook-routes.ts` and `hasWebhookRoutingConfigured` in
241
230
  * `config/webhook-routing.ts`:
242
231
  *
243
- * 1. **Platform pods** (`IS_PLATFORM`) with the `tunnel-webhooks` flag off
244
- * always register with the platform gateway. With the flag on, they try
232
+ * 1. **Cloud pods** (`IS_CLOUD`) with the `tunnel-webhooks` flag off
233
+ * always register with the cloud gateway. With the flag on, they try
245
234
  * the direct supplier first — the gateway's Tunnel client publishes the
246
235
  * tunnel URL into `ingress.publicBaseUrl` — and fall back to platform
247
236
  * registration on any failure, including an explicit
@@ -254,21 +243,21 @@ export async function registerLocalWebhookRoute(
254
243
  * 3. **Platform-connected assistants with no ingress** register with the
255
244
  * platform gateway rather than surfacing the direct builder's error.
256
245
  * Connectivity is decided by credentials (platform base URL + assistant
257
- * ID + assistant API key), not by `IS_PLATFORM`, which is only ever true
258
- * on a platform pod.
246
+ * ID + assistant API key), not by `IS_CLOUD`, which is only ever true
247
+ * on a cloud pod.
259
248
  *
260
249
  * Off a pod, an explicit `ingress.enabled: false` is a decision not to accept
261
250
  * inbound webhooks at all, so `PublicIngressDisabledError` propagates instead
262
- * of being routed around. Ingress precedes the platform fallback because any
251
+ * of being routed around. Ingress precedes the cloud fallback because any
263
252
  * logged-in local assistant holds cloud credentials for the LLM proxy:
264
253
  * treating credential presence as "managed" would silently reroute an
265
- * explicitly configured self-hosted callback through the platform.
254
+ * explicitly configured self-hosted callback through the cloud.
266
255
  *
267
256
  * The `directUrl` parameter is a **lazy supplier** (a function returning a
268
257
  * string) rather than an eagerly-evaluated string. This is critical because
269
258
  * the direct URL builders (e.g. `getTwilioVoiceWebhookUrl`) call
270
259
  * `getPublicBaseUrl()` which throws when no public ingress URL is configured.
271
- * On a platform pod the direct URL is never needed, and deferring evaluation
260
+ * On a cloud pod the direct URL is never needed, and deferring evaluation
272
261
  * avoids the throw.
273
262
  *
274
263
  * @param directUrl - Lazy supplier for the direct callback URL.
@@ -285,7 +274,7 @@ export async function resolveCallbackUrl(
285
274
  queryParams?: Record<string, string>,
286
275
  sourceIdentifier?: string,
287
276
  ): Promise<string> {
288
- if (getIsPlatform()) {
277
+ if (getIsCloud()) {
289
278
  if (isTunnelWebhooksEnabled()) {
290
279
  const claimed = await resolveClaimedPodWebhookUrl(directUrl, () =>
291
280
  registerLocalWebhookRoute(callbackPath, type, sourceIdentifier),
@@ -310,10 +299,10 @@ export async function resolveCallbackUrl(
310
299
  return ingressUrl;
311
300
  }
312
301
 
313
- // No ingress configured. Fall back to the platform gateway when this
314
- // assistant is connected to the platform. Platform pods always are, so
302
+ // No ingress configured. Fall back to the cloud gateway when this
303
+ // assistant is connected to the cloud. Cloud pods always are, so
315
304
  // they skip the context probe and register directly.
316
- const context = await resolvePlatformCallbackRegistrationContext();
305
+ const context = await resolveCloudCallbackRegistrationContext();
317
306
  if (!context.enabled) {
318
307
  throw ingressError;
319
308
  }
@@ -330,7 +319,7 @@ export async function resolveCallbackUrl(
330
319
  } catch (err) {
331
320
  // Registration is only attempted once the local ingress has been ruled
332
321
  // out, so there is nothing left to fall back to. Surface a clear error so
333
- // callers (and the user) understand this is a platform-side issue, not a
322
+ // callers (and the user) understand this is a cloud-side issue, not a
334
323
  // tunnel problem.
335
324
  const detail = err instanceof Error ? err.message : String(err);
336
325
  throw new Error(
@@ -9,7 +9,7 @@
9
9
  * caller needs a listener of its own.
10
10
  *
11
11
  * Which base URL is correct depends on how the assistant is reachable: a
12
- * platform pod and a platform-connected assistant are served through a
12
+ * platform pod and a cloud-connected assistant are served through a
13
13
  * managed callback route, a self-hosted deployment through its configured
14
14
  * public ingress. `resolveCallbackUrl` owns that decision, and this is the
15
15
  * OAuth-shaped entry point to it, mirroring `plugin-api/webhook-url.ts`
@@ -17,7 +17,7 @@
17
17
  */
18
18
 
19
19
  import { loadConfig } from "../config/loader.js";
20
- import { resolveCallbackUrl } from "./platform-callback-registration.js";
20
+ import { resolveCallbackUrl } from "./cloud-callback-registration.js";
21
21
  import {
22
22
  getMcpOAuthClientMetadataUrl,
23
23
  getOAuthCallbackUrl,
@@ -33,9 +33,9 @@ import {
33
33
  export const OAUTH_CALLBACK_PATH = "webhooks/oauth/callback";
34
34
 
35
35
  /**
36
- * Registration type recorded with the platform.
36
+ * Registration type recorded with the cloud.
37
37
  *
38
- * The platform keys a callback route by `(path, type)`, and there is one
38
+ * The cloud keys a callback route by `(path, type)`, and there is one
39
39
  * OAuth route, so one type describes it. Registering the same path under
40
40
  * several types would produce duplicate admin rows pointing at the same
41
41
  * URL.
@@ -51,7 +51,7 @@ const OAUTH_REGISTRATION_TYPE = "oauth";
51
51
  * across attempts, which is what an exact-match `redirect_uri` check needs.
52
52
  *
53
53
  * @throws when no public ingress is configured and the assistant is not
54
- * connected to the platform. There is no URL that would work in that
54
+ * connected to the cloud. There is no URL that would work in that
55
55
  * case, and returning a plausible one produces an authorization request
56
56
  * whose callback silently never arrives.
57
57
  */
@@ -69,7 +69,7 @@ export async function resolveOauthCallbackUrl(): Promise<string> {
69
69
  *
70
70
  * A URL-based client id must be HTTPS, and its document must publish the exact
71
71
  * redirect URI used by the authorization request. The gateway document is
72
- * derived from public ingress, so a platform-relayed callback cannot use it.
72
+ * derived from public ingress, so a cloud-relayed callback cannot use it.
73
73
  * Returning undefined preserves Dynamic Client Registration as the SDK's
74
74
  * fallback in either case.
75
75
  */
@@ -1,11 +1,11 @@
1
1
  /**
2
- * The platform-pod tier of webhook URL resolution, shared by the two seams that
2
+ * The cloud-pod tier of webhook URL resolution, shared by the two seams that
3
3
  * resolve callback URLs: `resolveCallbackUrl` and the `webhooks_register` route
4
4
  * handler.
5
5
  *
6
6
  * A pod's Tunnel only forwards subpaths the gateway has claimed, so the
7
7
  * published ingress URL is handed out only once the claim succeeds. Anything
8
- * else leaves the caller to register with the platform instead.
8
+ * else leaves the caller to register with the cloud instead.
9
9
  */
10
10
 
11
11
  /**
@@ -51,11 +51,11 @@ export interface IngressConfig {
51
51
  * True when the user has explicitly switched public ingress off.
52
52
  *
53
53
  * An explicit opt-out is a decision not to accept inbound webhooks at all, so
54
- * it must not be silently routed around via platform callbacks. An *absent*
55
- * ingress config is merely "not set up yet" and is eligible for the platform
54
+ * it must not be silently routed around via cloud callbacks. An *absent*
55
+ * ingress config is merely "not set up yet" and is eligible for the cloud
56
56
  * fallback, so only a literal `false` counts here.
57
57
  *
58
- * Every consumer that offers a platform-callback fallback has to consult this
58
+ * Every consumer that offers a cloud-callback fallback has to consult this
59
59
  * before falling back, which is why it lives here rather than in each caller.
60
60
  */
61
61
  export function isPublicIngressDisabled(config: IngressConfig): boolean {
@@ -39,6 +39,7 @@ import {
39
39
  normalizeHttpPublicBaseUrlWithoutTrailingSlash,
40
40
  trimmedNonEmptyString,
41
41
  } from "@mycadet/service-contracts/ingress";
42
+ import { z } from "zod";
42
43
 
43
44
  import { isPlainObject } from "../util/object.js";
44
45
  import { truncate } from "../util/truncate.js";
@@ -81,11 +82,17 @@ const UNREADABLE_CONFIG_DETAIL = "no assistant config served";
81
82
  const UNMARKED_CONFIG_DETAIL = "not a pairing edge config";
82
83
 
83
84
  /**
84
- * Stamped into the served config by the nginx pairing edge and nothing else
85
- * (`remoteWebIngressConfig` in `cli/src/lib/nginx-ingress.ts`), which makes it
86
- * the marker that separates that edge from any other JSON a live URL serves.
85
+ * The config a self-hosted edge serves (`remoteWebIngressConfig` in
86
+ * `cli/src/lib/nginx-ingress.ts`). The `remote` field is always stamped by
87
+ * that injector and never carries `"cloud"` — that spelling is the cloud's
88
+ * own serving, which is not an edge — so the field is the marker separating
89
+ * the edge from any other JSON a live URL serves.
87
90
  */
88
- const PAIRING_EDGE_MODE = "remote-gateway";
91
+ const ServedConfigSchema = z.object({
92
+ remote: z.string(),
93
+ assistantId: z.string().optional(),
94
+ assistantName: z.string().optional(),
95
+ });
89
96
 
90
97
  export async function probeTunnel(args: {
91
98
  publicBaseUrl: string;
@@ -241,18 +248,17 @@ async function readServedConfig(
241
248
  let detail = UNREADABLE_CONFIG_DETAIL;
242
249
  try {
243
250
  const body: unknown = await response.json();
244
- if (isPlainObject(body)) {
245
- if (body.mode === PAIRING_EDGE_MODE) {
246
- return {
247
- kind: "served",
248
- config: {
249
- assistantId: trimmedNonEmptyString(body.assistantId),
250
- assistantName: trimmedNonEmptyString(body.assistantName),
251
- },
252
- };
253
- }
254
- detail = UNMARKED_CONFIG_DETAIL;
251
+ const parsed = ServedConfigSchema.safeParse(body);
252
+ if (parsed.success && parsed.data.remote !== "cloud") {
253
+ return {
254
+ kind: "served",
255
+ config: {
256
+ assistantId: trimmedNonEmptyString(parsed.data.assistantId),
257
+ assistantName: trimmedNonEmptyString(parsed.data.assistantName),
258
+ },
259
+ };
255
260
  }
261
+ detail = UNMARKED_CONFIG_DETAIL;
256
262
  } catch {
257
263
  /* an unparseable body is an edge answering with something else */
258
264
  }
@@ -3,14 +3,14 @@ import { isAssistantFeatureFlagEnabled } from "../config/assistant-feature-flags
3
3
  const TUNNEL_WEBHOOKS_FLAG_KEY = "tunnel-webhooks" as const;
4
4
 
5
5
  /**
6
- * Whether platform pods resolve webhook callback URLs from the
6
+ * Whether cloud pods resolve webhook callback URLs from the
7
7
  * Tunnel-published ingress URL instead of registering platform callback
8
8
  * routes.
9
9
  *
10
- * Gates the platform-pod tier in all three webhook resolution sites
10
+ * Gates the cloud-pod tier in all three webhook resolution sites
11
11
  * (`resolveCallbackUrl`, `hasWebhookRoutingConfigured`,
12
12
  * `handleWebhooksRegister`), which must agree tier for tier. Off means the
13
- * pre-Tunnel behavior: platform pods always register with the platform
13
+ * pre-Tunnel behavior: cloud pods always register with the cloud
14
14
  * gateway. On means ingress-first with platform registration as the
15
15
  * fallback, so a pod whose tunnel has not published a URL yet keeps
16
16
  * working either way.
@@ -108,7 +108,7 @@ describe("AssistantIpcServer DB migration readiness gate", () => {
108
108
  setDbMigrationFailed(new Error("boom"));
109
109
  expect(gate("admin_rollbackmigrations_post")).toBeNull();
110
110
  expect(gate("migrations_import_post")).toBeNull();
111
- // All restore transports are repair-capable: preflights, the managed
111
+ // All restore transports are repair-capable: preflights, the cloud
112
112
  // platform's GCS path, and its job-status polling.
113
113
  expect(gate("migrations_importpreflight_post")).toBeNull();
114
114
  expect(gate("migrations_importfromgcs_post")).toBeNull();