@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.1 → 1.0.0

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 (608) hide show
  1. package/README.md +1820 -290
  2. package/dist/cjs/backfill/backfill.d.ts +171 -0
  3. package/dist/cjs/backfill/backfill.js +177 -0
  4. package/dist/cjs/checkpointer/actions/delete-thread.d.ts +50 -0
  5. package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
  6. package/dist/cjs/checkpointer/actions/get-tuple.d.ts +36 -0
  7. package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
  8. package/dist/cjs/checkpointer/actions/list.d.ts +55 -0
  9. package/dist/cjs/checkpointer/actions/list.js +70 -0
  10. package/dist/cjs/checkpointer/actions/put-writes.d.ts +49 -0
  11. package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
  12. package/dist/cjs/checkpointer/actions/put.d.ts +95 -0
  13. package/dist/cjs/checkpointer/actions/put.js +79 -0
  14. package/dist/cjs/checkpointer/internal/delta-history.d.ts +124 -0
  15. package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
  16. package/dist/cjs/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/cjs/checkpointer/internal/listing.js +104 -0
  18. package/dist/cjs/checkpointer/internal/parse.d.ts +298 -0
  19. package/dist/cjs/checkpointer/internal/parse.js +184 -0
  20. package/dist/cjs/checkpointer/internal/pending-writes.d.ts +314 -0
  21. package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
  22. package/dist/cjs/checkpointer/internal/read.d.ts +135 -0
  23. package/dist/cjs/checkpointer/internal/read.js +132 -0
  24. package/dist/cjs/checkpointer/internal/rows.d.ts +644 -0
  25. package/dist/cjs/checkpointer/internal/rows.js +356 -0
  26. package/dist/cjs/checkpointer/internal/setup.d.ts +47 -0
  27. package/dist/cjs/checkpointer/internal/setup.js +25 -0
  28. package/dist/cjs/checkpointer/saver.d.ts +306 -0
  29. package/dist/cjs/checkpointer/saver.js +56 -0
  30. package/dist/cjs/checkpointer/types.d.ts +51 -0
  31. package/dist/cjs/factory/factory.d.ts +154 -0
  32. package/dist/cjs/factory/factory.js +137 -0
  33. package/dist/{factory → cjs/factory}/types.d.ts +33 -14
  34. package/dist/cjs/history/actions/add-messages.d.ts +51 -0
  35. package/dist/cjs/history/actions/add-messages.js +17 -0
  36. package/dist/cjs/history/actions/clear.d.ts +52 -0
  37. package/dist/cjs/history/actions/clear.js +29 -0
  38. package/dist/cjs/history/actions/get-messages.d.ts +60 -0
  39. package/dist/cjs/history/actions/get-messages.js +58 -0
  40. package/dist/cjs/history/actions/list-sessions.d.ts +55 -0
  41. package/dist/cjs/history/actions/list-sessions.js +67 -0
  42. package/dist/cjs/history/actions/reconcile-count.d.ts +49 -0
  43. package/dist/cjs/history/actions/reconcile-count.js +8 -0
  44. package/dist/cjs/history/chat-message-history.d.ts +267 -0
  45. package/dist/cjs/history/chat-message-history.js +61 -0
  46. package/dist/cjs/history/internal/append.d.ts +244 -0
  47. package/dist/cjs/history/internal/append.js +267 -0
  48. package/dist/cjs/history/internal/message-read.d.ts +84 -0
  49. package/dist/cjs/history/internal/message-read.js +93 -0
  50. package/dist/cjs/history/internal/parse.d.ts +153 -0
  51. package/dist/cjs/history/internal/parse.js +113 -0
  52. package/dist/cjs/history/internal/rows.d.ts +196 -0
  53. package/dist/cjs/history/internal/rows.js +96 -0
  54. package/dist/cjs/history/internal/session.d.ts +350 -0
  55. package/dist/cjs/history/internal/session.js +296 -0
  56. package/dist/cjs/history/internal/setup.d.ts +64 -0
  57. package/dist/cjs/history/internal/setup.js +60 -0
  58. package/dist/cjs/history/session-adapter.d.ts +112 -0
  59. package/dist/cjs/history/session-adapter.js +38 -0
  60. package/dist/cjs/history/types.d.ts +102 -0
  61. package/dist/cjs/index.d.ts +53 -0
  62. package/dist/cjs/index.js +25 -0
  63. package/dist/cjs/package.json +1 -0
  64. package/dist/cjs/shared/adapter.d.ts +146 -0
  65. package/dist/cjs/shared/adapter.js +70 -0
  66. package/dist/cjs/shared/clock.d.ts +52 -0
  67. package/dist/cjs/shared/clock.js +14 -0
  68. package/dist/cjs/shared/codec/codec.d.ts +336 -0
  69. package/dist/cjs/shared/codec/codec.js +162 -0
  70. package/dist/cjs/shared/codec/compression.d.ts +66 -0
  71. package/dist/cjs/shared/codec/compression.js +45 -0
  72. package/dist/cjs/shared/codec/json-serde.d.ts +80 -0
  73. package/dist/cjs/shared/codec/json-serde.js +58 -0
  74. package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +22 -2
  75. package/dist/{shared → cjs/shared}/codec/s3/client-types.js +0 -1
  76. package/dist/cjs/shared/codec/s3/client.d.ts +63 -0
  77. package/dist/cjs/shared/codec/s3/client.js +78 -0
  78. package/dist/cjs/shared/codec/s3/config.d.ts +260 -0
  79. package/dist/cjs/shared/codec/s3/config.js +92 -0
  80. package/dist/cjs/shared/codec/s3/lifecycle.d.ts +220 -0
  81. package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
  82. package/dist/cjs/shared/codec/s3/offloader.d.ts +428 -0
  83. package/dist/cjs/shared/codec/s3/offloader.js +289 -0
  84. package/dist/cjs/shared/concurrency.d.ts +43 -0
  85. package/dist/{shared → cjs/shared}/concurrency.js +10 -9
  86. package/dist/cjs/shared/dynamodb/abort.d.ts +47 -0
  87. package/dist/cjs/shared/dynamodb/abort.js +16 -0
  88. package/dist/cjs/shared/dynamodb/batch-write.d.ts +86 -0
  89. package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
  90. package/dist/cjs/shared/dynamodb/cancellation.d.ts +124 -0
  91. package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
  92. package/dist/cjs/shared/dynamodb/client.d.ts +177 -0
  93. package/dist/{shared → cjs/shared}/dynamodb/client.js +12 -14
  94. package/dist/cjs/shared/dynamodb/idempotent-write.d.ts +596 -0
  95. package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
  96. package/dist/cjs/shared/dynamodb/paginate.d.ts +111 -0
  97. package/dist/cjs/shared/dynamodb/paginate.js +90 -0
  98. package/dist/cjs/shared/dynamodb/partition-delete.d.ts +204 -0
  99. package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
  100. package/dist/cjs/shared/dynamodb/recency-index.d.ts +243 -0
  101. package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
  102. package/dist/cjs/shared/dynamodb/retry.d.ts +317 -0
  103. package/dist/cjs/shared/dynamodb/retry.js +193 -0
  104. package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
  105. package/dist/cjs/shared/dynamodb/row-size.js +30 -0
  106. package/dist/cjs/shared/dynamodb/table-schema.d.ts +199 -0
  107. package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
  108. package/dist/cjs/shared/errors/base-error.d.ts +231 -0
  109. package/dist/cjs/shared/errors/base-error.js +73 -0
  110. package/dist/cjs/shared/errors/boundary.d.ts +86 -0
  111. package/dist/cjs/shared/errors/boundary.js +61 -0
  112. package/dist/cjs/shared/errors/classify.d.ts +206 -0
  113. package/dist/cjs/shared/errors/classify.js +232 -0
  114. package/dist/cjs/shared/errors/error-code.d.ts +95 -0
  115. package/dist/{shared → cjs/shared}/errors/error-code.js +12 -2
  116. package/dist/cjs/shared/errors/errors.d.ts +233 -0
  117. package/dist/cjs/shared/errors/errors.js +123 -0
  118. package/dist/cjs/shared/logging/logger.d.ts +80 -0
  119. package/dist/cjs/shared/logging/logger.js +30 -0
  120. package/dist/cjs/shared/logging/redaction.d.ts +123 -0
  121. package/dist/cjs/shared/logging/redaction.js +145 -0
  122. package/dist/cjs/shared/logging/secret-patterns.d.ts +227 -0
  123. package/dist/cjs/shared/logging/secret-patterns.js +93 -0
  124. package/dist/cjs/shared/logging/truncate.d.ts +197 -0
  125. package/dist/cjs/shared/logging/truncate.js +31 -0
  126. package/dist/cjs/shared/options.d.ts +100 -0
  127. package/dist/cjs/shared/ulid.d.ts +80 -0
  128. package/dist/{shared → cjs/shared}/ulid.js +7 -21
  129. package/dist/cjs/shared/validation/collaborators.d.ts +160 -0
  130. package/dist/cjs/shared/validation/collaborators.js +79 -0
  131. package/dist/cjs/shared/validation/option-shape.d.ts +91 -0
  132. package/dist/cjs/shared/validation/option-shape.js +31 -0
  133. package/dist/cjs/shared/validation/options.d.ts +145 -0
  134. package/dist/cjs/shared/validation/options.js +166 -0
  135. package/dist/cjs/shared/validation/primitives.d.ts +292 -0
  136. package/dist/cjs/shared/validation/primitives.js +114 -0
  137. package/dist/cjs/shared/validation/ttl.d.ts +94 -0
  138. package/dist/cjs/shared/validation/ttl.js +52 -0
  139. package/dist/cjs/store/actions/list-namespaces.d.ts +79 -0
  140. package/dist/cjs/store/actions/list-namespaces.js +92 -0
  141. package/dist/cjs/store/actions/put.d.ts +43 -0
  142. package/dist/cjs/store/actions/put.js +49 -0
  143. package/dist/cjs/store/actions/reconcile-vector-index.d.ts +38 -0
  144. package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
  145. package/dist/cjs/store/actions/search.d.ts +38 -0
  146. package/dist/cjs/store/actions/search.js +26 -0
  147. package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
  148. package/dist/cjs/store/internal/batch-plan.js +32 -0
  149. package/dist/cjs/store/internal/filter.d.ts +43 -0
  150. package/dist/cjs/store/internal/filter.js +64 -0
  151. package/dist/cjs/store/internal/get-item.d.ts +77 -0
  152. package/dist/cjs/store/internal/get-item.js +58 -0
  153. package/dist/cjs/store/internal/item-write.d.ts +270 -0
  154. package/dist/cjs/store/internal/item-write.js +181 -0
  155. package/dist/cjs/store/internal/parse.d.ts +230 -0
  156. package/dist/cjs/store/internal/parse.js +180 -0
  157. package/dist/cjs/store/internal/rows.d.ts +359 -0
  158. package/dist/cjs/store/internal/rows.js +166 -0
  159. package/dist/cjs/store/internal/semantic-search.d.ts +168 -0
  160. package/dist/{store/internal/text-path.js → cjs/store/internal/semantic-search.js} +92 -28
  161. package/dist/cjs/store/internal/setup.d.ts +96 -0
  162. package/dist/cjs/store/internal/setup.js +103 -0
  163. package/dist/cjs/store/internal/table-search.d.ts +100 -0
  164. package/dist/cjs/store/internal/table-search.js +123 -0
  165. package/dist/cjs/store/internal/vector-index.d.ts +258 -0
  166. package/dist/cjs/store/internal/vector-index.js +269 -0
  167. package/dist/cjs/store/store.d.ts +329 -0
  168. package/dist/cjs/store/store.js +97 -0
  169. package/dist/cjs/store/types.d.ts +111 -0
  170. package/dist/cjs/store/vector-backend.d.ts +104 -0
  171. package/dist/cjs/store/vector-backend.js +4 -0
  172. package/dist/esm/backfill/backfill.d.ts +171 -0
  173. package/dist/esm/backfill/backfill.js +170 -0
  174. package/dist/esm/checkpointer/actions/delete-thread.d.ts +50 -0
  175. package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
  176. package/dist/esm/checkpointer/actions/get-tuple.d.ts +36 -0
  177. package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
  178. package/dist/esm/checkpointer/actions/list.d.ts +55 -0
  179. package/dist/esm/checkpointer/actions/list.js +67 -0
  180. package/dist/esm/checkpointer/actions/put-writes.d.ts +49 -0
  181. package/dist/esm/checkpointer/actions/put-writes.js +18 -0
  182. package/dist/esm/checkpointer/actions/put.d.ts +95 -0
  183. package/dist/esm/checkpointer/actions/put.js +75 -0
  184. package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
  185. package/dist/esm/checkpointer/internal/delta-history.js +126 -0
  186. package/dist/esm/checkpointer/internal/listing.d.ts +149 -0
  187. package/dist/esm/checkpointer/internal/listing.js +95 -0
  188. package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
  189. package/dist/esm/checkpointer/internal/parse.js +169 -0
  190. package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
  191. package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
  192. package/dist/esm/checkpointer/internal/read.d.ts +135 -0
  193. package/dist/esm/checkpointer/internal/read.js +125 -0
  194. package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
  195. package/dist/esm/checkpointer/internal/rows.js +323 -0
  196. package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
  197. package/dist/esm/checkpointer/internal/setup.js +21 -0
  198. package/dist/esm/checkpointer/saver.d.ts +306 -0
  199. package/dist/esm/checkpointer/saver.js +52 -0
  200. package/dist/esm/checkpointer/types.d.ts +51 -0
  201. package/dist/esm/checkpointer/types.js +1 -0
  202. package/dist/esm/factory/factory.d.ts +154 -0
  203. package/dist/esm/factory/factory.js +133 -0
  204. package/dist/esm/factory/types.d.ts +76 -0
  205. package/dist/esm/factory/types.js +1 -0
  206. package/dist/esm/history/actions/add-messages.d.ts +51 -0
  207. package/dist/esm/history/actions/add-messages.js +14 -0
  208. package/dist/esm/history/actions/clear.d.ts +52 -0
  209. package/dist/esm/history/actions/clear.js +26 -0
  210. package/dist/esm/history/actions/get-messages.d.ts +60 -0
  211. package/dist/esm/history/actions/get-messages.js +55 -0
  212. package/dist/esm/history/actions/list-sessions.d.ts +55 -0
  213. package/dist/esm/history/actions/list-sessions.js +64 -0
  214. package/dist/esm/history/actions/reconcile-count.d.ts +49 -0
  215. package/dist/esm/history/actions/reconcile-count.js +5 -0
  216. package/dist/esm/history/chat-message-history.d.ts +267 -0
  217. package/dist/esm/history/chat-message-history.js +57 -0
  218. package/dist/esm/history/internal/append.d.ts +244 -0
  219. package/dist/esm/history/internal/append.js +259 -0
  220. package/dist/esm/history/internal/message-read.d.ts +84 -0
  221. package/dist/esm/history/internal/message-read.js +89 -0
  222. package/dist/esm/history/internal/parse.d.ts +153 -0
  223. package/dist/esm/history/internal/parse.js +105 -0
  224. package/dist/esm/history/internal/rows.d.ts +196 -0
  225. package/dist/esm/history/internal/rows.js +83 -0
  226. package/dist/esm/history/internal/session.d.ts +350 -0
  227. package/dist/esm/history/internal/session.js +285 -0
  228. package/dist/esm/history/internal/setup.d.ts +64 -0
  229. package/dist/esm/history/internal/setup.js +56 -0
  230. package/dist/esm/history/session-adapter.d.ts +112 -0
  231. package/dist/esm/history/session-adapter.js +34 -0
  232. package/dist/esm/history/types.d.ts +102 -0
  233. package/dist/esm/history/types.js +1 -0
  234. package/dist/esm/index.d.ts +53 -0
  235. package/dist/esm/index.js +10 -0
  236. package/dist/esm/shared/adapter.d.ts +146 -0
  237. package/dist/esm/shared/adapter.js +65 -0
  238. package/dist/esm/shared/clock.d.ts +52 -0
  239. package/dist/esm/shared/clock.js +9 -0
  240. package/dist/esm/shared/codec/codec.d.ts +336 -0
  241. package/dist/esm/shared/codec/codec.js +150 -0
  242. package/dist/esm/shared/codec/compression.d.ts +66 -0
  243. package/dist/esm/shared/codec/compression.js +40 -0
  244. package/dist/esm/shared/codec/json-serde.d.ts +80 -0
  245. package/dist/esm/shared/codec/json-serde.js +54 -0
  246. package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
  247. package/dist/esm/shared/codec/s3/client-types.js +3 -0
  248. package/dist/esm/shared/codec/s3/client.d.ts +63 -0
  249. package/dist/esm/shared/codec/s3/client.js +40 -0
  250. package/dist/esm/shared/codec/s3/config.d.ts +260 -0
  251. package/dist/esm/shared/codec/s3/config.js +79 -0
  252. package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
  253. package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
  254. package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
  255. package/dist/esm/shared/codec/s3/offloader.js +278 -0
  256. package/dist/esm/shared/concurrency.d.ts +43 -0
  257. package/dist/esm/shared/concurrency.js +27 -0
  258. package/dist/esm/shared/dynamodb/abort.d.ts +47 -0
  259. package/dist/esm/shared/dynamodb/abort.js +12 -0
  260. package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
  261. package/dist/esm/shared/dynamodb/batch-write.js +74 -0
  262. package/dist/esm/shared/dynamodb/cancellation.d.ts +124 -0
  263. package/dist/esm/shared/dynamodb/cancellation.js +30 -0
  264. package/dist/esm/shared/dynamodb/client.d.ts +177 -0
  265. package/dist/esm/shared/dynamodb/client.js +35 -0
  266. package/dist/esm/shared/dynamodb/idempotent-write.d.ts +596 -0
  267. package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
  268. package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
  269. package/dist/esm/shared/dynamodb/paginate.js +84 -0
  270. package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
  271. package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
  272. package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
  273. package/dist/esm/shared/dynamodb/recency-index.js +136 -0
  274. package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
  275. package/dist/esm/shared/dynamodb/retry.js +180 -0
  276. package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
  277. package/dist/esm/shared/dynamodb/row-size.js +26 -0
  278. package/dist/esm/shared/dynamodb/table-schema.d.ts +199 -0
  279. package/dist/esm/shared/dynamodb/table-schema.js +43 -0
  280. package/dist/esm/shared/errors/base-error.d.ts +231 -0
  281. package/dist/esm/shared/errors/base-error.js +64 -0
  282. package/dist/esm/shared/errors/boundary.d.ts +86 -0
  283. package/dist/esm/shared/errors/boundary.js +54 -0
  284. package/dist/esm/shared/errors/classify.d.ts +206 -0
  285. package/dist/esm/shared/errors/classify.js +220 -0
  286. package/dist/esm/shared/errors/error-code.d.ts +95 -0
  287. package/dist/esm/shared/errors/error-code.js +24 -0
  288. package/dist/esm/shared/errors/errors.d.ts +233 -0
  289. package/dist/esm/shared/errors/errors.js +110 -0
  290. package/dist/esm/shared/logging/logger.d.ts +80 -0
  291. package/dist/esm/shared/logging/logger.js +25 -0
  292. package/dist/esm/shared/logging/redaction.d.ts +123 -0
  293. package/dist/esm/shared/logging/redaction.js +140 -0
  294. package/dist/esm/shared/logging/secret-patterns.d.ts +227 -0
  295. package/dist/esm/shared/logging/secret-patterns.js +83 -0
  296. package/dist/esm/shared/logging/truncate.d.ts +197 -0
  297. package/dist/esm/shared/logging/truncate.js +25 -0
  298. package/dist/esm/shared/options.d.ts +100 -0
  299. package/dist/esm/shared/options.js +1 -0
  300. package/dist/esm/shared/ulid.d.ts +80 -0
  301. package/dist/esm/shared/ulid.js +77 -0
  302. package/dist/esm/shared/validation/collaborators.d.ts +160 -0
  303. package/dist/esm/shared/validation/collaborators.js +70 -0
  304. package/dist/esm/shared/validation/option-shape.d.ts +91 -0
  305. package/dist/esm/shared/validation/option-shape.js +24 -0
  306. package/dist/esm/shared/validation/options.d.ts +145 -0
  307. package/dist/esm/shared/validation/options.js +156 -0
  308. package/dist/esm/shared/validation/primitives.d.ts +292 -0
  309. package/dist/esm/shared/validation/primitives.js +100 -0
  310. package/dist/esm/shared/validation/ttl.d.ts +94 -0
  311. package/dist/esm/shared/validation/ttl.js +46 -0
  312. package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
  313. package/dist/esm/store/actions/list-namespaces.js +86 -0
  314. package/dist/esm/store/actions/put.d.ts +43 -0
  315. package/dist/esm/store/actions/put.js +46 -0
  316. package/dist/esm/store/actions/reconcile-vector-index.d.ts +38 -0
  317. package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
  318. package/dist/esm/store/actions/search.d.ts +38 -0
  319. package/dist/esm/store/actions/search.js +23 -0
  320. package/dist/esm/store/internal/batch-plan.d.ts +56 -0
  321. package/dist/esm/store/internal/batch-plan.js +28 -0
  322. package/dist/esm/store/internal/filter.d.ts +43 -0
  323. package/dist/esm/store/internal/filter.js +60 -0
  324. package/dist/esm/store/internal/get-item.d.ts +77 -0
  325. package/dist/esm/store/internal/get-item.js +54 -0
  326. package/dist/esm/store/internal/item-write.d.ts +270 -0
  327. package/dist/esm/store/internal/item-write.js +173 -0
  328. package/dist/esm/store/internal/parse.d.ts +230 -0
  329. package/dist/esm/store/internal/parse.js +169 -0
  330. package/dist/esm/store/internal/rows.d.ts +359 -0
  331. package/dist/esm/store/internal/rows.js +147 -0
  332. package/dist/esm/store/internal/semantic-search.d.ts +168 -0
  333. package/dist/esm/store/internal/semantic-search.js +200 -0
  334. package/dist/esm/store/internal/setup.d.ts +96 -0
  335. package/dist/esm/store/internal/setup.js +98 -0
  336. package/dist/esm/store/internal/table-search.d.ts +100 -0
  337. package/dist/esm/store/internal/table-search.js +119 -0
  338. package/dist/esm/store/internal/vector-index.d.ts +258 -0
  339. package/dist/esm/store/internal/vector-index.js +256 -0
  340. package/dist/esm/store/store.d.ts +329 -0
  341. package/dist/esm/store/store.js +93 -0
  342. package/dist/esm/store/types.d.ts +111 -0
  343. package/dist/esm/store/types.js +1 -0
  344. package/dist/esm/store/vector-backend.d.ts +104 -0
  345. package/dist/esm/store/vector-backend.js +1 -0
  346. package/package.json +68 -46
  347. package/dist/checkpointer/actions/delete-thread.d.ts +0 -10
  348. package/dist/checkpointer/actions/delete-thread.js +0 -38
  349. package/dist/checkpointer/actions/get-tuple.d.ts +0 -11
  350. package/dist/checkpointer/actions/get-tuple.js +0 -25
  351. package/dist/checkpointer/actions/list.d.ts +0 -20
  352. package/dist/checkpointer/actions/list.js +0 -113
  353. package/dist/checkpointer/actions/put-writes.d.ts +0 -15
  354. package/dist/checkpointer/actions/put-writes.js +0 -62
  355. package/dist/checkpointer/actions/put.d.ts +0 -17
  356. package/dist/checkpointer/actions/put.js +0 -73
  357. package/dist/checkpointer/internal/assemble.d.ts +0 -17
  358. package/dist/checkpointer/internal/assemble.js +0 -38
  359. package/dist/checkpointer/internal/checkpoint-write-verify.d.ts +0 -24
  360. package/dist/checkpointer/internal/checkpoint-write-verify.js +0 -67
  361. package/dist/checkpointer/internal/configurable.d.ts +0 -12
  362. package/dist/checkpointer/internal/configurable.js +0 -24
  363. package/dist/checkpointer/internal/fetch.d.ts +0 -19
  364. package/dist/checkpointer/internal/fetch.js +0 -88
  365. package/dist/checkpointer/internal/filter-match.d.ts +0 -13
  366. package/dist/checkpointer/internal/filter-match.js +0 -15
  367. package/dist/checkpointer/internal/item-reader.d.ts +0 -66
  368. package/dist/checkpointer/internal/item-reader.js +0 -113
  369. package/dist/checkpointer/internal/item-writer.d.ts +0 -35
  370. package/dist/checkpointer/internal/item-writer.js +0 -107
  371. package/dist/checkpointer/internal/keys.d.ts +0 -41
  372. package/dist/checkpointer/internal/keys.js +0 -117
  373. package/dist/checkpointer/internal/list-scope.d.ts +0 -61
  374. package/dist/checkpointer/internal/list-scope.js +0 -108
  375. package/dist/checkpointer/internal/pending-sends.d.ts +0 -13
  376. package/dist/checkpointer/internal/pending-sends.js +0 -29
  377. package/dist/checkpointer/internal/query.d.ts +0 -21
  378. package/dist/checkpointer/internal/query.js +0 -42
  379. package/dist/checkpointer/internal/regular-write.d.ts +0 -28
  380. package/dist/checkpointer/internal/regular-write.js +0 -66
  381. package/dist/checkpointer/internal/setup.d.ts +0 -33
  382. package/dist/checkpointer/internal/setup.js +0 -38
  383. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -29
  384. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  385. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -23
  386. package/dist/checkpointer/internal/special-write-cleanup.js +0 -50
  387. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -53
  388. package/dist/checkpointer/internal/special-write-verify.js +0 -80
  389. package/dist/checkpointer/internal/stored-channels.d.ts +0 -31
  390. package/dist/checkpointer/internal/stored-channels.js +0 -70
  391. package/dist/checkpointer/internal/validation.d.ts +0 -18
  392. package/dist/checkpointer/internal/validation.js +0 -40
  393. package/dist/checkpointer/internal/write-guard.d.ts +0 -20
  394. package/dist/checkpointer/internal/write-guard.js +0 -48
  395. package/dist/checkpointer/internal/write-index.d.ts +0 -36
  396. package/dist/checkpointer/internal/write-index.js +0 -41
  397. package/dist/checkpointer/saver.d.ts +0 -70
  398. package/dist/checkpointer/saver.js +0 -105
  399. package/dist/checkpointer/types.d.ts +0 -58
  400. package/dist/factory/factory.d.ts +0 -40
  401. package/dist/factory/factory.js +0 -87
  402. package/dist/history/actions/add-messages.d.ts +0 -15
  403. package/dist/history/actions/add-messages.js +0 -77
  404. package/dist/history/actions/clear.d.ts +0 -10
  405. package/dist/history/actions/clear.js +0 -34
  406. package/dist/history/actions/get-messages.d.ts +0 -17
  407. package/dist/history/actions/get-messages.js +0 -79
  408. package/dist/history/actions/list-sessions.d.ts +0 -13
  409. package/dist/history/actions/list-sessions.js +0 -53
  410. package/dist/history/actions/reconcile-count.d.ts +0 -12
  411. package/dist/history/actions/reconcile-count.js +0 -64
  412. package/dist/history/chat-message-history.d.ts +0 -73
  413. package/dist/history/chat-message-history.js +0 -111
  414. package/dist/history/internal/append-saga.d.ts +0 -25
  415. package/dist/history/internal/append-saga.js +0 -79
  416. package/dist/history/internal/compensation.d.ts +0 -25
  417. package/dist/history/internal/compensation.js +0 -92
  418. package/dist/history/internal/item-mapper.d.ts +0 -9
  419. package/dist/history/internal/item-mapper.js +0 -27
  420. package/dist/history/internal/keys.d.ts +0 -16
  421. package/dist/history/internal/keys.js +0 -48
  422. package/dist/history/internal/message-chunker.d.ts +0 -13
  423. package/dist/history/internal/message-chunker.js +0 -67
  424. package/dist/history/internal/message-transaction.d.ts +0 -25
  425. package/dist/history/internal/message-transaction.js +0 -61
  426. package/dist/history/internal/message-window.d.ts +0 -17
  427. package/dist/history/internal/message-window.js +0 -49
  428. package/dist/history/internal/query.d.ts +0 -23
  429. package/dist/history/internal/query.js +0 -39
  430. package/dist/history/internal/session-count.d.ts +0 -47
  431. package/dist/history/internal/session-count.js +0 -115
  432. package/dist/history/internal/session-title.d.ts +0 -19
  433. package/dist/history/internal/session-title.js +0 -43
  434. package/dist/history/internal/session-update.d.ts +0 -27
  435. package/dist/history/internal/session-update.js +0 -69
  436. package/dist/history/internal/setup.d.ts +0 -31
  437. package/dist/history/internal/setup.js +0 -43
  438. package/dist/history/internal/title-generator.d.ts +0 -12
  439. package/dist/history/internal/title-generator.js +0 -41
  440. package/dist/history/internal/ttl-anchor.d.ts +0 -24
  441. package/dist/history/internal/ttl-anchor.js +0 -38
  442. package/dist/history/internal/validation.d.ts +0 -25
  443. package/dist/history/internal/validation.js +0 -53
  444. package/dist/history/session-adapter.d.ts +0 -29
  445. package/dist/history/session-adapter.js +0 -35
  446. package/dist/history/types.d.ts +0 -69
  447. package/dist/index.d.ts +0 -29
  448. package/dist/index.js +0 -32
  449. package/dist/shared/clock.d.ts +0 -8
  450. package/dist/shared/clock.js +0 -16
  451. package/dist/shared/codec/codec.d.ts +0 -53
  452. package/dist/shared/codec/codec.js +0 -66
  453. package/dist/shared/codec/compression.d.ts +0 -24
  454. package/dist/shared/codec/compression.js +0 -48
  455. package/dist/shared/codec/descriptor-keys.d.ts +0 -12
  456. package/dist/shared/codec/descriptor-keys.js +0 -14
  457. package/dist/shared/codec/encode.d.ts +0 -13
  458. package/dist/shared/codec/encode.js +0 -43
  459. package/dist/shared/codec/json-serde.d.ts +0 -7
  460. package/dist/shared/codec/json-serde.js +0 -17
  461. package/dist/shared/codec/payload-loss.d.ts +0 -12
  462. package/dist/shared/codec/payload-loss.js +0 -38
  463. package/dist/shared/codec/s3/adapter-config.d.ts +0 -13
  464. package/dist/shared/codec/s3/adapter-config.js +0 -22
  465. package/dist/shared/codec/s3/bounded-body.d.ts +0 -14
  466. package/dist/shared/codec/s3/bounded-body.js +0 -47
  467. package/dist/shared/codec/s3/client.d.ts +0 -18
  468. package/dist/shared/codec/s3/client.js +0 -46
  469. package/dist/shared/codec/s3/config.d.ts +0 -51
  470. package/dist/shared/codec/s3/config.js +0 -58
  471. package/dist/shared/codec/s3/delete.d.ts +0 -7
  472. package/dist/shared/codec/s3/delete.js +0 -28
  473. package/dist/shared/codec/s3/key-scope.d.ts +0 -23
  474. package/dist/shared/codec/s3/key-scope.js +0 -44
  475. package/dist/shared/codec/s3/lifecycle.d.ts +0 -14
  476. package/dist/shared/codec/s3/lifecycle.js +0 -63
  477. package/dist/shared/codec/s3/offloader.d.ts +0 -44
  478. package/dist/shared/codec/s3/offloader.js +0 -118
  479. package/dist/shared/codec/s3/orphans.d.ts +0 -23
  480. package/dist/shared/codec/s3/orphans.js +0 -71
  481. package/dist/shared/codec/s3/read-write.d.ts +0 -18
  482. package/dist/shared/codec/s3/read-write.js +0 -51
  483. package/dist/shared/codec/s3/retry.d.ts +0 -5
  484. package/dist/shared/codec/s3/retry.js +0 -22
  485. package/dist/shared/concurrency.d.ts +0 -6
  486. package/dist/shared/constants.d.ts +0 -112
  487. package/dist/shared/constants.js +0 -115
  488. package/dist/shared/dynamodb/abort.d.ts +0 -9
  489. package/dist/shared/dynamodb/abort.js +0 -27
  490. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  491. package/dist/shared/dynamodb/backoff.js +0 -48
  492. package/dist/shared/dynamodb/batch-write.d.ts +0 -22
  493. package/dist/shared/dynamodb/batch-write.js +0 -53
  494. package/dist/shared/dynamodb/cancellation.d.ts +0 -6
  495. package/dist/shared/dynamodb/cancellation.js +0 -7
  496. package/dist/shared/dynamodb/client.d.ts +0 -28
  497. package/dist/shared/dynamodb/conditional-put.d.ts +0 -67
  498. package/dist/shared/dynamodb/conditional-put.js +0 -76
  499. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -21
  500. package/dist/shared/dynamodb/drain-unprocessed.js +0 -43
  501. package/dist/shared/dynamodb/expiry.d.ts +0 -16
  502. package/dist/shared/dynamodb/expiry.js +0 -29
  503. package/dist/shared/dynamodb/paginate-core.d.ts +0 -24
  504. package/dist/shared/dynamodb/paginate-core.js +0 -82
  505. package/dist/shared/dynamodb/paginate.d.ts +0 -14
  506. package/dist/shared/dynamodb/paginate.js +0 -19
  507. package/dist/shared/dynamodb/partition-delete.d.ts +0 -39
  508. package/dist/shared/dynamodb/partition-delete.js +0 -71
  509. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -17
  510. package/dist/shared/dynamodb/retry-classifier.js +0 -118
  511. package/dist/shared/dynamodb/retry-policy.d.ts +0 -26
  512. package/dist/shared/dynamodb/retry-policy.js +0 -22
  513. package/dist/shared/dynamodb/retry.d.ts +0 -31
  514. package/dist/shared/dynamodb/retry.js +0 -57
  515. package/dist/shared/dynamodb/scan.d.ts +0 -14
  516. package/dist/shared/dynamodb/scan.js +0 -19
  517. package/dist/shared/dynamodb/types.d.ts +0 -23
  518. package/dist/shared/errors/base-error.d.ts +0 -30
  519. package/dist/shared/errors/base-error.js +0 -27
  520. package/dist/shared/errors/boundary.d.ts +0 -18
  521. package/dist/shared/errors/boundary.js +0 -46
  522. package/dist/shared/errors/error-code.d.ts +0 -13
  523. package/dist/shared/errors/errors.d.ts +0 -68
  524. package/dist/shared/errors/errors.js +0 -114
  525. package/dist/shared/errors/upstream-error.d.ts +0 -16
  526. package/dist/shared/errors/upstream-error.js +0 -27
  527. package/dist/shared/errors/wrap-error.d.ts +0 -7
  528. package/dist/shared/errors/wrap-error.js +0 -15
  529. package/dist/shared/logging/logger.d.ts +0 -18
  530. package/dist/shared/logging/logger.js +0 -15
  531. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  532. package/dist/shared/logging/redaction-walk.js +0 -112
  533. package/dist/shared/logging/redaction.d.ts +0 -39
  534. package/dist/shared/logging/redaction.js +0 -75
  535. package/dist/shared/logging/secret-patterns.d.ts +0 -92
  536. package/dist/shared/logging/secret-patterns.js +0 -133
  537. package/dist/shared/options.d.ts +0 -37
  538. package/dist/shared/ulid.d.ts +0 -23
  539. package/dist/shared/validation/options.d.ts +0 -8
  540. package/dist/shared/validation/options.js +0 -90
  541. package/dist/shared/validation/primitives.d.ts +0 -29
  542. package/dist/shared/validation/primitives.js +0 -82
  543. package/dist/shared/validation/ttl.d.ts +0 -28
  544. package/dist/shared/validation/ttl.js +0 -52
  545. package/dist/store/actions/get.d.ts +0 -13
  546. package/dist/store/actions/get.js +0 -73
  547. package/dist/store/actions/list-namespaces.d.ts +0 -8
  548. package/dist/store/actions/list-namespaces.js +0 -59
  549. package/dist/store/actions/put.d.ts +0 -10
  550. package/dist/store/actions/put.js +0 -96
  551. package/dist/store/actions/reconcile-vector-index.d.ts +0 -18
  552. package/dist/store/actions/reconcile-vector-index.js +0 -26
  553. package/dist/store/actions/search.d.ts +0 -9
  554. package/dist/store/actions/search.js +0 -34
  555. package/dist/store/internal/backend-search.d.ts +0 -4
  556. package/dist/store/internal/backend-search.js +0 -74
  557. package/dist/store/internal/batch-plan.d.ts +0 -11
  558. package/dist/store/internal/batch-plan.js +0 -52
  559. package/dist/store/internal/candidates.d.ts +0 -23
  560. package/dist/store/internal/candidates.js +0 -94
  561. package/dist/store/internal/filter.d.ts +0 -9
  562. package/dist/store/internal/filter.js +0 -85
  563. package/dist/store/internal/index-reconcile.d.ts +0 -21
  564. package/dist/store/internal/index-reconcile.js +0 -118
  565. package/dist/store/internal/index-sync.d.ts +0 -10
  566. package/dist/store/internal/index-sync.js +0 -25
  567. package/dist/store/internal/item-mapper.d.ts +0 -27
  568. package/dist/store/internal/item-mapper.js +0 -61
  569. package/dist/store/internal/keys.d.ts +0 -17
  570. package/dist/store/internal/keys.js +0 -41
  571. package/dist/store/internal/namespace-match.d.ts +0 -11
  572. package/dist/store/internal/namespace-match.js +0 -40
  573. package/dist/store/internal/option-validation.d.ts +0 -13
  574. package/dist/store/internal/option-validation.js +0 -77
  575. package/dist/store/internal/overwrite-swap.d.ts +0 -32
  576. package/dist/store/internal/overwrite-swap.js +0 -68
  577. package/dist/store/internal/persist.d.ts +0 -28
  578. package/dist/store/internal/persist.js +0 -64
  579. package/dist/store/internal/query.d.ts +0 -11
  580. package/dist/store/internal/query.js +0 -48
  581. package/dist/store/internal/ranker.d.ts +0 -18
  582. package/dist/store/internal/ranker.js +0 -39
  583. package/dist/store/internal/read-existing.d.ts +0 -23
  584. package/dist/store/internal/read-existing.js +0 -41
  585. package/dist/store/internal/score-direction.d.ts +0 -31
  586. package/dist/store/internal/score-direction.js +0 -38
  587. package/dist/store/internal/search-filter.d.ts +0 -3
  588. package/dist/store/internal/search-filter.js +0 -10
  589. package/dist/store/internal/semantic-search.d.ts +0 -34
  590. package/dist/store/internal/semantic-search.js +0 -87
  591. package/dist/store/internal/setup.d.ts +0 -36
  592. package/dist/store/internal/setup.js +0 -40
  593. package/dist/store/internal/text-path.d.ts +0 -17
  594. package/dist/store/internal/validation.d.ts +0 -18
  595. package/dist/store/internal/validation.js +0 -51
  596. package/dist/store/internal/write-verify.d.ts +0 -42
  597. package/dist/store/internal/write-verify.js +0 -71
  598. package/dist/store/store.d.ts +0 -61
  599. package/dist/store/store.js +0 -107
  600. package/dist/store/types.d.ts +0 -50
  601. package/dist/store/types.js +0 -2
  602. package/dist/store/vector-backend.d.ts +0 -43
  603. package/dist/store/vector-backend.js +0 -2
  604. /package/dist/{checkpointer → cjs/checkpointer}/types.js +0 -0
  605. /package/dist/{factory → cjs/factory}/types.js +0 -0
  606. /package/dist/{history → cjs/history}/types.js +0 -0
  607. /package/dist/{shared → cjs/shared}/options.js +0 -0
  608. /package/dist/{shared/dynamodb → cjs/store}/types.js +0 -0
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Hides which text of a value is embedded, and how.
3
+ *
4
+ * The text an index field names is extracted exactly as LangGraph's in-memory
5
+ * store extracts it — dotted paths, `[n]` and `[*]`, `{a,b}` groups, pretty
6
+ * JSON for containers — then embedded in bounded batches, and every vector the
7
+ * model returns is held to the configured dimension.
8
+ */
9
+ import type { IndexConfig } from '@langchain/langgraph-checkpoint';
10
+ import type { JsonValue } from './filter.js';
11
+ import type { StoreContext } from './setup.js';
12
+ /**
13
+ * Cosine similarity of two vectors.
14
+ *
15
+ * Accepts: any two vectors. Lengths that disagree, and a vector of all zeros,
16
+ * have no defined angle between them.
17
+ *
18
+ * Returns: the cosine, in [-1, 1]; `0` for the undefined cases, which ranks
19
+ * such a pair as unrelated rather than as opposed. A caller that must
20
+ * distinguish "unrelated" from "incomparable" checks the lengths itself —
21
+ * `rankInMemory` does, so it can report a model mismatch instead of ranking
22
+ * everything at zero.
23
+ *
24
+ * Throws: nothing.
25
+ */
26
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
27
+ /**
28
+ * The indexable texts of a value, one per extracted path, in field order.
29
+ *
30
+ * Extraction is byte-for-byte what LangGraph's `InMemoryStore` does (see
31
+ * {@link getTextAtPath}), and so is keeping them apart: the reference embeds each
32
+ * extracted element separately and scores an item by its best-matching one.
33
+ * Joining them and embedding once averages a long document into a single
34
+ * vector, which ranks a document holding one strongly-matching section
35
+ * materially lower — a retrieval-quality difference, not an edge case.
36
+ *
37
+ * Accepts: `value` — a stored item's value. `fields` — JSON paths; a path that
38
+ * addresses nothing contributes nothing.
39
+ *
40
+ * Returns: one text per extracted path, in field order, with empty ones
41
+ * dropped: an empty string embeds to a vector that means nothing and would rank
42
+ * against every query.
43
+ *
44
+ * Throws: nothing.
45
+ */
46
+ export declare function extractTexts(value: Record<string, JsonValue>, fields: string[]): string[];
47
+ /**
48
+ * The same texts joined into one, which is what a single-vector consumer needs.
49
+ *
50
+ * Accepts: as {@link extractTexts}.
51
+ *
52
+ * Returns: the texts joined by a space, and `''` when there are none — which is
53
+ * how a caller tells "nothing to index" from a text to embed.
54
+ *
55
+ * Throws: nothing.
56
+ *
57
+ * Used only for a configured `vectorBackend`, whose contract is one vector per
58
+ * `(namespace, key)`; the in-DynamoDB path embeds each text separately.
59
+ */
60
+ export declare function extractText(value: Record<string, JsonValue>, fields: string[]): string;
61
+ /**
62
+ * Reject a vector whose length disagrees with the configured `index.dims`. A
63
+ * mismatch means the embeddings model does not match the configuration, so
64
+ * every stored vector would be incomparable with every query; failing here
65
+ * surfaces that at the first put or search instead of ranking silently.
66
+ *
67
+ * Accepts: `index.dims` — the check is skipped when it is not a positive
68
+ * integer, since nothing else in this package reads it and a store configured
69
+ * without it must keep working. `vector` — a document or query vector the model
70
+ * just returned. `what` — names which of the two, for the message.
71
+ *
72
+ * Returns: nothing: `vector` is kept under its declared type, and this
73
+ * checks it.
74
+ *
75
+ * Throws: `VALIDATION` naming `index.dims`.
76
+ */
77
+ export declare function assertVectorDims(index: IndexConfig, vector: number[], what: string): void;
78
+ /**
79
+ * Embed several values for indexing with `embedDocuments` — the document-side
80
+ * method; providers such as Titan and Cohere embed documents and queries with
81
+ * different task types, so embedding a document with `embedQuery` degrades
82
+ * retrieval.
83
+ *
84
+ * Accepts: `values` — any number, including none. `fieldsOverride` — a put's
85
+ * own `index` fields; absent uses the store's, and a store with no configured
86
+ * fields indexes the whole document (`'$'`), as the reference does.
87
+ *
88
+ * Returns: one entry per value, in input order: its vector, or `undefined` when
89
+ * the value has no indexable text or the store has no index at all.
90
+ *
91
+ * Throws: `VALIDATION` naming `index.dims` when the model's width disagrees
92
+ * with the configuration; whatever the model throws.
93
+ *
94
+ * Guarantees: values with no text are never sent to the model, and the rest go
95
+ * in batches of {@link EMBED_BATCH_SIZE}, so one call cannot turn into one
96
+ * provider request per item or a single unbounded one.
97
+ */
98
+ export declare function embedValues(context: StoreContext, values: Record<string, JsonValue>[], fieldsOverride?: string[]): Promise<(number[] | undefined)[]>;
99
+ /**
100
+ * Embed one value for indexing.
101
+ *
102
+ * Accepts: as {@link embedValues}, for one value; `fieldsOverride` (from a
103
+ * put's `index` option) takes precedence over the store's configured fields.
104
+ *
105
+ * Returns: the value's vector, or undefined when indexing is off or it has no
106
+ * indexable text.
107
+ *
108
+ * Throws: as {@link embedValues}.
109
+ */
110
+ export declare function embedValue(context: StoreContext, value: Record<string, JsonValue>, fieldsOverride?: string[]): Promise<number[] | undefined>;
111
+ /**
112
+ * One vector per extracted path, for the item's own row — the shape the
113
+ * in-DynamoDB ranker scores by best match, matching the reference store.
114
+ *
115
+ * Accepts: as {@link embedValues}, for one value.
116
+ *
117
+ * Returns: one vector per extracted text, in path order; `undefined` when
118
+ * indexing is off or the value yields no indexable text — which is what clears
119
+ * a stale vector on a re-put, since the row is written without the attribute.
120
+ *
121
+ * Throws: as {@link embedValues}.
122
+ *
123
+ * Guarantees: every text of one value goes in as few `embedDocuments` calls as
124
+ * {@link EMBED_BATCH_SIZE} allows, never one call per path.
125
+ */
126
+ export declare function embedPassages(context: StoreContext, value: Record<string, JsonValue>, fieldsOverride?: string[]): Promise<number[][] | undefined>;
127
+ /**
128
+ * Split a JSON path into tokens the way LangGraph's `InMemoryStore` does: dots
129
+ * separate plain segments, while a `[…]` index and a `{…}` field group each
130
+ * become a token of their own (`tags[0]` → `['tags', '[0]']`).
131
+ *
132
+ * Accepts: any path string. An empty path, and a path of nothing but
133
+ * separators, tokenize to nothing. An **unterminated** `[` or `{` runs to the
134
+ * end of the path and becomes a token that no longer closes — `'tags[0'` →
135
+ * `['tags', '[0']` — so it is resolved as a plain member name and matches
136
+ * nothing unless the value at `tags` holds a field literally called `[0`. That is the reference
137
+ * tokenizer's own answer (`@langchain/langgraph-checkpoint@1.1.5`
138
+ * `dist/store/utils.js:23-30`), and matching it matters more than refusing the
139
+ * path: `index.fields` is validated where it is configured, and text extraction
140
+ * must stay byte-for-byte comparable with the reference store.
141
+ *
142
+ * Returns: the tokens, in path order.
143
+ *
144
+ * Throws: nothing.
145
+ */
146
+ export declare function tokenizePath(path: string): string[];
147
+ /**
148
+ * Extract the indexable text of `value` at `path`, byte-for-byte as LangGraph's
149
+ * `InMemoryStore` does (`store/utils`), so an embedding computed here matches
150
+ * one computed by the reference store for the same document. Supports plain
151
+ * paths, `[n]`/`[-n]`/`[*]` indexing, a bare `*` wildcard, `{a,b.c}` field
152
+ * groups and `$` for the whole document. The package root's `getTextAtPath` is
153
+ * a string-only variant that returns nothing for numbers, booleans, objects
154
+ * and arrays and throws on a `null` intermediate; it must not be used here.
155
+ *
156
+ * Accepts: `value` — any stored value, including a scalar and `null`. `path` —
157
+ * empty or `$` asks for the whole document; anything else is tokenized. A path
158
+ * that addresses nothing present, a `[n]` against a non-array, a `{…}` group
159
+ * against a non-object: each yields no text rather than an error, because one
160
+ * unindexable field of one item must not fail a put or a search.
161
+ *
162
+ * Returns: the extracted texts, in path order — one per match, kept apart so
163
+ * each is embedded on its own (see `extractTexts`). Empty when the path
164
+ * addresses nothing, and empty for a leaf JSON cannot represent.
165
+ *
166
+ * Throws: nothing.
167
+ */
168
+ export declare function getTextAtPath(value: JsonValue, path: string): string[];
@@ -1,23 +1,106 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cosineSimilarity = cosineSimilarity;
4
+ exports.extractTexts = extractTexts;
5
+ exports.extractText = extractText;
6
+ exports.assertVectorDims = assertVectorDims;
7
+ exports.embedValues = embedValues;
8
+ exports.embedValue = embedValue;
9
+ exports.embedPassages = embedPassages;
3
10
  exports.tokenizePath = tokenizePath;
