@mycadet/assistant 0.12.9 → 0.12.11

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 (658) hide show
  1. package/Dockerfile +0 -8
  2. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
  3. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  4. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  5. package/node_modules/@mycadet/ces-client/src/http-credentials.ts +18 -1
  6. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  7. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  8. package/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  9. package/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  10. package/openapi.yaml +62 -910
  11. package/package.json +3 -7
  12. package/scripts/build-test-fixtures.ts +1 -1
  13. package/scripts/generate-openapi.ts +22 -6
  14. package/scripts/postinstall.ts +4 -10
  15. package/scripts/run-tests.ts +0 -21
  16. package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
  17. package/src/__tests__/agent-loop.test.ts +0 -76
  18. package/src/__tests__/anthropic-provider.test.ts +6 -6
  19. package/src/__tests__/assert-not-live-db.ts +1 -1
  20. package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
  21. package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
  22. package/src/__tests__/attachments-store.test.ts +1 -1
  23. package/src/__tests__/audit-log-rotation.test.ts +1 -1
  24. package/src/__tests__/btw-routes.test.ts +1 -1
  25. package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
  26. package/src/__tests__/call-conversation-messages.test.ts +0 -5
  27. package/src/__tests__/call-recovery.test.ts +2 -7
  28. package/src/__tests__/call-routes-http.test.ts +0 -12
  29. package/src/__tests__/call-store.test.ts +2 -7
  30. package/src/__tests__/catalog-files.test.ts +7 -5
  31. package/src/__tests__/checker.test.ts +1 -1
  32. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
  33. package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
  34. package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
  35. package/src/__tests__/cloud-profile-guard.test.ts +87 -404
  36. package/src/__tests__/compaction-events.test.ts +2 -2
  37. package/src/__tests__/config-loader-backfill.test.ts +74 -163
  38. package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
  39. package/src/__tests__/config-loader-corrupt.test.ts +10 -10
  40. package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
  41. package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
  42. package/src/__tests__/config-schema.test.ts +26 -27
  43. package/src/__tests__/config-set-route.test.ts +2 -6
  44. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
  45. package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
  46. package/src/__tests__/conversation-agent-loop.test.ts +2 -58
  47. package/src/__tests__/conversation-clear-safety.test.ts +0 -30
  48. package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
  49. package/src/__tests__/conversation-queue.test.ts +1 -1
  50. package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
  51. package/src/__tests__/conversation-skill-tools.test.ts +4 -444
  52. package/src/__tests__/conversation-slash-commands.test.ts +1 -1
  53. package/src/__tests__/conversation-store.test.ts +1 -84
  54. package/src/__tests__/conversation-surface-state.test.ts +0 -16
  55. package/src/__tests__/credential-health-service.test.ts +14 -1
  56. package/src/__tests__/credential-record-retire.test.ts +1 -1
  57. package/src/__tests__/credential-record-write-through.test.ts +1 -1
  58. package/src/__tests__/credential-security-invariants.test.ts +0 -145
  59. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  60. package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
  61. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  62. package/src/__tests__/dictation-profile-store.test.ts +6 -6
  63. package/src/__tests__/disk-usage.test.ts +28 -164
  64. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
  65. package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
  66. package/src/__tests__/emit-event-signal.test.ts +1 -1
  67. package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
  68. package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
  69. package/src/__tests__/guardian-dispatch.test.ts +0 -13
  70. package/src/__tests__/helpers/seed-app.ts +1 -1
  71. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
  72. package/src/__tests__/host-shell-tool.test.ts +1 -1
  73. package/src/__tests__/identity-routes.test.ts +1 -1
  74. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  75. package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
  76. package/src/__tests__/injector-chain.test.ts +1 -1
  77. package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
  78. package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
  79. package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
  80. package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
  81. package/src/__tests__/list-all-apps.test.ts +1 -1
  82. package/src/__tests__/live-workspace-guard.test.ts +2 -2
  83. package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
  84. package/src/__tests__/llm-resolver.test.ts +7 -7
  85. package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
  86. package/src/__tests__/llm-usage-store.test.ts +0 -495
  87. package/src/__tests__/log-export-routes.test.ts +1 -1
  88. package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
  89. package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
  90. package/src/__tests__/memory-config-file-parity.test.ts +1 -1
  91. package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
  92. package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
  93. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  94. package/src/__tests__/onboarding-persona-write.test.ts +1 -1
  95. package/src/__tests__/openai-provider.test.ts +8 -8
  96. package/src/__tests__/path-policy.test.ts +1 -1
  97. package/src/__tests__/persona-resolver.test.ts +1 -1
  98. package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
  99. package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
  100. package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
  101. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
  102. package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
  103. package/src/__tests__/provider-connections-backfill.test.ts +10 -10
  104. package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
  105. package/src/__tests__/resolve-app.test.ts +1 -1
  106. package/src/__tests__/run-due-schedules.test.ts +1 -1
  107. package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
  108. package/src/__tests__/schedule-routes.test.ts +1 -1
  109. package/src/__tests__/schedule-store.test.ts +1 -1
  110. package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
  111. package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
  112. package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
  113. package/src/__tests__/tool-approval-handler.test.ts +1 -1
  114. package/src/__tests__/tool-audit.test.ts +5 -235
  115. package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
  116. package/src/__tests__/tools-get-route.test.ts +1 -1
  117. package/src/__tests__/turn-outcome-read.test.ts +1 -1
  118. package/src/__tests__/twilio-routes.test.ts +0 -1
  119. package/src/__tests__/usage-attribution.test.ts +0 -31
  120. package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
  121. package/src/__tests__/visible-app-context.test.ts +1 -1
  122. package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
  123. package/src/__tests__/workspace-git-service.test.ts +1 -1
  124. package/src/__tests__/workspace-greetings.test.ts +1 -1
  125. package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
  126. package/src/activation/progress-store.ts +1 -1
  127. package/src/activation/turn-hooks.ts +1 -1
  128. package/src/agent/loop.ts +0 -51
  129. package/src/apps/app-store.ts +1 -1
  130. package/src/avatar/__tests__/avatar-store.test.ts +2 -172
  131. package/src/avatar/accent-backfill.ts +1 -1
  132. package/src/avatar/avatar-manifest.ts +1 -1
  133. package/src/avatar/avatar-store.ts +10 -69
  134. package/src/avatar/ensure-raster.ts +1 -1
  135. package/src/avatar/identity-avatar.ts +1 -1
  136. package/src/avatar/sync-avatar.ts +1 -1
  137. package/src/avatar/traits-png-sync.ts +1 -1
  138. package/src/bundler/compiler-tools.ts +1 -1
  139. package/src/bundler/package-resolver.ts +1 -1
  140. package/src/calls/__tests__/call-controller.test.ts +25 -27
  141. package/src/calls/active-call-lease.ts +1 -1
  142. package/src/calls/call-controller.ts +3 -3
  143. package/src/calls/call-domain.ts +4 -8
  144. package/src/calls/call-store.ts +2 -76
  145. package/src/calls/resolve-call-tts-provider.ts +3 -3
  146. package/src/calls/twilio-config.ts +3 -3
  147. package/src/calls/twilio-rest.ts +2 -2
  148. package/src/calls/voice-ingress-preflight.ts +2 -2
  149. package/src/cli/bundled-modules.ts +0 -2
  150. package/src/cli/commands/__tests__/apps.test.ts +1 -1
  151. package/src/cli/commands/__tests__/plugins.test.ts +9 -66
  152. package/src/cli/commands/__tests__/ps.test.ts +67 -0
  153. package/src/cli/commands/auth.help.ts +2 -2
  154. package/src/cli/commands/avatar.ts +1 -1
  155. package/src/cli/commands/changelog.ts +1 -1
  156. package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
  157. package/src/cli/commands/cloud/index.help.ts +1 -1
  158. package/src/cli/commands/cloud/index.ts +2 -2
  159. package/src/cli/commands/db/refresh.ts +1 -1
  160. package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
  161. package/src/cli/commands/db/repair.ts +1 -1
  162. package/src/cli/commands/db/status.ts +1 -1
  163. package/src/cli/commands/inference-profiles.ts +1 -12
  164. package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
  165. package/src/cli/commands/memory/index.help.ts +1 -43
  166. package/src/cli/commands/memory/memory-v3.ts +0 -64
  167. package/src/cli/commands/plugins.ts +54 -205
  168. package/src/cli/commands/ps.ts +5 -2
  169. package/src/cli/commands/status.ts +1 -1
  170. package/src/cli/index.help.ts +0 -2
  171. package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
  172. package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
  173. package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
  174. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
  175. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
  176. package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
  177. package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
  178. package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
  179. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
  180. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
  181. package/src/cli/lib/diff-plugin.ts +1 -1
  182. package/src/cli/lib/inspect-plugin.ts +13 -97
  183. package/src/cli/lib/install-from-cloud.ts +1 -1
  184. package/src/cli/lib/install-from-github.ts +75 -154
  185. package/src/cli/lib/install-plugin-dependencies.ts +1 -1
  186. package/src/cli/lib/list-installed-plugins.ts +1 -1
  187. package/src/cli/lib/open-browser.ts +1 -1
  188. package/src/cli/lib/plugin-catalog-cache.ts +8 -51
  189. package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
  190. package/src/cli/lib/plugin-details.ts +5 -27
  191. package/src/cli/lib/plugin-marketplace.ts +18 -266
  192. package/src/cli/lib/search-plugins.ts +23 -43
  193. package/src/cli/lib/toggle-plugin.ts +1 -1
  194. package/src/cli/lib/uninstall-plugin.ts +1 -1
  195. package/src/cli/lib/upgrade-plugin.ts +3 -49
  196. package/src/cli/program.ts +1 -3
  197. package/src/cli.ts +1 -1
  198. package/src/cloud/client.ts +0 -6
  199. package/src/cloud/consent-cache.test.ts +22 -201
  200. package/src/cloud/consent-cache.ts +16 -111
  201. package/src/cloud/sync-identity.ts +1 -1
  202. package/src/config/__tests__/chat-settings.test.ts +1 -1
  203. package/src/config/__tests__/cloud-identity.test.ts +15 -2
  204. package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
  205. package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
  206. package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
  207. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
  208. package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
  209. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
  210. package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
  211. package/src/config/__tests__/profile-materialization.test.ts +2 -4
  212. package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
  213. package/src/config/acp-agent-write.ts +1 -1
  214. package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
  215. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  216. package/src/config/call-site-defaults.ts +0 -6
  217. package/src/config/cloud-identity.ts +12 -5
  218. package/src/config/composer-preferences.ts +1 -1
  219. package/src/config/default-profile-catalog.ts +8 -75
  220. package/src/config/default-profile-names.ts +2 -25
  221. package/src/config/env-registry.ts +1 -14
  222. package/src/config/env.ts +8 -6
  223. package/src/config/llm-resolver.ts +1 -2
  224. package/src/config/loader.ts +13 -17
  225. package/src/config/profile-materialization.ts +1 -1
  226. package/src/config/schema.ts +1 -7
  227. package/src/config/schemas/call-site-catalog.ts +0 -7
  228. package/src/config/schemas/llm.ts +25 -32
  229. package/src/config/seed-inference-profiles.ts +16 -17
  230. package/src/config/skills.ts +2 -2
  231. package/src/config/sync-gated-profiles.ts +6 -24
  232. package/src/credential-health/credential-health-service.ts +10 -3
  233. package/src/daemon/approval-generators.ts +3 -3
  234. package/src/daemon/config-watcher.ts +2 -2
  235. package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
  236. package/src/daemon/conversation-agent-loop.ts +6 -97
  237. package/src/daemon/conversation-process.ts +1 -1
  238. package/src/daemon/conversation-skill-tools.ts +4 -72
  239. package/src/daemon/conversation-store.ts +1 -1
  240. package/src/daemon/conversation-surface-state.ts +0 -33
  241. package/src/daemon/conversation-surfaces.ts +1 -86
  242. package/src/daemon/conversation-tool-setup.test.ts +1 -1
  243. package/src/daemon/conversation-tool-setup.ts +0 -23
  244. package/src/daemon/conversation.ts +3 -5
  245. package/src/daemon/daemon-control.ts +3 -3
  246. package/src/daemon/dictation-profile-store.ts +3 -3
  247. package/src/daemon/event-loop-watchdog.test.ts +2 -198
  248. package/src/daemon/event-loop-watchdog.ts +0 -185
  249. package/src/daemon/external-plugins-bootstrap.ts +1 -1
  250. package/src/daemon/first-greeting.ts +1 -1
  251. package/src/daemon/handlers/skills.ts +1 -1
  252. package/src/daemon/host-app-control-proxy.ts +1 -1
  253. package/src/daemon/host-cu-proxy.ts +2 -2
  254. package/src/daemon/identity-helpers.ts +1 -1
  255. package/src/daemon/lifecycle.ts +11 -15
  256. package/src/daemon/main.ts +1 -1
  257. package/src/daemon/now-scratchpad.ts +1 -1
  258. package/src/daemon/process-message.ts +4 -4
  259. package/src/daemon/profiler-run-store.ts +2 -2
  260. package/src/daemon/providers-setup.ts +2 -2
  261. package/src/daemon/shutdown-handlers.ts +0 -10
  262. package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
  263. package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
  264. package/src/daemon/tool-side-effects.ts +1 -1
  265. package/src/desktop/desktop-session-manager.ts +1 -1
  266. package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
  267. package/src/heartbeat/heartbeat-service.ts +1 -1
  268. package/src/home/feed-writer.ts +1 -1
  269. package/src/home/home-greeting-cache.ts +1 -1
  270. package/src/home/relationship-state-writer.ts +2 -2
  271. package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
  272. package/src/hooks/hook-loader.ts +2 -2
  273. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  274. package/src/inbound/oauth-callback-url.ts +3 -3
  275. package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
  276. package/src/ipc/socket-path.ts +1 -1
  277. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
  278. package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
  279. package/src/live-voice/live-voice-session.ts +3 -66
  280. package/src/mcp/__tests__/effective-config.test.ts +1 -1
  281. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
  282. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
  283. package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
  284. package/src/mcp/__tests__/reload-signal.test.ts +1 -1
  285. package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
  286. package/src/mcp/reload-signal.ts +1 -1
  287. package/src/mcp/workspace-mcp-config.ts +1 -23
  288. package/src/messaging/draft-store.ts +1 -1
  289. package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
  290. package/src/monitoring/__tests__/page-cache.test.ts +1 -1
  291. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  292. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
  293. package/src/monitoring/active-conversations.ts +1 -1
  294. package/src/monitoring/control.ts +1 -1
  295. package/src/monitoring/daemon-boot-time.ts +1 -1
  296. package/src/monitoring/daemon-heartbeat.ts +1 -1
  297. package/src/monitoring/page-cache.ts +1 -1
  298. package/src/monitoring/plugin-auto-update.ts +1 -7
  299. package/src/monitoring/plugin-source-watch.ts +1 -1
  300. package/src/monitoring/recovery/db.ts +1 -1
  301. package/src/monitoring/recovery/inflight-content.ts +1 -1
  302. package/src/monitoring/resource-sampler.ts +3 -14
  303. package/src/monitoring/stall-capture.ts +1 -1
  304. package/src/monitoring/worker.ts +9 -76
  305. package/src/monitoring/workspace-git-heartbeat.ts +1 -1
  306. package/src/oauth/connect-orchestrator.ts +4 -4
  307. package/src/permissions/checker.ts +1 -1
  308. package/src/permissions/workspace-policy.ts +1 -1
  309. package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
  310. package/src/persistence/__tests__/message-content-file.test.ts +1 -1
  311. package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
  312. package/src/persistence/attachments-store.ts +1 -1
  313. package/src/persistence/conversation-crud.ts +1 -38
  314. package/src/persistence/conversation-directories.ts +1 -1
  315. package/src/persistence/conversation-types.ts +0 -8
  316. package/src/persistence/db-async-query.ts +1 -1
  317. package/src/persistence/db-connection.ts +11 -1
  318. package/src/persistence/db-init.ts +1 -1
  319. package/src/persistence/db-maintenance.ts +1 -1
  320. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
  321. package/src/persistence/embeddings/embedding-local.ts +4 -4
  322. package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
  323. package/src/persistence/embeddings/qdrant-client.ts +1 -1
  324. package/src/persistence/embeddings/qdrant-manager.ts +1 -1
  325. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
  326. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
  327. package/src/persistence/job-handlers/cleanup.ts +8 -17
  328. package/src/persistence/llm-usage-store.ts +2 -229
  329. package/src/persistence/message-content-file.ts +1 -1
  330. package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
  331. package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
  332. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  333. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  334. package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
  335. package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
  336. package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
  337. package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
  338. package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
  339. package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
  340. package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
  341. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
  342. package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
  343. package/src/persistence/migrations/helpers/relocation.ts +1 -1
  344. package/src/persistence/migrations/run-migrations.ts +1 -1
  345. package/src/persistence/migrations/validate-migration-state.ts +1 -1
  346. package/src/persistence/raw-query.ts +1 -29
  347. package/src/persistence/slow-sync-log.ts +0 -23
  348. package/src/persistence/steps.ts +2 -0
  349. package/src/{telemetry → persistence}/tool-audit.ts +6 -121
  350. package/src/plugin-api/index.ts +1 -1
  351. package/src/plugin-api/plugin-name-env.ts +1 -1
  352. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
  353. package/src/plugins/collect-source-versions.ts +1 -1
  354. package/src/plugins/defaults/channel/package.json +1 -1
  355. package/src/plugins/defaults/cloud-hosted/package.json +1 -1
  356. package/src/plugins/defaults/compaction/package.json +1 -1
  357. package/src/plugins/defaults/documents/package.json +1 -1
  358. package/src/plugins/defaults/empty-response/package.json +1 -1
  359. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  360. package/src/plugins/defaults/image-fallback/package.json +1 -1
  361. package/src/plugins/defaults/image-recovery/package.json +1 -1
  362. package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
  363. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
  364. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
  365. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
  366. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
  367. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
  368. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
  369. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
  370. package/src/plugins/defaults/memory/package.json +1 -1
  371. package/src/plugins/defaults/memory/paths.ts +4 -4
  372. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  373. package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
  374. package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
  375. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  376. package/src/plugins/defaults/memory/startup.ts +1 -22
  377. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
  378. package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
  379. package/src/plugins/defaults/memory/worker-control.ts +1 -1
  380. package/src/plugins/defaults/memory/worker.ts +2 -2
  381. package/src/plugins/defaults/session/package.json +1 -1
  382. package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
  383. package/src/plugins/defaults/task-progress/package.json +1 -1
  384. package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
  385. package/src/plugins/defaults/title-generate/package.json +1 -1
  386. package/src/plugins/defaults/tool-error/package.json +1 -1
  387. package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
  388. package/src/plugins/defaults/turn-context/package.json +1 -1
  389. package/src/plugins/defaults/workspace/injectors.ts +1 -1
  390. package/src/plugins/defaults/workspace/package.json +1 -1
  391. package/src/plugins/disabled-state.ts +1 -1
  392. package/src/plugins/ensure-plugin-api-shim.ts +1 -1
  393. package/src/plugins/ensure-shared-dep-links.ts +1 -1
  394. package/src/plugins/installed-plugin-dirs.ts +1 -1
  395. package/src/plugins/mcp-servers.ts +7 -9
  396. package/src/plugins/mtime-cache.ts +2 -2
  397. package/src/plugins/source-versions.ts +1 -1
  398. package/src/prompts/bootstrap-cleanup.ts +1 -1
  399. package/src/prompts/persona-resolver.ts +1 -1
  400. package/src/prompts/sections.ts +2 -2
  401. package/src/prompts/system-prompt.ts +10 -42
  402. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
  403. package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
  404. package/src/providers/cadet/client.ts +1 -1
  405. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
  406. package/src/providers/inference/adapter-factory.ts +1 -1
  407. package/src/providers/inference/backfill.ts +3 -10
  408. package/src/providers/inference/profile-probe.ts +1 -1
  409. package/src/providers/retry.ts +0 -2
  410. package/src/providers/types.ts +0 -7
  411. package/src/providers/usage-tracking.ts +1 -1
  412. package/src/routes/__tests__/route-host.test.ts +1 -1
  413. package/src/routes/control.ts +1 -1
  414. package/src/routes/route-host-client.ts +1 -1
  415. package/src/routes/worker.ts +2 -2
  416. package/src/runtime/agent-wake.ts +1 -1
  417. package/src/runtime/assistant-stream-state.ts +1 -1
  418. package/src/runtime/auth/token-service.ts +1 -1
  419. package/src/runtime/background-job-runner.ts +1 -1
  420. package/src/runtime/middleware/twilio-validation.ts +2 -2
  421. package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
  422. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
  423. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
  424. package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
  425. package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
  426. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +72 -298
  427. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
  428. package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
  429. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
  430. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  431. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  432. package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
  433. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
  434. package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
  435. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
  436. package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
  437. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
  438. package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
  439. package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
  440. package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
  441. package/src/runtime/routes/app-management-routes.ts +1 -1
  442. package/src/runtime/routes/attachment-routes.ts +1 -1
  443. package/src/runtime/routes/audit-routes.ts +1 -1
  444. package/src/runtime/routes/avatar-routes.ts +3 -10
  445. package/src/runtime/routes/cloud-routes.ts +3 -3
  446. package/src/runtime/routes/content-source-routes.ts +1 -1
  447. package/src/runtime/routes/conversation-query-routes.ts +49 -706
  448. package/src/runtime/routes/conversation-routes.ts +1 -38
  449. package/src/runtime/routes/debug-routes.ts +1 -1
  450. package/src/runtime/routes/deprecated-route-context.ts +5 -61
  451. package/src/runtime/routes/heartbeat-routes.ts +1 -1
  452. package/src/runtime/routes/identity-routes.ts +1 -1
  453. package/src/runtime/routes/index.ts +0 -6
  454. package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
  455. package/src/runtime/routes/inference-profiles-routes.ts +48 -21
  456. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
  457. package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
  458. package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
  459. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
  460. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
  461. package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
  462. package/src/runtime/routes/log-export-routes.ts +17 -15
  463. package/src/runtime/routes/migration-rollback-routes.ts +1 -1
  464. package/src/runtime/routes/migration-routes.ts +2 -3
  465. package/src/runtime/routes/monitoring-routes.ts +2 -2
  466. package/src/runtime/routes/oauth-providers.ts +5 -5
  467. package/src/runtime/routes/plugins-routes.ts +38 -163
  468. package/src/runtime/routes/profiler-routes.ts +1 -1
  469. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  470. package/src/runtime/routes/sanity-routes.ts +1 -1
  471. package/src/runtime/routes/schedule-routes.ts +1 -1
  472. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  473. package/src/runtime/routes/settings-routes.ts +1 -1
  474. package/src/runtime/routes/sounds-config-routes.ts +1 -1
  475. package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
  476. package/src/runtime/routes/user-route-dispatcher.ts +1 -3
  477. package/src/runtime/routes/user-route-import.ts +1 -1
  478. package/src/runtime/routes/user-route-resolution.ts +1 -1
  479. package/src/runtime/routes/user-routes-cli.ts +1 -1
  480. package/src/runtime/routes/workspace-commit-routes.ts +1 -1
  481. package/src/runtime/routes/workspace-greetings.ts +1 -1
  482. package/src/runtime/routes/workspace-routes.ts +1 -1
  483. package/src/runtime/routes/workspace-utils.ts +1 -1
  484. package/src/runtime/sync/resource-sync-events.ts +1 -1
  485. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
  486. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
  487. package/src/schedule/plugin-schedule-availability.ts +1 -1
  488. package/src/schedule/plugin-schedule-declarations.ts +1 -1
  489. package/src/schedule/run-script.ts +1 -1
  490. package/src/schedule/scheduler.ts +1 -11
  491. package/src/schedule/worker-control.ts +1 -1
  492. package/src/schedule/worker.ts +3 -3
  493. package/src/security/oauth2.ts +2 -2
  494. package/src/security/secret-allowlist.ts +1 -1
  495. package/src/signals/cancel.ts +1 -1
  496. package/src/signals/conversation-undo.ts +1 -1
  497. package/src/signals/emit-event.ts +1 -1
  498. package/src/signals/event-stream.ts +1 -1
  499. package/src/signals/user-message.ts +1 -1
  500. package/src/skills/catalog-install.ts +2 -1
  501. package/src/skills/clawhub.ts +1 -1
  502. package/src/skills/cloud-store.ts +1 -1
  503. package/src/skills/path-classifier.ts +1 -1
  504. package/src/skills/skill-history.ts +1 -1
  505. package/src/skills/skillssh-registry.ts +1 -1
  506. package/src/skills/uninstall.ts +1 -1
  507. package/src/skills/workspace-skill-md-signature.ts +1 -1
  508. package/src/subagent/manager.ts +1 -1
  509. package/src/theme/workspace-theme.ts +1 -1
  510. package/src/tools/browser/auth-cache.ts +1 -1
  511. package/src/tools/browser/browser-manager.ts +1 -1
  512. package/src/tools/browser/runtime-check.ts +1 -1
  513. package/src/tools/executor.ts +4 -4
  514. package/src/tools/filesystem/write.ts +1 -1
  515. package/src/tools/permission-checker.ts +2 -51
  516. package/src/tools/run-standalone.ts +1 -1
  517. package/src/tools/skills/format-input-schema.ts +1 -1
  518. package/src/tools/skills/load.ts +1 -1
  519. package/src/tools/skills/scaffold-cloud.ts +0 -32
  520. package/src/tools/terminal/safe-env.ts +1 -2
  521. package/src/tools/terminal/sanitized-bash.ts +1 -1
  522. package/src/tools/terminal/shell.ts +1 -1
  523. package/src/tools/tool-approval-handler.ts +4 -1
  524. package/src/tools/workflows/manage-workflows.ts +2 -2
  525. package/src/tools/workflows/run-workflow.test.ts +1 -1
  526. package/src/tools/workspace-tools/loader.ts +1 -1
  527. package/src/tts/synthesis-stream.ts +2 -2
  528. package/src/usage/attribution.ts +1 -11
  529. package/src/util/browser.ts +1 -1
  530. package/src/util/bun-runtime.ts +2 -1
  531. package/src/util/device-id.ts +1 -1
  532. package/src/util/disk-usage.ts +4 -139
  533. package/src/util/layout.ts +3 -3
  534. package/src/util/logger.ts +1 -1
  535. package/src/util/logs-db-path.ts +1 -1
  536. package/src/util/memory-db-path.ts +1 -1
  537. package/src/util/{platform.ts → os.ts} +5 -30
  538. package/src/util/process-tree.ts +19 -0
  539. package/src/util/sqlite3-runtime.ts +1 -1
  540. package/src/util/telemetry-db-path.ts +1 -1
  541. package/src/watcher/__tests__/engine.test.ts +0 -23
  542. package/src/watcher/engine.ts +0 -7
  543. package/src/windows-compiled-cli.ts +0 -4
  544. package/src/windows-compiled-worker-entry.ts +0 -6
  545. package/src/workflows/leaf-runner.test.ts +1 -1
  546. package/src/workflows/leaf-runner.ts +1 -1
  547. package/src/workflows/library.ts +1 -1
  548. package/src/workspace/adaptive-thinking-repair.ts +5 -24
  549. package/src/workspace/byok-default-profile-ensure.ts +24 -26
  550. package/src/workspace/custom-profile-ensure.ts +2 -2
  551. package/src/workspace/git-service.ts +1 -1
  552. package/src/workspace/hatched-date.ts +1 -1
  553. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
  554. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  555. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
  556. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
  557. package/src/workspace/migrations/registry.ts +0 -4
  558. package/src/workspace/turn-commit.ts +1 -1
  559. package/docs/activation-funnel-telemetry.md +0 -324
  560. package/scripts/bundled-plugin-packages.ts +0 -154
  561. package/scripts/generate-bundled-plugin-packages.ts +0 -29
  562. package/src/__tests__/activation-early-marking.test.ts +0 -114
  563. package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
  564. package/src/__tests__/config-get-vision-flag.test.ts +0 -139
  565. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
  566. package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
  567. package/src/__tests__/telemetry-routes.test.ts +0 -182
  568. package/src/__tests__/turn-events-store.test.ts +0 -376
  569. package/src/__tests__/ui-channel-variants.test.ts +0 -53
  570. package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
  571. package/src/avatar/avatar-changed-telemetry.ts +0 -128
  572. package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
  573. package/src/cli/commands/telemetry.help.ts +0 -27
  574. package/src/cli/commands/telemetry.ts +0 -83
  575. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
  576. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
  577. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
  578. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
  579. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
  580. package/src/cli/lib/bundled-marketplace.json +0 -1575
  581. package/src/cli/lib/bundled-plugin-packages.json +0 -827
  582. package/src/cli/lib/bundled-plugin-packages.ts +0 -87
  583. package/src/cli/lib/plugin-catalog-local.ts +0 -94
  584. package/src/cli/lib/plugin-pin-history.ts +0 -276
  585. package/src/cloud/feature-gate.ts +0 -8
  586. package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
  587. package/src/config/cloud-rehydration.ts +0 -35
  588. package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
  589. package/src/daemon/auto-profile-router.ts +0 -428
  590. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
  591. package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
  592. package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
  593. package/src/monitoring/db-integrity-check.ts +0 -163
  594. package/src/monitoring/db-integrity-sample.ts +0 -176
  595. package/src/monitoring/oom-kill-reporter.ts +0 -469
  596. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
  597. package/src/onboarding/onboarding-events-store.ts +0 -296
  598. package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
  599. package/src/persistence/lifecycle-events-store.test.ts +0 -134
  600. package/src/persistence/lifecycle-events-store.ts +0 -110
  601. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
  602. package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
  603. package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
  604. package/src/runtime/routes/auto-profile-routes.ts +0 -83
  605. package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
  606. package/src/runtime/routes/telemetry-routes.ts +0 -274
  607. package/src/security/auth-fallback-events-store.ts +0 -57
  608. package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
  609. package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
  610. package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
  611. package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
  612. package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
  613. package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
  614. package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
  615. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
  616. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
  617. package/src/telemetry/activation-funnel.ts +0 -172
  618. package/src/telemetry/config-setting-events-store.ts +0 -40
  619. package/src/telemetry/config-setting-snapshot.ts +0 -170
  620. package/src/telemetry/flush-checkpoints.ts +0 -70
  621. package/src/telemetry/live-voice-funnel.ts +0 -185
  622. package/src/telemetry/memory-corpus-size.test.ts +0 -120
  623. package/src/telemetry/memory-corpus-size.ts +0 -184
  624. package/src/telemetry/memory-tier-reporter.test.ts +0 -195
  625. package/src/telemetry/memory-tier-reporter.ts +0 -130
  626. package/src/telemetry/phone-call-funnel.ts +0 -144
  627. package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
  628. package/src/telemetry/skill-loaded-events-store.ts +0 -39
  629. package/src/telemetry/telemetry-event-sources.test.ts +0 -223
  630. package/src/telemetry/telemetry-event-sources.ts +0 -597
  631. package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
  632. package/src/telemetry/telemetry-events-outbox.ts +0 -237
  633. package/src/telemetry/telemetry-main-db.ts +0 -48
  634. package/src/telemetry/telemetry-wire-source.json +0 -4
  635. package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
  636. package/src/telemetry/telemetry-wire-validation.ts +0 -162
  637. package/src/telemetry/telemetry-wire.generated.ts +0 -483
  638. package/src/telemetry/tool-executed-events-store.test.ts +0 -210
  639. package/src/telemetry/tool-executed-events-store.ts +0 -102
  640. package/src/telemetry/trace-collection-policy.test.ts +0 -28
  641. package/src/telemetry/trace-collection-policy.ts +0 -30
  642. package/src/telemetry/turn-events-store.ts +0 -216
  643. package/src/telemetry/turn-trace-store.test.ts +0 -884
  644. package/src/telemetry/turn-trace-store.ts +0 -399
  645. package/src/telemetry/types.test.ts +0 -38
  646. package/src/telemetry/types.ts +0 -780
  647. package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
  648. package/src/telemetry/usage-telemetry-reporter.ts +0 -566
  649. package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
  650. package/src/telemetry/watchdog-direct-emit.ts +0 -104
  651. package/src/telemetry/watchdog-events-store.ts +0 -31
  652. package/src/tools/ui-surface/channel-variants.ts +0 -52
  653. package/src/watcher/__tests__/telemetry.test.ts +0 -178
  654. package/src/watcher/telemetry.ts +0 -93
  655. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
  656. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
  657. /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
  658. /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
