@mycadet/assistant 0.12.9 → 0.12.10

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 (651) hide show
  1. package/Dockerfile +0 -8
  2. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
  3. package/openapi.yaml +62 -910
  4. package/package.json +3 -7
  5. package/scripts/build-test-fixtures.ts +1 -1
  6. package/scripts/generate-openapi.ts +22 -6
  7. package/scripts/postinstall.ts +4 -10
  8. package/scripts/run-tests.ts +0 -21
  9. package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
  10. package/src/__tests__/agent-loop.test.ts +0 -76
  11. package/src/__tests__/anthropic-provider.test.ts +6 -6
  12. package/src/__tests__/assert-not-live-db.ts +1 -1
  13. package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
  14. package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
  15. package/src/__tests__/attachments-store.test.ts +1 -1
  16. package/src/__tests__/audit-log-rotation.test.ts +1 -1
  17. package/src/__tests__/btw-routes.test.ts +1 -1
  18. package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
  19. package/src/__tests__/call-conversation-messages.test.ts +0 -5
  20. package/src/__tests__/call-recovery.test.ts +2 -7
  21. package/src/__tests__/call-routes-http.test.ts +0 -12
  22. package/src/__tests__/call-store.test.ts +2 -7
  23. package/src/__tests__/catalog-files.test.ts +7 -5
  24. package/src/__tests__/checker.test.ts +1 -1
  25. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
  26. package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
  27. package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
  28. package/src/__tests__/cloud-profile-guard.test.ts +48 -401
  29. package/src/__tests__/compaction-events.test.ts +2 -2
  30. package/src/__tests__/config-loader-backfill.test.ts +74 -163
  31. package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
  32. package/src/__tests__/config-loader-corrupt.test.ts +10 -10
  33. package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
  34. package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
  35. package/src/__tests__/config-schema.test.ts +26 -27
  36. package/src/__tests__/config-set-route.test.ts +2 -6
  37. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
  38. package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
  39. package/src/__tests__/conversation-agent-loop.test.ts +2 -58
  40. package/src/__tests__/conversation-clear-safety.test.ts +0 -30
  41. package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
  42. package/src/__tests__/conversation-queue.test.ts +1 -1
  43. package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
  44. package/src/__tests__/conversation-skill-tools.test.ts +4 -444
  45. package/src/__tests__/conversation-slash-commands.test.ts +1 -1
  46. package/src/__tests__/conversation-store.test.ts +1 -84
  47. package/src/__tests__/conversation-surface-state.test.ts +0 -16
  48. package/src/__tests__/credential-health-service.test.ts +14 -1
  49. package/src/__tests__/credential-record-retire.test.ts +1 -1
  50. package/src/__tests__/credential-record-write-through.test.ts +1 -1
  51. package/src/__tests__/credential-security-invariants.test.ts +0 -145
  52. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  53. package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
  54. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  55. package/src/__tests__/dictation-profile-store.test.ts +6 -6
  56. package/src/__tests__/disk-usage.test.ts +28 -164
  57. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
  58. package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
  59. package/src/__tests__/emit-event-signal.test.ts +1 -1
  60. package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
  61. package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
  62. package/src/__tests__/guardian-dispatch.test.ts +0 -13
  63. package/src/__tests__/helpers/seed-app.ts +1 -1
  64. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
  65. package/src/__tests__/host-shell-tool.test.ts +1 -1
  66. package/src/__tests__/identity-routes.test.ts +1 -1
  67. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  68. package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
  69. package/src/__tests__/injector-chain.test.ts +1 -1
  70. package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
  71. package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
  72. package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
  73. package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
  74. package/src/__tests__/list-all-apps.test.ts +1 -1
  75. package/src/__tests__/live-workspace-guard.test.ts +2 -2
  76. package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
  77. package/src/__tests__/llm-resolver.test.ts +7 -7
  78. package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
  79. package/src/__tests__/llm-usage-store.test.ts +0 -495
  80. package/src/__tests__/log-export-routes.test.ts +1 -1
  81. package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
  82. package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
  83. package/src/__tests__/memory-config-file-parity.test.ts +1 -1
  84. package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
  85. package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
  86. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  87. package/src/__tests__/onboarding-persona-write.test.ts +1 -1
  88. package/src/__tests__/openai-provider.test.ts +8 -8
  89. package/src/__tests__/path-policy.test.ts +1 -1
  90. package/src/__tests__/persona-resolver.test.ts +1 -1
  91. package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
  92. package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
  93. package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
  94. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
  95. package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
  96. package/src/__tests__/provider-connections-backfill.test.ts +10 -10
  97. package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
  98. package/src/__tests__/resolve-app.test.ts +1 -1
  99. package/src/__tests__/run-due-schedules.test.ts +1 -1
  100. package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
  101. package/src/__tests__/schedule-routes.test.ts +1 -1
  102. package/src/__tests__/schedule-store.test.ts +1 -1
  103. package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
  104. package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
  105. package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
  106. package/src/__tests__/tool-approval-handler.test.ts +1 -1
  107. package/src/__tests__/tool-audit.test.ts +5 -235
  108. package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
  109. package/src/__tests__/tools-get-route.test.ts +1 -1
  110. package/src/__tests__/turn-outcome-read.test.ts +1 -1
  111. package/src/__tests__/twilio-routes.test.ts +0 -1
  112. package/src/__tests__/usage-attribution.test.ts +0 -31
  113. package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
  114. package/src/__tests__/visible-app-context.test.ts +1 -1
  115. package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
  116. package/src/__tests__/workspace-git-service.test.ts +1 -1
  117. package/src/__tests__/workspace-greetings.test.ts +1 -1
  118. package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
  119. package/src/activation/progress-store.ts +1 -1
  120. package/src/activation/turn-hooks.ts +1 -1
  121. package/src/agent/loop.ts +0 -51
  122. package/src/apps/app-store.ts +1 -1
  123. package/src/avatar/__tests__/avatar-store.test.ts +2 -172
  124. package/src/avatar/accent-backfill.ts +1 -1
  125. package/src/avatar/avatar-manifest.ts +1 -1
  126. package/src/avatar/avatar-store.ts +10 -69
  127. package/src/avatar/ensure-raster.ts +1 -1
  128. package/src/avatar/identity-avatar.ts +1 -1
  129. package/src/avatar/sync-avatar.ts +1 -1
  130. package/src/avatar/traits-png-sync.ts +1 -1
  131. package/src/bundler/compiler-tools.ts +1 -1
  132. package/src/bundler/package-resolver.ts +1 -1
  133. package/src/calls/__tests__/call-controller.test.ts +25 -27
  134. package/src/calls/active-call-lease.ts +1 -1
  135. package/src/calls/call-controller.ts +3 -3
  136. package/src/calls/call-domain.ts +4 -8
  137. package/src/calls/call-store.ts +2 -76
  138. package/src/calls/resolve-call-tts-provider.ts +3 -3
  139. package/src/calls/twilio-config.ts +3 -3
  140. package/src/calls/twilio-rest.ts +2 -2
  141. package/src/calls/voice-ingress-preflight.ts +2 -2
  142. package/src/cli/bundled-modules.ts +0 -2
  143. package/src/cli/commands/__tests__/apps.test.ts +1 -1
  144. package/src/cli/commands/__tests__/plugins.test.ts +9 -66
  145. package/src/cli/commands/__tests__/ps.test.ts +67 -0
  146. package/src/cli/commands/auth.help.ts +2 -2
  147. package/src/cli/commands/avatar.ts +1 -1
  148. package/src/cli/commands/changelog.ts +1 -1
  149. package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
  150. package/src/cli/commands/cloud/index.help.ts +1 -1
  151. package/src/cli/commands/cloud/index.ts +2 -2
  152. package/src/cli/commands/db/refresh.ts +1 -1
  153. package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
  154. package/src/cli/commands/db/repair.ts +1 -1
  155. package/src/cli/commands/db/status.ts +1 -1
  156. package/src/cli/commands/inference-profiles.ts +1 -12
  157. package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
  158. package/src/cli/commands/memory/index.help.ts +1 -43
  159. package/src/cli/commands/memory/memory-v3.ts +0 -64
  160. package/src/cli/commands/plugins.ts +54 -205
  161. package/src/cli/commands/ps.ts +5 -2
  162. package/src/cli/commands/status.ts +1 -1
  163. package/src/cli/index.help.ts +0 -2
  164. package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
  165. package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
  166. package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
  167. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
  168. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
  169. package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
  170. package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
  171. package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
  172. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
  173. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
  174. package/src/cli/lib/diff-plugin.ts +1 -1
  175. package/src/cli/lib/inspect-plugin.ts +13 -97
  176. package/src/cli/lib/install-from-cloud.ts +1 -1
  177. package/src/cli/lib/install-from-github.ts +75 -154
  178. package/src/cli/lib/install-plugin-dependencies.ts +1 -1
  179. package/src/cli/lib/list-installed-plugins.ts +1 -1
  180. package/src/cli/lib/open-browser.ts +1 -1
  181. package/src/cli/lib/plugin-catalog-cache.ts +8 -51
  182. package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
  183. package/src/cli/lib/plugin-details.ts +5 -27
  184. package/src/cli/lib/plugin-marketplace.ts +18 -266
  185. package/src/cli/lib/search-plugins.ts +23 -43
  186. package/src/cli/lib/toggle-plugin.ts +1 -1
  187. package/src/cli/lib/uninstall-plugin.ts +1 -1
  188. package/src/cli/lib/upgrade-plugin.ts +3 -49
  189. package/src/cli/program.ts +1 -3
  190. package/src/cli.ts +1 -1
  191. package/src/cloud/client.ts +0 -6
  192. package/src/cloud/consent-cache.test.ts +22 -201
  193. package/src/cloud/consent-cache.ts +16 -111
  194. package/src/cloud/sync-identity.ts +1 -1
  195. package/src/config/__tests__/chat-settings.test.ts +1 -1
  196. package/src/config/__tests__/cloud-identity.test.ts +15 -2
  197. package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
  198. package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
  199. package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
  200. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
  201. package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
  202. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
  203. package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
  204. package/src/config/__tests__/profile-materialization.test.ts +2 -4
  205. package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
  206. package/src/config/acp-agent-write.ts +1 -1
  207. package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
  208. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  209. package/src/config/call-site-defaults.ts +0 -6
  210. package/src/config/cloud-identity.ts +12 -5
  211. package/src/config/composer-preferences.ts +1 -1
  212. package/src/config/default-profile-catalog.ts +8 -75
  213. package/src/config/default-profile-names.ts +2 -25
  214. package/src/config/env-registry.ts +1 -14
  215. package/src/config/env.ts +8 -6
  216. package/src/config/llm-resolver.ts +1 -2
  217. package/src/config/loader.ts +13 -17
  218. package/src/config/profile-materialization.ts +1 -1
  219. package/src/config/schema.ts +1 -7
  220. package/src/config/schemas/call-site-catalog.ts +0 -7
  221. package/src/config/schemas/llm.ts +22 -27
  222. package/src/config/seed-inference-profiles.ts +16 -17
  223. package/src/config/skills.ts +2 -2
  224. package/src/config/sync-gated-profiles.ts +6 -24
  225. package/src/credential-health/credential-health-service.ts +10 -3
  226. package/src/daemon/approval-generators.ts +3 -3
  227. package/src/daemon/config-watcher.ts +2 -2
  228. package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
  229. package/src/daemon/conversation-agent-loop.ts +6 -97
  230. package/src/daemon/conversation-process.ts +1 -1
  231. package/src/daemon/conversation-skill-tools.ts +4 -72
  232. package/src/daemon/conversation-store.ts +1 -1
  233. package/src/daemon/conversation-surface-state.ts +0 -33
  234. package/src/daemon/conversation-surfaces.ts +1 -86
  235. package/src/daemon/conversation-tool-setup.test.ts +1 -1
  236. package/src/daemon/conversation-tool-setup.ts +0 -23
  237. package/src/daemon/conversation.ts +3 -5
  238. package/src/daemon/daemon-control.ts +3 -3
  239. package/src/daemon/dictation-profile-store.ts +3 -3
  240. package/src/daemon/event-loop-watchdog.test.ts +2 -198
  241. package/src/daemon/event-loop-watchdog.ts +0 -185
  242. package/src/daemon/external-plugins-bootstrap.ts +1 -1
  243. package/src/daemon/first-greeting.ts +1 -1
  244. package/src/daemon/handlers/skills.ts +1 -1
  245. package/src/daemon/host-app-control-proxy.ts +1 -1
  246. package/src/daemon/host-cu-proxy.ts +2 -2
  247. package/src/daemon/identity-helpers.ts +1 -1
  248. package/src/daemon/lifecycle.ts +11 -15
  249. package/src/daemon/main.ts +1 -1
  250. package/src/daemon/now-scratchpad.ts +1 -1
  251. package/src/daemon/process-message.ts +4 -4
  252. package/src/daemon/profiler-run-store.ts +2 -2
  253. package/src/daemon/providers-setup.ts +2 -2
  254. package/src/daemon/shutdown-handlers.ts +0 -10
  255. package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
  256. package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
  257. package/src/daemon/tool-side-effects.ts +1 -1
  258. package/src/desktop/desktop-session-manager.ts +1 -1
  259. package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
  260. package/src/heartbeat/heartbeat-service.ts +1 -1
  261. package/src/home/feed-writer.ts +1 -1
  262. package/src/home/home-greeting-cache.ts +1 -1
  263. package/src/home/relationship-state-writer.ts +2 -2
  264. package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
  265. package/src/hooks/hook-loader.ts +2 -2
  266. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  267. package/src/inbound/oauth-callback-url.ts +3 -3
  268. package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
  269. package/src/ipc/socket-path.ts +1 -1
  270. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
  271. package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
  272. package/src/live-voice/live-voice-session.ts +3 -66
  273. package/src/mcp/__tests__/effective-config.test.ts +1 -1
  274. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
  275. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
  276. package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
  277. package/src/mcp/__tests__/reload-signal.test.ts +1 -1
  278. package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
  279. package/src/mcp/reload-signal.ts +1 -1
  280. package/src/mcp/workspace-mcp-config.ts +1 -23
  281. package/src/messaging/draft-store.ts +1 -1
  282. package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
  283. package/src/monitoring/__tests__/page-cache.test.ts +1 -1
  284. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  285. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
  286. package/src/monitoring/active-conversations.ts +1 -1
  287. package/src/monitoring/control.ts +1 -1
  288. package/src/monitoring/daemon-boot-time.ts +1 -1
  289. package/src/monitoring/daemon-heartbeat.ts +1 -1
  290. package/src/monitoring/page-cache.ts +1 -1
  291. package/src/monitoring/plugin-auto-update.ts +1 -7
  292. package/src/monitoring/plugin-source-watch.ts +1 -1
  293. package/src/monitoring/recovery/db.ts +1 -1
  294. package/src/monitoring/recovery/inflight-content.ts +1 -1
  295. package/src/monitoring/resource-sampler.ts +3 -14
  296. package/src/monitoring/stall-capture.ts +1 -1
  297. package/src/monitoring/worker.ts +9 -76
  298. package/src/monitoring/workspace-git-heartbeat.ts +1 -1
  299. package/src/oauth/connect-orchestrator.ts +4 -4
  300. package/src/permissions/checker.ts +1 -1
  301. package/src/permissions/workspace-policy.ts +1 -1
  302. package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
  303. package/src/persistence/__tests__/message-content-file.test.ts +1 -1
  304. package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
  305. package/src/persistence/attachments-store.ts +1 -1
  306. package/src/persistence/conversation-crud.ts +1 -38
  307. package/src/persistence/conversation-directories.ts +1 -1
  308. package/src/persistence/conversation-types.ts +0 -8
  309. package/src/persistence/db-async-query.ts +1 -1
  310. package/src/persistence/db-connection.ts +11 -1
  311. package/src/persistence/db-init.ts +1 -1
  312. package/src/persistence/db-maintenance.ts +1 -1
  313. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
  314. package/src/persistence/embeddings/embedding-local.ts +4 -4
  315. package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
  316. package/src/persistence/embeddings/qdrant-client.ts +1 -1
  317. package/src/persistence/embeddings/qdrant-manager.ts +1 -1
  318. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
  319. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
  320. package/src/persistence/job-handlers/cleanup.ts +8 -17
  321. package/src/persistence/llm-usage-store.ts +2 -229
  322. package/src/persistence/message-content-file.ts +1 -1
  323. package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
  324. package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
  325. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  326. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  327. package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
  328. package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
  329. package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
  330. package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
  331. package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
  332. package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
  333. package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
  334. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
  335. package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
  336. package/src/persistence/migrations/helpers/relocation.ts +1 -1
  337. package/src/persistence/migrations/run-migrations.ts +1 -1
  338. package/src/persistence/migrations/validate-migration-state.ts +1 -1
  339. package/src/persistence/raw-query.ts +1 -29
  340. package/src/persistence/slow-sync-log.ts +0 -23
  341. package/src/persistence/steps.ts +2 -0
  342. package/src/{telemetry → persistence}/tool-audit.ts +6 -121
  343. package/src/plugin-api/index.ts +1 -1
  344. package/src/plugin-api/plugin-name-env.ts +1 -1
  345. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
  346. package/src/plugins/collect-source-versions.ts +1 -1
  347. package/src/plugins/defaults/channel/package.json +1 -1
  348. package/src/plugins/defaults/cloud-hosted/package.json +1 -1
  349. package/src/plugins/defaults/compaction/package.json +1 -1
  350. package/src/plugins/defaults/documents/package.json +1 -1
  351. package/src/plugins/defaults/empty-response/package.json +1 -1
  352. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  353. package/src/plugins/defaults/image-fallback/package.json +1 -1
  354. package/src/plugins/defaults/image-recovery/package.json +1 -1
  355. package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
  356. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
  357. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
  358. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
  359. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
  360. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
  361. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
  362. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
  363. package/src/plugins/defaults/memory/package.json +1 -1
  364. package/src/plugins/defaults/memory/paths.ts +4 -4
  365. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  366. package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
  367. package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
  368. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  369. package/src/plugins/defaults/memory/startup.ts +1 -22
  370. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
  371. package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
  372. package/src/plugins/defaults/memory/worker-control.ts +1 -1
  373. package/src/plugins/defaults/memory/worker.ts +2 -2
  374. package/src/plugins/defaults/session/package.json +1 -1
  375. package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
  376. package/src/plugins/defaults/task-progress/package.json +1 -1
  377. package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
  378. package/src/plugins/defaults/title-generate/package.json +1 -1
  379. package/src/plugins/defaults/tool-error/package.json +1 -1
  380. package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
  381. package/src/plugins/defaults/turn-context/package.json +1 -1
  382. package/src/plugins/defaults/workspace/injectors.ts +1 -1
  383. package/src/plugins/defaults/workspace/package.json +1 -1
  384. package/src/plugins/disabled-state.ts +1 -1
  385. package/src/plugins/ensure-plugin-api-shim.ts +1 -1
  386. package/src/plugins/ensure-shared-dep-links.ts +1 -1
  387. package/src/plugins/installed-plugin-dirs.ts +1 -1
  388. package/src/plugins/mcp-servers.ts +7 -9
  389. package/src/plugins/mtime-cache.ts +2 -2
  390. package/src/plugins/source-versions.ts +1 -1
  391. package/src/prompts/bootstrap-cleanup.ts +1 -1
  392. package/src/prompts/persona-resolver.ts +1 -1
  393. package/src/prompts/sections.ts +2 -2
  394. package/src/prompts/system-prompt.ts +10 -42
  395. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
  396. package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
  397. package/src/providers/cadet/client.ts +1 -1
  398. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
  399. package/src/providers/inference/adapter-factory.ts +1 -1
  400. package/src/providers/inference/backfill.ts +3 -10
  401. package/src/providers/inference/profile-probe.ts +1 -1
  402. package/src/providers/retry.ts +0 -2
  403. package/src/providers/types.ts +0 -7
  404. package/src/providers/usage-tracking.ts +1 -1
  405. package/src/routes/__tests__/route-host.test.ts +1 -1
  406. package/src/routes/control.ts +1 -1
  407. package/src/routes/route-host-client.ts +1 -1
  408. package/src/routes/worker.ts +2 -2
  409. package/src/runtime/agent-wake.ts +1 -1
  410. package/src/runtime/assistant-stream-state.ts +1 -1
  411. package/src/runtime/auth/token-service.ts +1 -1
  412. package/src/runtime/background-job-runner.ts +1 -1
  413. package/src/runtime/middleware/twilio-validation.ts +2 -2
  414. package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
  415. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
  416. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
  417. package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
  418. package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
  419. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +59 -287
  420. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
  421. package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
  422. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
  423. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  424. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  425. package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
  426. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
  427. package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
  428. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
  429. package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
  430. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
  431. package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
  432. package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
  433. package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
  434. package/src/runtime/routes/app-management-routes.ts +1 -1
  435. package/src/runtime/routes/attachment-routes.ts +1 -1
  436. package/src/runtime/routes/audit-routes.ts +1 -1
  437. package/src/runtime/routes/avatar-routes.ts +3 -10
  438. package/src/runtime/routes/cloud-routes.ts +3 -3
  439. package/src/runtime/routes/content-source-routes.ts +1 -1
  440. package/src/runtime/routes/conversation-query-routes.ts +60 -621
  441. package/src/runtime/routes/conversation-routes.ts +1 -38
  442. package/src/runtime/routes/debug-routes.ts +1 -1
  443. package/src/runtime/routes/deprecated-route-context.ts +5 -61
  444. package/src/runtime/routes/heartbeat-routes.ts +1 -1
  445. package/src/runtime/routes/identity-routes.ts +1 -1
  446. package/src/runtime/routes/index.ts +0 -6
  447. package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
  448. package/src/runtime/routes/inference-profiles-routes.ts +48 -21
  449. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
  450. package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
  451. package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
  452. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
  453. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
  454. package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
  455. package/src/runtime/routes/log-export-routes.ts +17 -15
  456. package/src/runtime/routes/migration-rollback-routes.ts +1 -1
  457. package/src/runtime/routes/migration-routes.ts +2 -3
  458. package/src/runtime/routes/monitoring-routes.ts +2 -2
  459. package/src/runtime/routes/oauth-providers.ts +5 -5
  460. package/src/runtime/routes/plugins-routes.ts +38 -163
  461. package/src/runtime/routes/profiler-routes.ts +1 -1
  462. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  463. package/src/runtime/routes/sanity-routes.ts +1 -1
  464. package/src/runtime/routes/schedule-routes.ts +1 -1
  465. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  466. package/src/runtime/routes/settings-routes.ts +1 -1
  467. package/src/runtime/routes/sounds-config-routes.ts +1 -1
  468. package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
  469. package/src/runtime/routes/user-route-dispatcher.ts +1 -3
  470. package/src/runtime/routes/user-route-import.ts +1 -1
  471. package/src/runtime/routes/user-route-resolution.ts +1 -1
  472. package/src/runtime/routes/user-routes-cli.ts +1 -1
  473. package/src/runtime/routes/workspace-commit-routes.ts +1 -1
  474. package/src/runtime/routes/workspace-greetings.ts +1 -1
  475. package/src/runtime/routes/workspace-routes.ts +1 -1
  476. package/src/runtime/routes/workspace-utils.ts +1 -1
  477. package/src/runtime/sync/resource-sync-events.ts +1 -1
  478. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
  479. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
  480. package/src/schedule/plugin-schedule-availability.ts +1 -1
  481. package/src/schedule/plugin-schedule-declarations.ts +1 -1
  482. package/src/schedule/run-script.ts +1 -1
  483. package/src/schedule/scheduler.ts +1 -11
  484. package/src/schedule/worker-control.ts +1 -1
  485. package/src/schedule/worker.ts +3 -3
  486. package/src/security/oauth2.ts +2 -2
  487. package/src/security/secret-allowlist.ts +1 -1
  488. package/src/signals/cancel.ts +1 -1
  489. package/src/signals/conversation-undo.ts +1 -1
  490. package/src/signals/emit-event.ts +1 -1
  491. package/src/signals/event-stream.ts +1 -1
  492. package/src/signals/user-message.ts +1 -1
  493. package/src/skills/catalog-install.ts +2 -1
  494. package/src/skills/clawhub.ts +1 -1
  495. package/src/skills/cloud-store.ts +1 -1
  496. package/src/skills/path-classifier.ts +1 -1
  497. package/src/skills/skill-history.ts +1 -1
  498. package/src/skills/skillssh-registry.ts +1 -1
  499. package/src/skills/uninstall.ts +1 -1
  500. package/src/skills/workspace-skill-md-signature.ts +1 -1
  501. package/src/subagent/manager.ts +1 -1
  502. package/src/theme/workspace-theme.ts +1 -1
  503. package/src/tools/browser/auth-cache.ts +1 -1
  504. package/src/tools/browser/browser-manager.ts +1 -1
  505. package/src/tools/browser/runtime-check.ts +1 -1
  506. package/src/tools/executor.ts +4 -4
  507. package/src/tools/filesystem/write.ts +1 -1
  508. package/src/tools/permission-checker.ts +2 -51
  509. package/src/tools/run-standalone.ts +1 -1
  510. package/src/tools/skills/format-input-schema.ts +1 -1
  511. package/src/tools/skills/load.ts +1 -1
  512. package/src/tools/skills/scaffold-cloud.ts +0 -32
  513. package/src/tools/terminal/safe-env.ts +1 -2
  514. package/src/tools/terminal/sanitized-bash.ts +1 -1
  515. package/src/tools/terminal/shell.ts +1 -1
  516. package/src/tools/tool-approval-handler.ts +4 -1
  517. package/src/tools/workflows/manage-workflows.ts +2 -2
  518. package/src/tools/workflows/run-workflow.test.ts +1 -1
  519. package/src/tools/workspace-tools/loader.ts +1 -1
  520. package/src/tts/synthesis-stream.ts +2 -2
  521. package/src/usage/attribution.ts +1 -11
  522. package/src/util/browser.ts +1 -1
  523. package/src/util/bun-runtime.ts +2 -1
  524. package/src/util/device-id.ts +1 -1
  525. package/src/util/disk-usage.ts +4 -139
  526. package/src/util/layout.ts +3 -3
  527. package/src/util/logger.ts +1 -1
  528. package/src/util/logs-db-path.ts +1 -1
  529. package/src/util/memory-db-path.ts +1 -1
  530. package/src/util/{platform.ts → os.ts} +5 -30
  531. package/src/util/process-tree.ts +19 -0
  532. package/src/util/sqlite3-runtime.ts +1 -1
  533. package/src/util/telemetry-db-path.ts +1 -1
  534. package/src/watcher/__tests__/engine.test.ts +0 -23
  535. package/src/watcher/engine.ts +0 -7
  536. package/src/windows-compiled-cli.ts +0 -4
  537. package/src/windows-compiled-worker-entry.ts +0 -6
  538. package/src/workflows/leaf-runner.test.ts +1 -1
  539. package/src/workflows/leaf-runner.ts +1 -1
  540. package/src/workflows/library.ts +1 -1
  541. package/src/workspace/adaptive-thinking-repair.ts +5 -24
  542. package/src/workspace/byok-default-profile-ensure.ts +24 -26
  543. package/src/workspace/custom-profile-ensure.ts +2 -2
  544. package/src/workspace/git-service.ts +1 -1
  545. package/src/workspace/hatched-date.ts +1 -1
  546. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
  547. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  548. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
  549. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
  550. package/src/workspace/migrations/registry.ts +0 -4
  551. package/src/workspace/turn-commit.ts +1 -1
  552. package/docs/activation-funnel-telemetry.md +0 -324
  553. package/scripts/bundled-plugin-packages.ts +0 -154
  554. package/scripts/generate-bundled-plugin-packages.ts +0 -29
  555. package/src/__tests__/activation-early-marking.test.ts +0 -114
  556. package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
  557. package/src/__tests__/config-get-vision-flag.test.ts +0 -139
  558. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
  559. package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
  560. package/src/__tests__/telemetry-routes.test.ts +0 -182
  561. package/src/__tests__/turn-events-store.test.ts +0 -376
  562. package/src/__tests__/ui-channel-variants.test.ts +0 -53
  563. package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
  564. package/src/avatar/avatar-changed-telemetry.ts +0 -128
  565. package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
  566. package/src/cli/commands/telemetry.help.ts +0 -27
  567. package/src/cli/commands/telemetry.ts +0 -83
  568. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
  569. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
  570. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
  571. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
  572. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
  573. package/src/cli/lib/bundled-marketplace.json +0 -1575
  574. package/src/cli/lib/bundled-plugin-packages.json +0 -827
  575. package/src/cli/lib/bundled-plugin-packages.ts +0 -87
  576. package/src/cli/lib/plugin-catalog-local.ts +0 -94
  577. package/src/cli/lib/plugin-pin-history.ts +0 -276
  578. package/src/cloud/feature-gate.ts +0 -8
  579. package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
  580. package/src/config/cloud-rehydration.ts +0 -35
  581. package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
  582. package/src/daemon/auto-profile-router.ts +0 -428
  583. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
  584. package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
  585. package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
  586. package/src/monitoring/db-integrity-check.ts +0 -163
  587. package/src/monitoring/db-integrity-sample.ts +0 -176
  588. package/src/monitoring/oom-kill-reporter.ts +0 -469
  589. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
  590. package/src/onboarding/onboarding-events-store.ts +0 -296
  591. package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
  592. package/src/persistence/lifecycle-events-store.test.ts +0 -134
  593. package/src/persistence/lifecycle-events-store.ts +0 -110
  594. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
  595. package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
  596. package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
  597. package/src/runtime/routes/auto-profile-routes.ts +0 -83
  598. package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
  599. package/src/runtime/routes/telemetry-routes.ts +0 -274
  600. package/src/security/auth-fallback-events-store.ts +0 -57
  601. package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
  602. package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
  603. package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
  604. package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
  605. package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
  606. package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
  607. package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
  608. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
  609. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
  610. package/src/telemetry/activation-funnel.ts +0 -172
  611. package/src/telemetry/config-setting-events-store.ts +0 -40
  612. package/src/telemetry/config-setting-snapshot.ts +0 -170
  613. package/src/telemetry/flush-checkpoints.ts +0 -70
  614. package/src/telemetry/live-voice-funnel.ts +0 -185
  615. package/src/telemetry/memory-corpus-size.test.ts +0 -120
  616. package/src/telemetry/memory-corpus-size.ts +0 -184
  617. package/src/telemetry/memory-tier-reporter.test.ts +0 -195
  618. package/src/telemetry/memory-tier-reporter.ts +0 -130
  619. package/src/telemetry/phone-call-funnel.ts +0 -144
  620. package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
  621. package/src/telemetry/skill-loaded-events-store.ts +0 -39
  622. package/src/telemetry/telemetry-event-sources.test.ts +0 -223
  623. package/src/telemetry/telemetry-event-sources.ts +0 -597
  624. package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
  625. package/src/telemetry/telemetry-events-outbox.ts +0 -237
  626. package/src/telemetry/telemetry-main-db.ts +0 -48
  627. package/src/telemetry/telemetry-wire-source.json +0 -4
  628. package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
  629. package/src/telemetry/telemetry-wire-validation.ts +0 -162
  630. package/src/telemetry/telemetry-wire.generated.ts +0 -483
  631. package/src/telemetry/tool-executed-events-store.test.ts +0 -210
  632. package/src/telemetry/tool-executed-events-store.ts +0 -102
  633. package/src/telemetry/trace-collection-policy.test.ts +0 -28
  634. package/src/telemetry/trace-collection-policy.ts +0 -30
  635. package/src/telemetry/turn-events-store.ts +0 -216
  636. package/src/telemetry/turn-trace-store.test.ts +0 -884
  637. package/src/telemetry/turn-trace-store.ts +0 -399
  638. package/src/telemetry/types.test.ts +0 -38
  639. package/src/telemetry/types.ts +0 -780
  640. package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
  641. package/src/telemetry/usage-telemetry-reporter.ts +0 -566
  642. package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
  643. package/src/telemetry/watchdog-direct-emit.ts +0 -104
  644. package/src/telemetry/watchdog-events-store.ts +0 -31
  645. package/src/tools/ui-surface/channel-variants.ts +0 -52
  646. package/src/watcher/__tests__/telemetry.test.ts +0 -178
  647. package/src/watcher/telemetry.ts +0 -93
  648. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
  649. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
  650. /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
  651. /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
