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

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 (512) hide show
  1. package/README.md +1720 -154
  2. package/dist/backfill/backfill.d.ts +168 -0
  3. package/dist/backfill/backfill.js +393 -0
  4. package/dist/checkpointer/actions/delete-thread.d.ts +47 -6
  5. package/dist/checkpointer/actions/delete-thread.js +58 -21
  6. package/dist/checkpointer/actions/get-tuple.d.ts +29 -4
  7. package/dist/checkpointer/actions/get-tuple.js +44 -10
  8. package/dist/checkpointer/actions/list.d.ts +46 -4
  9. package/dist/checkpointer/actions/list.js +121 -66
  10. package/dist/checkpointer/actions/put-writes.d.ts +41 -9
  11. package/dist/checkpointer/actions/put-writes.js +62 -77
  12. package/dist/checkpointer/actions/put.d.ts +83 -4
  13. package/dist/checkpointer/actions/put.js +177 -25
  14. package/dist/checkpointer/internal/delta-history.d.ts +112 -0
  15. package/dist/checkpointer/internal/delta-history.js +252 -0
  16. package/dist/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/checkpointer/internal/listing.js +245 -0
  18. package/dist/checkpointer/internal/parse.d.ts +262 -0
  19. package/dist/checkpointer/internal/parse.js +372 -0
  20. package/dist/checkpointer/internal/pending-writes.d.ts +275 -0
  21. package/dist/checkpointer/internal/pending-writes.js +588 -0
  22. package/dist/checkpointer/internal/read.d.ts +130 -0
  23. package/dist/checkpointer/internal/read.js +264 -0
  24. package/dist/checkpointer/internal/rows.d.ts +571 -0
  25. package/dist/checkpointer/internal/rows.js +834 -0
  26. package/dist/checkpointer/internal/setup.d.ts +42 -19
  27. package/dist/checkpointer/internal/setup.js +65 -29
  28. package/dist/checkpointer/saver.d.ts +256 -16
  29. package/dist/checkpointer/saver.js +275 -29
  30. package/dist/checkpointer/types.d.ts +39 -39
  31. package/dist/checkpointer/types.js +10 -1
  32. package/dist/factory/factory.d.ts +134 -28
  33. package/dist/factory/factory.js +240 -21
  34. package/dist/factory/types.d.ts +76 -0
  35. package/dist/factory/types.js +10 -0
  36. package/dist/history/actions/add-messages.d.ts +31 -4
  37. package/dist/history/actions/add-messages.js +38 -58
  38. package/dist/history/actions/clear.d.ts +49 -6
  39. package/dist/history/actions/clear.js +66 -14
  40. package/dist/history/actions/get-messages.d.ts +54 -6
  41. package/dist/history/actions/get-messages.js +126 -43
  42. package/dist/history/actions/list-sessions.d.ts +52 -10
  43. package/dist/history/actions/list-sessions.js +139 -40
  44. package/dist/history/actions/reconcile-count.d.ts +42 -10
  45. package/dist/history/actions/reconcile-count.js +45 -45
  46. package/dist/history/chat-message-history.d.ts +220 -33
  47. package/dist/history/chat-message-history.js +240 -43
  48. package/dist/history/internal/append.d.ts +212 -0
  49. package/dist/history/internal/append.js +500 -0
  50. package/dist/history/internal/message-read.d.ts +84 -0
  51. package/dist/history/internal/message-read.js +204 -0
  52. package/dist/history/internal/parse.d.ts +153 -0
  53. package/dist/history/internal/parse.js +252 -0
  54. package/dist/history/internal/rows.d.ts +195 -0
  55. package/dist/history/internal/rows.js +250 -0
  56. package/dist/history/internal/session.d.ts +331 -0
  57. package/dist/history/internal/session.js +628 -0
  58. package/dist/history/internal/setup.d.ts +52 -17
  59. package/dist/history/internal/setup.js +92 -21
  60. package/dist/history/session-adapter.d.ts +102 -7
  61. package/dist/history/session-adapter.js +103 -9
  62. package/dist/history/types.d.ts +80 -29
  63. package/dist/history/types.js +10 -1
  64. package/dist/index.d.ts +42 -11
  65. package/dist/index.js +33 -12
  66. package/dist/shared/adapter.d.ts +135 -0
  67. package/dist/shared/adapter.js +143 -0
  68. package/dist/shared/clock.d.ts +51 -2
  69. package/dist/shared/clock.js +57 -2
  70. package/dist/shared/codec/codec.d.ts +288 -13
  71. package/dist/shared/codec/codec.js +416 -19
  72. package/dist/shared/codec/compression.d.ts +43 -7
  73. package/dist/shared/codec/compression.js +53 -13
  74. package/dist/shared/codec/json-serde.d.ts +76 -4
  75. package/dist/shared/codec/json-serde.js +181 -8
  76. package/dist/shared/codec/s3/client-types.d.ts +53 -0
  77. package/dist/shared/codec/s3/client-types.js +26 -0
  78. package/dist/shared/codec/s3/client.d.ts +43 -10
  79. package/dist/shared/codec/s3/client.js +82 -9
  80. package/dist/shared/codec/s3/config.d.ts +242 -11
  81. package/dist/shared/codec/s3/config.js +293 -11
  82. package/dist/shared/codec/s3/lifecycle.d.ts +164 -6
  83. package/dist/shared/codec/s3/lifecycle.js +335 -27
  84. package/dist/shared/codec/s3/offloader.d.ts +393 -18
  85. package/dist/shared/codec/s3/offloader.js +595 -37
  86. package/dist/shared/concurrency.d.ts +43 -0
  87. package/dist/shared/concurrency.js +78 -0
  88. package/dist/shared/dynamodb/abort.d.ts +47 -0
  89. package/dist/shared/dynamodb/abort.js +59 -0
  90. package/dist/shared/dynamodb/batch-write.d.ts +77 -14
  91. package/dist/shared/dynamodb/batch-write.js +146 -27
  92. package/dist/shared/dynamodb/cancellation.d.ts +121 -4
  93. package/dist/shared/dynamodb/cancellation.js +147 -3
  94. package/dist/shared/dynamodb/client.d.ts +162 -8
  95. package/dist/shared/dynamodb/client.js +153 -5
  96. package/dist/shared/dynamodb/idempotent-write.d.ts +551 -0
  97. package/dist/shared/dynamodb/idempotent-write.js +593 -0
  98. package/dist/shared/dynamodb/paginate.d.ts +105 -9
  99. package/dist/shared/dynamodb/paginate.js +175 -7
  100. package/dist/shared/dynamodb/partition-delete.d.ts +185 -14
  101. package/dist/shared/dynamodb/partition-delete.js +314 -44
  102. package/dist/shared/dynamodb/recency-index.d.ts +231 -0
  103. package/dist/shared/dynamodb/recency-index.js +377 -0
  104. package/dist/shared/dynamodb/retry.d.ts +276 -8
  105. package/dist/shared/dynamodb/retry.js +433 -23
  106. package/dist/shared/dynamodb/table-schema.d.ts +190 -0
  107. package/dist/shared/dynamodb/table-schema.js +209 -0
  108. package/dist/shared/errors/base-error.d.ts +184 -10
  109. package/dist/shared/errors/base-error.js +160 -14
  110. package/dist/shared/errors/boundary.d.ts +71 -0
  111. package/dist/shared/errors/boundary.js +143 -0
  112. package/dist/shared/errors/classify.d.ts +97 -0
  113. package/dist/shared/errors/classify.js +257 -0
  114. package/dist/shared/errors/error-code.d.ts +77 -2
  115. package/dist/shared/errors/error-code.js +83 -1
  116. package/dist/shared/errors/errors.d.ts +158 -59
  117. package/dist/shared/errors/errors.js +219 -92
  118. package/dist/shared/logging/logger.d.ts +69 -3
  119. package/dist/shared/logging/logger.js +97 -3
  120. package/dist/shared/logging/redaction.d.ts +92 -8
  121. package/dist/shared/logging/redaction.js +273 -17
  122. package/dist/shared/logging/secret-patterns.d.ts +149 -19
  123. package/dist/shared/logging/secret-patterns.js +188 -27
  124. package/dist/shared/logging/truncate.d.ts +197 -0
  125. package/dist/shared/logging/truncate.js +231 -0
  126. package/dist/shared/options.d.ts +59 -7
  127. package/dist/shared/options.js +9 -1
  128. package/dist/shared/ulid.d.ts +77 -7
  129. package/dist/shared/ulid.js +103 -8
  130. package/dist/shared/validation/collaborators.d.ts +141 -0
  131. package/dist/shared/validation/collaborators.js +188 -0
  132. package/dist/shared/validation/option-shape.d.ts +89 -0
  133. package/dist/shared/validation/option-shape.js +113 -0
  134. package/dist/shared/validation/options.d.ts +145 -0
  135. package/dist/shared/validation/options.js +328 -0
  136. package/dist/shared/validation/primitives.d.ts +288 -21
  137. package/dist/shared/validation/primitives.js +353 -50
  138. package/dist/shared/validation/ttl.d.ts +66 -10
  139. package/dist/shared/validation/ttl.js +113 -15
  140. package/dist/store/actions/list-namespaces.d.ts +76 -6
  141. package/dist/store/actions/list-namespaces.js +166 -24
  142. package/dist/store/actions/put.d.ts +33 -8
  143. package/dist/store/actions/put.js +53 -60
  144. package/dist/store/actions/reconcile-vector-index.d.ts +31 -10
  145. package/dist/store/actions/reconcile-vector-index.js +34 -15
  146. package/dist/store/actions/search.d.ts +34 -6
  147. package/dist/store/actions/search.js +56 -51
  148. package/dist/store/internal/batch-plan.d.ts +26 -0
  149. package/dist/store/internal/batch-plan.js +109 -0
  150. package/dist/store/internal/filter.d.ts +36 -3
  151. package/dist/store/internal/filter.js +66 -15
  152. package/dist/store/internal/get-item.d.ts +45 -0
  153. package/dist/store/internal/get-item.js +115 -0
  154. package/dist/store/internal/item-write.d.ts +230 -0
  155. package/dist/store/internal/item-write.js +463 -0
  156. package/dist/store/internal/parse.d.ts +225 -0
  157. package/dist/store/internal/parse.js +350 -0
  158. package/dist/store/internal/rows.d.ts +355 -0
  159. package/dist/store/internal/rows.js +447 -0
  160. package/dist/store/internal/semantic-search.d.ts +161 -6
  161. package/dist/store/internal/semantic-search.js +360 -18
  162. package/dist/store/internal/setup.d.ts +77 -20
  163. package/dist/store/internal/setup.js +178 -47
  164. package/dist/store/internal/table-search.d.ts +100 -0
  165. package/dist/store/internal/table-search.js +213 -0
  166. package/dist/store/internal/vector-index.d.ts +247 -0
  167. package/dist/store/internal/vector-index.js +546 -0
  168. package/dist/store/store.d.ts +270 -17
  169. package/dist/store/store.js +329 -38
  170. package/dist/store/types.d.ts +76 -26
  171. package/dist/store/types.js +13 -1
  172. package/dist/store/vector-backend.d.ts +64 -4
  173. package/dist/store/vector-backend.js +15 -1
  174. package/package.json +58 -36
  175. package/dist/checkpointer/actions/delete-thread.d.ts.map +0 -1
  176. package/dist/checkpointer/actions/delete-thread.js.map +0 -1
  177. package/dist/checkpointer/actions/get-tuple.d.ts.map +0 -1
  178. package/dist/checkpointer/actions/get-tuple.js.map +0 -1
  179. package/dist/checkpointer/actions/list.d.ts.map +0 -1
  180. package/dist/checkpointer/actions/list.js.map +0 -1
  181. package/dist/checkpointer/actions/put-writes.d.ts.map +0 -1
  182. package/dist/checkpointer/actions/put-writes.js.map +0 -1
  183. package/dist/checkpointer/actions/put.d.ts.map +0 -1
  184. package/dist/checkpointer/actions/put.js.map +0 -1
  185. package/dist/checkpointer/internal/assemble.d.ts +0 -10
  186. package/dist/checkpointer/internal/assemble.d.ts.map +0 -1
  187. package/dist/checkpointer/internal/assemble.js +0 -37
  188. package/dist/checkpointer/internal/assemble.js.map +0 -1
  189. package/dist/checkpointer/internal/configurable.d.ts +0 -13
  190. package/dist/checkpointer/internal/configurable.d.ts.map +0 -1
  191. package/dist/checkpointer/internal/configurable.js +0 -23
  192. package/dist/checkpointer/internal/configurable.js.map +0 -1
  193. package/dist/checkpointer/internal/fetch.d.ts +0 -10
  194. package/dist/checkpointer/internal/fetch.d.ts.map +0 -1
  195. package/dist/checkpointer/internal/fetch.js +0 -46
  196. package/dist/checkpointer/internal/fetch.js.map +0 -1
  197. package/dist/checkpointer/internal/filter-match.d.ts +0 -12
  198. package/dist/checkpointer/internal/filter-match.d.ts.map +0 -1
  199. package/dist/checkpointer/internal/filter-match.js +0 -14
  200. package/dist/checkpointer/internal/filter-match.js.map +0 -1
  201. package/dist/checkpointer/internal/item-reader.d.ts +0 -55
  202. package/dist/checkpointer/internal/item-reader.d.ts.map +0 -1
  203. package/dist/checkpointer/internal/item-reader.js +0 -88
  204. package/dist/checkpointer/internal/item-reader.js.map +0 -1
  205. package/dist/checkpointer/internal/item-writer.d.ts +0 -26
  206. package/dist/checkpointer/internal/item-writer.d.ts.map +0 -1
  207. package/dist/checkpointer/internal/item-writer.js +0 -92
  208. package/dist/checkpointer/internal/item-writer.js.map +0 -1
  209. package/dist/checkpointer/internal/keys.d.ts +0 -31
  210. package/dist/checkpointer/internal/keys.d.ts.map +0 -1
  211. package/dist/checkpointer/internal/keys.js +0 -87
  212. package/dist/checkpointer/internal/keys.js.map +0 -1
  213. package/dist/checkpointer/internal/query.d.ts +0 -20
  214. package/dist/checkpointer/internal/query.d.ts.map +0 -1
  215. package/dist/checkpointer/internal/query.js +0 -36
  216. package/dist/checkpointer/internal/query.js.map +0 -1
  217. package/dist/checkpointer/internal/setup.d.ts.map +0 -1
  218. package/dist/checkpointer/internal/setup.js.map +0 -1
  219. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -30
  220. package/dist/checkpointer/internal/special-write-cas.d.ts.map +0 -1
  221. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  222. package/dist/checkpointer/internal/special-write-cas.js.map +0 -1
  223. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -24
  224. package/dist/checkpointer/internal/special-write-cleanup.d.ts.map +0 -1
  225. package/dist/checkpointer/internal/special-write-cleanup.js +0 -47
  226. package/dist/checkpointer/internal/special-write-cleanup.js.map +0 -1
  227. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -54
  228. package/dist/checkpointer/internal/special-write-verify.d.ts.map +0 -1
  229. package/dist/checkpointer/internal/special-write-verify.js +0 -65
  230. package/dist/checkpointer/internal/special-write-verify.js.map +0 -1
  231. package/dist/checkpointer/internal/validation.d.ts +0 -13
  232. package/dist/checkpointer/internal/validation.d.ts.map +0 -1
  233. package/dist/checkpointer/internal/validation.js +0 -30
  234. package/dist/checkpointer/internal/validation.js.map +0 -1
  235. package/dist/checkpointer/internal/write-guard.d.ts +0 -13
  236. package/dist/checkpointer/internal/write-guard.d.ts.map +0 -1
  237. package/dist/checkpointer/internal/write-guard.js +0 -39
  238. package/dist/checkpointer/internal/write-guard.js.map +0 -1
  239. package/dist/checkpointer/internal/write-index.d.ts +0 -37
  240. package/dist/checkpointer/internal/write-index.d.ts.map +0 -1
  241. package/dist/checkpointer/internal/write-index.js +0 -42
  242. package/dist/checkpointer/internal/write-index.js.map +0 -1
  243. package/dist/checkpointer/saver.d.ts.map +0 -1
  244. package/dist/checkpointer/saver.js.map +0 -1
  245. package/dist/checkpointer/types.d.ts.map +0 -1
  246. package/dist/checkpointer/types.js.map +0 -1
  247. package/dist/factory/factory.d.ts.map +0 -1
  248. package/dist/factory/factory.js.map +0 -1
  249. package/dist/history/actions/add-messages.d.ts.map +0 -1
  250. package/dist/history/actions/add-messages.js.map +0 -1
  251. package/dist/history/actions/clear.d.ts.map +0 -1
  252. package/dist/history/actions/clear.js.map +0 -1
  253. package/dist/history/actions/get-messages.d.ts.map +0 -1
  254. package/dist/history/actions/get-messages.js.map +0 -1
  255. package/dist/history/actions/list-sessions.d.ts.map +0 -1
  256. package/dist/history/actions/list-sessions.js.map +0 -1
  257. package/dist/history/actions/reconcile-count.d.ts.map +0 -1
  258. package/dist/history/actions/reconcile-count.js.map +0 -1
  259. package/dist/history/chat-message-history.d.ts.map +0 -1
  260. package/dist/history/chat-message-history.js.map +0 -1
  261. package/dist/history/internal/append-saga.d.ts +0 -20
  262. package/dist/history/internal/append-saga.d.ts.map +0 -1
  263. package/dist/history/internal/append-saga.js +0 -35
  264. package/dist/history/internal/append-saga.js.map +0 -1
  265. package/dist/history/internal/compensation.d.ts +0 -21
  266. package/dist/history/internal/compensation.d.ts.map +0 -1
  267. package/dist/history/internal/compensation.js +0 -84
  268. package/dist/history/internal/compensation.js.map +0 -1
  269. package/dist/history/internal/item-mapper.d.ts +0 -12
  270. package/dist/history/internal/item-mapper.d.ts.map +0 -1
  271. package/dist/history/internal/item-mapper.js +0 -33
  272. package/dist/history/internal/item-mapper.js.map +0 -1
  273. package/dist/history/internal/keys.d.ts +0 -17
  274. package/dist/history/internal/keys.d.ts.map +0 -1
  275. package/dist/history/internal/keys.js +0 -49
  276. package/dist/history/internal/keys.js.map +0 -1
  277. package/dist/history/internal/message-chunker.d.ts +0 -14
  278. package/dist/history/internal/message-chunker.d.ts.map +0 -1
  279. package/dist/history/internal/message-chunker.js +0 -68
  280. package/dist/history/internal/message-chunker.js.map +0 -1
  281. package/dist/history/internal/message-transaction.d.ts +0 -26
  282. package/dist/history/internal/message-transaction.d.ts.map +0 -1
  283. package/dist/history/internal/message-transaction.js +0 -60
  284. package/dist/history/internal/message-transaction.js.map +0 -1
  285. package/dist/history/internal/query.d.ts +0 -10
  286. package/dist/history/internal/query.d.ts.map +0 -1
  287. package/dist/history/internal/query.js +0 -31
  288. package/dist/history/internal/query.js.map +0 -1
  289. package/dist/history/internal/session-count.d.ts +0 -41
  290. package/dist/history/internal/session-count.d.ts.map +0 -1
  291. package/dist/history/internal/session-count.js +0 -109
  292. package/dist/history/internal/session-count.js.map +0 -1
  293. package/dist/history/internal/session-title.d.ts +0 -20
  294. package/dist/history/internal/session-title.d.ts.map +0 -1
  295. package/dist/history/internal/session-title.js +0 -44
  296. package/dist/history/internal/session-title.js.map +0 -1
  297. package/dist/history/internal/session-update.d.ts +0 -28
  298. package/dist/history/internal/session-update.d.ts.map +0 -1
  299. package/dist/history/internal/session-update.js +0 -70
  300. package/dist/history/internal/session-update.js.map +0 -1
  301. package/dist/history/internal/setup.d.ts.map +0 -1
  302. package/dist/history/internal/setup.js.map +0 -1
  303. package/dist/history/internal/title-generator.d.ts +0 -13
  304. package/dist/history/internal/title-generator.d.ts.map +0 -1
  305. package/dist/history/internal/title-generator.js +0 -25
  306. package/dist/history/internal/title-generator.js.map +0 -1
  307. package/dist/history/internal/ttl-anchor.d.ts +0 -25
  308. package/dist/history/internal/ttl-anchor.d.ts.map +0 -1
  309. package/dist/history/internal/ttl-anchor.js +0 -38
  310. package/dist/history/internal/ttl-anchor.js.map +0 -1
  311. package/dist/history/internal/validation.d.ts +0 -9
  312. package/dist/history/internal/validation.d.ts.map +0 -1
  313. package/dist/history/internal/validation.js +0 -16
  314. package/dist/history/internal/validation.js.map +0 -1
  315. package/dist/history/session-adapter.d.ts.map +0 -1
  316. package/dist/history/session-adapter.js.map +0 -1
  317. package/dist/history/types.d.ts.map +0 -1
  318. package/dist/history/types.js.map +0 -1
  319. package/dist/index.d.ts.map +0 -1
  320. package/dist/index.js.map +0 -1
  321. package/dist/shared/clock.d.ts.map +0 -1
  322. package/dist/shared/clock.js.map +0 -1
  323. package/dist/shared/codec/codec.d.ts.map +0 -1
  324. package/dist/shared/codec/codec.js.map +0 -1
  325. package/dist/shared/codec/compression.d.ts.map +0 -1
  326. package/dist/shared/codec/compression.js.map +0 -1
  327. package/dist/shared/codec/descriptor-keys.d.ts +0 -4
  328. package/dist/shared/codec/descriptor-keys.d.ts.map +0 -1
  329. package/dist/shared/codec/descriptor-keys.js +0 -14
  330. package/dist/shared/codec/descriptor-keys.js.map +0 -1
  331. package/dist/shared/codec/json-serde.d.ts.map +0 -1
  332. package/dist/shared/codec/json-serde.js.map +0 -1
  333. package/dist/shared/codec/s3/client.d.ts.map +0 -1
  334. package/dist/shared/codec/s3/client.js.map +0 -1
  335. package/dist/shared/codec/s3/config.d.ts.map +0 -1
  336. package/dist/shared/codec/s3/config.js.map +0 -1
  337. package/dist/shared/codec/s3/delete.d.ts +0 -8
  338. package/dist/shared/codec/s3/delete.d.ts.map +0 -1
  339. package/dist/shared/codec/s3/delete.js +0 -29
  340. package/dist/shared/codec/s3/delete.js.map +0 -1
  341. package/dist/shared/codec/s3/lifecycle.d.ts.map +0 -1
  342. package/dist/shared/codec/s3/lifecycle.js.map +0 -1
  343. package/dist/shared/codec/s3/offloader.d.ts.map +0 -1
  344. package/dist/shared/codec/s3/offloader.js.map +0 -1
  345. package/dist/shared/codec/s3/orphans.d.ts +0 -18
  346. package/dist/shared/codec/s3/orphans.d.ts.map +0 -1
  347. package/dist/shared/codec/s3/orphans.js +0 -58
  348. package/dist/shared/codec/s3/orphans.js.map +0 -1
  349. package/dist/shared/codec/s3/read-write.d.ts +0 -14
  350. package/dist/shared/codec/s3/read-write.d.ts.map +0 -1
  351. package/dist/shared/codec/s3/read-write.js +0 -43
  352. package/dist/shared/codec/s3/read-write.js.map +0 -1
  353. package/dist/shared/codec/s3/retry.d.ts +0 -5
  354. package/dist/shared/codec/s3/retry.d.ts.map +0 -1
  355. package/dist/shared/codec/s3/retry.js +0 -25
  356. package/dist/shared/codec/s3/retry.js.map +0 -1
  357. package/dist/shared/constants.d.ts +0 -64
  358. package/dist/shared/constants.d.ts.map +0 -1
  359. package/dist/shared/constants.js +0 -67
  360. package/dist/shared/constants.js.map +0 -1
  361. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  362. package/dist/shared/dynamodb/backoff.d.ts.map +0 -1
  363. package/dist/shared/dynamodb/backoff.js +0 -48
  364. package/dist/shared/dynamodb/backoff.js.map +0 -1
  365. package/dist/shared/dynamodb/batch-write.d.ts.map +0 -1
  366. package/dist/shared/dynamodb/batch-write.js.map +0 -1
  367. package/dist/shared/dynamodb/cancellation.d.ts.map +0 -1
  368. package/dist/shared/dynamodb/cancellation.js.map +0 -1
  369. package/dist/shared/dynamodb/client.d.ts.map +0 -1
  370. package/dist/shared/dynamodb/client.js.map +0 -1
  371. package/dist/shared/dynamodb/conditional-put.d.ts +0 -51
  372. package/dist/shared/dynamodb/conditional-put.d.ts.map +0 -1
  373. package/dist/shared/dynamodb/conditional-put.js +0 -59
  374. package/dist/shared/dynamodb/conditional-put.js.map +0 -1
  375. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -19
  376. package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +0 -1
  377. package/dist/shared/dynamodb/drain-unprocessed.js +0 -44
  378. package/dist/shared/dynamodb/drain-unprocessed.js.map +0 -1
  379. package/dist/shared/dynamodb/paginate-core.d.ts +0 -22
  380. package/dist/shared/dynamodb/paginate-core.d.ts.map +0 -1
  381. package/dist/shared/dynamodb/paginate-core.js +0 -52
  382. package/dist/shared/dynamodb/paginate-core.js.map +0 -1
  383. package/dist/shared/dynamodb/paginate.d.ts.map +0 -1
  384. package/dist/shared/dynamodb/paginate.js.map +0 -1
  385. package/dist/shared/dynamodb/partition-delete.d.ts.map +0 -1
  386. package/dist/shared/dynamodb/partition-delete.js.map +0 -1
  387. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -9
  388. package/dist/shared/dynamodb/retry-classifier.d.ts.map +0 -1
  389. package/dist/shared/dynamodb/retry-classifier.js +0 -87
  390. package/dist/shared/dynamodb/retry-classifier.js.map +0 -1
  391. package/dist/shared/dynamodb/retry.d.ts.map +0 -1
  392. package/dist/shared/dynamodb/retry.js.map +0 -1
  393. package/dist/shared/dynamodb/scan.d.ts +0 -15
  394. package/dist/shared/dynamodb/scan.d.ts.map +0 -1
  395. package/dist/shared/dynamodb/scan.js +0 -20
  396. package/dist/shared/dynamodb/scan.js.map +0 -1
  397. package/dist/shared/dynamodb/types.d.ts +0 -24
  398. package/dist/shared/dynamodb/types.d.ts.map +0 -1
  399. package/dist/shared/dynamodb/types.js +0 -3
  400. package/dist/shared/dynamodb/types.js.map +0 -1
  401. package/dist/shared/errors/base-error.d.ts.map +0 -1
  402. package/dist/shared/errors/base-error.js.map +0 -1
  403. package/dist/shared/errors/error-code.d.ts.map +0 -1
  404. package/dist/shared/errors/error-code.js.map +0 -1
  405. package/dist/shared/errors/errors.d.ts.map +0 -1
  406. package/dist/shared/errors/errors.js.map +0 -1
  407. package/dist/shared/errors/wrap-error.d.ts +0 -16
  408. package/dist/shared/errors/wrap-error.d.ts.map +0 -1
  409. package/dist/shared/errors/wrap-error.js +0 -30
  410. package/dist/shared/errors/wrap-error.js.map +0 -1
  411. package/dist/shared/logging/logger.d.ts.map +0 -1
  412. package/dist/shared/logging/logger.js.map +0 -1
  413. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  414. package/dist/shared/logging/redaction-walk.d.ts.map +0 -1
  415. package/dist/shared/logging/redaction-walk.js +0 -92
  416. package/dist/shared/logging/redaction-walk.js.map +0 -1
  417. package/dist/shared/logging/redaction.d.ts.map +0 -1
  418. package/dist/shared/logging/redaction.js.map +0 -1
  419. package/dist/shared/logging/secret-patterns.d.ts.map +0 -1
  420. package/dist/shared/logging/secret-patterns.js.map +0 -1
  421. package/dist/shared/options.d.ts.map +0 -1
  422. package/dist/shared/options.js.map +0 -1
  423. package/dist/shared/ulid.d.ts.map +0 -1
  424. package/dist/shared/ulid.js.map +0 -1
  425. package/dist/shared/validation/primitives.d.ts.map +0 -1
  426. package/dist/shared/validation/primitives.js.map +0 -1
  427. package/dist/shared/validation/ttl.d.ts.map +0 -1
  428. package/dist/shared/validation/ttl.js.map +0 -1
  429. package/dist/store/actions/get.d.ts +0 -5
  430. package/dist/store/actions/get.d.ts.map +0 -1
  431. package/dist/store/actions/get.js +0 -35
  432. package/dist/store/actions/get.js.map +0 -1
  433. package/dist/store/actions/list-namespaces.d.ts.map +0 -1
  434. package/dist/store/actions/list-namespaces.js.map +0 -1
  435. package/dist/store/actions/put.d.ts.map +0 -1
  436. package/dist/store/actions/put.js.map +0 -1
  437. package/dist/store/actions/reconcile-vector-index.d.ts.map +0 -1
  438. package/dist/store/actions/reconcile-vector-index.js.map +0 -1
  439. package/dist/store/actions/search.d.ts.map +0 -1
  440. package/dist/store/actions/search.js.map +0 -1
  441. package/dist/store/internal/backend-search.d.ts +0 -5
  442. package/dist/store/internal/backend-search.d.ts.map +0 -1
  443. package/dist/store/internal/backend-search.js +0 -68
  444. package/dist/store/internal/backend-search.js.map +0 -1
  445. package/dist/store/internal/filter.d.ts.map +0 -1
  446. package/dist/store/internal/filter.js.map +0 -1
  447. package/dist/store/internal/index-reconcile.d.ts +0 -22
  448. package/dist/store/internal/index-reconcile.d.ts.map +0 -1
  449. package/dist/store/internal/index-reconcile.js +0 -105
  450. package/dist/store/internal/index-reconcile.js.map +0 -1
  451. package/dist/store/internal/index-sync.d.ts +0 -11
  452. package/dist/store/internal/index-sync.d.ts.map +0 -1
  453. package/dist/store/internal/index-sync.js +0 -26
  454. package/dist/store/internal/index-sync.js.map +0 -1
  455. package/dist/store/internal/item-mapper.d.ts +0 -25
  456. package/dist/store/internal/item-mapper.d.ts.map +0 -1
  457. package/dist/store/internal/item-mapper.js +0 -53
  458. package/dist/store/internal/item-mapper.js.map +0 -1
  459. package/dist/store/internal/keys.d.ts +0 -18
  460. package/dist/store/internal/keys.d.ts.map +0 -1
  461. package/dist/store/internal/keys.js +0 -42
  462. package/dist/store/internal/keys.js.map +0 -1
  463. package/dist/store/internal/namespace-match.d.ts +0 -12
  464. package/dist/store/internal/namespace-match.d.ts.map +0 -1
  465. package/dist/store/internal/namespace-match.js +0 -41
  466. package/dist/store/internal/namespace-match.js.map +0 -1
  467. package/dist/store/internal/overwrite-swap.d.ts +0 -33
  468. package/dist/store/internal/overwrite-swap.d.ts.map +0 -1
  469. package/dist/store/internal/overwrite-swap.js +0 -62
  470. package/dist/store/internal/overwrite-swap.js.map +0 -1
  471. package/dist/store/internal/persist.d.ts +0 -27
  472. package/dist/store/internal/persist.d.ts.map +0 -1
  473. package/dist/store/internal/persist.js +0 -59
  474. package/dist/store/internal/persist.js.map +0 -1
  475. package/dist/store/internal/query.d.ts +0 -6
  476. package/dist/store/internal/query.d.ts.map +0 -1
  477. package/dist/store/internal/query.js +0 -32
  478. package/dist/store/internal/query.js.map +0 -1
  479. package/dist/store/internal/ranker.d.ts +0 -13
  480. package/dist/store/internal/ranker.d.ts.map +0 -1
  481. package/dist/store/internal/ranker.js +0 -31
  482. package/dist/store/internal/ranker.js.map +0 -1
  483. package/dist/store/internal/read-existing.d.ts +0 -19
  484. package/dist/store/internal/read-existing.d.ts.map +0 -1
  485. package/dist/store/internal/read-existing.js +0 -29
  486. package/dist/store/internal/read-existing.js.map +0 -1
  487. package/dist/store/internal/score-direction.d.ts +0 -32
  488. package/dist/store/internal/score-direction.d.ts.map +0 -1
  489. package/dist/store/internal/score-direction.js +0 -39
  490. package/dist/store/internal/score-direction.js.map +0 -1
  491. package/dist/store/internal/search-filter.d.ts +0 -4
  492. package/dist/store/internal/search-filter.d.ts.map +0 -1
  493. package/dist/store/internal/search-filter.js +0 -11
  494. package/dist/store/internal/search-filter.js.map +0 -1
  495. package/dist/store/internal/semantic-search.d.ts.map +0 -1
  496. package/dist/store/internal/semantic-search.js.map +0 -1
  497. package/dist/store/internal/setup.d.ts.map +0 -1
  498. package/dist/store/internal/setup.js.map +0 -1
  499. package/dist/store/internal/validation.d.ts +0 -13
  500. package/dist/store/internal/validation.d.ts.map +0 -1
  501. package/dist/store/internal/validation.js +0 -35
  502. package/dist/store/internal/validation.js.map +0 -1
  503. package/dist/store/internal/write-verify.d.ts +0 -37
  504. package/dist/store/internal/write-verify.d.ts.map +0 -1
  505. package/dist/store/internal/write-verify.js +0 -68
  506. package/dist/store/internal/write-verify.js.map +0 -1
  507. package/dist/store/store.d.ts.map +0 -1
  508. package/dist/store/store.js.map +0 -1
  509. package/dist/store/types.d.ts.map +0 -1
  510. package/dist/store/types.js.map +0 -1
  511. package/dist/store/vector-backend.d.ts.map +0 -1
  512. package/dist/store/vector-backend.js.map +0 -1
