@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
@@ -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
- }