@@ -67,21 +67,18 @@ function makeDefaultRawConfig(): Record<string, unknown> {
67
67
  llm: {
68
68
  profiles: {
69
69
  "quality-optimized": {
70
- provider: "anthropic",
71
- model: "claude-sonnet",
72
- source: "managed",
70
+ provider: "cadet",
71
+ model: "claude-sonnet-4-6",
73
72
  },
74
73
  balanced: {
75
- provider: "anthropic",
76
- model: "claude-sonnet",
77
- source: "managed",
74
+ provider: "cadet",
75
+ model: "claude-sonnet-4-6",
78
76
  },
79
77
  "cost-optimized": {
80
- provider: "anthropic",
81
- model: "claude-haiku",
82
- source: "managed",
78
+ provider: "cadet",
79
+ model: "claude-sonnet-4-6",
83
80
  },
84
- "my-custom": { provider: "openai", model: "gpt-4o", source: "user" },
81
+ "my-custom": { provider: "openai", model: "gpt-4o" },
85
82
  },
86
83
  },
87
84
  };
@@ -246,10 +243,9 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
246
243
  llm: {
247
244
  profiles: {
248
245
  balanced: {
249
- provider: "anthropic",
250
- model: "claude-sonnet",
246
+ provider: "cadet",
247
+ model: "claude-sonnet-4-6",
251
248
  label: "My Custom Name",
252
- source: "managed",
253
249
  },
254
250
  },
255
251
  },
