@mycadet/assistant 0.12.9 → 0.12.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/Dockerfile +0 -8
  2. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
  3. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  4. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  5. package/node_modules/@mycadet/ces-client/src/http-credentials.ts +18 -1
  6. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  7. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  8. package/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  9. package/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  10. package/openapi.yaml +62 -910
  11. package/package.json +3 -7
  12. package/scripts/build-test-fixtures.ts +1 -1
  13. package/scripts/generate-openapi.ts +22 -6
  14. package/scripts/postinstall.ts +4 -10
  15. package/scripts/run-tests.ts +0 -21
  16. package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
  17. package/src/__tests__/agent-loop.test.ts +0 -76
  18. package/src/__tests__/anthropic-provider.test.ts +6 -6
  19. package/src/__tests__/assert-not-live-db.ts +1 -1
  20. package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
  21. package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
  22. package/src/__tests__/attachments-store.test.ts +1 -1
  23. package/src/__tests__/audit-log-rotation.test.ts +1 -1
  24. package/src/__tests__/btw-routes.test.ts +1 -1
  25. package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
  26. package/src/__tests__/call-conversation-messages.test.ts +0 -5
  27. package/src/__tests__/call-recovery.test.ts +2 -7
  28. package/src/__tests__/call-routes-http.test.ts +0 -12
  29. package/src/__tests__/call-store.test.ts +2 -7
  30. package/src/__tests__/catalog-files.test.ts +7 -5
  31. package/src/__tests__/checker.test.ts +1 -1
  32. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
  33. package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
  34. package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
  35. package/src/__tests__/cloud-profile-guard.test.ts +87 -404
  36. package/src/__tests__/compaction-events.test.ts +2 -2
  37. package/src/__tests__/config-loader-backfill.test.ts +74 -163
  38. package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
  39. package/src/__tests__/config-loader-corrupt.test.ts +10 -10
  40. package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
  41. package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
  42. package/src/__tests__/config-schema.test.ts +26 -27
  43. package/src/__tests__/config-set-route.test.ts +2 -6
  44. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
  45. package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
  46. package/src/__tests__/conversation-agent-loop.test.ts +2 -58
  47. package/src/__tests__/conversation-clear-safety.test.ts +0 -30
  48. package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
  49. package/src/__tests__/conversation-queue.test.ts +1 -1
  50. package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
  51. package/src/__tests__/conversation-skill-tools.test.ts +4 -444
  52. package/src/__tests__/conversation-slash-commands.test.ts +1 -1
  53. package/src/__tests__/conversation-store.test.ts +1 -84
  54. package/src/__tests__/conversation-surface-state.test.ts +0 -16
  55. package/src/__tests__/credential-health-service.test.ts +14 -1
  56. package/src/__tests__/credential-record-retire.test.ts +1 -1
  57. package/src/__tests__/credential-record-write-through.test.ts +1 -1
  58. package/src/__tests__/credential-security-invariants.test.ts +0 -145
  59. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  60. package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
  61. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  62. package/src/__tests__/dictation-profile-store.test.ts +6 -6
  63. package/src/__tests__/disk-usage.test.ts +28 -164
  64. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
  65. package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
  66. package/src/__tests__/emit-event-signal.test.ts +1 -1
  67. package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
  68. package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
  69. package/src/__tests__/guardian-dispatch.test.ts +0 -13
  70. package/src/__tests__/helpers/seed-app.ts +1 -1
  71. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
  72. package/src/__tests__/host-shell-tool.test.ts +1 -1
  73. package/src/__tests__/identity-routes.test.ts +1 -1
  74. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  75. package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
  76. package/src/__tests__/injector-chain.test.ts +1 -1
  77. package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
  78. package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
  79. package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
  80. package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
  81. package/src/__tests__/list-all-apps.test.ts +1 -1
  82. package/src/__tests__/live-workspace-guard.test.ts +2 -2
  83. package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
  84. package/src/__tests__/llm-resolver.test.ts +7 -7
  85. package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
  86. package/src/__tests__/llm-usage-store.test.ts +0 -495
  87. package/src/__tests__/log-export-routes.test.ts +1 -1
  88. package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
  89. package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
  90. package/src/__tests__/memory-config-file-parity.test.ts +1 -1
  91. package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
  92. package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
  93. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  94. package/src/__tests__/onboarding-persona-write.test.ts +1 -1
  95. package/src/__tests__/openai-provider.test.ts +8 -8
  96. package/src/__tests__/path-policy.test.ts +1 -1
  97. package/src/__tests__/persona-resolver.test.ts +1 -1
  98. package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
  99. package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
  100. package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
  101. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
  102. package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
  103. package/src/__tests__/provider-connections-backfill.test.ts +10 -10
  104. package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
  105. package/src/__tests__/resolve-app.test.ts +1 -1
  106. package/src/__tests__/run-due-schedules.test.ts +1 -1
  107. package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
  108. package/src/__tests__/schedule-routes.test.ts +1 -1
  109. package/src/__tests__/schedule-store.test.ts +1 -1
  110. package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
  111. package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
  112. package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
  113. package/src/__tests__/tool-approval-handler.test.ts +1 -1
  114. package/src/__tests__/tool-audit.test.ts +5 -235
  115. package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
  116. package/src/__tests__/tools-get-route.test.ts +1 -1
  117. package/src/__tests__/turn-outcome-read.test.ts +1 -1
  118. package/src/__tests__/twilio-routes.test.ts +0 -1
  119. package/src/__tests__/usage-attribution.test.ts +0 -31
  120. package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
  121. package/src/__tests__/visible-app-context.test.ts +1 -1
  122. package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
  123. package/src/__tests__/workspace-git-service.test.ts +1 -1
  124. package/src/__tests__/workspace-greetings.test.ts +1 -1
  125. package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
  126. package/src/activation/progress-store.ts +1 -1
  127. package/src/activation/turn-hooks.ts +1 -1
  128. package/src/agent/loop.ts +0 -51
  129. package/src/apps/app-store.ts +1 -1
  130. package/src/avatar/__tests__/avatar-store.test.ts +2 -172
  131. package/src/avatar/accent-backfill.ts +1 -1
  132. package/src/avatar/avatar-manifest.ts +1 -1
  133. package/src/avatar/avatar-store.ts +10 -69
  134. package/src/avatar/ensure-raster.ts +1 -1
  135. package/src/avatar/identity-avatar.ts +1 -1
  136. package/src/avatar/sync-avatar.ts +1 -1
  137. package/src/avatar/traits-png-sync.ts +1 -1
  138. package/src/bundler/compiler-tools.ts +1 -1
  139. package/src/bundler/package-resolver.ts +1 -1
  140. package/src/calls/__tests__/call-controller.test.ts +25 -27
  141. package/src/calls/active-call-lease.ts +1 -1
  142. package/src/calls/call-controller.ts +3 -3
  143. package/src/calls/call-domain.ts +4 -8
  144. package/src/calls/call-store.ts +2 -76
  145. package/src/calls/resolve-call-tts-provider.ts +3 -3
  146. package/src/calls/twilio-config.ts +3 -3
  147. package/src/calls/twilio-rest.ts +2 -2
  148. package/src/calls/voice-ingress-preflight.ts +2 -2
  149. package/src/cli/bundled-modules.ts +0 -2
  150. package/src/cli/commands/__tests__/apps.test.ts +1 -1
  151. package/src/cli/commands/__tests__/plugins.test.ts +9 -66
  152. package/src/cli/commands/__tests__/ps.test.ts +67 -0
  153. package/src/cli/commands/auth.help.ts +2 -2
  154. package/src/cli/commands/avatar.ts +1 -1
  155. package/src/cli/commands/changelog.ts +1 -1
  156. package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
  157. package/src/cli/commands/cloud/index.help.ts +1 -1
  158. package/src/cli/commands/cloud/index.ts +2 -2
  159. package/src/cli/commands/db/refresh.ts +1 -1
  160. package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
  161. package/src/cli/commands/db/repair.ts +1 -1
  162. package/src/cli/commands/db/status.ts +1 -1
  163. package/src/cli/commands/inference-profiles.ts +1 -12
  164. package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
  165. package/src/cli/commands/memory/index.help.ts +1 -43
  166. package/src/cli/commands/memory/memory-v3.ts +0 -64
  167. package/src/cli/commands/plugins.ts +54 -205
  168. package/src/cli/commands/ps.ts +5 -2
  169. package/src/cli/commands/status.ts +1 -1
  170. package/src/cli/index.help.ts +0 -2
  171. package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
  172. package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
  173. package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
  174. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
  175. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
  176. package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
  177. package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
  178. package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
  179. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
  180. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
  181. package/src/cli/lib/diff-plugin.ts +1 -1
  182. package/src/cli/lib/inspect-plugin.ts +13 -97
  183. package/src/cli/lib/install-from-cloud.ts +1 -1
  184. package/src/cli/lib/install-from-github.ts +75 -154
  185. package/src/cli/lib/install-plugin-dependencies.ts +1 -1
  186. package/src/cli/lib/list-installed-plugins.ts +1 -1
  187. package/src/cli/lib/open-browser.ts +1 -1
  188. package/src/cli/lib/plugin-catalog-cache.ts +8 -51
  189. package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
  190. package/src/cli/lib/plugin-details.ts +5 -27
  191. package/src/cli/lib/plugin-marketplace.ts +18 -266
  192. package/src/cli/lib/search-plugins.ts +23 -43
  193. package/src/cli/lib/toggle-plugin.ts +1 -1
  194. package/src/cli/lib/uninstall-plugin.ts +1 -1
  195. package/src/cli/lib/upgrade-plugin.ts +3 -49
  196. package/src/cli/program.ts +1 -3
  197. package/src/cli.ts +1 -1
  198. package/src/cloud/client.ts +0 -6
  199. package/src/cloud/consent-cache.test.ts +22 -201
  200. package/src/cloud/consent-cache.ts +16 -111
  201. package/src/cloud/sync-identity.ts +1 -1
  202. package/src/config/__tests__/chat-settings.test.ts +1 -1
  203. package/src/config/__tests__/cloud-identity.test.ts +15 -2
  204. package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
  205. package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
  206. package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
  207. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
  208. package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
  209. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
  210. package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
  211. package/src/config/__tests__/profile-materialization.test.ts +2 -4
  212. package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
  213. package/src/config/acp-agent-write.ts +1 -1
  214. package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
  215. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  216. package/src/config/call-site-defaults.ts +0 -6
  217. package/src/config/cloud-identity.ts +12 -5
  218. package/src/config/composer-preferences.ts +1 -1
  219. package/src/config/default-profile-catalog.ts +8 -75
  220. package/src/config/default-profile-names.ts +2 -25
  221. package/src/config/env-registry.ts +1 -14
  222. package/src/config/env.ts +8 -6
  223. package/src/config/llm-resolver.ts +1 -2
  224. package/src/config/loader.ts +13 -17
  225. package/src/config/profile-materialization.ts +1 -1
  226. package/src/config/schema.ts +1 -7
  227. package/src/config/schemas/call-site-catalog.ts +0 -7
  228. package/src/config/schemas/llm.ts +25 -32
  229. package/src/config/seed-inference-profiles.ts +16 -17
  230. package/src/config/skills.ts +2 -2
  231. package/src/config/sync-gated-profiles.ts +6 -24
  232. package/src/credential-health/credential-health-service.ts +10 -3
  233. package/src/daemon/approval-generators.ts +3 -3
  234. package/src/daemon/config-watcher.ts +2 -2
  235. package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
  236. package/src/daemon/conversation-agent-loop.ts +6 -97
  237. package/src/daemon/conversation-process.ts +1 -1
  238. package/src/daemon/conversation-skill-tools.ts +4 -72
  239. package/src/daemon/conversation-store.ts +1 -1
  240. package/src/daemon/conversation-surface-state.ts +0 -33
  241. package/src/daemon/conversation-surfaces.ts +1 -86
  242. package/src/daemon/conversation-tool-setup.test.ts +1 -1
  243. package/src/daemon/conversation-tool-setup.ts +0 -23
  244. package/src/daemon/conversation.ts +3 -5
  245. package/src/daemon/daemon-control.ts +3 -3
  246. package/src/daemon/dictation-profile-store.ts +3 -3
  247. package/src/daemon/event-loop-watchdog.test.ts +2 -198
  248. package/src/daemon/event-loop-watchdog.ts +0 -185
  249. package/src/daemon/external-plugins-bootstrap.ts +1 -1
  250. package/src/daemon/first-greeting.ts +1 -1
  251. package/src/daemon/handlers/skills.ts +1 -1
  252. package/src/daemon/host-app-control-proxy.ts +1 -1
  253. package/src/daemon/host-cu-proxy.ts +2 -2
  254. package/src/daemon/identity-helpers.ts +1 -1
  255. package/src/daemon/lifecycle.ts +11 -15
  256. package/src/daemon/main.ts +1 -1
  257. package/src/daemon/now-scratchpad.ts +1 -1
  258. package/src/daemon/process-message.ts +4 -4
  259. package/src/daemon/profiler-run-store.ts +2 -2
  260. package/src/daemon/providers-setup.ts +2 -2
  261. package/src/daemon/shutdown-handlers.ts +0 -10
  262. package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
  263. package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
  264. package/src/daemon/tool-side-effects.ts +1 -1
  265. package/src/desktop/desktop-session-manager.ts +1 -1
  266. package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
  267. package/src/heartbeat/heartbeat-service.ts +1 -1
  268. package/src/home/feed-writer.ts +1 -1
  269. package/src/home/home-greeting-cache.ts +1 -1
  270. package/src/home/relationship-state-writer.ts +2 -2
  271. package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
  272. package/src/hooks/hook-loader.ts +2 -2
  273. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  274. package/src/inbound/oauth-callback-url.ts +3 -3
  275. package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
  276. package/src/ipc/socket-path.ts +1 -1
  277. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
  278. package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
  279. package/src/live-voice/live-voice-session.ts +3 -66
  280. package/src/mcp/__tests__/effective-config.test.ts +1 -1
  281. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
  282. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
  283. package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
  284. package/src/mcp/__tests__/reload-signal.test.ts +1 -1
  285. package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
  286. package/src/mcp/reload-signal.ts +1 -1
  287. package/src/mcp/workspace-mcp-config.ts +1 -23
  288. package/src/messaging/draft-store.ts +1 -1
  289. package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
  290. package/src/monitoring/__tests__/page-cache.test.ts +1 -1
  291. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  292. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
  293. package/src/monitoring/active-conversations.ts +1 -1
  294. package/src/monitoring/control.ts +1 -1
  295. package/src/monitoring/daemon-boot-time.ts +1 -1
  296. package/src/monitoring/daemon-heartbeat.ts +1 -1
  297. package/src/monitoring/page-cache.ts +1 -1
  298. package/src/monitoring/plugin-auto-update.ts +1 -7
  299. package/src/monitoring/plugin-source-watch.ts +1 -1
  300. package/src/monitoring/recovery/db.ts +1 -1
  301. package/src/monitoring/recovery/inflight-content.ts +1 -1
  302. package/src/monitoring/resource-sampler.ts +3 -14
  303. package/src/monitoring/stall-capture.ts +1 -1
  304. package/src/monitoring/worker.ts +9 -76
  305. package/src/monitoring/workspace-git-heartbeat.ts +1 -1
  306. package/src/oauth/connect-orchestrator.ts +4 -4
  307. package/src/permissions/checker.ts +1 -1
  308. package/src/permissions/workspace-policy.ts +1 -1
  309. package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
  310. package/src/persistence/__tests__/message-content-file.test.ts +1 -1
  311. package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
  312. package/src/persistence/attachments-store.ts +1 -1
  313. package/src/persistence/conversation-crud.ts +1 -38
  314. package/src/persistence/conversation-directories.ts +1 -1
  315. package/src/persistence/conversation-types.ts +0 -8
  316. package/src/persistence/db-async-query.ts +1 -1
  317. package/src/persistence/db-connection.ts +11 -1
  318. package/src/persistence/db-init.ts +1 -1
  319. package/src/persistence/db-maintenance.ts +1 -1
  320. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
  321. package/src/persistence/embeddings/embedding-local.ts +4 -4
  322. package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
  323. package/src/persistence/embeddings/qdrant-client.ts +1 -1
  324. package/src/persistence/embeddings/qdrant-manager.ts +1 -1
  325. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
  326. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
  327. package/src/persistence/job-handlers/cleanup.ts +8 -17
  328. package/src/persistence/llm-usage-store.ts +2 -229
  329. package/src/persistence/message-content-file.ts +1 -1
  330. package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
  331. package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
  332. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  333. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  334. package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
  335. package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
  336. package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
  337. package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
  338. package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
  339. package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
  340. package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
  341. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
  342. package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
  343. package/src/persistence/migrations/helpers/relocation.ts +1 -1
  344. package/src/persistence/migrations/run-migrations.ts +1 -1
  345. package/src/persistence/migrations/validate-migration-state.ts +1 -1
  346. package/src/persistence/raw-query.ts +1 -29
  347. package/src/persistence/slow-sync-log.ts +0 -23
  348. package/src/persistence/steps.ts +2 -0
  349. package/src/{telemetry → persistence}/tool-audit.ts +6 -121
  350. package/src/plugin-api/index.ts +1 -1
  351. package/src/plugin-api/plugin-name-env.ts +1 -1
  352. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
  353. package/src/plugins/collect-source-versions.ts +1 -1
  354. package/src/plugins/defaults/channel/package.json +1 -1
  355. package/src/plugins/defaults/cloud-hosted/package.json +1 -1
  356. package/src/plugins/defaults/compaction/package.json +1 -1
  357. package/src/plugins/defaults/documents/package.json +1 -1
  358. package/src/plugins/defaults/empty-response/package.json +1 -1
  359. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  360. package/src/plugins/defaults/image-fallback/package.json +1 -1
  361. package/src/plugins/defaults/image-recovery/package.json +1 -1
  362. package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
  363. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
  364. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
  365. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
  366. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
  367. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
  368. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
  369. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
  370. package/src/plugins/defaults/memory/package.json +1 -1
  371. package/src/plugins/defaults/memory/paths.ts +4 -4
  372. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  373. package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
  374. package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
  375. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  376. package/src/plugins/defaults/memory/startup.ts +1 -22
  377. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
  378. package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
  379. package/src/plugins/defaults/memory/worker-control.ts +1 -1
  380. package/src/plugins/defaults/memory/worker.ts +2 -2
  381. package/src/plugins/defaults/session/package.json +1 -1
  382. package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
  383. package/src/plugins/defaults/task-progress/package.json +1 -1
  384. package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
  385. package/src/plugins/defaults/title-generate/package.json +1 -1
  386. package/src/plugins/defaults/tool-error/package.json +1 -1
  387. package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
  388. package/src/plugins/defaults/turn-context/package.json +1 -1
  389. package/src/plugins/defaults/workspace/injectors.ts +1 -1
  390. package/src/plugins/defaults/workspace/package.json +1 -1
  391. package/src/plugins/disabled-state.ts +1 -1
  392. package/src/plugins/ensure-plugin-api-shim.ts +1 -1
  393. package/src/plugins/ensure-shared-dep-links.ts +1 -1
  394. package/src/plugins/installed-plugin-dirs.ts +1 -1
  395. package/src/plugins/mcp-servers.ts +7 -9
  396. package/src/plugins/mtime-cache.ts +2 -2
  397. package/src/plugins/source-versions.ts +1 -1
  398. package/src/prompts/bootstrap-cleanup.ts +1 -1
  399. package/src/prompts/persona-resolver.ts +1 -1
  400. package/src/prompts/sections.ts +2 -2
  401. package/src/prompts/system-prompt.ts +10 -42
  402. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
  403. package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
  404. package/src/providers/cadet/client.ts +1 -1
  405. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
  406. package/src/providers/inference/adapter-factory.ts +1 -1
  407. package/src/providers/inference/backfill.ts +3 -10
  408. package/src/providers/inference/profile-probe.ts +1 -1
  409. package/src/providers/retry.ts +0 -2
  410. package/src/providers/types.ts +0 -7
  411. package/src/providers/usage-tracking.ts +1 -1
  412. package/src/routes/__tests__/route-host.test.ts +1 -1
  413. package/src/routes/control.ts +1 -1
  414. package/src/routes/route-host-client.ts +1 -1
  415. package/src/routes/worker.ts +2 -2
  416. package/src/runtime/agent-wake.ts +1 -1
  417. package/src/runtime/assistant-stream-state.ts +1 -1
  418. package/src/runtime/auth/token-service.ts +1 -1
  419. package/src/runtime/background-job-runner.ts +1 -1
  420. package/src/runtime/middleware/twilio-validation.ts +2 -2
  421. package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
  422. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
  423. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
  424. package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
  425. package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
  426. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +72 -298
  427. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
  428. package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
  429. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
  430. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  431. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  432. package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
  433. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
  434. package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
  435. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
  436. package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
  437. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
  438. package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
  439. package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
  440. package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
  441. package/src/runtime/routes/app-management-routes.ts +1 -1
  442. package/src/runtime/routes/attachment-routes.ts +1 -1
  443. package/src/runtime/routes/audit-routes.ts +1 -1
  444. package/src/runtime/routes/avatar-routes.ts +3 -10
  445. package/src/runtime/routes/cloud-routes.ts +3 -3
  446. package/src/runtime/routes/content-source-routes.ts +1 -1
  447. package/src/runtime/routes/conversation-query-routes.ts +49 -706
  448. package/src/runtime/routes/conversation-routes.ts +1 -38
  449. package/src/runtime/routes/debug-routes.ts +1 -1
  450. package/src/runtime/routes/deprecated-route-context.ts +5 -61
  451. package/src/runtime/routes/heartbeat-routes.ts +1 -1
  452. package/src/runtime/routes/identity-routes.ts +1 -1
  453. package/src/runtime/routes/index.ts +0 -6
  454. package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
  455. package/src/runtime/routes/inference-profiles-routes.ts +48 -21
  456. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
  457. package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
  458. package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
  459. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
  460. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
  461. package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
  462. package/src/runtime/routes/log-export-routes.ts +17 -15
  463. package/src/runtime/routes/migration-rollback-routes.ts +1 -1
  464. package/src/runtime/routes/migration-routes.ts +2 -3
  465. package/src/runtime/routes/monitoring-routes.ts +2 -2
  466. package/src/runtime/routes/oauth-providers.ts +5 -5
  467. package/src/runtime/routes/plugins-routes.ts +38 -163
  468. package/src/runtime/routes/profiler-routes.ts +1 -1
  469. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  470. package/src/runtime/routes/sanity-routes.ts +1 -1
  471. package/src/runtime/routes/schedule-routes.ts +1 -1
  472. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  473. package/src/runtime/routes/settings-routes.ts +1 -1
  474. package/src/runtime/routes/sounds-config-routes.ts +1 -1
  475. package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
  476. package/src/runtime/routes/user-route-dispatcher.ts +1 -3
  477. package/src/runtime/routes/user-route-import.ts +1 -1
  478. package/src/runtime/routes/user-route-resolution.ts +1 -1
  479. package/src/runtime/routes/user-routes-cli.ts +1 -1
  480. package/src/runtime/routes/workspace-commit-routes.ts +1 -1
  481. package/src/runtime/routes/workspace-greetings.ts +1 -1
  482. package/src/runtime/routes/workspace-routes.ts +1 -1
  483. package/src/runtime/routes/workspace-utils.ts +1 -1
  484. package/src/runtime/sync/resource-sync-events.ts +1 -1
  485. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
  486. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
  487. package/src/schedule/plugin-schedule-availability.ts +1 -1
  488. package/src/schedule/plugin-schedule-declarations.ts +1 -1
  489. package/src/schedule/run-script.ts +1 -1
  490. package/src/schedule/scheduler.ts +1 -11
  491. package/src/schedule/worker-control.ts +1 -1
  492. package/src/schedule/worker.ts +3 -3
  493. package/src/security/oauth2.ts +2 -2
  494. package/src/security/secret-allowlist.ts +1 -1
  495. package/src/signals/cancel.ts +1 -1
  496. package/src/signals/conversation-undo.ts +1 -1
  497. package/src/signals/emit-event.ts +1 -1
  498. package/src/signals/event-stream.ts +1 -1
  499. package/src/signals/user-message.ts +1 -1
  500. package/src/skills/catalog-install.ts +2 -1
  501. package/src/skills/clawhub.ts +1 -1
  502. package/src/skills/cloud-store.ts +1 -1
  503. package/src/skills/path-classifier.ts +1 -1
  504. package/src/skills/skill-history.ts +1 -1
  505. package/src/skills/skillssh-registry.ts +1 -1
  506. package/src/skills/uninstall.ts +1 -1
  507. package/src/skills/workspace-skill-md-signature.ts +1 -1
  508. package/src/subagent/manager.ts +1 -1
  509. package/src/theme/workspace-theme.ts +1 -1
  510. package/src/tools/browser/auth-cache.ts +1 -1
  511. package/src/tools/browser/browser-manager.ts +1 -1
  512. package/src/tools/browser/runtime-check.ts +1 -1
  513. package/src/tools/executor.ts +4 -4
  514. package/src/tools/filesystem/write.ts +1 -1
  515. package/src/tools/permission-checker.ts +2 -51
  516. package/src/tools/run-standalone.ts +1 -1
  517. package/src/tools/skills/format-input-schema.ts +1 -1
  518. package/src/tools/skills/load.ts +1 -1
  519. package/src/tools/skills/scaffold-cloud.ts +0 -32
  520. package/src/tools/terminal/safe-env.ts +1 -2
  521. package/src/tools/terminal/sanitized-bash.ts +1 -1
  522. package/src/tools/terminal/shell.ts +1 -1
  523. package/src/tools/tool-approval-handler.ts +4 -1
  524. package/src/tools/workflows/manage-workflows.ts +2 -2
  525. package/src/tools/workflows/run-workflow.test.ts +1 -1
  526. package/src/tools/workspace-tools/loader.ts +1 -1
  527. package/src/tts/synthesis-stream.ts +2 -2
  528. package/src/usage/attribution.ts +1 -11
  529. package/src/util/browser.ts +1 -1
  530. package/src/util/bun-runtime.ts +2 -1
  531. package/src/util/device-id.ts +1 -1
  532. package/src/util/disk-usage.ts +4 -139
  533. package/src/util/layout.ts +3 -3
  534. package/src/util/logger.ts +1 -1
  535. package/src/util/logs-db-path.ts +1 -1
  536. package/src/util/memory-db-path.ts +1 -1
  537. package/src/util/{platform.ts → os.ts} +5 -30
  538. package/src/util/process-tree.ts +19 -0
  539. package/src/util/sqlite3-runtime.ts +1 -1
  540. package/src/util/telemetry-db-path.ts +1 -1
  541. package/src/watcher/__tests__/engine.test.ts +0 -23
  542. package/src/watcher/engine.ts +0 -7
  543. package/src/windows-compiled-cli.ts +0 -4
  544. package/src/windows-compiled-worker-entry.ts +0 -6
  545. package/src/workflows/leaf-runner.test.ts +1 -1
  546. package/src/workflows/leaf-runner.ts +1 -1
  547. package/src/workflows/library.ts +1 -1
  548. package/src/workspace/adaptive-thinking-repair.ts +5 -24
  549. package/src/workspace/byok-default-profile-ensure.ts +24 -26
  550. package/src/workspace/custom-profile-ensure.ts +2 -2
  551. package/src/workspace/git-service.ts +1 -1
  552. package/src/workspace/hatched-date.ts +1 -1
  553. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
  554. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  555. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
  556. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
  557. package/src/workspace/migrations/registry.ts +0 -4
  558. package/src/workspace/turn-commit.ts +1 -1
  559. package/docs/activation-funnel-telemetry.md +0 -324
  560. package/scripts/bundled-plugin-packages.ts +0 -154
  561. package/scripts/generate-bundled-plugin-packages.ts +0 -29
  562. package/src/__tests__/activation-early-marking.test.ts +0 -114
  563. package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
  564. package/src/__tests__/config-get-vision-flag.test.ts +0 -139
  565. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
  566. package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
  567. package/src/__tests__/telemetry-routes.test.ts +0 -182
  568. package/src/__tests__/turn-events-store.test.ts +0 -376
  569. package/src/__tests__/ui-channel-variants.test.ts +0 -53
  570. package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
  571. package/src/avatar/avatar-changed-telemetry.ts +0 -128
  572. package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
  573. package/src/cli/commands/telemetry.help.ts +0 -27
  574. package/src/cli/commands/telemetry.ts +0 -83
  575. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
  576. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
  577. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
  578. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
  579. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
  580. package/src/cli/lib/bundled-marketplace.json +0 -1575
  581. package/src/cli/lib/bundled-plugin-packages.json +0 -827
  582. package/src/cli/lib/bundled-plugin-packages.ts +0 -87
  583. package/src/cli/lib/plugin-catalog-local.ts +0 -94
  584. package/src/cli/lib/plugin-pin-history.ts +0 -276
  585. package/src/cloud/feature-gate.ts +0 -8
  586. package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
  587. package/src/config/cloud-rehydration.ts +0 -35
  588. package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
  589. package/src/daemon/auto-profile-router.ts +0 -428
  590. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
  591. package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
  592. package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
  593. package/src/monitoring/db-integrity-check.ts +0 -163
  594. package/src/monitoring/db-integrity-sample.ts +0 -176
  595. package/src/monitoring/oom-kill-reporter.ts +0 -469
  596. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
  597. package/src/onboarding/onboarding-events-store.ts +0 -296
  598. package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
  599. package/src/persistence/lifecycle-events-store.test.ts +0 -134
  600. package/src/persistence/lifecycle-events-store.ts +0 -110
  601. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
  602. package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
  603. package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
  604. package/src/runtime/routes/auto-profile-routes.ts +0 -83
  605. package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
  606. package/src/runtime/routes/telemetry-routes.ts +0 -274
  607. package/src/security/auth-fallback-events-store.ts +0 -57
  608. package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
  609. package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
  610. package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
  611. package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
  612. package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
  613. package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
  614. package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
  615. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
  616. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
  617. package/src/telemetry/activation-funnel.ts +0 -172
  618. package/src/telemetry/config-setting-events-store.ts +0 -40
  619. package/src/telemetry/config-setting-snapshot.ts +0 -170
  620. package/src/telemetry/flush-checkpoints.ts +0 -70
  621. package/src/telemetry/live-voice-funnel.ts +0 -185
  622. package/src/telemetry/memory-corpus-size.test.ts +0 -120
  623. package/src/telemetry/memory-corpus-size.ts +0 -184
  624. package/src/telemetry/memory-tier-reporter.test.ts +0 -195
  625. package/src/telemetry/memory-tier-reporter.ts +0 -130
  626. package/src/telemetry/phone-call-funnel.ts +0 -144
  627. package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
  628. package/src/telemetry/skill-loaded-events-store.ts +0 -39
  629. package/src/telemetry/telemetry-event-sources.test.ts +0 -223
  630. package/src/telemetry/telemetry-event-sources.ts +0 -597
  631. package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
  632. package/src/telemetry/telemetry-events-outbox.ts +0 -237
  633. package/src/telemetry/telemetry-main-db.ts +0 -48
  634. package/src/telemetry/telemetry-wire-source.json +0 -4
  635. package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
  636. package/src/telemetry/telemetry-wire-validation.ts +0 -162
  637. package/src/telemetry/telemetry-wire.generated.ts +0 -483
  638. package/src/telemetry/tool-executed-events-store.test.ts +0 -210
  639. package/src/telemetry/tool-executed-events-store.ts +0 -102
  640. package/src/telemetry/trace-collection-policy.test.ts +0 -28
  641. package/src/telemetry/trace-collection-policy.ts +0 -30
  642. package/src/telemetry/turn-events-store.ts +0 -216
  643. package/src/telemetry/turn-trace-store.test.ts +0 -884
  644. package/src/telemetry/turn-trace-store.ts +0 -399
  645. package/src/telemetry/types.test.ts +0 -38
  646. package/src/telemetry/types.ts +0 -780
  647. package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
  648. package/src/telemetry/usage-telemetry-reporter.ts +0 -566
  649. package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
  650. package/src/telemetry/watchdog-direct-emit.ts +0 -104
  651. package/src/telemetry/watchdog-events-store.ts +0 -31
  652. package/src/tools/ui-surface/channel-variants.ts +0 -52
  653. package/src/watcher/__tests__/telemetry.test.ts +0 -178
  654. package/src/watcher/telemetry.ts +0 -93
  655. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
  656. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
  657. /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
  658. /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
