@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.2 → 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 (409) hide show
  1. package/README.md +390 -193
  2. package/dist/{backfill → cjs/backfill}/backfill.d.ts +15 -12
  3. package/dist/cjs/backfill/backfill.js +177 -0
  4. package/dist/{checkpointer → cjs/checkpointer}/actions/delete-thread.d.ts +1 -1
  5. package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
  6. package/dist/{checkpointer → cjs/checkpointer}/actions/get-tuple.d.ts +4 -3
  7. package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
  8. package/dist/{checkpointer → cjs/checkpointer}/actions/list.d.ts +7 -4
  9. package/dist/cjs/checkpointer/actions/list.js +70 -0
  10. package/dist/{checkpointer → cjs/checkpointer}/actions/put-writes.d.ts +8 -6
  11. package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
  12. package/dist/{checkpointer → cjs/checkpointer}/actions/put.d.ts +21 -15
  13. package/dist/cjs/checkpointer/actions/put.js +79 -0
  14. package/dist/{checkpointer → cjs/checkpointer}/internal/delta-history.d.ts +38 -26
  15. package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
  16. package/dist/{checkpointer → cjs/checkpointer}/internal/listing.d.ts +4 -4
  17. package/dist/cjs/checkpointer/internal/listing.js +104 -0
  18. package/dist/{checkpointer → cjs/checkpointer}/internal/parse.d.ts +51 -15
  19. package/dist/cjs/checkpointer/internal/parse.js +184 -0
  20. package/dist/{checkpointer → cjs/checkpointer}/internal/pending-writes.d.ts +64 -25
  21. package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
  22. package/dist/{checkpointer → cjs/checkpointer}/internal/read.d.ts +15 -10
  23. package/dist/cjs/checkpointer/internal/read.js +132 -0
  24. package/dist/{checkpointer → cjs/checkpointer}/internal/rows.d.ts +94 -21
  25. package/dist/cjs/checkpointer/internal/rows.js +356 -0
  26. package/dist/{checkpointer → cjs/checkpointer}/internal/setup.d.ts +13 -20
  27. package/dist/cjs/checkpointer/internal/setup.js +25 -0
  28. package/dist/{checkpointer → cjs/checkpointer}/saver.d.ts +72 -36
  29. package/dist/cjs/checkpointer/saver.js +56 -0
  30. package/dist/{checkpointer → cjs/checkpointer}/types.d.ts +1 -1
  31. package/dist/cjs/checkpointer/types.js +2 -0
  32. package/dist/{factory → cjs/factory}/factory.d.ts +25 -20
  33. package/dist/cjs/factory/factory.js +137 -0
  34. package/dist/{factory → cjs/factory}/types.d.ts +12 -12
  35. package/dist/cjs/factory/types.js +2 -0
  36. package/dist/{history → cjs/history}/actions/add-messages.d.ts +18 -10
  37. package/dist/cjs/history/actions/add-messages.js +17 -0
  38. package/dist/{history → cjs/history}/actions/clear.d.ts +1 -1
  39. package/dist/cjs/history/actions/clear.js +29 -0
  40. package/dist/{history → cjs/history}/actions/get-messages.d.ts +11 -9
  41. package/dist/cjs/history/actions/get-messages.js +58 -0
  42. package/dist/{history → cjs/history}/actions/list-sessions.d.ts +3 -3
  43. package/dist/cjs/history/actions/list-sessions.js +67 -0
  44. package/dist/{history → cjs/history}/actions/reconcile-count.d.ts +13 -9
  45. package/dist/cjs/history/actions/reconcile-count.js +8 -0
  46. package/dist/{history → cjs/history}/chat-message-history.d.ts +62 -30
  47. package/dist/cjs/history/chat-message-history.js +61 -0
  48. package/dist/{history → cjs/history}/internal/append.d.ts +64 -32
  49. package/dist/cjs/history/internal/append.js +267 -0
  50. package/dist/{history → cjs/history}/internal/message-read.d.ts +3 -3
  51. package/dist/cjs/history/internal/message-read.js +93 -0
  52. package/dist/{history → cjs/history}/internal/parse.d.ts +2 -2
  53. package/dist/cjs/history/internal/parse.js +113 -0
  54. package/dist/{history → cjs/history}/internal/rows.d.ts +11 -10
  55. package/dist/cjs/history/internal/rows.js +96 -0
  56. package/dist/{history → cjs/history}/internal/session.d.ts +41 -22
  57. package/dist/cjs/history/internal/session.js +296 -0
  58. package/dist/{history → cjs/history}/internal/setup.d.ts +2 -2
  59. package/dist/cjs/history/internal/setup.js +60 -0
  60. package/dist/{history → cjs/history}/session-adapter.d.ts +0 -6
  61. package/dist/cjs/history/session-adapter.js +38 -0
  62. package/dist/{history → cjs/history}/types.d.ts +18 -15
  63. package/dist/cjs/history/types.js +2 -0
  64. package/dist/{index.d.ts → cjs/index.d.ts} +27 -27
  65. package/dist/cjs/index.js +25 -0
  66. package/dist/cjs/package.json +1 -0
  67. package/dist/{shared → cjs/shared}/adapter.d.ts +27 -16
  68. package/dist/cjs/shared/adapter.js +70 -0
  69. package/dist/cjs/shared/clock.js +14 -0
  70. package/dist/{shared → cjs/shared}/codec/codec.d.ts +37 -20
  71. package/dist/cjs/shared/codec/codec.js +162 -0
  72. package/dist/{shared → cjs/shared}/codec/compression.d.ts +9 -4
  73. package/dist/cjs/shared/codec/compression.js +45 -0
  74. package/dist/cjs/shared/codec/json-serde.js +58 -0
  75. package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +2 -1
  76. package/dist/cjs/shared/codec/s3/client-types.js +6 -0
  77. package/dist/{shared → cjs/shared}/codec/s3/client.d.ts +25 -7
  78. package/dist/cjs/shared/codec/s3/client.js +78 -0
  79. package/dist/{shared → cjs/shared}/codec/s3/config.d.ts +12 -7
  80. package/dist/cjs/shared/codec/s3/config.js +92 -0
  81. package/dist/{shared → cjs/shared}/codec/s3/lifecycle.d.ts +71 -17
  82. package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
  83. package/dist/{shared → cjs/shared}/codec/s3/offloader.d.ts +42 -29
  84. package/dist/cjs/shared/codec/s3/offloader.js +289 -0
  85. package/dist/cjs/shared/concurrency.js +31 -0
  86. package/dist/{shared → cjs/shared}/dynamodb/abort.d.ts +2 -2
  87. package/dist/cjs/shared/dynamodb/abort.js +16 -0
  88. package/dist/{shared → cjs/shared}/dynamodb/batch-write.d.ts +2 -2
  89. package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
  90. package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
  91. package/dist/{shared → cjs/shared}/dynamodb/client.d.ts +24 -22
  92. package/dist/cjs/shared/dynamodb/client.js +40 -0
  93. package/dist/{shared → cjs/shared}/dynamodb/idempotent-write.d.ts +64 -19
  94. package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
  95. package/dist/{shared → cjs/shared}/dynamodb/paginate.d.ts +2 -2
  96. package/dist/cjs/shared/dynamodb/paginate.js +90 -0
  97. package/dist/{shared → cjs/shared}/dynamodb/partition-delete.d.ts +6 -6
  98. package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
  99. package/dist/{shared → cjs/shared}/dynamodb/recency-index.d.ts +27 -15
  100. package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
  101. package/dist/{shared → cjs/shared}/dynamodb/retry.d.ts +37 -6
  102. package/dist/cjs/shared/dynamodb/retry.js +193 -0
  103. package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
  104. package/dist/cjs/shared/dynamodb/row-size.js +30 -0
  105. package/dist/{shared → cjs/shared}/dynamodb/table-schema.d.ts +27 -18
  106. package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
  107. package/dist/{shared → cjs/shared}/errors/base-error.d.ts +42 -7
  108. package/dist/cjs/shared/errors/base-error.js +73 -0
  109. package/dist/{shared → cjs/shared}/errors/boundary.d.ts +29 -14
  110. package/dist/cjs/shared/errors/boundary.js +61 -0
  111. package/dist/cjs/shared/errors/classify.d.ts +206 -0
  112. package/dist/cjs/shared/errors/classify.js +232 -0
  113. package/dist/{shared → cjs/shared}/errors/error-code.d.ts +17 -10
  114. package/dist/cjs/shared/errors/error-code.js +27 -0
  115. package/dist/{shared → cjs/shared}/errors/errors.d.ts +75 -9
  116. package/dist/cjs/shared/errors/errors.js +123 -0
  117. package/dist/cjs/shared/logging/logger.js +30 -0
  118. package/dist/{shared → cjs/shared}/logging/redaction.d.ts +8 -4
  119. package/dist/cjs/shared/logging/redaction.js +145 -0
  120. package/dist/{shared → cjs/shared}/logging/secret-patterns.d.ts +30 -7
  121. package/dist/cjs/shared/logging/secret-patterns.js +93 -0
  122. package/dist/cjs/shared/logging/truncate.js +31 -0
  123. package/dist/{shared → cjs/shared}/options.d.ts +27 -11
  124. package/dist/cjs/shared/options.js +2 -0
  125. package/dist/cjs/shared/ulid.js +83 -0
  126. package/dist/{shared → cjs/shared}/validation/collaborators.d.ts +21 -2
  127. package/dist/cjs/shared/validation/collaborators.js +79 -0
  128. package/dist/{shared → cjs/shared}/validation/option-shape.d.ts +7 -5
  129. package/dist/cjs/shared/validation/option-shape.js +31 -0
  130. package/dist/{shared → cjs/shared}/validation/options.d.ts +4 -4
  131. package/dist/cjs/shared/validation/options.js +166 -0
  132. package/dist/cjs/shared/validation/primitives.js +114 -0
  133. package/dist/{shared → cjs/shared}/validation/ttl.d.ts +26 -9
  134. package/dist/cjs/shared/validation/ttl.js +52 -0
  135. package/dist/{store → cjs/store}/actions/list-namespaces.d.ts +5 -5
  136. package/dist/cjs/store/actions/list-namespaces.js +92 -0
  137. package/dist/{store → cjs/store}/actions/put.d.ts +11 -4
  138. package/dist/cjs/store/actions/put.js +49 -0
  139. package/dist/{store → cjs/store}/actions/reconcile-vector-index.d.ts +5 -5
  140. package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
  141. package/dist/{store → cjs/store}/actions/search.d.ts +2 -2
  142. package/dist/cjs/store/actions/search.js +26 -0
  143. package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
  144. package/dist/cjs/store/internal/batch-plan.js +32 -0
  145. package/dist/{store → cjs/store}/internal/filter.d.ts +3 -3
  146. package/dist/cjs/store/internal/filter.js +64 -0
  147. package/dist/cjs/store/internal/get-item.d.ts +77 -0
  148. package/dist/cjs/store/internal/get-item.js +58 -0
  149. package/dist/{store → cjs/store}/internal/item-write.d.ts +72 -32
  150. package/dist/cjs/store/internal/item-write.js +181 -0
  151. package/dist/{store → cjs/store}/internal/parse.d.ts +15 -10
  152. package/dist/cjs/store/internal/parse.js +180 -0
  153. package/dist/{store → cjs/store}/internal/rows.d.ts +38 -34
  154. package/dist/cjs/store/internal/rows.js +166 -0
  155. package/dist/{store → cjs/store}/internal/semantic-search.d.ts +2 -2
  156. package/dist/cjs/store/internal/semantic-search.js +211 -0
  157. package/dist/{store → cjs/store}/internal/setup.d.ts +10 -15
  158. package/dist/cjs/store/internal/setup.js +103 -0
  159. package/dist/{store → cjs/store}/internal/table-search.d.ts +5 -5
  160. package/dist/cjs/store/internal/table-search.js +123 -0
  161. package/dist/{store → cjs/store}/internal/vector-index.d.ts +26 -15
  162. package/dist/cjs/store/internal/vector-index.js +269 -0
  163. package/dist/{store → cjs/store}/store.d.ts +82 -39
  164. package/dist/cjs/store/store.js +97 -0
  165. package/dist/{store → cjs/store}/types.d.ts +25 -10
  166. package/dist/cjs/store/types.js +2 -0
  167. package/dist/cjs/store/vector-backend.js +4 -0
  168. package/dist/esm/backfill/backfill.d.ts +171 -0
  169. package/dist/esm/backfill/backfill.js +170 -0
  170. package/dist/{checkpointer/actions/delete-thread.js → esm/checkpointer/actions/delete-thread.d.ts} +4 -26
  171. package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
  172. package/dist/{checkpointer/actions/get-tuple.js → esm/checkpointer/actions/get-tuple.d.ts} +7 -24
  173. package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
  174. package/dist/esm/checkpointer/actions/list.d.ts +55 -0
  175. package/dist/esm/checkpointer/actions/list.js +67 -0
  176. package/dist/{checkpointer/actions/put-writes.js → esm/checkpointer/actions/put-writes.d.ts} +10 -37
  177. package/dist/esm/checkpointer/actions/put-writes.js +18 -0
  178. package/dist/esm/checkpointer/actions/put.d.ts +95 -0
  179. package/dist/esm/checkpointer/actions/put.js +75 -0
  180. package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
  181. package/dist/esm/checkpointer/internal/delta-history.js +126 -0
  182. package/dist/{checkpointer/internal/listing.js → esm/checkpointer/internal/listing.d.ts} +22 -118
  183. package/dist/esm/checkpointer/internal/listing.js +95 -0
  184. package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
  185. package/dist/esm/checkpointer/internal/parse.js +169 -0
  186. package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
  187. package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
  188. package/dist/esm/checkpointer/internal/read.d.ts +135 -0
  189. package/dist/esm/checkpointer/internal/read.js +125 -0
  190. package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
  191. package/dist/esm/checkpointer/internal/rows.js +323 -0
  192. package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
  193. package/dist/esm/checkpointer/internal/setup.js +21 -0
  194. package/dist/{checkpointer/saver.js → esm/checkpointer/saver.d.ts} +84 -87
  195. package/dist/esm/checkpointer/saver.js +52 -0
  196. package/dist/esm/checkpointer/types.d.ts +51 -0
  197. package/dist/esm/checkpointer/types.js +1 -0
  198. package/dist/esm/factory/factory.d.ts +154 -0
  199. package/dist/esm/factory/factory.js +133 -0
  200. package/dist/esm/factory/types.d.ts +76 -0
  201. package/dist/esm/factory/types.js +1 -0
  202. package/dist/{history/actions/add-messages.js → esm/history/actions/add-messages.d.ts} +20 -26
  203. package/dist/esm/history/actions/add-messages.js +14 -0
  204. package/dist/{history/actions/clear.js → esm/history/actions/clear.d.ts} +4 -35
  205. package/dist/esm/history/actions/clear.js +26 -0
  206. package/dist/esm/history/actions/get-messages.d.ts +60 -0
  207. package/dist/esm/history/actions/get-messages.js +55 -0
  208. package/dist/esm/history/actions/list-sessions.d.ts +55 -0
  209. package/dist/esm/history/actions/list-sessions.js +64 -0
  210. package/dist/{history/actions/reconcile-count.js → esm/history/actions/reconcile-count.d.ts} +14 -16
  211. package/dist/esm/history/actions/reconcile-count.js +5 -0
  212. package/dist/{history/chat-message-history.js → esm/history/chat-message-history.d.ts} +76 -87
  213. package/dist/esm/history/chat-message-history.js +57 -0
  214. package/dist/esm/history/internal/append.d.ts +244 -0
  215. package/dist/esm/history/internal/append.js +259 -0
  216. package/dist/esm/history/internal/message-read.d.ts +84 -0
  217. package/dist/esm/history/internal/message-read.js +89 -0
  218. package/dist/esm/history/internal/parse.d.ts +153 -0
  219. package/dist/esm/history/internal/parse.js +105 -0
  220. package/dist/{history/internal/rows.js → esm/history/internal/rows.d.ts} +58 -112
  221. package/dist/esm/history/internal/rows.js +83 -0
  222. package/dist/esm/history/internal/session.d.ts +350 -0
  223. package/dist/esm/history/internal/session.js +285 -0
  224. package/dist/esm/history/internal/setup.d.ts +64 -0
  225. package/dist/esm/history/internal/setup.js +56 -0
  226. package/dist/{history/session-adapter.js → esm/history/session-adapter.d.ts} +25 -39
  227. package/dist/esm/history/session-adapter.js +34 -0
  228. package/dist/esm/history/types.d.ts +102 -0
  229. package/dist/esm/history/types.js +1 -0
  230. package/dist/esm/index.d.ts +53 -0
  231. package/dist/esm/index.js +10 -0
  232. package/dist/esm/shared/adapter.d.ts +146 -0
  233. package/dist/esm/shared/adapter.js +65 -0
  234. package/dist/{shared/clock.js → esm/shared/clock.d.ts} +3 -14
  235. package/dist/esm/shared/clock.js +9 -0
  236. package/dist/esm/shared/codec/codec.d.ts +336 -0
  237. package/dist/esm/shared/codec/codec.js +150 -0
  238. package/dist/esm/shared/codec/compression.d.ts +66 -0
  239. package/dist/esm/shared/codec/compression.js +40 -0
  240. package/dist/esm/shared/codec/json-serde.d.ts +80 -0
  241. package/dist/esm/shared/codec/json-serde.js +54 -0
  242. package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
  243. package/dist/esm/shared/codec/s3/client-types.js +3 -0
  244. package/dist/esm/shared/codec/s3/client.d.ts +63 -0
  245. package/dist/esm/shared/codec/s3/client.js +40 -0
  246. package/dist/{shared/codec/s3/config.js → esm/shared/codec/s3/config.d.ts} +45 -93
  247. package/dist/esm/shared/codec/s3/config.js +79 -0
  248. package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
  249. package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
  250. package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
  251. package/dist/esm/shared/codec/s3/offloader.js +278 -0
  252. package/dist/{shared/concurrency.js → esm/shared/concurrency.d.ts} +2 -37
  253. package/dist/esm/shared/concurrency.js +27 -0
  254. package/dist/{shared/dynamodb/abort.js → esm/shared/dynamodb/abort.d.ts} +4 -16
  255. package/dist/esm/shared/dynamodb/abort.js +12 -0
  256. package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
  257. package/dist/esm/shared/dynamodb/batch-write.js +74 -0
  258. package/dist/{shared/dynamodb/cancellation.js → esm/shared/dynamodb/cancellation.d.ts} +25 -53
  259. package/dist/esm/shared/dynamodb/cancellation.js +30 -0
  260. package/dist/{shared/dynamodb/client.js → esm/shared/dynamodb/client.d.ts} +74 -64
  261. package/dist/esm/shared/dynamodb/client.js +35 -0
  262. package/dist/{shared/dynamodb/idempotent-write.js → esm/shared/dynamodb/idempotent-write.d.ts} +172 -169
  263. package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
  264. package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
  265. package/dist/esm/shared/dynamodb/paginate.js +84 -0
  266. package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
  267. package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
  268. package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
  269. package/dist/esm/shared/dynamodb/recency-index.js +136 -0
  270. package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
  271. package/dist/esm/shared/dynamodb/retry.js +180 -0
  272. package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
  273. package/dist/esm/shared/dynamodb/row-size.js +26 -0
  274. package/dist/{shared/dynamodb/table-schema.js → esm/shared/dynamodb/table-schema.d.ts} +57 -67
  275. package/dist/esm/shared/dynamodb/table-schema.js +43 -0
  276. package/dist/esm/shared/errors/base-error.d.ts +231 -0
  277. package/dist/esm/shared/errors/base-error.js +64 -0
  278. package/dist/esm/shared/errors/boundary.d.ts +86 -0
  279. package/dist/esm/shared/errors/boundary.js +54 -0
  280. package/dist/esm/shared/errors/classify.d.ts +206 -0
  281. package/dist/esm/shared/errors/classify.js +220 -0
  282. package/dist/{shared/errors/error-code.js → esm/shared/errors/error-code.d.ts} +39 -43
  283. package/dist/esm/shared/errors/error-code.js +24 -0
  284. package/dist/{shared/errors/errors.js → esm/shared/errors/errors.d.ts} +92 -98
  285. package/dist/esm/shared/errors/errors.js +110 -0
  286. package/dist/{shared/logging/logger.js → esm/shared/logging/logger.d.ts} +22 -52
  287. package/dist/esm/shared/logging/logger.js +25 -0
  288. package/dist/esm/shared/logging/redaction.d.ts +123 -0
  289. package/dist/esm/shared/logging/redaction.js +140 -0
  290. package/dist/{shared/logging/secret-patterns.js → esm/shared/logging/secret-patterns.d.ts} +46 -87
  291. package/dist/esm/shared/logging/secret-patterns.js +83 -0
  292. package/dist/{shared/logging/truncate.js → esm/shared/logging/truncate.d.ts} +6 -40
  293. package/dist/esm/shared/logging/truncate.js +25 -0
  294. package/dist/esm/shared/options.d.ts +100 -0
  295. package/dist/esm/shared/options.js +1 -0
  296. package/dist/{shared/ulid.js → esm/shared/ulid.d.ts} +4 -84
  297. package/dist/esm/shared/ulid.js +77 -0
  298. package/dist/{shared/validation/collaborators.js → esm/shared/validation/collaborators.d.ts} +37 -65
  299. package/dist/esm/shared/validation/collaborators.js +70 -0
  300. package/dist/{shared/validation/option-shape.js → esm/shared/validation/option-shape.d.ts} +14 -36
  301. package/dist/esm/shared/validation/option-shape.js +24 -0
  302. package/dist/esm/shared/validation/options.d.ts +145 -0
  303. package/dist/esm/shared/validation/options.js +156 -0
  304. package/dist/{shared/validation/primitives.js → esm/shared/validation/primitives.d.ts} +30 -125
  305. package/dist/esm/shared/validation/primitives.js +100 -0
  306. package/dist/esm/shared/validation/ttl.d.ts +94 -0
  307. package/dist/esm/shared/validation/ttl.js +46 -0
  308. package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
  309. package/dist/esm/store/actions/list-namespaces.js +86 -0
  310. package/dist/esm/store/actions/put.d.ts +43 -0
  311. package/dist/esm/store/actions/put.js +46 -0
  312. package/dist/{store/actions/reconcile-vector-index.js → esm/store/actions/reconcile-vector-index.d.ts} +8 -16
  313. package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
  314. package/dist/esm/store/actions/search.d.ts +38 -0
  315. package/dist/esm/store/actions/search.js +23 -0
  316. package/dist/esm/store/internal/batch-plan.d.ts +56 -0
  317. package/dist/esm/store/internal/batch-plan.js +28 -0
  318. package/dist/esm/store/internal/filter.d.ts +43 -0
  319. package/dist/esm/store/internal/filter.js +60 -0
  320. package/dist/esm/store/internal/get-item.d.ts +77 -0
  321. package/dist/esm/store/internal/get-item.js +54 -0
  322. package/dist/esm/store/internal/item-write.d.ts +270 -0
  323. package/dist/esm/store/internal/item-write.js +173 -0
  324. package/dist/esm/store/internal/parse.d.ts +230 -0
  325. package/dist/esm/store/internal/parse.js +169 -0
  326. package/dist/{store/internal/rows.js → esm/store/internal/rows.d.ts} +111 -199
  327. package/dist/esm/store/internal/rows.js +147 -0
  328. package/dist/esm/store/internal/semantic-search.d.ts +168 -0
  329. package/dist/esm/store/internal/semantic-search.js +200 -0
  330. package/dist/esm/store/internal/setup.d.ts +96 -0
  331. package/dist/esm/store/internal/setup.js +98 -0
  332. package/dist/esm/store/internal/table-search.d.ts +100 -0
  333. package/dist/esm/store/internal/table-search.js +119 -0
  334. package/dist/esm/store/internal/vector-index.d.ts +258 -0
  335. package/dist/esm/store/internal/vector-index.js +256 -0
  336. package/dist/{store/store.js → esm/store/store.d.ts} +99 -133
  337. package/dist/esm/store/store.js +93 -0
  338. package/dist/esm/store/types.d.ts +111 -0
  339. package/dist/esm/store/types.js +1 -0
  340. package/dist/esm/store/vector-backend.d.ts +104 -0
  341. package/dist/esm/store/vector-backend.js +1 -0
  342. package/package.json +50 -44
  343. package/dist/backfill/backfill.js +0 -393
  344. package/dist/checkpointer/actions/list.js +0 -142
  345. package/dist/checkpointer/actions/put.js +0 -195
  346. package/dist/checkpointer/internal/delta-history.js +0 -252
  347. package/dist/checkpointer/internal/parse.js +0 -372
  348. package/dist/checkpointer/internal/pending-writes.js +0 -588
  349. package/dist/checkpointer/internal/read.js +0 -264
  350. package/dist/checkpointer/internal/rows.js +0 -834
  351. package/dist/checkpointer/internal/setup.js +0 -72
  352. package/dist/checkpointer/types.js +0 -12
  353. package/dist/factory/factory.js +0 -266
  354. package/dist/factory/types.js +0 -10
  355. package/dist/history/actions/get-messages.js +0 -141
  356. package/dist/history/actions/list-sessions.js +0 -156
  357. package/dist/history/internal/append.js +0 -500
  358. package/dist/history/internal/message-read.js +0 -204
  359. package/dist/history/internal/parse.js +0 -252
  360. package/dist/history/internal/session.js +0 -628
  361. package/dist/history/internal/setup.js +0 -106
  362. package/dist/history/types.js +0 -12
  363. package/dist/index.js +0 -51
  364. package/dist/shared/adapter.js +0 -143
  365. package/dist/shared/codec/codec.js +0 -441
  366. package/dist/shared/codec/compression.js +0 -89
  367. package/dist/shared/codec/json-serde.js +0 -191
  368. package/dist/shared/codec/s3/client-types.js +0 -26
  369. package/dist/shared/codec/s3/client.js +0 -97
  370. package/dist/shared/codec/s3/lifecycle.js +0 -355
  371. package/dist/shared/codec/s3/offloader.js +0 -658
  372. package/dist/shared/dynamodb/batch-write.js +0 -173
  373. package/dist/shared/dynamodb/paginate.js +0 -188
  374. package/dist/shared/dynamodb/partition-delete.js +0 -340
  375. package/dist/shared/dynamodb/recency-index.js +0 -377
  376. package/dist/shared/dynamodb/retry.js +0 -463
  377. package/dist/shared/errors/base-error.js +0 -174
  378. package/dist/shared/errors/boundary.js +0 -143
  379. package/dist/shared/errors/classify.d.ts +0 -97
  380. package/dist/shared/errors/classify.js +0 -257
  381. package/dist/shared/logging/redaction.js +0 -316
  382. package/dist/shared/options.js +0 -11
  383. package/dist/shared/validation/options.js +0 -328
  384. package/dist/shared/validation/ttl.js +0 -132
  385. package/dist/store/actions/list-namespaces.js +0 -197
  386. package/dist/store/actions/put.js +0 -78
  387. package/dist/store/actions/search.js +0 -66
  388. package/dist/store/internal/batch-plan.d.ts +0 -26
  389. package/dist/store/internal/batch-plan.js +0 -109
  390. package/dist/store/internal/filter.js +0 -137
  391. package/dist/store/internal/get-item.d.ts +0 -45
  392. package/dist/store/internal/get-item.js +0 -115
  393. package/dist/store/internal/item-write.js +0 -463
  394. package/dist/store/internal/parse.js +0 -350
  395. package/dist/store/internal/semantic-search.js +0 -389
  396. package/dist/store/internal/setup.js +0 -223
  397. package/dist/store/internal/table-search.js +0 -213
  398. package/dist/store/internal/vector-index.js +0 -546
  399. package/dist/store/types.js +0 -15
  400. package/dist/store/vector-backend.js +0 -17
  401. /package/dist/{shared → cjs/shared}/clock.d.ts +0 -0
  402. /package/dist/{shared → cjs/shared}/codec/json-serde.d.ts +0 -0
  403. /package/dist/{shared → cjs/shared}/concurrency.d.ts +0 -0
  404. /package/dist/{shared → cjs/shared}/dynamodb/cancellation.d.ts +0 -0
  405. /package/dist/{shared → cjs/shared}/logging/logger.d.ts +0 -0
  406. /package/dist/{shared → cjs/shared}/logging/truncate.d.ts +0 -0
  407. /package/dist/{shared → cjs/shared}/ulid.d.ts +0 -0
  408. /package/dist/{shared → cjs/shared}/validation/primitives.d.ts +0 -0
  409. /package/dist/{store → cjs/store}/vector-backend.d.ts +0 -0
