@mycadet/assistant 0.12.9 → 0.12.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/Dockerfile +0 -8
  2. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
  3. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  4. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  5. package/node_modules/@mycadet/ces-client/src/http-credentials.ts +18 -1
  6. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  7. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  8. package/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  9. package/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  10. package/openapi.yaml +62 -910
  11. package/package.json +3 -7
  12. package/scripts/build-test-fixtures.ts +1 -1
  13. package/scripts/generate-openapi.ts +22 -6
  14. package/scripts/postinstall.ts +4 -10
  15. package/scripts/run-tests.ts +0 -21
  16. package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
  17. package/src/__tests__/agent-loop.test.ts +0 -76
  18. package/src/__tests__/anthropic-provider.test.ts +6 -6
  19. package/src/__tests__/assert-not-live-db.ts +1 -1
  20. package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
  21. package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
  22. package/src/__tests__/attachments-store.test.ts +1 -1
  23. package/src/__tests__/audit-log-rotation.test.ts +1 -1
  24. package/src/__tests__/btw-routes.test.ts +1 -1
  25. package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
  26. package/src/__tests__/call-conversation-messages.test.ts +0 -5
  27. package/src/__tests__/call-recovery.test.ts +2 -7
  28. package/src/__tests__/call-routes-http.test.ts +0 -12
  29. package/src/__tests__/call-store.test.ts +2 -7
  30. package/src/__tests__/catalog-files.test.ts +7 -5
  31. package/src/__tests__/checker.test.ts +1 -1
  32. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
  33. package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
  34. package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
  35. package/src/__tests__/cloud-profile-guard.test.ts +87 -404
  36. package/src/__tests__/compaction-events.test.ts +2 -2
  37. package/src/__tests__/config-loader-backfill.test.ts +74 -163
  38. package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
  39. package/src/__tests__/config-loader-corrupt.test.ts +10 -10
  40. package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
  41. package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
  42. package/src/__tests__/config-schema.test.ts +26 -27
  43. package/src/__tests__/config-set-route.test.ts +2 -6
  44. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
  45. package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
  46. package/src/__tests__/conversation-agent-loop.test.ts +2 -58
  47. package/src/__tests__/conversation-clear-safety.test.ts +0 -30
  48. package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
  49. package/src/__tests__/conversation-queue.test.ts +1 -1
  50. package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
  51. package/src/__tests__/conversation-skill-tools.test.ts +4 -444
  52. package/src/__tests__/conversation-slash-commands.test.ts +1 -1
  53. package/src/__tests__/conversation-store.test.ts +1 -84
  54. package/src/__tests__/conversation-surface-state.test.ts +0 -16
  55. package/src/__tests__/credential-health-service.test.ts +14 -1
  56. package/src/__tests__/credential-record-retire.test.ts +1 -1
  57. package/src/__tests__/credential-record-write-through.test.ts +1 -1
  58. package/src/__tests__/credential-security-invariants.test.ts +0 -145
  59. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  60. package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
  61. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  62. package/src/__tests__/dictation-profile-store.test.ts +6 -6
  63. package/src/__tests__/disk-usage.test.ts +28 -164
  64. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
  65. package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
  66. package/src/__tests__/emit-event-signal.test.ts +1 -1
  67. package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
  68. package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
  69. package/src/__tests__/guardian-dispatch.test.ts +0 -13
  70. package/src/__tests__/helpers/seed-app.ts +1 -1
  71. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
  72. package/src/__tests__/host-shell-tool.test.ts +1 -1
  73. package/src/__tests__/identity-routes.test.ts +1 -1
  74. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  75. package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
  76. package/src/__tests__/injector-chain.test.ts +1 -1
  77. package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
  78. package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
  79. package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
  80. package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
  81. package/src/__tests__/list-all-apps.test.ts +1 -1
  82. package/src/__tests__/live-workspace-guard.test.ts +2 -2
  83. package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
  84. package/src/__tests__/llm-resolver.test.ts +7 -7
  85. package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
  86. package/src/__tests__/llm-usage-store.test.ts +0 -495
  87. package/src/__tests__/log-export-routes.test.ts +1 -1
  88. package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
  89. package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
  90. package/src/__tests__/memory-config-file-parity.test.ts +1 -1
  91. package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
  92. package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
  93. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  94. package/src/__tests__/onboarding-persona-write.test.ts +1 -1
  95. package/src/__tests__/openai-provider.test.ts +8 -8
  96. package/src/__tests__/path-policy.test.ts +1 -1
  97. package/src/__tests__/persona-resolver.test.ts +1 -1
  98. package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
  99. package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
  100. package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
  101. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
  102. package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
  103. package/src/__tests__/provider-connections-backfill.test.ts +10 -10
  104. package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
  105. package/src/__tests__/resolve-app.test.ts +1 -1
  106. package/src/__tests__/run-due-schedules.test.ts +1 -1
  107. package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
  108. package/src/__tests__/schedule-routes.test.ts +1 -1
  109. package/src/__tests__/schedule-store.test.ts +1 -1
  110. package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
  111. package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
  112. package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
  113. package/src/__tests__/tool-approval-handler.test.ts +1 -1
  114. package/src/__tests__/tool-audit.test.ts +5 -235
  115. package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
  116. package/src/__tests__/tools-get-route.test.ts +1 -1
  117. package/src/__tests__/turn-outcome-read.test.ts +1 -1
  118. package/src/__tests__/twilio-routes.test.ts +0 -1
  119. package/src/__tests__/usage-attribution.test.ts +0 -31
  120. package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
  121. package/src/__tests__/visible-app-context.test.ts +1 -1
  122. package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
  123. package/src/__tests__/workspace-git-service.test.ts +1 -1
  124. package/src/__tests__/workspace-greetings.test.ts +1 -1
  125. package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
  126. package/src/activation/progress-store.ts +1 -1
  127. package/src/activation/turn-hooks.ts +1 -1
  128. package/src/agent/loop.ts +0 -51
  129. package/src/apps/app-store.ts +1 -1
  130. package/src/avatar/__tests__/avatar-store.test.ts +2 -172
  131. package/src/avatar/accent-backfill.ts +1 -1
  132. package/src/avatar/avatar-manifest.ts +1 -1
  133. package/src/avatar/avatar-store.ts +10 -69
  134. package/src/avatar/ensure-raster.ts +1 -1
  135. package/src/avatar/identity-avatar.ts +1 -1
  136. package/src/avatar/sync-avatar.ts +1 -1
  137. package/src/avatar/traits-png-sync.ts +1 -1
  138. package/src/bundler/compiler-tools.ts +1 -1
  139. package/src/bundler/package-resolver.ts +1 -1
  140. package/src/calls/__tests__/call-controller.test.ts +25 -27
  141. package/src/calls/active-call-lease.ts +1 -1
  142. package/src/calls/call-controller.ts +3 -3
  143. package/src/calls/call-domain.ts +4 -8
  144. package/src/calls/call-store.ts +2 -76
  145. package/src/calls/resolve-call-tts-provider.ts +3 -3
  146. package/src/calls/twilio-config.ts +3 -3
  147. package/src/calls/twilio-rest.ts +2 -2
  148. package/src/calls/voice-ingress-preflight.ts +2 -2
  149. package/src/cli/bundled-modules.ts +0 -2
  150. package/src/cli/commands/__tests__/apps.test.ts +1 -1
  151. package/src/cli/commands/__tests__/plugins.test.ts +9 -66
  152. package/src/cli/commands/__tests__/ps.test.ts +67 -0
  153. package/src/cli/commands/auth.help.ts +2 -2
  154. package/src/cli/commands/avatar.ts +1 -1
  155. package/src/cli/commands/changelog.ts +1 -1
  156. package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
  157. package/src/cli/commands/cloud/index.help.ts +1 -1
  158. package/src/cli/commands/cloud/index.ts +2 -2
  159. package/src/cli/commands/db/refresh.ts +1 -1
  160. package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
  161. package/src/cli/commands/db/repair.ts +1 -1
  162. package/src/cli/commands/db/status.ts +1 -1
  163. package/src/cli/commands/inference-profiles.ts +1 -12
  164. package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
  165. package/src/cli/commands/memory/index.help.ts +1 -43
  166. package/src/cli/commands/memory/memory-v3.ts +0 -64
  167. package/src/cli/commands/plugins.ts +54 -205
  168. package/src/cli/commands/ps.ts +5 -2
  169. package/src/cli/commands/status.ts +1 -1
  170. package/src/cli/index.help.ts +0 -2
  171. package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
  172. package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
  173. package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
  174. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
  175. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
  176. package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
  177. package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
  178. package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
  179. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
  180. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
  181. package/src/cli/lib/diff-plugin.ts +1 -1
  182. package/src/cli/lib/inspect-plugin.ts +13 -97
  183. package/src/cli/lib/install-from-cloud.ts +1 -1
  184. package/src/cli/lib/install-from-github.ts +75 -154
  185. package/src/cli/lib/install-plugin-dependencies.ts +1 -1
  186. package/src/cli/lib/list-installed-plugins.ts +1 -1
  187. package/src/cli/lib/open-browser.ts +1 -1
  188. package/src/cli/lib/plugin-catalog-cache.ts +8 -51
  189. package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
  190. package/src/cli/lib/plugin-details.ts +5 -27
  191. package/src/cli/lib/plugin-marketplace.ts +18 -266
  192. package/src/cli/lib/search-plugins.ts +23 -43
  193. package/src/cli/lib/toggle-plugin.ts +1 -1
  194. package/src/cli/lib/uninstall-plugin.ts +1 -1
  195. package/src/cli/lib/upgrade-plugin.ts +3 -49
  196. package/src/cli/program.ts +1 -3
  197. package/src/cli.ts +1 -1
  198. package/src/cloud/client.ts +0 -6
  199. package/src/cloud/consent-cache.test.ts +22 -201
  200. package/src/cloud/consent-cache.ts +16 -111
  201. package/src/cloud/sync-identity.ts +1 -1
  202. package/src/config/__tests__/chat-settings.test.ts +1 -1
  203. package/src/config/__tests__/cloud-identity.test.ts +15 -2
  204. package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
  205. package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
  206. package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
  207. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
  208. package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
  209. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
  210. package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
  211. package/src/config/__tests__/profile-materialization.test.ts +2 -4
  212. package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
  213. package/src/config/acp-agent-write.ts +1 -1
  214. package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
  215. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  216. package/src/config/call-site-defaults.ts +0 -6
  217. package/src/config/cloud-identity.ts +12 -5
  218. package/src/config/composer-preferences.ts +1 -1
  219. package/src/config/default-profile-catalog.ts +8 -75
  220. package/src/config/default-profile-names.ts +2 -25
  221. package/src/config/env-registry.ts +1 -14
  222. package/src/config/env.ts +8 -6
  223. package/src/config/llm-resolver.ts +1 -2
  224. package/src/config/loader.ts +13 -17
  225. package/src/config/profile-materialization.ts +1 -1
  226. package/src/config/schema.ts +1 -7
  227. package/src/config/schemas/call-site-catalog.ts +0 -7
  228. package/src/config/schemas/llm.ts +25 -32
  229. package/src/config/seed-inference-profiles.ts +16 -17
  230. package/src/config/skills.ts +2 -2
  231. package/src/config/sync-gated-profiles.ts +6 -24
  232. package/src/credential-health/credential-health-service.ts +10 -3
  233. package/src/daemon/approval-generators.ts +3 -3
  234. package/src/daemon/config-watcher.ts +2 -2
  235. package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
  236. package/src/daemon/conversation-agent-loop.ts +6 -97
  237. package/src/daemon/conversation-process.ts +1 -1
  238. package/src/daemon/conversation-skill-tools.ts +4 -72
  239. package/src/daemon/conversation-store.ts +1 -1
  240. package/src/daemon/conversation-surface-state.ts +0 -33
  241. package/src/daemon/conversation-surfaces.ts +1 -86
  242. package/src/daemon/conversation-tool-setup.test.ts +1 -1
  243. package/src/daemon/conversation-tool-setup.ts +0 -23
  244. package/src/daemon/conversation.ts +3 -5
  245. package/src/daemon/daemon-control.ts +3 -3
  246. package/src/daemon/dictation-profile-store.ts +3 -3
  247. package/src/daemon/event-loop-watchdog.test.ts +2 -198
  248. package/src/daemon/event-loop-watchdog.ts +0 -185
  249. package/src/daemon/external-plugins-bootstrap.ts +1 -1
  250. package/src/daemon/first-greeting.ts +1 -1
  251. package/src/daemon/handlers/skills.ts +1 -1
  252. package/src/daemon/host-app-control-proxy.ts +1 -1
  253. package/src/daemon/host-cu-proxy.ts +2 -2
  254. package/src/daemon/identity-helpers.ts +1 -1
  255. package/src/daemon/lifecycle.ts +11 -15
  256. package/src/daemon/main.ts +1 -1
  257. package/src/daemon/now-scratchpad.ts +1 -1
  258. package/src/daemon/process-message.ts +4 -4
  259. package/src/daemon/profiler-run-store.ts +2 -2
  260. package/src/daemon/providers-setup.ts +2 -2
  261. package/src/daemon/shutdown-handlers.ts +0 -10
  262. package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
  263. package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
  264. package/src/daemon/tool-side-effects.ts +1 -1
  265. package/src/desktop/desktop-session-manager.ts +1 -1
  266. package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
  267. package/src/heartbeat/heartbeat-service.ts +1 -1
  268. package/src/home/feed-writer.ts +1 -1
  269. package/src/home/home-greeting-cache.ts +1 -1
  270. package/src/home/relationship-state-writer.ts +2 -2
  271. package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
  272. package/src/hooks/hook-loader.ts +2 -2
  273. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  274. package/src/inbound/oauth-callback-url.ts +3 -3
  275. package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
  276. package/src/ipc/socket-path.ts +1 -1
  277. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
  278. package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
  279. package/src/live-voice/live-voice-session.ts +3 -66
  280. package/src/mcp/__tests__/effective-config.test.ts +1 -1
  281. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
  282. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
  283. package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
  284. package/src/mcp/__tests__/reload-signal.test.ts +1 -1
  285. package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
  286. package/src/mcp/reload-signal.ts +1 -1
  287. package/src/mcp/workspace-mcp-config.ts +1 -23
  288. package/src/messaging/draft-store.ts +1 -1
  289. package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
  290. package/src/monitoring/__tests__/page-cache.test.ts +1 -1
  291. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  292. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
  293. package/src/monitoring/active-conversations.ts +1 -1
  294. package/src/monitoring/control.ts +1 -1
  295. package/src/monitoring/daemon-boot-time.ts +1 -1
  296. package/src/monitoring/daemon-heartbeat.ts +1 -1
  297. package/src/monitoring/page-cache.ts +1 -1
  298. package/src/monitoring/plugin-auto-update.ts +1 -7
  299. package/src/monitoring/plugin-source-watch.ts +1 -1
  300. package/src/monitoring/recovery/db.ts +1 -1
  301. package/src/monitoring/recovery/inflight-content.ts +1 -1
  302. package/src/monitoring/resource-sampler.ts +3 -14
  303. package/src/monitoring/stall-capture.ts +1 -1
  304. package/src/monitoring/worker.ts +9 -76
  305. package/src/monitoring/workspace-git-heartbeat.ts +1 -1
  306. package/src/oauth/connect-orchestrator.ts +4 -4
  307. package/src/permissions/checker.ts +1 -1
  308. package/src/permissions/workspace-policy.ts +1 -1
  309. package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
  310. package/src/persistence/__tests__/message-content-file.test.ts +1 -1
  311. package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
  312. package/src/persistence/attachments-store.ts +1 -1
  313. package/src/persistence/conversation-crud.ts +1 -38
  314. package/src/persistence/conversation-directories.ts +1 -1
  315. package/src/persistence/conversation-types.ts +0 -8
  316. package/src/persistence/db-async-query.ts +1 -1
  317. package/src/persistence/db-connection.ts +11 -1
  318. package/src/persistence/db-init.ts +1 -1
  319. package/src/persistence/db-maintenance.ts +1 -1
  320. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
  321. package/src/persistence/embeddings/embedding-local.ts +4 -4
  322. package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
  323. package/src/persistence/embeddings/qdrant-client.ts +1 -1
  324. package/src/persistence/embeddings/qdrant-manager.ts +1 -1
  325. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
  326. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
  327. package/src/persistence/job-handlers/cleanup.ts +8 -17
  328. package/src/persistence/llm-usage-store.ts +2 -229
  329. package/src/persistence/message-content-file.ts +1 -1
  330. package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
  331. package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
  332. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  333. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  334. package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
  335. package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
  336. package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
  337. package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
  338. package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
  339. package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
  340. package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
  341. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
  342. package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
  343. package/src/persistence/migrations/helpers/relocation.ts +1 -1
  344. package/src/persistence/migrations/run-migrations.ts +1 -1
  345. package/src/persistence/migrations/validate-migration-state.ts +1 -1
  346. package/src/persistence/raw-query.ts +1 -29
  347. package/src/persistence/slow-sync-log.ts +0 -23
  348. package/src/persistence/steps.ts +2 -0
  349. package/src/{telemetry → persistence}/tool-audit.ts +6 -121
  350. package/src/plugin-api/index.ts +1 -1
  351. package/src/plugin-api/plugin-name-env.ts +1 -1
  352. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
  353. package/src/plugins/collect-source-versions.ts +1 -1
  354. package/src/plugins/defaults/channel/package.json +1 -1
  355. package/src/plugins/defaults/cloud-hosted/package.json +1 -1
  356. package/src/plugins/defaults/compaction/package.json +1 -1
  357. package/src/plugins/defaults/documents/package.json +1 -1
  358. package/src/plugins/defaults/empty-response/package.json +1 -1
  359. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  360. package/src/plugins/defaults/image-fallback/package.json +1 -1
  361. package/src/plugins/defaults/image-recovery/package.json +1 -1
  362. package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
  363. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
  364. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
  365. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
  366. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
  367. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
  368. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
  369. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
  370. package/src/plugins/defaults/memory/package.json +1 -1
  371. package/src/plugins/defaults/memory/paths.ts +4 -4
  372. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  373. package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
  374. package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
  375. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  376. package/src/plugins/defaults/memory/startup.ts +1 -22
  377. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
  378. package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
  379. package/src/plugins/defaults/memory/worker-control.ts +1 -1
  380. package/src/plugins/defaults/memory/worker.ts +2 -2
  381. package/src/plugins/defaults/session/package.json +1 -1
  382. package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
  383. package/src/plugins/defaults/task-progress/package.json +1 -1
  384. package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
  385. package/src/plugins/defaults/title-generate/package.json +1 -1
  386. package/src/plugins/defaults/tool-error/package.json +1 -1
  387. package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
  388. package/src/plugins/defaults/turn-context/package.json +1 -1
  389. package/src/plugins/defaults/workspace/injectors.ts +1 -1
  390. package/src/plugins/defaults/workspace/package.json +1 -1
  391. package/src/plugins/disabled-state.ts +1 -1
  392. package/src/plugins/ensure-plugin-api-shim.ts +1 -1
  393. package/src/plugins/ensure-shared-dep-links.ts +1 -1
  394. package/src/plugins/installed-plugin-dirs.ts +1 -1
  395. package/src/plugins/mcp-servers.ts +7 -9
  396. package/src/plugins/mtime-cache.ts +2 -2
  397. package/src/plugins/source-versions.ts +1 -1
  398. package/src/prompts/bootstrap-cleanup.ts +1 -1
  399. package/src/prompts/persona-resolver.ts +1 -1
  400. package/src/prompts/sections.ts +2 -2
  401. package/src/prompts/system-prompt.ts +10 -42
  402. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
  403. package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
  404. package/src/providers/cadet/client.ts +1 -1
  405. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
  406. package/src/providers/inference/adapter-factory.ts +1 -1
  407. package/src/providers/inference/backfill.ts +3 -10
  408. package/src/providers/inference/profile-probe.ts +1 -1
  409. package/src/providers/retry.ts +0 -2
  410. package/src/providers/types.ts +0 -7
  411. package/src/providers/usage-tracking.ts +1 -1
  412. package/src/routes/__tests__/route-host.test.ts +1 -1
  413. package/src/routes/control.ts +1 -1
  414. package/src/routes/route-host-client.ts +1 -1
  415. package/src/routes/worker.ts +2 -2
  416. package/src/runtime/agent-wake.ts +1 -1
  417. package/src/runtime/assistant-stream-state.ts +1 -1
  418. package/src/runtime/auth/token-service.ts +1 -1
  419. package/src/runtime/background-job-runner.ts +1 -1
  420. package/src/runtime/middleware/twilio-validation.ts +2 -2
  421. package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
  422. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
  423. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
  424. package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
  425. package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
  426. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +72 -298
  427. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
  428. package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
  429. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
  430. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  431. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  432. package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
  433. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
  434. package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
  435. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
  436. package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
  437. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
  438. package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
  439. package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
  440. package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
  441. package/src/runtime/routes/app-management-routes.ts +1 -1
  442. package/src/runtime/routes/attachment-routes.ts +1 -1
  443. package/src/runtime/routes/audit-routes.ts +1 -1
  444. package/src/runtime/routes/avatar-routes.ts +3 -10
  445. package/src/runtime/routes/cloud-routes.ts +3 -3
  446. package/src/runtime/routes/content-source-routes.ts +1 -1
  447. package/src/runtime/routes/conversation-query-routes.ts +49 -706
  448. package/src/runtime/routes/conversation-routes.ts +1 -38
  449. package/src/runtime/routes/debug-routes.ts +1 -1
  450. package/src/runtime/routes/deprecated-route-context.ts +5 -61
  451. package/src/runtime/routes/heartbeat-routes.ts +1 -1
  452. package/src/runtime/routes/identity-routes.ts +1 -1
  453. package/src/runtime/routes/index.ts +0 -6
  454. package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
  455. package/src/runtime/routes/inference-profiles-routes.ts +48 -21
  456. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
  457. package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
  458. package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
  459. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
  460. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
  461. package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
  462. package/src/runtime/routes/log-export-routes.ts +17 -15
  463. package/src/runtime/routes/migration-rollback-routes.ts +1 -1
  464. package/src/runtime/routes/migration-routes.ts +2 -3
  465. package/src/runtime/routes/monitoring-routes.ts +2 -2
  466. package/src/runtime/routes/oauth-providers.ts +5 -5
  467. package/src/runtime/routes/plugins-routes.ts +38 -163
  468. package/src/runtime/routes/profiler-routes.ts +1 -1
  469. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  470. package/src/runtime/routes/sanity-routes.ts +1 -1
  471. package/src/runtime/routes/schedule-routes.ts +1 -1
  472. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  473. package/src/runtime/routes/settings-routes.ts +1 -1
  474. package/src/runtime/routes/sounds-config-routes.ts +1 -1
  475. package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
  476. package/src/runtime/routes/user-route-dispatcher.ts +1 -3
  477. package/src/runtime/routes/user-route-import.ts +1 -1
  478. package/src/runtime/routes/user-route-resolution.ts +1 -1
  479. package/src/runtime/routes/user-routes-cli.ts +1 -1
  480. package/src/runtime/routes/workspace-commit-routes.ts +1 -1
  481. package/src/runtime/routes/workspace-greetings.ts +1 -1
  482. package/src/runtime/routes/workspace-routes.ts +1 -1
  483. package/src/runtime/routes/workspace-utils.ts +1 -1
  484. package/src/runtime/sync/resource-sync-events.ts +1 -1
  485. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
  486. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
  487. package/src/schedule/plugin-schedule-availability.ts +1 -1
  488. package/src/schedule/plugin-schedule-declarations.ts +1 -1
  489. package/src/schedule/run-script.ts +1 -1
  490. package/src/schedule/scheduler.ts +1 -11
  491. package/src/schedule/worker-control.ts +1 -1
  492. package/src/schedule/worker.ts +3 -3
  493. package/src/security/oauth2.ts +2 -2
  494. package/src/security/secret-allowlist.ts +1 -1
  495. package/src/signals/cancel.ts +1 -1
  496. package/src/signals/conversation-undo.ts +1 -1
  497. package/src/signals/emit-event.ts +1 -1
  498. package/src/signals/event-stream.ts +1 -1
  499. package/src/signals/user-message.ts +1 -1
  500. package/src/skills/catalog-install.ts +2 -1
  501. package/src/skills/clawhub.ts +1 -1
  502. package/src/skills/cloud-store.ts +1 -1
  503. package/src/skills/path-classifier.ts +1 -1
  504. package/src/skills/skill-history.ts +1 -1
  505. package/src/skills/skillssh-registry.ts +1 -1
  506. package/src/skills/uninstall.ts +1 -1
  507. package/src/skills/workspace-skill-md-signature.ts +1 -1
  508. package/src/subagent/manager.ts +1 -1
  509. package/src/theme/workspace-theme.ts +1 -1
  510. package/src/tools/browser/auth-cache.ts +1 -1
  511. package/src/tools/browser/browser-manager.ts +1 -1
  512. package/src/tools/browser/runtime-check.ts +1 -1
  513. package/src/tools/executor.ts +4 -4
  514. package/src/tools/filesystem/write.ts +1 -1
  515. package/src/tools/permission-checker.ts +2 -51
  516. package/src/tools/run-standalone.ts +1 -1
  517. package/src/tools/skills/format-input-schema.ts +1 -1
  518. package/src/tools/skills/load.ts +1 -1
  519. package/src/tools/skills/scaffold-cloud.ts +0 -32
  520. package/src/tools/terminal/safe-env.ts +1 -2
  521. package/src/tools/terminal/sanitized-bash.ts +1 -1
  522. package/src/tools/terminal/shell.ts +1 -1
  523. package/src/tools/tool-approval-handler.ts +4 -1
  524. package/src/tools/workflows/manage-workflows.ts +2 -2
  525. package/src/tools/workflows/run-workflow.test.ts +1 -1
  526. package/src/tools/workspace-tools/loader.ts +1 -1
  527. package/src/tts/synthesis-stream.ts +2 -2
  528. package/src/usage/attribution.ts +1 -11
  529. package/src/util/browser.ts +1 -1
  530. package/src/util/bun-runtime.ts +2 -1
  531. package/src/util/device-id.ts +1 -1
  532. package/src/util/disk-usage.ts +4 -139
  533. package/src/util/layout.ts +3 -3
  534. package/src/util/logger.ts +1 -1
  535. package/src/util/logs-db-path.ts +1 -1
  536. package/src/util/memory-db-path.ts +1 -1
  537. package/src/util/{platform.ts → os.ts} +5 -30
  538. package/src/util/process-tree.ts +19 -0
  539. package/src/util/sqlite3-runtime.ts +1 -1
  540. package/src/util/telemetry-db-path.ts +1 -1
  541. package/src/watcher/__tests__/engine.test.ts +0 -23
  542. package/src/watcher/engine.ts +0 -7
  543. package/src/windows-compiled-cli.ts +0 -4
  544. package/src/windows-compiled-worker-entry.ts +0 -6
  545. package/src/workflows/leaf-runner.test.ts +1 -1
  546. package/src/workflows/leaf-runner.ts +1 -1
  547. package/src/workflows/library.ts +1 -1
  548. package/src/workspace/adaptive-thinking-repair.ts +5 -24
  549. package/src/workspace/byok-default-profile-ensure.ts +24 -26
  550. package/src/workspace/custom-profile-ensure.ts +2 -2
  551. package/src/workspace/git-service.ts +1 -1
  552. package/src/workspace/hatched-date.ts +1 -1
  553. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
  554. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  555. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
  556. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
  557. package/src/workspace/migrations/registry.ts +0 -4
  558. package/src/workspace/turn-commit.ts +1 -1
  559. package/docs/activation-funnel-telemetry.md +0 -324
  560. package/scripts/bundled-plugin-packages.ts +0 -154
  561. package/scripts/generate-bundled-plugin-packages.ts +0 -29
  562. package/src/__tests__/activation-early-marking.test.ts +0 -114
  563. package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
  564. package/src/__tests__/config-get-vision-flag.test.ts +0 -139
  565. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
  566. package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
  567. package/src/__tests__/telemetry-routes.test.ts +0 -182
  568. package/src/__tests__/turn-events-store.test.ts +0 -376
  569. package/src/__tests__/ui-channel-variants.test.ts +0 -53
  570. package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
  571. package/src/avatar/avatar-changed-telemetry.ts +0 -128
  572. package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
  573. package/src/cli/commands/telemetry.help.ts +0 -27
  574. package/src/cli/commands/telemetry.ts +0 -83
  575. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
  576. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
  577. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
  578. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
  579. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
  580. package/src/cli/lib/bundled-marketplace.json +0 -1575
  581. package/src/cli/lib/bundled-plugin-packages.json +0 -827
  582. package/src/cli/lib/bundled-plugin-packages.ts +0 -87
  583. package/src/cli/lib/plugin-catalog-local.ts +0 -94
  584. package/src/cli/lib/plugin-pin-history.ts +0 -276
  585. package/src/cloud/feature-gate.ts +0 -8
  586. package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
  587. package/src/config/cloud-rehydration.ts +0 -35
  588. package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
  589. package/src/daemon/auto-profile-router.ts +0 -428
  590. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
  591. package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
  592. package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
  593. package/src/monitoring/db-integrity-check.ts +0 -163
  594. package/src/monitoring/db-integrity-sample.ts +0 -176
  595. package/src/monitoring/oom-kill-reporter.ts +0 -469
  596. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
  597. package/src/onboarding/onboarding-events-store.ts +0 -296
  598. package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
  599. package/src/persistence/lifecycle-events-store.test.ts +0 -134
  600. package/src/persistence/lifecycle-events-store.ts +0 -110
  601. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
  602. package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
  603. package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
  604. package/src/runtime/routes/auto-profile-routes.ts +0 -83
  605. package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
  606. package/src/runtime/routes/telemetry-routes.ts +0 -274
  607. package/src/security/auth-fallback-events-store.ts +0 -57
  608. package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
  609. package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
  610. package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
  611. package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
  612. package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
  613. package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
  614. package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
  615. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
  616. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
  617. package/src/telemetry/activation-funnel.ts +0 -172
  618. package/src/telemetry/config-setting-events-store.ts +0 -40
  619. package/src/telemetry/config-setting-snapshot.ts +0 -170
  620. package/src/telemetry/flush-checkpoints.ts +0 -70
  621. package/src/telemetry/live-voice-funnel.ts +0 -185
  622. package/src/telemetry/memory-corpus-size.test.ts +0 -120
  623. package/src/telemetry/memory-corpus-size.ts +0 -184
  624. package/src/telemetry/memory-tier-reporter.test.ts +0 -195
  625. package/src/telemetry/memory-tier-reporter.ts +0 -130
  626. package/src/telemetry/phone-call-funnel.ts +0 -144
  627. package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
  628. package/src/telemetry/skill-loaded-events-store.ts +0 -39
  629. package/src/telemetry/telemetry-event-sources.test.ts +0 -223
  630. package/src/telemetry/telemetry-event-sources.ts +0 -597
  631. package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
  632. package/src/telemetry/telemetry-events-outbox.ts +0 -237
  633. package/src/telemetry/telemetry-main-db.ts +0 -48
  634. package/src/telemetry/telemetry-wire-source.json +0 -4
  635. package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
  636. package/src/telemetry/telemetry-wire-validation.ts +0 -162
  637. package/src/telemetry/telemetry-wire.generated.ts +0 -483
  638. package/src/telemetry/tool-executed-events-store.test.ts +0 -210
  639. package/src/telemetry/tool-executed-events-store.ts +0 -102
  640. package/src/telemetry/trace-collection-policy.test.ts +0 -28
  641. package/src/telemetry/trace-collection-policy.ts +0 -30
  642. package/src/telemetry/turn-events-store.ts +0 -216
  643. package/src/telemetry/turn-trace-store.test.ts +0 -884
  644. package/src/telemetry/turn-trace-store.ts +0 -399
  645. package/src/telemetry/types.test.ts +0 -38
  646. package/src/telemetry/types.ts +0 -780
  647. package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
  648. package/src/telemetry/usage-telemetry-reporter.ts +0 -566
  649. package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
  650. package/src/telemetry/watchdog-direct-emit.ts +0 -104
  651. package/src/telemetry/watchdog-events-store.ts +0 -31
  652. package/src/tools/ui-surface/channel-variants.ts +0 -52
  653. package/src/watcher/__tests__/telemetry.test.ts +0 -178
  654. package/src/watcher/telemetry.ts +0 -93
  655. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
  656. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
  657. /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
  658. /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