@@ -44,12 +44,6 @@ export const SLOW_SYNC_THRESHOLD_MS = ((): number => {
44
44
  return Number.isFinite(raw) && raw > 0 ? raw : 1000;
45
45
  })();
46
46
 
47
- /**
48
- * `check_name` for slow-sync telemetry events. Stable so downstream
49
- * grouping stays consistent; keep it in sync with any admin query.
50
- */
51
- export const SLOW_SYNC_CHECK_NAME = "slow_sync_operation";
52
-
53
47
  /** One recorded section entry: a static label plus monotonic start/end stamps. */
54
48
  export interface SectionMark {
55
49
  label: string;
@@ -157,23 +151,6 @@ export function reportSlowSync(
157
151
  { label, elapsedMs, ...detail },
158
152
  "Slow synchronous DB operation blocked the event loop",
159
153
  );
160
- // Record telemetry via a lazy dynamic import. A static import would pull the
161
- // telemetry → consent-cache → config/loader chain into the module graph of
162
- // every raw-query / conversation-load caller, where a test's `mock.module`
163
- // of the loader leaks across the shared test process and breaks unrelated
164
- // files at eval time. Loading it only on the rare slow path keeps that chain
165
- // off the hot path's static graph; best-effort, so a failure is swallowed.
166
- void import("../telemetry/watchdog-events-store.js")
167
- .then(({ recordWatchdogEvent }) => {
168
- recordWatchdogEvent({
169
- checkName: SLOW_SYNC_CHECK_NAME,
170
- value: elapsedMs,
171
- detail: { label, ...detail },
172
- });
173
- })
174
- .catch(() => {
175
- // Telemetry is best-effort — never let it escape the timed section.
176
- });
177
154
  }
