@mycadet/assistant 0.12.9 → 0.12.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. package/Dockerfile +0 -8
  2. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
  3. package/openapi.yaml +62 -910
  4. package/package.json +3 -7
  5. package/scripts/build-test-fixtures.ts +1 -1
  6. package/scripts/generate-openapi.ts +22 -6
  7. package/scripts/postinstall.ts +4 -10
  8. package/scripts/run-tests.ts +0 -21
  9. package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
  10. package/src/__tests__/agent-loop.test.ts +0 -76
  11. package/src/__tests__/anthropic-provider.test.ts +6 -6
  12. package/src/__tests__/assert-not-live-db.ts +1 -1
  13. package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
  14. package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
  15. package/src/__tests__/attachments-store.test.ts +1 -1
  16. package/src/__tests__/audit-log-rotation.test.ts +1 -1
  17. package/src/__tests__/btw-routes.test.ts +1 -1
  18. package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
  19. package/src/__tests__/call-conversation-messages.test.ts +0 -5
  20. package/src/__tests__/call-recovery.test.ts +2 -7
  21. package/src/__tests__/call-routes-http.test.ts +0 -12
  22. package/src/__tests__/call-store.test.ts +2 -7
  23. package/src/__tests__/catalog-files.test.ts +7 -5
  24. package/src/__tests__/checker.test.ts +1 -1
  25. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
  26. package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
  27. package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
  28. package/src/__tests__/cloud-profile-guard.test.ts +48 -401
  29. package/src/__tests__/compaction-events.test.ts +2 -2
  30. package/src/__tests__/config-loader-backfill.test.ts +74 -163
  31. package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
  32. package/src/__tests__/config-loader-corrupt.test.ts +10 -10
  33. package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
  34. package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
  35. package/src/__tests__/config-schema.test.ts +26 -27
  36. package/src/__tests__/config-set-route.test.ts +2 -6
  37. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
  38. package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
  39. package/src/__tests__/conversation-agent-loop.test.ts +2 -58
  40. package/src/__tests__/conversation-clear-safety.test.ts +0 -30
  41. package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
  42. package/src/__tests__/conversation-queue.test.ts +1 -1
  43. package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
  44. package/src/__tests__/conversation-skill-tools.test.ts +4 -444
  45. package/src/__tests__/conversation-slash-commands.test.ts +1 -1
  46. package/src/__tests__/conversation-store.test.ts +1 -84
  47. package/src/__tests__/conversation-surface-state.test.ts +0 -16
  48. package/src/__tests__/credential-health-service.test.ts +14 -1
  49. package/src/__tests__/credential-record-retire.test.ts +1 -1
  50. package/src/__tests__/credential-record-write-through.test.ts +1 -1
  51. package/src/__tests__/credential-security-invariants.test.ts +0 -145
  52. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  53. package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
  54. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  55. package/src/__tests__/dictation-profile-store.test.ts +6 -6
  56. package/src/__tests__/disk-usage.test.ts +28 -164
  57. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
  58. package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
  59. package/src/__tests__/emit-event-signal.test.ts +1 -1
  60. package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
  61. package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
  62. package/src/__tests__/guardian-dispatch.test.ts +0 -13
  63. package/src/__tests__/helpers/seed-app.ts +1 -1
  64. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
  65. package/src/__tests__/host-shell-tool.test.ts +1 -1
  66. package/src/__tests__/identity-routes.test.ts +1 -1
  67. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  68. package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
  69. package/src/__tests__/injector-chain.test.ts +1 -1
  70. package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
  71. package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
  72. package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
  73. package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
  74. package/src/__tests__/list-all-apps.test.ts +1 -1
  75. package/src/__tests__/live-workspace-guard.test.ts +2 -2
  76. package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
  77. package/src/__tests__/llm-resolver.test.ts +7 -7
  78. package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
  79. package/src/__tests__/llm-usage-store.test.ts +0 -495
  80. package/src/__tests__/log-export-routes.test.ts +1 -1
  81. package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
  82. package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
  83. package/src/__tests__/memory-config-file-parity.test.ts +1 -1
  84. package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
  85. package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
  86. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  87. package/src/__tests__/onboarding-persona-write.test.ts +1 -1
  88. package/src/__tests__/openai-provider.test.ts +8 -8
  89. package/src/__tests__/path-policy.test.ts +1 -1
  90. package/src/__tests__/persona-resolver.test.ts +1 -1
  91. package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
  92. package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
  93. package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
  94. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
  95. package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
  96. package/src/__tests__/provider-connections-backfill.test.ts +10 -10
  97. package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
  98. package/src/__tests__/resolve-app.test.ts +1 -1
  99. package/src/__tests__/run-due-schedules.test.ts +1 -1
  100. package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
  101. package/src/__tests__/schedule-routes.test.ts +1 -1
  102. package/src/__tests__/schedule-store.test.ts +1 -1
  103. package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
  104. package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
  105. package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
  106. package/src/__tests__/tool-approval-handler.test.ts +1 -1
  107. package/src/__tests__/tool-audit.test.ts +5 -235
  108. package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
  109. package/src/__tests__/tools-get-route.test.ts +1 -1
  110. package/src/__tests__/turn-outcome-read.test.ts +1 -1
  111. package/src/__tests__/twilio-routes.test.ts +0 -1
  112. package/src/__tests__/usage-attribution.test.ts +0 -31
  113. package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
  114. package/src/__tests__/visible-app-context.test.ts +1 -1
  115. package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
  116. package/src/__tests__/workspace-git-service.test.ts +1 -1
  117. package/src/__tests__/workspace-greetings.test.ts +1 -1
  118. package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
  119. package/src/activation/progress-store.ts +1 -1
  120. package/src/activation/turn-hooks.ts +1 -1
  121. package/src/agent/loop.ts +0 -51
  122. package/src/apps/app-store.ts +1 -1
  123. package/src/avatar/__tests__/avatar-store.test.ts +2 -172
  124. package/src/avatar/accent-backfill.ts +1 -1
  125. package/src/avatar/avatar-manifest.ts +1 -1
  126. package/src/avatar/avatar-store.ts +10 -69
  127. package/src/avatar/ensure-raster.ts +1 -1
  128. package/src/avatar/identity-avatar.ts +1 -1
  129. package/src/avatar/sync-avatar.ts +1 -1
  130. package/src/avatar/traits-png-sync.ts +1 -1
  131. package/src/bundler/compiler-tools.ts +1 -1
  132. package/src/bundler/package-resolver.ts +1 -1
  133. package/src/calls/__tests__/call-controller.test.ts +25 -27
  134. package/src/calls/active-call-lease.ts +1 -1
  135. package/src/calls/call-controller.ts +3 -3
  136. package/src/calls/call-domain.ts +4 -8
  137. package/src/calls/call-store.ts +2 -76
  138. package/src/calls/resolve-call-tts-provider.ts +3 -3
  139. package/src/calls/twilio-config.ts +3 -3
  140. package/src/calls/twilio-rest.ts +2 -2
  141. package/src/calls/voice-ingress-preflight.ts +2 -2
  142. package/src/cli/bundled-modules.ts +0 -2
  143. package/src/cli/commands/__tests__/apps.test.ts +1 -1
  144. package/src/cli/commands/__tests__/plugins.test.ts +9 -66
  145. package/src/cli/commands/__tests__/ps.test.ts +67 -0
  146. package/src/cli/commands/auth.help.ts +2 -2
  147. package/src/cli/commands/avatar.ts +1 -1
  148. package/src/cli/commands/changelog.ts +1 -1
  149. package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
  150. package/src/cli/commands/cloud/index.help.ts +1 -1
  151. package/src/cli/commands/cloud/index.ts +2 -2
  152. package/src/cli/commands/db/refresh.ts +1 -1
  153. package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
  154. package/src/cli/commands/db/repair.ts +1 -1
  155. package/src/cli/commands/db/status.ts +1 -1
  156. package/src/cli/commands/inference-profiles.ts +1 -12
  157. package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
  158. package/src/cli/commands/memory/index.help.ts +1 -43
  159. package/src/cli/commands/memory/memory-v3.ts +0 -64
  160. package/src/cli/commands/plugins.ts +54 -205
  161. package/src/cli/commands/ps.ts +5 -2
  162. package/src/cli/commands/status.ts +1 -1
  163. package/src/cli/index.help.ts +0 -2
  164. package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
  165. package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
  166. package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
  167. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
  168. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
  169. package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
  170. package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
  171. package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
  172. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
  173. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
  174. package/src/cli/lib/diff-plugin.ts +1 -1
  175. package/src/cli/lib/inspect-plugin.ts +13 -97
  176. package/src/cli/lib/install-from-cloud.ts +1 -1
  177. package/src/cli/lib/install-from-github.ts +75 -154
  178. package/src/cli/lib/install-plugin-dependencies.ts +1 -1
  179. package/src/cli/lib/list-installed-plugins.ts +1 -1
  180. package/src/cli/lib/open-browser.ts +1 -1
  181. package/src/cli/lib/plugin-catalog-cache.ts +8 -51
  182. package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
  183. package/src/cli/lib/plugin-details.ts +5 -27
  184. package/src/cli/lib/plugin-marketplace.ts +18 -266
  185. package/src/cli/lib/search-plugins.ts +23 -43
  186. package/src/cli/lib/toggle-plugin.ts +1 -1
  187. package/src/cli/lib/uninstall-plugin.ts +1 -1
  188. package/src/cli/lib/upgrade-plugin.ts +3 -49
  189. package/src/cli/program.ts +1 -3
  190. package/src/cli.ts +1 -1
  191. package/src/cloud/client.ts +0 -6
  192. package/src/cloud/consent-cache.test.ts +22 -201
  193. package/src/cloud/consent-cache.ts +16 -111
  194. package/src/cloud/sync-identity.ts +1 -1
  195. package/src/config/__tests__/chat-settings.test.ts +1 -1
  196. package/src/config/__tests__/cloud-identity.test.ts +15 -2
  197. package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
  198. package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
  199. package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
  200. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
  201. package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
  202. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
  203. package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
  204. package/src/config/__tests__/profile-materialization.test.ts +2 -4
  205. package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
  206. package/src/config/acp-agent-write.ts +1 -1
  207. package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
  208. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  209. package/src/config/call-site-defaults.ts +0 -6
  210. package/src/config/cloud-identity.ts +12 -5
  211. package/src/config/composer-preferences.ts +1 -1
  212. package/src/config/default-profile-catalog.ts +8 -75
  213. package/src/config/default-profile-names.ts +2 -25
  214. package/src/config/env-registry.ts +1 -14
  215. package/src/config/env.ts +8 -6
  216. package/src/config/llm-resolver.ts +1 -2
  217. package/src/config/loader.ts +13 -17
  218. package/src/config/profile-materialization.ts +1 -1
  219. package/src/config/schema.ts +1 -7
  220. package/src/config/schemas/call-site-catalog.ts +0 -7
  221. package/src/config/schemas/llm.ts +22 -27
  222. package/src/config/seed-inference-profiles.ts +16 -17
  223. package/src/config/skills.ts +2 -2
  224. package/src/config/sync-gated-profiles.ts +6 -24
  225. package/src/credential-health/credential-health-service.ts +10 -3
  226. package/src/daemon/approval-generators.ts +3 -3
  227. package/src/daemon/config-watcher.ts +2 -2
  228. package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
  229. package/src/daemon/conversation-agent-loop.ts +6 -97
  230. package/src/daemon/conversation-process.ts +1 -1
  231. package/src/daemon/conversation-skill-tools.ts +4 -72
  232. package/src/daemon/conversation-store.ts +1 -1
  233. package/src/daemon/conversation-surface-state.ts +0 -33
  234. package/src/daemon/conversation-surfaces.ts +1 -86
  235. package/src/daemon/conversation-tool-setup.test.ts +1 -1
  236. package/src/daemon/conversation-tool-setup.ts +0 -23
  237. package/src/daemon/conversation.ts +3 -5
  238. package/src/daemon/daemon-control.ts +3 -3
  239. package/src/daemon/dictation-profile-store.ts +3 -3
  240. package/src/daemon/event-loop-watchdog.test.ts +2 -198
  241. package/src/daemon/event-loop-watchdog.ts +0 -185
  242. package/src/daemon/external-plugins-bootstrap.ts +1 -1
  243. package/src/daemon/first-greeting.ts +1 -1
  244. package/src/daemon/handlers/skills.ts +1 -1
  245. package/src/daemon/host-app-control-proxy.ts +1 -1
  246. package/src/daemon/host-cu-proxy.ts +2 -2
  247. package/src/daemon/identity-helpers.ts +1 -1
  248. package/src/daemon/lifecycle.ts +11 -15
  249. package/src/daemon/main.ts +1 -1
  250. package/src/daemon/now-scratchpad.ts +1 -1
  251. package/src/daemon/process-message.ts +4 -4
  252. package/src/daemon/profiler-run-store.ts +2 -2
  253. package/src/daemon/providers-setup.ts +2 -2
  254. package/src/daemon/shutdown-handlers.ts +0 -10
  255. package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
  256. package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
  257. package/src/daemon/tool-side-effects.ts +1 -1
  258. package/src/desktop/desktop-session-manager.ts +1 -1
  259. package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
  260. package/src/heartbeat/heartbeat-service.ts +1 -1
  261. package/src/home/feed-writer.ts +1 -1
  262. package/src/home/home-greeting-cache.ts +1 -1
  263. package/src/home/relationship-state-writer.ts +2 -2
  264. package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
  265. package/src/hooks/hook-loader.ts +2 -2
  266. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  267. package/src/inbound/oauth-callback-url.ts +3 -3
  268. package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
  269. package/src/ipc/socket-path.ts +1 -1
  270. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
  271. package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
  272. package/src/live-voice/live-voice-session.ts +3 -66
  273. package/src/mcp/__tests__/effective-config.test.ts +1 -1
  274. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
  275. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
  276. package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
  277. package/src/mcp/__tests__/reload-signal.test.ts +1 -1
  278. package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
  279. package/src/mcp/reload-signal.ts +1 -1
  280. package/src/mcp/workspace-mcp-config.ts +1 -23
  281. package/src/messaging/draft-store.ts +1 -1
  282. package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
  283. package/src/monitoring/__tests__/page-cache.test.ts +1 -1
  284. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  285. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
  286. package/src/monitoring/active-conversations.ts +1 -1
  287. package/src/monitoring/control.ts +1 -1
  288. package/src/monitoring/daemon-boot-time.ts +1 -1
  289. package/src/monitoring/daemon-heartbeat.ts +1 -1
  290. package/src/monitoring/page-cache.ts +1 -1
  291. package/src/monitoring/plugin-auto-update.ts +1 -7
  292. package/src/monitoring/plugin-source-watch.ts +1 -1
  293. package/src/monitoring/recovery/db.ts +1 -1
  294. package/src/monitoring/recovery/inflight-content.ts +1 -1
  295. package/src/monitoring/resource-sampler.ts +3 -14
  296. package/src/monitoring/stall-capture.ts +1 -1
  297. package/src/monitoring/worker.ts +9 -76
  298. package/src/monitoring/workspace-git-heartbeat.ts +1 -1
  299. package/src/oauth/connect-orchestrator.ts +4 -4
  300. package/src/permissions/checker.ts +1 -1
  301. package/src/permissions/workspace-policy.ts +1 -1
  302. package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
  303. package/src/persistence/__tests__/message-content-file.test.ts +1 -1
  304. package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
  305. package/src/persistence/attachments-store.ts +1 -1
  306. package/src/persistence/conversation-crud.ts +1 -38
  307. package/src/persistence/conversation-directories.ts +1 -1
  308. package/src/persistence/conversation-types.ts +0 -8
  309. package/src/persistence/db-async-query.ts +1 -1
  310. package/src/persistence/db-connection.ts +11 -1
  311. package/src/persistence/db-init.ts +1 -1
  312. package/src/persistence/db-maintenance.ts +1 -1
  313. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
  314. package/src/persistence/embeddings/embedding-local.ts +4 -4
  315. package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
  316. package/src/persistence/embeddings/qdrant-client.ts +1 -1
  317. package/src/persistence/embeddings/qdrant-manager.ts +1 -1
  318. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
  319. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
  320. package/src/persistence/job-handlers/cleanup.ts +8 -17
  321. package/src/persistence/llm-usage-store.ts +2 -229
  322. package/src/persistence/message-content-file.ts +1 -1
  323. package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
  324. package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
  325. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  326. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  327. package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
  328. package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
  329. package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
  330. package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
  331. package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
  332. package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
  333. package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
  334. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
  335. package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
  336. package/src/persistence/migrations/helpers/relocation.ts +1 -1
  337. package/src/persistence/migrations/run-migrations.ts +1 -1
  338. package/src/persistence/migrations/validate-migration-state.ts +1 -1
  339. package/src/persistence/raw-query.ts +1 -29
  340. package/src/persistence/slow-sync-log.ts +0 -23
  341. package/src/persistence/steps.ts +2 -0
  342. package/src/{telemetry → persistence}/tool-audit.ts +6 -121
  343. package/src/plugin-api/index.ts +1 -1
  344. package/src/plugin-api/plugin-name-env.ts +1 -1
  345. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
  346. package/src/plugins/collect-source-versions.ts +1 -1
  347. package/src/plugins/defaults/channel/package.json +1 -1
  348. package/src/plugins/defaults/cloud-hosted/package.json +1 -1
  349. package/src/plugins/defaults/compaction/package.json +1 -1
  350. package/src/plugins/defaults/documents/package.json +1 -1
  351. package/src/plugins/defaults/empty-response/package.json +1 -1
  352. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  353. package/src/plugins/defaults/image-fallback/package.json +1 -1
  354. package/src/plugins/defaults/image-recovery/package.json +1 -1
  355. package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
  356. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
  357. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
  358. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
  359. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
  360. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
  361. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
  362. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
  363. package/src/plugins/defaults/memory/package.json +1 -1
  364. package/src/plugins/defaults/memory/paths.ts +4 -4
  365. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  366. package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
  367. package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
  368. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  369. package/src/plugins/defaults/memory/startup.ts +1 -22
  370. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
  371. package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
  372. package/src/plugins/defaults/memory/worker-control.ts +1 -1
  373. package/src/plugins/defaults/memory/worker.ts +2 -2
  374. package/src/plugins/defaults/session/package.json +1 -1
  375. package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
  376. package/src/plugins/defaults/task-progress/package.json +1 -1
  377. package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
  378. package/src/plugins/defaults/title-generate/package.json +1 -1
  379. package/src/plugins/defaults/tool-error/package.json +1 -1
  380. package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
  381. package/src/plugins/defaults/turn-context/package.json +1 -1
  382. package/src/plugins/defaults/workspace/injectors.ts +1 -1
  383. package/src/plugins/defaults/workspace/package.json +1 -1
  384. package/src/plugins/disabled-state.ts +1 -1
  385. package/src/plugins/ensure-plugin-api-shim.ts +1 -1
  386. package/src/plugins/ensure-shared-dep-links.ts +1 -1
  387. package/src/plugins/installed-plugin-dirs.ts +1 -1
  388. package/src/plugins/mcp-servers.ts +7 -9
  389. package/src/plugins/mtime-cache.ts +2 -2
  390. package/src/plugins/source-versions.ts +1 -1
  391. package/src/prompts/bootstrap-cleanup.ts +1 -1
  392. package/src/prompts/persona-resolver.ts +1 -1
  393. package/src/prompts/sections.ts +2 -2
  394. package/src/prompts/system-prompt.ts +10 -42
  395. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
  396. package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
  397. package/src/providers/cadet/client.ts +1 -1
  398. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
  399. package/src/providers/inference/adapter-factory.ts +1 -1
  400. package/src/providers/inference/backfill.ts +3 -10
  401. package/src/providers/inference/profile-probe.ts +1 -1
  402. package/src/providers/retry.ts +0 -2
  403. package/src/providers/types.ts +0 -7
  404. package/src/providers/usage-tracking.ts +1 -1
  405. package/src/routes/__tests__/route-host.test.ts +1 -1
  406. package/src/routes/control.ts +1 -1
  407. package/src/routes/route-host-client.ts +1 -1
  408. package/src/routes/worker.ts +2 -2
  409. package/src/runtime/agent-wake.ts +1 -1
  410. package/src/runtime/assistant-stream-state.ts +1 -1
  411. package/src/runtime/auth/token-service.ts +1 -1
  412. package/src/runtime/background-job-runner.ts +1 -1
  413. package/src/runtime/middleware/twilio-validation.ts +2 -2
  414. package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
  415. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
  416. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
  417. package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
  418. package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
  419. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +59 -287
  420. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
  421. package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
  422. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
  423. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  424. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  425. package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
  426. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
  427. package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
  428. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
  429. package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
  430. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
  431. package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
  432. package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
  433. package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
  434. package/src/runtime/routes/app-management-routes.ts +1 -1
  435. package/src/runtime/routes/attachment-routes.ts +1 -1
  436. package/src/runtime/routes/audit-routes.ts +1 -1
  437. package/src/runtime/routes/avatar-routes.ts +3 -10
  438. package/src/runtime/routes/cloud-routes.ts +3 -3
  439. package/src/runtime/routes/content-source-routes.ts +1 -1
  440. package/src/runtime/routes/conversation-query-routes.ts +60 -621
  441. package/src/runtime/routes/conversation-routes.ts +1 -38
  442. package/src/runtime/routes/debug-routes.ts +1 -1
  443. package/src/runtime/routes/deprecated-route-context.ts +5 -61
  444. package/src/runtime/routes/heartbeat-routes.ts +1 -1
  445. package/src/runtime/routes/identity-routes.ts +1 -1
  446. package/src/runtime/routes/index.ts +0 -6
  447. package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
  448. package/src/runtime/routes/inference-profiles-routes.ts +48 -21
  449. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
  450. package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
  451. package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
  452. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
  453. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
  454. package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
  455. package/src/runtime/routes/log-export-routes.ts +17 -15
  456. package/src/runtime/routes/migration-rollback-routes.ts +1 -1
  457. package/src/runtime/routes/migration-routes.ts +2 -3
  458. package/src/runtime/routes/monitoring-routes.ts +2 -2
  459. package/src/runtime/routes/oauth-providers.ts +5 -5
  460. package/src/runtime/routes/plugins-routes.ts +38 -163
  461. package/src/runtime/routes/profiler-routes.ts +1 -1
  462. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  463. package/src/runtime/routes/sanity-routes.ts +1 -1
  464. package/src/runtime/routes/schedule-routes.ts +1 -1
  465. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  466. package/src/runtime/routes/settings-routes.ts +1 -1
  467. package/src/runtime/routes/sounds-config-routes.ts +1 -1
  468. package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
  469. package/src/runtime/routes/user-route-dispatcher.ts +1 -3
  470. package/src/runtime/routes/user-route-import.ts +1 -1
  471. package/src/runtime/routes/user-route-resolution.ts +1 -1
  472. package/src/runtime/routes/user-routes-cli.ts +1 -1
  473. package/src/runtime/routes/workspace-commit-routes.ts +1 -1
  474. package/src/runtime/routes/workspace-greetings.ts +1 -1
  475. package/src/runtime/routes/workspace-routes.ts +1 -1
  476. package/src/runtime/routes/workspace-utils.ts +1 -1
  477. package/src/runtime/sync/resource-sync-events.ts +1 -1
  478. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
  479. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
  480. package/src/schedule/plugin-schedule-availability.ts +1 -1
  481. package/src/schedule/plugin-schedule-declarations.ts +1 -1
  482. package/src/schedule/run-script.ts +1 -1
  483. package/src/schedule/scheduler.ts +1 -11
  484. package/src/schedule/worker-control.ts +1 -1
  485. package/src/schedule/worker.ts +3 -3
  486. package/src/security/oauth2.ts +2 -2
  487. package/src/security/secret-allowlist.ts +1 -1
  488. package/src/signals/cancel.ts +1 -1
  489. package/src/signals/conversation-undo.ts +1 -1
  490. package/src/signals/emit-event.ts +1 -1
  491. package/src/signals/event-stream.ts +1 -1
  492. package/src/signals/user-message.ts +1 -1
  493. package/src/skills/catalog-install.ts +2 -1
  494. package/src/skills/clawhub.ts +1 -1
  495. package/src/skills/cloud-store.ts +1 -1
  496. package/src/skills/path-classifier.ts +1 -1
  497. package/src/skills/skill-history.ts +1 -1
  498. package/src/skills/skillssh-registry.ts +1 -1
  499. package/src/skills/uninstall.ts +1 -1
  500. package/src/skills/workspace-skill-md-signature.ts +1 -1
  501. package/src/subagent/manager.ts +1 -1
  502. package/src/theme/workspace-theme.ts +1 -1
  503. package/src/tools/browser/auth-cache.ts +1 -1
  504. package/src/tools/browser/browser-manager.ts +1 -1
  505. package/src/tools/browser/runtime-check.ts +1 -1
  506. package/src/tools/executor.ts +4 -4
  507. package/src/tools/filesystem/write.ts +1 -1
  508. package/src/tools/permission-checker.ts +2 -51
  509. package/src/tools/run-standalone.ts +1 -1
  510. package/src/tools/skills/format-input-schema.ts +1 -1
  511. package/src/tools/skills/load.ts +1 -1
  512. package/src/tools/skills/scaffold-cloud.ts +0 -32
  513. package/src/tools/terminal/safe-env.ts +1 -2
  514. package/src/tools/terminal/sanitized-bash.ts +1 -1
  515. package/src/tools/terminal/shell.ts +1 -1
  516. package/src/tools/tool-approval-handler.ts +4 -1
  517. package/src/tools/workflows/manage-workflows.ts +2 -2
  518. package/src/tools/workflows/run-workflow.test.ts +1 -1
  519. package/src/tools/workspace-tools/loader.ts +1 -1
  520. package/src/tts/synthesis-stream.ts +2 -2
  521. package/src/usage/attribution.ts +1 -11
  522. package/src/util/browser.ts +1 -1
  523. package/src/util/bun-runtime.ts +2 -1
  524. package/src/util/device-id.ts +1 -1
  525. package/src/util/disk-usage.ts +4 -139
  526. package/src/util/layout.ts +3 -3
  527. package/src/util/logger.ts +1 -1
  528. package/src/util/logs-db-path.ts +1 -1
  529. package/src/util/memory-db-path.ts +1 -1
  530. package/src/util/{platform.ts → os.ts} +5 -30
  531. package/src/util/process-tree.ts +19 -0
  532. package/src/util/sqlite3-runtime.ts +1 -1
  533. package/src/util/telemetry-db-path.ts +1 -1
  534. package/src/watcher/__tests__/engine.test.ts +0 -23
  535. package/src/watcher/engine.ts +0 -7
  536. package/src/windows-compiled-cli.ts +0 -4
  537. package/src/windows-compiled-worker-entry.ts +0 -6
  538. package/src/workflows/leaf-runner.test.ts +1 -1
  539. package/src/workflows/leaf-runner.ts +1 -1
  540. package/src/workflows/library.ts +1 -1
  541. package/src/workspace/adaptive-thinking-repair.ts +5 -24
  542. package/src/workspace/byok-default-profile-ensure.ts +24 -26
  543. package/src/workspace/custom-profile-ensure.ts +2 -2
  544. package/src/workspace/git-service.ts +1 -1
  545. package/src/workspace/hatched-date.ts +1 -1
  546. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
  547. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  548. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
  549. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
  550. package/src/workspace/migrations/registry.ts +0 -4
  551. package/src/workspace/turn-commit.ts +1 -1
  552. package/docs/activation-funnel-telemetry.md +0 -324
  553. package/scripts/bundled-plugin-packages.ts +0 -154
  554. package/scripts/generate-bundled-plugin-packages.ts +0 -29
  555. package/src/__tests__/activation-early-marking.test.ts +0 -114
  556. package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
  557. package/src/__tests__/config-get-vision-flag.test.ts +0 -139
  558. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
  559. package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
  560. package/src/__tests__/telemetry-routes.test.ts +0 -182
  561. package/src/__tests__/turn-events-store.test.ts +0 -376
  562. package/src/__tests__/ui-channel-variants.test.ts +0 -53
  563. package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
  564. package/src/avatar/avatar-changed-telemetry.ts +0 -128
  565. package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
  566. package/src/cli/commands/telemetry.help.ts +0 -27
  567. package/src/cli/commands/telemetry.ts +0 -83
  568. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
  569. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
  570. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
  571. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
  572. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
  573. package/src/cli/lib/bundled-marketplace.json +0 -1575
  574. package/src/cli/lib/bundled-plugin-packages.json +0 -827
  575. package/src/cli/lib/bundled-plugin-packages.ts +0 -87
  576. package/src/cli/lib/plugin-catalog-local.ts +0 -94
  577. package/src/cli/lib/plugin-pin-history.ts +0 -276
  578. package/src/cloud/feature-gate.ts +0 -8
  579. package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
  580. package/src/config/cloud-rehydration.ts +0 -35
  581. package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
  582. package/src/daemon/auto-profile-router.ts +0 -428
  583. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
  584. package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
  585. package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
  586. package/src/monitoring/db-integrity-check.ts +0 -163
  587. package/src/monitoring/db-integrity-sample.ts +0 -176
  588. package/src/monitoring/oom-kill-reporter.ts +0 -469
  589. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
  590. package/src/onboarding/onboarding-events-store.ts +0 -296
  591. package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
  592. package/src/persistence/lifecycle-events-store.test.ts +0 -134
  593. package/src/persistence/lifecycle-events-store.ts +0 -110
  594. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
  595. package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
  596. package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
  597. package/src/runtime/routes/auto-profile-routes.ts +0 -83
  598. package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
  599. package/src/runtime/routes/telemetry-routes.ts +0 -274
  600. package/src/security/auth-fallback-events-store.ts +0 -57
  601. package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
  602. package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
  603. package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
  604. package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
  605. package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
  606. package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
  607. package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
  608. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
  609. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
  610. package/src/telemetry/activation-funnel.ts +0 -172
  611. package/src/telemetry/config-setting-events-store.ts +0 -40
  612. package/src/telemetry/config-setting-snapshot.ts +0 -170
  613. package/src/telemetry/flush-checkpoints.ts +0 -70
  614. package/src/telemetry/live-voice-funnel.ts +0 -185
  615. package/src/telemetry/memory-corpus-size.test.ts +0 -120
  616. package/src/telemetry/memory-corpus-size.ts +0 -184
  617. package/src/telemetry/memory-tier-reporter.test.ts +0 -195
  618. package/src/telemetry/memory-tier-reporter.ts +0 -130
  619. package/src/telemetry/phone-call-funnel.ts +0 -144
  620. package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
  621. package/src/telemetry/skill-loaded-events-store.ts +0 -39
  622. package/src/telemetry/telemetry-event-sources.test.ts +0 -223
  623. package/src/telemetry/telemetry-event-sources.ts +0 -597
  624. package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
  625. package/src/telemetry/telemetry-events-outbox.ts +0 -237
  626. package/src/telemetry/telemetry-main-db.ts +0 -48
  627. package/src/telemetry/telemetry-wire-source.json +0 -4
  628. package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
  629. package/src/telemetry/telemetry-wire-validation.ts +0 -162
  630. package/src/telemetry/telemetry-wire.generated.ts +0 -483
  631. package/src/telemetry/tool-executed-events-store.test.ts +0 -210
  632. package/src/telemetry/tool-executed-events-store.ts +0 -102
  633. package/src/telemetry/trace-collection-policy.test.ts +0 -28
  634. package/src/telemetry/trace-collection-policy.ts +0 -30
  635. package/src/telemetry/turn-events-store.ts +0 -216
  636. package/src/telemetry/turn-trace-store.test.ts +0 -884
  637. package/src/telemetry/turn-trace-store.ts +0 -399
  638. package/src/telemetry/types.test.ts +0 -38
  639. package/src/telemetry/types.ts +0 -780
  640. package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
  641. package/src/telemetry/usage-telemetry-reporter.ts +0 -566
  642. package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
  643. package/src/telemetry/watchdog-direct-emit.ts +0 -104
  644. package/src/telemetry/watchdog-events-store.ts +0 -31
  645. package/src/tools/ui-surface/channel-variants.ts +0 -52
  646. package/src/watcher/__tests__/telemetry.test.ts +0 -178
  647. package/src/watcher/telemetry.ts +0 -93
  648. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
  649. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
  650. /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
  651. /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
