@fgv/ts-agent-memory 5.1.0-46 → 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 (336) hide show
  1. package/README.md +55 -0
  2. package/dist/packlets/ingest/orchestrator.js +115 -20
  3. package/dist/packlets/ingest/orchestrator.js.map +1 -1
  4. package/dist/packlets/observe/memoryObservationStore.js +6 -0
  5. package/dist/packlets/observe/memoryObservationStore.js.map +1 -1
  6. package/dist/packlets/observe/observer.js.map +1 -1
  7. package/dist/packlets/store/fileTreeMemoryStore.js +63 -135
  8. package/dist/packlets/store/fileTreeMemoryStore.js.map +1 -1
  9. package/dist/packlets/store/vectorMaintenance.js +251 -0
  10. package/dist/packlets/store/vectorMaintenance.js.map +1 -0
  11. package/dist/packlets/vector/inMemoryCosineIndex.js +81 -18
  12. package/dist/packlets/vector/inMemoryCosineIndex.js.map +1 -1
  13. package/dist/packlets/vector/inMemoryFragmentCosineIndex.js +7 -0
  14. package/dist/packlets/vector/inMemoryFragmentCosineIndex.js.map +1 -1
  15. package/dist/packlets/vector/vectorIndex.js.map +1 -1
  16. package/dist/ts-agent-memory.d.ts +389 -71
  17. package/lib/packlets/ingest/orchestrator.d.ts +62 -5
  18. package/lib/packlets/ingest/orchestrator.d.ts.map +1 -1
  19. package/lib/packlets/ingest/orchestrator.js +115 -20
  20. package/lib/packlets/ingest/orchestrator.js.map +1 -1
  21. package/lib/packlets/observe/memoryObservationStore.d.ts.map +1 -1
  22. package/lib/packlets/observe/memoryObservationStore.js +6 -0
  23. package/lib/packlets/observe/memoryObservationStore.js.map +1 -1
  24. package/lib/packlets/observe/observer.d.ts +61 -0
  25. package/lib/packlets/observe/observer.d.ts.map +1 -1
  26. package/lib/packlets/observe/observer.js.map +1 -1
  27. package/lib/packlets/store/fileTreeMemoryStore.d.ts +97 -60
  28. package/lib/packlets/store/fileTreeMemoryStore.d.ts.map +1 -1
  29. package/lib/packlets/store/fileTreeMemoryStore.js +63 -135
  30. package/lib/packlets/store/fileTreeMemoryStore.js.map +1 -1
  31. package/lib/packlets/store/vectorMaintenance.d.ts +149 -0
  32. package/lib/packlets/store/vectorMaintenance.d.ts.map +1 -0
  33. package/lib/packlets/store/vectorMaintenance.js +255 -0
  34. package/lib/packlets/store/vectorMaintenance.js.map +1 -0
  35. package/lib/packlets/vector/inMemoryCosineIndex.d.ts +30 -7
  36. package/lib/packlets/vector/inMemoryCosineIndex.d.ts.map +1 -1
  37. package/lib/packlets/vector/inMemoryCosineIndex.js +80 -17
  38. package/lib/packlets/vector/inMemoryCosineIndex.js.map +1 -1
  39. package/lib/packlets/vector/inMemoryFragmentCosineIndex.d.ts +7 -0
  40. package/lib/packlets/vector/inMemoryFragmentCosineIndex.d.ts.map +1 -1
  41. package/lib/packlets/vector/inMemoryFragmentCosineIndex.js +7 -0
  42. package/lib/packlets/vector/inMemoryFragmentCosineIndex.js.map +1 -1
  43. package/lib/packlets/vector/vectorIndex.d.ts +129 -1
  44. package/lib/packlets/vector/vectorIndex.d.ts.map +1 -1
  45. package/lib/packlets/vector/vectorIndex.js.map +1 -1
  46. package/package.json +17 -7
  47. package/.rush/temp/6e1299d1cebb080772163a532c221cd181b54f9f.tar.log +0 -462
  48. package/.rush/temp/chunked-rush-logs/ts-agent-memory.build.chunks.jsonl +0 -9
  49. package/.rush/temp/operation/build/all.log +0 -9
  50. package/.rush/temp/operation/build/log-chunks.jsonl +0 -9
  51. package/.rush/temp/operation/build/state.json +0 -3
  52. package/.rush/temp/shrinkwrap-deps.json +0 -689
  53. package/config/api-extractor.json +0 -343
  54. package/config/jest.config.json +0 -14
  55. package/config/rig.json +0 -4
  56. package/dist/test/unit/converters/antagonistRoundTrip.test.js +0 -95
  57. package/dist/test/unit/converters/antagonistRoundTrip.test.js.map +0 -1
  58. package/dist/test/unit/converters/bodyConverterRegistry.test.js +0 -72
  59. package/dist/test/unit/converters/bodyConverterRegistry.test.js.map +0 -1
  60. package/dist/test/unit/converters/envelopeConverter.test.js +0 -313
  61. package/dist/test/unit/converters/envelopeConverter.test.js.map +0 -1
  62. package/dist/test/unit/index/memoryIndex.test.js +0 -214
  63. package/dist/test/unit/index/memoryIndex.test.js.map +0 -1
  64. package/dist/test/unit/ingest/antagonistCycleAndParity.test.js +0 -277
  65. package/dist/test/unit/ingest/antagonistCycleAndParity.test.js.map +0 -1
  66. package/dist/test/unit/ingest/cycleGuard.test.js +0 -81
  67. package/dist/test/unit/ingest/cycleGuard.test.js.map +0 -1
  68. package/dist/test/unit/ingest/orchestrator.test.js +0 -1055
  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 -841
  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 -938
  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/orchestrator.test.d.ts +0 -2
  149. package/lib/test/unit/ingest/orchestrator.test.d.ts.map +0 -1
  150. package/lib/test/unit/ingest/orchestrator.test.js +0 -1057
  151. package/lib/test/unit/ingest/orchestrator.test.js.map +0 -1
  152. package/lib/test/unit/observe/memoryObservationStore.test.d.ts +0 -2
  153. package/lib/test/unit/observe/memoryObservationStore.test.d.ts.map +0 -1
  154. package/lib/test/unit/observe/memoryObservationStore.test.js +0 -120
  155. package/lib/test/unit/observe/memoryObservationStore.test.js.map +0 -1
  156. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.d.ts +0 -2
  157. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.d.ts.map +0 -1
  158. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.js +0 -118
  159. package/lib/test/unit/retrieve/fragmentSemanticRetriever.test.js.map +0 -1
  160. package/lib/test/unit/retrieve/linkTraversalRetriever.test.d.ts +0 -2
  161. package/lib/test/unit/retrieve/linkTraversalRetriever.test.d.ts.map +0 -1
  162. package/lib/test/unit/retrieve/linkTraversalRetriever.test.js +0 -259
  163. package/lib/test/unit/retrieve/linkTraversalRetriever.test.js.map +0 -1
  164. package/lib/test/unit/retrieve/retrievers.test.d.ts +0 -2
  165. package/lib/test/unit/retrieve/retrievers.test.d.ts.map +0 -1
  166. package/lib/test/unit/retrieve/retrievers.test.js +0 -770
  167. package/lib/test/unit/retrieve/retrievers.test.js.map +0 -1
  168. package/lib/test/unit/retrieve/temporalRetrievers.test.d.ts +0 -2
  169. package/lib/test/unit/retrieve/temporalRetrievers.test.d.ts.map +0 -1
  170. package/lib/test/unit/retrieve/temporalRetrievers.test.js +0 -184
  171. package/lib/test/unit/retrieve/temporalRetrievers.test.js.map +0 -1
  172. package/lib/test/unit/store/antagonistTemporalBoundary.test.d.ts +0 -9
  173. package/lib/test/unit/store/antagonistTemporalBoundary.test.d.ts.map +0 -1
  174. package/lib/test/unit/store/antagonistTemporalBoundary.test.js +0 -122
  175. package/lib/test/unit/store/antagonistTemporalBoundary.test.js.map +0 -1
  176. package/lib/test/unit/store/embedOnWrite.test.d.ts +0 -2
  177. package/lib/test/unit/store/embedOnWrite.test.d.ts.map +0 -1
  178. package/lib/test/unit/store/embedOnWrite.test.js +0 -319
  179. package/lib/test/unit/store/embedOnWrite.test.js.map +0 -1
  180. package/lib/test/unit/store/fileTreeMemoryStore.test.d.ts +0 -2
  181. package/lib/test/unit/store/fileTreeMemoryStore.test.d.ts.map +0 -1
  182. package/lib/test/unit/store/fileTreeMemoryStore.test.js +0 -780
  183. package/lib/test/unit/store/fileTreeMemoryStore.test.js.map +0 -1
  184. package/lib/test/unit/store/fragmentEmbedOnWrite.test.d.ts +0 -2
  185. package/lib/test/unit/store/fragmentEmbedOnWrite.test.d.ts.map +0 -1
  186. package/lib/test/unit/store/fragmentEmbedOnWrite.test.js +0 -257
  187. package/lib/test/unit/store/fragmentEmbedOnWrite.test.js.map +0 -1
  188. package/lib/test/unit/store/indexInjection.test.d.ts +0 -2
  189. package/lib/test/unit/store/indexInjection.test.d.ts.map +0 -1
  190. package/lib/test/unit/store/indexInjection.test.js +0 -434
  191. package/lib/test/unit/store/indexInjection.test.js.map +0 -1
  192. package/lib/test/unit/store/lenientOpen.test.d.ts +0 -2
  193. package/lib/test/unit/store/lenientOpen.test.d.ts.map +0 -1
  194. package/lib/test/unit/store/lenientOpen.test.js +0 -250
  195. package/lib/test/unit/store/lenientOpen.test.js.map +0 -1
  196. package/lib/test/unit/store/listScoped.test.d.ts +0 -2
  197. package/lib/test/unit/store/listScoped.test.d.ts.map +0 -1
  198. package/lib/test/unit/store/listScoped.test.js +0 -111
  199. package/lib/test/unit/store/listScoped.test.js.map +0 -1
  200. package/lib/test/unit/store/observations.test.d.ts +0 -2
  201. package/lib/test/unit/store/observations.test.d.ts.map +0 -1
  202. package/lib/test/unit/store/observations.test.js +0 -241
  203. package/lib/test/unit/store/observations.test.js.map +0 -1
  204. package/lib/test/unit/store/rankAxis.test.d.ts +0 -2
  205. package/lib/test/unit/store/rankAxis.test.d.ts.map +0 -1
  206. package/lib/test/unit/store/rankAxis.test.js +0 -256
  207. package/lib/test/unit/store/rankAxis.test.js.map +0 -1
  208. package/lib/test/unit/store/scopeEncoding.test.d.ts +0 -2
  209. package/lib/test/unit/store/scopeEncoding.test.d.ts.map +0 -1
  210. package/lib/test/unit/store/scopeEncoding.test.js +0 -26
  211. package/lib/test/unit/store/scopeEncoding.test.js.map +0 -1
  212. package/lib/test/unit/store/temporalStore.test.d.ts +0 -2
  213. package/lib/test/unit/store/temporalStore.test.d.ts.map +0 -1
  214. package/lib/test/unit/store/temporalStore.test.js +0 -400
  215. package/lib/test/unit/store/temporalStore.test.js.map +0 -1
  216. package/lib/test/unit/tools/memoryTools.test.d.ts +0 -2
  217. package/lib/test/unit/tools/memoryTools.test.d.ts.map +0 -1
  218. package/lib/test/unit/tools/memoryTools.test.js +0 -843
  219. package/lib/test/unit/tools/memoryTools.test.js.map +0 -1
  220. package/lib/test/unit/types/identityCodec.test.d.ts +0 -2
  221. package/lib/test/unit/types/identityCodec.test.d.ts.map +0 -1
  222. package/lib/test/unit/types/identityCodec.test.js +0 -189
  223. package/lib/test/unit/types/identityCodec.test.js.map +0 -1
  224. package/lib/test/unit/types/ids.test.d.ts +0 -2
  225. package/lib/test/unit/types/ids.test.d.ts.map +0 -1
  226. package/lib/test/unit/types/ids.test.js +0 -86
  227. package/lib/test/unit/types/ids.test.js.map +0 -1
  228. package/lib/test/unit/types/temporalCodec.test.d.ts +0 -2
  229. package/lib/test/unit/types/temporalCodec.test.d.ts.map +0 -1
  230. package/lib/test/unit/types/temporalCodec.test.js +0 -205
  231. package/lib/test/unit/types/temporalCodec.test.js.map +0 -1
  232. package/lib/test/unit/types/temporalPolicy.test.d.ts +0 -2
  233. package/lib/test/unit/types/temporalPolicy.test.d.ts.map +0 -1
  234. package/lib/test/unit/types/temporalPolicy.test.js +0 -85
  235. package/lib/test/unit/types/temporalPolicy.test.js.map +0 -1
  236. package/lib/test/unit/types/writePolicy.test.d.ts +0 -2
  237. package/lib/test/unit/types/writePolicy.test.d.ts.map +0 -1
  238. package/lib/test/unit/types/writePolicy.test.js +0 -333
  239. package/lib/test/unit/types/writePolicy.test.js.map +0 -1
  240. package/lib/test/unit/vector/fragmentConverters.test.d.ts +0 -2
  241. package/lib/test/unit/vector/fragmentConverters.test.d.ts.map +0 -1
  242. package/lib/test/unit/vector/fragmentConverters.test.js +0 -60
  243. package/lib/test/unit/vector/fragmentConverters.test.js.map +0 -1
  244. package/lib/test/unit/vector/inMemoryCosineIndex.test.d.ts +0 -2
  245. package/lib/test/unit/vector/inMemoryCosineIndex.test.d.ts.map +0 -1
  246. package/lib/test/unit/vector/inMemoryCosineIndex.test.js +0 -254
  247. package/lib/test/unit/vector/inMemoryCosineIndex.test.js.map +0 -1
  248. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.d.ts +0 -2
  249. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.d.ts.map +0 -1
  250. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.js +0 -364
  251. package/lib/test/unit/vector/inMemoryFragmentCosineIndex.test.js.map +0 -1
  252. package/lib/test/unit/vector/vectorIndex.test.d.ts +0 -2
  253. package/lib/test/unit/vector/vectorIndex.test.d.ts.map +0 -1
  254. package/lib/test/unit/vector/vectorIndex.test.js +0 -53
  255. package/lib/test/unit/vector/vectorIndex.test.js.map +0 -1
  256. package/rush-logs/ts-agent-memory.build.cache.log +0 -3
  257. package/rush-logs/ts-agent-memory.build.log +0 -9
  258. package/src/index.ts +0 -14
  259. package/src/packlets/converters/bodyConverterRegistry.ts +0 -105
  260. package/src/packlets/converters/envelopeConverter.ts +0 -233
  261. package/src/packlets/converters/index.ts +0 -7
  262. package/src/packlets/index/index.ts +0 -6
  263. package/src/packlets/index/memoryIndex.ts +0 -332
  264. package/src/packlets/ingest/cycleGuard.ts +0 -153
  265. package/src/packlets/ingest/hostStages.ts +0 -111
  266. package/src/packlets/ingest/index.ts +0 -9
  267. package/src/packlets/ingest/model.ts +0 -195
  268. package/src/packlets/ingest/orchestrator.ts +0 -873
  269. package/src/packlets/observe/index.ts +0 -7
  270. package/src/packlets/observe/memoryObservationStore.ts +0 -153
  271. package/src/packlets/observe/observer.ts +0 -119
  272. package/src/packlets/retrieve/fragmentSemanticRetriever.ts +0 -138
  273. package/src/packlets/retrieve/hybridRetriever.ts +0 -194
  274. package/src/packlets/retrieve/index.ts +0 -14
  275. package/src/packlets/retrieve/linkTraversalRetriever.ts +0 -158
  276. package/src/packlets/retrieve/recencyRetriever.ts +0 -54
  277. package/src/packlets/retrieve/retriever.ts +0 -291
  278. package/src/packlets/retrieve/semanticRetriever.ts +0 -152
  279. package/src/packlets/retrieve/structuredFilterRetriever.ts +0 -58
  280. package/src/packlets/retrieve/tagRetriever.ts +0 -58
  281. package/src/packlets/retrieve/temporalRetrievers.ts +0 -210
  282. package/src/packlets/store/fileTreeMemoryStore.ts +0 -1834
  283. package/src/packlets/store/index.ts +0 -7
  284. package/src/packlets/store/scopeEncoding.ts +0 -36
  285. package/src/packlets/tools/index.ts +0 -6
  286. package/src/packlets/tools/memoryTools.ts +0 -706
  287. package/src/packlets/types/envelope.ts +0 -196
  288. package/src/packlets/types/filenameSafety.ts +0 -57
  289. package/src/packlets/types/identityCodec.ts +0 -447
  290. package/src/packlets/types/ids.ts +0 -124
  291. package/src/packlets/types/index.ts +0 -11
  292. package/src/packlets/types/temporal.ts +0 -96
  293. package/src/packlets/types/writePolicy.ts +0 -612
  294. package/src/packlets/vector/fragmentConverters.ts +0 -55
  295. package/src/packlets/vector/inMemoryCosineIndex.ts +0 -196
  296. package/src/packlets/vector/inMemoryFragmentCosineIndex.ts +0 -289
  297. package/src/packlets/vector/index.ts +0 -9
  298. package/src/packlets/vector/vectorIndex.ts +0 -273
  299. package/src/test/unit/converters/antagonistRoundTrip.test.ts +0 -110
  300. package/src/test/unit/converters/bodyConverterRegistry.test.ts +0 -89
  301. package/src/test/unit/converters/envelopeConverter.test.ts +0 -418
  302. package/src/test/unit/index/memoryIndex.test.ts +0 -272
  303. package/src/test/unit/ingest/antagonistCycleAndParity.test.ts +0 -367
  304. package/src/test/unit/ingest/cycleGuard.test.ts +0 -110
  305. package/src/test/unit/ingest/orchestrator.test.ts +0 -1351
  306. package/src/test/unit/observe/memoryObservationStore.test.ts +0 -158
  307. package/src/test/unit/retrieve/fragmentSemanticRetriever.test.ts +0 -163
  308. package/src/test/unit/retrieve/linkTraversalRetriever.test.ts +0 -329
  309. package/src/test/unit/retrieve/retrievers.test.ts +0 -1018
  310. package/src/test/unit/retrieve/temporalRetrievers.test.ts +0 -226
  311. package/src/test/unit/store/antagonistTemporalBoundary.test.ts +0 -158
  312. package/src/test/unit/store/embedOnWrite.test.ts +0 -418
  313. package/src/test/unit/store/fileTreeMemoryStore.test.ts +0 -1041
  314. package/src/test/unit/store/fragmentEmbedOnWrite.test.ts +0 -349
  315. package/src/test/unit/store/indexInjection.test.ts +0 -550
  316. package/src/test/unit/store/lenientOpen.test.ts +0 -292
  317. package/src/test/unit/store/listScoped.test.ts +0 -138
  318. package/src/test/unit/store/observations.test.ts +0 -290
  319. package/src/test/unit/store/rankAxis.test.ts +0 -349
  320. package/src/test/unit/store/scopeEncoding.test.ts +0 -37
  321. package/src/test/unit/store/temporalStore.test.ts +0 -469
  322. package/src/test/unit/tools/memoryTools.test.ts +0 -1120
  323. package/src/test/unit/types/identityCodec.test.ts +0 -266
  324. package/src/test/unit/types/ids.test.ts +0 -94
  325. package/src/test/unit/types/temporalCodec.test.ts +0 -259
  326. package/src/test/unit/types/temporalPolicy.test.ts +0 -124
  327. package/src/test/unit/types/writePolicy.test.ts +0 -446
  328. package/src/test/unit/vector/fragmentConverters.test.ts +0 -80
  329. package/src/test/unit/vector/inMemoryCosineIndex.test.ts +0 -318
  330. package/src/test/unit/vector/inMemoryFragmentCosineIndex.test.ts +0 -477
  331. package/src/test/unit/vector/vectorIndex.test.ts +0 -64
  332. package/temp/build/lint/_eslint-5eVG3S6w.json +0 -302
  333. package/temp/build/typescript/ts_8nwakTlr.json +0 -1
  334. package/temp/ts-agent-memory.api.json +0 -20933
  335. package/temp/ts-agent-memory.api.md +0 -938
  336. package/tsconfig.json +0 -8