178
155
 
179
156
  /**
@@ -497,6 +497,7 @@ import { migrateNormalizeOpencodeHostConnections } from "./migrations/383-normal
497
497
  import { migrateAddDocumentRevision } from "./migrations/384-add-document-revision.js";
498
498
  import { migrateCreateDocumentRevisions } from "./migrations/385-create-document-revisions.js";
499
499
  import { migrateConversationsLastReopenedAt } from "./migrations/386-conversations-last-reopened-at.js";
500
+ import { migrateDropTelemetryTables } from "./migrations/387-drop-telemetry-tables.js";
500
501
  import type { MigrationStep } from "./migrations/run-migrations.js";
501
502
 
502
503
  export const migrationSteps: MigrationStep[] = [
@@ -1667,4 +1668,5 @@ export const migrationSteps: MigrationStep[] = [
1667
1668
  migrateAddDocumentRevision,
1668
1669
  migrateCreateDocumentRevisions,
1669
1670
  migrateConversationsLastReopenedAt,
1671
+ migrateDropTelemetryTables,
1670
1672
  ];
@@ -1,36 +1,20 @@
1
1
  /**
2
- * Direct terminals for tool-execution auditing and telemetry.
2
+ * Direct terminals for tool-execution auditing.
3
3
  *
4
4
  * The executor and its permission/approval collaborators call these functions
5
5
  * inline as each tool call reaches a terminal outcome (executed / error /
6
- * denied / prompted). Each function owns exactly one side effect:
6
+ * denied). Each function owns exactly one side effect:
7
7
  *
8
8
  * - `recordToolExecuted` / `recordToolError` / `recordToolDenied` write the
9
9
  * always-on `tool_invocations` audit row (redacting secrets from the
10
10
  * stored input/result).
11
- * - `recordToolPermissionPrompted` / `recordToolPermissionDecided` write the
12
- * consent-gated `permission_prompt` and `permission_decided`
13
- * lifecycle-telemetry rows. Both are called from the one site that owns an
14
- * interactive prompt (`tools/permission-checker.ts`), so every prompt has
15
- * exactly one decision and the two series reconcile.
16
11
  * - `logToolFailure` emits the operator-facing failure log.
17
12
  *
18
- * The telemetry-only columns (payload sizes + model attribution) are the
19
- * single write-time privacy gate for `tool_executed` telemetry: on a confirmed
20
- * `share_analytics` opt-out they persist as NULL, which the projection's
21
- * `arg_bytes IS NOT NULL` filter excludes permanently. An unknown consent
22
- * state (cold cache) populates the columns — NULLing them would destroy the
23
- * data irreversibly, and consent is enforced again at flush time and platform
24
- * ingest, so opted-out rows never leave the device. The audit fields
25
- * themselves (tool name, decision, redacted input/result previews, duration)
26
- * are unaffected — `tool_invocations` is a local always-on audit log.
13
+ * The payload-size + model-attribution columns are part of the local audit
14
+ * row — `tool_invocations` is a local always-on audit log and nothing in it
15
+ * ever leaves the device.
27
16
  */