@@ -1,35 +1,72 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides what deleting a thread means for the checkpointer's rows.
4
+ *
5
+ * The partition delete itself is shared; what is decided here is which rows of
6
+ * a thread's partition are the checkpointer's to remove, which objects each one
7
+ * names, and which write id pins each delete, so a checkpoint or a pending
8
+ * write rewritten after the read is left alone. A caller names a thread and
9
+ * never learns the row kinds, their sort keys or how a refusal is counted.
10
+ */
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.deleteThread = deleteThread;
4
13
  const partition_delete_1 = require("../../shared/dynamodb/partition-delete");
5
- const keys_1 = require("../internal/keys");
6
- const query_1 = require("../internal/query");
7
- const validation_1 = require("../internal/validation");
8
- /** The offloaded payloads a checkpointer row can reference. */
9
- function descriptorsOf(row) {
10
- return [
11
- row.metadata,
12
- row.checkpoint,
13
- row.value,
14
- ];
15
- }
14
+ const retry_1 = require("../../shared/dynamodb/retry");
15
+ const parse_1 = require("../internal/parse");
16
+ const rows_1 = require("../internal/rows");
16
17
  /**
17
- * Delete every checkpoint, payload, and write for a thread (all share the
18
- * thread's partition), best-effort deleting any offloaded S3 objects. Rows
19
- * this adapter does not own are left in place and logged, so a shared-table
20
- * partition holding a foreign row is never collaterally wiped.
18
+ * Delete exactly the checkpoint, payload and write rows of one thread that the
19
+ * partition read observed.
20
+ *
21
+ * Accepts: `threadId` — validated like every identifier. `options.signal` —
22
+ * stops the read between pages.
23
+ *
24
+ * Returns: nothing. Deleting a thread that does not exist is not an error:
25
+ * there is simply nothing in the partition.
26
+ *
27
+ * Throws: `VALIDATION` for a malformed `threadId`;
28
+ * `BATCH_WRITE_INCOMPLETE` when a row's delete fails, carrying what did
29
+ * succeed; `ABORTED` when the signal fires, whether between pages or during
30
+ * a row's delete — a cancel is reported as a cancel and never as an incomplete
31
+ * delete, and no further row is issued after it. A refused row is **not** one of
32
+ * those failures and raises nothing: the pin turned it away because it was
33
+ * rewritten after the read, and deleting it would erase a write already
34
+ * acknowledged to its author and release the object that write uploaded, so
35
+ * leaving it is the safe answer rather than a degraded one. The error's two
36
+ * counts are **rows**, not batches — rows deleted and rows attempted, summed
37
+ * across every flush of the pass, with `details.succeededCount` repeating the first
38
+ * and `details.failedChunks` holding each failing row's own error — and its message says so,
39
+ * because a pass that sends one request per row is not a batch that did not
40
+ * drain. Refused rows are in neither count; they are reported at `warn` with
41
+ * their sort keys and counted as skipped. The remedy for a refusal is the same
42
+ * as for a row written after the read: re-run once the thread is quiescent.
43
+ *
44
+ * Guarantees: a row this adapter did not write is left in place and logged, so
45
+ * a shared-table partition is never collaterally wiped. A row written or
46
+ * rewritten after the read is left in place and reported too: every delete is
47
+ * pinned on the id of the write that produced the row it names, so a checkpoint
48
+ * re-put while this runs keeps both its rows and the objects they name, and its
49
+ * pending writes are then left alone with them. A row written before that id
50
+ * existed carries none and is deleted as it always was. A row written at a key
51
+ * the read never saw still survives the pass, which is why the thread should be
52
+ * quiescent.
21
53
  */
