@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
@@ -14,7 +14,6 @@ import {
14
14
  } from "../../providers/model-catalog.js";
15
15
  import { isCodexSubscriptionModel } from "../../providers/openai/codex-models.js";
16
16
  import {
17
- AUTO_PROFILE_KEY,
18
17
  DEFAULT_PROFILE_KEYS,
19
18
  DEFAULT_PROFILE_PROVIDERS,
20
19
  FALLBACK_PROFILE_BY_KEY,
@@ -29,9 +28,9 @@ import { InputModalitiesSchema } from "../input-modalities.js";
29
28
 
30
29
  /**
31
30
  * Managed-only keys that are valid reference targets on the cloud column
32
- * whether or not a workspace stub exists. The flag-gated ones (`os-beta`,
33
- * `auto`) are excluded: they resolve only while their reconciled stub is
34
- * present, so they enter the reference set through `llm.profiles` alone.
31
+ * whether or not a workspace stub exists. The flag-gated one (`os-beta`)
32
+ * is excluded: it resolves only while its reconciled stub is
33
+ * present, so it enters the reference set through `llm.profiles` alone.
35
34
  */
36
35
  const ALWAYS_RESOLVING_MANAGED_ONLY_PROFILE_KEYS =
37
36
  MANAGED_ONLY_PROFILE_KEYS.filter((key) => !isFlagGatedProfileKey(key));
@@ -241,7 +240,6 @@ export const LLMCallSiteEnum = z.enum([
241
240
  "voiceEscalationJudge",
242
241
  "voiceContinuationJudge",
243
242
  "voiceContinuationLabel",
244
- "autoProfileRouter",
245
243
  "trustRuleSuggestion",
246
244
  "homeGreeting",
247
245
  "homeSuggestedPrompts",
@@ -505,13 +503,6 @@ const OpenRouterDeepPartialSchema = z.object({
505
503
  // Profile metadata
506
504
  // ---------------------------------------------------------------------------
507
505
 
508
- /**
509
- * Distinguishes daemon-cloud profiles (overwritten on every startup) from
510
- * user-created ones (never touched by the daemon).
511
- */
512
- const ProfileSource = z.enum(["managed", "user"]);
513
- type ProfileSource = z.infer<typeof ProfileSource>;
514
-
515
506
  // ---------------------------------------------------------------------------
516
507
  // Pricing overrides
517
508
  // ---------------------------------------------------------------------------
@@ -673,7 +664,6 @@ const MixSchema = z.array(MixArmSchema).min(2);
673
664
  * resolver's deep-merge output.
674
665
  */
675
666
  export const ProfileEntry = LLMConfigFragment.extend({
676
- source: ProfileSource.optional(),
677
667
  /**
678
668
  * `.nullable()` is intentional: the PUT `/v1/config/llm/profiles/:name`
679
669
  * route uses `null` as the "clear this field" sentinel (edit mode sends
@@ -812,9 +802,6 @@ function unresolvableProfileReason(
812
802
  if (name === JEV_MANAGED_PROFILE_KEY) {
813
803
  return "is the cloud Jev profile, which resolves only while llm.default is the cloud provider";
814
804
  }
815
- if (name === AUTO_PROFILE_KEY) {
816
- return "is the cloud Auto profile, which resolves only while llm.default is the cloud provider";
817
- }
818
805
  return "is a cloud backup profile, which resolves only while llm.default is the cloud provider";
819
806
  }
820
807
 
@@ -824,10 +811,10 @@ function unresolvableProfileReason(
824
811
  * `llm.default`.
825
812
  *
826
813
  * Every on-disk key qualifies but one: a reserved backup name whose entry is
827
- * a thin `source: "managed"` stub. The stub is not a profile, it is the
814
+ * a thin model-less `provider: "cadet"` stub. The stub is not a profile, it is the
828
815
  * workspace's slot for a code-owned one, and it can reach disk on a cloud
829
816
  * install through nothing more than a `config get` -> `config set` round-trip
830
- * of the effective profile list (`normalizeCloudProfileWrites` reduces the
817
+ * of the effective profile list (a write round-trip reduces the
831
818
  * echoed body to exactly that stub). Counting it as an ordinary raw key would
832
819
  * let it launder a backup reference past the provider gate: after a switch to
833
820
  * a BYOK or ChatGPT default provider the reference would keep validating
@@ -837,7 +824,7 @@ function unresolvableProfileReason(
837
824
  * A genuinely user-owned entry under a backup name is the opposite case: it
838
825
  * carries its own body, and with no code-owned body to lose on a non-managed
839
826
  * column `resolveAgainstBody` resolves the workspace entry itself. So it
840
- * stays a valid target on every column. The `source` test is the same one
827
+ * stays a valid target on every column. The provider test is the same one
841
828
  * the resolver uses, which is what keeps the two in step.
842
829
  */
843
830
  function referenceableProfileKeys(
@@ -853,7 +840,7 @@ function referenceableProfileKeys(
853
840
  value != null && typeof value === "object" && !Array.isArray(value)
854
841
  ? (value as Record<string, unknown>)
855
842
  : null;
856
- return entry != null && entry.source !== "managed";
843
+ return entry != null && entry.provider !== "cadet";
857
844
  })
858
845
  .map(([name]) => name);
859
846
  }
@@ -891,9 +878,9 @@ export function collectFallbackProfileIssues(
891
878
  // (`default-profile-catalog.ts`) and resolve whether or not they are
892
879
  // materialized in `llm.profiles`, so their names are always valid
893
880
  // fallback targets (same rule as call-site `profile` references). The
894
- // managed backups resolve the same way, but on the cloud column only,
881
+ // cloud backups resolve the same way, but on the cloud column only,
895
882
  // so they are valid targets only under a cloud `llm.default`.
896
- // A persisted managed stub for a backup name does not change that, see
883
+ // A persisted cloud stub for a backup name does not change that, see
897
884
  // `referenceableProfileKeys`.
898
885
  const backupsResolve = backupProfilesResolveUnderDefaultProvider(
899
886
  RawDefaultSelectionSchema.parse(llmDefault),
@@ -927,7 +914,7 @@ export function collectFallbackProfileIssues(
927
914
  const expectedFallback = isDefaultProfileKey(name)
928
915
  ? FALLBACK_PROFILE_BY_KEY[name]
929
916
  : undefined;
930
- if (entry?.source !== "managed" || fallback !== expectedFallback) {
917
+ if (entry?.provider !== "cadet" || fallback !== expectedFallback) {
931
918
  issues.push({
932
919
  profileName: name,
933
920
  message: `Profile "${name}" cannot configure fallbackProfile. Automatic fallbacks are code-owned for Cadet Cloud default profiles.`,
@@ -1019,9 +1006,17 @@ export const LLMSchema = z
1019
1006
  })
1020
1007
  .superRefine((config, ctx) => {
1021
1008
  for (const [name, entry] of Object.entries(config.profiles ?? {})) {
1022
- const issue = entry?.provider
1023
- ? routingIdentityModelIssue(entry.provider, entry.model ?? undefined)
1024
- : null;
1009
+ // A model-less entry under a code-defined default name is the thin
1010
+ // cloud stub — its content is code-owned, so the routing-identity
1011
+ // model check applies only to entries carrying their own body.
1012
+ const isCodeOwnedName =
1013
+ isDefaultProfileKey(name) ||
1014
+ isCloudOnlyProfileKey(name) ||
1015
+ isFlagGatedProfileKey(name);
1016
+ const issue =
1017
+ entry?.provider && (entry.model != null || !isCodeOwnedName)
1018
+ ? routingIdentityModelIssue(entry.provider, entry.model ?? undefined)
1019
+ : null;
1025
1020
  if (issue) {
1026
1021
  ctx.addIssue({
1027
1022
  code: z.ZodIssueCode.custom,
@@ -1062,7 +1057,7 @@ export const LLMSchema = z
1062
1057
  // The flag-gated `os-beta` is excluded: it resolves only while a
1063
1058
  // workspace entry exists, so a reference to it is valid only when that
1064
1059
  // entry is present in `config.profiles`. A backup name materialized as a
1065
- // thin managed stub does not re-enter the set on a non-cloud column
1060
+ // thin cloud stub does not re-enter the set on a non-cloud column
1066
1061
  // either, see `referenceableProfileKeys`.
1067
1062
  const backupsResolve = backupProfilesResolveUnderDefaultProvider(
1068
1063
  config.default,
@@ -15,7 +15,7 @@ import {
15
15
  MANAGED_PROFILE_TEMPLATES,
16
16
  } from "./default-profile-catalog.js";
17
17
  import { getIsCloud } from "./env-registry.js";
18
- import { loadConfig, loadRawConfig, saveRawConfig } from "./loader.js";
18
+ import { getConfig, loadRawConfig, saveRawConfig } from "./loader.js";
19
19
  import { isDispatchableProfile } from "./profile-dispatchability.js";
20
20
  import {
21
21
  isDefaultProviderChoice,
@@ -64,7 +64,7 @@ export type SeedInferenceProfilesOptions = {
64
64
  export function seedInferenceProfiles(
65
65
  options: SeedInferenceProfilesOptions = {},
66
66
  ): void {
67
- const config = loadConfig();
67
+ const config = getConfig();
68
68
  const llm = config.llm;
69
69
  const profiles = llm.profiles;
70
70
 
@@ -173,20 +173,27 @@ export function seedInferenceProfiles(
173
173
  }
174
174
  }
175
175
 
176
- // Advisor profile: defaults to the strongest active managed default.
176
+ // Advisor profile: defaults to the strongest active managed default. A
177
+ // default name the user shadowed (a non-cadet workspace entry) is user
178
+ // intent and is left alone; a disabled code-owned default is repaired.
177
179
  const requestedAdvisorProfile = llm.advisorProfile;
178
180
  const requestedAdvisorEntry =
179
181
  requestedAdvisorProfile !== undefined
180
182
  ? effectiveProfiles[requestedAdvisorProfile]
181
183
  : undefined;
184
+ const requestedAdvisorWorkspace =
185
+ requestedAdvisorProfile !== undefined
186
+ ? (llm.profiles[requestedAdvisorProfile] ?? null)
187
+ : null;
182
188
  const requestedAdvisorIsDisabledManaged =
183
- requestedAdvisorEntry?.source === "managed" &&
184
- requestedAdvisorEntry.status === "disabled";
189
+ requestedAdvisorEntry?.status === "disabled" &&
190
+ (requestedAdvisorWorkspace === null ||
191
+ requestedAdvisorWorkspace.provider === "cadet");
185
192
  if (
186
193
  requestedAdvisorProfile === undefined ||
187
194
  requestedAdvisorIsDisabledManaged
188
195
  ) {
189
- const defaultAdvisorProfile = firstActiveCloudProfile(effectiveProfiles, [
196
+ const defaultAdvisorProfile = firstActiveDefaultProfile(effectiveProfiles, [
190
197
  "quality-optimized",
191
198
  "balanced",
192
199
  "cost-optimized",
@@ -223,14 +230,6 @@ export function seedInferenceProfiles(
223
230
  }
224
231
  llm.profileOrder = profileOrder;
225
232
 
226
- // Tag any remaining profiles without a source as user-created.
227
- for (const [name, profile] of Object.entries(profiles)) {
228
- if (MANAGED_PROFILE_NAMES.has(name)) {
229
- continue;
230
- }
231
- profile.source ??= "user";
232
- }
233
-
234
233
  // Persist: the seed only ever rewrites the `llm` section, so the typed
235
234
  // view's `llm` lands on the raw base verbatim and every other section the
236
235
  // user has on disk survives untouched.
@@ -274,7 +273,7 @@ function pruneNonDispatchableProfiles(
274
273
  // Thin managed stubs carry no model/mix by design — their content is
275
274
  // code-owned, so dispatchability is judged on the catalog body, never
276
275
  // the stub. Only workspace-owned profiles are pruned.
277
- if (MANAGED_PROFILE_NAMES.has(name) && profile.source === "managed") {
276
+ if (MANAGED_PROFILE_NAMES.has(name)) {
278
277
  continue;
279
278
  }
280
279
  if (!isDispatchableProfile(profile)) {
@@ -331,13 +330,13 @@ function pruneRemovedProfileReferences(
331
330
  }
332
331
  }
333
332
 
334
- function firstActiveCloudProfile(
333
+ function firstActiveDefaultProfile(
335
334
  profiles: Record<string, ProfileEntry>,
336
335
  names: string[],
337
336
  ): string | undefined {
338
337
  for (const name of names) {
339
338
  const profile = profiles[name];
340
- if (profile?.source === "managed" && profile.status !== "disabled") {
339
+ if (profile && profile.status !== "disabled") {
341
340
  return name;
342
341
  }
343
342
  }
@@ -33,12 +33,12 @@ import { parseToolManifestFile } from "../skills/tool-manifest.js";
33
33
  import { computeSkillVersionHash } from "../skills/version-hash.js";
34
34
  import type { OwnerInfo } from "../tools/types.js";
35
35
  import { isBunVirtualPath } from "../util/bundled-asset.js";
36
- import { getLogger } from "../util/logger.js";
37
36
  import {
38
37
  getWorkspaceDirDisplay,
39
38
  getWorkspacePluginsDir,
40
39
  getWorkspaceSkillsDir,
41
- } from "../util/platform.js";
40
+ } from "../util/layout.js";
41
+ import { getLogger } from "../util/logger.js";
42
42
  import {
43
43
  hasPluginManifest,
44
44
  readPluginManifest,
@@ -3,15 +3,10 @@ import { isDeepStrictEqual } from "node:util";
3
3
  import { getLogger } from "../util/logger.js";
4
4
  import { isAssistantFeatureFlagEnabled } from "./assistant-feature-flags.js";
5
5
  import {
6
- AUTO_PROFILE_TEMPLATE,
7
6
  type DefaultProfileTemplate,
8
7
  OS_BETA_PROFILE_TEMPLATE,
9
8
  } from "./default-profile-catalog.js";
10
- import {
11
- AUTO_PROFILE_FEATURE_FLAG_KEY,
12
- AUTO_PROFILE_KEY,
13
- OS_BETA_PROFILE_KEY,
14
- } from "./default-profile-names.js";
9
+ import { OS_BETA_PROFILE_KEY } from "./default-profile-names.js";
15
10
  import { getIsCloud } from "./env-registry.js";
16
11
  import {
17
12
  getConfigReadOnly,
@@ -57,14 +52,6 @@ const GATED_PROFILES: readonly GatedProfile[] = [
57
52
  },
58
53
  byokStartsDisabled: true,
59
54
  },
60
- {
61
- key: AUTO_PROFILE_KEY,
62
- flag: AUTO_PROFILE_FEATURE_FLAG_KEY,
63
- template: AUTO_PROFILE_TEMPLATE,
64
- // Auto leads the picker.
65
- place: (profileOrder) => profileOrder.unshift(AUTO_PROFILE_KEY),
66
- byokStartsDisabled: false,
67
- },
68
55
  ];
69
56
 
70
57
  /**
@@ -112,13 +99,8 @@ export function reconcileFlagGatedProfiles(): boolean {
112
99
 
113
100
  const previous = readObject(profiles[gated.key]);
114
101
 
115
- // Never clobber a user-owned profile that happens to share the name. The
116
- // entry is ours to manage only when it is absent or already managed; a
117
- // user-sourced entry of the same name is left untouched on every path.
118
- const isOursToManage = previous == null || previous.source === "managed";
119
- if (!isOursToManage) {
120
- continue;
121
- }
102
+ // The gated names are code-owned and reserved, so every entry under one
103
+ // is ours to manage; a user-owned shadow cannot exist.
122
104
 
123
105
  const order = llm.profileOrder as string[];
124
106
  const profileChanged = enabled
@@ -149,9 +131,9 @@ function enableProfile(
149
131
  ): boolean {
150
132
  // The profile's content is code-owned (`default-profile-catalog.ts`) and
151
133
  // resolves through the effective view once this stub exists; the workspace
152
- // entry carries only the overlay fields (`source`, `label`, `status`,
153
- // `topP`).
154
- const next: Record<string, unknown> = { source: "managed" };
134
+ // entry carries the cadet-provider marker (its cloud identity) plus the
135
+ // overlay fields (`label`, `status`, `topP`).
136
+ const next: Record<string, unknown> = { provider: "cadet" };
155
137
 
156
138
  // BYOK installs create the stub disabled: the cloud inference connection
157
139
  // backing this profile isn't usable until the user enables it, so a fresh
@@ -25,6 +25,7 @@
25
25
 
26
26
  import { isTokenExpired } from "@mycadet/credential-storage";
27
27
 
28
+ import { getCloudAssistantId } from "../config/env.js";
28
29
  import type { Services } from "../config/schemas/services.js";
29
30
  import { getConnectionAccessTokenResult } from "../oauth/credential-token-resolver.js";
30
31
  import {
@@ -633,12 +634,13 @@ const ASSISTANT_API_KEY_CONNECTION_ID = "cadet:assistant_api_key";
633
634
  * observed here and acted on by a client.
634
635
  *
635
636
  * Statuses map onto the shared vocabulary:
637
+ * - `missing_token`: no key is stored, so managed inference cannot run.
636
638
  * - `revoked`: the cloud settled that the stored key is not accepted.
637
639
  * - `unreachable`: the credential store or the cloud did not answer, so
638
640
  * health is unknown. The heartbeat drops these before notifying, which is
639
641
  * what keeps a transient outage from raising a credential alert.
640
642
  *
641
- * `canAutoRecover` is true for the revoked status: recovery needs no
643
+ * `canAutoRecover` is true for both failure statuses: recovery needs no
642
644
  * re-authorization from the user, only a signed-in client to rotate the key.
643
645
  */
644
646
  export async function checkAssistantApiKey(): Promise<CredentialHealthResult | null> {
@@ -667,8 +669,13 @@ export async function checkAssistantApiKey(): Promise<CredentialHealthResult | n
667
669
  }
668
670
 
669
671
  if (stored.value == null) {
670
- // A workspace that was never connected to the cloud has no managed
671
- // credential yet — missing, not unhealthy.
672
+ // A workspace that was never connected to the cloud has no bound cloud
673
+ // identity and is not unhealthy. Only an install that already carries a
674
+ // cloud identity is missing something — identity resolves from the API
675
+ // key via the cloud validation API, never from a stored credential.
676
+ if (!getCloudAssistantId()) {
677
+ return null;
678
+ }
672
679
  return {
673
680
  ...base,
674
681
  status: "missing_token",
@@ -1,4 +1,4 @@
1
- import { loadConfig } from "../config/loader.js";
1
+ import { getConfig } from "../config/loader.js";
2
2
  import { wrapWithCallSiteRouting } from "../providers/call-site-routing.js";
3
3
  import {
4
4
  mainAgentResolutionError,
@@ -82,7 +82,7 @@ const VALID_DISPOSITIONS: ReadonlySet<string> = new Set([
82
82
  */
83
83
  export function createApprovalCopyGenerator(): ApprovalCopyGenerator {
84
84
  return async (context, options = {}) => {
85
- const config = loadConfig();
85
+ const config = getConfig();
86
86
  // Connection-aware default-provider resolution. Throws
87
87
  // `ConnectionResolutionError` on hard config errors (missing /
88
88
  // unknown / mismatched connection). Returns null on soft credential
@@ -150,7 +150,7 @@ export function createApprovalCopyGenerator(): ApprovalCopyGenerator {
150
150
  */
151
151
  export function createApprovalConversationGenerator(): ApprovalConversationGenerator {
152
152
  return async (context) => {
153
- const config = loadConfig();
153
+ const config = getConfig();
154
154
  // Connection-aware default + per-call routing. `resolveDefaultProvider`
155
155
  // throws `ConnectionResolutionError` on hard config errors (missing /
156
156
  // unknown / mismatched connection) and returns null on soft credential
@@ -37,7 +37,6 @@ import { handleEmitEventSignal } from "../signals/emit-event.js";
37
37
  import { handleUserMessageSignal } from "../signals/user-message.js";
38
38
  import { WORKSPACE_THEME_RELATIVE_PATH } from "../theme/workspace-theme.js";
39
39
  import { DebouncerMap } from "../util/debounce.js";
40
- import { getLogger } from "../util/logger.js";
41
40
  import {
42
41
  getAvatarDir,
43
42
  getSignalsDir,
@@ -45,7 +44,8 @@ import {
45
44
  getWorkspaceDir,
46
45
  getWorkspacePromptPath,
47
46
  WORKSPACE_MCP_FILENAME,
48
- } from "../util/platform.js";
47
+ } from "../util/layout.js";
48
+ import { getLogger } from "../util/logger.js";
49
49
  import { evictConversationsForReload } from "./conversation-store.js";
50
50
  import { parseIdentityFields } from "./handlers/identity.js";
51
51
  import { reloadMcpServers } from "./mcp-reload-service.js";
@@ -53,7 +53,6 @@ import {
53
53
  updateMessageContent,
54
54
  } from "../persistence/conversation-crud.js";
55
55
  import { syncMessageToDisk } from "../persistence/conversation-disk-view.js";
56
- import { AUTO_ROUTED_PROFILE_METADATA_KEY } from "../persistence/conversation-types.js";
57
56
  import { enqueueLexicalIndexForMessage } from "../persistence/job-handlers/message-lexical.js";
58
57
  import {
59
58
  backfillMessageIdOnLogs,
@@ -277,12 +276,6 @@ export interface EventHandlerState {
277
276
  * the model ever having seen it.
278
277
  */
279
278
  pendingNotifiedInferenceProfile: string | null;
280
- /**
281
- * The default profile the Auto profile routed this turn to, stamped on the
282
- * turn's assistant rows and carried on `message_complete` so clients can
283
- * show which profile answered. `undefined` on every turn not run on Auto.
284
- */
285
- autoRoutedProfile: string | undefined;
286
279
  pendingDirectiveDisplayBuffer: string;
287
280
  firstAssistantText: string;
288
281
  /** Most recent resolved provider for the current exchange's usage accounting. */
@@ -708,7 +701,6 @@ export interface EventHandlerDeps {
708
701
  export function createEventHandlerState(): EventHandlerState {
709
702
  return {
710
703
  pendingNotifiedInferenceProfile: null,
711
- autoRoutedProfile: undefined,
712
704
  pendingDirectiveDisplayBuffer: "",
713
705
  firstAssistantText: "",
714
706
  exchangeProviderName: undefined,
@@ -2997,13 +2989,6 @@ function annotatePersistedAssistantMessage(
2997
2989
  display: surface.display,
2998
2990
  ...(surface.persistent ? { persistent: true } : {}),
2999
2991
  ...(surface.toolCallId ? { toolCallId: surface.toolCallId } : {}),
3000
- // Daemon-only commit-timing activation tag, persisted so
3001
- // restoreSurfaceStateFromHistory can rehydrate it after a reload. This
3002
- // block lives only in server-side conversation history, never in the
3003
- // client `ui_surface_show` message.
3004
- ...(surface.activationMoment
3005
- ? { activationMoment: surface.activationMoment }
3006
- : {}),
3007
2992
  // A surface answered before this write lands owns no persisted block for
3008
2993
  // `markSurfaceCompleted` to patch, so its completion rides the snapshot.
3009
2994
  ...(surface.completed ? { completed: true } : {}),
@@ -3329,9 +3314,6 @@ export async function handleMessageComplete(
3329
3314
  ...(event.assistantTextVisibility
3330
3315
  ? { [ASSISTANT_TEXT_VISIBILITY_KEY]: event.assistantTextVisibility }
3331
3316
  : {}),
3332
- ...(state.autoRoutedProfile
3333
- ? { [AUTO_ROUTED_PROFILE_METADATA_KEY]: state.autoRoutedProfile }
3334
- : {}),
3335
3317
  };
3336
3318
  state.lastAssistantTextVisibility = event.assistantTextVisibility;
3337
3319
  const persisted = await finalizeInflightContent(
@@ -25,8 +25,6 @@ import type {
25
25
  TurnChannelContext,
26
26
  TurnInterfaceContext,
27
27
  } from "../channels/types.js";
28
- import { getConversationProfilesForProvider } from "../config/default-profile-catalog.js";
29
- import { AUTO_PROFILE_KEY } from "../config/default-profile-names.js";
30
28
  import {
31
29
  contextWindowConfigFromEffective,
32
30
  type EffectiveContextWindow,
@@ -66,6 +64,7 @@ import {
66
64
  backfillMessageIdOnLogs,
67
65
  recordSyntheticAgentErrorMessageLog,
68
66
  } from "../persistence/llm-request-log-store.js";
67
+ import { stampTurnOutcome } from "../persistence/turn-outcome.js";
69
68
  import { HOOKS } from "../plugin-api/constants.js";
70
69
  import type { ConversationGraphMemory } from "../plugins/defaults/memory/graph/conversation-graph-memory.js";
71
70
  import { enqueueMemoryRetrospectiveOnCompaction } from "../plugins/defaults/memory/memory-retrospective-enqueue.js";
@@ -86,7 +85,6 @@ import { resolveTurnReplyMessageId } from "../runtime/channel-reply-delivery.js"
86
85
  import { isNoResponseOnlyText } from "../runtime/no-response.js";
87
86
  import { getByConversation as getPendingInteractionsByConversation } from "../runtime/pending-interactions.js";
88
87
  import { publishConversationMessagesChanged } from "../runtime/sync/resource-sync-events.js";
89
- import { stampTurnOutcome } from "../telemetry/turn-outcome.js";
90
88
  import {
91
89
  emitToolProfilingSummary,
92
90
  startToolProfilingRequest,
@@ -102,12 +100,6 @@ import {
102
100
  DEFAULT_TURN_COMMIT_MAX_WAIT_MS,
103
101
  } from "./abort-watchdog.js";
104
102
  import { cleanAssistantContent } from "./assistant-attachments.js";
105
- import {
106
- type AutoProfileRoute,
107
- plainTextOf,
108
- routeAutoProfile,
109
- takeAutoProfilePreview,
110
- } from "./auto-profile-router.js";
111
103
  import { conversationSupportsDynamicUi } from "./channel-ui-capability.js";
112
104
  import type { Conversation } from "./conversation.js";
113
105
  import {
@@ -670,89 +662,16 @@ export async function runAgentLoopImpl(
670
662
  // the row.
671
663
  const config = getConfig();
672
664
 
673
- // With no explicit override, the resolver's own chain (the active profile
674
- // for the main agent, then the call site's pin) may still select the Auto
675
- // profile. That winner is named here so the router below covers every path
676
- // that would otherwise dispatch the Auto body.
677
- const readRequestedOverrideProfile = (): string | undefined => {
678
- const explicit = options?.overrideProfile ?? resolveOverrideProfile(ctx);
679
- if (explicit !== undefined) {
680
- return explicit;
681
- }
682
- const winner = selectWinningProfile(inferenceCallSite, config.llm, {
683
- selectionSeed: ctx.conversationId,
684
- }).profileName;
685
- return winner === AUTO_PROFILE_KEY ? AUTO_PROFILE_KEY : undefined;
686
- };
665
+ const readRequestedOverrideProfile = (): string | undefined =>
666
+ options?.overrideProfile ?? resolveOverrideProfile(ctx);
687
667
 
688
- // The Auto profile is a selection over the default profiles, made once per
689
- // turn: the routed profile stands in for the Auto name on every read, so
690
- // the whole turn (and any subagent inheriting the override) runs on one
691
- // profile. A user profile that shadows the cloud name is a profile of
692
- // its own and is not routed. Nothing here may throw: the turn's processing
693
- // state is already held and its release lives in the loop's `finally`
694
- // further down, so a routing failure degrades to the Auto body instead.
695
- const routeAutoProfileForTurn =
696
- async (): Promise<AutoProfileRoute | null> => {
697
- try {
698
- const profiles = getConversationProfilesForProvider(config.llm);
699
- if (profiles[AUTO_PROFILE_KEY]?.source !== "managed") {
700
- return null;
701
- }
702
- const userMessage = plainTextOf(
703
- getMessageById(userMessageId)?.content ?? [],
704
- );
705
- // A draft the composer already previewed carries its pick over, so
706
- // the reply lands on the profile the pill showed with no second call.
707
- const previewed = takeAutoProfilePreview({
708
- conversationId: ctx.conversationId,
709
- text: userMessage,
710
- history: ctx.messages,
711
- profiles,
712
- });
713
- const route =
714
- previewed ??
715
- (await routeAutoProfile({
716
- conversationId: ctx.conversationId,
717
- history: ctx.messages,
718
- userMessage,
719
- profiles,
720
- signal: abortController.signal,
721
- }));
722
- rlog.info(
723
- {
724
- outcome: route.outcome,
725
- profile: route.profile,
726
- confidence: route.confidence ?? null,
727
- latencyMs: route.latencyMs,
728
- reusedPreview: previewed !== undefined,
729
- },
730
- "Auto profile routed the turn",
731
- );
732
- return route;
733
- } catch (err) {
734
- rlog.warn(
735
- { err },
736
- "Auto profile routing failed; running the Auto body",
737
- );
738
- return null;
739
- }
740
- };
741
668
  const requestedOverrideProfile = readRequestedOverrideProfile();
742
- const autoRoute =
743
- requestedOverrideProfile === AUTO_PROFILE_KEY
744
- ? await routeAutoProfileForTurn()
745
- : null;
746
- const withAutoRoute = (profile: string | undefined): string | undefined =>
747
- profile === AUTO_PROFILE_KEY && autoRoute ? autoRoute.profile : profile;
748
-
749
- const userExplicitOverride = withAutoRoute(requestedOverrideProfile);
750
669
 
751
- const turnOverrideProfile = userExplicitOverride;
670
+ const turnOverrideProfile = requestedOverrideProfile;
752
671
  const forceOverrideProfile = options?.forceOverrideProfile === true;
753
672
 
754
673
  const readCurrentOverrideProfile = (): string | undefined =>
755
- withAutoRoute(readRequestedOverrideProfile());
674
+ readRequestedOverrideProfile();
756
675
 
757
676
  // Best-effort attribution for error classification: names the resolved
758
677
  // connection and profile so credential/connection errors point at the
@@ -981,7 +900,6 @@ export async function runAgentLoopImpl(
981
900
  startToolProfilingRequest(ctx.conversationId);
982
901
  let turnStarted = false;
983
902
  const state = createEventHandlerState();
984
- state.autoRoutedProfile = autoRoute?.profile;
985
903
  // Publish this turn's flushed-content watermark so the worker → daemon
986
904
  // persist hand-off can cap a snapshot anchor at flushed content rather than
987
905
  // the live seq counter, which runs ahead while the turn streams. Cleared in
@@ -1723,7 +1641,6 @@ export async function runAgentLoopImpl(
1723
1641
  supportsDynamicUi: conversationSupportsDynamicUi(ctx),
1724
1642
  trust: loopTrust,
1725
1643
  overrideProfile: turnOverrideProfile,
1726
- ...(autoRoute ? { overrideProfileOrigin: "auto" as const } : {}),
1727
1644
  ...(forceOverrideProfile ? { forceOverrideProfile: true } : {}),
1728
1645
  resolveOverrideProfile: refreshCurrentProfileState,
1729
1646
  ...(onModelCallPrepared !== undefined ? { onModelCallPrepared } : {}),
@@ -2183,9 +2100,7 @@ export async function runAgentLoopImpl(
2183
2100
  overrideProfile: mainRowOverrideProfile,
2184
2101
  ...(state.exchangeInferenceProfile !== undefined
2185
2102
  ? { forceOverrideProfile: true }
2186
- : autoRoute && mainRowOverrideProfile === autoRoute.profile
2187
- ? { overrideProfileOrigin: "auto" as const }
2188
- : {}),
2103
+ : {}),
2189
2104
  },
2190
2105
  turnCronRunId,
2191
2106
  );
@@ -2292,9 +2207,6 @@ export async function runAgentLoopImpl(
2292
2207
  ...(state.lastAssistantMessageId
2293
2208
  ? { messageId: state.lastAssistantMessageId }
2294
2209
  : {}),
2295
- ...(state.autoRoutedProfile
2296
- ? { autoRoutedProfile: state.autoRoutedProfile }
2297
- : {}),
2298
2210
  modeSession: ctx.modeSessions.getTurnOwner(reqId),
2299
2211
  });
2300
2212
  publishLoopMessagesChanged();
@@ -2323,9 +2235,6 @@ export async function runAgentLoopImpl(
2323
2235
  ...(state.lastAssistantTextVisibility
2324
2236
  ? { assistantTextVisibility: state.lastAssistantTextVisibility }
2325
2237
  : {}),
2326
- ...(state.autoRoutedProfile
2327
- ? { autoRoutedProfile: state.autoRoutedProfile }
2328
- : {}),
2329
2238
  });
2330
2239
  if (shouldEmitQueuedConversationNotices) {
2331
2240
  for (const notice of drainConversationNotices(ctx.conversationId)) {
@@ -35,6 +35,7 @@ import {
35
35
  setConversationOriginInterfaceIfUnset,
36
36
  } from "../persistence/conversation-crud.js";
37
37
  import { isReplyPushIneligibleUserMessage } from "../persistence/conversation-types.js";
38
+ import { stampTurnOutcome } from "../persistence/turn-outcome.js";
38
39
  import type { ContextWindowResult } from "../plugins/defaults/compaction/window-manager.js";
39
40
  import { getCurrentSeq } from "../runtime/assistant-stream-state.js";
40
41
  import {
@@ -42,7 +43,6 @@ import {
42
43
  routeGuardianReply,
43
44
  } from "../runtime/guardian-reply-router.js";
44
45
  import { publishConversationMessagesChanged } from "../runtime/sync/resource-sync-events.js";
45
- import { stampTurnOutcome } from "../telemetry/turn-outcome.js";
46
46
  import { getLogger } from "../util/logger.js";
47
47
  import type { CleanResult, Conversation } from "./conversation.js";
48
48
  import { repairInterruptedToolUseBlocks } from "./conversation-interrupt-repair.js";