28
17
 
29
- import { getRawShareAnalytics } from "../cloud/consent-cache.js";
30
- import {
31
- type LifecycleEventAttributes,
32
- recordLifecycleEvent,
33
- } from "../persistence/lifecycle-events-store.js";
34
18
  import { redactJsonStringLeaves } from "../security/redact-json.js";
35
19
  import { redactSensitiveFields } from "../security/redaction.js";
36
20
  import { redactSecrets } from "../security/secret-scanner.js";
@@ -154,87 +138,6 @@ export function recordToolDenied(entry: DeniedAuditEntry): void {
154
138
  });
155
139
  }
156
140
 
157
- /**
158
- * How an interactive permission prompt ended.
159
- *
160
- * `allow` / `deny` are answers a human gave. `abandoned` covers every way a
161
- * prompt stops without one: it timed out, a new user message superseded it,
162
- * the turn was cancelled, or the prompter was disposed (client disconnect /
163
- * conversation teardown). The daemon resolves all of those to a deny for the
164
- * agent loop, so without this bucket they are indistinguishable from a human
165
- * saying no.
166
- */
167
- export type PermissionPromptOutcome = "allow" | "deny" | "abandoned";
168
-
169
- /**
170
- * Grouping dimensions recorded on both halves of a permission-prompt pair.
171
- * The tool and its risk are always known at the prompt site, so they tighten
172
- * to required; the rest are the lifecycle attributes as declared. Metadata
173
- * only: never a file path, a command string, or any tool input.
174
- */
175
- export interface PermissionPromptTelemetry extends LifecycleEventAttributes {
176
- toolName: string;
177
- riskLevel: string;
178
- }
179
-
180
- /**
181
- * Server bounds on the lifecycle `event_name` and `tool_name`. A field over
182
- * its bound fails validation, and a failed event is acked and discarded rather
183
- * than retried, so both are clamped here. `event_name` has one variable-length
184
- * part (the tool name, which can be a long `mcp__server__tool` id) and is much
185
- * the tighter of the two, which is why `tool_name` carries the full-length
186
- * value consumers join a prompt to its decision on.
187
- */
188
- const LIFECYCLE_EVENT_NAME_LIMIT = 64;
189
- const LIFECYCLE_TOOL_NAME_LIMIT = 255;
190
-
191
- function permissionEventName(
192
- prefix: string,
193
- toolName: string,
194
- suffix: string,
195
- ): string {
196
- const budget = LIFECYCLE_EVENT_NAME_LIMIT - prefix.length - suffix.length;
197
- return `${prefix}${toolName.slice(0, Math.max(budget, 0))}${suffix}`;
198
- }
199
-
200
- function recordPermissionLifecycleEvent(
201
- eventName: string,
202
- entry: PermissionPromptTelemetry,
203
- failureMessage: string,
204
- ): void {
205
- try {
206
- recordLifecycleEvent(eventName, {
207
- ...entry,
208
- toolName: entry.toolName.slice(0, LIFECYCLE_TOOL_NAME_LIMIT),
209
- });
210
- } catch (err) {
211
- log.warn({ err, eventName, toolName: entry.toolName }, failureMessage);
212
- }
213
- }
214
-
215
- /** Record the consent-gated telemetry row for an interactive permission prompt. */
216
- export function recordToolPermissionPrompted(
217
- entry: PermissionPromptTelemetry,
218
- ): void {
219
- recordPermissionLifecycleEvent(
220
- permissionEventName("permission_prompt:", entry.toolName, ""),
221
- entry,
222
- "Failed to record permission prompt telemetry",
223
- );
224
- }
225
-
226
- /** Record the consent-gated telemetry row for how that prompt ended. */
227
- export function recordToolPermissionDecided(
228
- entry: PermissionPromptTelemetry,
229
- outcome: PermissionPromptOutcome,
230
- ): void {
231
- recordPermissionLifecycleEvent(
232
- permissionEventName("permission_decided:", entry.toolName, `:${outcome}`),
233
- entry,
234
- "Failed to record permission decision telemetry",
235
- );
236
- }
237
-
238
141
  /** Operator-facing failure log: warn for expected failures, error otherwise. */