@@ -10,7 +10,6 @@ import {
10
10
  getEffectiveProfiles,
11
11
  getEffectiveProfilesForProvider,
12
12
  getUserSelectableProfilesForProvider,
13
- MANAGED_PROFILE_TEMPLATES,
14
13
  PROFILE_IMPLS,
15
14
  resolveDefaultProfileForProvider,
16
15
  } from "../default-profile-catalog.js";
@@ -32,11 +31,11 @@ import {
32
31
  type ProfileEntry,
33
32
  } from "../schemas/llm.js";
34
33
 
35
- /** Thin managed-source stubs: a workspace that carries only ownership
36
- * markers for the defaults, no profile content. */
34
+ /** Thin managed stubs: a workspace that carries only the cadet-provider
35
+ * marker for the defaults, no profile content. */
37
36
  function managedStubs(): Record<string, ProfileEntry> {
38
37
  return Object.fromEntries(
39
- DEFAULT_PROFILE_KEYS.map((key) => [key, { source: "managed" as const }]),
38
+ DEFAULT_PROFILE_KEYS.map((key) => [key, { provider: "cadet" as const }]),
40
39
  );
41
40
  }
42
41
 
@@ -48,7 +47,6 @@ describe("getEffectiveProfiles", () => {
48
47
  expect(typeof body.model).toBe("string");
49
48
  expect(body.provider).toBe("cadet");
50
49
  expect(body.provider_connection).toBeUndefined();
51
- expect(body.source).toBe("managed");
52
50
  }
53
51
  });
