@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
@@ -1,597 +0,0 @@
1
- /**
2
- * Per-event-type telemetry sources for the usage telemetry reporter.
3
- *
4
- * Each {@link TelemetryEventSource} owns one event type end-to-end: querying
5
- * unreported rows after a compound `(createdAt, id)` cursor, mapping them to
6
- * wire events, and deciding which rows are reportable this cycle (the turn
7
- * source defers in-flight turns). The reporter is a generic engine over a
8
- * list of sources, so which process flushes which event types is a matter of
9
- * which sources its reporter instance is constructed with.
10
- */
11
-
12
- import {
13
- getCachedShareDiagnostics,
14
- getCachedShareDiagnosticsVersion,
15
- } from "../cloud/consent-cache.js";
16
- import { queryUnreportedUsageEvents } from "../persistence/llm-usage-store.js";
17
- import type { UsageAttributionProfileSource } from "../usage/types.js";
18
- import { getLogger } from "../util/logger.js";
19
- import { APP_VERSION } from "../version.js";
20
- import {
21
- deleteTelemetryOutboxEvents,
22
- discardPendingTelemetryOutboxEvents,
23
- queryDistinctOutboxEventNames,
24
- queryTelemetryOutboxBatch,
25
- } from "./telemetry-events-outbox.js";
26
- import { queryUnreportedToolExecutedEvents } from "./tool-executed-events-store.js";
27
- import { isDiagnosticsConsentVersionEligible } from "./trace-collection-policy.js";
28
- import { queryUnreportedTurnEvents } from "./turn-events-store.js";
29
- import { assembleBoundedTurnTrace, isTurnSettled } from "./turn-trace-store.js";
30
- import type {
31
- OutboxTelemetryEventName,
32
- TelemetryEvent,
33
- TurnTelemetryClientInfo,
34
- } from "./types.js";
35
- import { OUTBOX_TELEMETRY_EVENT_NAMES } from "./types.js";
36
-
37
- const log = getLogger("usage-telemetry");
38
-
39
- /** Compound `(createdAt, id)` position of a reported row. */
40
- export interface TelemetryCursor {
41
- createdAt: number;
42
- id: string;
43
- }
44
-
45
- /** One flush cycle's worth of reportable events from a single source. */
46
- export interface TelemetryEventSourceBatch {
47
- /** Wire events for the rows reportable this cycle, in cursor order. */
48
- events: TelemetryEvent[];
49
- /**
50
- * Row ids backing `events`, set by ack-mode sources so the reporter can
51
- * acknowledge (delete) exactly the shipped rows. These are ROW ids, not
52
- * wire `daemon_event_id`s — the onboarding source overrides
53
- * `daemon_event_id` for activation rows, so the two can differ.
54
- */
55
- rowIds?: string[];
56
- /** Cursor of the last reportable row; null when nothing is reportable. */
57
- lastCursor: TelemetryCursor | null;
58
- /**
59
- * True when this source may have more rows immediately behind the batch
60
- * (drives the reporter's recurse-after-success). Sources that defer rows
61
- * (the turn completeness barrier) key this off the REPORTED count so a
62
- * truncated batch waits for a later flush instead of re-querying and
63
- * re-deferring in a tight recursion.
64
- */
65
- fullBatch: boolean;
66
- }
67
-
68
- /** One event type's query + wire mapping, keyed by its watermark namespace. */
69
- export interface TelemetryEventSource {
70
- /**
71
- * Stable source id — the watermark key namespace. The reporter persists
72
- * this source's cursor under `telemetry:<id>:last_reported_{at,id}` in the
73
- * telemetry DB's `flush_checkpoints` table, so ids must never change once
74
- * shipped.
75
- */
76
- id: string;
77
- /** Query rows after the compound cursor and map them to wire events. */
78
- collect(
79
- afterCreatedAt: number,
80
- afterId: string | undefined,
81
- limit: number,
82
- ): TelemetryEventSourceBatch;
83
- /**
84
- * Delete-on-flush mode. Both operations are required together: `acknowledge`
85
- * deletes the rows behind {@link TelemetryEventSourceBatch.rowIds} after a
86
- * 2xx from the ingest endpoint, and `discardPending` drops all pending rows
87
- * on an opted-out flush (watermark writes are meaningless for ack-mode
88
- * sources, so they never touch `flush_checkpoints`).
89
- */
90
- ack?: {
91
- acknowledge(rowIds: string[]): void;
92
- discardPending(): void;
93
- };
94
- }
95
-
96
- /** The `flush_checkpoints` keys holding a source's compound cursor. */
97
- export function watermarkKeysForSource(sourceId: string): {
98
- at: string;
99
- id: string;
100
- } {
101
- return {
102
- at: `telemetry:${sourceId}:last_reported_at`,
103
- id: `telemetry:${sourceId}:last_reported_id`,
104
- };
105
- }
106
-
107
- /**
108
- * Build a source for the common case: every queried row is reportable, the
109
- * cursor advances to the last queried row, and a full query batch signals
110
- * more rows behind it.
111
- */
112
- function simpleSource<Row extends { id: string; createdAt: number }>(
113
- id: string,
114
- query: (
115
- afterCreatedAt: number,
116
- afterId: string | undefined,
117
- limit: number,
118
- ) => Row[],
119
- toEvent: (row: Row) => TelemetryEvent,
120
- ): TelemetryEventSource {
121
- return {
122
- id,
123
- collect(afterCreatedAt, afterId, limit) {
124
- const rows = query(afterCreatedAt, afterId, limit);
125
- const last = rows.length > 0 ? rows[rows.length - 1] : null;
126
- return {
127
- events: rows.map(toEvent),
128
- lastCursor: last ? { createdAt: last.createdAt, id: last.id } : null,
129
- fullBatch: rows.length === limit,
130
- };
131
- },
132
- };
133
- }
134
-
135
- /**
136
- * Query one outbox event name and parse each stored payload into its wire
137
- * event, accumulating into `events`/`rowIds`. A row whose payload does not
138
- * parse to an object is collected into `corruptIds` for immediate purge: an
139
- * early empty-batch return in the reporter would otherwise strand it at the
140
- * head of the queue forever. Shared by {@link outboxSource} and the
141
- * orphan-drain source.
142
- */
143
- function collectOutboxName(
144
- name: string,
145
- limit: number,
146
- into: { events: TelemetryEvent[]; rowIds: string[]; corruptIds: string[] },
147
- ): { queried: number } {
148
- const rows = queryTelemetryOutboxBatch(name, limit);
149
- for (const row of rows) {
150
- let event: TelemetryEvent | null = null;
151
- try {
152
- const parsed = JSON.parse(row.payload) as unknown;
153
- if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
154
- event = parsed as TelemetryEvent;
155
- }
156
- } catch {
157
- // Fall through to the purge below.
158
- }
159
- if (event) {
160
- into.events.push(event);
161
- into.rowIds.push(row.id);
162
- } else {
163
- into.corruptIds.push(row.id);
164
- log.warn(
165
- { name, rowId: row.id, payloadLength: row.payload.length },
166
- "Telemetry outbox: unparseable payload — purging row",
167
- );
168
- }
169
- }
170
- return { queried: rows.length };
171
- }
172
-
173
- /**
174
- * Build an ack-mode source over the generic `telemetry_events` outbox for one
175
- * event name. `collect` ignores the cursor args — acknowledged rows are
176
- * deleted, so the head of the queue is always the next batch.
177
- */
178
- export function outboxSource(
179
- name: OutboxTelemetryEventName,
180
- ): TelemetryEventSource {
181
- return {
182
- id: name,
183
- collect(_afterCreatedAt, _afterId, limit) {
184
- const acc = {
185
- events: [] as TelemetryEvent[],
186
- rowIds: [] as string[],
187
- corruptIds: [] as string[],
188
- };
189
- const { queried } = collectOutboxName(name, limit, acc);
190
- if (acc.corruptIds.length > 0) {
191
- deleteTelemetryOutboxEvents(acc.corruptIds);
192
- }
193
- return {
194
- events: acc.events,
195
- rowIds: acc.rowIds,
196
- lastCursor: null,
197
- fullBatch: queried === limit,
198
- };
199
- },
200
- ack: {
201
- acknowledge: (rowIds) => deleteTelemetryOutboxEvents(rowIds),
202
- discardPending: () => discardPendingTelemetryOutboxEvents(name),
203
- },
204
- };
205
- }
206
-
207
- /** Source id of the synthetic orphan-drain source (not a wire event type). */
208
- export const ORPHAN_OUTBOX_DRAIN_SOURCE_ID = "__orphan_outbox_drain";
209
-
210
- /**
211
- * Synthetic ack-mode source that drains outbox rows whose `name` is no longer a
212
- * current outbox event type — e.g. rows recorded before the cloud removed or
213
- * renamed a type, still pending on a client that has since upgraded. The
214
- * derived per-type sources ({@link OUTBOX_TELEMETRY_EVENT_NAMES}) never query
215
- * those names, so without this the rows would sit in the outbox forever.
216
- *
217
- * Draining is send-then-ack: the cloud skips an unknown event type but still
218
- * returns 2xx, after which the row is deleted. This is safe against a stale
219
- * local wire copy — a name merely missing from a lagging wire still ships and
220
- * lands rather than being purged and lost — and rides `share_analytics` like
221
- * every other outbox event (no outbox type is diagnostics-gated at flush).
222
- */
223
- export function orphanOutboxDrainSource(): TelemetryEventSource {
224
- const known = new Set<string>(OUTBOX_TELEMETRY_EVENT_NAMES);
225
- const orphanNames = (): string[] =>
226
- queryDistinctOutboxEventNames().filter((name) => !known.has(name));
227
- return {
228
- id: ORPHAN_OUTBOX_DRAIN_SOURCE_ID,
229
- collect(_afterCreatedAt, _afterId, limit) {
230
- const acc = {
231
- events: [] as TelemetryEvent[],
232
- rowIds: [] as string[],
233
- corruptIds: [] as string[],
234
- };
235
- for (const name of orphanNames()) {
236
- if (acc.events.length >= limit) {
237
- break;
238
- }
239
- collectOutboxName(name, limit - acc.events.length, acc);
240
- }
241
- if (acc.corruptIds.length > 0) {
242
- deleteTelemetryOutboxEvents(acc.corruptIds);
243
- }
244
- return {
245
- events: acc.events,
246
- rowIds: acc.rowIds,
247
- lastCursor: null,
248
- // Conservative: never signals more-behind, so orphan draining spreads
249
- // across flush cycles instead of monopolizing one. Rare by nature.
250
- fullBatch: false,
251
- };
252
- },
253
- ack: {
254
- acknowledge: (rowIds) => deleteTelemetryOutboxEvents(rowIds),
255
- discardPending: () => {
256
- for (const name of orphanNames()) {
257
- discardPendingTelemetryOutboxEvents(name);
258
- }
259
- },
260
- },
261
- };
262
- }
263
-
264
- // ---------------------------------------------------------------------------
265
- // Sources
266
- // ---------------------------------------------------------------------------
267
-
268
- const usageSource = simpleSource(
269
- "usage",
270
- (afterCreatedAt, afterId, limit) =>
271
- queryUnreportedUsageEvents(afterCreatedAt, afterId, limit),
272
- (e): TelemetryEvent => ({
273
- type: "llm_usage",
274
- daemon_event_id: e.id,
275
- // Conversation-level metadata for analytics joins. All three
276
- // are nullable on the wire: `conversation_id` is null for
277
- // LLM calls not tied to a conversation (memory consolidation,
278
- // background work), and the other two cascade from that.
279
- conversation_id: e.conversationId,
280
- conversation_type: e.conversationType,
281
- turn_index: e.turnIndex,
282
- parent_conversation_id: e.parentConversationId,
283
- parent_turn_index: e.parentTurnIndex,
284
- // Delegated-work decomposition. Every subagent variety shares
285
- // `llm_call_site = "subagentSpawn"`; these two orthogonal dimensions are
286
- // what make advisor consults, forks, and regular spawns separable. Null
287
- // for the vast majority of calls, which are not delegated at all.
288
- subagent_role: e.subagentRole,
289
- subagent_spawn_mode: e.subagentSpawnMode,
290
- provider: e.provider,
291
- model: e.model,
292
- input_tokens: e.inputTokens,
293
- output_tokens: e.outputTokens,
294
- cache_creation_input_tokens: e.cacheCreationInputTokens ?? null,
295
- cache_read_input_tokens: e.cacheReadInputTokens ?? null,
296
- llm_call_count: e.llmCallCount,
297
- raw_usage: e.rawUsage,
298
- actor: e.actor,
299
- llm_call_site: e.callSite,
300
- inference_profile: e.inferenceProfile,
301
- inference_profile_source: e.inferenceProfileSource,
302
- cost: e.estimatedCostUsd ?? null,
303
- recorded_at: e.createdAt,
304
- // Record-time version when present; otherwise the running
305
- // binary's `APP_VERSION` (a legacy row from before
306
- // migration 267 ran). We deliberately don't emit explicit
307
- // `null` — under the cloud contract a present-but-null
308
- // per-event value would override the envelope, and we'd
309
- // rather have a concrete version than no version.
310
- assistant_version: e.assistantVersion ?? APP_VERSION,
311
- }),
312
- );
313
-
314
- /**
315
- * Turn source. Unlike the simple sources it enforces the turn completeness
316
- * barrier and attaches consented traces, both of which need the daemon's
317
- * live in-memory conversation state (`isProcessing()`, cached system prompt,
318
- * registered tool definitions) — so this source must run in the daemon
319
- * process.
320
- */
321
- const turnSource: TelemetryEventSource = {
322
- id: "turns",
323
- collect(afterCreatedAt, afterId, limit) {
324
- const turnEvents = queryUnreportedTurnEvents(
325
- afterCreatedAt,
326
- afterId,
327
- limit,
328
- );
329
-
330
- // Turn completeness barrier (every turn event).
331
- //
332
- // A turn event must only be sent once that turn is COMPLETE, for two
333
- // reasons sharing the same failure mode (the watermark advances on ship,
334
- // so anything captured early is frozen forever):
335
- // - the consented `trace` would capture a partial mid-reply
336
- // transcript, and
337
- // - the `outcome` stamp (`messages.metadata.turnOutcome`, written by
338
- // the agent loop / drainBatch while the conversation is still
339
- // processing) would be missed, permanently mislabeling a
340
- // failed/cancelled/batched turn as normally-replied.
341
- // So we report only the leading run of complete turns and STOP at the
342
- // first incomplete (in-flight) one: the turn watermark is a single
343
- // monotonic `(createdAt, id)` cursor, so a later complete turn cannot be
344
- // reported past an earlier deferred one without skipping it. The
345
- // deferred turn (and everything after it) is picked up on a later flush
346
- // once its response settles.
347
- //
348
- // Trace eligibility is composed daemon-side to mirror the cloud's
349
- // authoritative owner-based ingest gate, so traces for ineligible owners
350
- // never leave the device. Two parts, fail-closed (both must be true):
351
- // 1. the owner's cached `share_diagnostics` consent, and
352
- // 2. the owner's cached `share_diagnostics_accepted_version` being at or
353
- // past the disclosing version — the cloud applies the identical
354
- // check, so an old consent never yields a trace here or there.
355
- const traceEligible =
356
- getCachedShareDiagnostics() &&
357
- isDiagnosticsConsentVersionEligible(getCachedShareDiagnosticsVersion());
358
- let reportableTurnEvents = turnEvents;
359
- if (turnEvents.length > 0) {
360
- let barrier = turnEvents.length;
361
- for (let i = 0; i < turnEvents.length; i++) {
362
- const t = turnEvents[i];
363
- if (
364
- !isTurnSettled({
365
- conversationId: t.conversationId,
366
- userMessageId: t.id,
367
- userMessageCreatedAt: t.createdAt,
368
- })
369
- ) {
370
- barrier = i;
371
- break;
372
- }
373
- }
374
- if (barrier < turnEvents.length) {
375
- reportableTurnEvents = turnEvents.slice(0, barrier);
376
- log.debug(
377
- {
378
- deferredTurnId: turnEvents[barrier].id,
379
- deferredConversationId: turnEvents[barrier].conversationId,
380
- reportedTurns: barrier,
381
- deferredTurns: turnEvents.length - barrier,
382
- },
383
- "Deferring in-progress turn(s) from telemetry until complete",
384
- );
385
- }
386
- }
387
-
388
- const events = reportableTurnEvents.map((e): TelemetryEvent => {
389
- // Per-turn trace collection gate. `traceEligible` (computed above)
390
- // requires the owner's cached `share_diagnostics` consent AND an
391
- // eligible accepted consent version. Fail-closed: when either is off
392
- // the trace is omitted and the trace-free turn row flushes as before. The
393
- // `share_analytics` gate in the reporter already passed, so this is an
394
- // additional, independent gate specific to trace PII. Every turn
395
- // reaching here is settled (the completeness barrier dropped any
396
- // in-flight turns), so the trace is never a partial mid-turn snapshot.
397
- const trace = traceEligible
398
- ? assembleBoundedTurnTrace({
399
- conversationId: e.conversationId,
400
- userMessageId: e.id,
401
- userMessageCreatedAt: e.createdAt,
402
- })
403
- : null;
404
- // `messages.metadata.client` is a nested JSON object extracted
405
- // via `json_extract`; sqlite returns it as a text representation.
406
- // Parse defensively — a corrupted blob in the JSON column should
407
- // not block the whole batch flush.
408
- let client: TurnTelemetryClientInfo | null = null;
409
- if (e.clientMetadata) {
410
- try {
411
- const parsed = JSON.parse(e.clientMetadata) as unknown;
412
- if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
413
- client = parsed as TurnTelemetryClientInfo;
414
- }
415
- } catch {
416
- // Malformed client JSON — emit null rather than fail the
417
- // batch. Logged once below for visibility.
418
- log.warn(
419
- { turnId: e.id, conversationId: e.conversationId },
420
- "Telemetry turn: failed to parse messages.metadata.client; emitting null",
421
- );
422
- }
423
- }
424
- // Narrow the raw metadata projection to the wire union — only
425
- // `stampTurnOutcome` writes the key, but the JSON column is
426
- // uncontrolled, so an unexpected value is dropped rather than
427
- // shipped.
428
- const outcome =
429
- e.outcome === "batched" ||
430
- e.outcome === "failed" ||
431
- e.outcome === "cancelled"
432
- ? e.outcome
433
- : null;
434
- return {
435
- type: "turn",
436
- daemon_event_id: e.id,
437
- recorded_at: e.createdAt,
438
- conversation_id: e.conversationId,
439
- conversation_type: e.conversationType,
440
- turn_index: e.turnIndex,
441
- interface_id: e.interfaceId,
442
- channel_id: e.channelId,
443
- client,
444
- // Outcome stamps are omit-when-absent: a normally-replied turn's
445
- // wire shape is byte-identical to a pre-outcome turn event.
446
- ...(outcome ? { outcome } : {}),
447
- ...(outcome === "batched" && e.batchedInto
448
- ? { batched_into: e.batchedInto }
449
- : {}),
450
- ...(outcome === "failed" && e.failureCode
451
- ? { failure_code: e.failureCode }
452
- : {}),
453
- // Scripted-turn marker. Tri-state, so this is an explicit null check
454
- // and NOT `...(e.scripted ? ...)`: a truthiness test would drop every
455
- // `false` and turn "the user typed this" into "unknown", which is the
456
- // measurement gap the field exists to close. `false` must reach the
457
- // wire as a real value; only a genuinely unknown origin (a row
458
- // persisted before the marker existed) omits the key.
459
- ...(e.scripted == null ? {} : { scripted: e.scripted }),
460
- // Only attach `trace` when consent is on AND a bounded trace was
461
- // assembled. Omitting the key entirely when there's no trace keeps
462
- // the wire shape byte-identical to pre-trace turn events for the
463
- // common (no-consent) path.
464
- ...(trace ? { trace } : {}),
465
- // Turn events derive from `messages` + `conversations`
466
- // rather than a dedicated table. Adding `assistant_version`
467
- // to `messages` is a separate (larger) migration; until
468
- // then we stamp the running binary's `APP_VERSION` so the
469
- // wire value is concrete (matches what the envelope would
470
- // have provided, but per-event so it survives the cloud
471
- // contract that treats present per-event values as winning
472
- // over the envelope).
473
- assistant_version: APP_VERSION,
474
- };
475
- });
476
-
477
- const last =
478
- reportableTurnEvents.length > 0
479
- ? reportableTurnEvents[reportableTurnEvents.length - 1]
480
- : null;
481
- return {
482
- events,
483
- // The cursor advances only to the last REPORTED turn. Deferred
484
- // (in-flight) turns sit beyond it and are re-evaluated on a later
485
- // flush, so the watermark never skips them.
486
- lastCursor: last ? { createdAt: last.createdAt, id: last.id } : null,
487
- // Keyed off the REPORTED count: when the completeness barrier
488
- // truncates the batch, the deferred turns must wait for a later flush
489
- // (by which point they've settled) rather than being re-queried and
490
- // re-deferred in a tight recursion.
491
- fullBatch: reportableTurnEvents.length === limit,
492
- };
493
- },
494
- };
495
-
496
- const toolExecutedSource = simpleSource(
497
- "tool_executed",
498
- (afterCreatedAt, afterId, limit) =>
499
- queryUnreportedToolExecutedEvents(afterCreatedAt, afterId, limit),
500
- (e): TelemetryEvent => ({
501
- type: "tool_executed",
502
- daemon_event_id: e.id,
503
- recorded_at: e.createdAt,
504
- tool_name: e.toolName,
505
- // The store filters out permission-denied rows, so the only
506
- // non-success decision that reaches here is "error".
507
- status: e.decision === "error" ? "errored" : "fulfilled",
508
- duration_ms: e.durationMs,
509
- arg_bytes: e.argBytes,
510
- result_bytes: e.resultBytes,
511
- conversation_id: e.conversationId,
512
- provider: e.provider,
513
- model: e.model,
514
- inference_profile: e.inferenceProfile,
515
- inference_profile_source:
516
- e.inferenceProfileSource as UsageAttributionProfileSource | null,
517
- // `tool_invocations` has no record-time version column — stamp
518
- // the running binary's `APP_VERSION` so the wire value is
519
- // concrete rather than an explicit null that would override the
520
- // envelope under the cloud's per-event-wins contract.
521
- assistant_version: APP_VERSION,
522
- }),
523
- );
524
-
525
- /**
526
- * Watermark key namespace of the tool_executed source — referenced by the
527
- * absent-watermark init that runs at daemon startup.
528
- */
529
- export const TOOL_EXECUTED_SOURCE_ID = toolExecutedSource.id;
530
-
531
- /**
532
- * Watermark-flushed sources — the high-volume events on their own SQLite
533
- * tables (`WATERMARK_TELEMETRY_EVENT_NAMES`), read forward by a `(createdAt,
534
- * id)` cursor rather than the generic outbox.
535
- */
536
- const WATERMARK_TELEMETRY_EVENT_SOURCES: readonly TelemetryEventSource[] = [
537
- usageSource,
538
- turnSource,
539
- toolExecutedSource,
540
- ];
541
-
542
- /**
543
- * Per-outbox-event flush-source override. The default for every outbox event is
544
- * the plain {@link outboxSource}; list only the exceptions here. A new outbox
545
- * event type therefore needs no edit — it flushes through `outboxSource`
546
- * automatically. There are currently no exceptions: every outbox event,
547
- * including `onboarding_research`, flushes through the default source and is
548
- * gated only by the `share_analytics` consent enforced at record time.
549
- */
550
- const OUTBOX_SOURCE_FACTORY: Partial<
551
- Record<
552
- OutboxTelemetryEventName,
553
- (name: OutboxTelemetryEventName) => TelemetryEventSource
554
- >
555
- > = {};
556
-
557
- /**
558
- * Every telemetry event source, in payload order (watermark sources first, then
559
- * outbox events in wire-contract order). Derived from the wire contract via
560
- * {@link OUTBOX_TELEMETRY_EVENT_NAMES}, so a new event type gets a flush source
561
- * with no edit here. Intra-batch ordering is not load-bearing downstream
562
- * (events are typed and deduped on `daemon_event_id`, not positional). This is
563
- * the test/reference list; production reporters run the daemon/monitor
564
- * partitions below.
565
- */
566
- export const ALL_TELEMETRY_EVENT_SOURCES: readonly TelemetryEventSource[] = [
567
- ...WATERMARK_TELEMETRY_EVENT_SOURCES,
568
- ...OUTBOX_TELEMETRY_EVENT_NAMES.map((name) =>
569
- (OUTBOX_SOURCE_FACTORY[name] ?? outboxSource)(name),
570
- ),
571
- // Not a wire event type — drains rows for types the wire no longer declares.
572
- orphanOutboxDrainSource(),
573
- ];
574
-
575
- /**
576
- * Sources flushed by the daemon's reporter. Turns only: the completeness
577
- * barrier (`isProcessing()`) and consented trace assembly (cached system
578
- * prompt, registered tool definitions) read the daemon's live in-memory
579
- * conversation state, so this source cannot leave the daemon process.
580
- */
581
- export const DAEMON_TELEMETRY_EVENT_SOURCES: readonly TelemetryEventSource[] = [
582
- turnSource,
583
- ];
584
-
585
- /**
586
- * Sources flushed by the resource monitor process's reporter. Everything
587
- * except turns: pure durable-table projections over the main and telemetry
588
- * databases, which the monitor reads cross-process (main DB read-only via
589
- * WAL; telemetry DB read-write, since the monitor owns flush state).
590
- * Together with {@link DAEMON_TELEMETRY_EVENT_SOURCES} this partitions
591
- * {@link ALL_TELEMETRY_EVENT_SOURCES} — every source is flushed by exactly
592
- * one process.
593
- */
594
- export const MONITOR_TELEMETRY_EVENT_SOURCES: readonly TelemetryEventSource[] =
595
- ALL_TELEMETRY_EVENT_SOURCES.filter(
596
- (source) => !DAEMON_TELEMETRY_EVENT_SOURCES.includes(source),
597
- );