@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
@@ -10,9 +10,25 @@
10
10
  * Most tests are test.todo — they document expected behavior for bugs
11
11
  * to be fixed in subsequent PRs (PR 2 for tests 1–5, PR 3 for tests 6–7).
12
12
  * Tests 2, 8, 9, and 10 are now active and passing against current code.
13
+ *
14
+ * Zero-leak except four deliberate controls: the token estimator, overflow
15
+ * reducer, and overflow policy are the tests' staging inputs (per-test token
16
+ * counts and ladder behavior), and the compaction manager store hands the
17
+ * loop the per-test ladder stub. Everything else runs for real — crud,
18
+ * usage, request logs, and the disk view land in the per-process test DB,
19
+ * observed via pass-through spies on the real module namespaces.
13
20
  */
14
21
  import { createRequire } from "node:module";
15
- import { afterAll, beforeEach, describe, expect, mock, test } from "bun:test";
22
+ import {
23
+ afterAll,
24
+ beforeAll,
25
+ beforeEach,
26
+ describe,
27
+ expect,
28
+ mock,
29
+ spyOn,
30
+ test,
31
+ } from "bun:test";
16
32
 
17
33
  import type { LoopToolExecutor } from "../agent/loop.js";
18
34
  import type { AssistantEvent } from "../api/index.js";
@@ -21,23 +37,12 @@ import type { Message, Provider, ToolDefinition } from "../providers/types.js";
21
37
  import { ContextOverflowError } from "../providers/types.js";
22
38
  import { setConfig } from "./helpers/set-config.js";
23
39
 
24
- const conversationCrudRealSnapshot = {
25
- ...(createRequire(import.meta.url)(
26
- "../persistence/conversation-crud.js",
27
- ) as Record<string, unknown>),
28
- };
29
40
  const tokenEstimatorRealSnapshot = {
30
41
  ...(createRequire(import.meta.url)("../context/token-estimator.js") as Record<
31
42
  string,
32
43
  unknown
33
44
  >),
34
45
  };
35
- const conversationRuntimeAssemblyRealSnapshot = {
36
- ...(createRequire(import.meta.url)(
37
- "../daemon/conversation-runtime-assembly.js",
38
- ) as Record<string, unknown>),
39
- };
40
-
41
46
  // ── Module mocks (must precede imports of the module under test) ─────
42
47
 
43
48
  // The real AgentLoop resolves the per-conversation ContextWindowManager from
@@ -231,245 +236,21 @@ mock.module("../plugins/defaults/compaction/overflow-policy.js", () => ({
231
236
  resolveOverflowAction: () => mockOverflowAction,
232
237
  }));
233
238
 
234
- mock.module("../persistence/conversation-crud.js", () => ({
235
- setConversationProcessingStartedAt: () => {},
236
- isConversationProcessing: () => false,
237
- setConversationOriginChannelIfUnset: () => {},
238
- setConversationHistoryStrippedAt: () => {},
239
- updateConversationUsage: () => {},
240
- getMessages: () => [],
241
- getConversation: () => ({
242
- id: "conv-1",
243
- contextSummary: null,
244
- contextCompactedMessageCount: 0,
245
- totalInputTokens: 0,
246
- totalOutputTokens: 0,
247
- totalEstimatedCost: 0,
248
- title: null,
249
- }),
250
- provenanceFromTrustContext: () => ({
251
- source: "user",
252
- trustContext: undefined,
253
- }),
254
- getConversationOriginInterface: () => null,
255
- addMessage: (...args: unknown[]) => addMessageMock(...args),
256
- deleteMessageById: () => {},
257
- updateConversationContextWindow: () => {},
258
- updateConversationTitle: () => {},
259
- getConversationOriginChannel: () => null,
260
- getMessageById: () => null,
261
- updateMessageContent: () => {},
262
- updateMessageMetadata: () => {},
263
- setLastNotifiedInferenceProfile: () => {},
264
- getLastUserTimestampBefore: () => 0,
265
- resolveOverrideProfile: () => undefined,
266
- reserveMessage: mock(async () => ({ id: "msg-reserve" })),
267
- recordConversationPersistedSeq: () => {},
268
- getConversationPersistedSeq: () => null,
269
- }));
270
-
271
239
  afterAll(() => {
272
- mock.module(
273
- "../persistence/conversation-crud.js",
274
- () => conversationCrudRealSnapshot,
275
- );
276
240
  mock.module(
277
241
  "../context/token-estimator.js",
278
242
  () => tokenEstimatorRealSnapshot,
279
243
  );
280
- mock.module(
281
- "../daemon/conversation-runtime-assembly.js",
282
- () => conversationRuntimeAssemblyRealSnapshot,
283
- );
284
244
  });