239
142
  function logToolFailure(entry: ErrorAuditEntry): void {
240
143
  const meta = {
@@ -303,32 +206,14 @@ function redactToolInput(
303
206
  type TelemetryColumns = Pick<ToolInvocationRecord, "argBytes" | "resultBytes"> &
304
207
  UsageAttributionColumns;
305
208
 
306
- const NULL_TELEMETRY_COLUMNS: TelemetryColumns = {
307
- argBytes: null,
308
- resultBytes: null,
309
- provider: null,
310
- model: null,
311
- inferenceProfile: null,
312
- inferenceProfileSource: null,
313
- };
314
-
315
209
  /**
316
- * Telemetry-only columns (payload sizes + model attribution). NULLed only on a
317
- * confirmed `share_analytics` opt-out — the projection's `arg_bytes IS NOT
318
- * NULL` filter excludes NULL rows permanently (the same mechanism that
319
- * excludes legacy pre-migration rows, see tool-executed-events-store.ts), so
320
- * an unknown consent state (cold cache) must populate the columns rather than
321
- * destroy them. Consent is enforced again at flush time and platform ingest,
322
- * so opted-out rows never ship.
210
+ * Payload sizes + model attribution, part of the local audit row.
323
211
  */
324
212
  function telemetryColumns(
325
213
  attribution: UsageAttributionSnapshot | null,
326
214
  rawInput: string,
327
215
  resultBytes: number,
328
216
  ): TelemetryColumns {
329
- if (getRawShareAnalytics() === false) {
330
- return NULL_TELEMETRY_COLUMNS;
331
- }
332
217
  return {
333
218
  argBytes: Buffer.byteLength(rawInput, "utf8"),
334
219
  resultBytes,
@@ -294,7 +294,7 @@ export {
294
294
  // Absolute path to the active workspace directory. A plugin that reads or
295
295
  // writes files under the workspace (e.g. its own `plugins/<name>/data/`
296
296
  // directory) resolves them against this instead of hardcoding a base path.
297
- export { getWorkspaceDir } from "../util/platform.js";
297
+ export { getWorkspaceDir } from "../util/layout.js";
298
298
  // `String.prototype.slice` that never cuts a UTF-16 surrogate pair in half.
299
299
  // Any text a plugin truncates by character budget and hands to a model must
300
300
  // go through this: an orphaned half is invalid UTF-16 that strict provider
@@ -12,7 +12,7 @@ import { isAbsolute, relative, resolve, sep } from "node:path";
12
12
  import { fileURLToPath } from "node:url";
13
13
 
14
14
  import { getCurrentPluginName } from "../plugins/plugin-execution-context.js";
15
- import { getWorkspacePluginsDir } from "../util/platform.js";
15
+ import { getWorkspacePluginsDir } from "../util/layout.js";
16
16
 
17
17
  export const PLUGIN_NAME_ENV = "CADET_PLUGIN_NAME";
18
18
 
@@ -15,7 +15,7 @@ import { tmpdir } from "node:os";
15
15
  import { join } from "node:path";
16
16
  import { afterAll, beforeEach, describe, expect, test } from "bun:test";
17
17
 
18
- import { getWorkspacePluginsDir } from "../../util/platform.js";
18
+ import { getWorkspacePluginsDir } from "../../util/layout.js";
19
19
  import { listInstalledPluginDirs } from "../installed-plugin-dirs.js";
20
20
 
21
21
  const pluginsDir = getWorkspacePluginsDir();
@@ -15,7 +15,7 @@
15
15
  import { existsSync } from "node:fs";
16
16
  import { join } from "node:path";
17
17
 
18
- import { getWorkspaceHooksDir } from "../util/platform.js";
18
+ import { getWorkspaceHooksDir } from "../util/layout.js";
19
19
  import { listInstalledPluginDirs } from "./installed-plugin-dirs.js";
20
20
  import { snapshotPluginSource } from "./source-fingerprint.js";
21
21
  import type { PluginSourceVersion } from "./source-versions.js";
@@ -9,6 +9,6 @@
9
9
  "node": ">=20.12.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@mycadet/plugin-api": "^0.8.0"
12
+ "@mycadet/plugin-api": "^0.12.7"
13
13
  }
14
14
  }
@@ -9,6 +9,6 @@
9
9
  "node": ">=20.12.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@mycadet/plugin-api": "^0.10.9"
12
+ "@mycadet/plugin-api": "^0.12.7"
13
13
  }
14
14
  }
@@ -9,6 +9,6 @@
9
9
  "node": ">=20.12.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@mycadet/plugin-api": "^0.8.0"
12
+ "@mycadet/plugin-api": "^0.12.7"
13
13
  }
14
14
  }