@@ -10,9 +10,7 @@ import type {
10
10
  ToolUseContent,
11
11
  } from "../providers/types.js";
12
12
  import type { SkillInstallMeta } from "../skills/install-meta.js";
13
- import type { SkillLoadedEventRecord } from "../telemetry/skill-loaded-events-store.js";
14
13
  import type { Tool } from "../tools/types.js";
15
- import type { UsageAttributionSnapshot } from "../usage/attribution.js";
16
14
  import { buildSkillLoadHistory } from "./test-support/browser-skill-harness.js";
17
15
 
18
16
  // ---------------------------------------------------------------------------
@@ -31,11 +29,7 @@ let mockVersionHashErrors: Set<string> = new Set();
31
29
  /** Install metadata by skill id (readInstallMeta derives the id from the directory path). */
32
30
  let mockInstallMetas: Record<string, SkillInstallMeta | null> = {};
33
31
  /** Merged catalog entries returned by getCachedCatalogSync. */
34
- let mockCachedCatalog: Array<{ id: string; updatedAt?: string }> = [];
35
- /** skill_loaded events captured by the mocked store. */
36
- let recordedSkillLoadedEvents: SkillLoadedEventRecord[] = [];
37
- /** When true, recordSkillLoadedEvent throws (simulates a store failure). */
38
- let mockRecordSkillLoadedFailure = false;
32
+ const mockCachedCatalog: Array<{ id: string; updatedAt?: string }> = [];
39
33
  /** Skill IDs for which registerSkillTools throws (simulates a different-owner tool name collision). */