285
245
 
286
- mock.module("../daemon/conversation-memory.js", () => ({
287
- prepareMemoryContext: async (
288
- _ctx: unknown,
289
- _content: string,
290
- _id: string,
291
- _signal: AbortSignal,
292
- ) => ({
293
- runMessages: [],
294
- recall: {
295
- enabled: false,
296
- degraded: false,
297
- injectedText: "",
298
-
299
- semanticHits: 0,
300
- injectedTokens: 0,
301
- latencyMs: 0,
302
- tier1Count: 0,
303
- tier2Count: 0,
304
- hybridSearchMs: 0,
305
- },
306
- }),
307
- }));
308
-
309
- let mockApplyRuntimeInjections: (msgs: Message[]) => Message[] = (msgs) => msgs;
310
- mock.module("../daemon/conversation-runtime-assembly.js", () => ({
311
- applyRuntimeInjections: async (msgs: Message[]) => ({
312
- messages: mockApplyRuntimeInjections(msgs),
313
- blocks: {},
314
- }),
315
- stripInjectionsForCompaction: (msgs: Message[]) => msgs,
316
- isSlackChannelConversation: () => false,
317
- getSlackCompactionWatermarkForPrefix: () => null,
318
- loadSlackChronologicalContext: () => null,
319
- loadSlackChronologicalMessages: () => null,
320
- loadSlackActiveThreadFocusBlock: () => null,
321
- assembleSlackChronologicalMessages: () => null,
322
- assembleSlackActiveThreadFocusBlock: () => null,
323
- }));
324
-
325
- mock.module("../daemon/date-context.js", () => ({
326
- formatTurnTimestamp: () => "2026-01-01 (Thursday) 00:00:00 +00:00 (UTC)",
327
- }));
328
-
329
- mock.module("../agent/history-repair/history-repair.js", () => ({
330
- repairHistory: (msgs: Message[]) => ({
331
- messages: msgs,
332
- stats: {
333
- assistantToolResultsMigrated: 0,
334
- missingToolResultsInserted: 0,
335
- orphanToolResultsDowngraded: 0,
336
- consecutiveSameRoleMerged: 0,
337
- },
338
- }),
339
- deepRepairHistory: (msgs: Message[]) => ({ messages: msgs, stats: {} }),
340
- isRepairableOrderingError: () => false,
341
- }));
342
-
343
- const recordUsageMock = mock((..._args: unknown[]) => {});
344
- const setAgentLoopExitReasonOnLatestLogMock = mock(() => {});
345
- const addMessageMock = mock(
346
- (..._args: unknown[]) => ({ id: "mock-msg-id" }) as { id: string },
246
+ // Observation hooks: pass-through spies on the REAL module namespaces — the
247
+ // real writes still land in the per-process test DB and the calls are recorded.
248
+ const recordUsageMock = spyOn(conversationUsage, "recordUsage");
249
+ const setAgentLoopExitReasonOnLatestLogMock = spyOn(
250
+ llmRequestLogStore,
251
+ "setAgentLoopExitReasonOnLatestLog",
347
252
  );
348
- mock.module("../daemon/conversation-usage.js", () => ({
349
- recordUsage: recordUsageMock,
350
- }));
351
-
352
- const resolveAssistantAttachmentsMock = mock(async () => ({
353
- assistantAttachments: [],
354
- emittedAttachments: [],
355
- directiveWarnings: [],
356
- persistedFiles: [],
357
- linkedAttachmentIds: [],
358
- computerUseScreenshotAttachmentIds: [],
359
- }));
360
- mock.module("../daemon/conversation-attachments.js", () => ({
361
- resolveAssistantAttachments: resolveAssistantAttachmentsMock,
362
- approveHostAttachmentRead: async () => true,
363
- formatAttachmentWarnings: () => "",
364
- }));
365
-
366
- mock.module("../daemon/assistant-attachments.js", () => ({
367
- cleanAssistantContent: (content: unknown[]) => ({
368
- cleanedContent: content,
369
- directives: [],
370
- warnings: [],
371
- }),
372
- drainDirectiveDisplayBuffer: (buffer: string) => ({
373
- emitText: buffer,
374
- bufferedRemainder: "",
375
- }),
376
- }));
377
-
378
- mock.module("../daemon/conversation-media-retry.js", () => ({
379
- stripMediaPayloadsForRetry: (msgs: Message[]) => ({
380
- messages: msgs,
381
- modified: false,
382
- replacedBlocks: 0,
383
- latestUserIndex: null,
384
- }),
385
- raceWithTimeout: async () => "completed" as const,
386
- }));
387
-
388
- mock.module("../workspace/turn-commit.js", () => ({
389
- commitTurnChanges: async () => {},
390
- }));
391
-
392
- mock.module("../workspace/git-service.js", () => ({
393
- getWorkspaceGitService: () => ({
394
- ensureInitialized: async () => {},
395
- }),
396
- }));
397
-
398
- mock.module("../daemon/conversation-error.js", () => ({
399
- classifyConversationError: (err: unknown, _ctx: unknown) => {
400
- const message = err instanceof Error ? err.message : String(err);
401
- if (/context.?length.?exceeded/i.test(message)) {
402
- return {
403
- code: "CONTEXT_TOO_LARGE",
404
- userMessage: "Context too large.",
405
- retryable: false,
406
- errorCategory: "context_too_large",
407
- };
408
- }
409
- return {
410
- code: "CONVERSATION_PROCESSING_FAILED",
411
- userMessage: "Something went wrong processing your message.",
412
- retryable: false,
413
- errorCategory: "processing_failed",
414
- };
415
- },
416
- isUserCancellation: (err: unknown, ctx: { aborted?: boolean }) => {
417
- if (!ctx.aborted) {
418
- return false;
419
- }
420
- if (err instanceof DOMException && err.name === "AbortError") {
421
- return true;
422
- }
423
- if (err instanceof Error && err.name === "AbortError") {
424
- return true;
425
- }
426
- return false;
427
- },
428
- buildConversationErrorMessage: (
429
- conversationId: string,
430
- classified: Record<string, unknown>,
431
- ) => ({
432
- type: "conversation_error",
433
- conversationId,
434
- ...classified,
435
- }),
436
- isContextTooLarge: (msg: string) =>
437
- /context.?length.?exceeded|prompt.?is.?too.?long|too many.*input.*tokens/i.test(
438
- msg,
439
- ),
440
- budgetYieldUnrecoveredClassification: () => ({
441
- code: "BUDGET_YIELD_UNRECOVERED",
442
- userMessage:
443
- "I tried to compact this conversation but couldn't fit the next step into the model's context window. Send another message to continue.",
444
- retryable: true,
445
- errorCategory: "budget_yield_unrecovered",
446
- }),
447
- }));
448
-
449
- mock.module("../util/truncate.js", () => ({
450
- truncate: (s: string) => s,
451
- }));
452
-
453
- mock.module("../agent/message-types.js", () => ({
454
- createAssistantMessage: (text: string) => ({
455
- role: "assistant" as const,
456
- content: [{ type: "text", text }],
457
- }),
458
- }));
459
-
460
- mock.module("../persistence/llm-request-log-store.js", () => ({
461
- recordRequestLog: () => {},
462
- backfillMessageIdOnLogs: () => {},
463
- setAgentLoopExitReasonOnLatestLog: setAgentLoopExitReasonOnLatestLogMock,
464
- recordSyntheticAgentErrorMessageLog: () => {},
465
- }));
466
-
467
- mock.module("../memory/archive-store.js", () => ({
468
- insertCompactionEpisode: () => ({
469
- episodeId: "mock-episode-id",
470
- jobId: "mock-job-id",
471
- }),
472
- }));
253
+ const addMessageMock = spyOn(conversationCrud, "addMessage");
473
254
 
474
255
  // ── Imports (after mocks) ────────────────────────────────────────────
475
256
 
@@ -478,8 +259,20 @@ import { estimatePromptTokens } from "../context/token-estimator.js";
478
259
  import type { Conversation } from "../daemon/conversation.js";
479
260
  import { runAgentLoopImpl } from "../daemon/conversation-agent-loop.js";
480
261
  import type { QueueDrainReason } from "../daemon/conversation-queue-manager.js";
262
+ import * as conversationUsage from "../daemon/conversation-usage.js";
263
+ import * as conversationCrud from "../persistence/conversation-crud.js";
264
+ import { initializeDb } from "../persistence/db-init.js";
265
+ import * as llmRequestLogStore from "../persistence/llm-request-log-store.js";
481
266
  import { computeCorrectedOverflowTarget } from "../plugins/defaults/compaction/corrected-target.js";
482
267
  import { asConversation } from "./helpers/mock-conversation.js";
268
+
269
+ beforeAll(async () => {
270
+ await initializeDb();
271
+ });
272
+
273
+ // The loop's crud calls (messages, usage, request logs) run for real against
274
+ // the per-process test DB; every stub conversation pins this id.
275
+ const TEST_CONV_ID = "test-conv";
483
276
  import {
484
277
  createMockProvider,
485
278
  type ScriptedResponse,
@@ -708,16 +501,16 @@ function buildLongConversation(messageCount: number): Message[] {
708
501
 
709
502
  beforeEach(() => {
710
503
  setConfig("llm", {});
504
+ conversationCrud.ensureConversationExists(TEST_CONV_ID, "cadet");
711
505
  mockEstimateTokens = 1000;
712
506
  mockReducerStepFn = null;
713
507
  mockOverflowAction = "fail_gracefully";
714
- mockApplyRuntimeInjections = (msgs) => msgs;
715
508
  recordUsageMock.mockClear();
716
509
  setAgentLoopExitReasonOnLatestLogMock.mockClear();
717
510
  addMessageMock.mockClear();
718
511
  // Reset the plugin registry and re-register every default so the compaction
719
- // pipeline dispatches to the default middleware, which in turn hits the
720
- // mocked collaborators (`syncMessageToDisk`, …) these tests install.
512
+ // pipeline dispatches to the default middleware, whose collaborators
513
+ // (`syncMessageToDisk`, …) run for real against the test DB.
721
514
  resetPluginRegistryAndRegisterDefaults();
722
515
  });
723
516
 
@@ -16,12 +16,10 @@ import type { LoopToolExecutor } from "../agent/loop.js";
16
16
  import type { AssistantEvent } from "../api/index.js";
17
17
  import { stripInjectionsForCompaction } from "../context/strip-injections.js";
18
18
  import type { AttachmentResolutionResult } from "../daemon/conversation-attachments.js";
19
- import { abortScheduledRun } from "../daemon/conversation-lifecycle.js";
20
19
  import {
21
20
  queueConversationNotice,
22
21
  resetConversationNoticesForTests,
23
22
  } from "../daemon/conversation-notices.js";
24
- import { MessageQueue } from "../daemon/conversation-queue-manager.js";
25
23
  import { desktopAutomationLease } from "../desktop/desktop-automation-lease.js";
26
24
  import type { EmitSignalParams } from "../notifications/emit-signal.js";
27
25
  import type { AttentionState } from "../persistence/conversation-attention-store.js";
@@ -42,8 +40,8 @@ import {
42
40
  type UsageAttributionInput,
43
41
  } from "../usage/attribution.js";
44
42
  import { createAbortReason } from "../util/abort-reasons.js";
43
+ import { getWorkspaceDir } from "../util/layout.js";
45
44
  import { getLogger } from "../util/logger.js";
46
- import { getWorkspaceDir } from "../util/platform.js";
47
45
  import { setConfig } from "./helpers/set-config.js";
48
46
 
49
47
  const conversationCrudRealSnapshot = {
@@ -63,7 +61,7 @@ const channelReplyDeliveryRealSnapshot = {
63
61
  };
64
62
  // Disable the catalog default so resolution lands on llm.default.
65
63
  const disabledCatalogDefaultProfiles: Record<string, unknown> = {
66
- balanced: { source: "managed", status: "disabled" },
64
+ balanced: { provider: "cadet", status: "disabled" },
67
65
  };
68
66
 
69
67
  /**
@@ -105,14 +103,6 @@ function seedLlmConfig(options?: {
105
103
 
106
104
  // ── Module mocks (must precede imports of the module under test) ─────
107
105
 
108
- let routeAutoProfileForTest: (() => Promise<void>) | undefined;
109
- mock.module("../daemon/auto-profile-router.js", () => ({
110
- routeAutoProfile: async () => {
111
- await routeAutoProfileForTest?.();
112
- return { profile: "balanced", outcome: "fallback", latencyMs: 0 };
113
- },
114
- }));
115
-
116
106
  // The real AgentLoop resolves the per-conversation ContextWindowManager from
117
107
  // the compaction store keyed by conversationId. These orchestrator tests build
118
108
  // fake conversations whose manager is a canned stub, so register each stub in a
@@ -1127,7 +1117,6 @@ function overflowAfterToolTurnScenario(): NonNullable<
1127
1117
  // ── Tests ────────────────────────────────────────────────────────────
1128
1118
 
1129
1119
  beforeEach(() => {
1130
- routeAutoProfileForTest = undefined;
1131
1120
  setConfig("ui", {});
1132
1121
  seedLlmConfig();
1133
1122
  raceWithTimeoutOutcome = "completed";
@@ -3030,51 +3019,6 @@ describe("session-agent-loop", () => {
3030
3019
  });
3031
3020
 
3032
3021
  describe("user cancellation", () => {
3033
- test("schedule timeout aborts a continuation during Auto profile setup", async () => {
3034
- seedLlmConfig({
3035
- profiles: {
3036
- auto: {
3037
- source: "managed",
3038
- provider: "anthropic",
3039
- model: "test-model",
3040
- },
3041
- },
3042
- activeProfile: "auto",
3043
- });
3044
- const enteredRouter = Promise.withResolvers<void>();
3045
- const releaseRouter = Promise.withResolvers<void>();
3046
- routeAutoProfileForTest = async () => {
3047
- enteredRouter.resolve();
3048
- await releaseRouter.promise;
3049
- };
3050
- const controller = new AbortController();
3051
- const provider = createMockProvider([textResponse("Should not run")]);
3052
- const ctx = makeCtx({
3053
- abortController: controller,
3054
- loopProvider: provider.provider,
3055
- queue: new MessageQueue(),
3056
- prompter: { dispose: () => {} } as Conversation["prompter"],
3057
- secretPrompter: { dispose: () => {} } as Conversation["secretPrompter"],
3058
- accumulatedSurfaceState: new Map(),
3059
- });
3060
- const turn = runAgentLoopImpl(ctx, "Continue report", "msg-1", () => {}, {
3061
- cronRunId: "run-scheduled",
3062
- overrideProfile: "auto",
3063
- });
3064
- try {
3065
- await enteredRouter.promise;
3066
- expect(ctx.currentTurnCronRunId).toBe("run-scheduled");
3067
- abortScheduledRun(ctx, "run-scheduled");
3068
- expect(controller.signal.aborted).toBe(true);
3069
- } finally {
3070
- releaseRouter.resolve();
3071
- await turn;
3072
- }
3073
- expect(provider.calls).toHaveLength(0);
3074
- expect(ctx.isProcessing()).toBe(false);
3075
- expect(ctx.currentTurnCronRunId).toBeUndefined();
3076
- });
3077
-
3078
3022
  test("emits generation_cancelled when abort signal fires", async () => {
3079
3023
  const events: AssistantEvent[] = [];
3080
3024
  const abortController = new AbortController();
@@ -6,7 +6,6 @@
6
6
  * - Missing X-Confirm-Destructive header returns BadRequestError
7
7
  * - Wrong header value returns BadRequestError
8
8
  * - Correct header clears data
9
- * - telemetry_events contains the `conversations_clear_all` audit entry after clear
10
9
  */
11
10
 
12
11
  import { describe, expect, mock, test } from "bun:test";
@@ -34,7 +33,6 @@ import {
34
33
  createConversation,
35
34
  getConversation,
36
35
  } from "../persistence/conversation-crud.js";
37
- import { getTelemetrySqlite } from "../persistence/db-connection.js";
38
36
  import { initializeDb } from "../persistence/db-init.js";
39
37
  import { enforcePolicy } from "../runtime/auth/route-policy.js";
40
38
  import type { AuthContext, Scope } from "../runtime/auth/types.js";
@@ -169,32 +167,4 @@ describe("DELETE /v1/conversations — route handler", () => {
169
167
 
170
168
  expect(getConversation(conv.id)).toBeNull();
171
169
  });
172
-
173
- test("telemetry_events contains conversations_clear_all after successful clear", async () => {
174
- await clearRoute.handler({
175
- pathParams: {},
176
- body: {},
177
- headers: { "x-confirm-destructive": "clear-all-conversations" },
178
- });
179
-
180
- // The audit row lands in the telemetry_events outbox on the dedicated
181
- // telemetry DB; the durable trail persists platform-side once flushed.
182
- const rows = getTelemetrySqlite()!
183
- .query(
184
- "SELECT id, payload FROM telemetry_events WHERE name = 'lifecycle'",
185
- )
186
- .all() as Array<{ id: string; payload: string }>;
187
- const audits = rows
188
- .map((r) => ({
189
- id: r.id,
190
- payload: JSON.parse(r.payload) as Record<string, unknown>,
191
- }))
192
- .filter((r) => r.payload.event_name === "conversations_clear_all");
193
- expect(audits.length).toBeGreaterThanOrEqual(1);
194
- expect(audits[0].payload).toMatchObject({
195
- type: "lifecycle",
196
- daemon_event_id: audits[0].id,
197
- event_name: "conversations_clear_all",
198
- });
199
- });
200
170
  });
@@ -7,7 +7,7 @@ import { afterAll, beforeEach, describe, expect, mock, test } from "bun:test";
7
7
  mock.module("../providers/cloud-proxy/context.js", () => ({
8
8
  resolveCloudProxyContext: async () => ({
9
9
  enabled: true,
10
- cloudBaseUrl: "https://platform.example",
10
+ cloudBaseUrl: "https://test-cloud.mycadet.ai",
11
11
  assistantApiKey: "key",
12
12
  }),
13
13
  }));
@@ -140,7 +140,7 @@ mock.module("../persistence/conversation-queries.js", () => ({
140
140
 
141
141
  const mockStampTurnOutcome = mock(() => {});
142
142
 
143
- mock.module("../telemetry/turn-outcome.js", () => ({
143
+ mock.module("../persistence/turn-outcome.js", () => ({
144
144
  stampTurnOutcome: mockStampTurnOutcome,
145
145
  }));
146
146
 
@@ -180,7 +180,7 @@ import type { SubagentState } from "../subagent/types.js";
180
180
  import {
181
181
  getWorkspacePluginsDir,
182
182
  getWorkspacePromptPath,
183
- } from "../util/platform.js";
183
+ } from "../util/layout.js";
184
184
  import { asConversation } from "./helpers/mock-conversation.js";
185
185
 
186
186
  // `applyRuntimeInjections` self-resolves the Slack active-thread focus block by