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

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 (341) 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/store/fileTreeMemoryStore.js +52 -131
  7. package/dist/packlets/store/fileTreeMemoryStore.js.map +1 -1
  8. package/dist/packlets/store/vectorMaintenance.js +251 -0
  9. package/dist/packlets/store/vectorMaintenance.js.map +1 -0
  10. package/dist/packlets/vector/inMemoryCosineIndex.js +81 -18
  11. package/dist/packlets/vector/inMemoryCosineIndex.js.map +1 -1
  12. package/dist/packlets/vector/inMemoryFragmentCosineIndex.js +7 -0
  13. package/dist/packlets/vector/inMemoryFragmentCosineIndex.js.map +1 -1
  14. package/dist/packlets/vector/vectorIndex.js.map +1 -1
  15. package/dist/ts-agent-memory.d.ts +297 -66
  16. package/lib/packlets/ingest/orchestrator.d.ts.map +1 -1
  17. package/lib/packlets/ingest/orchestrator.js +11 -1
  18. package/lib/packlets/ingest/orchestrator.js.map +1 -1
  19. package/lib/packlets/observe/memoryObservationStore.d.ts.map +1 -1
  20. package/lib/packlets/observe/memoryObservationStore.js +6 -0
  21. package/lib/packlets/observe/memoryObservationStore.js.map +1 -1
  22. package/lib/packlets/observe/observer.d.ts +61 -0
  23. package/lib/packlets/observe/observer.d.ts.map +1 -1
  24. package/lib/packlets/observe/observer.js.map +1 -1
  25. package/lib/packlets/store/fileTreeMemoryStore.d.ts +66 -59
  26. package/lib/packlets/store/fileTreeMemoryStore.d.ts.map +1 -1
  27. package/lib/packlets/store/fileTreeMemoryStore.js +52 -131
  28. package/lib/packlets/store/fileTreeMemoryStore.js.map +1 -1
  29. package/lib/packlets/store/vectorMaintenance.d.ts +149 -0
  30. package/lib/packlets/store/vectorMaintenance.d.ts.map +1 -0
  31. package/lib/packlets/store/vectorMaintenance.js +255 -0
  32. package/lib/packlets/store/vectorMaintenance.js.map +1 -0
  33. package/lib/packlets/vector/inMemoryCosineIndex.d.ts +30 -7
  34. package/lib/packlets/vector/inMemoryCosineIndex.d.ts.map +1 -1
  35. package/lib/packlets/vector/inMemoryCosineIndex.js +80 -17
  36. package/lib/packlets/vector/inMemoryCosineIndex.js.map +1 -1
  37. package/lib/packlets/vector/inMemoryFragmentCosineIndex.d.ts +7 -0
  38. package/lib/packlets/vector/inMemoryFragmentCosineIndex.d.ts.map +1 -1
  39. package/lib/packlets/vector/inMemoryFragmentCosineIndex.js +7 -0
  40. package/lib/packlets/vector/inMemoryFragmentCosineIndex.js.map +1 -1
  41. package/lib/packlets/vector/vectorIndex.d.ts +129 -1
  42. package/lib/packlets/vector/vectorIndex.d.ts.map +1 -1
  43. package/lib/packlets/vector/vectorIndex.js.map +1 -1
  44. package/package.json +17 -7
  45. package/.rush/temp/5667e36f1c0cc503a5c20a3ebff76e7b9a702d41.tar.log +0 -468
  46. package/.rush/temp/chunked-rush-logs/ts-agent-memory.build.chunks.jsonl +0 -9
  47. package/.rush/temp/operation/build/all.log +0 -9
  48. package/.rush/temp/operation/build/log-chunks.jsonl +0 -9
  49. package/.rush/temp/operation/build/state.json +0 -3
  50. package/.rush/temp/shrinkwrap-deps.json +0 -689
  51. package/config/api-extractor.json +0 -343
  52. package/config/jest.config.json +0 -14
  53. package/config/rig.json +0 -4
  54. package/dist/test/unit/converters/antagonistRoundTrip.test.js +0 -95
  55. package/dist/test/unit/converters/antagonistRoundTrip.test.js.map +0 -1
  56. package/dist/test/unit/converters/bodyConverterRegistry.test.js +0 -72
  57. package/dist/test/unit/converters/bodyConverterRegistry.test.js.map +0 -1
  58. package/dist/test/unit/converters/envelopeConverter.test.js +0 -313
  59. package/dist/test/unit/converters/envelopeConverter.test.js.map +0 -1
  60. package/dist/test/unit/index/memoryIndex.test.js +0 -214
  61. package/dist/test/unit/index/memoryIndex.test.js.map +0 -1
  62. package/dist/test/unit/ingest/antagonistCycleAndParity.test.js +0 -277
  63. package/dist/test/unit/ingest/antagonistCycleAndParity.test.js.map +0 -1
  64. package/dist/test/unit/ingest/cycleGuard.test.js +0 -81
  65. package/dist/test/unit/ingest/cycleGuard.test.js.map +0 -1
  66. package/dist/test/unit/ingest/dedupScope.test.js +0 -434
  67. package/dist/test/unit/ingest/dedupScope.test.js.map +0 -1
  68. package/dist/test/unit/ingest/orchestrator.test.js +0 -1058
  69. package/dist/test/unit/ingest/orchestrator.test.js.map +0 -1
  70. package/dist/test/unit/observe/memoryObservationStore.test.js +0 -118
  71. package/dist/test/unit/observe/memoryObservationStore.test.js.map +0 -1
  72. package/dist/test/unit/retrieve/fragmentSemanticRetriever.test.js +0 -116
  73. package/dist/test/unit/retrieve/fragmentSemanticRetriever.test.js.map +0 -1
  74. package/dist/test/unit/retrieve/linkTraversalRetriever.test.js +0 -257
  75. package/dist/test/unit/retrieve/linkTraversalRetriever.test.js.map +0 -1
  76. package/dist/test/unit/retrieve/retrievers.test.js +0 -768
  77. package/dist/test/unit/retrieve/retrievers.test.js.map +0 -1
  78. package/dist/test/unit/retrieve/temporalRetrievers.test.js +0 -182
  79. package/dist/test/unit/retrieve/temporalRetrievers.test.js.map +0 -1
  80. package/dist/test/unit/store/antagonistTemporalBoundary.test.js +0 -120
  81. package/dist/test/unit/store/antagonistTemporalBoundary.test.js.map +0 -1
  82. package/dist/test/unit/store/embedOnWrite.test.js +0 -317
  83. package/dist/test/unit/store/embedOnWrite.test.js.map +0 -1
  84. package/dist/test/unit/store/fileTreeMemoryStore.test.js +0 -778
  85. package/dist/test/unit/store/fileTreeMemoryStore.test.js.map +0 -1
  86. package/dist/test/unit/store/fragmentEmbedOnWrite.test.js +0 -255
  87. package/dist/test/unit/store/fragmentEmbedOnWrite.test.js.map +0 -1
  88. package/dist/test/unit/store/indexInjection.test.js +0 -432
  89. package/dist/test/unit/store/indexInjection.test.js.map +0 -1
  90. package/dist/test/unit/store/lenientOpen.test.js +0 -248
  91. package/dist/test/unit/store/lenientOpen.test.js.map +0 -1
  92. package/dist/test/unit/store/listScoped.test.js +0 -109
  93. package/dist/test/unit/store/listScoped.test.js.map +0 -1
  94. package/dist/test/unit/store/observations.test.js +0 -239
  95. package/dist/test/unit/store/observations.test.js.map +0 -1
  96. package/dist/test/unit/store/rankAxis.test.js +0 -254
  97. package/dist/test/unit/store/rankAxis.test.js.map +0 -1
  98. package/dist/test/unit/store/scopeEncoding.test.js +0 -24
  99. package/dist/test/unit/store/scopeEncoding.test.js.map +0 -1
  100. package/dist/test/unit/store/temporalStore.test.js +0 -398
  101. package/dist/test/unit/store/temporalStore.test.js.map +0 -1
  102. package/dist/test/unit/tools/memoryTools.test.js +0 -842
  103. package/dist/test/unit/tools/memoryTools.test.js.map +0 -1
  104. package/dist/test/unit/types/identityCodec.test.js +0 -187
  105. package/dist/test/unit/types/identityCodec.test.js.map +0 -1
  106. package/dist/test/unit/types/ids.test.js +0 -84
  107. package/dist/test/unit/types/ids.test.js.map +0 -1
  108. package/dist/test/unit/types/temporalCodec.test.js +0 -203
  109. package/dist/test/unit/types/temporalCodec.test.js.map +0 -1
  110. package/dist/test/unit/types/temporalPolicy.test.js +0 -83
  111. package/dist/test/unit/types/temporalPolicy.test.js.map +0 -1
  112. package/dist/test/unit/types/writePolicy.test.js +0 -331
  113. package/dist/test/unit/types/writePolicy.test.js.map +0 -1
  114. package/dist/test/unit/vector/fragmentConverters.test.js +0 -58
  115. package/dist/test/unit/vector/fragmentConverters.test.js.map +0 -1
  116. package/dist/test/unit/vector/inMemoryCosineIndex.test.js +0 -252
  117. package/dist/test/unit/vector/inMemoryCosineIndex.test.js.map +0 -1
  118. package/dist/test/unit/vector/inMemoryFragmentCosineIndex.test.js +0 -362
  119. package/dist/test/unit/vector/inMemoryFragmentCosineIndex.test.js.map +0 -1
  120. package/dist/test/unit/vector/vectorIndex.test.js +0 -51
  121. package/dist/test/unit/vector/vectorIndex.test.js.map +0 -1
  122. package/eslint.config.js +0 -15
  123. package/etc/ts-agent-memory.api.md +0 -940
  124. package/lib/test/unit/converters/antagonistRoundTrip.test.d.ts +0 -10
  125. package/lib/test/unit/converters/antagonistRoundTrip.test.d.ts.map +0 -1
  126. package/lib/test/unit/converters/antagonistRoundTrip.test.js +0 -97
  127. package/lib/test/unit/converters/antagonistRoundTrip.test.js.map +0 -1
  128. package/lib/test/unit/converters/bodyConverterRegistry.test.d.ts +0 -2
  129. package/lib/test/unit/converters/bodyConverterRegistry.test.d.ts.map +0 -1
  130. package/lib/test/unit/converters/bodyConverterRegistry.test.js +0 -74
  131. package/lib/test/unit/converters/bodyConverterRegistry.test.js.map +0 -1
  132. package/lib/test/unit/converters/envelopeConverter.test.d.ts +0 -2
  133. package/lib/test/unit/converters/envelopeConverter.test.d.ts.map +0 -1
  134. package/lib/test/unit/converters/envelopeConverter.test.js +0 -315
  135. package/lib/test/unit/converters/envelopeConverter.test.js.map +0 -1
  136. package/lib/test/unit/index/memoryIndex.test.d.ts +0 -2
  137. package/lib/test/unit/index/memoryIndex.test.d.ts.map +0 -1
  138. package/lib/test/unit/index/memoryIndex.test.js +0 -216
  139. package/lib/test/unit/index/memoryIndex.test.js.map +0 -1
  140. package/lib/test/unit/ingest/antagonistCycleAndParity.test.d.ts +0 -9
  141. package/lib/test/unit/ingest/antagonistCycleAndParity.test.d.ts.map +0 -1
  142. package/lib/test/unit/ingest/antagonistCycleAndParity.test.js +0 -279
  143. package/lib/test/unit/ingest/antagonistCycleAndParity.test.js.map +0 -1
  144. package/lib/test/unit/ingest/cycleGuard.test.d.ts +0 -2
  145. package/lib/test/unit/ingest/cycleGuard.test.d.ts.map +0 -1
  146. package/lib/test/unit/ingest/cycleGuard.test.js +0 -83
  147. package/lib/test/unit/ingest/cycleGuard.test.js.map +0 -1
  148. package/lib/test/unit/ingest/dedupScope.test.d.ts +0 -2
  149. package/lib/test/unit/ingest/dedupScope.test.d.ts.map +0 -1
  150. package/lib/test/unit/ingest/dedupScope.test.js +0 -436
  151. package/lib/test/unit/ingest/dedupScope.test.js.map +0 -1
  152. package/lib/test/unit/ingest/orchestrator.test.d.ts +0 -2
  153. package/lib/test/unit/ingest/orchestrator.test.d.ts.map +0 -1
  154. package/lib/test/unit/ingest/orchestrator.test.js +0 -1060
  155. package/lib/test/unit/ingest/orchestrator.test.js.map +0 -1
  156. package/lib/test/unit/observe/memoryObservationStore.test.d.ts +0 -2
  157. package/lib/test/unit/observe/memoryObservationStore.test.d.ts.map +0 -1
  158. package/lib/test/unit/observe/memoryObservationStore.test.js +0 -120
  159. package/lib/test/unit/observe/memoryObservationStore.test.js.map +0 -1
  160. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.d.ts +0 -2
  161. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.d.ts.map +0 -1
  162. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.js +0 -118
  163. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.js.map +0 -1
  164. package/lib/test/unit/retrieve/linkTraversalRetriever.test.d.ts +0 -2
  165. package/lib/test/unit/retrieve/linkTraversalRetriever.test.d.ts.map +0 -1
  166. package/lib/test/unit/retrieve/linkTraversalRetriever.test.js +0 -259
  167. package/lib/test/unit/retrieve/linkTraversalRetriever.test.js.map +0 -1
  168. package/lib/test/unit/retrieve/retrievers.test.d.ts +0 -2
  169. package/lib/test/unit/retrieve/retrievers.test.d.ts.map +0 -1
  170. package/lib/test/unit/retrieve/retrievers.test.js +0 -770
  171. package/lib/test/unit/retrieve/retrievers.test.js.map +0 -1
  172. package/lib/test/unit/retrieve/temporalRetrievers.test.d.ts +0 -2
  173. package/lib/test/unit/retrieve/temporalRetrievers.test.d.ts.map +0 -1
  174. package/lib/test/unit/retrieve/temporalRetrievers.test.js +0 -184
  175. package/lib/test/unit/retrieve/temporalRetrievers.test.js.map +0 -1
  176. package/lib/test/unit/store/antagonistTemporalBoundary.test.d.ts +0 -9
  177. package/lib/test/unit/store/antagonistTemporalBoundary.test.d.ts.map +0 -1
  178. package/lib/test/unit/store/antagonistTemporalBoundary.test.js +0 -122
  179. package/lib/test/unit/store/antagonistTemporalBoundary.test.js.map +0 -1
  180. package/lib/test/unit/store/embedOnWrite.test.d.ts +0 -2
  181. package/lib/test/unit/store/embedOnWrite.test.d.ts.map +0 -1
  182. package/lib/test/unit/store/embedOnWrite.test.js +0 -319
  183. package/lib/test/unit/store/embedOnWrite.test.js.map +0 -1
  184. package/lib/test/unit/store/fileTreeMemoryStore.test.d.ts +0 -2
  185. package/lib/test/unit/store/fileTreeMemoryStore.test.d.ts.map +0 -1
  186. package/lib/test/unit/store/fileTreeMemoryStore.test.js +0 -780
  187. package/lib/test/unit/store/fileTreeMemoryStore.test.js.map +0 -1
  188. package/lib/test/unit/store/fragmentEmbedOnWrite.test.d.ts +0 -2
  189. package/lib/test/unit/store/fragmentEmbedOnWrite.test.d.ts.map +0 -1
  190. package/lib/test/unit/store/fragmentEmbedOnWrite.test.js +0 -257
  191. package/lib/test/unit/store/fragmentEmbedOnWrite.test.js.map +0 -1
  192. package/lib/test/unit/store/indexInjection.test.d.ts +0 -2
  193. package/lib/test/unit/store/indexInjection.test.d.ts.map +0 -1
  194. package/lib/test/unit/store/indexInjection.test.js +0 -434
  195. package/lib/test/unit/store/indexInjection.test.js.map +0 -1
  196. package/lib/test/unit/store/lenientOpen.test.d.ts +0 -2
  197. package/lib/test/unit/store/lenientOpen.test.d.ts.map +0 -1
  198. package/lib/test/unit/store/lenientOpen.test.js +0 -250
  199. package/lib/test/unit/store/lenientOpen.test.js.map +0 -1
  200. package/lib/test/unit/store/listScoped.test.d.ts +0 -2
  201. package/lib/test/unit/store/listScoped.test.d.ts.map +0 -1
  202. package/lib/test/unit/store/listScoped.test.js +0 -111
  203. package/lib/test/unit/store/listScoped.test.js.map +0 -1
  204. package/lib/test/unit/store/observations.test.d.ts +0 -2
  205. package/lib/test/unit/store/observations.test.d.ts.map +0 -1
  206. package/lib/test/unit/store/observations.test.js +0 -241
  207. package/lib/test/unit/store/observations.test.js.map +0 -1
  208. package/lib/test/unit/store/rankAxis.test.d.ts +0 -2
  209. package/lib/test/unit/store/rankAxis.test.d.ts.map +0 -1
  210. package/lib/test/unit/store/rankAxis.test.js +0 -256
  211. package/lib/test/unit/store/rankAxis.test.js.map +0 -1
  212. package/lib/test/unit/store/scopeEncoding.test.d.ts +0 -2
  213. package/lib/test/unit/store/scopeEncoding.test.d.ts.map +0 -1
  214. package/lib/test/unit/store/scopeEncoding.test.js +0 -26
  215. package/lib/test/unit/store/scopeEncoding.test.js.map +0 -1
  216. package/lib/test/unit/store/temporalStore.test.d.ts +0 -2
  217. package/lib/test/unit/store/temporalStore.test.d.ts.map +0 -1
  218. package/lib/test/unit/store/temporalStore.test.js +0 -400
  219. package/lib/test/unit/store/temporalStore.test.js.map +0 -1
  220. package/lib/test/unit/tools/memoryTools.test.d.ts +0 -2
  221. package/lib/test/unit/tools/memoryTools.test.d.ts.map +0 -1
  222. package/lib/test/unit/tools/memoryTools.test.js +0 -844
  223. package/lib/test/unit/tools/memoryTools.test.js.map +0 -1
  224. package/lib/test/unit/types/identityCodec.test.d.ts +0 -2
  225. package/lib/test/unit/types/identityCodec.test.d.ts.map +0 -1
  226. package/lib/test/unit/types/identityCodec.test.js +0 -189
  227. package/lib/test/unit/types/identityCodec.test.js.map +0 -1
  228. package/lib/test/unit/types/ids.test.d.ts +0 -2
  229. package/lib/test/unit/types/ids.test.d.ts.map +0 -1
  230. package/lib/test/unit/types/ids.test.js +0 -86
  231. package/lib/test/unit/types/ids.test.js.map +0 -1
  232. package/lib/test/unit/types/temporalCodec.test.d.ts +0 -2
  233. package/lib/test/unit/types/temporalCodec.test.d.ts.map +0 -1
  234. package/lib/test/unit/types/temporalCodec.test.js +0 -205
  235. package/lib/test/unit/types/temporalCodec.test.js.map +0 -1
  236. package/lib/test/unit/types/temporalPolicy.test.d.ts +0 -2
  237. package/lib/test/unit/types/temporalPolicy.test.d.ts.map +0 -1
  238. package/lib/test/unit/types/temporalPolicy.test.js +0 -85
  239. package/lib/test/unit/types/temporalPolicy.test.js.map +0 -1
  240. package/lib/test/unit/types/writePolicy.test.d.ts +0 -2
  241. package/lib/test/unit/types/writePolicy.test.d.ts.map +0 -1
  242. package/lib/test/unit/types/writePolicy.test.js +0 -333
  243. package/lib/test/unit/types/writePolicy.test.js.map +0 -1
  244. package/lib/test/unit/vector/fragmentConverters.test.d.ts +0 -2
  245. package/lib/test/unit/vector/fragmentConverters.test.d.ts.map +0 -1
  246. package/lib/test/unit/vector/fragmentConverters.test.js +0 -60
  247. package/lib/test/unit/vector/fragmentConverters.test.js.map +0 -1
  248. package/lib/test/unit/vector/inMemoryCosineIndex.test.d.ts +0 -2
  249. package/lib/test/unit/vector/inMemoryCosineIndex.test.d.ts.map +0 -1
  250. package/lib/test/unit/vector/inMemoryCosineIndex.test.js +0 -254
  251. package/lib/test/unit/vector/inMemoryCosineIndex.test.js.map +0 -1
  252. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.d.ts +0 -2
  253. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.d.ts.map +0 -1
  254. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.js +0 -364
  255. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.js.map +0 -1
  256. package/lib/test/unit/vector/vectorIndex.test.d.ts +0 -2
  257. package/lib/test/unit/vector/vectorIndex.test.d.ts.map +0 -1
  258. package/lib/test/unit/vector/vectorIndex.test.js +0 -53
  259. package/lib/test/unit/vector/vectorIndex.test.js.map +0 -1
  260. package/rush-logs/ts-agent-memory.build.cache.log +0 -3
  261. package/rush-logs/ts-agent-memory.build.log +0 -9
  262. package/src/index.ts +0 -14
  263. package/src/packlets/converters/bodyConverterRegistry.ts +0 -105
  264. package/src/packlets/converters/envelopeConverter.ts +0 -233
  265. package/src/packlets/converters/index.ts +0 -7
  266. package/src/packlets/index/index.ts +0 -6
  267. package/src/packlets/index/memoryIndex.ts +0 -332
  268. package/src/packlets/ingest/cycleGuard.ts +0 -153
  269. package/src/packlets/ingest/hostStages.ts +0 -111
  270. package/src/packlets/ingest/index.ts +0 -9
  271. package/src/packlets/ingest/model.ts +0 -195
  272. package/src/packlets/ingest/orchestrator.ts +0 -968
  273. package/src/packlets/observe/index.ts +0 -7
  274. package/src/packlets/observe/memoryObservationStore.ts +0 -153
  275. package/src/packlets/observe/observer.ts +0 -119
  276. package/src/packlets/retrieve/fragmentSemanticRetriever.ts +0 -138
  277. package/src/packlets/retrieve/hybridRetriever.ts +0 -194
  278. package/src/packlets/retrieve/index.ts +0 -14
  279. package/src/packlets/retrieve/linkTraversalRetriever.ts +0 -158
  280. package/src/packlets/retrieve/recencyRetriever.ts +0 -54
  281. package/src/packlets/retrieve/retriever.ts +0 -291
  282. package/src/packlets/retrieve/semanticRetriever.ts +0 -152
  283. package/src/packlets/retrieve/structuredFilterRetriever.ts +0 -58
  284. package/src/packlets/retrieve/tagRetriever.ts +0 -58
  285. package/src/packlets/retrieve/temporalRetrievers.ts +0 -210
  286. package/src/packlets/store/fileTreeMemoryStore.ts +0 -1872
  287. package/src/packlets/store/index.ts +0 -7
  288. package/src/packlets/store/scopeEncoding.ts +0 -36
  289. package/src/packlets/tools/index.ts +0 -6
  290. package/src/packlets/tools/memoryTools.ts +0 -706
  291. package/src/packlets/types/envelope.ts +0 -196
  292. package/src/packlets/types/filenameSafety.ts +0 -57
  293. package/src/packlets/types/identityCodec.ts +0 -447
  294. package/src/packlets/types/ids.ts +0 -124
  295. package/src/packlets/types/index.ts +0 -11
  296. package/src/packlets/types/temporal.ts +0 -96
  297. package/src/packlets/types/writePolicy.ts +0 -612
  298. package/src/packlets/vector/fragmentConverters.ts +0 -55
  299. package/src/packlets/vector/inMemoryCosineIndex.ts +0 -196
  300. package/src/packlets/vector/inMemoryFragmentCosineIndex.ts +0 -289
  301. package/src/packlets/vector/index.ts +0 -9
  302. package/src/packlets/vector/vectorIndex.ts +0 -273
  303. package/src/test/unit/converters/antagonistRoundTrip.test.ts +0 -110
  304. package/src/test/unit/converters/bodyConverterRegistry.test.ts +0 -89
  305. package/src/test/unit/converters/envelopeConverter.test.ts +0 -418
  306. package/src/test/unit/index/memoryIndex.test.ts +0 -272
  307. package/src/test/unit/ingest/antagonistCycleAndParity.test.ts +0 -367
  308. package/src/test/unit/ingest/cycleGuard.test.ts +0 -110
  309. package/src/test/unit/ingest/dedupScope.test.ts +0 -542
  310. package/src/test/unit/ingest/orchestrator.test.ts +0 -1355
  311. package/src/test/unit/observe/memoryObservationStore.test.ts +0 -158
  312. package/src/test/unit/retrieve/fragmentSemanticRetriever.test.ts +0 -163
  313. package/src/test/unit/retrieve/linkTraversalRetriever.test.ts +0 -329
  314. package/src/test/unit/retrieve/retrievers.test.ts +0 -1018
  315. package/src/test/unit/retrieve/temporalRetrievers.test.ts +0 -226
  316. package/src/test/unit/store/antagonistTemporalBoundary.test.ts +0 -158
  317. package/src/test/unit/store/embedOnWrite.test.ts +0 -418
  318. package/src/test/unit/store/fileTreeMemoryStore.test.ts +0 -1041
  319. package/src/test/unit/store/fragmentEmbedOnWrite.test.ts +0 -349
  320. package/src/test/unit/store/indexInjection.test.ts +0 -550
  321. package/src/test/unit/store/lenientOpen.test.ts +0 -292
  322. package/src/test/unit/store/listScoped.test.ts +0 -138
  323. package/src/test/unit/store/observations.test.ts +0 -290
  324. package/src/test/unit/store/rankAxis.test.ts +0 -349
  325. package/src/test/unit/store/scopeEncoding.test.ts +0 -37
  326. package/src/test/unit/store/temporalStore.test.ts +0 -469
  327. package/src/test/unit/tools/memoryTools.test.ts +0 -1121
  328. package/src/test/unit/types/identityCodec.test.ts +0 -266
  329. package/src/test/unit/types/ids.test.ts +0 -94
  330. package/src/test/unit/types/temporalCodec.test.ts +0 -259
  331. package/src/test/unit/types/temporalPolicy.test.ts +0 -124
  332. package/src/test/unit/types/writePolicy.test.ts +0 -446
  333. package/src/test/unit/vector/fragmentConverters.test.ts +0 -80
  334. package/src/test/unit/vector/inMemoryCosineIndex.test.ts +0 -318
  335. package/src/test/unit/vector/inMemoryFragmentCosineIndex.test.ts +0 -477
  336. package/src/test/unit/vector/vectorIndex.test.ts +0 -64
  337. package/temp/build/lint/_eslint-5eVG3S6w.json +0 -306
  338. package/temp/build/typescript/ts_8nwakTlr.json +0 -1
  339. package/temp/ts-agent-memory.api.json +0 -21030
  340. package/temp/ts-agent-memory.api.md +0 -940
  341. package/tsconfig.json +0 -8