40
34
  let mockRegisterFailures: Set<string> = new Set();
41
35
  /** `(skillDir, today)` pairs captured by the mocked touchSkillLastUsed. */
@@ -282,15 +276,6 @@ mock.module("../skills/catalog-cache.js", () => ({
282
276
  getCachedCatalogSync: () => mockCachedCatalog,
283
277
  }));
284
278
 
285
- mock.module("../telemetry/skill-loaded-events-store.js", () => ({
286
- recordSkillLoadedEvent: (record: SkillLoadedEventRecord) => {
287
- if (mockRecordSkillLoadedFailure) {
288
- throw new Error("Mock: skill_loaded store failure");
289
- }
290
- recordedSkillLoadedEvents.push(record);
291
- },
292
- }));
293
-
294
279
  // ---------------------------------------------------------------------------
295
280
  // Import module under test (after mocks)
296
281
  // ---------------------------------------------------------------------------
@@ -811,426 +796,6 @@ describe("projectSkillTools", () => {
811
796
  });
812
797
  });
813
798
 
814
- // ---------------------------------------------------------------------------
815
- // skill_loaded telemetry recording
816
- // ---------------------------------------------------------------------------
817
-
818
- describe("skill_loaded telemetry recording", () => {
819
- let sessionState: Map<string, string>;
820
-
821
- function makeAttribution(): UsageAttributionSnapshot {
822
- return {
823
- callSite: "mainAgent",
824
- activeProfile: "balanced",
825
- overrideProfile: null,
826
- callSiteProfile: null,
827
- appliedProfile: "balanced",
828
- profileSource: "active",
829
- resolvedProvider: "test-provider",
830
- resolvedModel: "test-model",
831
- resolvedMixArm: null,
832
- };
833
- }
834
-
835
- function makeTelemetry() {
836
- return { conversationId: "conv-xyz", attribution: makeAttribution() };
837
- }
838
-
839
- beforeEach(() => {
840
- mockCatalog = [];
841
- mockManifests = {};
842
- mockRegisteredTools = new Map();
843
- mockUnregisteredSkillIds = [];
844
- mockSkillRefCount = new Map();
845
- mockVersionHashes = {};
846
- mockVersionHashErrors = new Set();
847
- mockInstallMetas = {};
848
- mockCachedCatalog = [];
849
- recordedSkillLoadedEvents = [];
850
- mockRecordSkillLoadedFailure = false;
851
- mockRegisterFailures = new Set();
852
- sessionState = new Map<string, string>();
853
- });
854
-
855
- test("bundled skill activation records an event with attribution and catalog updatedAt", () => {
856
- mockCatalog = [makeSkill("notes", undefined, "bundled")];
857
- mockManifests = { notes: makeManifest(["notes_add"]) };
858
- mockCachedCatalog = [{ id: "notes", updatedAt: "2026-01-02T03:04:05Z" }];
859
-
860
- const history: Message[] = [
861
- ...skillLoadMessages('<loaded_skill id="notes" />'),
862
- ];
863
- projectSkillTools(history, {
864
- previouslyActiveSkillIds: sessionState,
865
- telemetry: makeTelemetry(),
866
- });
867
-
868
- expect(recordedSkillLoadedEvents).toHaveLength(1);
869
- expect(recordedSkillLoadedEvents[0]).toEqual({
870
- conversationId: "conv-xyz",
871
- skillName: "notes",
872
- skillUpdatedAt: "2026-01-02T03:04:05Z",
873
- provider: "test-provider",
874
- model: "test-model",
875
- inferenceProfile: "balanced",
876
- inferenceProfileSource: "active",
877
- });
878
- });
879
-
880
- test("managed skill with cadet install origin records an event", () => {
881
- mockCatalog = [makeSkill("deploy")];
882
- mockManifests = { deploy: makeManifest(["deploy_run"]) };
883
- mockInstallMetas = {
884
- deploy: { origin: "cadet", installedAt: "2026-01-01T00:00:00Z" },
885
- };
886
-
887
- const history: Message[] = [
888
- ...skillLoadMessages('<loaded_skill id="deploy" />'),
889
- ];
890
- projectSkillTools(history, {
891
- previouslyActiveSkillIds: sessionState,
892
- telemetry: makeTelemetry(),
893
- });
894
-
895
- expect(recordedSkillLoadedEvents).toHaveLength(1);
896
- expect(recordedSkillLoadedEvents[0].skillName).toBe("deploy");
897
- });
898
-
899
- test("managed skill with clawhub or custom origin does NOT record", () => {
900
- mockCatalog = [makeSkill("third-party"), makeSkill("homemade")];
901
- mockManifests = {
902
- "third-party": makeManifest(["tp_run"]),
903
- homemade: makeManifest(["hm_run"]),
904
- };
905
- mockInstallMetas = {
906
- "third-party": {
907
- origin: "clawhub",
908
- installedAt: "2026-01-01T00:00:00Z",
909
- },
910
- homemade: { origin: "custom", installedAt: "2026-01-01T00:00:00Z" },
911
- };
912
-
913
- const history: Message[] = [
914
- ...skillLoadMessages('<loaded_skill id="third-party" />'),
915
- ...skillLoadMessages('<loaded_skill id="homemade" />'),
916
- ];
917
- const result = projectSkillTools(history, {
918
- previouslyActiveSkillIds: sessionState,
919
- telemetry: makeTelemetry(),
920
- });
921
-
922
- expect(recordedSkillLoadedEvents).toHaveLength(0);
923
- // Tool projection itself is unaffected
924
- expect(result.allowedToolNames).toEqual(new Set(["tp_run", "hm_run"]));
925
- });
926
-
927
- test("managed skill without install metadata does NOT record", () => {
928
- mockCatalog = [makeSkill("deploy")];
929
- mockManifests = { deploy: makeManifest(["deploy_run"]) };
930
-
931
- const history: Message[] = [
932
- ...skillLoadMessages('<loaded_skill id="deploy" />'),
933
- ];
934
- projectSkillTools(history, {
935
- previouslyActiveSkillIds: sessionState,
936
- telemetry: makeTelemetry(),
937
- });
938
-
939
- expect(recordedSkillLoadedEvents).toHaveLength(0);
940
- });
941
-
942
- test("workspace skill does NOT record", () => {
943
- mockCatalog = [makeSkill("local-helper", undefined, "workspace")];
944
- mockManifests = { "local-helper": makeManifest(["lh_run"]) };
945
-
946
- const history: Message[] = [
947
- ...skillLoadMessages('<loaded_skill id="local-helper" />'),
948
- ];
949
- projectSkillTools(history, {
950
- previouslyActiveSkillIds: sessionState,
951
- telemetry: makeTelemetry(),
952
- });
953
-
954
- expect(recordedSkillLoadedEvents).toHaveLength(0);
955
- });
956
-
957
- test("second turn with the skill still active does NOT re-record", () => {
958
- mockCatalog = [makeSkill("notes", undefined, "bundled")];
959
- mockManifests = { notes: makeManifest(["notes_add"]) };
960
-
961
- const history: Message[] = [
962
- ...skillLoadMessages('<loaded_skill id="notes" />'),
963
- ];
964
- projectSkillTools(history, {
965
- previouslyActiveSkillIds: sessionState,
966
- telemetry: makeTelemetry(),
967
- });
968
- projectSkillTools(history, {
969
- previouslyActiveSkillIds: sessionState,
970
- telemetry: makeTelemetry(),
971
- });
972
-
973
- expect(recordedSkillLoadedEvents).toHaveLength(1);
974
- });
975
-
976
- test("version-hash change that re-registers counts as a new load", () => {
977
- mockCatalog = [makeSkill("notes", undefined, "bundled")];
978
- mockManifests = { notes: makeManifest(["notes_add"]) };
979
- mockVersionHashes = { notes: "v1:hash-aaa" };
980
-
981
- const history: Message[] = [
982
- ...skillLoadMessages('<loaded_skill id="notes" />'),
983
- ];
984
- projectSkillTools(history, {
985
- previouslyActiveSkillIds: sessionState,
986
- telemetry: makeTelemetry(),
987
- });
988
-
989
- mockVersionHashes = { notes: "v1:hash-bbb" };
990
- projectSkillTools(history, {
991
- previouslyActiveSkillIds: sessionState,
992
- telemetry: makeTelemetry(),
993
- });
994
-
995
- expect(recordedSkillLoadedEvents).toHaveLength(2);
996
- });
997
-
998
- test("registration that throws on turn 1 and succeeds on turn 2 records exactly one row total", () => {
999
- mockCatalog = [makeSkill("notes", undefined, "bundled")];
1000
- mockManifests = { notes: makeManifest(["notes_add"]) };
1001
- mockRegisterFailures = new Set(["notes"]);
1002
-
1003
- const history: Message[] = [
1004
- ...skillLoadMessages('<loaded_skill id="notes" />'),
1005
- ];
1006
-
1007
- // Turn 1: registration throws — no row, no tracking, registry untouched.
1008
- const result1 = projectSkillTools(history, {
1009
- previouslyActiveSkillIds: sessionState,
1010
- telemetry: makeTelemetry(),
1011
- });
1012
- expect(recordedSkillLoadedEvents).toHaveLength(0);
1013
- expect(result1.allowedToolNames.size).toBe(0);
1014
- expect(sessionState.has("notes")).toBe(false);
1015
- expect(mockUnregisteredSkillIds).toEqual([]);
1016
-
1017
- // Turn 2: registration succeeds — the load is recorded exactly once.
1018
- mockRegisterFailures = new Set();
1019
- const result2 = projectSkillTools(history, {
1020
- previouslyActiveSkillIds: sessionState,
1021
- telemetry: makeTelemetry(),
1022
- });
1023
- expect(recordedSkillLoadedEvents).toHaveLength(1);
1024
- expect(recordedSkillLoadedEvents[0].skillName).toBe("notes");
1025
- expect(result2.allowedToolNames.has("notes_add")).toBe(true);
1026
- expect(sessionState.has("notes")).toBe(true);
1027
- expect(mockSkillRefCount.get("notes")).toBe(1);
1028
- });
1029
-
1030
- test("persistently failing registration never duplicates skill_loaded rows across turns", () => {
1031
- mockCatalog = [makeSkill("notes", undefined, "bundled")];
1032
- mockManifests = { notes: makeManifest(["notes_add"]) };
1033
- mockRegisterFailures = new Set(["notes"]);
1034
-
1035
- const history: Message[] = [
1036
- ...skillLoadMessages('<loaded_skill id="notes" />'),
1037
- ];
1038
-
1039
- for (let turn = 1; turn <= 3; turn++) {
1040
- projectSkillTools(history, {
1041
- previouslyActiveSkillIds: sessionState,
1042
- telemetry: makeTelemetry(),
1043
- });
1044
- }
1045
-
1046
- expect(recordedSkillLoadedEvents).toHaveLength(0);
1047
- expect(mockUnregisteredSkillIds).toEqual([]);
1048
- });
1049
-
1050
- test("catalog miss yields undefined skillUpdatedAt (persisted as null)", () => {
1051
- mockCatalog = [makeSkill("notes", undefined, "bundled")];
1052
- mockManifests = { notes: makeManifest(["notes_add"]) };
1053
- mockCachedCatalog = []; // no merged-catalog entry for "notes"
1054
-
1055
- const history: Message[] = [
1056
- ...skillLoadMessages('<loaded_skill id="notes" />'),
1057
- ];
1058
- projectSkillTools(history, {
1059
- previouslyActiveSkillIds: sessionState,
1060
- telemetry: makeTelemetry(),
1061
- });
1062
-
1063
- expect(recordedSkillLoadedEvents).toHaveLength(1);
1064
- expect(recordedSkillLoadedEvents[0].skillUpdatedAt).toBeUndefined();
1065
- });
1066
-
1067
- test("null attribution records the event without model fields", () => {
1068
- mockCatalog = [makeSkill("notes", undefined, "bundled")];
1069
- mockManifests = { notes: makeManifest(["notes_add"]) };
1070
-
1071
- const history: Message[] = [
1072
- ...skillLoadMessages('<loaded_skill id="notes" />'),
1073
- ];
1074
- projectSkillTools(history, {
1075
- previouslyActiveSkillIds: sessionState,
1076
- telemetry: { conversationId: "conv-xyz", attribution: null },
1077
- });
1078
-
1079
- expect(recordedSkillLoadedEvents).toHaveLength(1);
1080
- expect(recordedSkillLoadedEvents[0]).toEqual({
1081
- conversationId: "conv-xyz",
1082
- skillName: "notes",
1083
- skillUpdatedAt: undefined,
1084
- provider: null,
1085
- model: null,
1086
- inferenceProfile: null,
1087
- inferenceProfileSource: null,
1088
- });
1089
- });
1090
-
1091
- test("store failure does not throw out of projectSkillTools", () => {
1092
- mockCatalog = [makeSkill("notes", undefined, "bundled")];
1093
- mockManifests = { notes: makeManifest(["notes_add"]) };
1094
- mockRecordSkillLoadedFailure = true;
1095
-
1096
- const history: Message[] = [
1097
- ...skillLoadMessages('<loaded_skill id="notes" />'),
1098
- ];
1099
- const result = projectSkillTools(history, {
1100
- previouslyActiveSkillIds: sessionState,
1101
- telemetry: makeTelemetry(),
1102
- });
1103
-
1104
- // Tool projection behavior is unchanged when recording fails
1105
- expect(result.allowedToolNames.has("notes_add")).toBe(true);
1106
- expect(sessionState.has("notes")).toBe(true);
1107
- });
1108
-
1109
- test("instruction-only bundled skill (no TOOLS.json) records exactly one event", () => {
1110
- mockCatalog = [makeSkill("guides", undefined, "bundled")];
1111
- // No manifest registered for "guides" — instruction-only skill.
1112
- mockCachedCatalog = [{ id: "guides", updatedAt: "2026-02-03T04:05:06Z" }];
1113
-
1114
- const history: Message[] = [
1115
- ...skillLoadMessages('<loaded_skill id="guides" />'),
1116
- ];
1117
- projectSkillTools(history, {
1118
- previouslyActiveSkillIds: sessionState,
1119
- telemetry: makeTelemetry(),
1120
- });
1121
-
1122
- expect(recordedSkillLoadedEvents).toHaveLength(1);
1123
- expect(recordedSkillLoadedEvents[0]).toEqual({
1124
- conversationId: "conv-xyz",
1125
- skillName: "guides",
1126
- skillUpdatedAt: "2026-02-03T04:05:06Z",
1127
- provider: "test-provider",
1128
- model: "test-model",
1129
- inferenceProfile: "balanced",
1130
- inferenceProfileSource: "active",
1131
- });
1132
-
1133
- // Still active next turn — no re-record.
1134
- projectSkillTools(history, {
1135
- previouslyActiveSkillIds: sessionState,
1136
- telemetry: makeTelemetry(),
1137
- });
1138
- expect(recordedSkillLoadedEvents).toHaveLength(1);
1139
- });
1140
-
1141
- test("instruction-only managed skill with cadet origin records exactly one event", () => {
1142
- mockCatalog = [makeSkill("catalog-skill")];
1143
- // No manifest — mirrors installSkillLocally output for catalog skills.
1144
- mockInstallMetas = {
1145
- "catalog-skill": {
1146
- origin: "cadet",
1147
- installedAt: "2026-01-01T00:00:00Z",
1148
- },
1149
- };
1150
-
1151
- const history: Message[] = [
1152
- ...skillLoadMessages('<loaded_skill id="catalog-skill" />'),
1153
- ];
1154
- projectSkillTools(history, {
1155
- previouslyActiveSkillIds: sessionState,
1156
- telemetry: makeTelemetry(),
1157
- });
1158
- projectSkillTools(history, {
1159
- previouslyActiveSkillIds: sessionState,
1160
- telemetry: makeTelemetry(),
1161
- });
1162
-
1163
- expect(recordedSkillLoadedEvents).toHaveLength(1);
1164
- expect(recordedSkillLoadedEvents[0].skillName).toBe("catalog-skill");
1165
- });
1166
-
1167
- test("instruction-only non-Cadet skills never record", () => {
1168
- mockCatalog = [
1169
- makeSkill("local-notes", undefined, "workspace"),
1170
- makeSkill("homemade"),
1171
- ];
1172
- // No manifests for either skill.
1173
- mockInstallMetas = {
1174
- homemade: { origin: "custom", installedAt: "2026-01-01T00:00:00Z" },
1175
- };
1176
-
1177
- const history: Message[] = [
1178
- ...skillLoadMessages('<loaded_skill id="local-notes" />'),
1179
- ...skillLoadMessages('<loaded_skill id="homemade" />'),
1180
- ];
1181
- projectSkillTools(history, {
1182
- previouslyActiveSkillIds: sessionState,
1183
- telemetry: makeTelemetry(),
1184
- });
1185
-
1186
- expect(recordedSkillLoadedEvents).toHaveLength(0);
1187
- });
1188
-
1189
- test("instruction-only skill re-records after deactivation and reactivation, without touching the registry", () => {
1190
- mockCatalog = [makeSkill("guides", undefined, "bundled")];
1191
-
1192
- const history: Message[] = [
1193
- ...skillLoadMessages('<loaded_skill id="guides" />'),
1194
- ];
1195
- projectSkillTools(history, {
1196
- previouslyActiveSkillIds: sessionState,
1197
- telemetry: makeTelemetry(),
1198
- });
1199
- expect(recordedSkillLoadedEvents).toHaveLength(1);
1200
-
1201
- // Deactivated: marker gone. No tools were ever registered for it, so the
1202
- // registry must not be touched (refcounts belong to other conversations).
1203
- mockUnregisteredSkillIds = [];
1204
- projectSkillTools([], {
1205
- previouslyActiveSkillIds: sessionState,
1206
- telemetry: makeTelemetry(),
1207
- });
1208
- expect(mockUnregisteredSkillIds).not.toContain("guides");
1209
-
1210
- // Reactivated: a fresh activation is a new load.
1211
- projectSkillTools(history, {
1212
- previouslyActiveSkillIds: sessionState,
1213
- telemetry: makeTelemetry(),
1214
- });
1215
- expect(recordedSkillLoadedEvents).toHaveLength(2);
1216
- });
1217
-
1218
- test("absent telemetry context disables recording entirely", () => {
1219
- mockCatalog = [makeSkill("notes", undefined, "bundled")];
1220
- mockManifests = { notes: makeManifest(["notes_add"]) };
1221
-
1222
- const history: Message[] = [
1223
- ...skillLoadMessages('<loaded_skill id="notes" />'),
1224
- ];
1225
- const result = projectSkillTools(history, {
1226
- previouslyActiveSkillIds: sessionState,
1227
- });
1228
-
1229
- expect(recordedSkillLoadedEvents).toHaveLength(0);
1230
- expect(result.allowedToolNames.has("notes_add")).toBe(true);
1231
- });
1232
- });
1233
-
1234
799
  // ---------------------------------------------------------------------------
