@fgv/ts-agent-memory 5.1.0-47 → 5.1.0-49

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 (376) hide show
  1. package/dist/packlets/ingest/orchestrator.js +11 -1
  2. package/dist/packlets/ingest/orchestrator.js.map +1 -1
  3. package/dist/packlets/observe/memoryObservationStore.js +6 -0
  4. package/dist/packlets/observe/memoryObservationStore.js.map +1 -1
  5. package/dist/packlets/observe/observer.js.map +1 -1
  6. package/dist/packlets/retrieve/linkTraversalRetriever.js +1 -1
  7. package/dist/packlets/retrieve/linkTraversalRetriever.js.map +1 -1
  8. package/dist/packlets/retrieve/recencyRetriever.js +1 -1
  9. package/dist/packlets/retrieve/recencyRetriever.js.map +1 -1
  10. package/dist/packlets/retrieve/retriever.js +11 -5
  11. package/dist/packlets/retrieve/retriever.js.map +1 -1
  12. package/dist/packlets/retrieve/structuredFilterRetriever.js +27 -5
  13. package/dist/packlets/retrieve/structuredFilterRetriever.js.map +1 -1
  14. package/dist/packlets/retrieve/tagRetriever.js +1 -1
  15. package/dist/packlets/retrieve/tagRetriever.js.map +1 -1
  16. package/dist/packlets/retrieve/temporalRetrievers.js +1 -1
  17. package/dist/packlets/retrieve/temporalRetrievers.js.map +1 -1
  18. package/dist/packlets/store/fileTreeMemoryStore.js +152 -132
  19. package/dist/packlets/store/fileTreeMemoryStore.js.map +1 -1
  20. package/dist/packlets/store/vectorMaintenance.js +251 -0
  21. package/dist/packlets/store/vectorMaintenance.js.map +1 -0
  22. package/dist/packlets/types/envelope.js.map +1 -1
  23. package/dist/packlets/vector/inMemoryCosineIndex.js +81 -18
  24. package/dist/packlets/vector/inMemoryCosineIndex.js.map +1 -1
  25. package/dist/packlets/vector/inMemoryFragmentCosineIndex.js +7 -0
  26. package/dist/packlets/vector/inMemoryFragmentCosineIndex.js.map +1 -1
  27. package/dist/packlets/vector/vectorIndex.js.map +1 -1
  28. package/dist/ts-agent-memory.d.ts +431 -79
  29. package/lib/packlets/ingest/orchestrator.d.ts.map +1 -1
  30. package/lib/packlets/ingest/orchestrator.js +11 -1
  31. package/lib/packlets/ingest/orchestrator.js.map +1 -1
  32. package/lib/packlets/observe/memoryObservationStore.d.ts.map +1 -1
  33. package/lib/packlets/observe/memoryObservationStore.js +6 -0
  34. package/lib/packlets/observe/memoryObservationStore.js.map +1 -1
  35. package/lib/packlets/observe/observer.d.ts +61 -0
  36. package/lib/packlets/observe/observer.d.ts.map +1 -1
  37. package/lib/packlets/observe/observer.js.map +1 -1
  38. package/lib/packlets/retrieve/linkTraversalRetriever.d.ts +1 -1
  39. package/lib/packlets/retrieve/linkTraversalRetriever.js +1 -1
  40. package/lib/packlets/retrieve/linkTraversalRetriever.js.map +1 -1
  41. package/lib/packlets/retrieve/recencyRetriever.d.ts +1 -1
  42. package/lib/packlets/retrieve/recencyRetriever.js +1 -1
  43. package/lib/packlets/retrieve/recencyRetriever.js.map +1 -1
  44. package/lib/packlets/retrieve/retriever.d.ts +26 -7
  45. package/lib/packlets/retrieve/retriever.d.ts.map +1 -1
  46. package/lib/packlets/retrieve/retriever.js +11 -5
  47. package/lib/packlets/retrieve/retriever.js.map +1 -1
  48. package/lib/packlets/retrieve/structuredFilterRetriever.d.ts +26 -4
  49. package/lib/packlets/retrieve/structuredFilterRetriever.d.ts.map +1 -1
  50. package/lib/packlets/retrieve/structuredFilterRetriever.js +27 -5
  51. package/lib/packlets/retrieve/structuredFilterRetriever.js.map +1 -1
  52. package/lib/packlets/retrieve/tagRetriever.d.ts +1 -1
  53. package/lib/packlets/retrieve/tagRetriever.js +1 -1
  54. package/lib/packlets/retrieve/tagRetriever.js.map +1 -1
  55. package/lib/packlets/retrieve/temporalRetrievers.js +1 -1
  56. package/lib/packlets/retrieve/temporalRetrievers.js.map +1 -1
  57. package/lib/packlets/store/fileTreeMemoryStore.d.ts +135 -59
  58. package/lib/packlets/store/fileTreeMemoryStore.d.ts.map +1 -1
  59. package/lib/packlets/store/fileTreeMemoryStore.js +151 -131
  60. package/lib/packlets/store/fileTreeMemoryStore.js.map +1 -1
  61. package/lib/packlets/store/vectorMaintenance.d.ts +149 -0
  62. package/lib/packlets/store/vectorMaintenance.d.ts.map +1 -0
  63. package/lib/packlets/store/vectorMaintenance.js +255 -0
  64. package/lib/packlets/store/vectorMaintenance.js.map +1 -0
  65. package/lib/packlets/types/envelope.d.ts +11 -0
  66. package/lib/packlets/types/envelope.d.ts.map +1 -1
  67. package/lib/packlets/types/envelope.js.map +1 -1
  68. package/lib/packlets/vector/inMemoryCosineIndex.d.ts +30 -7
  69. package/lib/packlets/vector/inMemoryCosineIndex.d.ts.map +1 -1
  70. package/lib/packlets/vector/inMemoryCosineIndex.js +80 -17
  71. package/lib/packlets/vector/inMemoryCosineIndex.js.map +1 -1
  72. package/lib/packlets/vector/inMemoryFragmentCosineIndex.d.ts +7 -0
  73. package/lib/packlets/vector/inMemoryFragmentCosineIndex.d.ts.map +1 -1
  74. package/lib/packlets/vector/inMemoryFragmentCosineIndex.js +7 -0
  75. package/lib/packlets/vector/inMemoryFragmentCosineIndex.js.map +1 -1
  76. package/lib/packlets/vector/vectorIndex.d.ts +129 -1
  77. package/lib/packlets/vector/vectorIndex.d.ts.map +1 -1
  78. package/lib/packlets/vector/vectorIndex.js.map +1 -1
  79. package/package.json +17 -7
  80. package/.rush/temp/5667e36f1c0cc503a5c20a3ebff76e7b9a702d41.tar.log +0 -468
  81. package/.rush/temp/chunked-rush-logs/ts-agent-memory.build.chunks.jsonl +0 -9
  82. package/.rush/temp/operation/build/all.log +0 -9
  83. package/.rush/temp/operation/build/log-chunks.jsonl +0 -9
  84. package/.rush/temp/operation/build/state.json +0 -3
  85. package/.rush/temp/shrinkwrap-deps.json +0 -689
  86. package/config/api-extractor.json +0 -343
  87. package/config/jest.config.json +0 -14
  88. package/config/rig.json +0 -4
  89. package/dist/test/unit/converters/antagonistRoundTrip.test.js +0 -95
  90. package/dist/test/unit/converters/antagonistRoundTrip.test.js.map +0 -1
  91. package/dist/test/unit/converters/bodyConverterRegistry.test.js +0 -72
  92. package/dist/test/unit/converters/bodyConverterRegistry.test.js.map +0 -1
  93. package/dist/test/unit/converters/envelopeConverter.test.js +0 -313
  94. package/dist/test/unit/converters/envelopeConverter.test.js.map +0 -1
  95. package/dist/test/unit/index/memoryIndex.test.js +0 -214
  96. package/dist/test/unit/index/memoryIndex.test.js.map +0 -1
  97. package/dist/test/unit/ingest/antagonistCycleAndParity.test.js +0 -277
  98. package/dist/test/unit/ingest/antagonistCycleAndParity.test.js.map +0 -1
  99. package/dist/test/unit/ingest/cycleGuard.test.js +0 -81
  100. package/dist/test/unit/ingest/cycleGuard.test.js.map +0 -1
  101. package/dist/test/unit/ingest/dedupScope.test.js +0 -434
  102. package/dist/test/unit/ingest/dedupScope.test.js.map +0 -1
  103. package/dist/test/unit/ingest/orchestrator.test.js +0 -1058
  104. package/dist/test/unit/ingest/orchestrator.test.js.map +0 -1
  105. package/dist/test/unit/observe/memoryObservationStore.test.js +0 -118
  106. package/dist/test/unit/observe/memoryObservationStore.test.js.map +0 -1
  107. package/dist/test/unit/retrieve/fragmentSemanticRetriever.test.js +0 -116
  108. package/dist/test/unit/retrieve/fragmentSemanticRetriever.test.js.map +0 -1
  109. package/dist/test/unit/retrieve/linkTraversalRetriever.test.js +0 -257
  110. package/dist/test/unit/retrieve/linkTraversalRetriever.test.js.map +0 -1
  111. package/dist/test/unit/retrieve/retrievers.test.js +0 -768
  112. package/dist/test/unit/retrieve/retrievers.test.js.map +0 -1
  113. package/dist/test/unit/retrieve/temporalRetrievers.test.js +0 -182
  114. package/dist/test/unit/retrieve/temporalRetrievers.test.js.map +0 -1
  115. package/dist/test/unit/store/antagonistTemporalBoundary.test.js +0 -120
  116. package/dist/test/unit/store/antagonistTemporalBoundary.test.js.map +0 -1
  117. package/dist/test/unit/store/embedOnWrite.test.js +0 -317
  118. package/dist/test/unit/store/embedOnWrite.test.js.map +0 -1
  119. package/dist/test/unit/store/fileTreeMemoryStore.test.js +0 -778
  120. package/dist/test/unit/store/fileTreeMemoryStore.test.js.map +0 -1
  121. package/dist/test/unit/store/fragmentEmbedOnWrite.test.js +0 -255
  122. package/dist/test/unit/store/fragmentEmbedOnWrite.test.js.map +0 -1
  123. package/dist/test/unit/store/indexInjection.test.js +0 -432
  124. package/dist/test/unit/store/indexInjection.test.js.map +0 -1
  125. package/dist/test/unit/store/lenientOpen.test.js +0 -248
  126. package/dist/test/unit/store/lenientOpen.test.js.map +0 -1
  127. package/dist/test/unit/store/listScoped.test.js +0 -109
  128. package/dist/test/unit/store/listScoped.test.js.map +0 -1
  129. package/dist/test/unit/store/observations.test.js +0 -239
  130. package/dist/test/unit/store/observations.test.js.map +0 -1
  131. package/dist/test/unit/store/rankAxis.test.js +0 -254
  132. package/dist/test/unit/store/rankAxis.test.js.map +0 -1
  133. package/dist/test/unit/store/scopeEncoding.test.js +0 -24
  134. package/dist/test/unit/store/scopeEncoding.test.js.map +0 -1
  135. package/dist/test/unit/store/temporalStore.test.js +0 -398
  136. package/dist/test/unit/store/temporalStore.test.js.map +0 -1
  137. package/dist/test/unit/tools/memoryTools.test.js +0 -842
  138. package/dist/test/unit/tools/memoryTools.test.js.map +0 -1
  139. package/dist/test/unit/types/identityCodec.test.js +0 -187
  140. package/dist/test/unit/types/identityCodec.test.js.map +0 -1
  141. package/dist/test/unit/types/ids.test.js +0 -84
  142. package/dist/test/unit/types/ids.test.js.map +0 -1
  143. package/dist/test/unit/types/temporalCodec.test.js +0 -203
  144. package/dist/test/unit/types/temporalCodec.test.js.map +0 -1
  145. package/dist/test/unit/types/temporalPolicy.test.js +0 -83
  146. package/dist/test/unit/types/temporalPolicy.test.js.map +0 -1
  147. package/dist/test/unit/types/writePolicy.test.js +0 -331
  148. package/dist/test/unit/types/writePolicy.test.js.map +0 -1
  149. package/dist/test/unit/vector/fragmentConverters.test.js +0 -58
  150. package/dist/test/unit/vector/fragmentConverters.test.js.map +0 -1
  151. package/dist/test/unit/vector/inMemoryCosineIndex.test.js +0 -252
  152. package/dist/test/unit/vector/inMemoryCosineIndex.test.js.map +0 -1
  153. package/dist/test/unit/vector/inMemoryFragmentCosineIndex.test.js +0 -362
  154. package/dist/test/unit/vector/inMemoryFragmentCosineIndex.test.js.map +0 -1
  155. package/dist/test/unit/vector/vectorIndex.test.js +0 -51
  156. package/dist/test/unit/vector/vectorIndex.test.js.map +0 -1
  157. package/eslint.config.js +0 -15
  158. package/etc/ts-agent-memory.api.md +0 -940
  159. package/lib/test/unit/converters/antagonistRoundTrip.test.d.ts +0 -10
  160. package/lib/test/unit/converters/antagonistRoundTrip.test.d.ts.map +0 -1
  161. package/lib/test/unit/converters/antagonistRoundTrip.test.js +0 -97
  162. package/lib/test/unit/converters/antagonistRoundTrip.test.js.map +0 -1
  163. package/lib/test/unit/converters/bodyConverterRegistry.test.d.ts +0 -2
  164. package/lib/test/unit/converters/bodyConverterRegistry.test.d.ts.map +0 -1
  165. package/lib/test/unit/converters/bodyConverterRegistry.test.js +0 -74
  166. package/lib/test/unit/converters/bodyConverterRegistry.test.js.map +0 -1
  167. package/lib/test/unit/converters/envelopeConverter.test.d.ts +0 -2
  168. package/lib/test/unit/converters/envelopeConverter.test.d.ts.map +0 -1
  169. package/lib/test/unit/converters/envelopeConverter.test.js +0 -315
  170. package/lib/test/unit/converters/envelopeConverter.test.js.map +0 -1
  171. package/lib/test/unit/index/memoryIndex.test.d.ts +0 -2
  172. package/lib/test/unit/index/memoryIndex.test.d.ts.map +0 -1
  173. package/lib/test/unit/index/memoryIndex.test.js +0 -216
  174. package/lib/test/unit/index/memoryIndex.test.js.map +0 -1
  175. package/lib/test/unit/ingest/antagonistCycleAndParity.test.d.ts +0 -9
  176. package/lib/test/unit/ingest/antagonistCycleAndParity.test.d.ts.map +0 -1
  177. package/lib/test/unit/ingest/antagonistCycleAndParity.test.js +0 -279
  178. package/lib/test/unit/ingest/antagonistCycleAndParity.test.js.map +0 -1
  179. package/lib/test/unit/ingest/cycleGuard.test.d.ts +0 -2
  180. package/lib/test/unit/ingest/cycleGuard.test.d.ts.map +0 -1
  181. package/lib/test/unit/ingest/cycleGuard.test.js +0 -83
  182. package/lib/test/unit/ingest/cycleGuard.test.js.map +0 -1
  183. package/lib/test/unit/ingest/dedupScope.test.d.ts +0 -2
  184. package/lib/test/unit/ingest/dedupScope.test.d.ts.map +0 -1
  185. package/lib/test/unit/ingest/dedupScope.test.js +0 -436
  186. package/lib/test/unit/ingest/dedupScope.test.js.map +0 -1
  187. package/lib/test/unit/ingest/orchestrator.test.d.ts +0 -2
  188. package/lib/test/unit/ingest/orchestrator.test.d.ts.map +0 -1
  189. package/lib/test/unit/ingest/orchestrator.test.js +0 -1060
  190. package/lib/test/unit/ingest/orchestrator.test.js.map +0 -1
  191. package/lib/test/unit/observe/memoryObservationStore.test.d.ts +0 -2
  192. package/lib/test/unit/observe/memoryObservationStore.test.d.ts.map +0 -1
  193. package/lib/test/unit/observe/memoryObservationStore.test.js +0 -120
  194. package/lib/test/unit/observe/memoryObservationStore.test.js.map +0 -1
  195. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.d.ts +0 -2
  196. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.d.ts.map +0 -1
  197. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.js +0 -118
  198. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.js.map +0 -1
  199. package/lib/test/unit/retrieve/linkTraversalRetriever.test.d.ts +0 -2
  200. package/lib/test/unit/retrieve/linkTraversalRetriever.test.d.ts.map +0 -1
  201. package/lib/test/unit/retrieve/linkTraversalRetriever.test.js +0 -259
  202. package/lib/test/unit/retrieve/linkTraversalRetriever.test.js.map +0 -1
  203. package/lib/test/unit/retrieve/retrievers.test.d.ts +0 -2
  204. package/lib/test/unit/retrieve/retrievers.test.d.ts.map +0 -1
  205. package/lib/test/unit/retrieve/retrievers.test.js +0 -770
  206. package/lib/test/unit/retrieve/retrievers.test.js.map +0 -1
  207. package/lib/test/unit/retrieve/temporalRetrievers.test.d.ts +0 -2
  208. package/lib/test/unit/retrieve/temporalRetrievers.test.d.ts.map +0 -1
  209. package/lib/test/unit/retrieve/temporalRetrievers.test.js +0 -184
  210. package/lib/test/unit/retrieve/temporalRetrievers.test.js.map +0 -1
  211. package/lib/test/unit/store/antagonistTemporalBoundary.test.d.ts +0 -9
  212. package/lib/test/unit/store/antagonistTemporalBoundary.test.d.ts.map +0 -1
  213. package/lib/test/unit/store/antagonistTemporalBoundary.test.js +0 -122
  214. package/lib/test/unit/store/antagonistTemporalBoundary.test.js.map +0 -1
  215. package/lib/test/unit/store/embedOnWrite.test.d.ts +0 -2
  216. package/lib/test/unit/store/embedOnWrite.test.d.ts.map +0 -1
  217. package/lib/test/unit/store/embedOnWrite.test.js +0 -319
  218. package/lib/test/unit/store/embedOnWrite.test.js.map +0 -1
  219. package/lib/test/unit/store/fileTreeMemoryStore.test.d.ts +0 -2
  220. package/lib/test/unit/store/fileTreeMemoryStore.test.d.ts.map +0 -1
  221. package/lib/test/unit/store/fileTreeMemoryStore.test.js +0 -780
  222. package/lib/test/unit/store/fileTreeMemoryStore.test.js.map +0 -1
  223. package/lib/test/unit/store/fragmentEmbedOnWrite.test.d.ts +0 -2
  224. package/lib/test/unit/store/fragmentEmbedOnWrite.test.d.ts.map +0 -1
  225. package/lib/test/unit/store/fragmentEmbedOnWrite.test.js +0 -257
  226. package/lib/test/unit/store/fragmentEmbedOnWrite.test.js.map +0 -1
  227. package/lib/test/unit/store/indexInjection.test.d.ts +0 -2
  228. package/lib/test/unit/store/indexInjection.test.d.ts.map +0 -1
  229. package/lib/test/unit/store/indexInjection.test.js +0 -434
  230. package/lib/test/unit/store/indexInjection.test.js.map +0 -1
  231. package/lib/test/unit/store/lenientOpen.test.d.ts +0 -2
  232. package/lib/test/unit/store/lenientOpen.test.d.ts.map +0 -1
  233. package/lib/test/unit/store/lenientOpen.test.js +0 -250
  234. package/lib/test/unit/store/lenientOpen.test.js.map +0 -1
  235. package/lib/test/unit/store/listScoped.test.d.ts +0 -2
  236. package/lib/test/unit/store/listScoped.test.d.ts.map +0 -1
  237. package/lib/test/unit/store/listScoped.test.js +0 -111
  238. package/lib/test/unit/store/listScoped.test.js.map +0 -1
  239. package/lib/test/unit/store/observations.test.d.ts +0 -2
  240. package/lib/test/unit/store/observations.test.d.ts.map +0 -1
  241. package/lib/test/unit/store/observations.test.js +0 -241
  242. package/lib/test/unit/store/observations.test.js.map +0 -1
  243. package/lib/test/unit/store/rankAxis.test.d.ts +0 -2
  244. package/lib/test/unit/store/rankAxis.test.d.ts.map +0 -1
  245. package/lib/test/unit/store/rankAxis.test.js +0 -256
  246. package/lib/test/unit/store/rankAxis.test.js.map +0 -1
  247. package/lib/test/unit/store/scopeEncoding.test.d.ts +0 -2
  248. package/lib/test/unit/store/scopeEncoding.test.d.ts.map +0 -1
  249. package/lib/test/unit/store/scopeEncoding.test.js +0 -26
  250. package/lib/test/unit/store/scopeEncoding.test.js.map +0 -1
  251. package/lib/test/unit/store/temporalStore.test.d.ts +0 -2
  252. package/lib/test/unit/store/temporalStore.test.d.ts.map +0 -1
  253. package/lib/test/unit/store/temporalStore.test.js +0 -400
  254. package/lib/test/unit/store/temporalStore.test.js.map +0 -1
  255. package/lib/test/unit/tools/memoryTools.test.d.ts +0 -2
  256. package/lib/test/unit/tools/memoryTools.test.d.ts.map +0 -1
  257. package/lib/test/unit/tools/memoryTools.test.js +0 -844
  258. package/lib/test/unit/tools/memoryTools.test.js.map +0 -1
  259. package/lib/test/unit/types/identityCodec.test.d.ts +0 -2
  260. package/lib/test/unit/types/identityCodec.test.d.ts.map +0 -1
  261. package/lib/test/unit/types/identityCodec.test.js +0 -189
  262. package/lib/test/unit/types/identityCodec.test.js.map +0 -1
  263. package/lib/test/unit/types/ids.test.d.ts +0 -2
  264. package/lib/test/unit/types/ids.test.d.ts.map +0 -1
  265. package/lib/test/unit/types/ids.test.js +0 -86
  266. package/lib/test/unit/types/ids.test.js.map +0 -1
  267. package/lib/test/unit/types/temporalCodec.test.d.ts +0 -2
  268. package/lib/test/unit/types/temporalCodec.test.d.ts.map +0 -1
  269. package/lib/test/unit/types/temporalCodec.test.js +0 -205
  270. package/lib/test/unit/types/temporalCodec.test.js.map +0 -1
  271. package/lib/test/unit/types/temporalPolicy.test.d.ts +0 -2
  272. package/lib/test/unit/types/temporalPolicy.test.d.ts.map +0 -1
  273. package/lib/test/unit/types/temporalPolicy.test.js +0 -85
  274. package/lib/test/unit/types/temporalPolicy.test.js.map +0 -1
  275. package/lib/test/unit/types/writePolicy.test.d.ts +0 -2
  276. package/lib/test/unit/types/writePolicy.test.d.ts.map +0 -1
  277. package/lib/test/unit/types/writePolicy.test.js +0 -333
  278. package/lib/test/unit/types/writePolicy.test.js.map +0 -1
  279. package/lib/test/unit/vector/fragmentConverters.test.d.ts +0 -2
  280. package/lib/test/unit/vector/fragmentConverters.test.d.ts.map +0 -1
  281. package/lib/test/unit/vector/fragmentConverters.test.js +0 -60
  282. package/lib/test/unit/vector/fragmentConverters.test.js.map +0 -1
  283. package/lib/test/unit/vector/inMemoryCosineIndex.test.d.ts +0 -2
  284. package/lib/test/unit/vector/inMemoryCosineIndex.test.d.ts.map +0 -1
  285. package/lib/test/unit/vector/inMemoryCosineIndex.test.js +0 -254
  286. package/lib/test/unit/vector/inMemoryCosineIndex.test.js.map +0 -1
  287. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.d.ts +0 -2
  288. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.d.ts.map +0 -1
  289. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.js +0 -364
  290. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.js.map +0 -1
  291. package/lib/test/unit/vector/vectorIndex.test.d.ts +0 -2
  292. package/lib/test/unit/vector/vectorIndex.test.d.ts.map +0 -1
  293. package/lib/test/unit/vector/vectorIndex.test.js +0 -53
  294. package/lib/test/unit/vector/vectorIndex.test.js.map +0 -1
  295. package/rush-logs/ts-agent-memory.build.cache.log +0 -3
  296. package/rush-logs/ts-agent-memory.build.log +0 -9
  297. package/src/index.ts +0 -14
  298. package/src/packlets/converters/bodyConverterRegistry.ts +0 -105
  299. package/src/packlets/converters/envelopeConverter.ts +0 -233
  300. package/src/packlets/converters/index.ts +0 -7
  301. package/src/packlets/index/index.ts +0 -6
  302. package/src/packlets/index/memoryIndex.ts +0 -332
  303. package/src/packlets/ingest/cycleGuard.ts +0 -153
  304. package/src/packlets/ingest/hostStages.ts +0 -111
  305. package/src/packlets/ingest/index.ts +0 -9
  306. package/src/packlets/ingest/model.ts +0 -195
  307. package/src/packlets/ingest/orchestrator.ts +0 -968
  308. package/src/packlets/observe/index.ts +0 -7
  309. package/src/packlets/observe/memoryObservationStore.ts +0 -153
  310. package/src/packlets/observe/observer.ts +0 -119
  311. package/src/packlets/retrieve/fragmentSemanticRetriever.ts +0 -138
  312. package/src/packlets/retrieve/hybridRetriever.ts +0 -194
  313. package/src/packlets/retrieve/index.ts +0 -14
  314. package/src/packlets/retrieve/linkTraversalRetriever.ts +0 -158
  315. package/src/packlets/retrieve/recencyRetriever.ts +0 -54
  316. package/src/packlets/retrieve/retriever.ts +0 -291
  317. package/src/packlets/retrieve/semanticRetriever.ts +0 -152
  318. package/src/packlets/retrieve/structuredFilterRetriever.ts +0 -58
  319. package/src/packlets/retrieve/tagRetriever.ts +0 -58
  320. package/src/packlets/retrieve/temporalRetrievers.ts +0 -210
  321. package/src/packlets/store/fileTreeMemoryStore.ts +0 -1872
  322. package/src/packlets/store/index.ts +0 -7
  323. package/src/packlets/store/scopeEncoding.ts +0 -36
  324. package/src/packlets/tools/index.ts +0 -6
  325. package/src/packlets/tools/memoryTools.ts +0 -706
  326. package/src/packlets/types/envelope.ts +0 -196
  327. package/src/packlets/types/filenameSafety.ts +0 -57
  328. package/src/packlets/types/identityCodec.ts +0 -447
  329. package/src/packlets/types/ids.ts +0 -124
  330. package/src/packlets/types/index.ts +0 -11
  331. package/src/packlets/types/temporal.ts +0 -96
  332. package/src/packlets/types/writePolicy.ts +0 -612
  333. package/src/packlets/vector/fragmentConverters.ts +0 -55
  334. package/src/packlets/vector/inMemoryCosineIndex.ts +0 -196
  335. package/src/packlets/vector/inMemoryFragmentCosineIndex.ts +0 -289
  336. package/src/packlets/vector/index.ts +0 -9
  337. package/src/packlets/vector/vectorIndex.ts +0 -273
  338. package/src/test/unit/converters/antagonistRoundTrip.test.ts +0 -110
  339. package/src/test/unit/converters/bodyConverterRegistry.test.ts +0 -89
  340. package/src/test/unit/converters/envelopeConverter.test.ts +0 -418
  341. package/src/test/unit/index/memoryIndex.test.ts +0 -272
  342. package/src/test/unit/ingest/antagonistCycleAndParity.test.ts +0 -367
  343. package/src/test/unit/ingest/cycleGuard.test.ts +0 -110
  344. package/src/test/unit/ingest/dedupScope.test.ts +0 -542
  345. package/src/test/unit/ingest/orchestrator.test.ts +0 -1355
  346. package/src/test/unit/observe/memoryObservationStore.test.ts +0 -158
  347. package/src/test/unit/retrieve/fragmentSemanticRetriever.test.ts +0 -163
  348. package/src/test/unit/retrieve/linkTraversalRetriever.test.ts +0 -329
  349. package/src/test/unit/retrieve/retrievers.test.ts +0 -1018
  350. package/src/test/unit/retrieve/temporalRetrievers.test.ts +0 -226
  351. package/src/test/unit/store/antagonistTemporalBoundary.test.ts +0 -158
  352. package/src/test/unit/store/embedOnWrite.test.ts +0 -418
  353. package/src/test/unit/store/fileTreeMemoryStore.test.ts +0 -1041
  354. package/src/test/unit/store/fragmentEmbedOnWrite.test.ts +0 -349
  355. package/src/test/unit/store/indexInjection.test.ts +0 -550
  356. package/src/test/unit/store/lenientOpen.test.ts +0 -292
  357. package/src/test/unit/store/listScoped.test.ts +0 -138
  358. package/src/test/unit/store/observations.test.ts +0 -290
  359. package/src/test/unit/store/rankAxis.test.ts +0 -349
  360. package/src/test/unit/store/scopeEncoding.test.ts +0 -37
  361. package/src/test/unit/store/temporalStore.test.ts +0 -469
  362. package/src/test/unit/tools/memoryTools.test.ts +0 -1121
  363. package/src/test/unit/types/identityCodec.test.ts +0 -266
  364. package/src/test/unit/types/ids.test.ts +0 -94
  365. package/src/test/unit/types/temporalCodec.test.ts +0 -259
  366. package/src/test/unit/types/temporalPolicy.test.ts +0 -124
  367. package/src/test/unit/types/writePolicy.test.ts +0 -446
  368. package/src/test/unit/vector/fragmentConverters.test.ts +0 -80
  369. package/src/test/unit/vector/inMemoryCosineIndex.test.ts +0 -318
  370. package/src/test/unit/vector/inMemoryFragmentCosineIndex.test.ts +0 -477
  371. package/src/test/unit/vector/vectorIndex.test.ts +0 -64
  372. package/temp/build/lint/_eslint-5eVG3S6w.json +0 -306
  373. package/temp/build/typescript/ts_8nwakTlr.json +0 -1
  374. package/temp/ts-agent-memory.api.json +0 -21030
  375. package/temp/ts-agent-memory.api.md +0 -940
  376. package/tsconfig.json +0 -8
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.test.js","sourceRoot":"","sources":["../../../../src/test/unit/ingest/orchestrator.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (c) 2026 Erik Fortune\n * SPDX-License-Identifier: MIT\n */\n\nimport '@fgv/ts-utils-jest';\nimport { Converters, Logging, Result, fail, succeed } from '@fgv/ts-utils';\nimport { FileTree } from '@fgv/ts-json-base';\nimport {\n BodyConverterRegistry,\n CONTRADICTS_LINK_TYPE,\n DEFAULT_SIMILARITY_THRESHOLD,\n DEFAULT_SIMILARITY_TOP_K,\n DedupScope,\n EntityId,\n FileTreeMemoryStore,\n HOST_INGEST_PROVENANCE_SOURCE,\n IBodyConverterRegistry,\n ICandidateEdge,\n ICandidateRecord,\n IEdgeTarget,\n IEntityResolutionCandidate,\n IEntityResolver,\n IFactExtractor,\n IIdentityCodec,\n IIngestItem,\n IIngestItemResult,\n InMemoryCosineIndex,\n IMemoryClassification,\n IMemoryClassifier,\n IMemoryEnvelope,\n IMemoryRecord,\n IMemoryRecordSource,\n IMemoryStore,\n IProvenance,\n IScopedMemoryRecord,\n IRelationContext,\n IRelationExtractor,\n IVectorIndex,\n IVectorQueryHit,\n IWritePolicy,\n Kind,\n KnowledgeIdentityCodec,\n LinkType,\n LtmIdentityCodec,\n MemoryEmbedder,\n MtmIdentityCodec,\n MemoryId,\n MemoryIngestOrchestrator,\n MemoryScopeKey,\n ResolutionVerdict,\n Tag,\n TemporalIdentityCodec,\n TemporalVersionedPolicy,\n serializeMemoryFile\n} from '../../../index';\n\n// --- kinds --------------------------------------------------------------------\nconst noteKind: Kind = 'note' as Kind;\nconst factKind: Kind = 'fact' as Kind;\nconst numKind: Kind = 'num' as Kind;\nconst orphanKind: Kind = 'orphan' as Kind;\nconst ltmKind: Kind = 'ltm' as Kind;\n\n// --- shared fixtures ----------------------------------------------------------\nlet clockValue: number;\nconst clock = (): number => clockValue;\n\nfunction mutableRoot(\n files: ReadonlyArray<{ path: string; contents: string }> = []\n): FileTree.IMutableFileTreeDirectoryItem {\n const tree = FileTree.inMemory([...files], { mutable: true }).orThrow();\n const root = tree.getDirectory('/').orThrow();\n if (!FileTree.isMutableDirectoryItem(root)) {\n throw new Error('expected a mutable root directory');\n }\n return root;\n}\n\nfunction registry(): IBodyConverterRegistry {\n const reg = BodyConverterRegistry.create().orThrow();\n reg.register(noteKind, Converters.string);\n reg.register(factKind, Converters.string);\n reg.register(numKind, Converters.number);\n reg.register(orphanKind, Converters.string);\n reg.register(ltmKind, Converters.string);\n return reg;\n}\n\nconst codecs: ReadonlyMap<Kind, IIdentityCodec> = new Map<Kind, IIdentityCodec>([\n [noteKind, new KnowledgeIdentityCodec()],\n [numKind, new KnowledgeIdentityCodec()],\n [ltmKind, new LtmIdentityCodec()],\n [factKind, TemporalIdentityCodec.create('facts').orThrow()]\n]);\n\nconst policies: ReadonlyMap<Kind, IWritePolicy> = new Map<Kind, IWritePolicy>([\n [factKind, TemporalVersionedPolicy.create().orThrow()]\n]);\n\n// A deterministic embedder keyed by body text (three-dimensional vectors so\n// cosine relationships are controllable). Unknown bodies map to a distinct axis.\nconst VECTORS: ReadonlyMap<string, ReadonlyArray<number>> = new Map<string, ReadonlyArray<number>>([\n ['apple pie', [1, 0, 0]],\n ['apple tart', [0.99, 0.14, 0]],\n ['banana bread', [0, 1, 0]]\n]);\nconst embed: MemoryEmbedder = (record) => {\n if (record.body === 'boom') {\n return Promise.resolve(fail('embed boom'));\n }\n const vec: ReadonlyArray<number> = VECTORS.get(record.body as string) ?? [0, 0, 1];\n return Promise.resolve(succeed(Float32Array.from(vec)));\n};\n\n// --- mock host stages ---------------------------------------------------------\nfunction classifier(fn: (item: IIngestItem) => Result<IMemoryClassification>): IMemoryClassifier {\n return { classify: (item) => Promise.resolve(fn(item)) };\n}\nfunction throwingClassifier(): IMemoryClassifier {\n return {\n classify: () => {\n throw new Error('classifier boom');\n }\n };\n}\nfunction extractor(\n fn: (item: IIngestItem, c: IMemoryClassification) => Result<ReadonlyArray<ICandidateRecord>>\n): IFactExtractor {\n return { extract: (item, c) => Promise.resolve(fn(item, c)) };\n}\nfunction resolver(\n fn: (\n candidate: ICandidateRecord,\n similar: ReadonlyArray<IEntityResolutionCandidate>\n ) => Result<ResolutionVerdict>\n): IEntityResolver {\n return { resolve: (candidate, similar) => Promise.resolve(fn(candidate, similar)) };\n}\nfunction relater(fn: (ctx: IRelationContext) => Result<ReadonlyArray<ICandidateEdge>>): IRelationExtractor {\n return { relate: (ctx) => Promise.resolve(fn(ctx)) };\n}\n\nconst noEdges: IRelationExtractor = relater(() => succeed([]));\nconst classifyNote: IMemoryClassifier = classifier(() => succeed({ kind: noteKind, confidence: 0.9 }));\n\n/** Extractor that emits one note candidate per item, body = item.content, entityId = item.id. */\nfunction oneNoteExtractor(): IFactExtractor {\n return extractor((item) => succeed([candidate(noteKind, item.id, item.content as string)]));\n}\n\nfunction candidate(\n kind: Kind,\n entityId: string,\n body: unknown,\n opts: {\n readonly tags?: ReadonlyArray<string>;\n readonly links?: ICandidateRecord['envelope']['links'];\n readonly provenance?: IProvenance;\n readonly temporal?: IMemoryEnvelope['temporal'];\n } = {}\n): ICandidateRecord {\n return {\n envelope: {\n entityId: entityId as EntityId,\n kind,\n tags: (opts.tags ?? []) as ReadonlyArray<Tag>,\n links: opts.links ?? [],\n provenance: opts.provenance ?? { source: 'agent' },\n ...(opts.temporal !== undefined ? { temporal: opts.temporal } : {})\n },\n body\n };\n}\n\n/**\n * A scope-qualified target, authored as `scope#id` or a bare id defaulting to the\n * knowledge scope (where the note/num fixtures live). `kt` is the assertion-side\n * spelling of the same helper.\n */\nfunction scopedTarget(spec: string): IEdgeTarget {\n const hash: number = spec.indexOf('#');\n const scope: string = hash >= 0 ? spec.slice(0, hash) : 'knowledge';\n const id: string = hash >= 0 ? spec.slice(hash + 1) : spec;\n return { scope: scope as MemoryScopeKey, id: id as MemoryId };\n}\nfunction kt(id: string, scope: string = 'knowledge'): IEdgeTarget {\n return { scope: scope as MemoryScopeKey, id: id as MemoryId };\n}\n\n/** The scope-qualified reference of a candidate about to be written, by its entityId. */\nfunction srcOf(ctx: IRelationContext, entityId: string): IEdgeTarget {\n const found = ctx.candidates.find((rc) => rc.candidate.envelope.entityId === (entityId as EntityId));\n if (found === undefined) {\n throw new Error(`test relater: no candidate with entityId '${entityId}'`);\n }\n return found.id;\n}\n\nfunction candEdge(source: string, type: string, target: string, confidence?: number): ICandidateEdge {\n return {\n source: scopedTarget(source),\n edge: {\n type: type as LinkType,\n target: scopedTarget(target),\n ...(confidence !== undefined ? { confidence } : {})\n }\n };\n}\n\ninterface IBuildParams {\n readonly files?: ReadonlyArray<{ path: string; contents: string }>;\n readonly registry?: IBodyConverterRegistry;\n readonly vectorIndex?: IVectorIndex;\n readonly embed?: MemoryEmbedder;\n}\n\nfunction buildStore(params: IBuildParams = {}): FileTreeMemoryStore {\n return FileTreeMemoryStore.create({\n root: mutableRoot(params.files),\n registry: params.registry ?? registry(),\n codecs,\n writePolicies: policies,\n clock,\n vectorIndex: params.vectorIndex,\n embed: params.embed\n }).orThrow();\n}\n\ninterface IOrchestratorParams {\n readonly store: IMemoryStore;\n readonly registry?: IBodyConverterRegistry;\n readonly classifier?: IMemoryClassifier;\n readonly extractor?: IFactExtractor;\n readonly relationExtractor?: IRelationExtractor;\n readonly entityResolver?: IEntityResolver;\n readonly vectorIndex?: IVectorIndex;\n readonly embed?: MemoryEmbedder;\n readonly similarityThreshold?: number;\n readonly cycleGuard?: 'reject' | 'off';\n}\n\nfunction buildOrchestrator(params: IOrchestratorParams): MemoryIngestOrchestrator {\n return MemoryIngestOrchestrator.create({\n store: params.store,\n registry: params.registry ?? registry(),\n codecs,\n classifier: params.classifier ?? classifyNote,\n extractor: params.extractor ?? oneNoteExtractor(),\n relationExtractor: params.relationExtractor ?? noEdges,\n entityResolver: params.entityResolver,\n vectorIndex: params.vectorIndex,\n embed: params.embed,\n similarityThreshold: params.similarityThreshold,\n cycleGuard: params.cycleGuard\n }).orThrow();\n}\n\n/** A seeded note file with only `source` provenance (the additive-provenance baseline). */\nfunction seedNote(\n id: string,\n body: string,\n provenance: Record<string, unknown> = { source: 'agent' }\n): {\n path: string;\n contents: string;\n} {\n const envelope: IMemoryEnvelope = {\n id: id as MemoryId,\n entityId: id as EntityId,\n kind: noteKind,\n tags: [],\n links: [],\n created: 1,\n updated: 1,\n seq: 4,\n contentHash: 'seed',\n provenance: provenance as unknown as IProvenance\n };\n return { path: `knowledge/${id}.md`, contents: serializeMemoryFile(envelope, body).orThrow() };\n}\n\nbeforeEach(() => {\n clockValue = 1000;\n});\n\ndescribe('MemoryIngestOrchestrator', () => {\n describe('create', () => {\n test('constructs via the factory', () => {\n expect(\n MemoryIngestOrchestrator.create({\n store: buildStore(),\n registry: registry(),\n codecs,\n classifier: classifyNote,\n extractor: oneNoteExtractor(),\n relationExtractor: noEdges\n })\n ).toSucceed();\n });\n\n test('exposes the documented similarity defaults', () => {\n expect(DEFAULT_SIMILARITY_THRESHOLD).toBe(0.85);\n expect(DEFAULT_SIMILARITY_TOP_K).toBe(5);\n });\n });\n\n describe('single-item ingest (first-class path)', () => {\n test('classifies, extracts, and writes one record end-to-end with host-ingest provenance + derivedFrom', async () => {\n const store = buildStore();\n const orch = buildOrchestrator({ store });\n const sourceId: IEdgeTarget = {\n scope: 'conversations/c1' as MemoryScopeKey,\n id: 'turn-3' as MemoryId\n };\n const result = await orch.ingestItem({ id: 'doc-1', content: 'the sky is blue', sourceId });\n expect(result).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.item.id).toBe('doc-1');\n expect(r.records).toHaveLength(1);\n const rec = r.records[0];\n expect(rec.disposition).toBe('written');\n expect(rec.resolution.verdict).toBe('new');\n expect(rec.id).toBe('doc-1');\n expect(rec.record?.envelope.provenance.source).toBe(HOST_INGEST_PROVENANCE_SOURCE);\n expect(rec.record?.envelope.provenance.derivedFrom).toEqual(sourceId);\n expect(rec.record?.body).toBe('the sky is blue');\n expect(rec.interlock).toBeUndefined();\n });\n expect(await store.get(noteKind, 'doc-1' as EntityId)).toSucceedAndSatisfy(\n (rec: IMemoryRecord<unknown> | undefined) => {\n expect(rec?.body).toBe('the sky is blue');\n }\n );\n });\n\n test('omits derivedFrom when the item carries no sourceId', async () => {\n const store = buildStore();\n const orch = buildOrchestrator({ store });\n const result = await orch.ingestItem({ id: 'doc-1', content: 'a fact' });\n expect(result).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].record?.envelope.provenance.derivedFrom).toBeUndefined();\n expect(r.records[0].record?.envelope.provenance.source).toBe(HOST_INGEST_PROVENANCE_SOURCE);\n });\n });\n\n test('yields an empty record set when the extractor finds nothing memorable', async () => {\n const store = buildStore();\n const orch = buildOrchestrator({ store, extractor: extractor(() => succeed([])) });\n expect(await orch.ingestItem({ id: 'doc-1', content: 'noise' })).toSucceedAndSatisfy(\n (r: IIngestItemResult) => {\n expect(r.records).toEqual([]);\n }\n );\n });\n });\n\n describe('host-stage failures abort loudly', () => {\n test('classifier failure', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n classifier: classifier(() => fail('cannot classify'))\n });\n expect(await orch.ingestItem({ id: 'doc-1', content: 'x' })).toFailWith(/cannot classify/);\n });\n\n test('classifier throw is captured as a failure', async () => {\n const orch = buildOrchestrator({ store: buildStore(), classifier: throwingClassifier() });\n expect(await orch.ingestItem({ id: 'doc-1', content: 'x' })).toFailWith(\n /classify threw.*classifier boom/\n );\n });\n\n test('extractor failure', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n extractor: extractor(() => fail('extract error'))\n });\n expect(await orch.ingestItem({ id: 'doc-1', content: 'x' })).toFailWith(/extract error/);\n });\n\n test('relation-extractor failure', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n relationExtractor: relater(() => fail('relate error'))\n });\n expect(await orch.ingestItem({ id: 'doc-1', content: 'x' })).toFailWith(/relate error/);\n });\n });\n\n describe('stage 3b — typed validation boundary', () => {\n test('rejects a candidate whose body fails the kind converter', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-1', 42)]))\n });\n expect(await orch.ingestItem({ id: 'doc-1', content: 'x' })).toFailWith(\n /candidate body for kind 'note' is invalid/\n );\n });\n\n test('rejects a non-string body even when the converter accepts it', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n extractor: extractor(() => succeed([candidate(numKind, 'n-1', 42)]))\n });\n expect(await orch.ingestItem({ id: 'n-1', content: 'x' })).toFailWith(/must be a string/);\n });\n\n test('fails when no identity codec is registered for the candidate kind', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n extractor: extractor(() => succeed([candidate(orphanKind, 'o-1', 'body')]))\n });\n expect(await orch.ingestItem({ id: 'o-1', content: 'x' })).toFailWith(/no identity codec/);\n });\n\n test('fails loudly when a pre-existing snapshot record cannot be scoped (no codec for its kind)', async () => {\n // The store can persist a note (it has the note codec), but the orchestrator\n // below is wired WITHOUT a note codec — so when it snapshots the store to run\n // the edge path, it cannot resolve the seeded note's scope and fails loudly\n // (never silently drops it from the cycle graph). This is the branch the\n // scope-qualified edge change added.\n const store = buildStore();\n await putNote(store, 'legacy', 'anchor');\n const orch = MemoryIngestOrchestrator.create({\n store,\n registry: registry(),\n // Deliberately omit the note codec (and any default) that the seeded record needs.\n codecs: new Map<Kind, IIdentityCodec>([[numKind, new KnowledgeIdentityCodec()]]),\n classifier: classifier(() => succeed({ kind: numKind })),\n extractor: extractor(() => succeed([candidate(numKind, 'n-1', 7)])),\n relationExtractor: noEdges\n }).orThrow();\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(\n /cannot resolve scope for stored record 'legacy'.*no identity codec registered for kind 'note'/i\n );\n });\n });\n\n describe('stage 4 — exact dedup (layer 1)', () => {\n test('an exact {kind,body} match in scope is duplicate-of (no resolver)', async () => {\n const store = buildStore({ files: [seedNote('doc-a', 'hello')] });\n const orch = buildOrchestrator({\n store,\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'hello')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].disposition).toBe('deduped');\n expect(r.records[0].resolution).toEqual({ verdict: 'duplicate-of', target: kt('doc-a') });\n expect(r.records[0].id).toBe('doc-a');\n });\n // doc-b was never written.\n expect(await store.get(noteKind, 'doc-b' as EntityId)).toSucceedWith(undefined);\n });\n\n test('exact dedup takes precedence over the resolver (resolver never called)', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ files: [seedNote('doc-a', 'hello')] });\n const orch = buildOrchestrator({\n store,\n entityResolver: resolver(() => fail('resolver must not be called')),\n vectorIndex,\n embed,\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'hello')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].disposition).toBe('deduped');\n });\n });\n\n test('a distinct body is a fresh write (no resolver → exact-only fall-back)', async () => {\n const store = buildStore({ files: [seedNote('doc-a', 'hello')] });\n const orch = buildOrchestrator({\n store,\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'goodbye')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].disposition).toBe('written');\n expect(r.records[0].resolution.verdict).toBe('new');\n });\n });\n });\n});\n\n// --- similarity + resolver fixtures ------------------------------------------\nconst classifyFact: IMemoryClassifier = classifier(() => succeed({ kind: factKind }));\nfunction oneFactExtractor(): IFactExtractor {\n return extractor((item) => succeed([candidate(factKind, item.id, item.content as string)]));\n}\n\nasync function putNote(store: FileTreeMemoryStore, id: string, body: string): Promise<void> {\n const rec: IMemoryRecord<unknown> = {\n envelope: {\n id: id as MemoryId,\n entityId: id as EntityId,\n kind: noteKind,\n tags: [],\n links: [],\n created: 0,\n updated: 0,\n seq: 0,\n contentHash: '',\n provenance: { source: 'agent' }\n },\n body\n };\n (await store.put(rec)).orThrow();\n}\n\nfunction mockStore(overrides: Partial<IMemoryStore>): IMemoryStore {\n return {\n get:\n overrides.get ??\n ((): Promise<Result<IMemoryRecord<unknown> | undefined>> => Promise.resolve(succeed(undefined))),\n getById:\n overrides.getById ??\n ((): Promise<Result<IMemoryRecord<unknown> | undefined>> => Promise.resolve(succeed(undefined))),\n list:\n overrides.list ??\n ((): Promise<Result<ReadonlyArray<IMemoryRecord<unknown>>>> => Promise.resolve(succeed([]))),\n listScoped:\n overrides.listScoped ??\n ((): Promise<Result<ReadonlyArray<IScopedMemoryRecord>>> => Promise.resolve(succeed([]))),\n // Mirrors the store's default policy (KnowledgeLwwPolicy → 'content'), so a\n // mock store keeps the pre-accessor layer-1 behavior unless a test overrides it.\n dedupScopeFor: overrides.dedupScopeFor ?? ((): DedupScope => 'content'),\n asRecordSource:\n overrides.asRecordSource ??\n ((): IMemoryRecordSource => ({\n list: (): Promise<Result<ReadonlyArray<IScopedMemoryRecord>>> => Promise.resolve(succeed([]))\n })),\n put: overrides.put ?? ((r): Promise<Result<IMemoryRecord<unknown>>> => Promise.resolve(succeed(r))),\n delete: overrides.delete ?? ((): Promise<Result<MemoryId>> => Promise.resolve(fail('n/a')))\n };\n}\n\ndescribe('MemoryIngestOrchestrator — stage 4 similarity (layer 2)', () => {\n test('resolver verdict new writes the candidate despite a near-duplicate', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putNote(store, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver(() => succeed({ verdict: 'new' })),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].disposition).toBe('written');\n expect(r.records[0].resolution.verdict).toBe('new');\n });\n });\n\n test('resolver verdict duplicate-of dedups against the surfaced neighbor', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putNote(store, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver((__c, similar) =>\n succeed({ verdict: 'duplicate-of', target: similar[0].target })\n ),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].disposition).toBe('deduped');\n expect(r.records[0].id).toBe('doc-a');\n });\n expect(await store.get(noteKind, 'doc-b' as EntityId)).toSucceedWith(undefined);\n });\n\n test('resolver verdict supersede writes the candidate and records the superseded target', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putNote(store, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver((__c, similar) =>\n succeed({ verdict: 'supersede', target: similar[0].target })\n ),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].disposition).toBe('written');\n expect(r.records[0].resolution).toEqual({ verdict: 'supersede', target: kt('doc-a') });\n expect(r.records[0].id).toBe('doc-b');\n });\n expect(await store.get(noteKind, 'doc-b' as EntityId)).toSucceedAndSatisfy(\n (rec: IMemoryRecord<unknown> | undefined) => expect(rec?.body).toBe('apple tart')\n );\n });\n\n test('resolver verdict merge-into re-addresses the write to the target entity', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putNote(store, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver((__c, similar) =>\n succeed({ verdict: 'merge-into', target: similar[0].target })\n ),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].disposition).toBe('merged');\n expect(r.records[0].id).toBe('doc-a');\n });\n // The merge updated doc-a's body (LWW merge patch) and never minted doc-b.\n expect(await store.get(noteKind, 'doc-a' as EntityId)).toSucceedAndSatisfy(\n (rec: IMemoryRecord<unknown> | undefined) => expect(rec?.body).toBe('apple tart')\n );\n expect(await store.get(noteKind, 'doc-b' as EntityId)).toSucceedWith(undefined);\n });\n\n test('merge-into with a non-existent target fails loudly', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putNote(store, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver(() => succeed({ verdict: 'merge-into', target: kt('ghost') })),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(\n /merge-into target 'knowledge\\/ghost' does not exist/\n );\n });\n\n test('a below-threshold neighbor is not surfaced (resolver not called)', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putNote(store, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver(() => fail('resolver must not be called')),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'banana bread')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].resolution.verdict).toBe('new');\n });\n });\n\n test('the candidate self-hit is excluded from surfaced neighbors', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putNote(store, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver(() => fail('resolver must not be called')),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-a', 'apple tart')]))\n });\n // Re-ingesting the SAME entity: its own prior vector is the only over-threshold\n // hit, and it is skipped as the self-hit, so no resolver dispatch occurs.\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].resolution.verdict).toBe('new');\n expect(r.records[0].disposition).toBe('written');\n });\n });\n\n test('a surfaced hit with no backing record is skipped', async () => {\n const ghostIndex: IVectorIndex = {\n add: (t) => Promise.resolve(succeed(t.id as string)),\n remove: (t) => Promise.resolve(succeed(t)),\n query: (): Promise<Result<ReadonlyArray<IVectorQueryHit>>> =>\n Promise.resolve(succeed([{ target: kt('ghost'), score: 0.99 }]))\n };\n const orch = buildOrchestrator({\n store: buildStore(),\n vectorIndex: ghostIndex,\n embed,\n entityResolver: resolver(() => fail('resolver must not be called')),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].resolution.verdict).toBe('new');\n });\n });\n\n test('an embedder failure surfaces loudly', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const orch = buildOrchestrator({\n store: buildStore(),\n vectorIndex,\n embed,\n entityResolver: resolver(() => succeed({ verdict: 'new' })),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'boom')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(/embed boom/);\n });\n\n test('a similarity-query failure surfaces loudly', async () => {\n const failingIndex: IVectorIndex = {\n add: (t) => Promise.resolve(succeed(t.id as string)),\n remove: (t) => Promise.resolve(succeed(t)),\n query: (): Promise<Result<ReadonlyArray<IVectorQueryHit>>> => Promise.resolve(fail('query kaput'))\n };\n const orch = buildOrchestrator({\n store: buildStore(),\n vectorIndex: failingIndex,\n embed,\n entityResolver: resolver(() => succeed({ verdict: 'new' })),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(/query kaput/);\n });\n\n test('a custom similarityThreshold gates the resolver dispatch', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putNote(store, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n similarityThreshold: 0.999, // 0.99 neighbor now falls below threshold\n entityResolver: resolver(() => fail('resolver must not be called')),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].resolution.verdict).toBe('new');\n });\n });\n});\n\ndescribe('MemoryIngestOrchestrator — layer-2 wiring gates (exact-only fall-back)', () => {\n const failResolver: IEntityResolver = resolver(() => fail('resolver must not be called'));\n const almostSimilar = extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]));\n\n test('no resolver → exact-only', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putNote(store, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({ store, vectorIndex, embed, extractor: almostSimilar });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) =>\n expect(r.records[0].resolution.verdict).toBe('new')\n );\n });\n\n test('resolver + embed but no vector index → exact-only', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n embed,\n entityResolver: failResolver,\n extractor: almostSimilar\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) =>\n expect(r.records[0].resolution.verdict).toBe('new')\n );\n });\n\n test('resolver + vector index but no embedder → exact-only', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const orch = buildOrchestrator({\n store: buildStore(),\n vectorIndex,\n entityResolver: failResolver,\n extractor: almostSimilar\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) =>\n expect(r.records[0].resolution.verdict).toBe('new')\n );\n });\n});\n\ndescribe('MemoryIngestOrchestrator — stage 5 relate + cycle guard', () => {\n test('attaches a valid edge to an existing record', async () => {\n const store = buildStore();\n await putNote(store, 'doc-a', 'anchor');\n const orch = buildOrchestrator({\n store,\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'goodbye')])),\n relationExtractor: relater(() => succeed([candEdge('doc-b', 'mentions', 'doc-a', 0.7)]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].edges).toHaveLength(1);\n expect(r.records[0].record?.envelope.links).toEqual([\n { type: 'mentions', target: kt('doc-a'), confidence: 0.7 }\n ]);\n });\n });\n\n test('attaches an edge between two sibling candidates', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n extractor: extractor(() =>\n succeed([candidate(noteKind, 'doc-b', 'first'), candidate(noteKind, 'doc-c', 'second')])\n ),\n relationExtractor: relater(() => succeed([candEdge('doc-b', 'rel', 'doc-c')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records).toHaveLength(2);\n expect(r.records[0].record?.envelope.links).toEqual([{ type: 'rel', target: kt('doc-c') }]);\n expect(r.records[1].edges).toEqual([]);\n });\n });\n\n test('rejects an edge whose source is not a candidate being written', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'x')])),\n relationExtractor: relater(() => succeed([candEdge('ghost', 'rel', 'doc-b')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(\n /edge source 'knowledge\\/ghost' is not a candidate being written/\n );\n });\n\n test('rejects an edge whose target resolves to nothing', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'x')])),\n relationExtractor: relater(() => succeed([candEdge('doc-b', 'rel', 'ghost')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(\n /edge target 'knowledge\\/ghost' resolves to neither/\n );\n });\n\n test('rejects a cycle-inducing edge (default guard)', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n extractor: extractor(() =>\n succeed([candidate(noteKind, 'doc-b', 'first'), candidate(noteKind, 'doc-c', 'second')])\n ),\n relationExtractor: relater(() =>\n succeed([candEdge('doc-b', 'rel', 'doc-c'), candEdge('doc-c', 'rel', 'doc-b')])\n )\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(/would create a cycle/);\n });\n\n test('cycleGuard \"off\" admits an otherwise-cyclic edge set', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n cycleGuard: 'off',\n extractor: extractor(() =>\n succeed([candidate(noteKind, 'doc-b', 'first'), candidate(noteKind, 'doc-c', 'second')])\n ),\n relationExtractor: relater(() =>\n succeed([candEdge('doc-b', 'rel', 'doc-c'), candEdge('doc-c', 'rel', 'doc-b')])\n )\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].record?.envelope.links).toEqual([{ type: 'rel', target: kt('doc-c') }]);\n expect(r.records[1].record?.envelope.links).toEqual([{ type: 'rel', target: kt('doc-b') }]);\n });\n });\n\n test('a contradicts edge on a NON-temporal kind persists as a plain link (no interlock)', async () => {\n const store = buildStore();\n await putNote(store, 'doc-a', 'anchor');\n const orch = buildOrchestrator({\n store,\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'goodbye')])),\n relationExtractor: relater(() => succeed([candEdge('doc-b', 'contradicts', 'doc-a')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].interlock).toBeUndefined();\n expect(r.records[0].record?.envelope.links).toEqual([{ type: 'contradicts', target: kt('doc-a') }]);\n });\n });\n\n describe('_validateEdges cross-scope target disambiguation', () => {\n // Two EXISTING records share the idStem 'turn-3' across two conversations\n // (the MTM codec mints per-scope stems). A stage-5 edge target must resolve\n // to the CORRECT (scope, id) — with bare-id keying both would alias and a\n // wrong-scope target would silently validate. Guards the ingest-validation seam.\n const mtmKind: Kind = 'mtm' as Kind;\n\n function mtmRegistry(): IBodyConverterRegistry {\n const reg = registry();\n reg.register(mtmKind, Converters.string);\n return reg;\n }\n\n const mtmCodecs: ReadonlyMap<Kind, IIdentityCodec> = new Map<Kind, IIdentityCodec>([\n [mtmKind, new MtmIdentityCodec()]\n ]);\n\n async function seedTurn(store: FileTreeMemoryStore, entityId: string, body: string): Promise<void> {\n const addr = new MtmIdentityCodec().encode(entityId as EntityId).orThrow();\n const rec: IMemoryRecord<unknown> = {\n envelope: {\n id: addr.idStem as MemoryId,\n entityId: entityId as EntityId,\n kind: mtmKind,\n tags: [],\n links: [],\n created: 0,\n updated: 0,\n seq: 0,\n contentHash: '',\n provenance: { source: 'agent' }\n },\n body\n };\n (await store.put(rec)).orThrow();\n }\n\n function buildMtmOrchestrator(\n store: FileTreeMemoryStore,\n relationExtractor: IRelationExtractor\n ): MemoryIngestOrchestrator {\n return MemoryIngestOrchestrator.create({\n store,\n registry: mtmRegistry(),\n codecs: mtmCodecs,\n classifier: classifier(() => succeed({ kind: mtmKind })),\n // The candidate is a fresh turn-5 under conv-a (distinct stem from the seeds).\n extractor: extractor(() => succeed([candidate(mtmKind, 'conv-a:5', 'a new turn')])),\n relationExtractor\n }).orThrow();\n }\n\n async function seededStore(): Promise<FileTreeMemoryStore> {\n const store = FileTreeMemoryStore.create({\n root: mutableRoot(),\n registry: mtmRegistry(),\n codecs: mtmCodecs,\n clock\n }).orThrow();\n await seedTurn(store, 'conv-a:3', 'anchor in conversation a');\n await seedTurn(store, 'conv-b:3', 'anchor in conversation b');\n return store;\n }\n\n test('accepts a same-stem edge target that resolves to the correct scope', async () => {\n const store = await seededStore();\n const orch = buildMtmOrchestrator(\n store,\n relater((ctx) =>\n succeed([\n {\n source: srcOf(ctx, 'conv-a:5'),\n edge: { type: 'rel' as LinkType, target: kt('turn-3', 'conversations/conv-a') }\n }\n ])\n )\n );\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].record?.envelope.links).toEqual([\n { type: 'rel', target: kt('turn-3', 'conversations/conv-a') }\n ]);\n });\n });\n\n test('rejects a same-stem edge target whose scope has no matching record', async () => {\n const store = await seededStore();\n const orch = buildMtmOrchestrator(\n store,\n relater((ctx) =>\n succeed([\n {\n source: srcOf(ctx, 'conv-a:5'),\n // turn-3 exists under conv-a and conv-b, but NOT conv-z.\n edge: { type: 'rel' as LinkType, target: kt('turn-3', 'conversations/conv-z') }\n }\n ])\n )\n );\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(\n /edge target 'conversations\\/conv-z\\/turn-3' resolves to neither a sibling candidate nor an existing record/\n );\n });\n });\n});\n\ndescribe('MemoryIngestOrchestrator — contradicts→temporal interlock', () => {\n test('a contradicts edge on a temporal kind invalidates the prior version and writes a new one', async () => {\n const store = buildStore();\n const firstOrch = buildOrchestrator({\n store,\n classifier: classifyFact,\n extractor: oneFactExtractor()\n });\n clockValue = 1000;\n const first = await firstOrch.ingestItem({ id: 'fact-1', content: 'the sky is blue' });\n const v1Id: MemoryId = first.orThrow().records[0].id;\n expect(v1Id).toBe('fact-1-v1');\n\n clockValue = 2000;\n const secondOrch = buildOrchestrator({\n store,\n classifier: classifyFact,\n extractor: extractor(() => succeed([candidate(factKind, 'fact-1', 'the sky is grey')])),\n relationExtractor: relater((ctx) =>\n succeed([\n {\n source: srcOf(ctx, 'fact-1'),\n edge: { type: CONTRADICTS_LINK_TYPE, target: kt(v1Id, 'facts/entities/fact-1') }\n }\n ])\n )\n });\n expect(await secondOrch.ingestItem({ id: 'fact-1', content: 'the sky is grey' })).toSucceedAndSatisfy(\n (r: IIngestItemResult) => {\n expect(r.records[0].interlock).toBe('temporal-versioned');\n expect(r.records[0].disposition).toBe('written');\n expect(r.records[0].record?.envelope.links).toEqual([\n { type: CONTRADICTS_LINK_TYPE, target: kt(v1Id, 'facts/entities/fact-1') }\n ]);\n }\n );\n\n // The current version is the new (contradicting) one.\n expect(await store.get(factKind, 'fact-1' as EntityId)).toSucceedAndSatisfy(\n (rec: IMemoryRecord<unknown> | undefined) => expect(rec?.body).toBe('the sky is grey')\n );\n // The prior version is invalidated (invalidate-don't-delete).\n expect(await store.list()).toSucceedAndSatisfy((all: ReadonlyArray<IMemoryRecord<unknown>>) => {\n const v1 = all.find((rec) => rec.envelope.id === v1Id);\n expect(v1?.envelope.temporal?.invalid_at).toBe(2000);\n });\n });\n\n test('an invalidated version does not exact-dedup a later candidate that repeats its body', async () => {\n const store = buildStore();\n clockValue = 1000;\n const o1 = buildOrchestrator({ store, classifier: classifyFact, extractor: oneFactExtractor() });\n const first = await o1.ingestItem({ id: 'fact-1', content: 'blue' });\n const v1Id: MemoryId = first.orThrow().records[0].id;\n\n clockValue = 2000;\n const o2 = buildOrchestrator({\n store,\n classifier: classifyFact,\n extractor: extractor(() => succeed([candidate(factKind, 'fact-1', 'grey')])),\n relationExtractor: relater((ctx) =>\n succeed([\n {\n source: srcOf(ctx, 'fact-1'),\n edge: { type: CONTRADICTS_LINK_TYPE, target: kt(v1Id, 'facts/entities/fact-1') }\n }\n ])\n )\n });\n (await o2.ingestItem({ id: 'fact-1', content: 'grey' })).orThrow();\n\n // Re-introduce the ORIGINAL body: the invalidated v1 must be skipped by exact\n // dedup, so this is a NEW version, not a duplicate-of.\n clockValue = 3000;\n const o3 = buildOrchestrator({\n store,\n classifier: classifyFact,\n extractor: extractor(() => succeed([candidate(factKind, 'fact-1', 'blue')]))\n });\n expect(await o3.ingestItem({ id: 'fact-1', content: 'blue' })).toSucceedAndSatisfy(\n (r: IIngestItemResult) => {\n expect(r.records[0].resolution.verdict).toBe('new');\n expect(r.records[0].disposition).toBe('written');\n }\n );\n });\n});\n\ndescribe('MemoryIngestOrchestrator — additive-provenance non-regression', () => {\n test('a pre-existing record with only source provenance still loads and validates unchanged', async () => {\n const store = buildStore({ files: [seedNote('legacy', 'old note', { source: 'human' })] });\n // Loads at construction time.\n expect(await store.getById('knowledge' as MemoryScopeKey, 'legacy' as MemoryId)).toSucceedAndSatisfy(\n (rec: IMemoryRecord<unknown> | undefined) => {\n expect(rec?.envelope.provenance).toEqual({ source: 'human' });\n expect(rec?.envelope.provenance.by).toBeUndefined();\n expect(rec?.envelope.provenance.derivedFrom).toBeUndefined();\n }\n );\n // An unrelated ingest does not disturb it.\n const orch = buildOrchestrator({ store });\n (await orch.ingestItem({ id: 'fresh', content: 'new content' })).orThrow();\n expect(await store.getById('knowledge' as MemoryScopeKey, 'legacy' as MemoryId)).toSucceedAndSatisfy(\n (rec: IMemoryRecord<unknown> | undefined) => {\n expect(rec?.envelope.provenance).toEqual({ source: 'human' });\n }\n );\n });\n});\n\ndescribe('MemoryIngestOrchestrator — ingestBatch', () => {\n test('ingests a batch in order', async () => {\n const store = buildStore();\n const orch = buildOrchestrator({ store });\n const result = await orch.ingestBatch([\n { id: 'doc-1', content: 'one' },\n { id: 'doc-2', content: 'two' }\n ]);\n expect(result).toSucceedAndSatisfy((results: ReadonlyArray<IIngestItemResult>) => {\n expect(results).toHaveLength(2);\n expect(results.map((r) => r.item.id)).toEqual(['doc-1', 'doc-2']);\n expect(results.every((r) => r.records[0].disposition === 'written')).toBe(true);\n });\n });\n\n test('aborts the batch on the first item failure', async () => {\n const orch = buildOrchestrator({\n store: buildStore(),\n classifier: classifier((item) =>\n item.id === 'bad' ? fail('classify bad') : succeed({ kind: noteKind })\n )\n });\n expect(\n await orch.ingestBatch([\n { id: 'bad', content: 'one' },\n { id: 'doc-2', content: 'two' }\n ])\n ).toFailWith(/classify bad/);\n });\n});\n\ndescribe('MemoryIngestOrchestrator — store failure paths', () => {\n test('a store snapshot (list) failure aborts the item', async () => {\n const store = mockStore({ list: () => Promise.resolve(fail('list down')) });\n const orch = buildOrchestrator({ store });\n expect(await orch.ingestItem({ id: 'doc-1', content: 'x' })).toFailWith(\n /failed to snapshot store.*list down/\n );\n });\n\n test('a store put failure surfaces as a write failure', async () => {\n const store = mockStore({ put: () => Promise.resolve(fail('put kaput')) });\n const orch = buildOrchestrator({ store });\n expect(await orch.ingestItem({ id: 'doc-1', content: 'x' })).toFailWith(/write failed.*put kaput/);\n });\n});\n\ndescribe('MemoryIngestOrchestrator — optional constructor params', () => {\n test('falls back to defaultCodec when no per-kind codec map is supplied', async () => {\n const store = buildStore();\n const orch = MemoryIngestOrchestrator.create({\n store,\n registry: registry(),\n defaultCodec: new KnowledgeIdentityCodec(),\n classifier: classifyNote,\n extractor: oneNoteExtractor(),\n relationExtractor: noEdges\n }).orThrow();\n expect(await orch.ingestItem({ id: 'doc-1', content: 'hello' })).toSucceedAndSatisfy(\n (r: IIngestItemResult) => expect(r.records[0].disposition).toBe('written')\n );\n });\n\n test('honors an explicit similarityTopK and logs a captured host throw to the supplied logger', async () => {\n const logger = new Logging.InMemoryLogger('detail');\n const orch = MemoryIngestOrchestrator.create({\n store: buildStore(),\n registry: registry(),\n codecs,\n classifier: throwingClassifier(),\n extractor: oneNoteExtractor(),\n relationExtractor: noEdges,\n similarityTopK: 3,\n logger\n }).orThrow();\n expect(await orch.ingestItem({ id: 'doc-1', content: 'x' })).toFailWith(/classifier boom/);\n expect(logger.logged.some((m) => /classifier boom/.test(m))).toBe(true);\n });\n});\n\ndescribe('MemoryIngestOrchestrator — review-punch-list fixes', () => {\n test('a stored record with a non-string body fails the exact-dedup pass loudly', async () => {\n const weird: IMemoryRecord<unknown> = {\n envelope: {\n id: 'weird' as MemoryId,\n entityId: 'weird' as EntityId,\n kind: noteKind,\n tags: [],\n links: [],\n created: 0,\n updated: 0,\n seq: 0,\n contentHash: '',\n provenance: { source: 'agent' }\n },\n body: 42\n };\n const store = mockStore({ list: () => Promise.resolve(succeed([weird])) });\n const orch = buildOrchestrator({ store });\n expect(await orch.ingestItem({ id: 'doc-1', content: 'hello' })).toFailWith(\n /stored record 'weird' has a non-string body/\n );\n });\n\n test('duplicate stage-5 edges are deduped on the written record', async () => {\n const store = buildStore();\n await putNote(store, 'doc-a', 'anchor');\n const orch = buildOrchestrator({\n store,\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'goodbye')])),\n relationExtractor: relater(() =>\n succeed([candEdge('doc-b', 'rel', 'doc-a'), candEdge('doc-b', 'rel', 'doc-a')])\n )\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].record?.envelope.links).toEqual([{ type: 'rel', target: kt('doc-a') }]);\n });\n });\n\n test('two candidates merging into the same target do not duplicate a shared edge', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putNote(store, 'doc-a', 'apple pie');\n await putNote(store, 'doc-x', 'target');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver((__c, similar) =>\n succeed({ verdict: 'merge-into', target: similar[0].target })\n ),\n extractor: extractor(() =>\n succeed([candidate(noteKind, 'doc-b', 'apple tart'), candidate(noteKind, 'doc-c', 'apple tart')])\n ),\n relationExtractor: relater(() => succeed([candEdge('doc-a', 'rel', 'doc-x')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceed();\n expect(await store.get(noteKind, 'doc-a' as EntityId)).toSucceedAndSatisfy(\n (rec: IMemoryRecord<unknown> | undefined) => {\n expect(rec?.envelope.links).toEqual([{ type: 'rel', target: kt('doc-x') }]);\n }\n );\n });\n});\n\ndescribe('MemoryIngestOrchestrator — merge-into safety (second review)', () => {\n // Seed a record with pre-existing tags + links under a flat codec (id === entityId).\n async function putFull(\n store: FileTreeMemoryStore,\n kind: Kind,\n entityId: string,\n body: string,\n opts: { tags?: ReadonlyArray<string>; links?: IMemoryEnvelope['links'] } = {}\n ): Promise<void> {\n const rec: IMemoryRecord<unknown> = {\n envelope: {\n id: entityId as MemoryId,\n entityId: entityId as EntityId,\n kind,\n tags: (opts.tags ?? []) as ReadonlyArray<Tag>,\n links: opts.links ?? [],\n created: 0,\n updated: 0,\n seq: 0,\n contentHash: '',\n provenance: { source: 'agent' }\n },\n body\n };\n (await store.put(rec)).orThrow();\n }\n\n test('merge-into UNIONs the target’s existing tags + links (never overwrites them)', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putFull(store, noteKind, 'doc-a', 'apple pie', {\n tags: ['old-tag'],\n links: [{ type: 'existing' as LinkType, target: kt('doc-z') }]\n });\n await putFull(store, noteKind, 'doc-x', 'target of stage-5');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver((__c, similar) =>\n succeed({ verdict: 'merge-into', target: similar[0].target })\n ),\n extractor: extractor(() =>\n succeed([\n candidate(noteKind, 'doc-b', 'apple tart', {\n tags: ['new-tag'],\n links: [{ type: 'candlink' as LinkType, target: kt('doc-z') }]\n })\n ])\n ),\n relationExtractor: relater(() => succeed([candEdge('doc-a', 'stage5', 'doc-x')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toSucceedAndSatisfy((r: IIngestItemResult) => {\n expect(r.records[0].disposition).toBe('merged');\n });\n expect(await store.get(noteKind, 'doc-a' as EntityId)).toSucceedAndSatisfy(\n (rec: IMemoryRecord<unknown> | undefined) => {\n // Original tag preserved AND the candidate's tag gained, each once.\n expect([...(rec?.envelope.tags ?? [])].sort()).toEqual(['new-tag', 'old-tag']);\n // Original link + candidate link + stage-5 edge, each exactly once.\n expect(rec?.envelope.links).toEqual([\n { type: 'existing', target: kt('doc-z') },\n { type: 'candlink', target: kt('doc-z') },\n { type: 'stage5', target: kt('doc-x') }\n ]);\n }\n );\n });\n\n test('merge-into a different-kind target fails loudly', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n // A DIFFERENT-kind (ltm) record embedded so it surfaces as a neighbor of a note candidate.\n await putFull(store, ltmKind, 'conv-1', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver((__c, similar) =>\n succeed({ verdict: 'merge-into', target: similar[0].target })\n ),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(\n /merge-into target 'conversations\\/conv-1' is kind 'ltm' but the candidate is kind 'note'/\n );\n });\n\n test('supersede with a non-existent target fails loudly', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putFull(store, noteKind, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver(() => succeed({ verdict: 'supersede', target: kt('ghost') })),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(\n /supersede target 'knowledge\\/ghost' does not exist/\n );\n });\n\n test('duplicate-of with a non-existent target fails loudly', async () => {\n const vectorIndex = InMemoryCosineIndex.create().orThrow();\n const store = buildStore({ vectorIndex, embed });\n await putFull(store, noteKind, 'doc-a', 'apple pie');\n const orch = buildOrchestrator({\n store,\n vectorIndex,\n embed,\n entityResolver: resolver(() => succeed({ verdict: 'duplicate-of', target: kt('ghost') })),\n extractor: extractor(() => succeed([candidate(noteKind, 'doc-b', 'apple tart')]))\n });\n expect(await orch.ingestItem({ id: 'i', content: 'x' })).toFailWith(\n /duplicate-of target 'knowledge\\/ghost' does not exist/\n );\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- import '@fgv/ts-utils-jest';
2
- //# sourceMappingURL=memoryObservationStore.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memoryObservationStore.test.d.ts","sourceRoot":"","sources":["../../../../src/test/unit/observe/memoryObservationStore.test.ts"],"names":[],"mappings":"AAKA,OAAO,oBAAoB,CAAC"}
@@ -1,120 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright (c) 2026 Erik Fortune
4
- * SPDX-License-Identifier: MIT
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- require("@fgv/ts-utils-jest");
8
- const index_1 = require("../../../index");
9
- function obs(spec) {
10
- var _a, _b, _c;
11
- return {
12
- seq: spec.seq,
13
- timestamp: (_a = spec.timestamp) !== null && _a !== void 0 ? _a : spec.seq,
14
- phase: (_b = spec.phase) !== null && _b !== void 0 ? _b : 'write',
15
- scope: spec.scope === undefined ? undefined : spec.scope,
16
- kind: spec.kind === undefined ? undefined : spec.kind,
17
- id: spec.id === undefined ? undefined : spec.id,
18
- outcome: (_c = spec.outcome) !== null && _c !== void 0 ? _c : 'success'
19
- };
20
- }
21
- function seqs(records) {
22
- return records.map((r) => r.seq);
23
- }
24
- describe('MemoryObservationStore', () => {
25
- describe('create', () => {
26
- test('builds with defaults', () => {
27
- expect(index_1.MemoryObservationStore.create()).toSucceedAndSatisfy((store) => {
28
- expect(store.size).toBe(0);
29
- expect(store.lastSeq).toBe(0);
30
- });
31
- });
32
- test('rejects a non-positive-integer maxRecords', () => {
33
- expect(index_1.MemoryObservationStore.create({ maxRecords: 0 })).toFailWith(/positive integer/i);
34
- expect(index_1.MemoryObservationStore.create({ maxRecords: 2.5 })).toFailWith(/positive integer/i);
35
- expect(index_1.MemoryObservationStore.create({ maxRecords: -1 })).toFailWith(/positive integer/i);
36
- });
37
- });
38
- describe('observe', () => {
39
- test('retains records and tracks size + lastSeq', async () => {
40
- const store = index_1.MemoryObservationStore.create().orThrow();
41
- expect(await store.observe(obs({ seq: 1 }))).toSucceed();
42
- expect(await store.observe(obs({ seq: 2 }))).toSucceed();
43
- expect(store.size).toBe(2);
44
- expect(store.lastSeq).toBe(2);
45
- });
46
- test('evicts the oldest beyond maxRecords, preserving lastSeq', async () => {
47
- const store = index_1.MemoryObservationStore.create({ maxRecords: 2 }).orThrow();
48
- await store.observe(obs({ seq: 1 }));
49
- await store.observe(obs({ seq: 2 }));
50
- await store.observe(obs({ seq: 3 }));
51
- expect(store.size).toBe(2);
52
- expect(store.lastSeq).toBe(3);
53
- expect(seqs(store.query())).toEqual([2, 3]);
54
- });
55
- });
56
- describe('query', () => {
57
- let store;
58
- beforeEach(async () => {
59
- store = index_1.MemoryObservationStore.create().orThrow();
60
- await store.observe(obs({
61
- seq: 1,
62
- timestamp: 100,
63
- phase: 'write',
64
- scope: 'knowledge',
65
- kind: 'knowledge',
66
- outcome: 'success'
67
- }));
68
- await store.observe(obs({
69
- seq: 2,
70
- timestamp: 200,
71
- phase: 'read',
72
- scope: 'knowledge',
73
- kind: 'knowledge',
74
- outcome: 'failure'
75
- }));
76
- await store.observe(obs({ seq: 3, timestamp: 300, phase: 'delete', scope: 'other', kind: 'note', outcome: 'success' }));
77
- });
78
- test('returns all records oldest-first with no criteria', () => {
79
- expect(seqs(store.query())).toEqual([1, 2, 3]);
80
- });
81
- test('pages by sinceSeq', () => {
82
- expect(seqs(store.query({ sinceSeq: 1 }))).toEqual([2, 3]);
83
- });
84
- test('limits to the most-recent N', () => {
85
- expect(seqs(store.query({ limit: 2 }))).toEqual([2, 3]);
86
- });
87
- test('filters by timestamp window', () => {
88
- expect(seqs(store.query({ since: 200 }))).toEqual([2, 3]);
89
- expect(seqs(store.query({ until: 200 }))).toEqual([1, 2]);
90
- expect(seqs(store.query({ since: 150, until: 250 }))).toEqual([2]);
91
- });
92
- test('filters by scope', () => {
93
- expect(seqs(store.query({ scope: 'knowledge' }))).toEqual([1, 2]);
94
- });
95
- test('filters by kind', () => {
96
- expect(seqs(store.query({ kind: 'note' }))).toEqual([3]);
97
- });
98
- test('filters by phase', () => {
99
- expect(seqs(store.query({ phase: 'read' }))).toEqual([2]);
100
- });
101
- test('filters by outcome', () => {
102
- expect(seqs(store.query({ outcome: 'failure' }))).toEqual([2]);
103
- });
104
- test('combines criteria with AND', () => {
105
- expect(seqs(store.query({ scope: 'knowledge', outcome: 'success' }))).toEqual([1]);
106
- });
107
- });
108
- describe('clear', () => {
109
- test('drops records but preserves lastSeq as a cursor floor', async () => {
110
- const store = index_1.MemoryObservationStore.create().orThrow();
111
- await store.observe(obs({ seq: 1 }));
112
- await store.observe(obs({ seq: 2 }));
113
- store.clear();
114
- expect(store.size).toBe(0);
115
- expect(store.lastSeq).toBe(2);
116
- expect(store.query()).toEqual([]);
117
- });
118
- });
119
- });
120
- //# sourceMappingURL=memoryObservationStore.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memoryObservationStore.test.js","sourceRoot":"","sources":["../../../../src/test/unit/observe/memoryObservationStore.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (c) 2026 Erik Fortune\n * SPDX-License-Identifier: MIT\n */\n\nimport '@fgv/ts-utils-jest';\nimport {\n IMemoryObservationRecord,\n Kind,\n MemoryId,\n MemoryObservationPhase,\n MemoryObservationStore,\n MemoryScopeKey\n} from '../../../index';\n\ninterface IObsSpec {\n readonly seq: number;\n readonly timestamp?: number;\n readonly phase?: MemoryObservationPhase;\n readonly scope?: string;\n readonly kind?: string;\n readonly id?: string;\n readonly outcome?: 'success' | 'failure';\n}\n\nfunction obs(spec: IObsSpec): IMemoryObservationRecord {\n return {\n seq: spec.seq,\n timestamp: spec.timestamp ?? spec.seq,\n phase: spec.phase ?? 'write',\n scope: spec.scope === undefined ? undefined : (spec.scope as MemoryScopeKey),\n kind: spec.kind === undefined ? undefined : (spec.kind as Kind),\n id: spec.id === undefined ? undefined : (spec.id as MemoryId),\n outcome: spec.outcome ?? 'success'\n };\n}\n\nfunction seqs(records: ReadonlyArray<IMemoryObservationRecord>): ReadonlyArray<number> {\n return records.map((r) => r.seq);\n}\n\ndescribe('MemoryObservationStore', () => {\n describe('create', () => {\n test('builds with defaults', () => {\n expect(MemoryObservationStore.create()).toSucceedAndSatisfy((store: MemoryObservationStore) => {\n expect(store.size).toBe(0);\n expect(store.lastSeq).toBe(0);\n });\n });\n\n test('rejects a non-positive-integer maxRecords', () => {\n expect(MemoryObservationStore.create({ maxRecords: 0 })).toFailWith(/positive integer/i);\n expect(MemoryObservationStore.create({ maxRecords: 2.5 })).toFailWith(/positive integer/i);\n expect(MemoryObservationStore.create({ maxRecords: -1 })).toFailWith(/positive integer/i);\n });\n });\n\n describe('observe', () => {\n test('retains records and tracks size + lastSeq', async () => {\n const store = MemoryObservationStore.create().orThrow();\n expect(await store.observe(obs({ seq: 1 }))).toSucceed();\n expect(await store.observe(obs({ seq: 2 }))).toSucceed();\n expect(store.size).toBe(2);\n expect(store.lastSeq).toBe(2);\n });\n\n test('evicts the oldest beyond maxRecords, preserving lastSeq', async () => {\n const store = MemoryObservationStore.create({ maxRecords: 2 }).orThrow();\n await store.observe(obs({ seq: 1 }));\n await store.observe(obs({ seq: 2 }));\n await store.observe(obs({ seq: 3 }));\n expect(store.size).toBe(2);\n expect(store.lastSeq).toBe(3);\n expect(seqs(store.query())).toEqual([2, 3]);\n });\n });\n\n describe('query', () => {\n let store: MemoryObservationStore;\n\n beforeEach(async () => {\n store = MemoryObservationStore.create().orThrow();\n await store.observe(\n obs({\n seq: 1,\n timestamp: 100,\n phase: 'write',\n scope: 'knowledge',\n kind: 'knowledge',\n outcome: 'success'\n })\n );\n await store.observe(\n obs({\n seq: 2,\n timestamp: 200,\n phase: 'read',\n scope: 'knowledge',\n kind: 'knowledge',\n outcome: 'failure'\n })\n );\n await store.observe(\n obs({ seq: 3, timestamp: 300, phase: 'delete', scope: 'other', kind: 'note', outcome: 'success' })\n );\n });\n\n test('returns all records oldest-first with no criteria', () => {\n expect(seqs(store.query())).toEqual([1, 2, 3]);\n });\n\n test('pages by sinceSeq', () => {\n expect(seqs(store.query({ sinceSeq: 1 }))).toEqual([2, 3]);\n });\n\n test('limits to the most-recent N', () => {\n expect(seqs(store.query({ limit: 2 }))).toEqual([2, 3]);\n });\n\n test('filters by timestamp window', () => {\n expect(seqs(store.query({ since: 200 }))).toEqual([2, 3]);\n expect(seqs(store.query({ until: 200 }))).toEqual([1, 2]);\n expect(seqs(store.query({ since: 150, until: 250 }))).toEqual([2]);\n });\n\n test('filters by scope', () => {\n expect(seqs(store.query({ scope: 'knowledge' as MemoryScopeKey }))).toEqual([1, 2]);\n });\n\n test('filters by kind', () => {\n expect(seqs(store.query({ kind: 'note' as Kind }))).toEqual([3]);\n });\n\n test('filters by phase', () => {\n expect(seqs(store.query({ phase: 'read' }))).toEqual([2]);\n });\n\n test('filters by outcome', () => {\n expect(seqs(store.query({ outcome: 'failure' }))).toEqual([2]);\n });\n\n test('combines criteria with AND', () => {\n expect(seqs(store.query({ scope: 'knowledge' as MemoryScopeKey, outcome: 'success' }))).toEqual([1]);\n });\n });\n\n describe('clear', () => {\n test('drops records but preserves lastSeq as a cursor floor', async () => {\n const store = MemoryObservationStore.create().orThrow();\n await store.observe(obs({ seq: 1 }));\n await store.observe(obs({ seq: 2 }));\n store.clear();\n expect(store.size).toBe(0);\n expect(store.lastSeq).toBe(2);\n expect(store.query()).toEqual([]);\n });\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- import '@fgv/ts-utils-jest';
2
- //# sourceMappingURL=fragmentSemanticRetriever.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fragmentSemanticRetriever.test.d.ts","sourceRoot":"","sources":["../../../../src/test/unit/retrieve/fragmentSemanticRetriever.test.ts"],"names":[],"mappings":"AAKA,OAAO,oBAAoB,CAAC"}
@@ -1,118 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright (c) 2026 Erik Fortune
4
- * SPDX-License-Identifier: MIT
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- require("@fgv/ts-utils-jest");
8
- const ts_utils_1 = require("@fgv/ts-utils");
9
- const index_1 = require("../../../index");
10
- function target(scope, id) {
11
- return { scope: scope, id: id };
12
- }
13
- function loc(start, end) {
14
- return { start, end };
15
- }
16
- function hit(scope, id, start, end, score) {
17
- return { target: target(scope, id), score, locator: loc(start, end) };
18
- }
19
- const okEmbed = () => Promise.resolve((0, ts_utils_1.succeed)(Float32Array.from([0.1, 0.2])));
20
- /** A scripted fragment index that records the args it was queried with. */
21
- class FakeFragmentIndex {
22
- constructor(hits, shouldFail = false) {
23
- this._hits = hits;
24
- this._fail = shouldFail;
25
- }
26
- addFragments(__t, fragments) {
27
- return Promise.resolve((0, ts_utils_1.succeed)(fragments.length));
28
- }
29
- remove(t) {
30
- return Promise.resolve((0, ts_utils_1.succeed)(t));
31
- }
32
- query(__vector, topK, maxPerRecord) {
33
- this.lastTopK = topK;
34
- this.lastMaxPerRecord = maxPerRecord;
35
- return Promise.resolve(this._fail ? (0, ts_utils_1.fail)('fragment backend down') : (0, ts_utils_1.succeed)(this._hits));
36
- }
37
- }
38
- describe('FragmentSemanticRetriever', () => {
39
- test('reports supportsFragmentRecall=false when no backend is wired', () => {
40
- const r = index_1.FragmentSemanticRetriever.create({}).orThrow();
41
- expect(r.capabilities.supportsFragmentRecall).toBe(false);
42
- });
43
- test('reports supportsFragmentRecall=true when a backend is wired', () => {
44
- const r = index_1.FragmentSemanticRetriever.create({
45
- backend: { fragmentIndex: new FakeFragmentIndex([]), embedQuery: okEmbed }
46
- }).orThrow();
47
- expect(r.capabilities.supportsFragmentRecall).toBe(true);
48
- });
49
- test('degrades loudly when no backend is wired — never a silent empty', async () => {
50
- const r = index_1.FragmentSemanticRetriever.create({}).orThrow();
51
- expect(await r.retrieve({ semantic: 'hi' })).toFailWith(index_1.FRAGMENT_SEMANTIC_UNWIRED_MESSAGE);
52
- });
53
- test('returns the per-fragment hits (target + locator + score) in backend order', async () => {
54
- const hits = [hit('knowledge', 'doc-a', 0, 5, 0.9), hit('knowledge', 'doc-a', 20, 25, 0.4)];
55
- const r = index_1.FragmentSemanticRetriever.create({
56
- backend: { fragmentIndex: new FakeFragmentIndex(hits), embedQuery: okEmbed }
57
- }).orThrow();
58
- expect(await r.retrieve({ semantic: 'q' })).toSucceedAndSatisfy((result) => {
59
- expect(result).toEqual(hits);
60
- expect(result[0].locator).toEqual(loc(0, 5));
61
- expect(result[1].locator).toEqual(loc(20, 25));
62
- });
63
- });
64
- test('forwards topK and maxPerRecord to the fragment index', async () => {
65
- const fragmentIndex = new FakeFragmentIndex([hit('knowledge', 'doc-a', 0, 5, 0.9)]);
66
- const r = index_1.FragmentSemanticRetriever.create({
67
- backend: { fragmentIndex, embedQuery: okEmbed }
68
- }).orThrow();
69
- expect(await r.retrieve({ semantic: 'q', topK: 3, maxPerRecord: 1 })).toSucceed();
70
- expect(fragmentIndex.lastTopK).toBe(3);
71
- expect(fragmentIndex.lastMaxPerRecord).toBe(1);
72
- });
73
- test('defaults topK to 10 and leaves maxPerRecord undefined when the query omits them', async () => {
74
- const fragmentIndex = new FakeFragmentIndex([hit('knowledge', 'doc-a', 0, 5, 0.9)]);
75
- const r = index_1.FragmentSemanticRetriever.create({
76
- backend: { fragmentIndex, embedQuery: okEmbed }
77
- }).orThrow();
78
- expect(await r.retrieve({ semantic: 'q' })).toSucceed();
79
- expect(fragmentIndex.lastTopK).toBe(10);
80
- expect(fragmentIndex.lastMaxPerRecord).toBeUndefined();
81
- });
82
- test('fails loudly when the embedder fails', async () => {
83
- const r = index_1.FragmentSemanticRetriever.create({
84
- backend: {
85
- fragmentIndex: new FakeFragmentIndex([]),
86
- embedQuery: () => Promise.resolve((0, ts_utils_1.fail)('no embed model'))
87
- }
88
- }).orThrow();
89
- expect(await r.retrieve({ semantic: 'q' })).toFailWith(/fragment recall: query embedding failed: no embed model/i);
90
- });
91
- test('fails loudly when the fragment backend fails', async () => {
92
- const r = index_1.FragmentSemanticRetriever.create({
93
- backend: { fragmentIndex: new FakeFragmentIndex([], true), embedQuery: okEmbed }
94
- }).orThrow();
95
- expect(await r.retrieve({ semantic: 'q' })).toFailWith(/fragment recall: fragment query failed: fragment backend down/i);
96
- });
97
- test('normalizes a rejecting embedder into a Failure (never escapes as a rejection)', async () => {
98
- const r = index_1.FragmentSemanticRetriever.create({
99
- backend: {
100
- fragmentIndex: new FakeFragmentIndex([]),
101
- embedQuery: () => Promise.reject(new Error('embedder blew up'))
102
- }
103
- }).orThrow();
104
- expect(await r.retrieve({ semantic: 'q' })).toFailWith(/fragment recall: query embedding failed: .*embedder blew up/i);
105
- });
106
- test('normalizes a rejecting fragment backend into a Failure', async () => {
107
- const rejectingIndex = {
108
- addFragments: (__t, f) => Promise.resolve((0, ts_utils_1.succeed)(f.length)),
109
- remove: (t) => Promise.resolve((0, ts_utils_1.succeed)(t)),
110
- query: () => Promise.reject(new Error('socket hangup'))
111
- };
112
- const r = index_1.FragmentSemanticRetriever.create({
113
- backend: { fragmentIndex: rejectingIndex, embedQuery: okEmbed }
114
- }).orThrow();
115
- expect(await r.retrieve({ semantic: 'q' })).toFailWith(/fragment recall: fragment query failed: .*socket hangup/i);
116
- });
117
- });
118
- //# sourceMappingURL=fragmentSemanticRetriever.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fragmentSemanticRetriever.test.js","sourceRoot":"","sources":["../../../../src/test/unit/retrieve/fragmentSemanticRetriever.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (c) 2026 Erik Fortune\n * SPDX-License-Identifier: MIT\n */\n\nimport '@fgv/ts-utils-jest';\nimport { Result, fail, succeed } from '@fgv/ts-utils';\nimport {\n FRAGMENT_SEMANTIC_UNWIRED_MESSAGE,\n FragmentSemanticRetriever,\n IEdgeTarget,\n IEmbeddedFragment,\n IFragmentLocator,\n IFragmentVectorIndex,\n IVectorQueryHit,\n MemoryId,\n MemoryScopeKey\n} from '../../../index';\n\nfunction target(scope: string, id: string): IEdgeTarget {\n return { scope: scope as MemoryScopeKey, id: id as MemoryId };\n}\n\nfunction loc(start: number, end: number): IFragmentLocator {\n return { start, end };\n}\n\nfunction hit(scope: string, id: string, start: number, end: number, score: number): IVectorQueryHit {\n return { target: target(scope, id), score, locator: loc(start, end) };\n}\n\nconst okEmbed = (): Promise<Result<Float32Array>> => Promise.resolve(succeed(Float32Array.from([0.1, 0.2])));\n\n/** A scripted fragment index that records the args it was queried with. */\nclass FakeFragmentIndex implements IFragmentVectorIndex {\n public lastTopK: number | undefined;\n public lastMaxPerRecord: number | undefined;\n private readonly _hits: ReadonlyArray<IVectorQueryHit>;\n private readonly _fail: boolean;\n public constructor(hits: ReadonlyArray<IVectorQueryHit>, shouldFail: boolean = false) {\n this._hits = hits;\n this._fail = shouldFail;\n }\n public addFragments(\n __t: IEdgeTarget,\n fragments: ReadonlyArray<IEmbeddedFragment>\n ): Promise<Result<number>> {\n return Promise.resolve(succeed(fragments.length));\n }\n public remove(t: IEdgeTarget): Promise<Result<IEdgeTarget>> {\n return Promise.resolve(succeed(t));\n }\n public query(\n __vector: Float32Array,\n topK: number,\n maxPerRecord?: number\n ): Promise<Result<ReadonlyArray<IVectorQueryHit>>> {\n this.lastTopK = topK;\n this.lastMaxPerRecord = maxPerRecord;\n return Promise.resolve(this._fail ? fail('fragment backend down') : succeed(this._hits));\n }\n}\n\ndescribe('FragmentSemanticRetriever', () => {\n test('reports supportsFragmentRecall=false when no backend is wired', () => {\n const r = FragmentSemanticRetriever.create({}).orThrow();\n expect(r.capabilities.supportsFragmentRecall).toBe(false);\n });\n\n test('reports supportsFragmentRecall=true when a backend is wired', () => {\n const r = FragmentSemanticRetriever.create({\n backend: { fragmentIndex: new FakeFragmentIndex([]), embedQuery: okEmbed }\n }).orThrow();\n expect(r.capabilities.supportsFragmentRecall).toBe(true);\n });\n\n test('degrades loudly when no backend is wired — never a silent empty', async () => {\n const r = FragmentSemanticRetriever.create({}).orThrow();\n expect(await r.retrieve({ semantic: 'hi' })).toFailWith(FRAGMENT_SEMANTIC_UNWIRED_MESSAGE);\n });\n\n test('returns the per-fragment hits (target + locator + score) in backend order', async () => {\n const hits = [hit('knowledge', 'doc-a', 0, 5, 0.9), hit('knowledge', 'doc-a', 20, 25, 0.4)];\n const r = FragmentSemanticRetriever.create({\n backend: { fragmentIndex: new FakeFragmentIndex(hits), embedQuery: okEmbed }\n }).orThrow();\n expect(await r.retrieve({ semantic: 'q' })).toSucceedAndSatisfy(\n (result: ReadonlyArray<IVectorQueryHit>) => {\n expect(result).toEqual(hits);\n expect(result[0].locator).toEqual(loc(0, 5));\n expect(result[1].locator).toEqual(loc(20, 25));\n }\n );\n });\n\n test('forwards topK and maxPerRecord to the fragment index', async () => {\n const fragmentIndex = new FakeFragmentIndex([hit('knowledge', 'doc-a', 0, 5, 0.9)]);\n const r = FragmentSemanticRetriever.create({\n backend: { fragmentIndex, embedQuery: okEmbed }\n }).orThrow();\n expect(await r.retrieve({ semantic: 'q', topK: 3, maxPerRecord: 1 })).toSucceed();\n expect(fragmentIndex.lastTopK).toBe(3);\n expect(fragmentIndex.lastMaxPerRecord).toBe(1);\n });\n\n test('defaults topK to 10 and leaves maxPerRecord undefined when the query omits them', async () => {\n const fragmentIndex = new FakeFragmentIndex([hit('knowledge', 'doc-a', 0, 5, 0.9)]);\n const r = FragmentSemanticRetriever.create({\n backend: { fragmentIndex, embedQuery: okEmbed }\n }).orThrow();\n expect(await r.retrieve({ semantic: 'q' })).toSucceed();\n expect(fragmentIndex.lastTopK).toBe(10);\n expect(fragmentIndex.lastMaxPerRecord).toBeUndefined();\n });\n\n test('fails loudly when the embedder fails', async () => {\n const r = FragmentSemanticRetriever.create({\n backend: {\n fragmentIndex: new FakeFragmentIndex([]),\n embedQuery: () => Promise.resolve(fail('no embed model'))\n }\n }).orThrow();\n expect(await r.retrieve({ semantic: 'q' })).toFailWith(\n /fragment recall: query embedding failed: no embed model/i\n );\n });\n\n test('fails loudly when the fragment backend fails', async () => {\n const r = FragmentSemanticRetriever.create({\n backend: { fragmentIndex: new FakeFragmentIndex([], true), embedQuery: okEmbed }\n }).orThrow();\n expect(await r.retrieve({ semantic: 'q' })).toFailWith(\n /fragment recall: fragment query failed: fragment backend down/i\n );\n });\n\n test('normalizes a rejecting embedder into a Failure (never escapes as a rejection)', async () => {\n const r = FragmentSemanticRetriever.create({\n backend: {\n fragmentIndex: new FakeFragmentIndex([]),\n embedQuery: () => Promise.reject(new Error('embedder blew up'))\n }\n }).orThrow();\n expect(await r.retrieve({ semantic: 'q' })).toFailWith(\n /fragment recall: query embedding failed: .*embedder blew up/i\n );\n });\n\n test('normalizes a rejecting fragment backend into a Failure', async () => {\n const rejectingIndex: IFragmentVectorIndex = {\n addFragments: (__t: IEdgeTarget, f: ReadonlyArray<IEmbeddedFragment>) =>\n Promise.resolve(succeed(f.length)),\n remove: (t: IEdgeTarget) => Promise.resolve(succeed(t)),\n query: () => Promise.reject(new Error('socket hangup'))\n };\n const r = FragmentSemanticRetriever.create({\n backend: { fragmentIndex: rejectingIndex, embedQuery: okEmbed }\n }).orThrow();\n expect(await r.retrieve({ semantic: 'q' })).toFailWith(\n /fragment recall: fragment query failed: .*socket hangup/i\n );\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- import '@fgv/ts-utils-jest';
2
- //# sourceMappingURL=linkTraversalRetriever.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linkTraversalRetriever.test.d.ts","sourceRoot":"","sources":["../../../../src/test/unit/retrieve/linkTraversalRetriever.test.ts"],"names":[],"mappings":"AAKA,OAAO,oBAAoB,CAAC"}