@@ -9,6 +9,6 @@
9
9
  "node": ">=20.12.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@mycadet/plugin-api": "^0.8.0"
12
+ "@mycadet/plugin-api": "^0.12.7"
13
13
  }
14
14
  }
@@ -9,6 +9,6 @@
9
9
  "node": ">=20.12.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@mycadet/plugin-api": "^0.8.0"
12
+ "@mycadet/plugin-api": "^0.12.7"
13
13
  }
14
14
  }
@@ -10,6 +10,6 @@
10
10
  "node": ">=20.12.0"
11
11
  },
12
12
  "peerDependencies": {
13
- "@mycadet/plugin-api": "^0.8.0"
13
+ "@mycadet/plugin-api": "^0.12.7"
14
14
  }
15
15
  }
@@ -9,6 +9,6 @@
9
9
  "node": ">=20.12.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@mycadet/plugin-api": "^0.8.0"
12
+ "@mycadet/plugin-api": "^0.12.7"
13
13
  }
14
14
  }
@@ -9,6 +9,6 @@
9
9
  "node": ">=20.12.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@mycadet/plugin-api": "^0.8.0"
12
+ "@mycadet/plugin-api": "^0.12.7"
13
13
  }
14
14
  }
@@ -9,6 +9,6 @@
9
9
  "node": ">=20.12.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@mycadet/plugin-api": ">=0.8.0"