1235
800
  // lastUsedAt stamping on cloud-skill load
1236
801
  // ---------------------------------------------------------------------------
@@ -1251,7 +816,6 @@ describe("lastUsedAt stamping on cloud-skill load", () => {
1251
816
  mockVersionHashes = {};
1252
817
  mockVersionHashErrors = new Set();
1253
818
  mockInstallMetas = {};
1254
- recordedSkillLoadedEvents = [];
1255
819
  recordedLastUsedTouches = [];
1256
820
  sessionState = new Map<string, string>();
1257
821
  });
@@ -1273,8 +837,8 @@ describe("lastUsedAt stamping on cloud-skill load", () => {
1273
837
  ]);
1274
838
  });
1275
839
 
1276
- test("stamps managed skills even when telemetry is off (ungated)", () => {
1277
- // origin: "custom" is suppressed for telemetry but must still be stamped.
840
+ test("stamps managed skills regardless of origin", () => {
841
+ // origin: "custom" skills are stamped too.
1278
842
  mockCatalog = [makeSkill("homemade")];
1279
843
  mockManifests = { homemade: makeManifest(["hm_run"]) };
1280
844
  mockInstallMetas = {
@@ -1284,10 +848,8 @@ describe("lastUsedAt stamping on cloud-skill load", () => {
1284
848
  const history: Message[] = [
1285
849
  ...skillLoadMessages('<loaded_skill id="homemade" />'),
1286
850
  ];
1287
- // No telemetry option passed.
1288
851
  projectSkillTools(history, { previouslyActiveSkillIds: sessionState });
1289
852
 
1290
- expect(recordedSkillLoadedEvents).toHaveLength(0);
1291
853
  expect(recordedLastUsedTouches).toHaveLength(1);
1292
854
  expect(recordedLastUsedTouches[0].skillDir).toBe("/skills/homemade");
1293
855
  });
@@ -1321,11 +883,9 @@ describe("lastUsedAt stamping on cloud-skill load", () => {
1321
883
  ];
1322
884
  projectSkillTools(history, {
1323
885
  previouslyActiveSkillIds: sessionState,
1324
- telemetry: { conversationId: "conv-xyz", attribution: null },
1325
886
  });
1326
887
 
1327
888
  // Telemetry still fires for the bundled skill, but no usage stamp.
1328
- expect(recordedSkillLoadedEvents).toHaveLength(1);
1329
889
  expect(recordedLastUsedTouches).toHaveLength(0);
1330
890
  });
1331
891
 
@@ -1354,7 +914,7 @@ describe("lastUsedAt stamping on cloud-skill load", () => {
1354
914
  projectSkillTools(history, { previouslyActiveSkillIds: sessionState });
1355
915
  projectSkillTools(history, { previouslyActiveSkillIds: sessionState });
1356
916
 
1357
- // Stamping rides the same load events as telemetry — once per activation.
917
+ // Stamping rides the skill-load events — once per activation.
1358
918
  expect(recordedLastUsedTouches).toHaveLength(1);
1359
919
  });
1360
920
 
@@ -7,7 +7,7 @@ import {
7
7
  resolveSlash,
8
8
  type SlashContext,
9
9
  } from "../daemon/conversation-slash.js";
10
- import { getWorkspaceConfigPath } from "../util/platform.js";
10
+ import { getWorkspaceConfigPath } from "../util/layout.js";
11
11
 
12
12
  function makeSlashContext(overrides: Partial<SlashContext> = {}): SlashContext {
13
13
  return {
@@ -10,41 +10,16 @@ import {
10
10
  addMessage,
11
11
  clearAll,
12
12
  createConversation,
13
- deleteConversation,
14
- deleteConversationGently,
15
13
  deleteLastExchange,
16
14
  getConversation,
17
15
  getMessages,
18
16
  } from "../persistence/conversation-crud.js";
19
17
  import { isLastUserMessageToolResult } from "../persistence/conversation-queries.js";
20
- import { getDb, getTelemetryDb } from "../persistence/db-connection.js";
18
+ import { getDb } from "../persistence/db-connection.js";
21
19
  import { initializeDb } from "../persistence/db-init.js";
22
- import { telemetryEvents } from "../persistence/schema/index.js";
23
20
  // Initialize db once before all tests
24
21
  await initializeDb();
25
22
 
26
- /** Seed a pending telemetry outbox row (default name: skill_loaded). */
27
- function seedTelemetryEvent(
28
- id: string,
29
- createdAt: number,
30
- conversationId: string | null,
31
- name = "skill_loaded",
32
- ): void {
33
- getTelemetryDb()!
34
- .insert(telemetryEvents)
35
- .values({ id, name, createdAt, conversationId, payload: "{}" })
36
- .run();
37
- }
38
-
39
- function pendingTelemetryEventIds(): string[] {
40
- return getTelemetryDb()!
41
- .select()
42
- .from(telemetryEvents)
43
- .all()
44
- .map((r) => r.id)
45
- .sort();
46
- }
47
-
48
23
  describe("deleteLastExchange", () => {
49
24
  beforeEach(() => {
50
25
  // Reset database between tests by dropping and recreating tables
@@ -377,64 +352,6 @@ describe("attachment orphan cleanup", () => {
377
352
  expect(linkCount.c).toBe(0);
378
353
  });
379
354
 
380
- test("clearAll removes pending skill_loaded telemetry_events rows", async () => {
381
- // Privacy posture: Clear All wins over unflushed telemetry — the pending
382
- // skill_loaded rows (conversation id, skill name, model attribution)
383
- // must not survive the wipe and ship later.
384
- getTelemetryDb()!.delete(telemetryEvents).run();
385
- const conv = createConversation("test");
386
- seedTelemetryEvent("sle-clear-1", 1000, conv.id);
387
- // Rows without a conversation are wiped too.
388
- seedTelemetryEvent("sle-clear-2", 2000, null);
389
-
390
- await clearAll();
391
-
392
- const skillRows = getTelemetryDb()!
393
- .select()
394
- .from(telemetryEvents)
395
- .all()
396
- .filter((r) => r.name === "skill_loaded");
397
- expect(skillRows).toHaveLength(0);
398
- });
399
-
400
- test("deleteConversation removes that conversation's telemetry_events rows", async () => {
401
- getTelemetryDb()!.delete(telemetryEvents).run();
402
- const conv = createConversation("doomed");
403
- await addMessage(conv.id, "user", "hello");
404
- const other = createConversation("kept");
405
- seedTelemetryEvent("te-del-1", 1000, conv.id);
406
- seedTelemetryEvent("te-del-2", 2000, other.id);
407
- // Redaction keys on conversation_id regardless of event name.
408
- seedTelemetryEvent("te-del-3", 3000, conv.id, "future_event");
409
-
410
- deleteConversation(conv.id);
411
-
412
- expect(pendingTelemetryEventIds()).toEqual(["te-del-2"]);
413
- });
414
-
415
- test("deleteConversation removes telemetry_events rows when the conversation has no messages", () => {
416
- getTelemetryDb()!.delete(telemetryEvents).run();
417
- const conv = createConversation("empty");
418
- seedTelemetryEvent("te-del-empty", 1000, conv.id);
419
-
420
- deleteConversation(conv.id);
421
-
422
- expect(pendingTelemetryEventIds()).toHaveLength(0);
423
- });
424
-
425
- test("deleteConversationGently removes that conversation's telemetry_events rows", async () => {
426
- getTelemetryDb()!.delete(telemetryEvents).run();
427
- const conv = createConversation("doomed");
428
- await addMessage(conv.id, "user", "hello");
429
- const other = createConversation("kept");
430
- seedTelemetryEvent("te-gentle-1", 1000, conv.id);
431
- seedTelemetryEvent("te-gentle-2", 2000, other.id);
432
-
433
- await deleteConversationGently(conv.id);
434
-
435
- expect(pendingTelemetryEventIds()).toEqual(["te-gentle-2"]);
436
- });
437
-
438
355
  test("deleteLastExchange does not delete unlinked user uploads", async () => {
439
356
  const conv = createConversation("test");
440
357
  await addMessage(conv.id, "user", "hello");
@@ -88,22 +88,6 @@ describe("restoreSurfaceStateEntry", () => {
88
88
  restoreSurfaceStateEntry({ surfaceType: 42, data: {} }).surfaceType,
89
89
  ).toBe("dynamic_page");
90
90
  });
91
-
92
- test("rehydrates the daemon-only activationMoment tag and drops a malformed one", () => {
93
- const valid = restoreSurfaceStateEntry({
94
- surfaceType: "card",
95
- data: {},
96
- activationMoment: "first_wow_executed",
97
- });
98
- expect(valid.activationMoment).toBe("first_wow_executed");
99
-
100
- const invalid = restoreSurfaceStateEntry({
101
- surfaceType: "card",
102
- data: {},
103
- activationMoment: "not_a_real_moment",
104
- });
105
- expect(invalid.activationMoment).toBeUndefined();
106
- });
107
91
  });
108
92
 
109
93
  describe("parseStoredActions", () => {