@@ -4,14 +4,15 @@
4
4
  * A delta channel stores a full value only every `snapshotFrequency` updates,
5
5
  * so its value at a checkpoint is its last snapshot plus the writes since,
6
6
  * collected by walking parent pointers. The walk, the order the writes are
7
- * collected in, and the one read that tells an expired ancestor (a hole to
8
- * report) from one that never existed (the history's true start) are decided
9
- * here.
7
+ * collected in, and what a pointer the walk cannot follow means — a hole to
8
+ * report, whether its row is still stored past its ttl or already swept, and
9
+ * never the history's true start, which is a checkpoint with no pointer at all
10
+ * — are decided here.
10
11
  */
11
12
  import type { RunnableConfig } from '@langchain/core/runnables';
12
13
  import type { CheckpointTuple, DeltaChannelHistory } from '@langchain/langgraph-checkpoint';
13
- import { DynamoDBLangGraphError } from '../../shared/errors/base-error';
14
- import type { CheckpointerContext } from './setup';
14
+ import { DynamoDBLangGraphError } from '../../shared/errors/base-error.js';
15
+ import type { CheckpointerContext } from './setup.js';
15
16
  /**
16
17
  * Walk a checkpoint's ancestors for the delta channels named, accumulating
17
18
  * their writes oldest-first and the nearest stored value of each.
@@ -37,33 +38,43 @@ import type { CheckpointerContext } from './setup';
37
38
  * consumer's cue to start from its initial value — correctly, because there is
38
39
  * nothing to lose.
39
40
  *
40
- * Throws: `ANCESTOR_EXPIRED` when an ancestor a channel still needs exists but
41
- * has expired ({@link ancestorExpired}). An ancestor that was never written
42
- * still ends the walk quietly — that is an ordinary root. `ABORTED` when the
43
- * signal fires, at whichever hop it fires on, and in preference to a diagnosis
44
- * of the stop: a walk cancelled just as it reached an expired ancestor reports
45
- * the cancel, since the caller stopped waiting for the answer either way.
41
+ * Throws: `ANCESTOR_EXPIRED` when a channel still needs an ancestor the walk
42
+ * cannot read — its row stored but past its ttl, or already removed by the
43
+ * sweep — or when the chain points back to a checkpoint already read
44
+ * ({@link ancestorExpired}). A checkpoint with no parent pointer ends the walk
45
+ * quietly — that is a thread's true start. `ABORTED` when the signal fires,
46
+ * at whichever hop it fires on, and in preference to a diagnosis of the stop:
47
+ * a walk cancelled just as it reached an expired ancestor reports the cancel,
48
+ * since the caller stopped waiting for the answer either way.
46
49
  *
47
50
  * Guarantees: the walk stops at the first ancestor that answers for every
48
51
  * channel, so a deep thread costs reads only as far back as the nearest
49
52
  * snapshot.
50
53
  */
51
54
  export declare function deltaChannelHistory(context: CheckpointerContext, getTuple: (config: RunnableConfig) => Promise<CheckpointTuple | undefined>, config: RunnableConfig, channels: string[]): Promise<Record<string, DeltaChannelHistory>>;
52
- /** Where an ancestor walk stopped, and whether that stop is a hole in the thread. */
55
+ /** Where an ancestor walk stopped, and what kind of hole in the thread it found there. */
53
56
  export interface WalkStop {
54
57
  threadId: string;
55
58
  checkpointId: string;
56
- /** True when the row is still stored but past its `ttl`, rather than never written. */
57
- expired: boolean;
59
+ /**
60
+ * `'expired'` — the row is still stored, past its `ttl`; `'gone'` — no row at
61
+ * all, the sweep having removed it (or something else having deleted it);
62
+ * `'revisited'` — the chain pointed back to a checkpoint already read.
63
+ */
64
+ stop: 'expired' | 'gone' | 'revisited';
58
65
  }
59
66
  /**
60
67
  * Read the META row an ancestor walk could not follow, **ignoring expiry**, to
61
- * tell "this checkpoint was never written" apart from "it expired out from
62
- * under its own descendants".
68
+ * tell "this checkpoint is still stored but has expired" apart from "it is
69
+ * gone" — the sweep has removed it, which every expired row becomes within
70
+ * days. Both are holes; the read decides only what the error says.
63
71
  *
64
- * Every other read in this package treats an expired row as absent, which is
65
- * the right rule for a reader asking for state. Here the distinction is the
66
- * whole point: one is an ordinary root, the other is data loss.
72
+ * Every other read in this package hides an expired row, which is the right
73
+ * rule for a reader asking for state: checkpoint META, store and history rows
74
+ * by their own ttl, and a checkpoint's PAYLOAD and pending-WRITE rows by their
75
+ * checkpoint's META row, which is the only one checked (a pre-v4 checkpoint's
76
+ * migration is the exception: it reads its parent's pending writes under the
77
+ * child's META row). Here the row is wanted expired or not.
67
78
  *
68
79
  * Accepts: `config` — the parent pointer a walk stopped at. `config.signal` —
69
80
  * cancels the read, and is read before it is sent. The walk re-attaches the
@@ -71,7 +82,7 @@ export interface WalkStop {
71
82
  * place every other reader in this package takes it, rather than from a
72
83
  * parameter of its own.
73
84
  *
74
- * Returns: whether that checkpoint exists and whether it has expired, or
85
+ * Returns: whether that checkpoint is still stored and expired, or gone, or
75
86
  * `undefined` when the config names no thread or no checkpoint — such a pointer
76
87
  * addresses nothing that could have expired, so the walk has simply run out of
77
88
  * chain.
@@ -82,17 +93,18 @@ export interface WalkStop {
82
93
  * longer waiting to be told why the walk ended.
83
94
  *
84
95
  * Guarantees: the read ignores the ttl, deliberately. Every other read in this
85
- * package treats an expired row as absent, which is the right rule for a reader
86
- * asking for state; here the distinction is the whole point, because one answer
87
- * is an ordinary root and the other is data loss.
96
+ * package hides an expired row by the rule above — META, store and history rows
97
+ * by their own ttl, PAYLOAD and WRITE rows by their checkpoint's META row, with
98
+ * the pre-v4 migration the exception — which is right for a reader asking for
99
+ * state; here an expired row is the evidence the error names.
88
100
  */
89
101
  export declare function probeAncestor(context: CheckpointerContext, config: RunnableConfig): Promise<WalkStop | undefined>;
90
102
  /**
91
103
  * The error a read raises when a delta channel's history has a hole in it.
92
104
  *
93
- * Accepts: `stop` — the expired ancestor the walk reached. `channels` — the
94
- * delta channels that still needed it, named in the message so the operator
95
- * knows what was lost.
105
+ * Accepts: `stop` — the ancestor the walk could not follow, and why. `channels`
106
+ * — the delta channels that still needed it, named in the message so the
107
+ * operator knows what was lost.
96
108
  *
97
109
  * Returns: the error, coded `ANCESTOR_EXPIRED` and carrying the thread and
98
110
  * checkpoint. The message bounds all three: after the first hop the walk's
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deltaChannelHistory = deltaChannelHistory;
4
+ exports.probeAncestor = probeAncestor;
5
+ exports.ancestorExpired = ancestorExpired;
6
+ const clock_js_1 = require("../../shared/clock.js");
7
+ const retry_js_1 = require("../../shared/dynamodb/retry.js");
8
+ const table_schema_js_1 = require("../../shared/dynamodb/table-schema.js");
9
+ const base_error_js_1 = require("../../shared/errors/base-error.js");
10
+ const error_code_js_1 = require("../../shared/errors/error-code.js");
11
+ const truncate_js_1 = require("../../shared/logging/truncate.js");
12
+ const rows_js_1 = require("./rows.js");
13
+ function startWalk(channels) {
14
+ const writes = {};
15
+ for (const channel of channels)
16
+ writes[channel] = [];
17
+ return { remaining: new Set(channels), writes, seeds: {}, visited: new Set() };
18
+ }
19
+ function collectWrites(tuple, walk) {
20
+ const perChannel = {};
21
+ for (const write of tuple.pendingWrites ?? []) {
22
+ const channel = write[1];
23
+ if (walk.remaining.has(channel))
24
+ (perChannel[channel] ??= []).push(write);
25
+ }
26
+ for (const channel of Object.keys(perChannel)) {
27
+ const block = perChannel[channel];
28
+ for (let i = block.length - 1; i >= 0; i -= 1)
29
+ walk.writes[channel].push(block[i]);
30
+ }
31
+ }
32
+ function takeSeeds(tuple, walk) {
33
+ for (const channel of [...walk.remaining]) {
34
+ if (Object.prototype.hasOwnProperty.call(tuple.checkpoint.channel_values, channel)) {
35
+ walk.seeds[channel] = tuple.checkpoint.channel_values[channel];
36
+ walk.remaining.delete(channel);
37
+ }
38
+ }
39
+ }
40
+ function cursorFor(parent, signal) {
41
+ if (parent === undefined || signal === undefined)
42
+ return parent;
43
+ return { ...parent, signal };
44
+ }
45
+ async function walkAncestors(context, getTuple, walk, from) {
46
+ let cursor = cursorFor(from.start, from.signal);
47
+ while (cursor !== undefined && walk.remaining.size > 0) {
48
+ const revisit = revisitOf(cursor, walk);
49
+ if (revisit !== undefined)
50
+ throw ancestorExpired(revisit, [...walk.remaining]);
51
+ const tuple = await getTuple(cursor);
52
+ if (tuple === undefined) {
53
+ const stop = await probeAncestor(context, cursor);
54
+ if (stop === undefined)
55
+ return;
56
+ throw ancestorExpired(stop, [...walk.remaining]);
57
+ }
58
+ collectWrites(tuple, walk);
59
+ takeSeeds(tuple, walk);
60
+ cursor = cursorFor(tuple.parentConfig, from.signal);
61
+ }
62
+ }
63
+ function revisitOf(cursor, walk) {
64
+ const ids = cursor.configurable;
65
+ const threadId = ids?.thread_id;
66
+ const checkpointId = ids?.checkpoint_id;
67
+ if (typeof threadId !== 'string' || typeof checkpointId !== 'string')
68
+ return undefined;
69
+ const key = `${ids?.checkpoint_ns ?? ''}#${checkpointId}`;
70
+ if (walk.visited.has(key))
71
+ return { threadId, checkpointId, stop: 'revisited' };
72
+ walk.visited.add(key);
73
+ return undefined;
74
+ }
75
+ function historyOf(walk, channel) {
76
+ const writes = walk.writes[channel].slice().reverse();
77
+ return Object.prototype.hasOwnProperty.call(walk.seeds, channel)
78
+ ? { writes, seed: walk.seeds[channel] }
79
+ : { writes };
80
+ }
81
+ async function deltaChannelHistory(context, getTuple, config, channels) {
82
+ if (channels.length === 0)
83
+ return {};
84
+ const walk = startWalk(channels);
85
+ const target = await getTuple(config);
86
+ await walkAncestors(context, getTuple, walk, {
87
+ start: target?.parentConfig,
88
+ signal: config.signal,
89
+ });
90
+ const result = {};
91
+ for (const channel of channels)
92
+ result[channel] = historyOf(walk, channel);
93
+ return result;
94
+ }
95
+ async function probeAncestor(context, config) {
96
+ const ids = config.configurable;
97
+ const threadId = ids?.thread_id;
98
+ const checkpointId = ids?.checkpoint_id;
99
+ if (typeof threadId !== 'string' || typeof checkpointId !== 'string')
100
+ return undefined;
101
+ const checkpointNs = ids?.checkpoint_ns ?? '';
102
+ const result = await (0, retry_js_1.withDynamoDBRetry)((request) => context.client.get({
103
+ TableName: context.tableName,
104
+ Key: (0, rows_js_1.metaRowKey)({ threadId, checkpointNs, checkpointId }),
105
+ ConsistentRead: true,
106
+ }, request), (0, retry_js_1.retryFor)(context, config.signal));
107
+ const row = result.Item;
108
+ return {
109
+ threadId,
110
+ checkpointId,
111
+ stop: row !== undefined && (0, table_schema_js_1.isExpiredRow)(row, (0, clock_js_1.nowSeconds)()) ? 'expired' : 'gone',
112
+ };
113
+ }
114
+ function ancestorExpired(stop, channels) {
115
+ const named = (0, truncate_js_1.truncateLabelsForLog)(channels)
116
+ .map((channel) => `"${channel}"`)
117
+ .join(', ');
118
+ const what = stop.stop === 'expired'
119
+ ? 'has expired'
120
+ : stop.stop === 'gone'
121
+ ? 'is gone (expired and removed by DynamoDB, or deleted)'
122
+ : 'is named as its own ancestor, so the chain never reaches a stored value';
123
+ return new base_error_js_1.DynamoDBLangGraphError(`checkpoint "${(0, truncate_js_1.truncateForLog)(stop.checkpointId)}" of thread ` +
124
+ `"${(0, truncate_js_1.truncateForLog)(stop.threadId)}" ${what}, but later ` +
125
+ `checkpoints still need it to reconstruct ${named}. ` +
126
+ 'A delta channel writes a full snapshot only every `snapshotFrequency` updates and leaves ' +
127
+ 'itself out of the checkpoints in between, so its value is rebuilt from an earlier ' +
128
+ 'ancestor — which a per-checkpoint ttl expires while its descendants live on. Lower ' +
129
+ '`snapshotFrequency` (1 makes every checkpoint self-contained), or do not configure a ttl ' +
130
+ 'on threads that use delta channels.', error_code_js_1.ErrorCode.ANCESTOR_EXPIRED, { threadId: stop.threadId, checkpointId: stop.checkpointId });
131
+ }
@@ -9,10 +9,10 @@
9
9
  */
10
10
  import type { QueryCommandInput, ScanCommandInput } from '@aws-sdk/lib-dynamodb';
11
11
  import type { CheckpointMetadata } from '@langchain/langgraph-checkpoint';
12
- import type { AttributeMap } from '../../shared/dynamodb/client';
13
- import type { FilterValue, ListScope, ThreadId } from './parse';
14
- import { type CheckpointMetaRow } from './rows';
15
- import type { CheckpointerContext } from './setup';
12
+ import type { AttributeMap } from '../../shared/dynamodb/client.js';
13
+ import type { FilterValue, ListScope, ThreadId } from './parse.js';
14
+ import { type CheckpointMetaRow } from './rows.js';
15
+ import type { CheckpointerContext } from './setup.js';
16
16
  /**
17
17
  * The META query for a scope that names a thread.
18
18
  *
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listQuery = listQuery;
4
+ exports.listScan = listScan;
5
+ exports.passesKeyFilters = passesKeyFilters;
6
+ exports.passesMetadataFilter = passesMetadataFilter;
7
+ exports.metaRows = metaRows;
8
+ exports.parseListedRow = parseListedRow;
9
+ exports.matchesFilter = matchesFilter;
10
+ const node_util_1 = require("node:util");
11
+ const concurrency_js_1 = require("../../shared/concurrency.js");
12
+ const paginate_js_1 = require("../../shared/dynamodb/paginate.js");
13
+ const recency_index_js_1 = require("../../shared/dynamodb/recency-index.js");
14
+ const retry_js_1 = require("../../shared/dynamodb/retry.js");
15
+ const table_schema_js_1 = require("../../shared/dynamodb/table-schema.js");
16
+ const truncate_js_1 = require("../../shared/logging/truncate.js");
17
+ const rows_js_1 = require("./rows.js");
18
+ function listQuery(context, scope) {
19
+ const partition = (0, rows_js_1.partitionKey)(scope.threadId);
20
+ const limit = scope.filter === undefined ? scope.limit : undefined;
21
+ if (scope.checkpointNs === undefined) {
22
+ return (0, rows_js_1.beginsWithQuery)(context.tableName, partition, (0, rows_js_1.metaAnyNamespacePrefix)(), { limit });
23
+ }
24
+ return (0, rows_js_1.beginsWithQuery)(context.tableName, partition, (0, rows_js_1.metaSortKeyPrefix)(scope.checkpointNs), {
25
+ limit,
26
+ beforeSortKey: scope.before === undefined ? undefined : (0, rows_js_1.metaSortKey)(scope.checkpointNs, scope.before),
27
+ });
28
+ }
29
+ function listScan(context, scope) {
30
+ return {
31
+ TableName: context.tableName,
32
+ FilterExpression: 'begins_with(#pk, :pk) AND begins_with(#sk, :sk)',
33
+ ExpressionAttributeNames: { '#pk': table_schema_js_1.PARTITION_KEY_ATTRIBUTE, '#sk': table_schema_js_1.SORT_KEY_ATTRIBUTE },
34
+ ExpressionAttributeValues: {
35
+ ':pk': (0, rows_js_1.checkpointerPartitionPrefix)(),
36
+ ':sk': scope.checkpointNs === undefined
37
+ ? (0, rows_js_1.metaAnyNamespacePrefix)()
38
+ : (0, rows_js_1.metaSortKeyPrefix)(scope.checkpointNs),
39
+ },
40
+ };
41
+ }
42
+ function passesKeyFilters(meta, scope) {
43
+ return ((scope.before === undefined || (0, table_schema_js_1.compareSortKeys)(meta.checkpointId, scope.before) < 0) &&
44
+ (scope.checkpointNs === undefined || meta.checkpointNs === scope.checkpointNs) &&
45
+ (scope.checkpointId === undefined || meta.checkpointId === scope.checkpointId));
46
+ }
47
+ async function passesMetadataFilter(context, meta, scope) {
48
+ if (!scope.filter)
49
+ return { pass: true };
50
+ const metadata = await (0, rows_js_1.readMetadata)(context, meta, meta.threadId, scope.signal);
51
+ return matchesFilter(metadata, scope.filter) ? { pass: true, metadata } : { pass: false };
52
+ }
53
+ function threadlessRows(context, scope, now) {
54
+ if (context.indexName === undefined) {
55
+ return (0, paginate_js_1.paginateScan)({
56
+ retry: (0, retry_js_1.retryFor)(context, scope.signal),
57
+ signal: scope.signal,
58
+ client: context.client,
59
+ params: (0, table_schema_js_1.withoutExpired)(listScan(context, scope), now),
60
+ maxItems: Number.POSITIVE_INFINITY,
61
+ maxIterations: Number.POSITIVE_INFINITY,
62
+ });
63
+ }
64
+ return (0, recency_index_js_1.iterateRecencyIndex)({
65
+ client: context.client,
66
+ tableName: context.tableName,
67
+ indexName: context.indexName,
68
+ tag: 'CHKPT',
69
+ shards: context.indexShards ?? recency_index_js_1.DEFAULT_INDEX_SHARDS,
70
+ concurrency: context.readConcurrency ?? concurrency_js_1.DEFAULT_READ_CONCURRENCY,
71
+ retry: (0, retry_js_1.retryFor)(context, scope.signal),
72
+ signal: scope.signal,
73
+ });
74
+ }
75
+ function metaRows(context, scope, now) {
76
+ const retry = (0, retry_js_1.retryFor)(context, scope.signal);
77
+ const bounds = { maxItems: Number.POSITIVE_INFINITY, maxIterations: Number.POSITIVE_INFINITY };
78
+ return scope.threadId === undefined
79
+ ? threadlessRows(context, scope, now)
80
+ : (0, paginate_js_1.paginateQuery)({
81
+ retry,
82
+ signal: scope.signal,
83
+ client: context.client,
84
+ params: (0, table_schema_js_1.withoutExpired)(listQuery(context, { ...scope, threadId: scope.threadId }), now),
85
+ ...bounds,
86
+ });
87
+ }
88
+ function parseListedRow(context, raw) {
89
+ const meta = (0, rows_js_1.parseMetaRow)(raw);
90
+ if (!meta) {
91
+ context.logger.warn('list: skipped a row that is not a checkpoint meta item', {
92
+ sortKey: (0, truncate_js_1.truncateForLog)(raw.SK),
93
+ });
94
+ }
95
+ return meta;
96
+ }
97
+ function ownValue(metadata, key) {
98
+ if (metadata === null || typeof metadata !== 'object')
99
+ return undefined;
100
+ return Object.hasOwn(metadata, key) ? metadata[key] : undefined;
101
+ }
102
+ function matchesFilter(metadata, filter) {
103
+ return Object.entries(filter).every(([key, value]) => (0, node_util_1.isDeepStrictEqual)(ownValue(metadata, key), value));
104
+ }
@@ -10,13 +10,14 @@
10
10
  */
11
11
  import type { RunnableConfig } from '@langchain/core/runnables';
12
12
  import type { Checkpoint, CheckpointListOptions, CheckpointMetadata, PendingWrite } from '@langchain/langgraph-checkpoint';
13
- import { type PageLimit } from '../../shared/validation/primitives';
14
- import type { DeltaChannelHistoryOptions } from '../types';
13
+ import { type PageLimit } from '../../shared/validation/primitives.js';
14
+ import type { DeltaChannelHistoryOptions } from '../types.js';
15
15
  declare const threadIdBrand: unique symbol;
16
16
  declare const checkpointNsBrand: unique symbol;
17
17
  declare const checkpointIdBrand: unique symbol;
18
18
  declare const taskIdBrand: unique symbol;
19
19
  declare const writeChannelBrand: unique symbol;
20
+ declare const taskPathBrand: unique symbol;
20
21
  /**
21
22
  * A thread id checked as the partition key it becomes. {@link parseThreadId}
22
23
  * is the only way to obtain one, so a function that asks for a `ThreadId`
@@ -42,6 +43,10 @@ export type TaskId = string & {
42
43
  export type WriteChannel = string & {
43
44
  readonly [writeChannelBrand]: true;
44
45
  };
46
+ /** The serialized path of the task that made a write, as LangGraph 1.5 hands it to `putWrites`; see {@link parseTaskPath}. */
47
+ export type TaskPath = string & {
48
+ readonly [taskPathBrand]: true;
49
+ };
45
50
  /**
46
51
  * Parse a thread id.
47
52
  *
@@ -57,7 +62,8 @@ export declare function parseThreadId(value: unknown): ThreadId;
57
62
  * Parse a checkpoint namespace.
58
63
  *
59
64
  * Accepts: `value` — anything; `''` is legal, because it *is* the root
60
- * namespace, and every other identifier rule applies (see `parseKeySegment`).
65
+ * namespace, and every other identifier rule applies (see `parseKeySegment`),
66
+ * at most {@link MAX_CHECKPOINT_NS_BYTES} bytes of UTF-8.
61
67
  *
62
68
  * Returns: `value` as a {@link CheckpointNs}.
63
69
  *
@@ -92,13 +98,34 @@ export declare function parseTaskId(value: unknown): TaskId;
92
98
  * Parse a pending write's channel, the trailing segment of its WRITE sort key.
93
99
  *
94
100
  * Accepts: `value` — anything; LangGraph's own channel names never contain the
95
- * reserved separator.
101
+ * reserved separator. The cap is {@link MAX_WRITE_CHANNEL_BYTES}, wider than
102
+ * the other segments' because a fan-in's channel is named after every source
103
+ * node; the composed sort key is checked against DynamoDB's cap separately.
96
104
  *
97
105
  * Returns: `value` as a {@link WriteChannel}.
98
106
  *
99
107
  * Throws: `VALIDATION` naming `channel`.
100
108
  */
101
109
  export declare function parseWriteChannel(value: unknown): WriteChannel;
110
+ /**
111
+ * Parse the task path a `putWrites` call carries.
112
+ *
113
+ * LangGraph 1.5 (`@langchain/langgraph-checkpoint@1.2.0`) hands `putWrites`
114
+ * the serialized path of the task that made the writes — `~pull, <node>`,
115
+ * `~push, 0000000003, …` — as a fourth argument, and reads a checkpoint's
116
+ * writes back ordered by it first (`writesSortKey`: path, then task id, then
117
+ * index). It is stored as given and never keyed on, so it has no byte cap
118
+ * and no separator rule: it leads a sort, not a sort key.
119
+ *
120
+ * Accepts: `value` — a string, the empty string included (a write made by
121
+ * no task); `undefined` for a call that carries none, which every LangGraph
122
+ * before 1.5 makes.
123
+ *
124
+ * Returns: `value` as a {@link TaskPath}, or `undefined` when none was given.
125
+ *
126
+ * Throws: `VALIDATION` naming `taskPath` for any other value.
127
+ */
128
+ export declare function parseTaskPath(value: unknown): TaskPath | undefined;
102
129
  /** The root namespace, which a config that names none addresses. */
103
130
  export declare const ROOT_NAMESPACE: CheckpointNs;
104
131
  /** A thread, a namespace in it, and possibly one checkpoint — "the newest" when unset. */
@@ -180,6 +207,8 @@ export declare function parsePutRequest(config: RunnableConfig, checkpoint: Chec
180
207
  export interface PutWritesRequest {
181
208
  readonly address: CheckpointAddress;
182
209
  readonly taskId: TaskId;
210
+ /** The task's serialized path, when the call carried one; see {@link parseTaskPath}. */
211
+ readonly taskPath: TaskPath | undefined;
183
212
  /** A copy of the caller's writes, each reduced to its channel and value. */
184
213
  readonly writes: PendingWrite<WriteChannel>[];
185
214
  readonly signal: AbortSignal | undefined;
@@ -191,18 +220,19 @@ export interface PutWritesRequest {
191
220
  * checkpoint, since writes attach to one. `writes` — an array of
192
221
  * `[channel, value]` arrays; the value, and any element past the second, are
193
222
  * unconstrained, as upstream's type places no rule on them. `taskId` — parsed
194
- * as the key segment it becomes.
223
+ * as the key segment it becomes. `taskPath` — as {@link parseTaskPath}; absent
224
+ * from a LangGraph before 1.5.
195
225
  *
196
226
  * Returns: the request, with a fresh array of fresh tuples, so a caller
197
227
  * changing its own array while the call awaits changes nothing that was
198
228
  * checked.
199
229
  *
200
230
  * Throws: `VALIDATION`, before anything is encoded or uploaded, in this order:
201
- * `taskId`; as {@link parseThreadConfig}; `checkpoint_id` when the config names
231
+ * `taskId`; `taskPath`; as {@link parseThreadConfig}; `checkpoint_id` when the config names
202
232
  * none; `writes` for a non-array or an entry that is not one; `channel` for any
203
233
  * malformed channel; `sortKey` for any write whose composed key passes the cap.
204
234
  */
205
- export declare function parsePutWritesRequest(config: RunnableConfig, writes: PendingWrite[], taskId: string): PutWritesRequest;
235
+ export declare function parsePutWritesRequest(config: RunnableConfig, writes: PendingWrite[], taskId: string, taskPath?: string): PutWritesRequest;
206
236
  /** A JSON-comparable value used in metadata filters. */
207
237
  export type FilterValue = string | number | boolean | null | FilterValue[] | {
208
238
  [key: string]: FilterValue;
@@ -233,9 +263,12 @@ export interface ListScope {
233
263
  * Returns: the scope every later step of the listing reads instead of the raw
234
264
  * config.
235
265
  *
236
- * Throws: `VALIDATION`, config first: as {@link parseConfig}; then
237
- * `options.<key>` for a key this package does not read, `filter`, `limit`,
238
- * `before`.
266
+ * Throws: `VALIDATION`, config first: as {@link parseConfig}; then `options`
267
+ * for options that are not an object, `filter`, `limit`, `before`. A key
268
+ * `CheckpointListOptions` does not declare is ignored rather than refused:
269
+ * LangGraph defines these options and passes its own straight through
270
+ * (`getStateHistory` hands them to `list`), so a key a later LangGraph adds
271
+ * must not turn the call into a refusal (decision record 28).
239
272
  */
240
273
  export declare function parseListScope(config: RunnableConfig, options?: CheckpointListOptions): ListScope;
241
274
  /** The arguments of `getDeltaChannelHistory`, their shape checked. */
@@ -249,14 +282,17 @@ export interface DeltaHistoryRequest {
249
282
  * and only once a channel is named: an empty `channels` reads nothing, so it
250
283
  * refuses nothing either.
251
284
  *
252
- * Accepts: `options` — an object naming exactly `config` and `channels`.
253
- * `options.config` — shaped as {@link parseConfig} requires. `options.channels`
254
- * — an array of strings; an empty one is a legitimate request.
285
+ * Accepts: `options` — an object carrying `config` and `channels`; any other
286
+ * key is ignored, since LangGraph defines this object and calls the method
287
+ * itself, so a key a later LangGraph adds must not refuse the call (decision
288
+ * record 28). `options.config` — shaped as {@link parseConfig} requires.
289
+ * `options.channels` — an array of strings; an empty one is a legitimate
290
+ * request.
255
291
  *
256
292
  * Returns: the config as given and a copy of the channels.
257
293
  *
258
- * Throws: `VALIDATION` naming `options`, `options.<key>`, `config`,
259
- * `configurable`, `signal` or `channels`.
294
+ * Throws: `VALIDATION` naming `options`, `config`, `configurable`, `signal` or
295
+ * `channels`.
260
296
  */
261
297
  export declare function parseDeltaHistoryRequest(options: DeltaChannelHistoryOptions): DeltaHistoryRequest;
262
298
  export {};