@@ -1,143 +0,0 @@
1
- import { beforeEach, describe, expect, test } from "bun:test";
2
-
3
- import type { AssistantConfig } from "../../config/schema.js";
4
- import {
5
- recordConfigSettingSnapshot,
6
- resetConfigSettingSnapshotForTesting,
7
- } from "../config-setting-snapshot.js";
8
- import {
9
- pendingOutboxPayloads,
10
- resetOutboxTable,
11
- setShareAnalytics,
12
- } from "./outbox-test-harness.js";
13
-
14
- function makeConfig(
15
- memoryEnabled: boolean,
16
- v2Enabled: boolean,
17
- v3Live = false,
18
- ): AssistantConfig {
19
- return {
20
- memory: {
21
- enabled: memoryEnabled,
22
- v2: { enabled: v2Enabled },
23
- v3: { live: v3Live },
24
- },
25
- } as AssistantConfig;
26
- }
27
-
28
- function recordedPairs(): Array<[string, string]> {
29
- return pendingOutboxPayloads<{
30
- config_key: string;
31
- config_value: string;
32
- }>("config_setting").map((event) => [event.config_key, event.config_value]);
33
- }
34
-
35
- describe("config-setting-snapshot", () => {
36
- beforeEach(() => {
37
- setShareAnalytics(true);
38
- resetOutboxTable();
39
- resetConfigSettingSnapshotForTesting();
40
- });
41
-
42
- test("records every tracked setting on the first snapshot", () => {
43
- recordConfigSettingSnapshot(makeConfig(true, false));
44
-
45
- expect(recordedPairs().sort()).toEqual([
46
- ["memory.enabled", "true"],
47
- ["memory.v2.enabled", "false"],
48
- ["memory.v3.live", "false"],
49
- ]);
50
- });
51
-
52
- test("repeated snapshots with unchanged values record nothing new", () => {
53
- recordConfigSettingSnapshot(makeConfig(true, true));
54
- recordConfigSettingSnapshot(makeConfig(true, true));
55
- recordConfigSettingSnapshot(makeConfig(true, true));
56
-
57
- expect(recordedPairs()).toHaveLength(3);
58
- });
59
-
60
- test("a changed value records only the changed key", () => {
61
- recordConfigSettingSnapshot(makeConfig(true, true));
62
- resetOutboxTable();
63
-
64
- recordConfigSettingSnapshot(makeConfig(true, false));
65
-
66
- expect(recordedPairs()).toEqual([["memory.v2.enabled", "false"]]);
67
- });
68
-
69
- test("memory.v3.live is tracked and its flip is captured", () => {
70
- recordConfigSettingSnapshot(makeConfig(true, true, false));
71
- expect(recordedPairs()).toContainEqual(["memory.v3.live", "false"]);
72
- resetOutboxTable();
73
-
74
- recordConfigSettingSnapshot(makeConfig(true, true, true));
75
-
76
- expect(recordedPairs()).toEqual([["memory.v3.live", "true"]]);
77
- });
78
-
79
- test("unknown consent skips entirely — no rows, no memo", () => {
80
- setShareAnalytics("unknown");
81
- recordConfigSettingSnapshot(makeConfig(true, false));
82
-
83
- // A snapshot is re-derivable state (unlike outbox events), so nothing is
84
- // recorded while consent is unresolved...
85
- expect(recordedPairs()).toHaveLength(0);
86
-
87
- // ...and nothing was memoized: once consent resolves, the next snapshot
88
- // records the complete current set.
89
- setShareAnalytics(true);
90
- recordConfigSettingSnapshot(makeConfig(true, false));
91
- expect(recordedPairs().sort()).toEqual([
92
- ["memory.enabled", "true"],
93
- ["memory.v2.enabled", "false"],
94
- ["memory.v3.live", "false"],
95
- ]);
96
- });
97
-
98
- test("consent off drops the snapshot without poisoning the memo", () => {
99
- setShareAnalytics(false);
100
- recordConfigSettingSnapshot(makeConfig(true, true));
101
- expect(recordedPairs()).toHaveLength(0);
102
-
103
- // A later opted-in snapshot records the full set — the opted-out attempt
104
- // must not have memoized the values (mirrors the reporter's flush retry
105
- // once consent resolves).
106
- setShareAnalytics(true);
107
- recordConfigSettingSnapshot(makeConfig(true, true));
108
- expect(recordedPairs()).toHaveLength(3);
109
- });
110
-
111
- test("re-opt-in after an opt-out re-records the full snapshot", () => {
112
- // Recorded while opted in.
113
- recordConfigSettingSnapshot(makeConfig(true, true));
114
- expect(recordedPairs()).toHaveLength(3);
115
- resetOutboxTable();
116
-
117
- // Opt out: the reporter's opt-out flush discards any pending rows, so the
118
- // memo must be cleared here too.
119
- setShareAnalytics(false);
120
- recordConfigSettingSnapshot(makeConfig(true, true));
121
- expect(recordedPairs()).toHaveLength(0);
122
-
123
- // Re-opt-in with the SAME config: the full snapshot re-records rather than
124
- // being skipped by a stale memo.
125
- setShareAnalytics(true);
126
- recordConfigSettingSnapshot(makeConfig(true, true));
127
- expect(recordedPairs().sort()).toEqual([
128
- ["memory.enabled", "true"],
129
- ["memory.v2.enabled", "true"],
130
- ["memory.v3.live", "false"],
131
- ]);
132
- });
133
-
134
- test("a partial config skips missing keys instead of throwing", () => {
135
- recordConfigSettingSnapshot({} as AssistantConfig);
136
- expect(recordedPairs()).toHaveLength(0);
137
-
138
- recordConfigSettingSnapshot({
139
- memory: { enabled: true },
140
- } as AssistantConfig);
141
- expect(recordedPairs()).toEqual([["memory.enabled", "true"]]);
142
- });
143
- });
@@ -1,56 +0,0 @@
1
- import { beforeEach, describe, expect, test } from "bun:test";
2
-
3
- import { getTelemetryDb } from "../../persistence/db-connection.js";
4
- import { initializeDb } from "../../persistence/db-init.js";
5
- import { flushCheckpoints } from "../../persistence/schema/index.js";
6
- import {
7
- getFlushCheckpoint,
8
- isFlushCheckpointStoreAvailable,
9
- setFlushCheckpoint,
10
- } from "../flush-checkpoints.js";
11
-
12
- await initializeDb();
13
-
14
- function clearCheckpoints(): void {
15
- const db = getTelemetryDb();
16
- if (!db) {
17
- throw new Error("telemetry DB unavailable in test");
18
- }
19
- db.delete(flushCheckpoints).run();
20
- }
21
-
22
- describe("flush-checkpoints", () => {
23
- beforeEach(() => {
24
- clearCheckpoints();
25
- });
26
-
27
- test("store is available once the telemetry DB is open", () => {
28
- expect(isFlushCheckpointStoreAvailable()).toBe(true);
29
- });
30
-
31
- test("get returns null for an absent key", () => {
32
- expect(getFlushCheckpoint("telemetry:usage:last_reported_at")).toBeNull();
33
- });
34
-
35
- test("set + get round-trips", () => {
36
- setFlushCheckpoint("telemetry:usage:last_reported_at", "1700000000000");
37
- expect(getFlushCheckpoint("telemetry:usage:last_reported_at")).toBe(
38
- "1700000000000",
39
- );
40
- });
41
-
42
- test("set overwrites an existing value", () => {
43
- setFlushCheckpoint("telemetry:turns:last_reported_id", "row-1");
44
- setFlushCheckpoint("telemetry:turns:last_reported_id", "row-2");
45
- expect(getFlushCheckpoint("telemetry:turns:last_reported_id")).toBe(
46
- "row-2",
47
- );
48
- });
49
-
50
- test("keys are independent", () => {
51
- setFlushCheckpoint("telemetry:usage:last_reported_at", "1");
52
- setFlushCheckpoint("telemetry:turns:last_reported_at", "2");
53
- expect(getFlushCheckpoint("telemetry:usage:last_reported_at")).toBe("1");
54
- expect(getFlushCheckpoint("telemetry:turns:last_reported_at")).toBe("2");
55
- });
56
- });
@@ -1,174 +0,0 @@
1
- import { describe, expect, it } from "bun:test";
2
-
3
- import {
4
- liveVoiceEndScreen,
5
- liveVoiceSilenceReason,
6
- liveVoiceStartScreen,
7
- } from "../live-voice-funnel.js";
8
-
9
- describe("liveVoiceStartScreen", () => {
10
- it("stamps the client and the entry point", () => {
11
- expect(liveVoiceStartScreen("macos", "companion")).toBe(
12
- "started_macos:companion",
13
- );
14
- });
15
-
16
- it("keeps both halves present when a client sends neither", () => {
17
- // A query splits the stamp on its colon; a stand-in for a missing half
18
- // keeps that split from needing a null branch per side.
19
- expect(liveVoiceStartScreen(undefined, undefined)).toBe(
20
- "started_unknown:unknown",
21
- );
22
- expect(liveVoiceStartScreen(null, null)).toBe("started_unknown:unknown");
23
- });
24
-
25
- it("stands in for whichever half is missing on its own", () => {
26
- expect(liveVoiceStartScreen("ios")).toBe("started_ios:unknown");
27
- expect(liveVoiceStartScreen(undefined, "deep_link")).toBe(
28
- "started_unknown:deep_link",
29
- );
30
- });
31
-
32
- it("keeps the longest stamp inside the wire field's 64-char bound", () => {
33
- // The parser caps `entry` at 32 characters and the longest `ClientOs` is
34
- // `windows`; the stamp built from both must still fit the ingest cap.
35
- const longest = liveVoiceStartScreen("windows", "a".repeat(32));
36
- expect(longest.length).toBeLessThanOrEqual(64);
37
- });
38
- });
39
-
40
- describe("liveVoiceSilenceReason", () => {
41
- it("blames the transport when the session never went active", () => {
42
- // Nothing after `ready` can be held against a session that never got
43
- // there: the user had no chance to speak.
44
- expect(
45
- liveVoiceSilenceReason({
46
- reachedActive: false,
47
- audioInput: true,
48
- receivedAudio: false,
49
- detectedSpeech: false,
50
- }),
51
- ).toBe("no_ready");
52
- });
53
-
54
- it("blames the transport even if stray audio arrived first", () => {
55
- // Audio can land before the preflight resolves. The session still never
56
- // became usable, and reporting that as a microphone problem would send
57
- // someone looking in the wrong layer.
58
- expect(
59
- liveVoiceSilenceReason({
60
- reachedActive: false,
61
- audioInput: true,
62
- receivedAudio: true,
63
- detectedSpeech: true,
64
- }),
65
- ).toBe("no_ready");
66
- });
67
-
68
- it("reports a microphone that never opened", () => {
69
- expect(
70
- liveVoiceSilenceReason({
71
- reachedActive: true,
72
- audioInput: true,
73
- receivedAudio: false,
74
- detectedSpeech: false,
75
- }),
76
- ).toBe("no_audio");
77
- });
78
-
79
- it("separates a mic that opened but carried no speech", () => {
80
- // The distinction that makes this taxonomy worth having: a denied
81
- // permission and a muted mic both produce a silent session, and only this
82
- // pair of flags tells them apart.
83
- expect(
84
- liveVoiceSilenceReason({
85
- reachedActive: true,
86
- audioInput: true,
87
- receivedAudio: true,
88
- detectedSpeech: false,
89
- }),
90
- ).toBe("no_speech");
91
- });
92
-
93
- it("does not blame the microphone on a session that never had one", () => {
94
- // A text-only session opened because speech-to-text was unavailable and
95
- // the client could type. Scoring the absent microphone as `no_audio` would
96
- // file it under a failure it does not have, and inflate the very rate this
97
- // taxonomy exists to explain.
98
- expect(
99
- liveVoiceSilenceReason({
100
- reachedActive: true,
101
- audioInput: false,
102
- receivedAudio: false,
103
- detectedSpeech: false,
104
- }),
105
- ).toBe("text_only");
106
- });
107
-
108
- it("still reports text_only when a text-only session streamed stray audio", () => {
109
- // A client that has not caught up with `audioInput: false` may keep
110
- // sending chunks. Nothing transcribes them, so they say nothing about why
111
- // the session was silent, and the reason must not flip on their account.
112
- expect(
113
- liveVoiceSilenceReason({
114
- reachedActive: true,
115
- audioInput: false,
116
- receivedAudio: true,
117
- detectedSpeech: true,
118
- }),
119
- ).toBe("text_only");
120
- });
121
-
122
- it("reports speech that never became a turn", () => {
123
- expect(
124
- liveVoiceSilenceReason({
125
- reachedActive: true,
126
- audioInput: true,
127
- receivedAudio: true,
128
- detectedSpeech: true,
129
- }),
130
- ).toBe("no_turn");
131
- });
132
- });
133
-
134
- describe("liveVoiceEndScreen", () => {
135
- it("carries the close reason alone when nothing else applies", () => {
136
- expect(liveVoiceEndScreen("client_end")).toBe("ended_client_end");
137
- });
138
-
139
- it("carries a failure code in the detail slot", () => {
140
- expect(liveVoiceEndScreen("error", "invalid_field")).toBe(
141
- "ended_error:invalid_field",
142
- );
143
- });
144
-
145
- it("carries a silence reason when the session merely produced nothing", () => {
146
- expect(liveVoiceEndScreen("client_end", null, "no_audio")).toBe(
147
- "ended_client_end:silent_no_audio",
148
- );
149
- });
150
-
151
- it("prefers the failure code when a session both failed and was silent", () => {
152
- // A session that died on an error is explained by the error; its silence
153
- // is a consequence, not a second finding.
154
- expect(liveVoiceEndScreen("error", "invalid_field", "no_audio")).toBe(
155
- "ended_error:invalid_field",
156
- );
157
- });
158
-
159
- it("keeps every combination inside the wire field's 64-char bound", () => {
160
- // `screen` is capped at 64 chars by the ingest serializer and an over-long
161
- // value is dropped silently, taking the whole row with it.
162
- const longest = liveVoiceEndScreen("transport_closed", null, "no_speech");
163
- expect(longest.length).toBeLessThanOrEqual(64);
164
- });
165
-
166
- it("prefixes the silence value so it reads correctly in a mislabelled column", () => {
167
- // It shares the detail slot with failure codes, and the admin dashboard
168
- // renders that slot under a "failure code" header until it learns the
169
- // difference. The prefix keeps the value honest meanwhile.
170
- expect(liveVoiceEndScreen("client_end", null, "no_turn")).toContain(
171
- "silent_",
172
- );
173
- });
174
- });
@@ -1,85 +0,0 @@
1
- import { mock, spyOn } from "bun:test";
2
-
3
- import type { ConsentState } from "../../cloud/consent-cache.js";
4
-
5
- let shareAnalytics: ConsentState = true;
6
- // Owner's `share_diagnostics` consent + accepted version — a second,
7
- // independent gate some outbox event types layer on top of
8
- // `share_analytics` (their payload carries content richer than metadata).
9
- // Default permissive/far-future so tests that only care about the analytics
10
- // gate are unaffected; the diagnostics-specific cases override via
11
- // `setShareDiagnostics`.
12
- let shareDiagnostics = true;
13
- let shareDiagnosticsVersion = "2999-01-01";
14
-
15
- // Installed when this harness is imported. bun's mock.module patches
16
- // retroactively (live bindings), so importers need no special import order.
17
- // This harness is imported by *.test.ts files only — never by the test
18
- // preload — so it runs after the per-test workspace override, where src/
19
- // imports are as safe as in the test files themselves (AGENTS.md "Test
20
- // machinery isolation" scopes its no-src/ rule to preload-time machinery).
21
- mock.module("../../cloud/consent-cache.js", () => ({
22
- getRawShareAnalytics: () => shareAnalytics,
23
- getCachedShareDiagnostics: () => shareDiagnostics,
24
- getCachedShareDiagnosticsVersion: () => shareDiagnosticsVersion,
25
- }));
26
-
27
- import * as dbConnection from "../../persistence/db-connection.js";
28
- import { getTelemetryDb } from "../../persistence/db-connection.js";
29
- import { initializeDb } from "../../persistence/db-init.js";
30
- import { telemetryEvents } from "../../persistence/schema/index.js";
31
- import { queryTelemetryOutboxBatch } from "../telemetry-events-outbox.js";
32
-
33
- await initializeDb();
34
-
35
- /** Flip the mocked share_analytics consent; call with true in beforeEach. */
36
- export function setShareAnalytics(value: ConsentState): void {
37
- shareAnalytics = value;
38
- }
39
-
40
- /**
41
- * Flip the mocked share_diagnostics consent and, optionally, its accepted
42
- * version (defaults far-future/unconditionally eligible). Call with `true`
43
- * in `beforeEach` for stores that gate on it.
44
- */
45
- export function setShareDiagnostics(
46
- value: boolean,
47
- version = "2999-01-01",
48
- ): void {
49
- shareDiagnostics = value;
50
- shareDiagnosticsVersion = version;
51
- }
52
-
53
- /** Delete every telemetry_events row. */
54
- export function resetOutboxTable(): void {
55
- const db = getTelemetryDb();
56
- if (!db) {
57
- throw new Error("telemetry DB unavailable in test");
58
- }
59
- db.delete(telemetryEvents).run();
60
- }
61
-
62
- /** Pending rows for one event name in (created_at, id) order. */
63
- export function pendingOutboxRows(name: string, limit = 100) {
64
- return queryTelemetryOutboxBatch(name, limit);
65
- }
66
-
67
- /** Pending payloads for one event name, JSON-parsed, in flush order. */
68
- export function pendingOutboxPayloads<T = Record<string, unknown>>(
69
- name: string,
70
- limit = 100,
71
- ): T[] {
72
- return pendingOutboxRows(name, limit).map(
73
- (row) => JSON.parse(row.payload) as T,
74
- );
75
- }
76
-
77
- /** Run `fn` with the telemetry connection reported as unavailable. */
78
- export function withTelemetryDbUnavailable(fn: () => void): void {
79
- const spy = spyOn(dbConnection, "getTelemetryDb").mockReturnValue(null);
80
- try {
81
- fn();
82
- } finally {
83
- spy.mockRestore();
84
- }
85
- }
@@ -1,72 +0,0 @@
1
- import { describe, expect, it } from "bun:test";
2
-
3
- import {
4
- PHONE_CALL_STEPS,
5
- phoneCallEndScreen,
6
- phoneCallSilenceReason,
7
- phoneCallStartScreen,
8
- } from "../phone-call-funnel.js";
9
-
10
- describe("phoneCallStartScreen", () => {
11
- it("stamps the direction and the call mode", () => {
12
- expect(phoneCallStartScreen("inbound", "normal")).toBe(
13
- "started_inbound:normal",
14
- );
15
- expect(phoneCallStartScreen("outbound", "verification")).toBe(
16
- "started_outbound:verification",
17
- );
18
- });
19
-
20
- it("reads an unwritten mode as the ordinary call it is", () => {
21
- // Only verification and invite calls write a mode, so a null there is a
22
- // normal conversation rather than a dimension nobody filled in.
23
- expect(phoneCallStartScreen("inbound", null)).toBe(
24
- "started_inbound:normal",
25
- );
26
- expect(phoneCallStartScreen("inbound")).toBe("started_inbound:normal");
27
- });
28
-
29
- it("keeps the longest stamp inside the wire field's 64-char bound", () => {
30
- const longest = phoneCallStartScreen("outbound", "verification");
31
- expect(longest.length).toBeLessThanOrEqual(64);
32
- });
33
- });
34
-
35
- describe("phoneCallSilenceReason", () => {
36
- it("blames the connection when the call never reached the caller", () => {
37
- // Nothing that happens on a live call can be held against one that never
38
- // connected: nobody was there to speak.
39
- expect(phoneCallSilenceReason({ connected: false })).toBe("no_connect");
40
- });
41
-
42
- it("reports a connected call that took no turn as silence on the line", () => {
43
- expect(phoneCallSilenceReason({ connected: true })).toBe("no_turn");
44
- });
45
- });
46
-
47
- describe("phoneCallEndScreen", () => {
48
- it("stamps the terminal status on a call that took a turn", () => {
49
- expect(phoneCallEndScreen("completed")).toBe("ended_completed");
50
- expect(phoneCallEndScreen("failed", null)).toBe("ended_failed");
51
- });
52
-
53
- it("carries the silence classification when no turn was taken", () => {
54
- expect(phoneCallEndScreen("failed", "no_connect")).toBe(
55
- "ended_failed:silent_no_connect",
56
- );
57
- expect(phoneCallEndScreen("completed", "no_turn")).toBe(
58
- "ended_completed:silent_no_turn",
59
- );
60
- });
61
- });
62
-
63
- describe("PHONE_CALL_STEPS", () => {
64
- it("orders the pair the warehouse subtracts", () => {
65
- // Duration is the gap between these two rows, so their order is part of
66
- // the contract rather than a label.
67
- expect(PHONE_CALL_STEPS.callStarted.stepIndex).toBe(0);
68
- expect(PHONE_CALL_STEPS.callEnded.stepIndex).toBe(1);
69
- expect(PHONE_CALL_STEPS.callStarted.stepName).toBe("phone_call_started");
70
- expect(PHONE_CALL_STEPS.callEnded.stepName).toBe("phone_call_ended");
71
- });
72
- });