54
52
 
@@ -80,35 +78,6 @@ describe("getEffectiveProfiles", () => {
80
78
  ).toBeUndefined();
81
79
  });
82
80
 
83
- test("the Auto profile is the cloud Balanced body relabeled, managed-only, and flag-gated", () => {
84
- const auto = CODE_DEFAULT_PROFILE_ENTRIES.auto;
85
- const balanced = CODE_DEFAULT_PROFILE_ENTRIES.balanced;
86
- expect(auto.label).toBe("Auto");
87
- expect(auto.model).toBe(balanced.model);
88
- expect(auto.provider).toBe(balanced.provider);
89
- expect(auto.fallbackProfile).toBeUndefined();
90
- // Not seeded unconditionally: the flag reconcile writes the stub.
91
- expect(Object.keys(MANAGED_PROFILE_TEMPLATES)).not.toContain("auto");
92
- expect(
93
- resolveDefaultProfileForProvider(undefined, "auto", undefined),
94
- ).toBeUndefined();
95
- const stub: Record<string, ProfileEntry> = { auto: { source: "managed" } };
96
- expect(
97
- resolveDefaultProfileForProvider(stub, "auto", undefined)?.model,
98
- ).toBe(balanced.model);
99
- expect(
100
- resolveDefaultProfileForProvider(stub, "auto", {
101
- provider: "anthropic",
102
- provider_connection: "anthropic-personal",
103
- }),
104
- ).toBeUndefined();
105
- expect(
106
- Object.keys(
107
- getConversationProfilesForProvider(LLMSchema.parse({ profiles: stub })),
108
- ),
109
- ).toContain("auto");
110
- });
111
-
112
81
  test("the conversation view drops the cloud Jev profile but keeps it selectable for call sites", () => {
113
82
  expect(
114
83
  Object.keys(getConversationProfilesForProvider(undefined)),
@@ -150,15 +119,14 @@ describe("getEffectiveProfiles", () => {
150
119
  expect(getEffectiveProfile({}, OS_BETA_PROFILE_KEY)).toBeUndefined();
151
120
  });
152
121
 
153
- test("a cloud-source entry resolves to the code body with only label/status/topP from disk", () => {
122
+ test("a cadet-provider entry resolves to the code body with only label/status/topP from disk", () => {
154
123
  const workspace: Record<string, ProfileEntry> = {
155
124
  balanced: {
156
- source: "managed",
125
+ provider: "cadet",
157
126
  label: "Balanced (Managed)",
158
127
  status: "disabled",
159
128
  topP: 0.7,
160
129
  // Stale content drift on disk must lose to the code default body.
161
- provider: "anthropic",
162
130
  model: "claude-sonnet-4-6",
163
131
  maxTokens: 1,
164
132
  },
@@ -180,7 +148,6 @@ describe("getEffectiveProfiles", () => {
180
148
  test("a user-owned profile sharing a default name wins verbatim", () => {
181
149
  const workspace: Record<string, ProfileEntry> = {
182
150
  balanced: {
183
- source: "user",
184
151
  provider: "anthropic",
185
152
  model: "claude-sonnet-4-6",
186
153
  maxTokens: 1000,
@@ -297,9 +264,8 @@ describe("resolver integration", () => {
297
264
  test("a disabled managed default does not divert resolution to the custom-* clone", () => {
298
265
  const llm = LLMSchema.parse({
299
266
  profiles: {
300
- balanced: { source: "managed", status: "disabled" },
267
+ balanced: { provider: "cadet", status: "disabled" },
301
268
  "custom-balanced": {
302
- source: "user",
303
269
  provider: "anthropic",
304
270
  model: "claude-sonnet-4-6",
305
271
  maxTokens: 1000,
@@ -324,7 +290,6 @@ describe("resolver integration", () => {
324
290
  const llm = LLMSchema.parse({
325
291
  profiles: {
326
292
  "latency-optimized": {
327
- source: "user",
328
293
  provider: "anthropic",
329
294
  model: "claude-opus-4-6",
330
295
  provider_connection: "anthropic-personal",
@@ -366,7 +331,6 @@ describe("resolver integration", () => {
366
331
  const llm = LLMSchema.parse({
367
332
  profiles: {
368
333
  [key]: {
369
- source: "user",
370
334
  provider: "anthropic",
371
335
  model: "claude-opus-4-6",
372
336
  provider_connection: "anthropic-personal",
@@ -414,7 +378,7 @@ describe("schema validation", () => {
414
378
  expect(() =>
415
379
  LLMSchema.parse({
416
380
  activeProfile: OS_BETA_PROFILE_KEY,
417
- profiles: { [OS_BETA_PROFILE_KEY]: { source: "managed" } },
381
+ profiles: { [OS_BETA_PROFILE_KEY]: { provider: "cadet" } },
418
382
  }),
419
383
  ).not.toThrow();
420
384
  expect(() =>
@@ -485,7 +449,6 @@ describe("resolveDefaultProfileForProvider", () => {
485
449
  } else {
486
450
  expect(entry?.provider_connection).toBeDefined();
487
451
  }
488
- expect(entry?.source).toBe("managed");
489
452
  }
490
453
  }
491
454
  });
@@ -507,7 +470,6 @@ describe("resolveDefaultProfileForProvider", () => {
507
470
  expect(entry?.provider).toBe("chatgpt");
508
471
  expect(entry?.model).toBe(model);
509
472
  expect(entry?.provider_connection).toBeUndefined();
510
- expect(entry?.source).toBe("managed");
511
473
  }
512
474
  // Budget and Fast both opt fully out of reasoning.
513
475
  expect(effective["cost-optimized"]?.effort).toBe("none");
@@ -526,7 +488,6 @@ describe("resolveDefaultProfileForProvider", () => {
526
488
  // No intent table for `together`: the intent falls back to the
527
489
  // provider's catalog defaultModel.
528
490
  expect(entry?.model).toBe(resolveModelIntent("together", "balanced"));
529
- expect(entry?.source).toBe("managed");
530
491
  });
531
492
 
532
493
  test("maxTokens clamps to the resolved model's catalog output cap", () => {
@@ -599,7 +560,7 @@ describe("resolveDefaultProfileForProvider", () => {
599
560
 
600
561
  test("a user-source workspace entry shadows the provider-resolved default", () => {
601
562
  const workspace: Record<string, ProfileEntry> = {
602
- balanced: { source: "user", provider: "openai", model: "gpt-5.5" },
563
+ balanced: { provider: "openai", model: "gpt-5.5" },
603
564
  };
604
565
  const entry = resolveDefaultProfileForProvider(
605
566
  workspace,
@@ -631,10 +592,10 @@ describe("resolveDefaultProfileForProvider", () => {
631
592
  }
632
593
  });
633
594
 
634
- test("a cloud-source stub contributes only label/status/topP over the provider-resolved body", () => {
595
+ test("a cadet-provider stub contributes only label/status/topP over the provider-resolved body", () => {
635
596
  const workspace: Record<string, ProfileEntry> = {
636
597
  balanced: {
637
- source: "managed",
598
+ provider: "cadet",
638
599
  label: "Balanced (BYOK)",
639
600
  status: "disabled",
640
601
  topP: 0.7,
@@ -664,7 +625,7 @@ describe("resolveDefaultProfileForProvider", () => {
664
625
 
665
626
  test("non-matrix names pass through like getEffectiveProfile", () => {
666
627
  const workspace: Record<string, ProfileEntry> = {
667
- "custom-mine": { source: "user", provider: "openai", model: "gpt-5.4" },
628
+ "custom-mine": { provider: "openai", model: "gpt-5.4" },
668
629
  };
669
630
  expect(
670
631
  resolveDefaultProfileForProvider(
@@ -687,7 +648,7 @@ describe("resolveDefaultProfileForProvider", () => {
687
648
  ),
688
649
  ).toBeUndefined();
689
650
  const workspace: Record<string, ProfileEntry> = {
690
- [OS_BETA_PROFILE_KEY]: { source: "managed" },
651
+ [OS_BETA_PROFILE_KEY]: { provider: "cadet" },
691
652
  };
692
653
  const entry = resolveDefaultProfileForProvider(
693
654
  workspace,
@@ -53,7 +53,7 @@ afterAll(() => {
53
53
  });
54
54
 
55
55
  import { enableMemoryV3LiveForNewWorkspacesMigration } from "../../workspace/migrations/105-enable-memory-v3-live-for-new-workspaces.js";
56
- import { invalidateConfigCache, loadConfig } from "../loader.js";
56
+ import { getConfig, invalidateConfigCache } from "../loader.js";
57
57
 
58
58
  // ---------------------------------------------------------------------------
59
59
  // Helpers
@@ -74,7 +74,7 @@ let originalIsPlatform: string | undefined;
74
74
  // Tests
75
75
  // ---------------------------------------------------------------------------
76
76
 
77
- describe("deployment-context embedding-provider default (via loadConfig)", () => {
77
+ describe("deployment-context embedding-provider default (via getConfig)", () => {
78
78
  beforeEach(() => {
79
79
  ensureTestDir();
80
80
  const resetPaths = [
@@ -109,7 +109,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
109
109
  writeConfig({});
110
110
  process.env.IS_CLOUD = "true";
111
111
 
112
- const config = loadConfig();
112
+ const config = getConfig();
113
113
 
114
114
  // In-memory effective config reflects the cloud intent.
115
115
  expect(config.memory.embeddings.provider).toBe("gemini");
@@ -138,7 +138,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
138
138
  }
139
139
  process.env.IS_CLOUD = "true";
140
140
 
141
- const config = loadConfig();
141
+ const config = getConfig();
142
142
 
143
143
  // In-memory effective config still reflects the cloud intent.
144
144
  expect(config.memory.embeddings.provider).toBe("gemini");
@@ -180,14 +180,14 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
180
180
  // provider leaf absent), the cloud default re-applies in memory rather
181
181
  // than being lost to a persisted "auto" read back as an explicit choice.
182
182
  invalidateConfigCache();
183
- expect(loadConfig().memory.embeddings.provider).toBe("gemini");
183
+ expect(getConfig().memory.embeddings.provider).toBe("gemini");
184
184
  });
185
185
 
186
186
  test("IS_CLOUD='1' also fills provider=gemini in memory", () => {
187
187
  writeConfig({});
188
188
  process.env.IS_CLOUD = "1";
189
189
 
190
- const config = loadConfig();
190
+ const config = getConfig();
191
191
 
192
192
  expect(config.memory.embeddings.provider).toBe("gemini");
193
193
  });
@@ -198,7 +198,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
198
198
  });
199
199
  process.env.IS_CLOUD = "true";
200
200
 
201
- const config = loadConfig();
201
+ const config = getConfig();
202
202
 
203
203
  expect(config.memory.embeddings.provider).toBe("local");
204
204
  expect(config.memory.qdrant.vectorSize).toBe(384);
@@ -214,7 +214,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
214
214
  writeConfig({});
215
215
  delete process.env.IS_CLOUD;
216
216
 
217
- const config = loadConfig();
217
+ const config = getConfig();
218
218
 
219
219
  expect(config.memory.embeddings.provider).toBe("auto");
220
220
  expect(config.memory.qdrant.vectorSize).toBe(384);
@@ -226,7 +226,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
226
226
  }
227
227
  delete process.env.IS_CLOUD;
228
228
 
229
- const config = loadConfig();
229
+ const config = getConfig();
230
230
 
231
231
  // In-memory effective config still carries the full tuning (schema defaults).
232
232
  expect(config.memory.v3.gate.denseThreshold).toBe(0.66);
@@ -253,7 +253,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
253
253
  }
254
254
  delete process.env.IS_CLOUD;
255
255
 
256
- loadConfig();
256
+ getConfig();
257
257
  enableMemoryV3LiveForNewWorkspacesMigration.run(WORKSPACE_DIR, {
258
258
  isNewWorkspace: true,
259
259
  });
@@ -295,7 +295,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
295
295
  `{\n "memory": {\n "v3": {\n "live": true\n }\n },\n "llm": {\n "activeProf`,
296
296
  );
297
297
 
298
- const config = loadConfig();
298
+ const config = getConfig();
299
299
 
300
300
  // The corrupt file was quarantined and the reseeded config carries the
301
301
  // tier forward, both in-memory (this boot runs v3) and on disk
@@ -311,7 +311,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
311
311
  `{\n "memory": {\n "v3": {\n "live": false\n }\n },\n "llm": {\n "activeProf`,
312
312
  );
313
313
 
314
- const config = loadConfig();
314
+ const config = getConfig();
315
315
 
316
316
  // Never carry `false` forward: an absent leaf is the only way to keep
317
317
  // "no decision recorded" representable for migration 105.
@@ -331,7 +331,7 @@ describe("deployment-context embedding-provider default (via loadConfig)", () =>
331
331
  JSON.stringify({ memory: { v3: { live: true } } }, null, 2),
332
332
  );
333
333
 
334
- const config = loadConfig();
334
+ const config = getConfig();
335
335
 
336
336
  expect(config.memory.v3.live).toBe(true);
337
337
  expect(readV3Raw()).toEqual({ live: true });
@@ -32,7 +32,7 @@ afterAll(() => {
32
32
  });
33
33
 
34
34
  import { resolveCallSiteConfig } from "../llm-resolver.js";
35
- import { invalidateConfigCache, loadConfig } from "../loader.js";
35
+ import { getConfig, invalidateConfigCache } from "../loader.js";
36
36
 
37
37
  function writeConfig(obj: unknown): void {
38
38
  writeFileSync(CONFIG_PATH, JSON.stringify(obj, null, 2) + "\n");
@@ -84,7 +84,7 @@ describe("config recovery prunes call-site overrides emptied by a strip", () =>
84
84
  // `{profile:"balanced"}` default — silently resolving to the active profile.
85
85
  writeConfig(baseLlm({ memoryV3SelectL2: { profile: "ghost-profile" } }));
86
86
 
87
- const config = loadConfig();
87
+ const config = getConfig();
88
88
 
89
89
  // The emptied call-site entry must be pruned entirely, not left as `{}`.
90
90
  expect(config.llm.callSites?.memoryV3SelectL2).toBeUndefined();
@@ -105,7 +105,7 @@ describe("config recovery prunes call-site overrides emptied by a strip", () =>
105
105
  }),
106
106
  );
107
107
 
108
- const config = loadConfig();
108
+ const config = getConfig();
109
109
 
110
110
  expect(config.llm.callSites?.memoryV3SelectL2).toBeUndefined();
111
111
  expect(config.llm.callSites?.memoryRouter).toEqual({ profile: "balanced" });
@@ -119,7 +119,7 @@ describe("config recovery prunes call-site overrides emptied by a strip", () =>
119
119
  baseLlm({ memoryV3SelectL2: { profile: "missing", temperature: 0.5 } }),
120
120
  );
121
121
 
122
- const config = loadConfig();
122
+ const config = getConfig();
123
123
 
124
124
  expect(config.llm.callSites?.memoryV3SelectL2).toEqual({
125
125
  temperature: 0.5,
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * The strip-and-reparse cleanup (including sparse-array compaction) repairs
8
8
  * every known real-world config shape, so no config.json fixture reliably
9
- * reaches the ladder through `loadConfig` — the ladder is defense-in-depth
9
+ * reaches the ladder through `getConfig` — the ladder is defense-in-depth
10
10
  * for schema shapes the cleanup does not anticipate. The ladder tests here
11
11
  * therefore drive `_recoverFromInvalidConfigForTests` directly, while the
12
12
  * file-based tests assert the cleanup's healing behavior end-to-end.
@@ -48,9 +48,9 @@ afterAll(() => {
48
48
  import {
49
49
  _recoverFromInvalidConfigForTests,
50
50
  _resetLastKnownGoodConfigForTests,
51
+ getConfig,
51
52
  getConfigReadOnly,
52
53
  invalidateConfigCache,
53
- loadConfig,
54
54
  } from "../loader.js";
55
55
 
56
56
  function writeConfig(obj: unknown): void {
@@ -90,7 +90,7 @@ describe("config recovery ladder for cleanup-resistant invalid config", () => {
90
90
  test("keeps the last-known-good config when recovery runs after a good load", () => {
91
91
  // A valid load captures the last-known-good snapshot for this process.
92
92
  writeConfig({ maxStepsPerSession: 123 });
93
- expect(loadConfig().maxStepsPerSession).toBe(123);
93
+ expect(getConfig().maxStepsPerSession).toBe(123);
94
94
 
95
95
  // Recovery for an irreparable config returns the snapshot — the whole
96
96
  // config is NOT reset to schema defaults (which would be 50).
@@ -123,7 +123,7 @@ describe("config recovery ladder for cleanup-resistant invalid config", () => {
123
123
  // the sibling value is preserved and the recovery ladder is never reached.
124
124
  writeConfig({ maxStepsPerSession: 9999, tools: { exclude: ["keep-me"] } });
125
125
 
126
- const config = loadConfig();
126
+ const config = getConfig();
127
127
 
128
128
  expect(config.maxStepsPerSession).toBe(50);
129
129
  expect(config.tools.exclude).toEqual(["keep-me"]);
@@ -135,14 +135,14 @@ describe("config recovery ladder for cleanup-resistant invalid config", () => {
135
135
  // rung runs, the valid element survives, and sibling sections keep their
136
136
  // values from the file (not from the last-known-good snapshot).
137
137
  writeConfig({ maxStepsPerSession: 42 });
138
- expect(loadConfig().maxStepsPerSession).toBe(42);
138
+ expect(getConfig().maxStepsPerSession).toBe(42);
139
139
 
140
140
  writeConfig({
141
141
  maxStepsPerSession: 123,
142
142
  tools: { exclude: ["valid-tool", 456] },
143
143
  });
144
144
  invalidateConfigCache();
145
- const healed = loadConfig();
145
+ const healed = getConfig();
146
146
 
147
147
  expect(healed.maxStepsPerSession).toBe(123);
148
148
  expect(healed.tools.exclude).toEqual(["valid-tool"]);
@@ -150,7 +150,7 @@ describe("config recovery ladder for cleanup-resistant invalid config", () => {
150
150
 
151
151
  test("invalidateConfigCache does not clear the last-known-good safety net", () => {
152
152
  writeConfig({ maxStepsPerSession: 77 });
153
- expect(loadConfig().maxStepsPerSession).toBe(77);
153
+ expect(getConfig().maxStepsPerSession).toBe(77);
154
154
 
155
155
  // A bare cache invalidation must not drop the safety net.
156
156
  invalidateConfigCache();
@@ -165,7 +165,7 @@ describe("config recovery ladder for cleanup-resistant invalid config", () => {
165
165
 
166
166
  test("getConfigReadOnly returns schema defaults for a top-level `null` config without throwing", () => {
167
167
  // `JSON.parse("null")` is valid JSON, so it reaches validateWithSchema as a
168
- // non-object top-level value. `loadConfig` quarantines non-object files
168
+ // non-object top-level value. `getConfig` quarantines non-object files
169
169
  // before validation, so `getConfigReadOnly` (which validates the parsed
170
170
  // value directly) is the path that exercises the recovery ladder's
171
171
  // non-object guard. It must degrade to schema defaults, not throw on
@@ -193,7 +193,7 @@ describe("config recovery ladder for cleanup-resistant invalid config", () => {
193
193
  // First load with no config.json seeds the file and fills the
194
194
  // deployment-context cloud OAuth service modes in memory; the
195
195
  // last-known-good snapshot is refreshed AFTER that fill.
196
- const seeded = loadConfig();
196
+ const seeded = getConfig();
197
197
  expect(seeded.services["outlook-oauth"].mode).toBe("managed");
198
198
 
199
199
  // Recovery keeps the last-known-good EFFECTIVE config, so the cloud mode
@@ -31,7 +31,7 @@ afterAll(() => {
31
31
  mock.restore();
32
32
  });
33
33
 
34
- import { invalidateConfigCache, loadConfig } from "../loader.js";
34
+ import { getConfig, invalidateConfigCache } from "../loader.js";
35
35
 
36
36
  function writeConfig(obj: unknown): void {
37
37
  writeFileSync(CONFIG_PATH, JSON.stringify(obj, null, 2) + "\n");
@@ -64,7 +64,7 @@ describe("config recovery compacts arrays after stripping invalid elements", ()
64
64
  maxStepsPerSession: 77,
65
65
  });
66
66
 
67
- const config = loadConfig();
67
+ const config = getConfig();
68
68
 
69
69
  expect(config.tools.exclude).toEqual(["tool-a", "tool-b"]);
70
70
  // The rest of the config survives — cleanup succeeded, so recovery never
@@ -77,7 +77,7 @@ describe("config recovery compacts arrays after stripping invalid elements", ()
77
77
  tools: { exclude: [1, "tool-a", 2, "tool-b", 3] },
78
78
  });
79
79
 
80
- const config = loadConfig();
80
+ const config = getConfig();
81
81
 
82
82
  expect(config.tools.exclude).toEqual(["tool-a", "tool-b"]);
83
83
  });
@@ -91,7 +91,7 @@ describe("config recovery compacts arrays after stripping invalid elements", ()
91
91
  maxStepsPerSession: 66,
92
92
  });
93
93
 
94
- const config = loadConfig();
94
+ const config = getConfig();
95
95
 
96
96
  expect(config.tools.exclude).toEqual([]);
97
97
  expect(config.maxStepsPerSession).toBe(66);
@@ -107,7 +107,7 @@ describe("config recovery compacts arrays after stripping invalid elements", ()
107
107
  maxStepsPerSession: 66,
108
108
  });
109
109
 
110
- const config = loadConfig();
110
+ const config = getConfig();
111
111
 
112
112
  expect(config.skills.allowBundled).toBeNull();
113
113
  expect(config.maxStepsPerSession).toBe(66);
@@ -122,7 +122,7 @@ describe("config recovery compacts arrays after stripping invalid elements", ()
122
122
  maxStepsPerSession: 66,
123
123
  });
124
124
 
125
- const config = loadConfig();
125
+ const config = getConfig();
126
126
 
127
127
  expect(config.skills.allowBundled).toBeNull();
128
128
  expect(config.maxStepsPerSession).toBe(66);
@@ -138,7 +138,7 @@ describe("config recovery compacts arrays after stripping invalid elements", ()
138
138
  maxStepsPerSession: "not-a-number",
139
139
  });
140
140
 
141
- const config = loadConfig();
141
+ const config = getConfig();
142
142
 
143
143
  expect(config.skills.allowBundled).toEqual([]);
144
144
  });
@@ -14,7 +14,7 @@ import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
14
14
  import { join } from "node:path";
15
15
  import { beforeEach, describe, expect, test } from "bun:test";
16
16
 
17
- import { getWorkspacePluginsDir } from "../../util/platform.js";
17
+ import { getWorkspacePluginsDir } from "../../util/layout.js";
18
18
  import { loadSkillCatalog } from "../skills.js";
19
19
 
20
20
  function writePlugin(
@@ -248,20 +248,18 @@ describe("completeCustomProfile", () => {
248
248
  expect(completeCustomProfile(fullDefault, mix)).toBe(mix);
249
249
  });
250
250
 
251
- test("passes cloud profiles through untouched", () => {
252
- const managed: ProfileEntry = { source: "managed", topP: 0.9 };
251
+ test("passes cadet-provider profiles through untouched", () => {
252
+ const managed: ProfileEntry = { provider: "cadet", topP: 0.9 };
253
253
  expect(completeCustomProfile(fullDefault, managed)).toBe(managed);
254
254
  });
255
255
 
256
256
  test("preserves metadata fields", () => {
257
257
  const completed = completeCustomProfile(fullDefault, {
258
- source: "user",
259
258
  label: "Fast drafts",
260
259
  description: "cheap and quick",
261
260
  status: "disabled",
262
261
  model: "claude-haiku-4-5-20251001",
263
262
  });
264
- expect(completed.source).toBe("user");
265
263
  expect(completed.label).toBe("Fast drafts");
266
264
  expect(completed.description).toBe("cheap and quick");
267
265
  expect(completed.status).toBe("disabled");
@@ -94,14 +94,13 @@ describe("reconcileFlagGatedProfiles", () => {
94
94
  const raw = readConfig();
95
95
  // On disk: a thin managed stub — profile content is code-owned.
96
96
  const osBeta = raw.llm.profiles["os-beta"]!;
97
- expect(osBeta).toEqual({ source: "managed" });
97
+ expect(osBeta).toEqual({ provider: "cadet" });
98
98
 
99
99
  // Through the effective view the stub resolves to the catalog body.
100
100
  const effective = getEffectiveProfile(raw.llm.profiles, "os-beta")!;
101
101
  expect(effective.model).toBe("MiniMaxAI/MiniMax-M3");
102
102
  expect(effective.provider_connection).toBeUndefined();
103
103
  expect(effective.provider).toBe("cadet");
104
- expect(effective.source).toBe("managed");
105
104
  expect(effective.label).toBe("OS Beta");
106
105
  expect(effective.effort).toBe("low");
107
106
  expect(effective.topP).toBe(0.95);
@@ -120,7 +119,6 @@ describe("reconcileFlagGatedProfiles", () => {
120
119
  const osBeta = profiles["os-beta"]!;
121
120
  expect(osBeta.status).toBe("disabled");
122
121
  expect(osBeta.label).toBe("OS Beta (Managed)");
123
- expect(osBeta.source).toBe("managed");
124
122
  // Content stays code-owned; the effective view supplies it.
125
123
  expect(osBeta.effort).toBeUndefined();
126
124
  expect(getEffectiveProfile(profiles, "os-beta")?.effort).toBe("low");
@@ -203,7 +201,6 @@ describe("reconcileFlagGatedProfiles", () => {
203
201
 
204
202
  const raw = readConfig();
205
203
  raw.llm.profiles["my-mix"] = {
206
- source: "user",
207
204
  label: "My Mix",
208
205
  mix: [
209
206
  { profile: "balanced", weight: 70 },
@@ -225,7 +222,6 @@ describe("reconcileFlagGatedProfiles", () => {
225
222
  { profile: "balanced", weight: 70 },
226
223
  { profile: "quality-optimized", weight: 20 },
227
224
  ]);
228
- expect(mix.source).toBe("user");
229
225
  expect(mix.label).toBe("My Mix");
230
226
 
231
227
  invalidateConfigCache();
@@ -240,7 +236,6 @@ describe("reconcileFlagGatedProfiles", () => {
240
236
 
241
237
  const raw = readConfig();
242
238
  raw.llm.profiles["experiment"] = {
243
- source: "user",
244
239
  label: "Experiment",
245
240
  mix: [
246
241
  { profile: "balanced", weight: 50 },
@@ -339,104 +334,4 @@ describe("reconcileFlagGatedProfiles", () => {
339
334
 
340
335
  expect(LLMSchema.safeParse(after.llm).success).toBe(true);
341
336
  });
342
-
343
- test("a user-owned os-beta profile is never touched", () => {
344
- process.env.IS_CLOUD = "true";
345
- writeConfig({
346
- llm: {
347
- default: { provider: "anthropic" },
348
- profiles: {
349
- "os-beta": {
350
- source: "user",
351
- label: "Mine",
352
- provider: "anthropic",
353
- model: "claude-x",
354
- provider_connection: "anthropic-personal",
355
- },
356
- },
357
- profileOrder: ["os-beta"],
358
- },
359
- });
360
- invalidateConfigCache();
361
- const before = readFileSync(CONFIG_PATH, "utf-8");
362
-
363
- setOverridesForTesting({ "os-beta": true });
364
- expect(reconcileFlagGatedProfiles()).toBe(false);
365
- expect(readFileSync(CONFIG_PATH, "utf-8")).toBe(before);
366
-
367
- setOverridesForTesting({ "os-beta": false });
368
- expect(reconcileFlagGatedProfiles()).toBe(false);
369
- expect(readFileSync(CONFIG_PATH, "utf-8")).toBe(before);
370
- });
371
-
372
- test("auto-profile flag on materializes the cloud auto profile at the head of the order", () => {
373
- process.env.IS_CLOUD = "true";
374
- seedBalancedConfig();
375
- setOverridesForTesting({ "auto-profile": true });
376
-
377
- expect(reconcileFlagGatedProfiles()).toBe(true);
378
-
379
- const raw = readConfig();
380
- expect(raw.llm.profiles.auto).toEqual({ source: "managed" });
381
- expect(raw.llm.profileOrder[0]).toBe("auto");
382
- const effective = getEffectiveProfile(raw.llm.profiles, "auto")!;
383
- expect(effective.label).toBe("Auto");
384
- expect(effective.model).toBe(
385
- getEffectiveProfile(raw.llm.profiles, "balanced")!.model,
386
- );
387
- expect(LLMSchema.safeParse(raw.llm).success).toBe(true);
388
- });
389
-
390
- test("auto-profile flag on in BYOK mode writes a plain stub that the effective view hides", () => {
391
- seedBalancedConfig();
392
- setOverridesForTesting({ "auto-profile": true });
393
-
394
- expect(reconcileFlagGatedProfiles()).toBe(true);
395
-
396
- const raw = readConfig();
397
- expect(raw.llm.profiles.auto).toEqual({ source: "managed" });
398
- expect(getEffectiveProfile(raw.llm.profiles, "auto")).toBeDefined();
399
- });
400
-
401
- test("auto-profile flag off removes the cloud auto profile and repoints its references", () => {
402
- process.env.IS_CLOUD = "true";
403
- seedBalancedConfig();
404
- setOverridesForTesting({ "auto-profile": true });
405
- reconcileFlagGatedProfiles();
406
-
407
- const raw = readConfig();
408
- raw.llm.activeProfile = "auto";
409
- (raw.llm as Record<string, unknown>).callSites = {
410
- subagentSpawn: { profile: "auto" },
411
- };
412
- writeConfig(raw);
413
- invalidateConfigCache();
414
-
415
- setOverridesForTesting({ "auto-profile": false });
416
- expect(reconcileFlagGatedProfiles()).toBe(true);
417
-
418
- const after = readConfig();
419
- expect(after.llm.profiles.auto).toBeUndefined();
420
- expect(after.llm.profileOrder.includes("auto")).toBe(false);
421
- expect(after.llm.activeProfile).toBe("balanced");
422
- expect((after.llm as Record<string, unknown>).callSites).toEqual({
423
- subagentSpawn: {},
424
- });
425
- });
426
-
427
- test("os-beta and auto-profile reconcile independently in one pass", () => {
428
- process.env.IS_CLOUD = "true";
429
- seedBalancedConfig();
430
- setOverridesForTesting({ "os-beta": true, "auto-profile": true });
431
- expect(reconcileFlagGatedProfiles()).toBe(true);
432
- let order = readConfig().llm.profileOrder;
433
- expect(order[0]).toBe("auto");
434
- expect(order.indexOf("os-beta")).toBe(order.indexOf("balanced") + 1);
435
-
436
- setOverridesForTesting({ "os-beta": false, "auto-profile": true });
437
- expect(reconcileFlagGatedProfiles()).toBe(true);
438
- order = readConfig().llm.profileOrder;
439
- expect(order[0]).toBe("auto");
440
- expect(order.includes("os-beta")).toBe(false);
441
- });
442
337
  });
@@ -11,7 +11,7 @@ import { isPlainObject } from "../util/object.js";
11
11
  * `config set acp.agents.<id>.model null`. The deep-merge assigns that literal
12
12
  * `null` because the stored value is a scalar, and a SET writes it verbatim by
13
13
  * design. Both `command` and `model` are optional strings in `AcpConfigSchema`,
14
- * so a persisted `null` makes every later `loadConfig()` warn and take its
14
+ * so a persisted `null` makes every later `getConfig()` warn and take its
15
15
  * salvage path, dropping the whole `acp` section with the agents defined in it.
16
16
  * Clearing means removing the key, so drop it here on every write path.
17
17
  *