@vellumai/assistant 0.10.3-dev.202606300531.247eff8 → 0.10.3-dev.202606300917.a9da5f8

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 (398) hide show
  1. package/eslint-rules/cli-no-daemon-internals.js +4 -3
  2. package/package.json +1 -1
  3. package/scripts/generate-openapi.ts +80 -58
  4. package/src/__tests__/activation-early-marking.test.ts +1 -1
  5. package/src/__tests__/anthropic-provider.test.ts +48 -0
  6. package/src/__tests__/auto-analysis-end-to-end.test.ts +1 -1
  7. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +2 -2
  8. package/src/__tests__/context-search-agent-protocol.test.ts +2 -2
  9. package/src/__tests__/context-search-agent-runner.test.ts +2 -2
  10. package/src/__tests__/context-search-conversations-source.test.ts +2 -2
  11. package/src/__tests__/context-search-fanout.test.ts +3 -3
  12. package/src/__tests__/context-search-memory-source.test.ts +7 -6
  13. package/src/__tests__/context-search-memory-v2-source.test.ts +7 -7
  14. package/src/__tests__/context-search-types.test.ts +2 -2
  15. package/src/__tests__/context-search-workspace-source.test.ts +2 -2
  16. package/src/__tests__/conversation-agent-loop.test.ts +1 -1
  17. package/src/__tests__/conversation-fork-crud.test.ts +10 -10
  18. package/src/__tests__/conversation-fork-retrospective.test.ts +4 -4
  19. package/src/__tests__/conversation-runtime-assembly.test.ts +3 -3
  20. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +4 -4
  21. package/src/__tests__/conversation-workspace-cache-state.test.ts +1 -1
  22. package/src/__tests__/conversation-workspace-injection.test.ts +1 -1
  23. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +1 -1
  24. package/src/__tests__/conversations-import-system-filter.test.ts +1 -1
  25. package/src/__tests__/file-write-tool.test.ts +3 -3
  26. package/src/__tests__/get-skill-detail-audit.test.ts +1 -1
  27. package/src/__tests__/graph-extraction-event-date.test.ts +1 -1
  28. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +1 -1
  29. package/src/__tests__/init-feature-flag-overrides.test.ts +1 -4
  30. package/src/__tests__/injection-block.test.ts +5 -2
  31. package/src/__tests__/injector-chain.test.ts +1 -1
  32. package/src/__tests__/injector-pkb-v2-silenced.test.ts +2 -2
  33. package/src/__tests__/injector-v3-suppression.test.ts +3 -3
  34. package/src/__tests__/install-skill-routing.test.ts +1 -1
  35. package/src/__tests__/lifecycle-memory-v2-seed.test.ts +5 -5
  36. package/src/__tests__/list-messages-hidden-metadata.test.ts +4 -4
  37. package/src/__tests__/managed-skill-lifecycle.test.ts +2 -2
  38. package/src/__tests__/memory-jobs-worker-lanes.test.ts +2 -2
  39. package/src/__tests__/memory-recall-log-store.test.ts +4 -4
  40. package/src/__tests__/memory-retrieval-budget.test.ts +1 -1
  41. package/src/__tests__/memory-retrieval-hook.test.ts +2 -2
  42. package/src/__tests__/memory-upsert-concurrency.test.ts +1 -1
  43. package/src/__tests__/mock-gateway-ipc.ts +1 -1
  44. package/src/__tests__/outbound-slack-persistence.test.ts +1 -1
  45. package/src/__tests__/persistence-layering-guard.test.ts +6 -7
  46. package/src/__tests__/persistence-secret-redaction.test.ts +1 -1
  47. package/src/__tests__/pkb-autoinject.test.ts +1 -1
  48. package/src/__tests__/playbook-execution.test.ts +1 -1
  49. package/src/__tests__/plugin-config-data-migration.test.ts +14 -14
  50. package/src/__tests__/plugin-import-boundary-guard.test.ts +72 -36
  51. package/src/__tests__/processing-flag-persist-failure.test.ts +1 -1
  52. package/src/__tests__/rebuild-index-graph-nodes.test.ts +1 -1
  53. package/src/__tests__/search-skills-unified.test.ts +1 -1
  54. package/src/__tests__/skills-file-content-endpoint.test.ts +1 -1
  55. package/src/__tests__/skills-files-catalog-fallback.test.ts +1 -1
  56. package/src/__tests__/slim-skill-category.test.ts +1 -1
  57. package/src/__tests__/strip-memory-injections.test.ts +2 -2
  58. package/src/__tests__/task-memory-cleanup.test.ts +4 -4
  59. package/src/__tests__/tool-preview-lifecycle.test.ts +7 -4
  60. package/src/__tests__/workspace-migration-117-normalize-stale-lean-memory-v3-defaults.test.ts +221 -0
  61. package/src/acp/__tests__/session-manager-persistence.test.ts +3 -3
  62. package/src/acp/__tests__/session-manager-startup.test.ts +1 -1
  63. package/src/cli/commands/__tests__/conversations-new.test.ts +186 -0
  64. package/src/cli/commands/conversations.ts +46 -28
  65. package/src/cli/commands/memory/__tests__/memory-v2-compare-render.test.ts +1 -1
  66. package/src/cli/commands/memory/memory-retrospective.ts +32 -28
  67. package/src/cli/commands/memory/memory-v2-compare-render.ts +1 -1
  68. package/src/cli/commands/memory/memory-v2.ts +2 -2
  69. package/src/cli/commands/memory/memory-v3.ts +2 -2
  70. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +1 -1
  71. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +1 -1
  72. package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +5 -2
  73. package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +4 -1
  74. package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +4 -1
  75. package/src/config/bundled-skills/settings/tools/voice-config-update.ts +7 -7
  76. package/src/config/schemas/__tests__/memory-v3.test.ts +12 -11
  77. package/src/config/schemas/memory-v3.ts +54 -10
  78. package/src/context/strip-injections.ts +1 -1
  79. package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +16 -13
  80. package/src/daemon/__tests__/embedding-reconcile.test.ts +1 -1
  81. package/src/daemon/__tests__/inference-profile-notification.test.ts +7 -4
  82. package/src/daemon/__tests__/memory-v2-startup.test.ts +2 -2
  83. package/src/daemon/conversation-agent-loop-handlers.ts +3 -3
  84. package/src/daemon/conversation-agent-loop.ts +2 -2
  85. package/src/daemon/conversation-lifecycle.ts +1 -1
  86. package/src/daemon/conversation-runtime-assembly.ts +9 -6
  87. package/src/daemon/conversation-surfaces.ts +1 -1
  88. package/src/daemon/conversation.ts +5 -2
  89. package/src/daemon/embedding-reconcile.ts +4 -4
  90. package/src/daemon/handlers/skills.ts +1 -1
  91. package/src/daemon/lifecycle.ts +5 -5
  92. package/src/daemon/memory-v2-startup.test.ts +2 -2
  93. package/src/daemon/memory-v2-startup.ts +11 -10
  94. package/src/daemon/skill-memory-refresh.ts +1 -1
  95. package/src/daemon/tool-side-effects.ts +3 -3
  96. package/src/daemon/trust-context.ts +1 -1
  97. package/src/home/feed-source-enrichment.ts +3 -3
  98. package/src/home/job-handlers/conversation-starters.ts +15 -15
  99. package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +1 -1
  100. package/src/{memory → jobs}/worker.ts +1 -1
  101. package/src/permissions/checker.ts +1 -1
  102. package/src/persistence/attachments-store.ts +1 -1
  103. package/src/persistence/conversation-crud.ts +27 -27
  104. package/src/persistence/conversation-queries.ts +1 -1
  105. package/src/persistence/db-maintenance.ts +1 -1
  106. package/src/persistence/embeddings/embedding-backend.ts +1 -5
  107. package/src/{memory → persistence/embeddings}/sparse-tokenize.ts +6 -4
  108. package/src/persistence/group-crud.ts +1 -1
  109. package/src/persistence/job-handlers/cleanup.ts +4 -7
  110. package/src/persistence/jobs-store.ts +1 -1
  111. package/src/persistence/jobs-worker.ts +2 -2
  112. package/src/persistence/llm-usage-store.ts +1 -1
  113. package/src/persistence/steps.ts +1 -1
  114. package/src/persistence/worker-control.ts +1 -1
  115. package/src/{memory → plugins/defaults/memory}/__tests__/301-create-watchdog-events.test.ts +4 -4
  116. package/src/{memory → plugins/defaults/memory}/__tests__/activation-session-store.test.ts +4 -4
  117. package/src/{memory → plugins/defaults/memory}/__tests__/bookmark-crud.test.ts +5 -5
  118. package/src/{memory → plugins/defaults/memory}/__tests__/bookmark-schema.test.ts +3 -3
  119. package/src/{memory → plugins/defaults/memory}/__tests__/clear-stale-processing-flags.test.ts +4 -4
  120. package/src/{memory → plugins/defaults/memory}/__tests__/compaction-log-store-clickhouse.test.ts +2 -2
  121. package/src/{memory → plugins/defaults/memory}/__tests__/conversation-queries.test.ts +7 -7
  122. package/src/{memory → plugins/defaults/memory}/__tests__/conversation-row-batch-delete.test.ts +7 -7
  123. package/src/{memory → plugins/defaults/memory}/__tests__/conversation-types.test.ts +1 -1
  124. package/src/{memory → plugins/defaults/memory}/__tests__/db-async-query.test.ts +4 -4
  125. package/src/{memory → plugins/defaults/memory}/__tests__/db-busy-timeout.test.ts +2 -2
  126. package/src/{memory → plugins/defaults/memory}/__tests__/db-logs-attach.test.ts +7 -6
  127. package/src/{memory → plugins/defaults/memory}/__tests__/db-maintenance.test.ts +7 -7
  128. package/src/{memory → plugins/defaults/memory}/__tests__/db-memory-attach.test.ts +7 -6
  129. package/src/{memory → plugins/defaults/memory}/__tests__/embedding-cache.test.ts +7 -6
  130. package/src/{memory → plugins/defaults/memory}/__tests__/find-analysis-conversation.test.ts +5 -5
  131. package/src/{memory → plugins/defaults/memory}/__tests__/find-most-recent-retrospective-for.test.ts +5 -5
  132. package/src/{memory → plugins/defaults/memory}/__tests__/fork-message-copy.test.ts +8 -8
  133. package/src/{memory → plugins/defaults/memory}/__tests__/jobs-store-enqueue-gate.test.ts +17 -13
  134. package/src/{memory → plugins/defaults/memory}/__tests__/jobs-store-job-classes.test.ts +1 -1
  135. package/src/{memory → plugins/defaults/memory}/__tests__/jobs-worker-v2-graph-trigger-embed.test.ts +13 -13
  136. package/src/{memory → plugins/defaults/memory}/__tests__/jobs-worker-v2-schedule.test.ts +11 -9
  137. package/src/{memory → plugins/defaults/memory}/__tests__/memory-retrospective-enqueue.test.ts +3 -3
  138. package/src/{memory → plugins/defaults/memory}/__tests__/memory-retrospective-job.test.ts +9 -9
  139. package/src/{memory → plugins/defaults/memory}/__tests__/memory-retrospective-startup-cleanup.test.ts +4 -4
  140. package/src/{memory → plugins/defaults/memory}/__tests__/memory-retrospective-state.test.ts +7 -7
  141. package/src/{memory → plugins/defaults/memory}/__tests__/memory-v2-activation-log-store.test.ts +5 -5
  142. package/src/{memory → plugins/defaults/memory}/__tests__/memory-v2-concept-frequency.test.ts +5 -5
  143. package/src/{memory → plugins/defaults/memory}/__tests__/memory-v3-selections-migration.test.ts +3 -3
  144. package/src/{memory → plugins/defaults/memory}/__tests__/prompt-override.test.ts +1 -1
  145. package/src/{memory → plugins/defaults/memory}/__tests__/qdrant-client-sentinel.test.ts +1 -1
  146. package/src/{memory → plugins/defaults/memory}/__tests__/table-relocation.test.ts +4 -4
  147. package/src/{memory → plugins/defaults/memory}/activation-session-store.ts +3 -3
  148. package/src/{memory → plugins/defaults/memory}/anisotropy.ts +2 -2
  149. package/src/{memory → plugins/defaults/memory}/context-search/agent-protocol.ts +1 -1
  150. package/src/{memory → plugins/defaults/memory}/context-search/agent-runner.ts +4 -3
  151. package/src/{memory → plugins/defaults/memory}/context-search/search.ts +1 -1
  152. package/src/{memory → plugins/defaults/memory}/context-search/sources/conversations.ts +5 -5
  153. package/src/{memory → plugins/defaults/memory}/context-search/sources/memory-v2.ts +2 -2
  154. package/src/{memory → plugins/defaults/memory}/context-search/sources/memory.ts +3 -3
  155. package/src/{memory → plugins/defaults/memory}/context-search/types.ts +1 -1
  156. package/src/{memory → plugins/defaults/memory}/graph/__tests__/conversation-graph-memory-registry.test.ts +2 -2
  157. package/src/{memory → plugins/defaults/memory}/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +27 -22
  158. package/src/{memory → plugins/defaults/memory}/graph/__tests__/handle-remember-v2.test.ts +1 -1
  159. package/src/{memory → plugins/defaults/memory}/graph/bootstrap.test.ts +4 -4
  160. package/src/{memory → plugins/defaults/memory}/graph/bootstrap.ts +10 -10
  161. package/src/{memory → plugins/defaults/memory}/graph/capability-seed.ts +11 -11
  162. package/src/{memory → plugins/defaults/memory}/graph/consolidation.ts +5 -5
  163. package/src/{memory → plugins/defaults/memory}/graph/conversation-graph-memory.ts +13 -17
  164. package/src/{memory → plugins/defaults/memory}/graph/decay.ts +2 -2
  165. package/src/{memory → plugins/defaults/memory}/graph/extraction-job.ts +5 -5
  166. package/src/{memory → plugins/defaults/memory}/graph/extraction.ts +13 -14
  167. package/src/{memory → plugins/defaults/memory}/graph/graph-memory-state-store.ts +2 -2
  168. package/src/{memory → plugins/defaults/memory}/graph/graph-search.test.ts +14 -11
  169. package/src/{memory → plugins/defaults/memory}/graph/graph-search.ts +14 -14
  170. package/src/{memory → plugins/defaults/memory}/graph/image-ref-utils.ts +3 -3
  171. package/src/{memory → plugins/defaults/memory}/graph/injection.ts +2 -2
  172. package/src/{memory → plugins/defaults/memory}/graph/narrative.ts +4 -4
  173. package/src/{memory → plugins/defaults/memory}/graph/pattern-scan.ts +4 -4
  174. package/src/{memory → plugins/defaults/memory}/graph/retriever.test.ts +8 -8
  175. package/src/{memory → plugins/defaults/memory}/graph/retriever.ts +8 -7
  176. package/src/{memory → plugins/defaults/memory}/graph/store.test.ts +2 -2
  177. package/src/{memory → plugins/defaults/memory}/graph/store.ts +3 -3
  178. package/src/{memory → plugins/defaults/memory}/graph/tool-handlers.ts +3 -3
  179. package/src/{memory → plugins/defaults/memory}/graph/tools.ts +1 -1
  180. package/src/plugins/defaults/memory/hooks/post-compact.ts +1 -1
  181. package/src/plugins/defaults/memory/hooks/user-prompt-submit.ts +1 -1
  182. package/src/{memory → plugins/defaults/memory}/indexer.ts +13 -13
  183. package/src/plugins/defaults/memory/injectors.ts +6 -6
  184. package/src/{memory → plugins/defaults/memory}/job-handlers/backfill.ts +7 -7
  185. package/src/{memory → plugins/defaults/memory}/job-handlers/embedding.test.ts +9 -9
  186. package/src/{memory → plugins/defaults/memory}/job-handlers/embedding.ts +7 -7
  187. package/src/{memory → plugins/defaults/memory}/job-handlers/index-maintenance.ts +10 -10
  188. package/src/plugins/defaults/memory/job-handlers.ts +19 -19
  189. package/src/{memory → plugins/defaults/memory}/jobs/__tests__/embed-concept-page.test.ts +41 -37
  190. package/src/{memory → plugins/defaults/memory}/jobs/embed-concept-page.ts +11 -11
  191. package/src/{memory → plugins/defaults/memory}/jobs/embed-pkb-file.test.ts +8 -8
  192. package/src/{memory → plugins/defaults/memory}/jobs/embed-pkb-file.ts +3 -3
  193. package/src/{memory → plugins/defaults/memory}/memory-recall-log-store.ts +2 -2
  194. package/src/{memory → plugins/defaults/memory}/memory-retrospective-enqueue.ts +5 -5
  195. package/src/{memory → plugins/defaults/memory}/memory-retrospective-fork-boundary.ts +2 -2
  196. package/src/{memory → plugins/defaults/memory}/memory-retrospective-job.ts +14 -14
  197. package/src/{memory → plugins/defaults/memory}/memory-retrospective-startup-cleanup.ts +8 -5
  198. package/src/{memory → plugins/defaults/memory}/memory-retrospective-state.ts +3 -3
  199. package/src/{memory → plugins/defaults/memory}/memory-retrospective-trigger-check.ts +3 -3
  200. package/src/{memory → plugins/defaults/memory}/memory-v2-activation-log-store.ts +2 -2
  201. package/src/{memory → plugins/defaults/memory}/memory-v2-concept-frequency.ts +1 -1
  202. package/src/{memory → plugins/defaults/memory}/pkb/autoinject.ts +1 -1
  203. package/src/{memory → plugins/defaults/memory}/pkb/context.ts +2 -2
  204. package/src/{memory → plugins/defaults/memory}/pkb/pkb-index.test.ts +11 -8
  205. package/src/{memory → plugins/defaults/memory}/pkb/pkb-index.ts +4 -4
  206. package/src/{memory → plugins/defaults/memory}/pkb/pkb-reconcile.test.ts +11 -8
  207. package/src/{memory → plugins/defaults/memory}/pkb/pkb-reconcile.ts +2 -2
  208. package/src/{memory → plugins/defaults/memory}/pkb/pkb-search.test.ts +11 -8
  209. package/src/{memory → plugins/defaults/memory}/pkb/pkb-search.ts +5 -5
  210. package/src/{memory → plugins/defaults/memory}/pkb/types.ts +1 -1
  211. package/src/{memory → plugins/defaults/memory}/rerank-local.ts +5 -5
  212. package/src/{runtime → plugins/defaults/memory}/routes/__tests__/memory-v2-routes.test.ts +3 -3
  213. package/src/{runtime → plugins/defaults/memory}/routes/__tests__/memory-v2-simulate-route.test.ts +13 -13
  214. package/src/{runtime → plugins/defaults/memory}/routes/memory-eval-routes.ts +11 -11
  215. package/src/{runtime → plugins/defaults/memory}/routes/memory-item-routes.test.ts +19 -12
  216. package/src/{runtime → plugins/defaults/memory}/routes/memory-item-routes.ts +23 -24
  217. package/src/{runtime → plugins/defaults/memory}/routes/memory-v2-routes.ts +26 -26
  218. package/src/{runtime → plugins/defaults/memory}/routes/memory-v3-routes.ts +10 -7
  219. package/src/{memory → plugins/defaults/memory}/search/semantic.ts +6 -6
  220. package/src/{memory → plugins/defaults/memory}/segmenter.ts +1 -1
  221. package/src/{memory → plugins/defaults/memory}/task-memory-cleanup.ts +2 -2
  222. package/src/plugins/defaults/memory/tools.test.ts +3 -3
  223. package/src/plugins/defaults/memory/tools.ts +7 -10
  224. package/src/{memory → plugins/defaults/memory}/v2/__tests__/activation-store.test.ts +3 -3
  225. package/src/{memory → plugins/defaults/memory}/v2/__tests__/activation.test.ts +22 -19
  226. package/src/{memory → plugins/defaults/memory}/v2/__tests__/backfill-jobs.test.ts +32 -29
  227. package/src/{memory → plugins/defaults/memory}/v2/__tests__/cli-command-store.test.ts +18 -15
  228. package/src/{memory → plugins/defaults/memory}/v2/__tests__/consolidation-job.test.ts +7 -7
  229. package/src/{memory → plugins/defaults/memory}/v2/__tests__/frontmatter-sweep.test.ts +2 -2
  230. package/src/{memory → plugins/defaults/memory}/v2/__tests__/harness-compare.test.ts +6 -6
  231. package/src/{memory → plugins/defaults/memory}/v2/__tests__/harness-oracle.test.ts +5 -5
  232. package/src/{memory → plugins/defaults/memory}/v2/__tests__/harness-replay-input.test.ts +6 -6
  233. package/src/{memory → plugins/defaults/memory}/v2/__tests__/harness-runner.test.ts +1 -1
  234. package/src/{memory → plugins/defaults/memory}/v2/__tests__/injection-events.test.ts +7 -7
  235. package/src/{memory → plugins/defaults/memory}/v2/__tests__/injection.test.ts +25 -21
  236. package/src/{memory → plugins/defaults/memory}/v2/__tests__/migration.test.ts +9 -8
  237. package/src/{memory → plugins/defaults/memory}/v2/__tests__/page-index.test.ts +2 -2
  238. package/src/{memory → plugins/defaults/memory}/v2/__tests__/prompts-consolidation.test.ts +1 -1
  239. package/src/{memory → plugins/defaults/memory}/v2/__tests__/qdrant.test.ts +5 -5
  240. package/src/{memory → plugins/defaults/memory}/v2/__tests__/reranker.test.ts +4 -4
  241. package/src/{memory → plugins/defaults/memory}/v2/__tests__/router.test.ts +5 -4
  242. package/src/{memory → plugins/defaults/memory}/v2/__tests__/sim.test.ts +22 -19
  243. package/src/{memory → plugins/defaults/memory}/v2/__tests__/skill-content.test.ts +2 -2
  244. package/src/{memory → plugins/defaults/memory}/v2/__tests__/skill-store.test.ts +24 -21
  245. package/src/{memory → plugins/defaults/memory}/v2/__tests__/sparse-bm25.test.ts +1 -1
  246. package/src/{memory → plugins/defaults/memory}/v2/__tests__/static-context.test.ts +3 -3
  247. package/src/{memory → plugins/defaults/memory}/v2/__tests__/sweep-job.test.ts +10 -9
  248. package/src/{memory → plugins/defaults/memory}/v2/activation-store.ts +2 -2
  249. package/src/{memory → plugins/defaults/memory}/v2/activation.ts +2 -2
  250. package/src/{memory → plugins/defaults/memory}/v2/backfill-jobs.ts +8 -8
  251. package/src/{memory → plugins/defaults/memory}/v2/cli-command-store.ts +4 -4
  252. package/src/{memory → plugins/defaults/memory}/v2/consolidation-job.ts +7 -7
  253. package/src/{memory → plugins/defaults/memory}/v2/frontmatter-sweep.ts +3 -3
  254. package/src/{memory → plugins/defaults/memory}/v2/harness/compare.ts +2 -2
  255. package/src/{memory → plugins/defaults/memory}/v2/harness/oracle.ts +2 -2
  256. package/src/{memory → plugins/defaults/memory}/v2/harness/replay-input.ts +4 -4
  257. package/src/{memory → plugins/defaults/memory}/v2/harness/retriever.ts +1 -1
  258. package/src/{memory → plugins/defaults/memory}/v2/harness/router-retriever.ts +1 -1
  259. package/src/{memory → plugins/defaults/memory}/v2/injection-events.ts +3 -3
  260. package/src/{memory → plugins/defaults/memory}/v2/injection.ts +4 -4
  261. package/src/{memory → plugins/defaults/memory}/v2/migration.ts +7 -6
  262. package/src/{memory → plugins/defaults/memory}/v2/page-index.ts +1 -1
  263. package/src/{memory → plugins/defaults/memory}/v2/page-store.ts +1 -1
  264. package/src/{memory → plugins/defaults/memory}/v2/prompts/consolidation.ts +2 -2
  265. package/src/{memory → plugins/defaults/memory}/v2/prompts/router.ts +1 -1
  266. package/src/{memory → plugins/defaults/memory}/v2/qdrant.ts +5 -5
  267. package/src/{memory → plugins/defaults/memory}/v2/reranker.ts +3 -3
  268. package/src/{memory → plugins/defaults/memory}/v2/router.ts +8 -7
  269. package/src/{memory → plugins/defaults/memory}/v2/sim.ts +2 -2
  270. package/src/{memory → plugins/defaults/memory}/v2/skill-content.ts +2 -2
  271. package/src/{memory → plugins/defaults/memory}/v2/skill-store.ts +8 -8
  272. package/src/{memory → plugins/defaults/memory}/v2/sparse-bm25.ts +2 -2
  273. package/src/{memory → plugins/defaults/memory}/v2/static-context.ts +4 -4
  274. package/src/{memory → plugins/defaults/memory}/v2/sweep-job.ts +14 -11
  275. package/src/plugins/defaults/memory/v3/__tests__/candidate-match.test.ts +2 -2
  276. package/src/plugins/defaults/memory/v3/__tests__/carry-integration.test.ts +8 -11
  277. package/src/plugins/defaults/memory/v3/__tests__/edge.test.ts +1 -1
  278. package/src/plugins/defaults/memory/v3/__tests__/injection.test.ts +1 -1
  279. package/src/plugins/defaults/memory/v3/__tests__/live-integration.test.ts +7 -7
  280. package/src/plugins/defaults/memory/v3/__tests__/maintain-job.test.ts +1 -1
  281. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +72 -7
  282. package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +2 -1
  283. package/src/plugins/defaults/memory/v3/__tests__/render-injection.test.ts +1 -1
  284. package/src/plugins/defaults/memory/v3/__tests__/selection-log-store.test.ts +2 -0
  285. package/src/plugins/defaults/memory/v3/__tests__/shadow-integration.test.ts +3 -6
  286. package/src/plugins/defaults/memory/v3/__tests__/shadow-plugin.test.ts +51 -8
  287. package/src/plugins/defaults/memory/v3/__tests__/tuning-profile.test.ts +96 -0
  288. package/src/plugins/defaults/memory/v3/candidate-match.ts +2 -2
  289. package/src/plugins/defaults/memory/v3/capabilities.ts +2 -5
  290. package/src/plugins/defaults/memory/v3/card.ts +1 -1
  291. package/src/plugins/defaults/memory/v3/edge.ts +1 -1
  292. package/src/plugins/defaults/memory/v3/entity-lane.test.ts +124 -0
  293. package/src/plugins/defaults/memory/v3/entity-lane.ts +113 -0
  294. package/src/plugins/defaults/memory/v3/hot-set.test.ts +1 -1
  295. package/src/plugins/defaults/memory/v3/injector.ts +1 -4
  296. package/src/plugins/defaults/memory/v3/maintain-job.ts +3 -3
  297. package/src/plugins/defaults/memory/v3/orchestrate.ts +43 -0
  298. package/src/plugins/defaults/memory/v3/page-content.ts +2 -5
  299. package/src/plugins/defaults/memory/v3/pool-select.test.ts +2 -1
  300. package/src/plugins/defaults/memory/v3/pool-select.ts +1 -1
  301. package/src/plugins/defaults/memory/v3/prune.test.ts +2 -2
  302. package/src/plugins/defaults/memory/v3/prune.ts +4 -7
  303. package/src/plugins/defaults/memory/v3/render-injection.ts +1 -1
  304. package/src/plugins/defaults/memory/v3/section-needle.ts +20 -5
  305. package/src/plugins/defaults/memory/v3/selection-log-store.ts +1 -1
  306. package/src/plugins/defaults/memory/v3/shadow-plugin.ts +57 -16
  307. package/src/plugins/defaults/memory/v3/tuning-profile.ts +91 -0
  308. package/src/plugins/defaults/memory/v3/types.ts +4 -1
  309. package/src/{memory → plugins/defaults/memory}/v3-eval/eval-packets.ts +13 -13
  310. package/src/plugins/types.ts +1 -1
  311. package/src/prompts/system-prompt.ts +1 -1
  312. package/src/providers/__tests__/placeholder-sentinels.test.ts +80 -0
  313. package/src/providers/anthropic/client.ts +13 -17
  314. package/src/providers/inference/__tests__/base-url-security.test.ts +1 -1
  315. package/src/providers/inference/resolve-auth.ts +3 -3
  316. package/src/providers/placeholder-sentinels.ts +50 -15
  317. package/src/runtime/__tests__/agent-wake.test.ts +2 -2
  318. package/src/runtime/__tests__/guardian-vellum-migration.test.ts +7 -5
  319. package/src/runtime/routes/__tests__/acp-routes.test.ts +2 -2
  320. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +7 -7
  321. package/src/runtime/routes/__tests__/home-feed-routes.test.ts +1 -1
  322. package/src/runtime/routes/__tests__/ps-routes.test.ts +3 -3
  323. package/src/runtime/routes/__tests__/retrospective-routes.test.ts +4 -4
  324. package/src/runtime/routes/acp-routes.test.ts +1 -1
  325. package/src/runtime/routes/acp-routes.ts +1 -1
  326. package/src/runtime/routes/consolidation-routes.ts +1 -1
  327. package/src/runtime/routes/conversation-query-routes.ts +3 -3
  328. package/src/runtime/routes/conversation-routes.ts +1 -1
  329. package/src/runtime/routes/conversations-import-routes.ts +1 -1
  330. package/src/runtime/routes/global-search-routes.ts +1 -1
  331. package/src/runtime/routes/index.ts +4 -4
  332. package/src/runtime/routes/retrospective-routes.ts +4 -4
  333. package/src/runtime/routes/schedule-routes.ts +1 -2
  334. package/src/runtime/routes/task-routes.ts +18 -29
  335. package/src/runtime/services/__tests__/auto-analysis-enqueue.test.ts +7 -4
  336. package/src/runtime/services/analyze-conversation.ts +1 -1
  337. package/src/runtime/services/auto-analysis-enqueue.ts +1 -1
  338. package/src/schedule/scheduler.ts +1 -1
  339. package/src/skills/catalog-install.ts +1 -1
  340. package/src/skills/managed-store.ts +1 -1
  341. package/src/tasks/task-runner.ts +1 -1
  342. package/src/telemetry/turn-trace-store.ts +2 -2
  343. package/src/telemetry/usage-telemetry-reporter.test.ts +2 -2
  344. package/src/telemetry/usage-telemetry-reporter.ts +3 -6
  345. package/src/tools/acp/spawn.test.ts +2 -2
  346. package/src/tools/browser/cdp-client/cdp-inspect/__tests__/discovery.test.ts +3 -3
  347. package/src/tools/filesystem/write.ts +2 -2
  348. package/src/tools/skills/scaffold-managed.ts +1 -1
  349. package/src/util/__tests__/process-tree.test.ts +4 -4
  350. package/src/util/process-tree.ts +3 -3
  351. package/src/workflows/leaf-runner.test.ts +6 -3
  352. package/src/workflows/leaf-runner.ts +1 -1
  353. package/src/workspace/migrations/117-normalize-stale-lean-memory-v3-defaults.ts +116 -0
  354. package/src/workspace/migrations/__tests__/backfill-v3-leaves.test.ts +5 -2
  355. package/src/workspace/migrations/registry.ts +2 -0
  356. /package/src/{memory → persistence/embeddings}/__tests__/sparse-tokenize.test.ts +0 -0
  357. /package/src/{memory → plugins/defaults/memory}/__tests__/fixtures/memory-v2-activation-fixtures.ts +0 -0
  358. /package/src/{memory → plugins/defaults/memory}/__tests__/memory-retrospective-trigger-check.test.ts +0 -0
  359. /package/src/{memory → plugins/defaults/memory}/anisotropy.test.ts +0 -0
  360. /package/src/{memory → plugins/defaults/memory}/context-search/__tests__/agent-runner-redaction.test.ts +0 -0
  361. /package/src/{memory → plugins/defaults/memory}/context-search/format.ts +0 -0
  362. /package/src/{memory → plugins/defaults/memory}/context-search/limits.ts +0 -0
  363. /package/src/{memory → plugins/defaults/memory}/context-search/sources/workspace.ts +0 -0
  364. /package/src/{memory → plugins/defaults/memory}/graph/decay.test.ts +0 -0
  365. /package/src/{memory → plugins/defaults/memory}/graph/extraction.test.ts +0 -0
  366. /package/src/{memory → plugins/defaults/memory}/graph/injection.test.ts +0 -0
  367. /package/src/{memory → plugins/defaults/memory}/graph/scoring.test.ts +0 -0
  368. /package/src/{memory → plugins/defaults/memory}/graph/scoring.ts +0 -0
  369. /package/src/{memory → plugins/defaults/memory}/graph/serendipity.ts +0 -0
  370. /package/src/{memory → plugins/defaults/memory}/graph/triggers.test.ts +0 -0
  371. /package/src/{memory → plugins/defaults/memory}/graph/triggers.ts +0 -0
  372. /package/src/{memory → plugins/defaults/memory}/graph/types.ts +0 -0
  373. /package/src/{memory → plugins/defaults/memory}/memory-marker.ts +0 -0
  374. /package/src/{memory → plugins/defaults/memory}/memory-retrospective-constants.ts +0 -0
  375. /package/src/{memory → plugins/defaults/memory}/prompt-override.ts +0 -0
  376. /package/src/{memory → plugins/defaults/memory}/retrieval-budget.ts +0 -0
  377. /package/src/{memory → plugins/defaults/memory}/v2/__tests__/__snapshots__/prompts-router.test.ts.snap +0 -0
  378. /package/src/{memory → plugins/defaults/memory}/v2/__tests__/concept-page-frontmatter-schema.test.ts +0 -0
  379. /package/src/{memory → plugins/defaults/memory}/v2/__tests__/consolidation-prompt-flag-gating-guard.test.ts +0 -0
  380. /package/src/{memory → plugins/defaults/memory}/v2/__tests__/edge-index.test.ts +0 -0
  381. /package/src/{memory → plugins/defaults/memory}/v2/__tests__/harness-metrics.test.ts +0 -0
  382. /package/src/{memory → plugins/defaults/memory}/v2/__tests__/injected-block-slugs.test.ts +0 -0
  383. /package/src/{memory → plugins/defaults/memory}/v2/__tests__/page-store.test.ts +0 -0
  384. /package/src/{memory → plugins/defaults/memory}/v2/__tests__/prompts-router.test.ts +0 -0
  385. /package/src/{memory → plugins/defaults/memory}/v2/cli-command-content.ts +0 -0
  386. /package/src/{memory → plugins/defaults/memory}/v2/constants.ts +0 -0
  387. /package/src/{memory → plugins/defaults/memory}/v2/edge-index.ts +0 -0
  388. /package/src/{memory → plugins/defaults/memory}/v2/harness/metrics.ts +0 -0
  389. /package/src/{memory → plugins/defaults/memory}/v2/harness/runner.ts +0 -0
  390. /package/src/{memory → plugins/defaults/memory}/v2/harness/trace.ts +0 -0
  391. /package/src/{memory → plugins/defaults/memory}/v2/injected-block-slugs.ts +0 -0
  392. /package/src/{memory → plugins/defaults/memory}/v2/now-text.ts +0 -0
  393. /package/src/{memory → plugins/defaults/memory}/v2/prompts/sweep.ts +0 -0
  394. /package/src/{memory → plugins/defaults/memory}/v2/types.ts +0 -0
  395. /package/src/{memory → plugins/defaults/memory}/v3-eval/__tests__/eval-packets.test.ts +0 -0
  396. /package/src/{memory → plugins/defaults/memory}/v3-eval/__tests__/eval-tally.test.ts +0 -0
  397. /package/src/{memory → plugins/defaults/memory}/v3-eval/eval-tally.ts +0 -0
  398. /package/src/{memory → plugins/defaults/memory}/validation.ts +0 -0