22
- async function deleteThread(context, threadId) {
23
- (0, validation_1.validateThreadId)(threadId);
54
+ async function deleteThread(context, threadId, options = {}) {
55
+ const thread = (0, parse_1.parseThreadId)(threadId);
24
56
  await (0, partition_delete_1.deletePartitionRows)({
25
57
  client: context.client,
26
58
  tableName: context.tableName,
27
- params: (0, query_1.partitionQuery)(context.tableName, (0, keys_1.partitionKey)(threadId), { consistent: true }),
59
+ params: (0, rows_1.partitionQuery)(context.tableName, (0, rows_1.partitionKey)(thread), { consistent: true }),
28
60
  logger: context.logger,
61
+ retry: (0, retry_1.retryFor)(context, options.signal),
62
+ signal: options.signal,
29
63
  offloader: context.offloader,
30
64
  operation: 'deleteThread',
31
- ownsSortKey: keys_1.isCheckpointerSortKey,
32
- descriptorsOf,
65
+ ownsSortKey: rows_1.isCheckpointerSortKey,
66
+ descriptorsOf: rows_1.checkpointRowDescriptors,
67
+ idAttribute: rows_1.WRITE_GROUP_ATTRIBUTE,
68
+ unitOf: rows_1.checkpointRowUnit,
69
+ kindOf: rows_1.checkpointRowKind,
70
+ scope: [thread],
33
71
  });
34
72
  }
35
- //# sourceMappingURL=delete-thread.js.map
@@ -1,10 +1,35 @@
1
+ /**
2
+ * Hides which checkpoint a read config resolves to.
3
+ *
4
+ * A config may name a checkpoint, only a namespace, or no thread at all, and
5
+ * each has one answer here: the checkpoint named, else the newest in the
6
+ * namespace (the root when none is given), else nothing rather than an error,
7
+ * as the reference saver answers. That the read is strongly consistent, so a
8
+ * checkpoint just written is always seen, is fixed here too.
9
+ */
1
10
  import type { RunnableConfig } from '@langchain/core/runnables';
2
11
  import type { CheckpointTuple } from '@langchain/langgraph-checkpoint';
3
12
  import type { CheckpointerContext } from '../internal/setup';
4
13
  /**
5
- * Load a checkpoint tuple: the target checkpoint (by id, or the newest in the
6
- * namespace), its metadata, its pending writes, and a parent config when the
7
- * checkpoint has a parent. Returns undefined when no matching checkpoint exists.
14
+ * One checkpoint with its metadata and pending writes.
15
+ *
16
+ * Accepts: `config` — `checkpoint_id` names the checkpoint, and its absence
17
+ * asks for the newest in the namespace. A config naming **no thread** is
18
+ * accepted: its other identifiers are still validated, and the answer is
19
+ * "nothing" rather than an error, which is what the reference saver does
20
+ * (`@langchain/langgraph-checkpoint@1.1.5` `dist/memory.js:86-92`: `thread_id`
21
+ * is read optionally while `checkpoint_ns` is asserted either way).
22
+ * `config.signal` — cancels the reads; checked before any of them.
23
+ *
24
+ * Returns: the tuple, or undefined for an unknown thread, an unknown
25
+ * checkpoint, a config naming no thread, or a META row whose PAYLOAD row is not
26
+ * there yet — the window the ordered write leaves open.
27
+ *
28
+ * Throws: `VALIDATION`, before any read, naming `config`, `configurable` or
29
+ * `signal` for a config of the wrong shape, or `thread_id`, `checkpoint_ns`,
30
+ * `checkpoint_id` or `thread_ts` for a malformed identifier; whatever the
31
+ * reads throw.
32
+ *
33
+ * Guarantees: strongly consistent, so a checkpoint just written is always seen.
8
34
  */
9
35
  export declare function getCheckpointTuple(context: CheckpointerContext, config: RunnableConfig): Promise<CheckpointTuple | undefined>;
10
- //# sourceMappingURL=get-tuple.d.ts.map
@@ -1,19 +1,53 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides which checkpoint a read config resolves to.
4
+ *
5
+ * A config may name a checkpoint, only a namespace, or no thread at all, and
6
+ * each has one answer here: the checkpoint named, else the newest in the
7
+ * namespace (the root when none is given), else nothing rather than an error,
8
+ * as the reference saver answers. That the read is strongly consistent, so a
9
+ * checkpoint just written is always seen, is fixed here too.
10
+ */
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.getCheckpointTuple = getCheckpointTuple;
4
- const assemble_1 = require("../internal/assemble");
5
- const configurable_1 = require("../internal/configurable");
6
- const fetch_1 = require("../internal/fetch");
13
+ const parse_1 = require("../internal/parse");
14
+ const read_1 = require("../internal/read");
7
15
  /**
8
- * Load a checkpoint tuple: the target checkpoint (by id, or the newest in the
9
- * namespace), its metadata, its pending writes, and a parent config when the
10
- * checkpoint has a parent. Returns undefined when no matching checkpoint exists.
16
+ * One checkpoint with its metadata and pending writes.
17
+ *
18
+ * Accepts: `config` — `checkpoint_id` names the checkpoint, and its absence
19
+ * asks for the newest in the namespace. A config naming **no thread** is
20
+ * accepted: its other identifiers are still validated, and the answer is
21
+ * "nothing" rather than an error, which is what the reference saver does
22
+ * (`@langchain/langgraph-checkpoint@1.1.5` `dist/memory.js:86-92`: `thread_id`
23
+ * is read optionally while `checkpoint_ns` is asserted either way).
24
+ * `config.signal` — cancels the reads; checked before any of them.
25
+ *
26
+ * Returns: the tuple, or undefined for an unknown thread, an unknown
27
+ * checkpoint, a config naming no thread, or a META row whose PAYLOAD row is not
28
+ * there yet — the window the ordered write leaves open.
29
+ *
30
+ * Throws: `VALIDATION`, before any read, naming `config`, `configurable` or
31
+ * `signal` for a config of the wrong shape, or `thread_id`, `checkpoint_ns`,
32
+ * `checkpoint_id` or `thread_ts` for a malformed identifier; whatever the
33
+ * reads throw.
34
+ *
35
+ * Guarantees: strongly consistent, so a checkpoint just written is always seen.
11
36
  */
12
37
  async function getCheckpointTuple(context, config) {
13
- const { threadId, checkpointNs, checkpointId } = (0, configurable_1.readConfigurable)(config);
14
- const meta = await (0, fetch_1.fetchTargetMeta)(context, threadId, checkpointNs, checkpointId);
38
+ const parsed = (0, parse_1.parseConfig)(config);
39
+ if (parsed.threadId === undefined)
40
+ return undefined;
41
+ const address = {
42
+ threadId: parsed.threadId,
43
+ checkpointNs: parsed.checkpointNs ?? parse_1.ROOT_NAMESPACE,
44
+ checkpointId: parsed.checkpointId,
45
+ };
46
+ const meta = await (0, read_1.fetchTargetMeta)(context, address, parsed.signal);
15
47
  if (!meta)
16
48
  return undefined;
17
- return (0, assemble_1.assembleTuple)(context, threadId, checkpointNs, meta);
49
+ return (0, read_1.assembleTuple)(context, { threadId: address.threadId, checkpointNs: address.checkpointNs }, meta, {
50
+ signal: parsed.signal,
51
+ consistent: true,
52
+ });
18
53
  }
19
- //# sourceMappingURL=get-tuple.js.map
@@ -1,10 +1,52 @@
1
+ /**
2
+ * Hides when a listing reads, and when it stops.
3
+ *
4
+ * A `limit` of `0` is answered before any request is built, a config that
5
+ * pins one checkpoint in a known namespace is a single direct read rather than
6
+ * a range, and every other listing streams tuples until the caller stops
7
+ * pulling or `limit` is reached. The read is deliberately unbounded and
8
+ * eventually consistent; past a threshold an operator is warned instead of the
9
+ * caller being refused. Where the rows come from is `listing`'s concern.
10
+ */
1
11
  import type { RunnableConfig } from '@langchain/core/runnables';
2
12
  import type { CheckpointListOptions, CheckpointTuple } from '@langchain/langgraph-checkpoint';
3
13
  import type { CheckpointerContext } from '../internal/setup';
4
14
  /**
5
- * Yield checkpoint tuples for a thread/namespace, newest first. Honors
6
- * `options.before` (only checkpoints older than the given id), `options.filter`
7
- * (metadata equality), and `options.limit` (max tuples yielded).
15
+ * Yield checkpoint tuples for a thread, newest first: every namespace when the
16
+ * config names none (grouped by namespace, newest first within each), else the
17
+ * one namespace given. Without a `thread_id` every thread in the table is
18
+ * listed: through a table scan, as the reference savers do, which is unordered
19
+ * across threads, or through the recency index when `indexName` is set. Either
20
+ * read is cross-tenant by construction. Honors `options.before` (only
21
+ * checkpoints older than the given id), `options.filter` (metadata equality),
22
+ * and `options.limit` (max tuples yielded; the read stops right after the
23
+ * yield that reaches it).
24
+ *
25
+ * Accepts: `config` — `thread_id` scopes the read to one thread and its absence
26
+ * lists every thread in the table, through a scan as the reference savers do or
27
+ * through the recency index when `indexName` is set; `checkpoint_ns` scopes to
28
+ * one namespace and its absence spans every namespace of the thread.
29
+ * `options.before` — only checkpoints older than that id. `options.filter` —
30
+ * metadata equality. `options.limit` — at most this many tuples, up to the
31
+ * package's page ceiling; `0` yields nothing, which is what the reference
32
+ * returns, and a negative value is refused.
33
+ *
34
+ * Returns: an async generator over the tuples, newest first within a namespace,
35
+ * unordered across threads on the scan path. The read stops right after the
36
+ * yield that reaches `limit`, and abandoning the generator stops it too.
37
+ *
38
+ * Throws: `VALIDATION`, from the first `.next()` and before any read, for
39
+ * a config of the wrong shape (`config`, `configurable`, `signal`), a
40
+ * malformed identifier, or options that fail the checks
41
+ * {@link parseListScope} makes;
42
+ * `FORMAT_UNSUPPORTED` for a row of ours written by a newer version; whatever
43
+ * the reads and decodes throw.
44
+ *
45
+ * Guarantees: eventually consistent — a listing tolerates the replica lag
46
+ * `getTuple` does not. The read is deliberately unbounded: this generator
47
+ * streams and never accumulates, `limit` returns early, and a raw-row cap would
48
+ * turn a caller asking for a handful of rare matches over a large thread into a
49
+ * hard error instead of the true (possibly empty) answer. Past the warning
50
+ * threshold an operator is told to narrow the filter or pass a limit.
8
51
  */
9
52
  export declare function listCheckpoints(context: CheckpointerContext, config: RunnableConfig, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple>;
10
- //# sourceMappingURL=list.d.ts.map
@@ -1,87 +1,142 @@
1
1
  "use strict";
2
+ /**
3
+ * Hides when a listing reads, and when it stops.
4
+ *
5
+ * A `limit` of `0` is answered before any request is built, a config that
6
+ * pins one checkpoint in a known namespace is a single direct read rather than
7
+ * a range, and every other listing streams tuples until the caller stops
8
+ * pulling or `limit` is reached. The read is deliberately unbounded and
9
+ * eventually consistent; past a threshold an operator is warned instead of the
10
+ * caller being refused. Where the rows come from is `listing`'s concern.
11
+ */
2
12
  Object.defineProperty(exports, "__esModule", { value: true });
3
13
  exports.listCheckpoints = listCheckpoints;
4
- const constants_1 = require("../../shared/constants");
14
+ const clock_1 = require("../../shared/clock");
5
15
  const paginate_1 = require("../../shared/dynamodb/paginate");
6
- const assemble_1 = require("../internal/assemble");
7
- const configurable_1 = require("../internal/configurable");
8
- const filter_match_1 = require("../internal/filter-match");
9
- const item_reader_1 = require("../internal/item-reader");
10
- const keys_1 = require("../internal/keys");
11
- const query_1 = require("../internal/query");
12
- /** Read list options into a flat, typed shape. */
13
- function readListOptions(options) {
14
- return {
15
- before: options?.before?.configurable?.checkpoint_id,
16
- filter: options?.filter,
17
- limit: options?.limit,
18
- };
16
+ const table_schema_1 = require("../../shared/dynamodb/table-schema");
17
+ const listing_1 = require("../internal/listing");
18
+ const parse_1 = require("../internal/parse");
19
+ const read_1 = require("../internal/read");
20
+ /**
21
+ * The tuple for one META item that passes every filter, assembled eventually
22
+ * consistently (a history listing tolerates a replica lag `getTuple` does not)
23
+ * and reusing the metadata the filter already decoded. Undefined when the row
24
+ * is filtered out or its payload is missing.
25
+ */
26
+ async function tupleFor(context, meta, scope) {
27
+ if (!(0, listing_1.passesKeyFilters)(meta, scope))
28
+ return undefined;
29
+ const verdict = await (0, listing_1.passesMetadataFilter)(context, meta, scope);
30
+ if (!verdict.pass)
31
+ return undefined;
32
+ return (0, read_1.assembleTuple)(context, { threadId: meta.threadId, checkpointNs: meta.checkpointNs }, meta, {
33
+ signal: scope.signal,
34
+ consistent: false,
35
+ metadata: verdict.metadata,
36
+ });
37
+ }
38
+ /** A `checkpoint_id` addresses one row: read it directly instead of scanning the namespace for it. */
39
+ async function* listOne(context, scope) {
40
+ const meta = await (0, read_1.fetchTargetMeta)(context, {
41
+ threadId: scope.threadId,
42
+ checkpointNs: scope.checkpointNs,
43
+ checkpointId: scope.checkpointId,
44
+ }, scope.signal);
45
+ if (!meta)
46
+ return;
47
+ const tuple = await tupleFor(context, meta, scope);
48
+ if (tuple)
49
+ yield tuple;
19
50
  }
20
51
  /**
21
- * True when `meta` passes the key-level list filters: `before` (strictly older
22
- * checkpoints) and an explicitly requested `checkpoint_id`. Split out from the
23
- * loop so each filter stays independently readable.
52
+ * True when the caller asked for no tuples at all. Answered before any request
53
+ * is built: DynamoDB rejects `Limit: 0`, and yielding one tuple and only then
54
+ * testing the limit returns a result the caller did not ask for. The reference
55
+ * saver returns nothing here (`@langchain/langgraph-checkpoint@1.1.5`
56
+ * `dist/memory.js:172`).
57
+ *
58
+ * Exactly `0`, not "zero or less": a negative limit is refused by
59
+ * {@link parseListScope} before this runs, so treating one as a request for
60
+ * nothing would be a branch no call could reach.
24
61
  */
25
- function passesKeyFilters(meta, checkpointId, before) {
26
- if (checkpointId !== undefined && meta.checkpointId !== checkpointId)
27
- return false;
28
- return before === undefined || meta.checkpointId < before;
62
+ function asksForNothing(scope) {
63
+ return scope.limit === 0;
29
64
  }
30
- /** True when `meta` passes the (optional) metadata-equality filter. */
31
- async function passesMetadataFilter(context, meta, filter) {
32
- if (!filter)
33
- return true;
34
- const metadata = (await (0, item_reader_1.readMetadata)(context, meta));
35
- return (0, filter_match_1.matchesFilter)(metadata, filter);
65
+ /**
66
+ * True when the scope names exactly one row, which is only so once the
67
+ * namespace is known. A `checkpoint_id` without a `checkpoint_ns` may address a
68
+ * checkpoint in any namespace — a subgraph's, for instance — so the read stays
69
+ * namespace-wide and `passesKeyFilters` narrows it to that id.
70
+ */
71
+ function addressesOneRow(scope) {
72
+ return (scope.threadId !== undefined &&
73
+ scope.checkpointId !== undefined &&
74
+ scope.checkpointNs !== undefined);
36
75
  }
37
76
  /**
38
- * Yield checkpoint tuples for a thread/namespace, newest first. Honors
39
- * `options.before` (only checkpoints older than the given id), `options.filter`
40
- * (metadata equality), and `options.limit` (max tuples yielded).
77
+ * Yield checkpoint tuples for a thread, newest first: every namespace when the
78
+ * config names none (grouped by namespace, newest first within each), else the
79
+ * one namespace given. Without a `thread_id` every thread in the table is
80
+ * listed: through a table scan, as the reference savers do, which is unordered
81
+ * across threads, or through the recency index when `indexName` is set. Either
82
+ * read is cross-tenant by construction. Honors `options.before` (only
83
+ * checkpoints older than the given id), `options.filter` (metadata equality),
84
+ * and `options.limit` (max tuples yielded; the read stops right after the
85
+ * yield that reaches it).
86
+ *
87
+ * Accepts: `config` — `thread_id` scopes the read to one thread and its absence
88
+ * lists every thread in the table, through a scan as the reference savers do or
89
+ * through the recency index when `indexName` is set; `checkpoint_ns` scopes to
90
+ * one namespace and its absence spans every namespace of the thread.
91
+ * `options.before` — only checkpoints older than that id. `options.filter` —
92
+ * metadata equality. `options.limit` — at most this many tuples, up to the
93
+ * package's page ceiling; `0` yields nothing, which is what the reference
94
+ * returns, and a negative value is refused.
95
+ *
96
+ * Returns: an async generator over the tuples, newest first within a namespace,
97
+ * unordered across threads on the scan path. The read stops right after the
98
+ * yield that reaches `limit`, and abandoning the generator stops it too.
99
+ *
100
+ * Throws: `VALIDATION`, from the first `.next()` and before any read, for
101
+ * a config of the wrong shape (`config`, `configurable`, `signal`), a
102
+ * malformed identifier, or options that fail the checks
103
+ * {@link parseListScope} makes;
104
+ * `FORMAT_UNSUPPORTED` for a row of ours written by a newer version; whatever
105
+ * the reads and decodes throw.
106
+ *
107
+ * Guarantees: eventually consistent — a listing tolerates the replica lag
108
+ * `getTuple` does not. The read is deliberately unbounded: this generator
109
+ * streams and never accumulates, `limit` returns early, and a raw-row cap would
110
+ * turn a caller asking for a handful of rare matches over a large thread into a
111
+ * hard error instead of the true (possibly empty) answer. Past the warning
112
+ * threshold an operator is told to narrow the filter or pass a limit.
41
113
  */
42
114
  async function* listCheckpoints(context, config, options) {
43
- const { threadId, checkpointNs, checkpointId } = (0, configurable_1.readConfigurable)(config);
44
- const { before, filter, limit } = readListOptions(options);
45
- const params = (0, query_1.beginsWithQuery)(context.tableName, (0, keys_1.partitionKey)(threadId), (0, keys_1.metaSortKeyPrefix)(checkpointNs));
115
+ const scope = (0, parse_1.parseListScope)(config, options);
116
+ if (asksForNothing(scope))
117
+ return;
118
+ if (addressesOneRow(scope)) {
119
+ yield* listOne(context, scope);
120
+ return;
121
+ }
122
+ const now = (0, clock_1.nowSeconds)();
46
123
  let yielded = 0;
47
124
  let scanned = 0;
48
- /**
49
- * Unbounded: this is a generator that streams and never accumulates, and
50
- * `limit` already returns early, so the caller's own bound is what stops the
51
- * read. The shared in-memory cap counts *raw rows pulled*, not
52
- * filter-matched ones, so leaving it in place turned a caller asking for a
53
- * handful of rare matches over a large thread into a hard
54
- * ResultTruncatedError instead of the true (possibly empty) answer.
55
- */
56
- for await (const raw of (0, paginate_1.paginateQuery)({
57
- client: context.client,
58
- params,
59
- maxItems: Number.POSITIVE_INFINITY,
60
- maxIterations: Number.POSITIVE_INFINITY,
61
- })) {
125
+ for await (const raw of (0, listing_1.metaRows)(context, scope, now)) {
62
126
  scanned += 1;
63
- if (scanned === constants_1.LIST_SCAN_WARN_THRESHOLD) {
127
+ if (scanned === paginate_1.LIST_SCAN_WARN_THRESHOLD) {
64
128
  context.logger.warn('list: scanned a large number of rows without the caller stopping; this read is ' +
65
- 'deliberately unbounded, so narrow the filter or pass options.limit', { threadId, checkpointNs, scanned });
66
- }
67
- if (limit !== undefined && yielded >= limit)
68
- return;
69
- const meta = (0, item_reader_1.narrowMetaItem)(raw);
70
- if (!meta) {
71
- context.logger.warn('list: skipped a row that is not a checkpoint meta item', {
72
- sortKey: raw.SK,
73
- });
74
- continue;
129
+ 'deliberately unbounded, so narrow the filter or pass options.limit', { threadId: scope.threadId, checkpointNs: scope.checkpointNs, scanned });
75
130
  }
76
- if (!passesKeyFilters(meta, checkpointId, before))
131
+ const meta = (0, listing_1.parseListedRow)(context, raw);
132
+ if (!meta || (0, table_schema_1.isExpiredRow)(meta, now))
77
133
  continue;
78
- if (!(await passesMetadataFilter(context, meta, filter)))
134
+ const tuple = await tupleFor(context, meta, scope);
135
+ if (!tuple)
79
136
  continue;
80
- const tuple = await (0, assemble_1.assembleTuple)(context, threadId, checkpointNs, meta);
81
- if (tuple) {
82
- yield tuple;
83
- yielded += 1;
84
- }
137
+ yield tuple;
138
+ yielded += 1;
139
+ if (scope.limit !== undefined && yielded >= scope.limit)
140
+ return;
85
141
  }
86
142
  }
87
- //# sourceMappingURL=list.js.map
@@ -1,15 +1,47 @@
1
+ /**
2
+ * Hides how one `putWrites` call's rows are known to be one call's.
3
+ *
4
+ * Every call draws a write group from a strictly monotonic ULID factory, and
5
+ * that one id serves three ends: the object id each offloaded write is uploaded
6
+ * under (record 4), the owner a guard rejection is compared against to tell a
7
+ * rival call from this call's own retry, and the order the read side uses to
8
+ * pick the earliest call that wrote a channel. A caller passes writes and a
9
+ * task id and never sees the group.
10
+ */
1
11
  import type { RunnableConfig } from '@langchain/core/runnables';
2
12
  import type { PendingWrite } from '@langchain/langgraph-checkpoint';
3
13
  import type { CheckpointerContext } from '../internal/setup';
4
14
  /**
5
- * Persist a task's intermediate writes for a checkpoint as one item per write.
6
- * Requires `checkpoint_id` in the config — writes always attach to a checkpoint.
7
- * Regular writes are first-write-wins (matching the reference checkpointer
8
- * contract); special negative-index writes always overwrite (see
9
- * {@link writeSpecialItemsWithCleanup}). Regular-write failure cleanup only
10
- * ever targets items known never to have committed (see
11
- * {@link RegularWriteOutcome}) — never a lost guard, so an upload can leak
12
- * but a live row can never be stranded pointing at a deleted object.
15
+ * Persist a task's intermediate writes for a checkpoint, one row per write.
16
+ *
17
+ * Accepts: `config` — must name a `checkpoint_id`, since writes always attach
18
+ * to a checkpoint. `writes` — one task's, in order; their channels are
19
+ * validated before anything is encoded or uploaded. `taskId` — validated as the
20
+ * sort-key segment it becomes. `config.signal` — cancels the writes' retries;
21
+ * checked before anything is encoded.
22
+ *
23
+ * Returns: nothing. Every write is attempted; a regular write that loses its
24
+ * first-write-wins race is a normal outcome, not a failure.
25
+ *
26
+ * Throws: `VALIDATION` naming `config`, `configurable` or `signal` for a
27
+ * config of the wrong shape; `thread_id`, `checkpoint_ns`, `checkpoint_id` or
28
+ * `thread_ts` for a malformed identifier, and `checkpoint_id` when the config
29
+ * names none; `taskId`, `writes`, `channel`, `sortKey` — every one of them
30
+ * before anything is encoded or uploaded — `payload` or `s3Key`; the first
31
+ * genuine write failure, after every write has settled and the cleanup has
32
+ * run.
33
+ *
34
+ * Guarantees: regular writes are first-write-wins, matching the reference
35
+ * checkpointer; special negative-index writes always overwrite (see
36
+ * {@link commitPendingWrites}). Cleanup of this call's own uploads only ever
37
+ * targets uploads confirmed unreferenced: a verified non-commit, or a guard
38
+ * rejection whose returned row provably belongs to another call. A special write's superseded
39
+ * payload is released only once the write that superseded it committed. An
40
+ * upload can leak. A payload refused partway through the encode releases the
41
+ * objects the earlier writes of the same call had already uploaded, before the
42
+ * refusal reaches the caller and while no row of the call exists. Every
43
+ * offloaded write of this call is uploaded under the call's own `writeGroup`,
44
+ * so no row another call writes names one of this call's uploads, and no
45
+ * release reads the row again first.
13
46
  */
14
47
  export declare function putWrites(context: CheckpointerContext, config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void>;
15
- //# sourceMappingURL=put-writes.d.ts.map