4
11
  exports.getTextAtPath = getTextAtPath;
5
- /** Pretty JSON, exactly as `InMemoryStore` embeds non-scalar values. */
6
- function pretty(value) {
7
- return JSON.stringify(value, null, 2);
12
+ const errors_js_1 = require("../../shared/errors/errors.js");
13
+ const EMBED_BATCH_SIZE = 100;
14
+ function cosineSimilarity(a, b) {
15
+ if (a.length !== b.length)
16
+ return 0;
17
+ let dot = 0;
18
+ let normA = 0;
19
+ let normB = 0;
20
+ for (let i = 0; i < a.length; i++) {
21
+ dot += a[i] * b[i];
22
+ normA += a[i] * a[i];
23
+ normB += b[i] * b[i];
24
+ }
25
+ if (normA === 0 || normB === 0)
26
+ return 0;
27
+ return dot / (Math.sqrt(normA) * Math.sqrt(normB));
28
+ }
29
+ function extractTexts(value, fields) {
30
+ return fields.flatMap((field) => getTextAtPath(value, field)).filter((text) => text.length > 0);
31
+ }
32
+ function extractText(value, fields) {
33
+ return extractTexts(value, fields).join(' ');
34
+ }
35
+ function assertVectorDims(index, vector, what) {
36
+ const dims = index.dims;
37
+ if (!Number.isInteger(dims) || dims <= 0 || vector.length === dims)
38
+ return;
39
+ throw (0, errors_js_1.validationError)(`index.embeddings returned a ${vector.length}-dimensional ${what} vector but index.dims ` +
40
+ `is ${dims}; the embeddings model does not match the configured index`, 'index.dims');
41
+ }
42
+ async function embedValues(context, values, fieldsOverride) {
43
+ const index = context.index;
44
+ if (!index)
45
+ return values.map(() => undefined);
46
+ const fields = fieldsOverride ?? index.fields ?? ['$'];
47
+ const pending = [];
48
+ values.forEach((value, position) => {
49
+ const text = extractText(value, fields);
50
+ if (text.length > 0)
51
+ pending.push({ text, position });
52
+ });
53
+ const vectors = values.map(() => undefined);
54
+ for (let start = 0; start < pending.length; start += EMBED_BATCH_SIZE) {
55
+ const batch = pending.slice(start, start + EMBED_BATCH_SIZE);
56
+ const embedded = await index.embeddings.embedDocuments(batch.map((entry) => entry.text));
57
+ batch.forEach((entry, i) => {
58
+ assertVectorDims(index, embedded[i], 'document');
59
+ vectors[entry.position] = embedded[i];
60
+ });
61
+ }
62
+ return vectors;
63
+ }
64
+ async function embedValue(context, value, fieldsOverride) {
65
+ return (await embedValues(context, [value], fieldsOverride))[0];
66
+ }
67
+ async function embedPassages(context, value, fieldsOverride) {
68
+ const index = context.index;
69
+ if (!index)
70
+ return undefined;
71
+ const texts = extractTexts(value, fieldsOverride ?? index.fields ?? ['$']);
72
+ if (texts.length === 0)
73
+ return undefined;
74
+ const vectors = [];
75
+ for (let start = 0; start < texts.length; start += EMBED_BATCH_SIZE) {
76
+ const embedded = await index.embeddings.embedDocuments(texts.slice(start, start + EMBED_BATCH_SIZE));
77
+ for (const vector of embedded) {
78
+ assertVectorDims(index, vector, 'document');
79
+ vectors.push(vector);
80
+ }
81
+ }
82
+ return vectors;
83
+ }
84
+ function prettyText(value) {
85
+ let text;
86
+ try {
87
+ text = JSON.stringify(value, null, 2);
88
+ }
89
+ catch {
90
+ return [];
91
+ }
92
+ return text === undefined ? [] : [text];
8
93
  }
9
94
  function isScalar(value) {
10
95
  return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
11
96
  }
12
- /** Text for a leaf: scalars stringify, containers pretty-print, null yields nothing. */
13
97
  function leafText(value) {
14
98
  if (isScalar(value))
15
99
  return [String(value)];
16
100
  if (value === null)
17
101
  return [];
18
- return [pretty(value)];
102
+ return prettyText(value);
19
103
  }
20
- /** Index just past the closer matching an opener at `start - 1`, honouring nesting. */
21
104
  function scanGroup(path, start, open, close) {
22
105
  let depth = 1;
23
106
  let i = start;
@@ -30,11 +113,6 @@ function scanGroup(path, start, open, close) {
30
113
  }
31
114
  return i;
32
115
  }
33
- /**
34
- * Split a JSON path into tokens the way LangGraph's `InMemoryStore` does: dots
35
- * separate plain segments, while a `[…]` index and a `{…}` field group each
36
- * become a token of their own (`tags[0]` → `['tags', '[0]']`).
37
- */
38
116
  function tokenizePath(path) {
39
117
  const tokens = [];
40
118
  let current = '';
@@ -62,7 +140,6 @@ function tokenizePath(path) {
62
140
  flush();
63
141
  return tokens;
64
142
  }
65
- /** Walk one `{…}`-group field by plain `in` lookups, as the reference does. */
66
143
  function groupFieldText(value, field) {
67
144
  let current = value;
68
145
  for (const token of tokenizePath(field)) {
@@ -73,9 +150,8 @@ function groupFieldText(value, field) {
73
150
  return [];
74
151
  }
75
152
  }
76
- return isScalar(current) ? [String(current)] : [pretty(current)];
153
+ return isScalar(current) ? [String(current)] : prettyText(current);
77
154
  }
78
- /** Resolve a `[n]`, `[-n]` or `[*]` token against an array; anything else yields nothing. */
79
155
  function indexText(value, token, tokens, pos) {
80
156
  if (!Array.isArray(value))
81
157
  return [];
@@ -89,7 +165,6 @@ function indexText(value, token, tokens, pos) {
89
165
  idx = value.length + idx;
90
166
  return idx >= 0 && idx < value.length ? extract(value[idx], tokens, pos + 1) : [];
91
167
  }
92
- /** Resolve a `{a,b.c}` token: each listed field, walked from the current value. */
93
168
  function groupText(value, token) {
94
169
  if (typeof value !== 'object' || value === null)
95
170
  return [];
@@ -101,7 +176,6 @@ function groupText(value, token) {
101
176
  }
102
177
  return results;
103
178
  }
104
- /** Resolve a bare `*` token: every array item or every object value. */
105
179
  function wildcardText(value, tokens, pos) {
106
180
  if (Array.isArray(value))
107
181
  return value.flatMap((item) => extract(item, tokens, pos + 1));
@@ -110,7 +184,6 @@ function wildcardText(value, tokens, pos) {
110
184
  }
111
185
  return [];
112
186
  }
113
- /** Resolve a plain member token by an `in` lookup, exactly as the reference does. */
114
187
  function memberText(value, token, tokens, pos) {
115
188
  if (typeof value !== 'object' || value === null || !(token in value))
116
189
  return [];
@@ -122,7 +195,7 @@ function extract(value, tokens, pos) {
122
195
  const token = tokens[pos];
123
196
  if (token.startsWith('[') && token.endsWith(']'))
124
197
  return indexText(value, token, tokens, pos);
125
- const results = pos === 0 && token === '$' ? [pretty(value)] : [];
198
+ const results = pos === 0 && token === '$' ? prettyText(value) : [];
126
199
  if (token.startsWith('{') && token.endsWith('}'))
127
200
  results.push(...groupText(value, token));
128
201
  else if (token === '*')
@@ -131,17 +204,8 @@ function extract(value, tokens, pos) {
131
204
  results.push(...memberText(value, token, tokens, pos));
132
205
  return results;
133
206
  }
134
- /**
135
- * Extract the indexable text of `value` at `path`, byte-for-byte as LangGraph's
136
- * `InMemoryStore` does (`store/utils`), so an embedding computed here matches
137
- * one computed by the reference store for the same document. Supports plain
138
- * paths, `[n]`/`[-n]`/`[*]` indexing, a bare `*` wildcard, `{a,b.c}` field
139
- * groups and `$` for the whole document. The package root's `getTextAtPath` is
140
- * a string-only variant that returns nothing for numbers, booleans, objects
141
- * and arrays and throws on a `null` intermediate; it must not be used here.
142
- */
143
207
  function getTextAtPath(value, path) {
144
208
  if (path === '' || path === '$')
145
- return [pretty(value)];
209
+ return prettyText(value);
146
210
  return extract(value, tokenizePath(path), 0);
147
211
  }
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Hides which options the store and its methods accept, and how the store is
3
+ * assembled from them.
4
+ *
5
+ * The exhaustive key list of every option bag — the constructor's, `search`'s,
6
+ * `listNamespaces`' — lives here, compiler-checked against its type. The
7
+ * store's own options are checked after the shared ones — the in-memory caps,
8
+ * that a vector backend comes with an index, that the index can embed, the
9
+ * score direction — and the context every operation receives is built with its
10
+ * defaults filled in.
11
+ */
12
+ import type { IndexConfig, SerializerProtocol } from '@langchain/langgraph-checkpoint';
13
+ import { type AdapterCore, type AdapterShell } from '../../shared/adapter.js';
14
+ import type { DynamoDBStoreOptions } from '../types.js';
15
+ import { type VectorBackend, type VectorScoreDirection } from '../vector-backend.js';
16
+ /** Default cap on candidates the in-DB semantic ranker will score. */
17
+ export declare const DEFAULT_MAX_SEARCH_CANDIDATES = 1000;
18
+ /**
19
+ * Largest `maxSearchCandidates` an adapter accepts: this many decoded
20
+ * candidates are held and re-ranked in memory by one `search()` call, so an
21
+ * unbounded value lets a typo or hostile config hold an unbounded working set.
22
+ */
23
+ export declare const MAX_SEARCH_CANDIDATES = 100000;
24
+ /**
25
+ * Largest `maxScanItems` an adapter accepts: this many raw rows are collected
26
+ * into memory across one paginated scan/query before it errors, so — like
27
+ * {@link MAX_SEARCH_CANDIDATES} — an unbounded value lets a typo or hostile
28
+ * config hold an unbounded working set.
29
+ */
30
+ export declare const MAX_SCAN_ITEMS = 1000000;
31
+ /** Resolved collaborators shared by every store action. */
32
+ export interface StoreContext extends AdapterCore {
33
+ serde: SerializerProtocol;
34
+ index?: IndexConfig;
35
+ vectorBackend?: VectorBackend;
36
+ vectorScoreDirection: VectorScoreDirection;
37
+ maxSearchCandidates: number;
38
+ maxScanItems: number;
39
+ maxIterations: number;
40
+ }
41
+ /** Result of wiring up a store from its options. */
42
+ export interface StoreSetup {
43
+ context: StoreContext;
44
+ shell: AdapterShell;
45
+ }
46
+ /**
47
+ * Validate the options, then resolve the client, offloader, serializer and index.
48
+ *
49
+ * Accepts: `options` — validated first, so no half-built store exists when one
50
+ * is wrong. Everything optional has a default here and nowhere else, which is
51
+ * what lets every action read `context.x` without re-deciding what absent means.
52
+ *
53
+ * Returns: the context every action shares, and the shell that releases what
54
+ * it holds — a client the caller passed in is never destroyed by `destroy()`.
55
+ *
56
+ * Throws: `VALIDATION` for any invalid option, naming the option.
57
+ *
58
+ * Guarantees: constructing a store performs no I/O. The stacked-retry check is
59
+ * deliberately not awaited: it is a warning about a caller-supplied client, not
60
+ * a precondition.
61
+ */
62
+ export declare function setUpStore(options: DynamoDBStoreOptions): StoreSetup;
63
+ /**
64
+ * The keys of the store's constructor options, exhaustive in both directions:
65
+ * `allKeysOf<T>` makes omitting or inventing one a compile error, so the list
66
+ * cannot rot away from the type it guards. It lives with the feature because
67
+ * the type it is checked against does; `shared/` knows no feature. `search`'s
68
+ * and `listNamespaces`' options have no list: LangGraph defines them, so a key
69
+ * it adds is ignored rather than refused (decision record 28).
70
+ */
71
+ export declare const STORE_KEYS: readonly string[];
72
+ /**
73
+ * Validate the store's own options at construction; the shared ones are
74
+ * `openAdapter`'s, which checks them before these.
75
+ *
76
+ * A `vectorBackend` without an `index` is rejected outright rather than
77
+ * silently degrading: with no embeddings configured, every `put` would compute
78
+ * no vector and instruct the backend to *delete* the item's entry instead of
79
+ * indexing it, and `search()` would fall through to an unranked scan-order
80
+ * listing with no `.score` field and no error — a semantic query returning a
81
+ * normal-looking but meaningless response. `reconcileVectorIndex` already
82
+ * refused this exact misconfiguration.
83
+ *
84
+ * Accepts: every option the store takes. The types describe the intended
85
+ * shapes; this runs for the JavaScript caller the types never see, and for the
86
+ * combinations no type can express — a backend without an index, an `index`
87
+ * key `IndexConfig` does not declare, an `embeddings` object missing a method,
88
+ * a direction outside its union.
89
+ *
90
+ * Returns: nothing: the value is kept under its declared type, and this
91
+ * checks it.
92
+ *
93
+ * Throws: `VALIDATION` naming the offending option. Every failure is raised
94
+ * at construction, where the fix is, rather than at the first put or search.
95
+ */
96
+ export declare function assertStoreOptions(options: DynamoDBStoreOptions): void;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STORE_KEYS = exports.MAX_SCAN_ITEMS = exports.MAX_SEARCH_CANDIDATES = exports.DEFAULT_MAX_SEARCH_CANDIDATES = void 0;
4
+ exports.setUpStore = setUpStore;
5
+ exports.assertStoreOptions = assertStoreOptions;
6
+ const adapter_js_1 = require("../../shared/adapter.js");
7
+ const json_serde_js_1 = require("../../shared/codec/json-serde.js");
8
+ const paginate_js_1 = require("../../shared/dynamodb/paginate.js");
9
+ const errors_js_1 = require("../../shared/errors/errors.js");
10
+ const collaborators_js_1 = require("../../shared/validation/collaborators.js");
11
+ const option_shape_js_1 = require("../../shared/validation/option-shape.js");
12
+ const primitives_js_1 = require("../../shared/validation/primitives.js");
13
+ const vector_backend_js_1 = require("../vector-backend.js");
14
+ exports.DEFAULT_MAX_SEARCH_CANDIDATES = 1000;
15
+ exports.MAX_SEARCH_CANDIDATES = 100_000;
16
+ exports.MAX_SCAN_ITEMS = 1_000_000;
17
+ function setUpStore(options) {
18
+ (0, option_shape_js_1.assertShape)(options, exports.STORE_KEYS, 'options');
19
+ const shell = (0, adapter_js_1.openAdapter)(options, 'store', {
20
+ options: () => assertStoreOptions(options),
21
+ collaborators: () => {
22
+ if (options.vectorBackend !== undefined) {
23
+ (0, collaborators_js_1.assertMembers)(options.vectorBackend, collaborators_js_1.VECTOR_BACKEND_MEMBERS, 'vectorBackend');
24
+ }
25
+ },
26
+ });
27
+ return {
28
+ shell,
29
+ context: {
30
+ ...shell.core,
31
+ serde: options.serde ?? json_serde_js_1.JSON_SERDE,
32
+ index: options.index,
33
+ vectorBackend: options.vectorBackend,
34
+ vectorScoreDirection: options.vectorScoreDirection ?? 'relevance',
35
+ maxSearchCandidates: options.maxSearchCandidates ?? exports.DEFAULT_MAX_SEARCH_CANDIDATES,
36
+ maxScanItems: options.maxScanItems ?? paginate_js_1.MAX_TOTAL_ROWS_IN_MEMORY,
37
+ maxIterations: options.maxIterations ?? paginate_js_1.MAX_LOOP_ITERATIONS,
38
+ },
39
+ };
40
+ }
41
+ exports.STORE_KEYS = (0, option_shape_js_1.allKeysOf)({
42
+ tableName: 'tableName',
43
+ client: 'client',
44
+ clientConfig: 'clientConfig',
45
+ createClient: 'createClient',
46
+ ttl: 'ttl',
47
+ logger: 'logger',
48
+ retry: 'retry',
49
+ readConcurrency: 'readConcurrency',
50
+ compression: 'compression',
51
+ s3: 's3',
52
+ serde: 'serde',
53
+ index: 'index',
54
+ vectorBackend: 'vectorBackend',
55
+ maxSearchCandidates: 'maxSearchCandidates',
56
+ maxScanItems: 'maxScanItems',
57
+ maxIterations: 'maxIterations',
58
+ vectorScoreDirection: 'vectorScoreDirection',
59
+ });
60
+ const INDEX_KEYS = (0, option_shape_js_1.allKeysOf)({
61
+ dims: 'dims',
62
+ embeddings: 'embeddings',
63
+ fields: 'fields',
64
+ });
65
+ function assertUsableIndex(index) {
66
+ if (index === undefined)
67
+ return;
68
+ (0, option_shape_js_1.assertShape)(index, INDEX_KEYS, 'index');
69
+ (0, collaborators_js_1.assertMembers)(index.embeddings, collaborators_js_1.EMBEDDINGS_MEMBERS, 'index.embeddings');
70
+ if (index.fields !== undefined)
71
+ (0, primitives_js_1.assertStringArray)(index.fields, 'index.fields');
72
+ }
73
+ function assertScoreDirection(direction) {
74
+ if (direction === undefined || vector_backend_js_1.VECTOR_SCORE_DIRECTIONS.includes(direction))
75
+ return;
76
+ throw (0, errors_js_1.validationError)(`vectorScoreDirection must be one of ${vector_backend_js_1.VECTOR_SCORE_DIRECTIONS.join(' | ')}; received ` +
77
+ `${JSON.stringify(direction)}, which would be left in the backend's own direction and ` +
78
+ 'could rank a distance backend backwards', 'vectorScoreDirection');
79
+ }
80
+ function assertLimits(options) {
81
+ if (options.maxScanItems !== undefined) {
82
+ (0, primitives_js_1.assertInteger)(options.maxScanItems, 'maxScanItems', { min: 1, max: exports.MAX_SCAN_ITEMS });
83
+ }
84
+ if (options.maxSearchCandidates !== undefined) {
85
+ (0, primitives_js_1.assertInteger)(options.maxSearchCandidates, 'maxSearchCandidates', {
86
+ min: 1,
87
+ max: exports.MAX_SEARCH_CANDIDATES,
88
+ });
89
+ }
90
+ if (options.maxIterations !== undefined && options.maxIterations !== Infinity) {
91
+ (0, primitives_js_1.assertInteger)(options.maxIterations, 'maxIterations', { min: 1 });
92
+ }
93
+ }
94
+ function assertStoreOptions(options) {
95
+ assertLimits(options);
96
+ if (options.vectorBackend && !options.index) {
97
+ throw (0, errors_js_1.validationError)('vectorBackend requires a configured `index` (embeddings); without one no embedding ' +
98
+ 'is computed, every put would clear the item vector, and search would silently return ' +
99
+ 'unranked, score-less results', 'vectorBackend');
100
+ }
101
+ assertUsableIndex(options.index);
102
+ assertScoreDirection(options.vectorScoreDirection);
103
+ }
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Hides how a search is served from the table alone.
3
+ *
4
+ * Without a vector backend, a search reads the rows under its prefix within
5
+ * `maxScanItems`, decodes them a batch at a time, keeps the ones its filter
6
+ * passes, and — for a semantic query — ranks them in memory by cosine
7
+ * similarity within `maxSearchCandidates`, an item without an embedding sorting
8
+ * last. How far the read goes before it can stop is decided here.
9
+ */
10
+ import type { Item, SearchItem } from '@langchain/langgraph-checkpoint';
11
+ import type { ParsedSearch } from './parse.js';
12
+ import type { StoreContext } from './setup.js';
13
+ /**
14
+ * How far a collection must go. A plain page is complete once `need`
15
+ * (`offset + limit`) matching items are in hand, so rows past it are never
16
+ * read or decoded; a semantic ranking needs every candidate but is refused as
17
+ * soon as more than `cap` rows exist, before a single decode or embedding.
18
+ */
19
+ export type CollectBound = {
20
+ kind: 'page';
21
+ need: number;
22
+ } | {
23
+ kind: 'semantic';
24
+ cap: number;
25
+ };
26
+ /**
27
+ * Collect the live rows under the prefix and decode them within `bound`.
28
+ *
29
+ * Accepts: `search.namespacePrefix` — a non-empty prefix is a Query on one
30
+ * partition; an empty one spans every partition and is the Scan this adapter
31
+ * reserves for exactly that (`test/static/guards/scan-sites.ts`). `bound` — a
32
+ * page stops as soon as
33
+ * `need` matching items are in hand; a semantic collection needs every
34
+ * candidate and is refused past `cap`. `search.filter` — applied after decoding,
35
+ * since the filter reads the value.
36
+ *
37
+ * Returns: the matching candidates with the vectors their rows carry, in the
38
+ * order read: sort-key order within a partition, unspecified across partitions.
39
+ * A page therefore pages stably within a namespace, and only there.
40
+ *
41
+ * Throws: `VALIDATION` naming `maxSearchCandidates` before any decode when a
42
+ * semantic collection exceeds `cap`; `RESULT_TRUNCATED` when
43
+ * `maxScanItems` or `maxIterations` is reached while rows remain — a search
44
+ * never silently answers from part of the table; `ABORTED` when the signal
45
+ * fires between pages; whatever a decode throws for a corrupt or unreadable row.
46
+ *
47
+ * Guarantees: a page closes the paginator as soon as it is full, so a namespace
48
+ * far larger than the page costs neither a full decode nor a truncation error.
49
+ * The bound is tested after a row is in hand, not before one is asked for, so
50
+ * a `need` of 0 would still cost one request; `searchItems` answers that case
51
+ * ahead of this call rather than letting it be paid here.
52
+ * Expired rows, rows of other adapters, rows carrying none of the timestamps a
53
+ * decoded item reports, and rows whose own `namespace` does not match the
54
+ * prefix are all skipped — the last matters because a Scan has no key condition
55
+ * at all, so the prefix is enforced here rather than by DynamoDB, and the one
56
+ * before it because a single such row must not cost a search its other results.
57
+ */
58
+ export declare function collectCandidates(context: StoreContext, search: ParsedSearch, bound: CollectBound, signal?: AbortSignal): Promise<RankCandidate[]>;
59
+ /** A decoded item plus its stored vectors, awaiting ranking. */
60
+ export interface RankCandidate {
61
+ item: Item;
62
+ /**
63
+ * One vector per extracted path. A row written before the store embedded
64
+ * per path carries a single vector and arrives here as a one-element list,
65
+ * which scores identically to how it always did.
66
+ */
67
+ embeddings?: number[][];
68
+ }
69
+ /**
70
+ * Rank candidates by cosine similarity to `queryVector`, descending. Throws a
71
+ * `VALIDATION` when the candidate count exceeds `maxCandidates`
72
+ * (steer large corpora to an external VectorBackend).
73
+ *
74
+ * An item is scored by its best-matching vector, as the reference store scores
75
+ * its per-path embeddings. A stored vector whose length differs from the query
76
+ * vector's cannot be scored — it was written by a different embeddings model —
77
+ * and an item with no comparable vector at all is ranked last with an
78
+ * undefined score. `onDimensionMismatch` is invoked once with how many
79
+ * candidates that affected, so the caller can say so instead of silently
80
+ * returning a ranking that quietly omits them.
81
+ *
82
+ * Accepts: `candidates` — in any order; empty ranks to empty. A candidate with
83
+ * no `embeddings` was never indexed (indexing off at write time, or no
84
+ * indexable text) and one with an empty list is the same thing. `queryVector` —
85
+ * the embedded query; one of a different length than everything stored means
86
+ * the query and the corpus were embedded by different models, and nothing
87
+ * scores.
88
+ *
89
+ * Returns: every candidate, scored and sorted best-first. Nothing is dropped:
90
+ * an unscorable item still belongs to the namespace the caller searched, and
91
+ * dropping it would turn a model mismatch into a silently empty result.
92
+ *
93
+ * Throws: `VALIDATION` naming `maxSearchCandidates` when more candidates
94
+ * arrive than may be ranked in memory — a bound on this process's memory, not
95
+ * on the corpus, which is what a `vectorBackend` is for.
96
+ *
97
+ * Guarantees: ranking reads the vectors only; no item is decoded or fetched
98
+ * again, and `onDimensionMismatch` fires at most once per call.
99
+ */
100
+ export declare function rankInMemory(candidates: RankCandidate[], queryVector: number[], maxCandidates: number, onDimensionMismatch?: (count: number) => void): SearchItem[];