@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,110 +0,0 @@
1
- import { recordTelemetryEvent } from "../telemetry/telemetry-events-outbox.js";
2
- import type {
3
- LifecycleTelemetryEvent,
4
- TelemetryEventBase,
5
- } from "../telemetry/types.js";
6
- import { APP_VERSION } from "../version.js";
7
-
8
- export interface LifecycleEvent {
9
- id: string;
10
- eventName: string;
11
- createdAt: number;
12
- }
13
-
14
- /**
15
- * Optional typed attributes a lifecycle event carries alongside its name.
16
- *
17
- * Every one is nullable and optional on the wire, so a caller with nothing to
18
- * say omits it and a cloud that predates the field ignores it. They exist
19
- * so grouping dimensions (risk, access preset, surface) are columns rather
20
- * than substrings of `event_name`, which the server caps at 64 chars.
21
- */
22
- export interface LifecycleEventAttributes {
23
- /**
24
- * Tool the event is about. The stable join key between a permission prompt
25
- * and its decision: `event_name` embeds a truncated tool name, this does not.
26
- */
27
- toolName?: string;
28
- /** Classified risk of the invocation ("low" | "medium" | "high"). */
29
- riskLevel?: string;
30
- /** Auto-approve threshold (access preset) in effect for the invocation. */
31
- riskThreshold?: string;
32
- /** Channel the event's turn runs on ("cadet", "slack", "telegram", ...). */
33
- surface?: string;
34
- /**
35
- * Parent conversation. Rides the same `share_analytics` gate as the
36
- * conversation ids on `turn` / `llm_usage` / `tool_executed`, and scopes the
37
- * pending outbox row so deleting the conversation deletes the row with it.
38
- */
39
- conversationId?: string;
40
- }
41
-
42
- /** Lifecycle wire payload minus the fields `recordTelemetryEvent` stamps. */
43
- type LifecycleFields = Omit<LifecycleTelemetryEvent, keyof TelemetryEventBase>;
44
-
45
- /**
46
- * Assemble the lifecycle wire fields, omitting attributes the caller left
47
- * unset so a plain `app_open` payload stays exactly as small as it was.
48
- *
49
- * An empty attribute is omitted rather than sent: the wire schema requires at
50
- * least one character, and a single failing field makes the server drop the
51
- * whole event silently.
52
- */
53
- function buildLifecycleFields(
54
- eventName: string,
55
- attributes: LifecycleEventAttributes,
56
- ): LifecycleFields {
57
- const fields: LifecycleFields = { event_name: eventName };
58
- if (attributes.toolName) {
59
- fields.tool_name = attributes.toolName;
60
- }
61
- if (attributes.riskLevel) {
62
- fields.risk_level = attributes.riskLevel;
63
- }
64
- if (attributes.riskThreshold) {
65
- fields.risk_threshold = attributes.riskThreshold;
66
- }
67
- if (attributes.surface) {
68
- fields.surface = attributes.surface;
69
- }
70
- if (attributes.conversationId) {
71
- fields.conversation_id = attributes.conversationId;
72
- }
73
- return fields;
74
- }
75
-
76
- /**
77
- * Wire shape of one lifecycle event, for callers that insert outbox rows via
78
- * raw SQL (conversation-crud's clearAll audit path). Mirrors the shape
79
- * `recordTelemetryEvent` stamps — the shared `LifecycleTelemetryEvent` type
80
- * keeps them in sync.
81
- */
82
- export function buildLifecycleTelemetryEvent(
83
- id: string,
84
- eventName: string,
85
- createdAt: number,
86
- ): LifecycleTelemetryEvent {
87
- return {
88
- type: "lifecycle",
89
- daemon_event_id: id,
90
- event_name: eventName,
91
- recorded_at: createdAt,
92
- assistant_version: APP_VERSION,
93
- };
94
- }
95
-
96
- /**
97
- * Record a lifecycle event (e.g. app_open, hatch) into the `telemetry_events`
98
- * outbox. Consent gating and degraded-mode `null` are `recordTelemetryEvent`'s.
99
- */
100
- export function recordLifecycleEvent(
101
- eventName: string,
102
- attributes: LifecycleEventAttributes = {},
103
- ): LifecycleEvent | null {
104
- const recorded = recordTelemetryEvent(
105
- "lifecycle",
106
- buildLifecycleFields(eventName, attributes),
107
- { conversationId: attributes.conversationId ?? null },
108
- );
109
- return recorded ? { ...recorded, eventName } : null;
110
- }
@@ -1,76 +0,0 @@
1
- import { Database } from "bun:sqlite";
2
- import { afterEach, beforeEach, describe, expect, test } from "bun:test";
3
-
4
- import { drizzle } from "drizzle-orm/bun-sqlite";
5
-
6
- import { getMemorySqlite } from "../../../../persistence/db-connection.js";
7
- import { initializeDb } from "../../../../persistence/db-init.js";
8
- import {
9
- clearStoredDb,
10
- setStoredDb,
11
- } from "../../../../persistence/db-singleton.js";
12
- import * as schema from "../../../../persistence/schema/index.js";
13
- import {
14
- isActivationSession,
15
- markActivationSession,
16
- } from "../activation-session-store.js";
17
-
18
- await initializeDb();
19
-
20
- describe("activation-session-store", () => {
21
- beforeEach(() => {
22
- getMemorySqlite()!.exec("DELETE FROM activation_sessions");
23
- });
24
-
25
- test("marks a conversation and reports it as an activation session", () => {
26
- markActivationSession("c1");
27
- expect(isActivationSession("c1")).toBe(true);
28
- });
29
-
30
- test("unmarked conversations are not activation sessions", () => {
31
- expect(isActivationSession("nope")).toBe(false);
32
- });
33
-
34
- test("marking the same conversation twice is idempotent", () => {
35
- markActivationSession("c1");
36
- markActivationSession("c1");
37
- expect(isActivationSession("c1")).toBe(true);
38
- const { n } = getMemorySqlite()!
39
- .query("SELECT COUNT(*) AS n FROM activation_sessions")
40
- .get() as { n: number };
41
- expect(n).toBe(1);
42
- });
43
-
44
- test("rows land in the memory database, not main", () => {
45
- markActivationSession("c-placement");
46
- const inMemory = getMemorySqlite()!
47
- .query(
48
- "SELECT conversation_id FROM activation_sessions WHERE conversation_id = 'c-placement'",
49
- )
50
- .get() as { conversation_id: string } | null;
51
- expect(inMemory?.conversation_id).toBe("c-placement");
52
- });
53
- });
54
-
55
- describe("activation-session-store — degraded memory database", () => {
56
- // Install a memory DB WITHOUT the activation_sessions table: the store's
57
- // catch paths must swallow the failure (write no-ops, read reports false)
58
- // rather than throw into the turn.
59
- let brokenSqlite: Database;
60
-
61
- beforeEach(() => {
62
- brokenSqlite = new Database(":memory:");
63
- setStoredDb("memory", drizzle(brokenSqlite, { schema }), () =>
64
- brokenSqlite.close(),
65
- );
66
- });
67
-
68
- afterEach(() => {
69
- clearStoredDb("memory");
70
- });
71
-
72
- test("mark is a no-op and read reports false", () => {
73
- expect(() => markActivationSession("c1")).not.toThrow();
74
- expect(isActivationSession("c1")).toBe(false);
75
- });
76
- });
@@ -1,50 +0,0 @@
1
- import { getLogger } from "./logging.js";
2
- import { memorySqliteOrNull } from "./memory-db.js";
3
-
4
- const log = getLogger("activation-session-store");
5
-
6
- /**
7
- * Mark a conversation as an activation-rail session. Idempotent (the row's
8
- * primary key is the conversation id) and best-effort: an unavailable memory
9
- * database or a write failure is logged and swallowed so it never blocks the
10
- * turn that triggered it.
11
- */
12
- export function markActivationSession(conversationId: string): void {
13
- try {
14
- const raw = memorySqliteOrNull("markActivationSession");
15
- if (!raw) {
16
- return;
17
- }
18
- raw
19
- .query(
20
- /*sql*/ `INSERT OR IGNORE INTO activation_sessions (conversation_id, created_at) VALUES (?, ?)`,
21
- )
22
- .run(conversationId, Date.now());
23
- } catch (err) {
24
- log.warn({ err, conversationId }, "Failed to mark activation session");
25
- }
26
- }
27
-
28
- /**
29
- * Whether the given conversation was started on the activation rail.
30
- * Best-effort: an unavailable memory database or a read failure is logged and
31
- * treated as "not an activation session".
32
- */
33
- export function isActivationSession(conversationId: string): boolean {
34
- try {
35
- const raw = memorySqliteOrNull("isActivationSession");
36
- if (!raw) {
37
- return false;
38
- }
39
- return (
40
- raw
41
- .query(
42
- /*sql*/ `SELECT 1 FROM activation_sessions WHERE conversation_id = ?`,
43
- )
44
- .get(conversationId) != null
45
- );
46
- } catch (err) {
47
- log.warn({ err, conversationId }, "Failed to read activation session");
48
- return false;
49
- }
50
- }
@@ -1,281 +0,0 @@
1
- /**
2
- * Tests for `handleMemoryV3GateStats` in `memory-v3-routes.ts`.
3
- *
4
- * The handler aggregates gate telemetry from the telemetry DB and buckets it
5
- * by concept page count. These tests cover:
6
- * - empty DB → zero counts, all buckets present, scoredPassRate null
7
- * - mixed rows land in the correct buckets by real_concept_page_count
8
- * - scored vs unscored runs are counted separately
9
- * - rows with no real_concept_page_count go to unknownPageCount
10
- * - lookbackDays is clamped to [1, 90]
11
- * - malformed JSON rows are skipped
12
- * - null/absent DB returns a zero response
13
- */
14
-
15
- import type { Database } from "bun:sqlite";
16
- import { describe, expect, test } from "bun:test";
17
-
18
- import { handleMemoryV3GateStats } from "../memory-v3-routes.js";
19
-
20
- // ---------------------------------------------------------------------------
21
- // Minimal fake SQLite DB that returns pre-set rows
22
- // ---------------------------------------------------------------------------
23
-
24
- type FakeRow = { payload: string };
25
-
26
- function makePayload(detail: Record<string, unknown>): string {
27
- return JSON.stringify({
28
- type: "watchdog",
29
- daemon_event_id: "test-id",
30
- recorded_at: Date.now(),
31
- check_name: "memory_v3_injection_gate",
32
- value: 1,
33
- detail,
34
- });
35
- }
36
-
37
- function fakeDb(rows: FakeRow[]): Database {
38
- return {
39
- query: (_sql: string) => ({
40
- all: (..._args: unknown[]) => rows,
41
- }),
42
- } as unknown as Database;
43
- }
44
-
45
- // ---------------------------------------------------------------------------
46
- // Tests
47
- // ---------------------------------------------------------------------------
48
-
49
- describe("handleMemoryV3GateStats", () => {
50
- test("returns zero counts with all buckets when DB is null", () => {
51
- const result = handleMemoryV3GateStats(30, null);
52
- expect(result.totalRuns).toBe(0);
53
- expect(result.buckets).toHaveLength(4);
54
- for (const bucket of result.buckets) {
55
- expect(bucket.total).toBe(0);
56
- expect(bucket.scored).toBe(0);
57
- expect(bucket.passed).toBe(0);
58
- expect(bucket.scoredPassRate).toBeNull();
59
- expect(bucket.reasons).toEqual({});
60
- }
61
- expect(result.unknownPageCount).toEqual({
62
- total: 0,
63
- passed: 0,
64
- reasons: {},
65
- });
66
- });
67
-
68
- test("returns zero counts with all buckets when DB returns no rows", () => {
69
- const result = handleMemoryV3GateStats(30, fakeDb([]));
70
- expect(result.totalRuns).toBe(0);
71
- expect(result.buckets[0]!.pageCountRange).toBe("0–9");
72
- expect(result.buckets[3]!.pageCountRange).toBe("200+");
73
- for (const b of result.buckets) {
74
- expect(b.scoredPassRate).toBeNull();
75
- }
76
- });
77
-
78
- test("buckets a dense_pass row into 10–49 bucket", () => {
79
- const rows = [
80
- {
81
- payload: makePayload({
82
- pass: true,
83
- reason: "dense_pass",
84
- scored: true,
85
- real_concept_page_count: 25,
86
- }),
87
- },
88
- ];
89
- const result = handleMemoryV3GateStats(30, fakeDb(rows));
90
- expect(result.totalRuns).toBe(1);
91
- const bucket = result.buckets.find((b) => b.pageCountRange === "10–49")!;
92
- expect(bucket.total).toBe(1);
93
- expect(bucket.scored).toBe(1);
94
- expect(bucket.passed).toBe(1);
95
- expect(bucket.scoredPassRate).toBe(1);
96
- expect(bucket.reasons).toEqual({ dense_pass: 1 });
97
- });
98
-
99
- test("buckets a fail row into 200+ bucket", () => {
100
- const rows = [
101
- {
102
- payload: makePayload({
103
- pass: false,
104
- reason: "fail_no_signal",
105
- scored: true,
106
- real_concept_page_count: 350,
107
- }),
108
- },
109
- ];
110
- const result = handleMemoryV3GateStats(30, fakeDb(rows));
111
- const bucket = result.buckets.find((b) => b.pageCountRange === "200+")!;
112
- expect(bucket.total).toBe(1);
113
- expect(bucket.passed).toBe(0);
114
- expect(bucket.scoredPassRate).toBe(0);
115
- expect(bucket.reasons).toEqual({ fail_no_signal: 1 });
116
- });
117
-
118
- test("unscored pass-open rows count in total but not scored", () => {
119
- const rows = [
120
- {
121
- payload: makePayload({
122
- pass: true,
123
- reason: "dense_unavailable",
124
- scored: false,
125
- real_concept_page_count: 5,
126
- }),
127
- },
128
- ];
129
- const result = handleMemoryV3GateStats(30, fakeDb(rows));
130
- const bucket = result.buckets.find((b) => b.pageCountRange === "0–9")!;
131
- expect(bucket.total).toBe(1);
132
- expect(bucket.scored).toBe(0);
133
- expect(bucket.passed).toBe(1);
134
- // No scored runs → scoredPassRate is null (unscored pass does not count)
135
- expect(bucket.scoredPassRate).toBeNull();
136
- });
137
-
138
- test("unscored pass mixed with scored fail does not inflate scoredPassRate", () => {
139
- // Regression: before fix, pass-open + scored-fail in same bucket gave 100%
140
- const rows = [
141
- {
142
- payload: makePayload({
143
- pass: true,
144
- reason: "dense_unavailable",
145
- scored: false,
146
- real_concept_page_count: 30,
147
- }),
148
- },
149
- {
150
- payload: makePayload({
151
- pass: false,
152
- reason: "fail_no_signal",
153
- scored: true,
154
- real_concept_page_count: 40,
155
- }),
156
- },
157
- ];
158
- const result = handleMemoryV3GateStats(30, fakeDb(rows));
159
- const bucket = result.buckets.find((b) => b.pageCountRange === "10–49")!;
160
- expect(bucket.total).toBe(2);
161
- expect(bucket.scored).toBe(1);
162
- expect(bucket.passed).toBe(1); // total passes (scored + unscored)
163
- // Only the scored fail counts toward the rate — no scored passes
164
- expect(bucket.scoredPassRate).toBe(0);
165
- });
166
-
167
- test("rows with no real_concept_page_count go to unknownPageCount", () => {
168
- const rows = [
169
- {
170
- payload: makePayload({
171
- pass: false,
172
- reason: "fail_no_signal",
173
- scored: true,
174
- }),
175
- },
176
- ];
177
- const result = handleMemoryV3GateStats(30, fakeDb(rows));
178
- expect(result.unknownPageCount.total).toBe(1);
179
- expect(result.unknownPageCount.passed).toBe(0);
180
- expect(result.unknownPageCount.reasons).toEqual({ fail_no_signal: 1 });
181
- for (const b of result.buckets) {
182
- expect(b.total).toBe(0);
183
- }
184
- });
185
-
186
- test("mixed rows across multiple buckets are aggregated correctly", () => {
187
- const rows: FakeRow[] = [
188
- // 0–9 bucket: 1 unscored pass
189
- {
190
- payload: makePayload({
191
- pass: true,
192
- reason: "dense_disabled",
193
- scored: false,
194
- real_concept_page_count: 3,
195
- }),
196
- },
197
- // 10–49 bucket: 1 pass, 1 fail (both scored)
198
- {
199
- payload: makePayload({
200
- pass: true,
201
- reason: "dense_pass",
202
- scored: true,
203
- real_concept_page_count: 20,
204
- }),
205
- },
206
- {
207
- payload: makePayload({
208
- pass: false,
209
- reason: "fail_no_signal",
210
- scored: true,
211
- real_concept_page_count: 45,
212
- }),
213
- },
214
- // 50–199 bucket: 2 passes
215
- {
216
- payload: makePayload({
217
- pass: true,
218
- reason: "sparse_only_strong",
219
- scored: true,
220
- real_concept_page_count: 100,
221
- }),
222
- },
223
- {
224
- payload: makePayload({
225
- pass: true,
226
- reason: "dense_pass",
227
- scored: true,
228
- real_concept_page_count: 150,
229
- }),
230
- },
231
- ];
232
-
233
- const result = handleMemoryV3GateStats(30, fakeDb(rows));
234
- expect(result.totalRuns).toBe(5);
235
-
236
- const b09 = result.buckets.find((b) => b.pageCountRange === "0–9")!;
237
- expect(b09.total).toBe(1);
238
- expect(b09.scored).toBe(0);
239
- expect(b09.scoredPassRate).toBeNull();
240
-
241
- const b1049 = result.buckets.find((b) => b.pageCountRange === "10–49")!;
242
- expect(b1049.total).toBe(2);
243
- expect(b1049.scored).toBe(2);
244
- expect(b1049.passed).toBe(1);
245
- expect(b1049.scoredPassRate).toBe(0.5);
246
- expect(b1049.reasons).toEqual({ dense_pass: 1, fail_no_signal: 1 });
247
-
248
- const b50199 = result.buckets.find((b) => b.pageCountRange === "50–199")!;
249
- expect(b50199.scored).toBe(2);
250
- expect(b50199.passed).toBe(2);
251
- expect(b50199.scoredPassRate).toBe(1);
252
- });
253
-
254
- test("lookbackDays is clamped to 1–90", () => {
255
- const r1 = handleMemoryV3GateStats(0, fakeDb([]));
256
- expect(r1.lookbackDays).toBe(1);
257
- const r2 = handleMemoryV3GateStats(999, fakeDb([]));
258
- expect(r2.lookbackDays).toBe(90);
259
- const r3 = handleMemoryV3GateStats(30, fakeDb([]));
260
- expect(r3.lookbackDays).toBe(30);
261
- });
262
-
263
- test("malformed JSON payload rows are skipped", () => {
264
- const rows: FakeRow[] = [
265
- { payload: "not-valid-json" },
266
- {
267
- payload: makePayload({
268
- pass: true,
269
- reason: "dense_pass",
270
- scored: true,
271
- real_concept_page_count: 25,
272
- }),
273
- },
274
- ];
275
- const result = handleMemoryV3GateStats(30, fakeDb(rows));
276
- // Only the valid row is counted
277
- expect(result.totalRuns).toBe(2); // totalRuns counts raw rows before parse
278
- const bucket = result.buckets.find((b) => b.pageCountRange === "10–49")!;
279
- expect(bucket.total).toBe(1);
280
- });
281
- });
@@ -1,83 +0,0 @@
1
- /**
2
- * Auto profile routes.
3
- *
4
- * POST /v1/auto-profile/preview — which default profile the Auto profile
5
- * would pick for a draft the user has not sent yet.
6
- */
7
- import { z } from "zod";
8
-
9
- import { previewAutoProfile } from "../../daemon/auto-profile-router.js";
10
- import { ACTOR_PRINCIPALS } from "../auth/route-policy.js";
11
- import { BadRequestError } from "./errors.js";
12
- import type { RouteDefinition, RouteHandlerArgs } from "./types.js";
13
-
14
- const MAX_DRAFT_CHARS = 20_000;
15
-
16
- const previewRequestSchema = z.object({
17
- text: z.string().min(1).max(MAX_DRAFT_CHARS),
18
- conversationId: z
19
- .string()
20
- .describe(
21
- "Conversation the draft belongs to, for recent history. Omit for a new chat.",
22
- )
23
- .optional(),
24
- });
25
-
26
- const previewResponseSchema = z.object({
27
- /** The default profile key the draft would run on; null when the Auto
28
- * profile is not available on this install. */
29
- profile: z.string().nullable(),
30
- outcome: z.enum(["routed", "unavailable", "timeout", "error", "fallback"]),
31
- confidence: z.number().optional(),
32
- });
33
-
34
- async function handlePreviewAutoProfile(
35
- args: RouteHandlerArgs,
36
- ): Promise<z.infer<typeof previewResponseSchema>> {
37
- const parsed = previewRequestSchema.safeParse(args.body ?? {});
38
- if (!parsed.success) {
39
- throw new BadRequestError(
40
- `text must be a non-empty string of at most ${MAX_DRAFT_CHARS} characters`,
41
- );
42
- }
43
- // The composer aborts a preview the moment the draft changes; carrying the
44
- // abort through stops the retired Jev call and keeps its late answer out
45
- // of the reuse cache.
46
- const route = await previewAutoProfile({
47
- text: parsed.data.text,
48
- ...(parsed.data.conversationId
49
- ? { conversationId: parsed.data.conversationId }
50
- : {}),
51
- ...(args.abortSignal ? { signal: args.abortSignal } : {}),
52
- });
53
- if (!route) {
54
- return { profile: null, outcome: "unavailable" };
55
- }
56
- return {
57
- profile: route.profile,
58
- outcome: route.outcome,
59
- ...(route.confidence !== undefined ? { confidence: route.confidence } : {}),
60
- };
61
- }
62
-
63
- export const ROUTES: RouteDefinition[] = [
64
- {
65
- operationId: "previewAutoProfile",
66
- endpoint: "auto-profile/preview",
67
- method: "POST",
68
- policy: {
69
- requiredScopes: ["chat.write"],
70
- allowedPrincipalTypes: ACTOR_PRINCIPALS,
71
- },
72
- summary: "Preview the Auto profile's pick for a draft",
73
- description:
74
- "Ask the Auto profile which default profile a draft message would run on, " +
75
- "using the conversation's recent history when one is given. The pick is " +
76
- "kept briefly so the turn that sends the same text reuses it. Spends one " +
77
- "Jev call per request.",
78
- tags: ["conversations"],
79
- requestBody: previewRequestSchema,
80
- responseBody: previewResponseSchema,
81
- handler: handlePreviewAutoProfile,
82
- },
83
- ];