@@ -319,10 +315,9 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
319
315
  llm: {
320
316
  profiles: {
321
317
  "quality-optimized": {
322
- provider: "anthropic",
323
- model: "claude-opus",
318
+ provider: "cadet",
319
+ model: "claude-sonnet-4-6",
324
320
  status: "disabled",
325
- source: "managed",
326
321
  },
327
322
  },
328
323
  },
@@ -334,8 +329,8 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
334
329
  expect(result).toEqual({ ok: true });
335
330
  const profile = savedProfile("quality-optimized");
336
331
  expect("status" in profile).toBe(false);
337
- expect(profile.provider).toBe("anthropic");
338
- expect(profile.model).toBe("claude-opus");
332
+ expect(profile.provider).toBe("cadet");
333
+ expect(profile.model).toBe("claude-sonnet-4-6");
339
334
  });
340
335
 
341
336
  test("PUT { label: null, status: null } on managed os-beta is rejected (label is frozen)", async () => {
@@ -343,11 +338,10 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
343
338
  llm: {
344
339
  profiles: {
345
340
  "os-beta": {
346
- provider: "together",
341
+ provider: "cadet",
347
342
  model: "zai-org/GLM-5.2",
348
343
  label: "OS Beta (Custom)",
349
344
  status: "disabled",
350
- source: "managed",
351
345
  },
352
346
  },
353
347
  },
@@ -368,10 +362,9 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
368
362
  llm: {
369
363
  profiles: {
370
364
  "os-beta": {
371
- provider: "together",
365
+ provider: "cadet",
372
366
  model: "zai-org/GLM-5.2",
373
367
  label: "Custom Label",
374
- source: "managed",
375
368
  },
376
369
  },
377
370
  },
@@ -392,9 +385,8 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
392
385
  llm: {
393
386
  profiles: {
394
387
  "os-beta": {
395
- provider: "together",
388
+ provider: "cadet",
396
389
  model: "zai-org/GLM-5.2",
397
- source: "managed",
398
390
  },
399
391
  },
400
392
  },
@@ -413,10 +405,9 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
413
405
  llm: {
414
406
  profiles: {
415
407
  "os-beta": {
416
- provider: "together",
408
+ provider: "cadet",
417
409
  model: "zai-org/GLM-5.2",
418
410
  topP: 0.7,
419
- source: "managed",
420
411
  },
421
412
  },
422
413
  },
@@ -435,10 +426,9 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
435
426
  llm: {
436
427
  profiles: {
437
428
  "os-beta": {
438
- provider: "together",
439
- model: "zai-org/GLM-5.2",
429
+ provider: "cadet",
430
+ model: "claude-sonnet-4-6",
440
431
  status: "disabled",
441
- source: "managed",
442
432
  },
443
433
  },
444
434
  },
@@ -451,8 +441,8 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
451
441
  expectOneCommitCycle();
452
442
  const profile = savedProfile("os-beta");
453
443
  expect(profile.status).toBe("active");
454
- expect(profile.provider).toBe("together");
455
- expect(profile.model).toBe("zai-org/GLM-5.2");
444
+ expect(profile.provider).toBe("cadet");
445
+ expect(profile.model).toBe("claude-sonnet-4-6");
456
446
  });