@@ -6,6 +6,7 @@ import { Hash, Logging, fail, mapResults, mapSuccess, succeed } from '@fgv/ts-ut
6
6
  import { FileTree } from '@fgv/ts-json-base';
7
7
  import { DEFAULT_DEDUP_SCOPE, KnowledgeLwwPolicy, isTemporalIdentityCodec, isTemporalRecord, isVersionCurrent, selectCurrentVersion, selectVersionAsOf } from '../types';
8
8
  import { parseMemoryFile, serializeMemoryFile } from '../converters';
9
+ import { VectorMaintenance } from './vectorMaintenance';
9
10
  import { MemoryIndex } from '../index';
10
11
  import { defaultMemoryScopeEncoding } from './scopeEncoding';
11
12
  /** The on-disk extension for a memory record file. */
@@ -26,11 +27,13 @@ const MEMORY_FILE_EXTENSION = '.md';
26
27
  */
27
28
  export class FileTreeMemoryStore {
28
29
  constructor(params) {
30
+ var _a;
29
31
  this._root = params.root;
30
32
  this._registry = params.registry;
31
33
  this._writePolicies = params.writePolicies;
32
34
  this._codecs = params.codecs;
33
35
  this._rankProjectors = params.rankProjectors;
36
+ this._embedKinds = (_a = params.embedKinds) !== null && _a !== void 0 ? _a : undefined;
34
37
  this._defaultCodec = params.defaultCodec;
35
38
  this._defaultPolicy = params.defaultPolicy;
36
39
  this._scopeEncoding = params.scopeEncoding;
@@ -39,10 +42,14 @@ export class FileTreeMemoryStore {
39
42
  this._hasher = new Hash.Crc32Normalizer();
40
43
  this._observers = params.observers;
41
44
  this._logger = params.logger;
42
- this._vectorIndex = params.vectorIndex;
43
- this._embed = params.embed;
44
- this._fragmentIndex = params.fragmentIndex;
45
- this._fragmentEmbedder = params.fragmentEmbedder;
45
+ this._vectors = new VectorMaintenance({
46
+ vectorIndex: params.vectorIndex,
47
+ embed: params.embed,
48
+ fragmentIndex: params.fragmentIndex,
49
+ fragmentEmbedder: params.fragmentEmbedder,
50
+ warn: (message) => this._warnSwallowed(message),
51
+ embedsKind: (kind) => this.embedsKind(kind)
52
+ });
46
53
  this._skippedRecords = [];
47
54
  this._seq = 0;
48
55
  this._observationSeq = 0;
@@ -75,6 +82,7 @@ export class FileTreeMemoryStore {
75
82
  writePolicies: (_a = params.writePolicies) !== null && _a !== void 0 ? _a : new Map(),
76
83
  codecs: (_b = params.codecs) !== null && _b !== void 0 ? _b : new Map(),
77
84
  rankProjectors: (_c = params.rankProjectors) !== null && _c !== void 0 ? _c : new Map(),
85
+ embedKinds: params.embedKinds,
78
86
  defaultCodec: params.defaultCodec,
79
87
  defaultPolicy,
80
88
  scopeEncoding: (_d = params.scopeEncoding) !== null && _d !== void 0 ? _d : defaultMemoryScopeEncoding,
@@ -168,7 +176,14 @@ export class FileTreeMemoryStore {
168
176
  }
169
177
  /** {@inheritDoc IMemoryStore.asRecordSource} */
170
178
  asRecordSource() {
171
- return { list: () => this.listScoped() };
179
+ return {
180
+ // Filtered to the kinds that participate in the record vector index. This
181
+ // source exists to drive `IVectorIndex` rebuilds, so a kind excluded from the
182
+ // index has no business being re-embedded on open — which is where the cost
183
+ // is worst, since a rebuild embeds the whole vault serially. With no
184
+ // `embedKinds` declaration every kind passes and this is the identity filter.
185
+ list: async () => (await this.listScoped()).onSuccess((scoped) => succeed(scoped.filter((s) => this.embedsKind(s.record.envelope.kind))))
186
+ };
172
187
  }
173
188
  /**
174
189
  * Collapse temporal records to the single version valid at `asOf` per entity;
@@ -210,7 +225,8 @@ export class FileTreeMemoryStore {
210
225
  outcome: result.isSuccess() ? 'success' : 'failure',
211
226
  id: result.isSuccess() ? result.value.record.envelope.id : record.envelope.id,
212
227
  provenance: record.envelope.provenance,
213
- error: result.isFailure() ? result.message : undefined
228
+ error: result.isFailure() ? result.message : undefined,
229
+ embed: result.isSuccess() ? result.value.embed : undefined
214
230
  });
215
231
  // Fire one `'delete'` observation per record evicted by cap-cull. The
216
232
  // evicted records are always in the same `(scope, kind)` cohort as the
@@ -266,7 +282,8 @@ export class FileTreeMemoryStore {
266
282
  kind,
267
283
  outcome: details.outcome,
268
284
  error: details.error,
269
- provenance: details.provenance
285
+ provenance: details.provenance,
286
+ embed: details.embed
270
287
  };
271
288
  const awaited = [];
272
289
  for (const observer of this._observers) {
@@ -419,89 +436,27 @@ export class FileTreeMemoryStore {
419
436
  }
420
437
  return this._buildRecord(record, body, existing, policy, hash)
421
438
  .onSuccess((built) => succeed(this._stampRank(built)))
422
- .thenOnSuccess((built) => this._embedOnWrite(built, scope))
423
- .thenOnSuccess((built) => this._embedFragmentsOnWrite(built, scope))
424
- .onSuccess((embeddedBuilt) => this._persist(embeddedBuilt, scope, idStem))
425
- .thenOnSuccess(async (persisted) => {
439
+ .thenOnSuccess((built) => this._vectors.embedOnWrite(built, scope))
440
+ .thenOnSuccess(async (embedded) => (await this._vectors.embedFragmentsOnWrite(embedded.record, scope)).onSuccess((withFragments) => succeed(Object.assign(Object.assign({}, embedded), { record: withFragments }))))
441
+ .onSuccess((embedded) => this._persist(embedded.record, scope, idStem).onSuccess((persisted) => succeed({ persisted, stale: embedded.stale, embed: embedded.embed })))
442
+ .thenOnSuccess(async ({ persisted, stale, embed }) => {
426
443
  // Everything after the authoritative `_persist` commit is best-effort and
427
444
  // never turns a committed write into a `Failure`:
445
+ // - a stale vector superseded by a decline is pruned here rather than at
446
+ // the point of the decline, because a `_persist` that fails leaves the
447
+ // PREVIOUS content on disk — content that vector is still an accurate
448
+ // embedding of. Pruning early would delete a correct vector on behalf
449
+ // of a write that never landed;
428
450
  // - a cull-oldest eviction that fails is logged (the per-(scope,kind)
429
451
  // cap may be transiently exceeded; the next write's admission restores
430
452
  // it), and only the successfully-evicted ids flow onward;
431
453
  // - vector pruning of the evicted cohort is likewise best-effort.
454
+ await this._vectors.pruneStaleVector(stale);
432
455
  const evicted = this._applyEvictions(decision, scope);
433
- await this._removeEvictedVectors(evicted, scope);
434
- return succeed({ record: persisted, evicted });
456
+ await this._vectors.removeEvictedVectors(evicted, scope);
457
+ return succeed({ record: persisted, evicted, embed });
435
458
  });
436
459
  }
437
- /**
438
- * Best-effort embed-on-write. When a vector index AND an embedder are wired,
439
- * embeds the built record, `add`s the vector (replace semantics handle a same-id
440
- * re-embed — no explicit remove), and stamps the returned `embeddingRef`. A
441
- * failure (returned `fail` OR a thrown/rejected hook) is logged and the
442
- * unembedded record is returned unchanged — the put still persists, and the
443
- * derived index is reconciled by a later `rebuild`. A pass-through no-op when
444
- * unwired (byte-identical record).
445
- *
446
- * Always succeeds (`Result` is the chain's shape, never a vector-induced
447
- * failure).
448
- */
449
- async _embedOnWrite(built, scope) {
450
- if (this._vectorIndex === undefined || this._embed === undefined) {
451
- return succeed(built);
452
- }
453
- const vectorIndex = this._vectorIndex;
454
- const embed = this._embed;
455
- const target = { scope, id: built.envelope.id };
456
- const embedded = await this._tryVectorOp(() => embed(built), `embedding '${built.envelope.id}'`);
457
- if (embedded.isFailure()) {
458
- return succeed(built);
459
- }
460
- const added = await this._tryVectorOp(() => vectorIndex.add(target, embedded.value), `vector add for '${built.envelope.id}'`);
461
- if (added.isFailure()) {
462
- return succeed(built);
463
- }
464
- return succeed({ envelope: Object.assign(Object.assign({}, built.envelope), { embeddingRef: added.value }), body: built.body });
465
- }
466
- /**
467
- * Best-effort fragment-embed-on-write. When a fragment index AND a fragment
468
- * embedder are wired, chunks + embeds the built record and replaces its
469
- * fragments in the index (`addFragments` is whole-record-replace, so a re-authored
470
- * document never leaves stale fragments behind — no explicit remove needed). A
471
- * failure (returned `fail` OR a thrown/rejected hook) is logged and the record is
472
- * returned unchanged — the put still persists, and the fragment index is a derived
473
- * view a later `rebuild` reconciles. Unlike {@link FileTreeMemoryStore._embedOnWrite}
474
- * it stamps nothing on the record (fragments have no per-record `embeddingRef`
475
- * analog). A pass-through no-op when unwired (byte-identical record).
476
- */
477
- async _embedFragmentsOnWrite(built, scope) {
478
- if (this._fragmentIndex === undefined || this._fragmentEmbedder === undefined) {
479
- return succeed(built);
480
- }
481
- const fragmentIndex = this._fragmentIndex;
482
- const fragmentEmbedder = this._fragmentEmbedder;
483
- const target = { scope, id: built.envelope.id };
484
- const embedded = await this._tryVectorOp(() => fragmentEmbedder(built), `fragment embedding '${built.envelope.id}'`);
485
- if (embedded.isFailure()) {
486
- return succeed(built);
487
- }
488
- await this._tryVectorOp(() => fragmentIndex.addFragments(target, embedded.value), `fragment add for '${built.envelope.id}'`);
489
- return succeed(built);
490
- }
491
- /**
492
- * Best-effort fragment removal. A no-op unless the full fragment lifecycle is
493
- * wired (both an index AND an embedder), so an unwired store does no fragment
494
- * work and behaves byte-identically. Failures are logged, never surfaced — a
495
- * committed delete/eviction must not fail because a derived fragment index could
496
- * not be pruned.
497
- */
498
- async _removeFragmentsBestEffort(target) {
499
- if (this._fragmentIndex === undefined || this._fragmentEmbedder === undefined) {
500
- return;
501
- }
502
- const fragmentIndex = this._fragmentIndex;
503
- await this._tryVectorOp(() => fragmentIndex.remove(target), `fragment removal for '${target.id}'`);
504
- }
505
460
  /**
506
461
  * Evict the records named by a `cull-oldest` decision, best-effort. Runs only
507
462
  * after the authoritative `_persist`, so a failed eviction is logged (never
@@ -525,49 +480,6 @@ export class FileTreeMemoryStore {
525
480
  }
526
481
  return evicted;
527
482
  }
528
- /**
529
- * Best-effort vector removal for each evicted record (never fails the put).
530
- * Every evicted record is in the same `scope` as the incoming write (the
531
- * cull-oldest cohort is the incoming record's `(scope, kind)` cohort), so that
532
- * scope qualifies each removal target.
533
- */
534
- async _removeEvictedVectors(evicted, scope) {
535
- for (const id of evicted) {
536
- await this._removeVectorBestEffort({ scope, id });
537
- await this._removeFragmentsBestEffort({ scope, id });
538
- }
539
- }
540
- /**
541
- * Run a consumer-supplied vector hook, normalizing a thrown/rejected hook into a
542
- * `Failure` and logging any failure at `warn`. Best-effort: the caller proceeds
543
- * regardless, since the index is rebuildable.
544
- */
545
- async _tryVectorOp(op, label) {
546
- let result;
547
- try {
548
- result = await op();
549
- }
550
- catch (err) {
551
- result = fail(`${label} threw: ${String(err)}`);
552
- }
553
- if (result.isFailure()) {
554
- this._warnSwallowed(`memory: ${label} failed (best-effort; derived index left for rebuild): ${result.message}`);
555
- }
556
- return result;
557
- }
558
- /**
559
- * Best-effort vector removal. A no-op unless the full vector lifecycle is wired
560
- * (both an index AND an embedder), so an unwired store does no vector work and
561
- * behaves byte-identically. Failures are logged, never surfaced — a committed
562
- * delete/eviction must not fail because a derived index could not be pruned.
563
- */
564
- async _removeVectorBestEffort(target) {
565
- if (this._vectorIndex === undefined || this._embed === undefined) {
566
- return;
567
- }
568
- const vectorIndex = this._vectorIndex;
569
- await this._tryVectorOp(() => vectorIndex.remove(target), `vector removal for '${target.id}'`);
570
- }
571
483
  /**
572
484
  * Build the record to persist. On a first write the incoming envelope is the
573
485
  * base (final content equals the incoming content, so the dedup `hash` is
@@ -637,8 +549,7 @@ export class FileTreeMemoryStore {
637
549
  return this._deleteFile(scope, idStem)
638
550
  .onSuccess(() => this._index.patch('delete', { scope, record: existing }))
639
551
  .thenOnSuccess(async () => {
640
- await this._removeVectorBestEffort({ scope, id: existing.envelope.id });
641
- await this._removeFragmentsBestEffort({ scope, id: existing.envelope.id });
552
+ await this._vectors.removeAll({ scope, id: existing.envelope.id });
642
553
  return succeed(existing.envelope.id);
643
554
  });
644
555
  });
@@ -724,11 +635,15 @@ export class FileTreeMemoryStore {
724
635
  .withErrorFormat((msg) => `memory put '${entityId}': ${msg}`)
725
636
  .thenOnSuccess((versionStem) => this._buildVersionedRecord(record, body, current, policy, hash, versionStem, validAt, now, seq)
726
637
  .onSuccess((built) => succeed(this._stampRank(built)))
727
- .thenOnSuccess((built) => this._embedOnWrite(built, scope))
728
- .thenOnSuccess((built) => this._embedFragmentsOnWrite(built, scope))
729
- .onSuccess((embeddedBuilt) => this._persist(embeddedBuilt, scope, versionStem))
730
- .onSuccess((persisted) => this._invalidateCurrents(scope, priorCurrents, validAt, now).onSuccess(() => succeed(persisted)))
731
- .onSuccess((persisted) => succeed({ record: persisted, evicted: [] })));
638
+ .thenOnSuccess((built) => this._vectors.embedOnWrite(built, scope))
639
+ .thenOnSuccess(async (embedded) => (await this._vectors.embedFragmentsOnWrite(embedded.record, scope)).onSuccess((withFragments) => succeed(Object.assign(Object.assign({}, embedded), { record: withFragments }))))
640
+ .onSuccess((embedded) => this._persist(embedded.record, scope, versionStem).onSuccess((persisted) => succeed({ persisted, stale: embedded.stale, embed: embedded.embed })))
641
+ .onSuccess(({ persisted, stale, embed }) => this._invalidateCurrents(scope, priorCurrents, validAt, now).onSuccess(() => succeed({ persisted, stale, embed })))
642
+ // Post-commit and best-effort, exactly as on the flat path.
643
+ .thenOnSuccess(async ({ persisted, stale, embed }) => {
644
+ await this._vectors.pruneStaleVector(stale);
645
+ return succeed({ record: persisted, evicted: [], embed });
646
+ }));
732
647
  });
733
648
  });
734
649
  }
@@ -941,6 +856,12 @@ export class FileTreeMemoryStore {
941
856
  var _a;
942
857
  return (_a = this._policyFor(kind).dedupScope) !== null && _a !== void 0 ? _a : DEFAULT_DEDUP_SCOPE;
943
858
  }
859
+ /** {@inheritDoc IMemoryStore.embedsKind} */
860
+ embedsKind(kind) {
861
+ // No declaration means every kind participates — the behavior that predates
862
+ // this param, so an existing consumer is unaffected.
863
+ return this._embedKinds === undefined || this._embedKinds.has(kind);
864
+ }
944
865
  /**
945
866
  * Read and validate the record at `<scope>/<idStem>.md`, returning `undefined`
946
867
  * when the scope directory or file is absent. Verifies the on-disk id ↔