@@ -54,9 +54,10 @@ const ALLOWED_PREFIXES = {
54
54
  "../../../util/platform",
55
55
  // Memory retrospective — the retrospective CLI runs the fork-based
56
56
  // retrospective in-process (no daemon, no IPC), so it imports the
57
- // job handler directly. Depth-2 for commands/memory/ nesting.
58
- "../../memory/memory-retrospective-job",
59
- "../../../memory/memory-retrospective-job",
57
+ // job handler directly from the default-memory plugin. Depth-2 for
58
+ // commands/memory/ nesting.
59
+ "../../plugins/defaults/memory/memory-retrospective-job",
60
+ "../../../plugins/defaults/memory/memory-retrospective-job",
60
61
  // Standalone tool execution — `tools run` executes a single tool
61
62
  // in-process from the filesystem (no daemon, no IPC), so it imports the
62
63
  // standalone runner directly. Depth-2 for commands/ nesting.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/assistant",
3
- "version": "0.10.3-dev.202606300531.247eff8",
3
+ "version": "0.10.3-dev.202606300917.a9da5f8",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -16,7 +16,7 @@
16
16
  * cd assistant && bun run generate:openapi -- --check # CI: fail if stale
17
17
  */
18
18
 
19
- import { readFileSync } from "node:fs";
19
+ import { existsSync, readFileSync } from "node:fs";
20
20
  import { readdir, readFile, writeFile } from "node:fs/promises";
21
21
  import { join, resolve } from "node:path";
22
22
 
@@ -32,6 +32,7 @@ import { createDocument } from "zod-openapi";
32
32
 
33
33
  const ROOT = resolve(import.meta.dir, "..");
34
34
  const ROUTES_DIR = join(ROOT, "src/runtime/routes");
35
+ const PLUGIN_DEFAULTS_DIR = join(ROOT, "src/plugins/defaults");
35
36
  const OUTPUT_PATH = join(ROOT, "openapi.yaml");
36
37
  const PKG_PATH = join(ROOT, "package.json");
37
38
 
@@ -147,68 +148,89 @@ function resolveSchemaForDocument(schemaSource: unknown): ContentSchema {
147
148
  // ---------------------------------------------------------------------------
148
149
 
149
150
  /**
150
- * Dynamically import every route module under `src/runtime/routes/`
151
- * and collect all exported `ROUTES` arrays.
152
- *
153
- * Each route module is expected to export a `ROUTES: RouteDefinition[]`
154
- * constant. The function automatically picks up new route modules
155
- * without manual updates.
151
+ * Directories holding `RouteDefinition` modules: the host `runtime/routes`
152
+ * tree plus every default plugin's `routes/` subdirectory. A default plugin
153
+ * that owns model-facing HTTP/IPC routes defines them under
154
+ * `plugins/defaults/<plugin>/routes/` and the host route aggregator registers
155
+ * them at runtime; the generator scans those dirs too so the spec stays
156
+ * complete no matter which package a route lives in. Sorted for reproducible
157
+ * output (see {@link collectRoutesFromModules}).
158
+ */
159
+ async function routeModuleDirs(): Promise<string[]> {
160
+ const dirs = [ROUTES_DIR];
161
+ for (const entry of await readdir(PLUGIN_DEFAULTS_DIR, {
162
+ withFileTypes: true,
163
+ })) {
164
+ if (!entry.isDirectory()) continue;
165
+ const routesDir = join(PLUGIN_DEFAULTS_DIR, entry.name, "routes");
166
+ if (existsSync(routesDir)) dirs.push(routesDir);
167
+ }
168
+ return dirs.sort();
169
+ }
170
+
171
+ /**
172
+ * Dynamically import every route module under each {@link routeModuleDirs}
173
+ * entry and collect all exported `ROUTES` / `*_ROUTES` arrays. Each route
174
+ * module exports a `RouteDefinition[]`; new modules are picked up without
175
+ * manual updates.
156
176
  */
157
177
  async function collectRoutesFromModules(): Promise<RouteEntry[]> {
158
178
  const routes: RouteEntry[] = [];
159
179
 
160
- // Skip the `index.ts` barrel: it re-exports every other route module's
161
- // ROUTES into a single combined array, so importing it would double-count
162
- // every entry. The duplicate `method:endpoint` keys are deduped later by
163
- // first-seen, but the surviving entry's `sourceModule` (used to derive
164
- // OpenAPI `tags`) depends on `readdir` order which is filesystem
165
- // dependent and diverges between local sandbox and the CI runner, making
166
- // the generator non-reproducible. Sort the file list as well so directory
167
- // entry order can never affect the output.
168
- const files = (await readdir(ROUTES_DIR, { recursive: true }))
169
- .filter(
170
- (f) =>
171
- typeof f === "string" &&
172
- f.endsWith(".ts") &&
173
- !f.endsWith(".test.ts") &&
174
- !f.endsWith(".benchmark.test.ts") &&
175
- !f.includes("node_modules") &&
176
- f !== "index.ts" &&
177
- !f.endsWith("/index.ts"),
178
- )
179
- .sort();
180
-
181
- for (const file of files) {
182
- const filePath = join(ROUTES_DIR, file);
183
- let mod: Record<string, unknown>;
184
- try {
185
- mod = (await import(filePath)) as Record<string, unknown>;
186
- } catch (err) {
187
- console.warn(
188
- `Warning: could not import ${file}: ${err instanceof Error ? err.message : err}`,
189
- );
190
- continue;
191
- }
192
-
193
- // Collect every export whose name is `ROUTES` or ends in `_ROUTES`.
194
- // A handful of route files (e.g. `channel-route-definitions.ts`,
195
- // `contact-prompt-routes.ts`) export under domain-prefixed names like
196
- // `CHANNEL_ROUTES` and `CONTACT_PROMPT_ROUTES` rather than the
197
- // canonical `ROUTES`. Without this fan-out the only way those routes
198
- // reached the spec was via the `index.ts` barrel — which is excluded
199
- // above for reproducibility.
200
- const exportNames = Object.keys(mod)
201
- .filter((k) => k === "ROUTES" || k.endsWith("_ROUTES"))
180
+ for (const dir of await routeModuleDirs()) {
181
+ // Skip the `index.ts` barrel: it re-exports every other route module's
182
+ // ROUTES into a single combined array, so importing it would double-count
183
+ // every entry. The duplicate `method:endpoint` keys are deduped later by
184
+ // first-seen, but the surviving entry's `sourceModule` (used to derive
185
+ // OpenAPI `tags`) depends on `readdir` order which is filesystem
186
+ // dependent and diverges between local sandbox and the CI runner, making
187
+ // the generator non-reproducible. Sort the file list as well so directory
188
+ // entry order can never affect the output.
189
+ const files = (await readdir(dir, { recursive: true }))
190
+ .filter(
191
+ (f) =>
192
+ typeof f === "string" &&
193
+ f.endsWith(".ts") &&
194
+ !f.endsWith(".test.ts") &&
195
+ !f.endsWith(".benchmark.test.ts") &&
196
+ !f.includes("node_modules") &&
197
+ f !== "index.ts" &&
198
+ !f.endsWith("/index.ts"),
199
+ )
202
200
  .sort();
203
- for (const name of exportNames) {
204
- const arr = mod[name];
205
- if (!Array.isArray(arr)) continue;
206
- for (const raw of arr) {
207
- const result = RouteEntrySchema.safeParse({
208
- ...(typeof raw === "object" && raw !== null ? raw : {}),
209
- sourceModule: file,
210
- });
211
- if (result.success) routes.push(result.data);
201
+
202
+ for (const file of files) {
203
+ const filePath = join(dir, file);
204
+ let mod: Record<string, unknown>;
205
+ try {
206
+ mod = (await import(filePath)) as Record<string, unknown>;
207
+ } catch (err) {
208
+ console.warn(
209
+ `Warning: could not import ${file}: ${err instanceof Error ? err.message : err}`,
210
+ );
211
+ continue;
212
+ }
213
+
214
+ // Collect every export whose name is `ROUTES` or ends in `_ROUTES`.
215
+ // A handful of route files (e.g. `channel-route-definitions.ts`,
216
+ // `contact-prompt-routes.ts`) export under domain-prefixed names like
217
+ // `CHANNEL_ROUTES` and `CONTACT_PROMPT_ROUTES` rather than the
218
+ // canonical `ROUTES`. Without this fan-out the only way those routes
219
+ // reached the spec was via the `index.ts` barrel — which is excluded
220
+ // above for reproducibility.
221
+ const exportNames = Object.keys(mod)
222
+ .filter((k) => k === "ROUTES" || k.endsWith("_ROUTES"))
223
+ .sort();
224
+ for (const name of exportNames) {
225
+ const arr = mod[name];
226
+ if (!Array.isArray(arr)) continue;
227
+ for (const raw of arr) {
228
+ const result = RouteEntrySchema.safeParse({
229
+ ...(typeof raw === "object" && raw !== null ? raw : {}),
230
+ sourceModule: file,
231
+ });
232
+ if (result.success) routes.push(result.data);
233
+ }
212
234
  }
213
235
  }
214
236
  }
@@ -29,7 +29,7 @@ mock.module("../util/logger.js", () => ({
29
29
 
30
30
  const { applyBootstrapTemplate } = await import("../prompts/system-prompt.js");
31
31
  const { isActivationSession } =
32
- await import("../memory/activation-session-store.js");
32
+ await import("../plugins/defaults/memory/activation-session-store.js");
33
33
  const { ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE } =
34
34
  await import("../telemetry/activation-funnel.js");
35
35
  const { getDb } = await import("../persistence/db-connection.js");
@@ -2087,6 +2087,54 @@ describe("AnthropicProvider — Cache-Control Characterization", () => {
2087
2087
  expect(emitted).toEqual([]);
2088
2088
  });
2089
2089
 
2090
+ test("suppresses a leading-space-corrupted sentinel echo (proxy dropped the guard byte)", async () => {
2091
+ // OpenRouter's Anthropic-compat path returns the `\x00` guard as a leading
2092
+ // space; the normalized prefix check must still hold and drop it.
2093
+ scriptedStream = [
2094
+ { kind: "blockStart" },
2095
+ { kind: "text", text: " __PLACEHOLDER__[empty assistant turn]" },
2096
+ { kind: "blockStop" },
2097
+ ];
2098
+ const emitted: string[] = [];
2099
+ await provider.sendMessage([userMsg("Hi")], {
2100
+ onEvent: (event) => {
2101
+ if (event.type === "text_delta") emitted.push(event.text);
2102
+ },
2103
+ });
2104
+ expect(emitted).toEqual([]);
2105
+ });
2106
+
2107
+ test("suppresses a leading-space-corrupted sentinel split across chunks", async () => {
2108
+ scriptedStream = [
2109
+ { kind: "blockStart" },
2110
+ { kind: "text", text: " __PLACE" },
2111
+ { kind: "text", text: "HOLDER__[empty assistant turn]" },
2112
+ { kind: "blockStop" },
2113
+ ];
2114
+ const emitted: string[] = [];
2115
+ await provider.sendMessage([userMsg("Hi")], {
2116
+ onEvent: (event) => {
2117
+ if (event.type === "text_delta") emitted.push(event.text);
2118
+ },
2119
+ });
2120
+ expect(emitted).toEqual([]);
2121
+ });
2122
+
2123
+ test("still streams real text that begins with whitespace", async () => {
2124
+ scriptedStream = [
2125
+ { kind: "blockStart" },
2126
+ { kind: "text", text: " hello there" },
2127
+ { kind: "blockStop" },
2128
+ ];
2129
+ const emitted: string[] = [];
2130
+ await provider.sendMessage([userMsg("Hi")], {
2131
+ onEvent: (event) => {
2132
+ if (event.type === "text_delta") emitted.push(event.text);
2133
+ },
2134
+ });
2135
+ expect(emitted.join("")).toBe(" hello there");
2136
+ });
2137
+
2090
2138
  test("flushes buffered prefix when the continuation diverges from all sentinels", async () => {
2091
2139
  // "__PLACEHOLDER__" is a prefix of the sentinels, so it stays buffered.
2092
2140
  // Once the next chunk diverges (bracket instead of the expected opening),
@@ -130,7 +130,6 @@ mock.module("../runtime/services/analyze-conversation.js", () => ({
130
130
 
131
131
  // ── Real imports ──────────────────────────────────────────────────
132
132
 
133
- import { indexMessageNow } from "../memory/indexer.js";
134
133
  import { createConversation } from "../persistence/conversation-crud.js";
135
134
  import { getDb, getMemoryDb } from "../persistence/db-connection.js";
136
135
  import { initializeDb } from "../persistence/db-init.js";
@@ -140,6 +139,7 @@ import {
140
139
  memoryJobs,
141
140
  messages,
142
141
  } from "../persistence/schema/index.js";
142
+ import { indexMessageNow } from "../plugins/defaults/memory/indexer.js";
143
143
  import { conversationAnalyzeJob } from "../runtime/services/conversation-analyze-job.js";
144
144
  import { setOverridesForTesting } from "./feature-flag-test-helpers.js";
145
145
 
@@ -41,7 +41,7 @@ mock.module("../ipc/cli-client.js", () => ({
41
41
  }));
42
42
 
43
43
  let seedCallCount = 0;
44
- mock.module("../memory/v2/skill-store.js", () => ({
44
+ mock.module("../plugins/defaults/memory/v2/skill-store.js", () => ({
45
45
  seedV2SkillEntries: async () => {
46
46
  seedCallCount += 1;
47
47
  },
@@ -54,7 +54,7 @@ mock.module("../memory/v2/skill-store.js", () => ({
54
54
  const { registerMemoryV2Command } =
55
55
  await import("../cli/commands/memory/memory-v2.js");
56
56
  const { ROUTES: memoryV2Routes, MEMORY_V2_DISABLED_CODE } =
57
- await import("../runtime/routes/memory-v2-routes.js");
57
+ await import("../plugins/defaults/memory/routes/memory-v2-routes.js");
58
58
  const { RouteError } = await import("../runtime/routes/errors.js");
59
59
 
60
60
  // ---------------------------------------------------------------------------
@@ -9,8 +9,8 @@ import {
9
9
  truncateRecallEvidenceToBudget,
10
10
  validateFinishRecallPayload,
11
11
  validateRecallCitationIds,
12
- } from "../memory/context-search/agent-protocol.js";
13
- import type { RecallEvidence } from "../memory/context-search/types.js";
12
+ } from "../plugins/defaults/memory/context-search/agent-protocol.js";
13
+ import type { RecallEvidence } from "../plugins/defaults/memory/context-search/types.js";
14
14
 
15
15
  function makeEvidence(
16
16
  id: string,
@@ -22,13 +22,13 @@ mock.module("../providers/provider-send-message.js", () => ({
22
22
  },
23
23
  }));
24
24
 
25
- import { runAgenticRecall } from "../memory/context-search/agent-runner.js";
25
+ import { runAgenticRecall } from "../plugins/defaults/memory/context-search/agent-runner.js";
26
26
  import type {
27
27
  RecallEvidence,
28
28
  RecallSearchContext,
29
29
  RecallSource,
30
30
  RecallSourceAdapter,
31
- } from "../memory/context-search/types.js";
31
+ } from "../plugins/defaults/memory/context-search/types.js";
32
32
 
33
33
  interface SearchCall {
34
34
  source: RecallSource;
@@ -1,11 +1,11 @@
1
1
  import { beforeEach, describe, expect, test } from "bun:test";
2
2
 
3
- import { searchConversationSource } from "../memory/context-search/sources/conversations.js";
4
- import type { RecallSearchContext } from "../memory/context-search/types.js";
5
3
  import { writeSlackMetadata } from "../messaging/providers/slack/message-metadata.js";
6
4
  import { getDb } from "../persistence/db-connection.js";
7
5
  import { initializeDb } from "../persistence/db-init.js";
8
6
  import { rawRun } from "../persistence/raw-query.js";
7
+ import { searchConversationSource } from "../plugins/defaults/memory/context-search/sources/conversations.js";
8
+ import type { RecallSearchContext } from "../plugins/defaults/memory/context-search/types.js";
9
9
  await initializeDb();
10
10
 
11
11
  let seedId = 0;
@@ -1,14 +1,14 @@
1
1
  import { describe, expect, test } from "bun:test";
2
2
 
3
3
  import type { AssistantConfig } from "../config/schema.js";
4
- import { formatDeterministicRecallAnswer } from "../memory/context-search/format.js";
5
- import { runDeterministicRecallSearch } from "../memory/context-search/search.js";
4
+ import { formatDeterministicRecallAnswer } from "../plugins/defaults/memory/context-search/format.js";
5
+ import { runDeterministicRecallSearch } from "../plugins/defaults/memory/context-search/search.js";
6
6
  import type {
7
7
  RecallEvidence,
8
8
  RecallSearchContext,
9
9
  RecallSource,
10
10
  RecallSourceAdapter,
11
- } from "../memory/context-search/types.js";
11
+ } from "../plugins/defaults/memory/context-search/types.js";
12
12
 
13
13
  function makeContext(): RecallSearchContext {
14
14
  return {
@@ -5,18 +5,19 @@ import type {
5
5
  RecallEvidence,
6
6
  RecallSearchContext,
7
7
  RecallSearchResult,
8
- } from "../memory/context-search/types.js";
9
- import type { MemoryNode } from "../memory/graph/types.js";
8
+ } from "../plugins/defaults/memory/context-search/types.js";
9
+ import type { MemoryNode } from "../plugins/defaults/memory/graph/types.js";
10
10
 
11
11
  const loggerModule = import.meta.resolve("../util/logger.js");
12
12
  const embedModule = import.meta.resolve("../persistence/embeddings/embed.js");
13
13
  const embeddingBackendModule = import.meta
14
14
  .resolve("../persistence/embeddings/embedding-backend.js");
15
15
  const graphSearchModule = import.meta
16
- .resolve("../memory/graph/graph-search.js");
17
- const graphStoreModule = import.meta.resolve("../memory/graph/store.js");
16
+ .resolve("../plugins/defaults/memory/graph/graph-search.js");
17
+ const graphStoreModule = import.meta
18
+ .resolve("../plugins/defaults/memory/graph/store.js");
18
19
  const memoryV2SourceModule = import.meta
19
- .resolve("../memory/context-search/sources/memory-v2.js");
20
+ .resolve("../plugins/defaults/memory/context-search/sources/memory-v2.js");
20
21
 
21
22
  const warnCalls: unknown[][] = [];
22
23
  mock.module(loggerModule, () => ({
@@ -118,7 +119,7 @@ mock.module(memoryV2SourceModule, () => ({
118
119
  }));
119
120
 
120
121
  const { searchMemorySource } =
121
- await import("../memory/context-search/sources/memory.js");
122
+ await import("../plugins/defaults/memory/context-search/sources/memory.js");
122
123
 
123
124
  describe("searchMemorySource", () => {
124
125
  beforeEach(() => {
@@ -25,9 +25,9 @@ import { dirname, join } from "node:path";
25
25
  import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
26
26
 
27
27
  import type { AssistantConfig } from "../config/schema.js";
28
- import type { RecallSearchContext } from "../memory/context-search/types.js";
29
- import type { EdgeIndex } from "../memory/v2/edge-index.js";
30
- import type { ConceptPage } from "../memory/v2/types.js";
28
+ import type { RecallSearchContext } from "../plugins/defaults/memory/context-search/types.js";
29
+ import type { EdgeIndex } from "../plugins/defaults/memory/v2/edge-index.js";
30
+ import type { ConceptPage } from "../plugins/defaults/memory/v2/types.js";
31
31
  import { makeMockLogger } from "./helpers/mock-logger.js";
32
32
 
33
33
  mock.module("../util/logger.js", () => ({
@@ -54,7 +54,7 @@ let qdrantHits: QdrantHit[] = [];
54
54
  let qdrantThrows: Error | null = null;
55
55
  const qdrantCalls: Array<{ limit: number }> = [];
56
56
 
57
- mock.module("../memory/v2/qdrant.js", () => ({
57
+ mock.module("../plugins/defaults/memory/v2/qdrant.js", () => ({
58
58
  hybridQueryConceptPages: async (
59
59
  _dense: number[],
60
60
  _sparse: { indices: number[]; values: number[] },
@@ -71,7 +71,7 @@ let edgeIndex: EdgeIndex = {
71
71
  incoming: new Map<string, Set<string>>(),
72
72
  };
73
73
 
74
- mock.module("../memory/v2/edge-index.js", () => ({
74
+ mock.module("../plugins/defaults/memory/v2/edge-index.js", () => ({
75
75
  getEdgeIndex: async (): Promise<EdgeIndex> => edgeIndex,
76
76
  invalidateEdgeIndex: () => {},
77
77
  getReachable: () => new Set<string>(),
@@ -81,7 +81,7 @@ mock.module("../memory/v2/edge-index.js", () => ({
81
81
 
82
82
  const pageStore = new Map<string, ConceptPage>();
83
83
 
84
- mock.module("../memory/v2/page-store.js", () => ({
84
+ mock.module("../plugins/defaults/memory/v2/page-store.js", () => ({
85
85
  getConceptsDir: (workspaceDir: string): string =>
86
86
  join(workspaceDir, "memory", "concepts"),
87
87
  listPages: async (): Promise<string[]> => [...pageStore.keys()],
@@ -101,7 +101,7 @@ mock.module("../memory/v2/page-store.js", () => ({
101
101
  }));
102
102
 
103
103
  const { searchMemoryV2Source } =
104
- await import("../memory/context-search/sources/memory-v2.js");
104
+ await import("../plugins/defaults/memory/context-search/sources/memory-v2.js");
105
105
 
106
106
  const testDirs: string[] = [];
107
107
 
@@ -9,12 +9,12 @@ import {
9
9
  RECALL_EVIDENCE_TEXT_CAP_PER_SOURCE,
10
10
  RECALL_SOURCE_ROUNDS_BY_DEPTH,
11
11
  RECALL_TOTAL_EVIDENCE_TEXT_CAP,
12
- } from "../memory/context-search/limits.js";
12
+ } from "../plugins/defaults/memory/context-search/limits.js";
13
13
  import type {
14
14
  RecallInput,
15
15
  RecallSource,
16
16
  RecallSourceAdapter,
17
- } from "../memory/context-search/types.js";
17
+ } from "../plugins/defaults/memory/context-search/types.js";
18
18
 
19
19
  describe("normalizeRecallInput", () => {
20
20
  test("defaults omitted sources, max results, and depth", () => {
@@ -16,8 +16,8 @@ import {
16
16
  searchWorkspaceSource,
17
17
  WORKSPACE_SOURCE_MAX_FILE_SIZE_BYTES,
18
18
  WORKSPACE_SOURCE_MAX_SCANNED_FILES,
19
- } from "../memory/context-search/sources/workspace.js";
20
- import type { RecallSearchContext } from "../memory/context-search/types.js";
19
+ } from "../plugins/defaults/memory/context-search/sources/workspace.js";
20
+ import type { RecallSearchContext } from "../plugins/defaults/memory/context-search/types.js";
21
21
 
22
22
  const testDirs: string[] = [];
23
23
 
@@ -329,7 +329,7 @@ const indexMessageNowMock = mock(async () => ({
329
329
  }));
330
330
  const projectAssistantMessageMock = mock(() => false);
331
331
  const publishSyncInvalidationMock = mock(async () => {});
332
- mock.module("../memory/indexer.js", () => ({
332
+ mock.module("../plugins/defaults/memory/indexer.js", () => ({
333
333
  indexMessageNow: indexMessageNowMock,
334
334
  }));
335
335
  mock.module("../persistence/conversation-attention-store.js", () => ({
@@ -21,16 +21,6 @@ mock.module("../config/loader.js", () => ({
21
21
  }),
22
22
  }));
23
23
 
24
- import {
25
- loadGraphMemoryState,
26
- saveGraphMemoryState,
27
- } from "../memory/graph/graph-memory-state-store.js";
28
- import {
29
- bumpRetrospectiveLastRunAt,
30
- getRetrospectiveState,
31
- upsertRetrospectiveState,
32
- } from "../memory/memory-retrospective-state.js";
33
- import { hydrate as hydrateActivationState } from "../memory/v2/activation-store.js";
34
24
  import {
35
25
  getAttachmentsForMessage,
36
26
  linkAttachmentToMessage,
@@ -65,6 +55,16 @@ import {
65
55
  memoryRetrospectiveState,
66
56
  toolInvocations,
67
57
  } from "../persistence/schema/index.js";
58
+ import {
59
+ loadGraphMemoryState,
60
+ saveGraphMemoryState,
61
+ } from "../plugins/defaults/memory/graph/graph-memory-state-store.js";
62
+ import {
63
+ bumpRetrospectiveLastRunAt,
64
+ getRetrospectiveState,
65
+ upsertRetrospectiveState,
66
+ } from "../plugins/defaults/memory/memory-retrospective-state.js";
67
+ import { hydrate as hydrateActivationState } from "../plugins/defaults/memory/v2/activation-store.js";
68
68
  import {
69
69
  getInjected as getV3Injected,
70
70
  markPruned as markV3Pruned,
@@ -19,10 +19,6 @@ mock.module("../config/loader.js", () => ({
19
19
  }),
20
20
  }));
21
21
 
22
- import {
23
- loadGraphMemoryState,
24
- saveGraphMemoryState,
25
- } from "../memory/graph/graph-memory-state-store.js";
26
22
  import {
27
23
  getAttachmentsForMessage,
28
24
  linkAttachmentToMessage,
@@ -54,6 +50,10 @@ import {
54
50
  memoryRetrospectiveState,
55
51
  toolInvocations,
56
52
  } from "../persistence/schema/index.js";
53
+ import {
54
+ loadGraphMemoryState,
55
+ saveGraphMemoryState,
56
+ } from "../plugins/defaults/memory/graph/graph-memory-state-store.js";
57
57
 
58
58
  await initializeDb();
59
59
 
@@ -75,7 +75,7 @@ let pkbSearchResults: Array<{
75
75
  hybridScore?: number;
76
76
  }> = [];
77
77
  let pkbSearchThrows: Error | null = null;
78
- mock.module("../memory/pkb/pkb-search.js", () => ({
78
+ mock.module("../plugins/defaults/memory/pkb/pkb-search.js", () => ({
79
79
  searchPkbFiles: async () => {
80
80
  if (pkbSearchThrows) throw pkbSearchThrows;
81
81
  return pkbSearchResults;
@@ -132,8 +132,6 @@ import {
132
132
  import type { SurfaceData, SurfaceType } from "../daemon/message-protocol.js";
133
133
  import { buildPkbReminder } from "../daemon/pkb-reminder-builder.js";
134
134
  import type { TrustContext } from "../daemon/trust-context.js";
135
- import { ConversationGraphMemory } from "../memory/graph/conversation-graph-memory.js";
136
- import { getPkbRoot } from "../memory/pkb/types.js";
137
135
  import {
138
136
  type SlackMessageMetadata,
139
137
  writeSlackMetadata,
@@ -144,7 +142,9 @@ import { getDb } from "../persistence/db-connection.js";
144
142
  import { initializeDb } from "../persistence/db-init.js";
145
143
  import { conversations, messages } from "../persistence/schema/index.js";
146
144
  import { registerDefaultPluginInjectors } from "../plugins/defaults/index.js";
145
+ import { ConversationGraphMemory } from "../plugins/defaults/memory/graph/conversation-graph-memory.js";
147
146
  import postCompact from "../plugins/defaults/memory/hooks/post-compact.js";
147
+ import { getPkbRoot } from "../plugins/defaults/memory/pkb/types.js";
148
148
  import {
149
149
  buildUnifiedTurnContextBlock,
150
150
  type UnifiedTurnContextOptions,
@@ -35,10 +35,6 @@ const { createSurfaceMutex, handleSurfaceAction, surfaceProxyResolver } =
35
35
 
36
36
  import type { SurfaceConversationContext } from "../daemon/conversation-surfaces.js";
37
37
  import type { SurfaceType, UiSurfaceShow } from "../daemon/message-protocol.js";
38
- import {
39
- isActivationSession,
40
- markActivationSession,
41
- } from "../memory/activation-session-store.js";
42
38
  import { queryUnreportedOnboardingEvents } from "../onboarding/onboarding-events-store.js";
43
39
  import { getDb } from "../persistence/db-connection.js";
44
40
  import { initializeDb } from "../persistence/db-init.js";
@@ -46,6 +42,10 @@ import {
46
42
  activationSessions,
47
43
  onboardingEvents,
48
44
  } from "../persistence/schema/index.js";
45
+ import {
46
+ isActivationSession,
47
+ markActivationSession,
48
+ } from "../plugins/defaults/memory/activation-session-store.js";
49
49
 
50
50
  await initializeDb();
51
51
 
@@ -135,7 +135,7 @@ mock.module("../memory/query-builder.js", () => ({
135
135
  buildMemoryQuery: () => "",
136
136
  }));
137
137
 
138
- mock.module("../memory/retrieval-budget.js", () => ({
138
+ mock.module("../plugins/defaults/memory/retrieval-budget.js", () => ({
139
139
  computeRecallBudget: () => 0,
140
140
  }));
141
141
 
@@ -175,7 +175,7 @@ mock.module("../memory/retriever.js", () => ({
175
175
  mock.module("../memory/query-builder.js", () => ({
176
176
  buildMemoryQuery: () => "",
177
177
  }));
178
- mock.module("../memory/retrieval-budget.js", () => ({
178
+ mock.module("../plugins/defaults/memory/retrieval-budget.js", () => ({
179
179
  computeRecallBudget: () => 0,
180
180
  }));
181
181
  mock.module("../plugins/defaults/compaction/window-manager.js", () => ({
@@ -172,7 +172,7 @@ mock.module("../memory/retriever.js", () => ({
172
172
  mock.module("../memory/query-builder.js", () => ({
173
173
  buildMemoryQuery: () => "",
174
174
  }));
175
- mock.module("../memory/retrieval-budget.js", () => ({
175
+ mock.module("../plugins/defaults/memory/retrieval-budget.js", () => ({
176
176
  computeRecallBudget: () => 0,
177
177
  }));
178
178
  mock.module("../plugins/defaults/compaction/window-manager.js", () => ({
@@ -24,7 +24,7 @@ mock.module("../config/loader.js", () => ({
24
24
  }),
25
25
  }));
26
26
 
27
- mock.module("../memory/indexer.js", () => ({
27
+ mock.module("../plugins/defaults/memory/indexer.js", () => ({
28
28
  indexMessageNow: async () => {},
29
29
  }));
30
30