457
447
 
458
448
  test("allows edits to a user-owned profile sharing a cloud name (os-beta)", async () => {
@@ -461,8 +451,7 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
461
451
  profiles: {
462
452
  "os-beta": {
463
453
  provider: "anthropic",
464
- model: "claude-sonnet",
465
- source: "user",
454
+ model: "gpt-4o",
466
455
  },
467
456
  },
468
457
  },
@@ -482,9 +471,8 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
482
471
  llm: {
483
472
  profiles: {
484
473
  "os-beta": {
485
- provider: "fireworks",
474
+ provider: "cadet",
486
475
  model: "accounts/fireworks/models/glm-5p2",
487
- source: "managed",
488
476
  },
489
477
  },
490
478
  },
@@ -532,30 +520,6 @@ describe("PUT /v1/config/llm/profiles/:name — cloud profile guard", () => {
532
520
  // ---------------------------------------------------------------------------
533
521
 
534
522
  describe("PATCH /v1/config — cloud profile deletion guard", () => {
535
- test("rejects deletion of quality-optimized via null with descriptive message", async () => {
536
- await expect(
537
- patchRoute.handler({
538
- body: { llm: { profiles: { "quality-optimized": null } } },
539
- }),
540
- ).rejects.toThrow('Cannot delete cloud profile "quality-optimized".');
541
- });
542
-
543
- test("rejects deletion of balanced via null", async () => {
544
- await expect(
545
- patchRoute.handler({
546
- body: { llm: { profiles: { balanced: null } } },
547
- }),
548
- ).rejects.toThrow(BadRequestError);
549
- });
550
-
551
- test("rejects deletion of cost-optimized via null", async () => {
552
- await expect(
553
- patchRoute.handler({
554
- body: { llm: { profiles: { "cost-optimized": null } } },
555
- }),
556
- ).rejects.toThrow(BadRequestError);
557
- });
558
-
559
523
  test("allows deletion of custom-balanced via null (user-owned)", async () => {
560
524
  const result = await patchRoute.handler({
561
525
  body: { llm: { profiles: { "custom-balanced": null } } },
@@ -616,9 +580,8 @@ describe("PATCH /v1/config — cloud profile deletion guard", () => {
616
580
  llm: {
617
581
  profiles: {
618
582
  "os-beta": {
619
- provider: "anthropic",
620
- model: "claude-sonnet",
621
- source: "user",
583
+ provider: "cadet",
584
+ model: "claude-sonnet-4-6",
622
585
  },
623
586
  },
624
587
  },
@@ -628,33 +591,6 @@ describe("PATCH /v1/config — cloud profile deletion guard", () => {
628
591
  });
629
592
  expect(result).toHaveProperty("llm");
630
593
  });
631
-
632
- test("rejects deletion of a cloud os-beta profile", async () => {
633
- seedRawConfig({
634
- llm: {
635
- profiles: {
636
- "os-beta": {
637
- provider: "fireworks",
638
- model: "accounts/fireworks/models/glm-5p2",
639
- source: "managed",
640
- },
641
- },
642
- },
643
- });
644
- await expect(
645
- patchRoute.handler({
646
- body: { llm: { profiles: { "os-beta": null } } },
647
- }),
648
- ).rejects.toThrow('Cannot delete cloud profile "os-beta".');
649
- });
650
-
651
- test("rejects nulling the entire profiles map", async () => {
652
- await expect(
653
- patchRoute.handler({
654
- body: { llm: { profiles: null } },
655
- }),
656
- ).rejects.toThrow("Cannot null llm.profiles");
657
- });
658
594
  });
659
595
 
660
596
  // ---------------------------------------------------------------------------
@@ -664,93 +600,10 @@ describe("PATCH /v1/config — cloud profile deletion guard", () => {
664
600
  // os-beta) is read-only to every config-write route while its on-disk entry
665
601
  // is managed-source; the only writable transition is re-enabling a disabled
666
602
  // profile. A user-owned entry sharing a cloud name is not locked. Enforced
667
- // by `assertInvariantProfilesPreserved` at the commitConfigWrite choke
668
603
  // point, so PATCH, SET, and PUT are all covered by the same checks.
669
604
  // ---------------------------------------------------------------------------
670
605
 
671
606
  describe("cloud-profile invariant guard — rejected writes", () => {
672
- test("PATCH disabling balanced is rejected (active → disabled)", async () => {
673
- await expect(
674
- patchRoute.handler({
675
- body: { llm: { profiles: { balanced: { status: "disabled" } } } },
676
- }),
677
- ).rejects.toThrow('Cannot disable cloud profile "balanced".');
678
- expectNothingCommitted();
679
- });
680
-
681
- test("PATCH setting a label on balanced is rejected", async () => {
682
- await expect(
683
- patchRoute.handler({
684
- body: { llm: { profiles: { balanced: { label: "X" } } } },
685
- }),
686
- ).rejects.toThrow(
687
- 'Cannot edit cloud profile "balanced" fields [label]. ' +
688
- "Cloud profiles are read-only; duplicate to a custom profile to customize.",
689
- );
690
- expectNothingCommitted();
691
- });
692
-
693
- test("PATCH { label: null } on balanced is rejected when a label exists", async () => {
694
- (rawConfig as Record<string, any>).llm.profiles.balanced.label = "Balanced";
695
- seedRawConfig(rawConfig);
696
- await expect(
697
- patchRoute.handler({
698
- body: { llm: { profiles: { balanced: { label: null } } } },
699
- }),
700
- ).rejects.toThrow('Cannot edit cloud profile "balanced" fields [label]');
701
- expectNothingCommitted();
702
- });
703
-
704
- test("PATCH { topP: 0.8 } on balanced is rejected", async () => {
705
- await expect(
706
- patchRoute.handler({
707
- body: { llm: { profiles: { balanced: { topP: 0.8 } } } },
708
- }),
709
- ).rejects.toThrow('Cannot edit cloud profile "balanced" fields [topP]');
710
- expectNothingCommitted();
711
- });
712
-
713
- test("PATCH { topP: null } on balanced is rejected when an on-disk override exists", async () => {
714
- (rawConfig as Record<string, any>).llm.profiles.balanced.topP = 0.7;
715
- seedRawConfig(rawConfig);
716
- await expect(
717
- patchRoute.handler({
718
- body: { llm: { profiles: { balanced: { topP: null } } } },
719
- }),
720
- ).rejects.toThrow('Cannot edit cloud profile "balanced" fields [topP]');
721
- expectNothingCommitted();
722
- });
723
-
724
- test("PATCH disabling a cloud-source os-beta is rejected (active → disabled)", async () => {
725
- (rawConfig as Record<string, any>).llm.profiles["os-beta"] = {
726
- provider: "together",
727
- model: "zai-org/GLM-5.2",
728
- source: "managed",
729
- };
730
- seedRawConfig(rawConfig);
731
- await expect(
732
- patchRoute.handler({
733
- body: { llm: { profiles: { "os-beta": { status: "disabled" } } } },
734
- }),
735
- ).rejects.toThrow('Cannot disable cloud profile "os-beta".');
736
- expectNothingCommitted();
737
- });
738
-
739
- test("SET llm.profiles.os-beta.label is rejected on a cloud-source entry", async () => {
740
- (rawConfig as Record<string, any>).llm.profiles["os-beta"] = {
741
- provider: "together",
742
- model: "zai-org/GLM-5.2",
743
- source: "managed",
744
- };
745
- seedRawConfig(rawConfig);
746
- await expect(
747
- setRoute.handler({
748
- body: { path: "llm.profiles.os-beta.label", value: "My OS Beta" },
749
- }),
750
- ).rejects.toThrow('Cannot edit cloud profile "os-beta" fields [label]');
751
- expectNothingCommitted();
752
- });
753
-
754
607
  test("PATCH overwriting balanced with a string is rejected", async () => {
755
608
  await expect(
756
609
  patchRoute.handler({
@@ -785,22 +638,6 @@ describe("cloud-profile invariant guard — rejected writes", () => {
785
638
  expectNothingCommitted();
786
639
  });
787
640
 
788
- test("SET llm.profiles.balanced.status = 'disabled' is rejected", async () => {
789
- await expect(
790
- setRoute.handler({
791
- body: { path: "llm.profiles.balanced.status", value: "disabled" },
792
- }),
793
- ).rejects.toThrow('Cannot disable cloud profile "balanced".');
794
- expectNothingCommitted();
795
- });
796
-
797
- test("SET llm = {} is rejected (would drop all defaults)", async () => {
798
- await expect(
799
- setRoute.handler({ body: { path: "llm", value: {} } }),
800
- ).rejects.toThrow(/Cannot delete or replace cloud profile/);
801
- expectNothingCommitted();
802
- });
803
-
804
641
  test("PATCH { status: 'weird' } on balanced is rejected (junk status)", async () => {
805
642
  await expect(
806
643
  patchRoute.handler({
@@ -905,8 +742,7 @@ describe("default-profile invariant guard — allowed writes", () => {
905
742
  test("PUT full edits on a user-sourced os-beta entry are allowed (invariance is source-gated)", async () => {
906
743
  (rawConfig as Record<string, any>).llm.profiles["os-beta"] = {
907
744
  provider: "anthropic",
908
- model: "claude-sonnet",
909
- source: "user",
745
+ model: "claude-sonnet-4-6",
910
746
  };
911
747
  seedRawConfig(rawConfig);
912
748
  const result = await replaceRoute.handler({
@@ -997,8 +833,8 @@ describe("wire-only profile keys are stripped from writes", () => {
997
833
  const profile = savedProfile("balanced");
998
834
  expect("invariant" in profile).toBe(false);
999
835
  expect("supportsVision" in profile).toBe(false);
1000
- expect(profile.provider).toBe("anthropic");
1001
- expect(profile.model).toBe("claude-sonnet");
836
+ expect(profile.provider).toBe("cadet");
837
+ expect(profile.model).toBe("claude-sonnet-4-6");
1002
838
  });
1003
839
 
1004
840
  test("SET of a wire-only leaf path never persists the key", async () => {
@@ -1035,8 +871,8 @@ describe("wire-only profile keys are stripped from writes", () => {
1035
871
  expect(profile.status).toBe("active");
1036
872
  expect("supportsVision" in profile).toBe(false);
1037
873
  expect("invariant" in profile).toBe(false);
1038
- expect(profile.provider).toBe("anthropic");
1039
- expect(profile.model).toBe("claude-sonnet");
874
+ expect(profile.provider).toBe("cadet");
875
+ expect(profile.model).toBe("claude-sonnet-4-6");
1040
876
  });
1041
877
 
1042
878
  test("pure no-op SET round-trip with stale on-disk supportsVision succeeds", async () => {
@@ -1053,8 +889,8 @@ describe("wire-only profile keys are stripped from writes", () => {
1053
889
  const profile = savedProfile("balanced");
1054
890
  expect("supportsVision" in profile).toBe(false);
1055
891
  expect("invariant" in profile).toBe(false);
1056
- expect(profile.provider).toBe("anthropic");
1057
- expect(profile.model).toBe("claude-sonnet");
892
+ expect(profile.provider).toBe("cadet");
893
+ expect(profile.model).toBe("claude-sonnet-4-6");
1058
894
  });
1059
895
 
1060
896
  test("PATCH re-enable carrying wire keys succeeds when the on-disk entry has stale supportsVision", async () => {
@@ -1108,99 +944,18 @@ describe("wire-only profile keys are stripped from writes", () => {
1108
944
  const getRoute = ROUTES.find((r) => r.operationId === "config_get")!;
1109
945
 
1110
946
  describe("code-owned default profiles — wire view and write normalization", () => {
1111
- test("GET materializes catalog bodies over thin stubs (wire-only)", async () => {
947
+ test("GET serves thin stubs verbatim — materialization lives on the profiles API", async () => {
1112
948
  seedRawConfig({
1113
949
  llm: {
1114
- profiles: { balanced: { source: "managed", status: "disabled" } },
950
+ profiles: { balanced: { status: "disabled" } },
1115
951
  },
1116
952
  });
1117
953
  const response = (await getRoute.handler({})) as Record<string, any>;
1118
954
  const wireBalanced = response.llm.profiles.balanced;
1119
- expect(wireBalanced.model).toBe("accounts/fireworks/models/glm-5p3-flash");
1120
- expect(wireBalanced.provider).toBe("cadet");
1121
- expect(wireBalanced.provider_connection).toBeUndefined();
1122
- expect(wireBalanced.status).toBe("disabled");
1123
- expect(wireBalanced.invariant).toBe(true);
1124
- // Absent defaults are materialized too — the catalog owns their content.
1125
- expect(response.llm.profiles["quality-optimized"].model).toBeDefined();
1126
- });
1127
-
1128
- test("GET → PATCH round-trip of the wire view is accepted and keeps disk stubs thin", async () => {
1129
- seedRawConfig({
1130
- llm: {
1131
- profiles: {
1132
- balanced: { source: "managed", status: "disabled" },
1133
- "my-custom": { provider: "openai", model: "gpt-4o", source: "user" },
1134
- },
1135
- },
1136
- });
1137
- const response = (await getRoute.handler({})) as Record<string, any>;
1138
- const result = await patchRoute.handler({
1139
- body: { llm: { profiles: response.llm.profiles } },
1140
- });
1141
- expect(result).toHaveProperty("llm");
1142
- expectOneCommitCycle();
1143
- expect(savedProfile("balanced")).toEqual({
1144
- source: "managed",
1145
- status: "disabled",
1146
- });
1147
- // Echoes of absent defaults reduce to a no-op managed stub.
1148
- expect(savedProfile("quality-optimized")).toEqual({ source: "managed" });
1149
- expect(savedProfile("my-custom")).toEqual({
1150
- provider: "openai",
1151
- model: "gpt-4o",
1152
- source: "user",
1153
- });
1154
- });
1155
-
1156
- test("creating a new profile under a default name is rejected", async () => {
1157
- seedRawConfig({ llm: { profiles: {} } });
1158
- await expect(
1159
- patchRoute.handler({
1160
- body: {
1161
- llm: {
1162
- profiles: {
1163
- balanced: { source: "user", provider: "openai", model: "gpt-4o" },
1164
- },
1165
- },
1166
- },
1167
- }),
1168
- ).rejects.toThrow(
1169
- 'Cannot create profile "balanced" — the name is reserved for a code-defined default profile.',
1170
- );
1171
- expectNothingCommitted();
1172
- });
1173
-
1174
- test("writing content to an absent default name is rejected", async () => {
1175
- seedRawConfig({ llm: { profiles: {} } });
1176
- await expect(
1177
- patchRoute.handler({
1178
- body: {
1179
- llm: {
1180
- profiles: {
1181
- "cost-optimized": { source: "managed", model: "gpt-4o" },
1182
- },
1183
- },
1184
- },
1185
- }),
1186
- ).rejects.toThrow(
1187
- 'Cannot edit cloud profile "cost-optimized" fields [model].',
1188
- );
1189
- expectNothingCommitted();
1190
- });
1191
-
1192
- test("disabling an absent default via a generic write is rejected", async () => {
1193
- seedRawConfig({ llm: { profiles: {} } });
1194
- await expect(
1195
- patchRoute.handler({
1196
- body: {
1197
- llm: {
1198
- profiles: { balanced: { source: "managed", status: "disabled" } },
1199
- },
1200
- },
1201
- }),
1202
- ).rejects.toThrow('Cannot disable cloud profile "balanced".');
1203
- expectNothingCommitted();
955
+ expect(wireBalanced).toEqual({ status: "disabled" });
956
+ // Catalog-only defaults (no on-disk stub) do not appear at all — the
957
+ // profiles API's list serves their resolved bodies.
958
+ expect(response.llm.profiles["quality-optimized"]).toBeUndefined();
1204
959
  });
1205
960
 
1206
961
  test("PUT status re-enable on an absent always-available default creates a thin managed stub", async () => {
@@ -1211,7 +966,6 @@ describe("code-owned default profiles — wire view and write normalization", ()
1211
966
  });
1212
967
  expect(result).toEqual({ ok: true });
1213
968
  expect(savedProfile("balanced")).toEqual({
1214
- source: "managed",
1215
969
  status: "active",
1216
970
  });
1217
971
  });
@@ -1251,25 +1005,19 @@ describe("code-owned default profiles — BYO default provider wire view", () =>
1251
1005
  // intent × provider matrix that actually dispatches — not the cadet
1252
1006
  // column — and the write path must echo-strip against that same view or an
1253
1007
  // honest GET → write round-trip is rejected.
1254
- test("GET materializes the default provider's column for default profiles", async () => {
1008
+ test("GET serves no catalog-only defaults — the profiles API materializes the column", async () => {
1255
1009
  seedRawConfig({
1256
1010
  llm: { default: { provider: "anthropic" }, profiles: {} },
1257
1011
  });
1258
1012
  const response = (await getRoute.handler({})) as Record<string, any>;
1259
- const wireBalanced = response.llm.profiles.balanced;
1260
- expect(wireBalanced.provider).toBe("anthropic");
1261
- expect(wireBalanced.model).toBe("claude-sonnet-4-6");
1262
- expect(wireBalanced.provider_connection).toBe("anthropic-personal");
1263
- expect(response.llm.profiles["quality-optimized"].provider).toBe(
1264
- "anthropic",
1265
- );
1013
+ expect(response.llm.profiles).toEqual({});
1266
1014
  });
1267
1015
 
1268
- test("GET → PATCH round-trip of the BYO wire view is accepted and keeps disk stubs thin", async () => {
1016
+ test("GET → PATCH round-trip of the raw profiles is accepted on a BYO install too", async () => {
1269
1017
  seedRawConfig({
1270
1018
  llm: {
1271
1019
  default: { provider: "anthropic" },
1272
- profiles: { balanced: { source: "managed", status: "disabled" } },
1020
+ profiles: { balanced: { status: "disabled" } },
1273
1021
  },
1274
1022
  });
1275
1023
  const response = (await getRoute.handler({})) as Record<string, any>;
@@ -1279,14 +1027,13 @@ describe("code-owned default profiles — BYO default provider wire view", () =>
1279
1027
  expect(result).toHaveProperty("llm");
1280
1028
  expectOneCommitCycle();
1281
1029
  expect(savedProfile("balanced")).toEqual({
1282
- source: "managed",
1283
1030
  status: "disabled",
1284
1031
  });
1285
- // Echoes of absent defaults reduce to a no-op managed stub.
1286
- expect(savedProfile("quality-optimized")).toEqual({ source: "managed" });
1032
+ // No absent-default echoes exist to reduce — nothing else is written.
1033
+ expect(savedProfile("quality-optimized")).toBeUndefined();
1287
1034
  });
1288
1035
 
1289
- test("GET → SET llm round-trip of the BYO wire view is accepted", async () => {
1036
+ test("GET → SET llm round-trip of the raw view is accepted and writes no stubs", async () => {
1290
1037
  seedRawConfig({
1291
1038
  llm: { default: { provider: "anthropic" }, profiles: {} },
1292
1039
  });
@@ -1295,109 +1042,9 @@ describe("code-owned default profiles — BYO default provider wire view", () =>
1295
1042
  body: { path: "llm", value: response.llm },
1296
1043
  });
1297
1044
  expect(result).toHaveProperty("ok");
1298
- expect(savedProfile("balanced")).toEqual({ source: "managed" });
1299
- });
1300
- });
1301
-
1302
- describe("code-owned default profiles — leaf SET source stamping", () => {
1303
- test("a leaf SET creating a cloud entry stamps the cloud marker", async () => {
1304
- seedRawConfig({ llm: { profiles: {} } });
1305
- const result = await setRoute.handler({
1306
- body: { path: "llm.profiles.balanced.status", value: "active" },
1307
- });
1308
- expect(result).toEqual({ ok: true });
1309
- expect(savedProfile("balanced")).toEqual({
1310
- source: "managed",
1311
- status: "active",
1312
- });
1313
- });
1314
-
1315
- test("a leaf SET on an existing user shadow does not stamp it managed", async () => {
1316
- seedRawConfig({
1317
- llm: {
1318
- profiles: {
1319
- balanced: { source: "user", provider: "openai", model: "gpt-4o" },
1320
- },
1321
- },
1322
- });
1323
- const result = await setRoute.handler({
1324
- body: { path: "llm.profiles.balanced.model", value: "gpt-5.4" },
1325
- });
1326
- expect(result).toEqual({ ok: true });
1327
- // Write normalization completes the changed user entry; the guard's
1328
- // concern is only that `source` stays user-owned.
1329
- expect(savedProfile("balanced")).toMatchObject({
1330
- source: "user",
1331
- provider: "openai",
1332
- model: "gpt-5.4",
1333
- });
1334
- expect(savedProfile("balanced").source).toBe("user");
1335
- });
1336
-
1337
- test("a leaf SET writing content to an absent default is rejected", async () => {
1338
- seedRawConfig({ llm: { profiles: {} } });
1339
- await expect(
1340
- setRoute.handler({
1341
- body: { path: "llm.profiles.balanced.model", value: "gpt-4o" },
1342
- }),
1343
- ).rejects.toThrow(BadRequestError);
1344
- expectNothingCommitted();
1345
- });
1346
- });
1347
-
1348
- describe("code-owned default profiles — echoes over stale on-disk bodies", () => {
1349
- // An overlay can persist a cloud entry whose content differs from the
1350
- // catalog; GET serves catalog content, so a client echo carries values
1351
- // that match neither nothing — they match the wire view. The round-trip
1352
- // must still be a no-op.
1353
- const staleBody = {
1354
- source: "managed",
1355
- provider: "anthropic",
1356
- model: "claude-sonnet",
1357
- maxTokens: 16000,
1358
- };
1359
-
1360
- test("GET → PATCH round-trip over a stale managed body is accepted and changes nothing", async () => {
1361
- seedRawConfig({
1362
- llm: { profiles: { balanced: structuredClone(staleBody) } },
1363
- });
1364
- const response = (await getRoute.handler({})) as Record<string, any>;
1365
- // The wire view serves catalog content, not the stale body.
1366
- expect(response.llm.profiles.balanced.model).toBe(
1367
- "accounts/fireworks/models/glm-5p3-flash",
1368
- );
1369
- const result = await patchRoute.handler({
1370
- body: { llm: { profiles: response.llm.profiles } },
1371
- });
1372
- expect(result).toHaveProperty("llm");
1373
- expectOneCommitCycle();
1374
- expect(savedProfile("balanced")).toEqual(staleBody);
1375
- });
1376
-
1377
- test("GET → SET llm round-trip over a stale managed body is accepted and changes nothing", async () => {
1378
- seedRawConfig({
1379
- llm: { profiles: { balanced: structuredClone(staleBody) } },
1380
- });
1381
- const response = (await getRoute.handler({})) as Record<string, any>;
1382
- const result = await setRoute.handler({
1383
- body: { path: "llm.profiles", value: response.llm.profiles },
1384
- });
1385
- expect(result).toEqual({ ok: true });
1386
- expect(savedProfile("balanced")).toEqual(staleBody);
1387
- });
1388
-
1389
- test("a genuine content edit over a stale managed body is still rejected", async () => {
1390
- seedRawConfig({
1391
- llm: { profiles: { balanced: structuredClone(staleBody) } },
1392
- });
1393
- await expect(
1394
- patchRoute.handler({
1395
- body: {
1396
- llm: { profiles: { balanced: { model: "some-other-model" } } },
1397
- },
1398
- }),
1399
- ).rejects.toThrow(BadRequestError);
1400
- expectNothingCommitted();
1045
+ // The raw response carries no materialized catalog bodies, so the
1046
+ // catalog-only default stays catalog-only.
1047
+ expect(savedProfile("balanced")).toBeUndefined();
1401
1048
  });
1402
1049
  });
1403
1050
 
@@ -37,8 +37,8 @@ import { setConfig } from "./helpers/set-config.js";
37
37
  setConfig("llm", {
38
38
  profiles: {
39
39
  // Disable the catalog default so resolution lands on llm.default.
40
- balanced: { source: "managed", status: "disabled" },
41
- "cost-optimized": { source: "managed", status: "disabled" },
40
+ balanced: { source: "cloud", status: "disabled" },
41
+ "cost-optimized": { source: "cloud", status: "disabled" },
42
42
  },
43
43
  callSites: {
44
44
  // This file's blanket assistant-feature-flags mock forces the