@@ -1,153 +0,0 @@
1
- /*
2
- * Copyright (c) 2026 Erik Fortune
3
- * SPDX-License-Identifier: MIT
4
- */
5
-
6
- import { Hash, Result, fail, mapResults, succeed } from '@fgv/ts-utils';
7
- import { IEdgeTarget, LinkType, edgeTargetKey } from '../types';
8
-
9
- /**
10
- * A directed edge in the link graph the cycle guard reasons over: scope-qualified
11
- * `source` links to scope-qualified `target` under relation `type`.
12
- * @public
13
- */
14
- export interface ICycleGuardEdge {
15
- readonly source: IEdgeTarget;
16
- readonly target: IEdgeTarget;
17
- readonly type: LinkType;
18
- }
19
-
20
- /** Human-readable `scope/id` rendering of a scoped node, for cycle-guard diagnostics. */
21
- function formatNode(node: IEdgeTarget): string {
22
- return `${node.scope}/${node.id}`;
23
- }
24
-
25
- /**
26
- * Build the design's `buildCycleKey` — a deterministic, canonical (RFC-8785,
27
- * via `Crc32Normalizer` from `@fgv/ts-utils`) identity for a directed edge. Used
28
- * to de-duplicate proposed edges so a repeated `(source, target, type)` proposal
29
- * contributes a single graph edge (and never spuriously "re-closes" a cycle).
30
- * @public
31
- */
32
- export function buildCycleKey(edge: ICycleGuardEdge): Result<string> {
33
- return new Hash.Crc32Normalizer().computeHash({
34
- source: edge.source,
35
- target: edge.target,
36
- type: edge.type
37
- });
38
- }
39
-
40
- /**
41
- * Write-time cycle guard. Given the graph's EXISTING directed edges plus a set of
42
- * PROPOSED edges, verify that adding the proposed edges keeps the union graph a
43
- * DAG. Fails loudly, naming the first proposed edge that would close a directed
44
- * cycle.
45
- *
46
- * @remarks
47
- * Distinct from the read-time BFS in `LinkTraversalRetriever` (which tolerates
48
- * cycles via a visited-set): this is a WRITE-time admission check. Cycle
49
- * detection is DFS reachability — a proposed `source -> target` edge closes a
50
- * cycle iff `target` already reaches `source` in the graph built so far. Proposed
51
- * edges are folded in one at a time (in order), so an intra-batch cycle
52
- * (`A->B`, `B->A` both proposed) is caught as well as a batch-vs-existing cycle.
53
- *
54
- * See the design note §4: this enforces GLOBAL directed-acyclicity over all link
55
- * types (conservative — a mutual associative pair is rejected). Callers that need
56
- * mutual links disable the guard.
57
- * @public
58
- */
59
- export function assertNoCycles(
60
- existing: ReadonlyArray<ICycleGuardEdge>,
61
- proposed: ReadonlyArray<ICycleGuardEdge>
62
- ): Result<true> {
63
- // Canonically key every edge up front (the only fallible step); the graph
64
- // building + cycle detection below is then pure.
65
- return keyEdges(existing).onSuccess((existingKeyed) =>
66
- keyEdges(proposed).onSuccess((proposedKeyed) => {
67
- // Adjacency map, de-duplicated by canonical edge key so a repeated edge is
68
- // one arc. Seed with the existing edges, then fold in each proposed edge,
69
- // checking reachability BEFORE inserting it.
70
- const adjacency: Map<string, Set<string>> = new Map<string, Set<string>>();
71
- const seenKeys: Set<string> = new Set<string>();
72
- for (const keyed of existingKeyed) {
73
- addEdge(adjacency, seenKeys, keyed);
74
- }
75
- for (const keyed of proposedKeyed) {
76
- const edge: ICycleGuardEdge = keyed.edge;
77
- const sourceKey: string = edgeTargetKey(edge.source);
78
- const targetKey: string = edgeTargetKey(edge.target);
79
- // A self-loop is the degenerate one-node cycle.
80
- if (sourceKey === targetKey) {
81
- return fail(
82
- `ingest cycle guard: edge '${formatNode(edge.source)}' -${edge.type}-> '${formatNode(
83
- edge.target
84
- )}' is a self-loop`
85
- );
86
- }
87
- // Reachability: does `target` already reach `source`? If so, adding
88
- // `source -> target` closes a directed cycle.
89
- if (reaches(adjacency, targetKey, sourceKey)) {
90
- return fail(
91
- `ingest cycle guard: edge '${formatNode(edge.source)}' -${edge.type}-> '${formatNode(
92
- edge.target
93
- )}' would create a cycle`
94
- );
95
- }
96
- addEdge(adjacency, seenKeys, keyed);
97
- }
98
- return succeed(true);
99
- })
100
- );
101
- }
102
-
103
- /** An edge paired with its canonical cycle key. */
104
- interface IKeyedEdge {
105
- readonly edge: ICycleGuardEdge;
106
- readonly key: string;
107
- }
108
-
109
- /** Canonically key a set of edges (the guard's only fallible step). */
110
- function keyEdges(edges: ReadonlyArray<ICycleGuardEdge>): Result<ReadonlyArray<IKeyedEdge>> {
111
- return mapResults(edges.map((edge) => buildCycleKey(edge).onSuccess((key) => succeed({ edge, key }))));
112
- }
113
-
114
- /** Add an edge to the adjacency map, de-duplicated by its canonical key. */
115
- function addEdge(adjacency: Map<string, Set<string>>, seenKeys: Set<string>, keyed: IKeyedEdge): void {
116
- if (seenKeys.has(keyed.key)) {
117
- return;
118
- }
119
- seenKeys.add(keyed.key);
120
- const source: string = edgeTargetKey(keyed.edge.source);
121
- const target: string = edgeTargetKey(keyed.edge.target);
122
- const targets: Set<string> | undefined = adjacency.get(source);
123
- if (targets === undefined) {
124
- adjacency.set(source, new Set<string>([target]));
125
- } else {
126
- targets.add(target);
127
- }
128
- }
129
-
130
- /** DFS reachability: is `to` reachable from `from` over `adjacency`? */
131
- function reaches(adjacency: ReadonlyMap<string, Set<string>>, from: string, to: string): boolean {
132
- const visited: Set<string> = new Set<string>();
133
- const stack: string[] = [from];
134
- while (stack.length > 0) {
135
- const node: string = stack.pop() as string;
136
- if (node === to) {
137
- return true;
138
- }
139
- if (visited.has(node)) {
140
- continue;
141
- }
142
- visited.add(node);
143
- const neighbors: Set<string> | undefined = adjacency.get(node);
144
- if (neighbors !== undefined) {
145
- for (const neighbor of neighbors) {
146
- if (!visited.has(neighbor)) {
147
- stack.push(neighbor);
148
- }
149
- }
150
- }
151
- }
152
- return false;
153
- }
@@ -1,111 +0,0 @@
1
- /*
2
- * Copyright (c) 2026 Erik Fortune
3
- * SPDX-License-Identifier: MIT
4
- */
5
-
6
- import { Result } from '@fgv/ts-utils';
7
- import { IEdgeTarget } from '../types';
8
- import {
9
- ICandidateEdge,
10
- ICandidateRecord,
11
- IEntityResolutionCandidate,
12
- IIngestItem,
13
- IMemoryClassification,
14
- ResolutionVerdict
15
- } from './model';
16
-
17
- /**
18
- * Stage 2 — the host's classifier. Decides what {@link IIngestItem} maps to
19
- * which memory {@link Kind} (and optional tags / confidence). LOCKED as a
20
- * separate staged interface (OQ-10): the host plugs its existing classifier
21
- * machinery in here rather than surrendering to an opaque ingestor.
22
- * @public
23
- */
24
- export interface IMemoryClassifier {
25
- /**
26
- * Classify one item. A `fail` aborts the item's ingest loudly (fgv never
27
- * guesses a kind).
28
- */
29
- classify(item: IIngestItem): Promise<Result<IMemoryClassification>>;
30
- }
31
-
32
- /**
33
- * Stage 3 — the host's fact extractor. Turns a classified item into zero or more
34
- * {@link ICandidateRecord}s. Each candidate's body is validated against the
35
- * kind's registered Converter by fgv before it can reach the store (the typed
36
- * validation boundary — no unchecked host data is persisted).
37
- * @public
38
- */
39
- export interface IFactExtractor {
40
- /**
41
- * Extract candidate records from a classified item. An empty array is a valid
42
- * result (the item yielded nothing memorable).
43
- */
44
- extract(
45
- item: IIngestItem,
46
- classification: IMemoryClassification
47
- ): Promise<Result<ReadonlyArray<ICandidateRecord>>>;
48
- }
49
-
50
- /**
51
- * Stage 4 (optional) — the host's entity resolver (OQ-13, LOCKED OPTIONAL). When
52
- * supplied, fgv surfaces near-duplicate {@link IEntityResolutionCandidate}s (from
53
- * layer-2 similarity search) and the resolver returns a
54
- * {@link ResolutionVerdict}. When ABSENT, stage-4 dedup falls back to
55
- * exact-`{ kind, body }`-hash only — the deterministic-identity host path.
56
- * @public
57
- */
58
- export interface IEntityResolver {
59
- /**
60
- * Decide whether `candidate` is new, a duplicate of / supersedes / merges into
61
- * one of the surfaced `similar` records. `similar` is non-empty and ordered by
62
- * descending score when the resolver is invoked (fgv only calls it when
63
- * layer-2 surfaces at least one over-threshold neighbor).
64
- */
65
- resolve(
66
- candidate: ICandidateRecord,
67
- similar: ReadonlyArray<IEntityResolutionCandidate>
68
- ): Promise<Result<ResolutionVerdict>>;
69
- }
70
-
71
- /**
72
- * The context fgv hands the host's relation extractor (stage 5): the source item
73
- * plus the candidates fgv is about to write, each paired with its resolved
74
- * reference id (the codec `idStem`). The extractor proposes attributed edges over
75
- * these ids and existing store records.
76
- * @public
77
- */
78
- export interface IRelationContext {
79
- /** The item being ingested. */
80
- readonly item: IIngestItem;
81
- /** The candidates fgv is about to write, each with its resolved reference id. */
82
- readonly candidates: ReadonlyArray<IRelationCandidate>;
83
- }
84
-
85
- /**
86
- * A candidate paired with its resolved reference id, handed to the relation
87
- * extractor so it can source edges from it.
88
- * @public
89
- */
90
- export interface IRelationCandidate {
91
- /** The candidate about to be written. */
92
- readonly candidate: ICandidateRecord;
93
- /** Its resolved scope-qualified reference (codec `(scope, idStem)` — the stable entity address). */
94
- readonly id: IEdgeTarget;
95
- }
96
-
97
- /**
98
- * Stage 5 — the host's relation extractor. Proposes attributed edges among the
99
- * candidates and existing records. fgv owns the validation, the write-time cycle
100
- * guard, and the actual persistence of the edges (the host brings only the
101
- * relationship judgment).
102
- * @public
103
- */
104
- export interface IRelationExtractor {
105
- /**
106
- * Propose the edges to attach for this ingest. An empty array is valid (no
107
- * relations). Every proposed {@link ICandidateEdge.source | source} must be one
108
- * of the context's candidate reference ids.
109
- */
110
- relate(context: IRelationContext): Promise<Result<ReadonlyArray<ICandidateEdge>>>;
111
- }
@@ -1,9 +0,0 @@
1
- /*
2
- * Copyright (c) 2026 Erik Fortune
3
- * SPDX-License-Identifier: MIT
4
- */
5
-
6
- export * from './model';
7
- export * from './hostStages';
8
- export * from './cycleGuard';
9
- export * from './orchestrator';
@@ -1,195 +0,0 @@
1
- /*
2
- * Copyright (c) 2026 Erik Fortune
3
- * SPDX-License-Identifier: MIT
4
- */
5
-
6
- import { IEdge, IEdgeTarget, IMemoryEnvelope, IMemoryRecord, Kind, MemoryId, Tag } from '../types';
7
-
8
- /**
9
- * A single unit of raw source material handed to the ingest pipeline. The host
10
- * owns the shape of {@link IIngestItem.content | content} — fgv never interprets
11
- * it; it flows opaquely into the host's classifier and extractor (stages 2-3).
12
- *
13
- * Single-item ingest is FIRST-CLASS: the orchestrator's primary entry point
14
- * takes one `IIngestItem` (per-turn streaming), and the batch entry point is a
15
- * convenience loop over it.
16
- * @public
17
- */
18
- export interface IIngestItem {
19
- /**
20
- * Host-owned identity for this source item. Opaque to fgv; used only in
21
- * diagnostics and echoed back on the {@link IIngestItemResult}.
22
- */
23
- readonly id: string;
24
- /**
25
- * The opaque source payload the host's classifier / extractor understand
26
- * (e.g. a raw turn, a document, a tool-call transcript). Never interpreted by
27
- * fgv.
28
- */
29
- readonly content: unknown;
30
- /**
31
- * Optional scope-qualified back-link to the memory record this item was derived
32
- * from (e.g. the MTM turn an extracted fact came from). When present, fgv stamps
33
- * it as {@link IProvenance.derivedFrom | provenance.derivedFrom} on every record
34
- * ingested from this item (stage 6) — the cross-kind provenance spine. A
35
- * scope-qualified {@link IEdgeTarget} (not a bare {@link MemoryId}) because
36
- * per-scope codecs legally reuse a stem across scopes, so a bare id would be
37
- * ambiguous.
38
- */
39
- readonly sourceId?: IEdgeTarget;
40
- /** Optional opaque metadata carried alongside the item; never interpreted by fgv. */
41
- readonly metadata?: Record<string, unknown>;
42
- }
43
-
44
- /**
45
- * The host classifier's verdict for an {@link IIngestItem} (stage 2). Guides the
46
- * host's own extractor (stage 3) and supplies the default `kind` / `tags` /
47
- * `confidence` fgv stamps when the extractor does not override them.
48
- *
49
- * Extensible: the `[key: string]: unknown` arm lets the host attach an opaque
50
- * classification payload without changing this interface.
51
- * @public
52
- */
53
- export interface IMemoryClassification {
54
- /** The record kind the item classifies as. */
55
- readonly kind: Kind;
56
- /** Optional tags the classifier assigns. */
57
- readonly tags?: ReadonlyArray<Tag>;
58
- /** Optional classifier confidence in `[0, 1]`; flows to `provenance.confidence`. */
59
- readonly confidence?: number;
60
- /** Opaque, host-owned extension payload — never interpreted by fgv. */
61
- readonly [key: string]: unknown;
62
- }
63
-
64
- /**
65
- * The store-owned envelope fields fgv derives or stamps: `id` (from the codec),
66
- * and the transaction-time metadata (`seq` / `contentHash` / `created` /
67
- * `updated`). A {@link ICandidateRecord} supplies everything EXCEPT these.
68
- * @public
69
- */
70
- export type StoreStampedEnvelopeField = 'id' | 'seq' | 'contentHash' | 'created' | 'updated';
71
-
72
- /**
73
- * A host-extracted candidate record (stage 3 output). The host supplies the
74
- * full envelope MINUS the {@link StoreStampedEnvelopeField | store-stamped
75
- * fields} (fgv derives `id` from the codec; the store stamps the rest) plus the
76
- * typed body. Every candidate body is validated against the kind's registered
77
- * Converter before it can reach the store (the typed validation boundary).
78
- * @public
79
- */
80
- export interface ICandidateRecord {
81
- /** The host-supplied envelope, minus the store-stamped fields. */
82
- readonly envelope: Omit<IMemoryEnvelope, StoreStampedEnvelopeField>;
83
- /** The per-kind body (a markdown string in v1), validated on ingest. */
84
- readonly body: unknown;
85
- }
86
-
87
- /**
88
- * A near-duplicate candidate surfaced to the {@link IEntityResolver} by stage-4
89
- * layer-2 similarity search: an existing record whose embedding is within the
90
- * similarity threshold of the incoming candidate.
91
- * @public
92
- */
93
- export interface IEntityResolutionCandidate {
94
- /**
95
- * The existing record's scope-qualified `(scope, id)` address. Scope-qualified
96
- * (not a bare {@link MemoryId}) because per-scope codecs legally mint the same
97
- * stem under different scopes — the {@link ResolutionVerdict} target the resolver
98
- * returns must round-trip this exact address so the write binds the intended
99
- * record.
100
- */
101
- readonly target: IEdgeTarget;
102
- /** The existing record. */
103
- readonly record: IMemoryRecord<unknown>;
104
- /** The backend similarity score (higher = more similar). */
105
- readonly score: number;
106
- }
107
-
108
- /**
109
- * The four dedup verdicts a {@link IEntityResolver} (or fgv's exact-match layer)
110
- * returns for a candidate. See the design note §3 for the verdict → write
111
- * disposition mapping. Each target-bearing arm carries a scope-qualified
112
- * {@link IEdgeTarget} (not a bare {@link MemoryId}) so the verdict resolves to a
113
- * single record even when a filename stem is reused across scopes.
114
- * @public
115
- */
116
- export type ResolutionVerdict =
117
- | { readonly verdict: 'new' }
118
- | { readonly verdict: 'duplicate-of'; readonly target: IEdgeTarget }
119
- | { readonly verdict: 'supersede'; readonly target: IEdgeTarget }
120
- | { readonly verdict: 'merge-into'; readonly target: IEdgeTarget };
121
-
122
- /**
123
- * How a candidate was ultimately written (or not) after resolution.
124
- *
125
- * - `written` — persisted as a fresh record (verdict `new`), or as a superseding
126
- * record (verdict `supersede`).
127
- * - `deduped` — not written; an existing record satisfied it (verdict
128
- * `duplicate-of`, incl. every layer-1 exact `{ kind, body }` match).
129
- * - `merged` — merged into an existing target entity (verdict `merge-into`).
130
- * @public
131
- */
132
- export type IngestDisposition = 'written' | 'deduped' | 'merged';
133
-
134
- /**
135
- * A stage-5 attributed edge proposal: the {@link ICandidateEdge.edge | edge} to
136
- * add, sourced from {@link ICandidateEdge.source | source}. The source MUST be a
137
- * candidate being written in this ingest (edges land on the source record's
138
- * `envelope.links`); the edge's `target` must resolve to a sibling candidate or
139
- * an existing store record.
140
- * @public
141
- */
142
- export interface ICandidateEdge {
143
- /** The scope-qualified reference (codec `(scope, idStem)`) of the candidate the edge originates from. */
144
- readonly source: IEdgeTarget;
145
- /** The attributed edge (type / target / optional confidence / provenance). */
146
- readonly edge: IEdge;
147
- }
148
-
149
- /**
150
- * Per-candidate outcome of an ingest run.
151
- * @public
152
- */
153
- export interface IIngestedRecordResult {
154
- /** The candidate the outcome is for. */
155
- readonly candidate: ICandidateRecord;
156
- /** The resolution verdict fgv reached (or the resolver returned). */
157
- readonly resolution: ResolutionVerdict;
158
- /** What the write ultimately did. */
159
- readonly disposition: IngestDisposition;
160
- /**
161
- * The stored record's id: the newly-written id (`written` / `merged`), or the
162
- * existing target's id (`deduped`).
163
- */
164
- readonly id: MemoryId;
165
- /** The persisted record, when a write happened (`written` / `merged`). */
166
- readonly record?: IMemoryRecord<unknown>;
167
- /** The stage-5 edges attached to this candidate before the write. */
168
- readonly edges: ReadonlyArray<ICandidateEdge>;
169
- /**
170
- * Informational diagnostic, set to `'temporal-versioned'` when the
171
- * contradicts→temporal interlock is recognized: a `contradicts` edge was
172
- * attached to a candidate of a temporal kind.
173
- *
174
- * @remarks
175
- * A temporal kind ALWAYS writes through the store's versioned put path (that is
176
- * the codec's `isVersioned` behavior — the prior version is invalidated and a
177
- * new version written on every write, contradicts edge or not). This flag does
178
- * NOT cause that routing; it is a diagnostic marker that the contradicts-driven
179
- * scenario occurred, so callers can distinguish a contradiction-superseding
180
- * version from an ordinary revision.
181
- */
182
- readonly interlock?: 'temporal-versioned';
183
- }
184
-
185
- /**
186
- * The result of ingesting a single {@link IIngestItem}: the item plus the
187
- * per-candidate outcomes (one item can yield zero or many candidate records).
188
- * @public
189
- */
190
- export interface IIngestItemResult {
191
- /** The item that was ingested. */
192
- readonly item: IIngestItem;
193
- /** The per-candidate outcomes, in extraction order. */
194
- readonly records: ReadonlyArray<IIngestedRecordResult>;
195
- }