12
+ "@mycadet/plugin-api": "^0.12.7"
13
13
  }
14
14
  }
@@ -34,7 +34,7 @@ const {
34
34
  parseChangesFromStdout,
35
35
  } = await import("../../../../persistence/db-async-query.js");
36
36
  const { findSqlite3 } = await import("../../../../util/sqlite3-runtime.js");
37
- const { getDbPath } = await import("../../../../util/platform.js");
37
+ const { getDbPath } = await import("../../../../util/layout.js");
38
38
 
39
39
  await initializeDb();
40
40
 
@@ -26,7 +26,7 @@ const { maybeRunDbMaintenance, maybeRunPassiveWalCheckpoint } =
26
26
  await import("../../../../persistence/db-maintenance.js");
27
27
  const { getLastInteractiveUserMessageTimestamp } =
28
28
  await import("../../../../persistence/conversation-crud.js");
29
- const { getDbPath } = await import("../../../../util/platform.js");
29
+ const { getDbPath } = await import("../../../../util/layout.js");
30
30
 
31
31
  await initializeDb();
32
32
 
@@ -132,21 +132,6 @@ mock.module("../../../../persistence/conversation-tool-surface.js", () => ({
132
132
  },
133
133
  }));
134
134
 
135
- const watchdogEvents: Array<{
136
- checkName: string;
137
- value?: number | null;
138
- detail?: Record<string, unknown> | null;
139
- }> = [];
140
- mock.module("../../../../telemetry/watchdog-events-store.js", () => ({
141
- recordWatchdogEvent: (record: {
142
- checkName: string;
143
- value?: number | null;
144
- detail?: Record<string, unknown> | null;
145
- }) => {
146
- watchdogEvents.push(record);
147
- },
148
- }));
149
-
150
135
  mock.module("../../../../daemon/conversation-registry.js", () => ({
151
136
  findConversation: (id: string | undefined) => {
152
137
  if (!id) {
@@ -494,7 +479,6 @@ function priorRetroMessage(rememberContents: string[]) {
494
479
 
495
480
  describe("memoryRetrospectiveJob", () => {
496
481
  beforeEach(() => {
497
- watchdogEvents.length = 0;
498
482
  mockState = null;
499
483
  stateUpserts = [];
500
484
  lastRunAtBumps = [];
@@ -604,16 +588,6 @@ describe("memoryRetrospectiveJob", () => {
604
588
  expect(lastRunAtBumps).toHaveLength(0);
605
589
  expect(wakeCalls).toHaveLength(0);
606
590
  expect(forkCalls).toHaveLength(0);
607
- // Every job run emits exactly one outcome counter for the health chart.
608
- expect(
609
- watchdogEvents.filter((e) => e.checkName === "memory_retrospective_run"),
610
- ).toEqual([
611
- {
612
- checkName: "memory_retrospective_run",
613
- value: 1,
614
- detail: { outcome: "no_new_messages" },
615
- },
616
- ]);
617
591
  });
618
592
 
619
593
  test("assistant-only slice with the user-activity gate on: completed as a no-op, both pointers untouched", async () => {
@@ -642,15 +616,6 @@ describe("memoryRetrospectiveJob", () => {
642
616
  expect(lastRunAtBumps).toHaveLength(0);
643
617
  expect(wakeCalls).toHaveLength(0);
644
618
  expect(forkCalls).toHaveLength(0);
645
- expect(
646
- watchdogEvents.filter((e) => e.checkName === "memory_retrospective_run"),
647
- ).toEqual([
648
- {
649
- checkName: "memory_retrospective_run",
650
- value: 1,
651
- detail: { outcome: "no_user_activity" },
652
- },
653
- ]);
654
619
  });
655
620
 
656
621
  test("a user text row in the slice passes the user-activity gate", async () => {
@@ -828,17 +793,6 @@ describe("memoryRetrospectiveJob", () => {
828
793
  const outcome = await memoryRetrospectiveJob(makeJob(), stubConfig);
829
794
 
830
795
  expect(outcome.kind).toBe("wake_failed");
831
- // The outcome counter carries the wake-failure reason so a fleet-wide
832
- // spike is attributable (e.g. provider outage vs busy conversations).
833
- expect(
834
- watchdogEvents.filter((e) => e.checkName === "memory_retrospective_run"),
835
- ).toEqual([
836
- {
837
- checkName: "memory_retrospective_run",
838
- value: 1,
839
- detail: { outcome: "wake_failed", reason: "timeout" },
840
- },
841
- ]);
842
796
  if (outcome.kind === "wake_failed") {
843
797
  expect(outcome.reason).toBe("timeout");
844
798
  }
@@ -869,20 +823,6 @@ describe("memoryRetrospectiveJob", () => {
869
823
  // Retryable: cooldown bump only, orphan fork cleaned up.
870
824
  expect(lastRunAtBumps).toHaveLength(1);
871
825
  expect(deletedConversationIds).toEqual(["fork-conv-1"]);
872
- expect(
873
- watchdogEvents.filter((e) => e.checkName === "memory_retrospective_run"),
874
- ).toEqual([
875
- {
876
- checkName: "memory_retrospective_run",
877
- value: 1,
878
- detail: {
879
- outcome: "no_usable_output",
880
- // The failure reason names what was missing, so an operator reading
881
- // the job row can tell a lost write from an unfinished review.
882
- reason: "run committed neither a memory write nor a concluding reply",
883
- },
884
- },
885
- ]);
886
826
  });
887
827
 
888
828
  test("a run whose reply reads as a conclusion but that the provider cut short: no_usable_output, prior retrospective preserved", async () => {
@@ -1118,17 +1058,6 @@ describe("memoryRetrospectiveJob", () => {
1118
1058
  expect(stateUpserts).toHaveLength(1);
1119
1059
  expect(stateUpserts[0]!.lastProcessedMessageId).toBe("m3");
1120
1060
  expect(stateUpserts[0]!.rememberedLog).toEqual([]);
1121
- expect(
1122
- watchdogEvents.filter(
1123
- (e) => e.checkName === "memory_retrospective_run",
1124
- ),
1125
- ).toEqual([
1126
- {
1127
- checkName: "memory_retrospective_run",
1128
- value: 1,
1129
- detail: { outcome: "invoked", noFindings: true },
1130
- },
1131
- ]);
1132
1061
  },
1133
1062
  );
1134
1063
 
@@ -1309,17 +1238,6 @@ describe("memoryRetrospectiveJob", () => {
1309
1238
  expect(stateUpserts).toHaveLength(0);
1310
1239
  expect(lastRunAtBumps).toHaveLength(1);
1311
1240
  expect(deletedConversationIds).toEqual(["fork-conv-1"]);
1312
- // A thrown run still records an outcome counter (as "error") before the
1313
- // rethrow — exception-flavored outages must show in the health metric.
1314
- expect(
1315
- watchdogEvents.filter((e) => e.checkName === "memory_retrospective_run"),
1316
- ).toEqual([
1317
- {
1318
- checkName: "memory_retrospective_run",
1319
- value: 1,
1320
- detail: { outcome: "error", reason: "LLM provider 503" },
1321
- },
1322
- ]);
1323
1241
  });
1324
1242
 
1325
1243
  test("missing conversationId payload: no_new_messages, no side effects", async () => {
@@ -35,21 +35,6 @@ type ConversationStub = {
35
35
  } | null;
36
36
  let conversationOverrides: Record<string, ConversationStub> = {};
37
37
 
38
- const watchdogEvents: Array<{
39
- checkName: string;
40
- value?: number | null;
41
- detail?: Record<string, unknown> | null;
42
- }> = [];
43
- mock.module("../../../../telemetry/watchdog-events-store.js", () => ({
44
- recordWatchdogEvent: (record: {
45
- checkName: string;
46
- value?: number | null;
47
- detail?: Record<string, unknown> | null;
48
- }) => {
49
- watchdogEvents.push(record);
50
- },
51
- }));
52
-
53
38
  mock.module("../../../../persistence/conversation-crud.js", () => ({
54
39
  getMessagesAfter: (_id: string, _afterId: string | null) => [],
55
40
  getMessages: (_id: string) => [],
@@ -171,7 +156,6 @@ function makeInsertJob(payload: Record<string, unknown>): MemoryJob {
171
156
 
172
157
  describe("memory-retrospective skill card", () => {
173
158
  beforeEach(() => {
174
- watchdogEvents.length = 0;
175
159
  addMessageCalls = [];
176
160
  addMessageThrowsFor = null;
177
161
  addMessageDeduplicatesFor = null;
@@ -334,31 +318,6 @@ describe("memory-retrospective skill card", () => {
334
318
  expect(publishedConversationIds).toHaveLength(0);
335
319
  });
336
320
 
337
- test("a delivered card emits the skill_card_delivered counter; a dedup does not", async () => {
338
- await insertSkillCardMessage("conv-source", "conv-run-telemetry", [
339
- { skillId: "s-1", name: "Skill One", description: "d1" },
340
- { skillId: "s-2", name: "Skill Two", description: "d2" },
341
- ]);
342
- expect(
343
- watchdogEvents.filter((e) => e.checkName === "skill_card_delivered"),
344
- ).toEqual([
345
- {
346
- checkName: "skill_card_delivered",
347
- value: 2,
348
- detail: { skill_count: 2 },
349
- },
350
- ]);
351
-
352
- // Retried delivery for the same run dedups on clientMessageId — the
353
- // counter must not fire again.
354
- await insertSkillCardMessage("conv-source", "conv-run-telemetry", [
355
- { skillId: "s-1", name: "Skill One", description: "d1" },
356
- ]);
357
- expect(
358
- watchdogEvents.filter((e) => e.checkName === "skill_card_delivered"),
359
- ).toHaveLength(1);
360
- });
361
-
362
321
  test("insert is best-effort: a persistence failure never throws", async () => {
363
322
  addMessageThrowsFor = "src-conv-9";
364
323
 
@@ -193,7 +193,6 @@ interface TierKeyExemption {
193
193
  * home for raw tier-predicate reads, and it compares v2 against v3.
194
194
  * - `config/loader.ts` (v3) — seeds/normalizes the persisted `memory.v3`
195
195
  * shape.
196
- * - `telemetry/config-setting-snapshot.ts` (both) — reports both tier keys
197
196
  * as-is.
198
197
  * - the named migrations: append-only history that rewrites or reads the
199
198
  * historical tier keys it was written for. Listed per file, not per
@@ -240,7 +239,6 @@ const TIER_KEY_READ_ALLOWLIST: readonly TierKeyExemption[] = [
240
239
  },
241
240
  { path: "src/plugins/defaults/memory/v2/", keys: ["v2"] },
242
241
  { path: "src/plugins/defaults/memory/v3/", keys: ["v3"] },
243
- { path: "src/telemetry/config-setting-snapshot.ts", keys: ["v2", "v3"] },
244
242
  {
245
243
  path: "src/workspace/migrations/085-memory-v2-bm25-b-reembed-disabled-v2-pages.ts",
246
244
  keys: ["v2"],
@@ -80,7 +80,6 @@ import {
80
80
  import { resolveUserSlug } from "../../../prompts/persona-resolver.js";
81
81
  import type { SystemPromptPersonaOverride } from "../../../prompts/system-prompt.js";
82
82
  import { wakeAgentForOpportunity } from "../../../runtime/agent-wake.js";
83
- import { recordWatchdogEvent } from "../../../telemetry/watchdog-events-store.js";
84
83
  import { findMostRecentRetrospectiveFor } from "./find-most-recent-retrospective-for.js";
85
84
  import { getLogger } from "./logging.js";
86
85
  import {
@@ -134,9 +133,6 @@ const FOLLOW_UP_JOB_TYPES: readonly MemoryJobType[] = [] as const;
134
133
  */
135
134
  export const STALE_SOURCE_PROCESSING_OVERRIDE_MS = 6 * 60 * 60 * 1000;
136
135
 
137
- /** Watchdog check_name for the per-run retrospective outcome counter. */
138
- const MEMORY_RETROSPECTIVE_RUN_CHECK_NAME = "memory_retrospective_run";
139
-
140
136
  /**
141
137
  * The agent-loop exit that means the MODEL ended the run: it answered without
142
138
  * asking for another tool. Under every other exit something ended the run for
@@ -191,55 +187,10 @@ export async function memoryRetrospectiveJob(
191
187
  return { kind: "disabled" };
192
188
  }
193
189
 
194
- // Central health counter (admin analytics groups on the watchdog
195
- // check_name): one event per run with its outcome kind. A run that
196
- // throws records outcome "error" before the exception continues to the
197
- // jobs worker's retry machinery, so a fleet-wide spike in
198
- // `wake_failed`/`error` (e.g. a provider outage on the retrospective's
199
- // resolved model) is visible without log access. The emitter itself
200
- // never throws — the run's outcome must reach the jobs worker
201
- // regardless.
202
- const emitRunOutcome = (
203
- outcome: string,
204
- detail?: { reason?: string; noFindings?: boolean },
205
- ): void => {
206
- try {
207
- recordWatchdogEvent({
208
- checkName: MEMORY_RETROSPECTIVE_RUN_CHECK_NAME,
209
- value: 1,
210
- detail: {
211
- outcome,
212
- ...(detail?.reason ? { reason: detail.reason.slice(0, 200) } : {}),
213
- ...(detail?.noFindings !== undefined
214
- ? { noFindings: detail.noFindings }
215
- : {}),
216
- },
217
- });
218
- } catch {
219
- // recordWatchdogEvent already no-ops on opt-out and a missing
220
- // telemetry DB; anything past that is not worth surfacing here.
221
- }
222
- };
223
-
224
- let outcome: MemoryRetrospectiveOutcome;
225
- try {
226
- outcome = await runForkBasedRetrospective(sourceConversationId, config, {
227
- enforceSweepLookback: true,
228
- enforceUserActivityGate: true,
229
- });
230
- } catch (err) {
231
- emitRunOutcome("error", {
232
- reason: err instanceof Error ? err.message : String(err),
233
- });
234
- throw err;
235
- }
236
- emitRunOutcome(outcome.kind, {
237
- ...(outcome.kind === "wake_failed" || outcome.kind === "no_usable_output"
238
- ? { reason: outcome.reason }
239
- : {}),
240
- ...(outcome.kind === "invoked" ? { noFindings: outcome.noFindings } : {}),
190
+ return await runForkBasedRetrospective(sourceConversationId, config, {
191
+ enforceSweepLookback: true,
192
+ enforceUserActivityGate: true,
241
193
  });
242
- return outcome;
243
194
  }
244
195
 
245
196
  // ---------------------------------------------------------------------------