@farukada/aws-langgraph-dynamodb-ts 0.2.2 → 0.3.1

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 (517) hide show
  1. package/README.md +224 -512
  2. package/dist/checkpointer/actions/delete-thread.d.ts +7 -6
  3. package/dist/checkpointer/actions/delete-thread.d.ts.map +1 -1
  4. package/dist/checkpointer/actions/delete-thread.js +47 -152
  5. package/dist/checkpointer/actions/delete-thread.js.map +1 -1
  6. package/dist/checkpointer/actions/get-tuple.d.ts +6 -14
  7. package/dist/checkpointer/actions/get-tuple.d.ts.map +1 -1
  8. package/dist/checkpointer/actions/get-tuple.js +13 -166
  9. package/dist/checkpointer/actions/get-tuple.js.map +1 -1
  10. package/dist/checkpointer/actions/list.d.ts +10 -0
  11. package/dist/checkpointer/actions/list.d.ts.map +1 -0
  12. package/dist/checkpointer/actions/list.js +51 -0
  13. package/dist/checkpointer/actions/list.js.map +1 -0
  14. package/dist/checkpointer/actions/put-writes.d.ts +6 -6
  15. package/dist/checkpointer/actions/put-writes.d.ts.map +1 -1
  16. package/dist/checkpointer/actions/put-writes.js +26 -75
  17. package/dist/checkpointer/actions/put-writes.js.map +1 -1
  18. package/dist/checkpointer/actions/put.d.ts +6 -11
  19. package/dist/checkpointer/actions/put.d.ts.map +1 -1
  20. package/dist/checkpointer/actions/put.js +29 -161
  21. package/dist/checkpointer/actions/put.js.map +1 -1
  22. package/dist/checkpointer/internal/assemble.d.ts +10 -0
  23. package/dist/checkpointer/internal/assemble.d.ts.map +1 -0
  24. package/dist/checkpointer/internal/assemble.js +37 -0
  25. package/dist/checkpointer/internal/assemble.js.map +1 -0
  26. package/dist/checkpointer/internal/configurable.d.ts +13 -0
  27. package/dist/checkpointer/internal/configurable.d.ts.map +1 -0
  28. package/dist/checkpointer/internal/configurable.js +23 -0
  29. package/dist/checkpointer/internal/configurable.js.map +1 -0
  30. package/dist/checkpointer/internal/fetch.d.ts +10 -0
  31. package/dist/checkpointer/internal/fetch.d.ts.map +1 -0
  32. package/dist/checkpointer/internal/fetch.js +46 -0
  33. package/dist/checkpointer/internal/fetch.js.map +1 -0
  34. package/dist/checkpointer/internal/filter-match.d.ts +12 -0
  35. package/dist/checkpointer/internal/filter-match.d.ts.map +1 -0
  36. package/dist/checkpointer/internal/filter-match.js +14 -0
  37. package/dist/checkpointer/internal/filter-match.js.map +1 -0
  38. package/dist/checkpointer/internal/item-reader.d.ts +10 -0
  39. package/dist/checkpointer/internal/item-reader.d.ts.map +1 -0
  40. package/dist/checkpointer/internal/item-reader.js +26 -0
  41. package/dist/checkpointer/internal/item-reader.js.map +1 -0
  42. package/dist/checkpointer/internal/item-writer.d.ts +14 -0
  43. package/dist/checkpointer/internal/item-writer.d.ts.map +1 -0
  44. package/dist/checkpointer/internal/item-writer.js +68 -0
  45. package/dist/checkpointer/internal/item-writer.js.map +1 -0
  46. package/dist/checkpointer/internal/keys.d.ts +15 -0
  47. package/dist/checkpointer/internal/keys.d.ts.map +1 -0
  48. package/dist/checkpointer/internal/keys.js +52 -0
  49. package/dist/checkpointer/internal/keys.js.map +1 -0
  50. package/dist/checkpointer/internal/query.d.ts +16 -0
  51. package/dist/checkpointer/internal/query.d.ts.map +1 -0
  52. package/dist/checkpointer/internal/query.js +33 -0
  53. package/dist/checkpointer/internal/query.js.map +1 -0
  54. package/dist/checkpointer/internal/setup.d.ts +31 -0
  55. package/dist/checkpointer/internal/setup.d.ts.map +1 -0
  56. package/dist/checkpointer/internal/setup.js +29 -0
  57. package/dist/checkpointer/internal/setup.js.map +1 -0
  58. package/dist/checkpointer/internal/validation.d.ts +9 -0
  59. package/dist/checkpointer/internal/validation.d.ts.map +1 -0
  60. package/dist/checkpointer/internal/validation.js +28 -0
  61. package/dist/checkpointer/internal/validation.js.map +1 -0
  62. package/dist/checkpointer/saver.d.ts +21 -0
  63. package/dist/checkpointer/saver.d.ts.map +1 -0
  64. package/dist/checkpointer/saver.js +49 -0
  65. package/dist/checkpointer/saver.js.map +1 -0
  66. package/dist/checkpointer/types.d.ts +43 -0
  67. package/dist/checkpointer/types.d.ts.map +1 -0
  68. package/dist/{store/types/index.js → checkpointer/types.js} +1 -1
  69. package/dist/checkpointer/types.js.map +1 -0
  70. package/dist/factory/factory.d.ts +41 -0
  71. package/dist/factory/factory.d.ts.map +1 -0
  72. package/dist/factory/factory.js +49 -0
  73. package/dist/factory/factory.js.map +1 -0
  74. package/dist/history/actions/add-messages.d.ts +12 -7
  75. package/dist/history/actions/add-messages.d.ts.map +1 -1
  76. package/dist/history/actions/add-messages.js +50 -48
  77. package/dist/history/actions/add-messages.js.map +1 -1
  78. package/dist/history/actions/clear.d.ts +5 -11
  79. package/dist/history/actions/clear.d.ts.map +1 -1
  80. package/dist/history/actions/clear.js +28 -62
  81. package/dist/history/actions/clear.js.map +1 -1
  82. package/dist/history/actions/get-messages.d.ts +6 -13
  83. package/dist/history/actions/get-messages.d.ts.map +1 -1
  84. package/dist/history/actions/get-messages.js +23 -59
  85. package/dist/history/actions/get-messages.js.map +1 -1
  86. package/dist/history/actions/list-sessions.d.ts +6 -22
  87. package/dist/history/actions/list-sessions.d.ts.map +1 -1
  88. package/dist/history/actions/list-sessions.js +26 -69
  89. package/dist/history/actions/list-sessions.js.map +1 -1
  90. package/dist/history/actions/reconcile-count.d.ts +10 -0
  91. package/dist/history/actions/reconcile-count.d.ts.map +1 -0
  92. package/dist/history/actions/reconcile-count.js +39 -0
  93. package/dist/history/actions/reconcile-count.js.map +1 -0
  94. package/dist/history/chat-message-history.d.ts +36 -0
  95. package/dist/history/chat-message-history.d.ts.map +1 -0
  96. package/dist/history/chat-message-history.js +67 -0
  97. package/dist/history/chat-message-history.js.map +1 -0
  98. package/dist/history/internal/append-saga.d.ts +17 -0
  99. package/dist/history/internal/append-saga.d.ts.map +1 -0
  100. package/dist/history/internal/append-saga.js +94 -0
  101. package/dist/history/internal/append-saga.js.map +1 -0
  102. package/dist/history/internal/item-mapper.d.ts +12 -0
  103. package/dist/history/internal/item-mapper.d.ts.map +1 -0
  104. package/dist/history/internal/item-mapper.js +33 -0
  105. package/dist/history/internal/item-mapper.js.map +1 -0
  106. package/dist/history/internal/keys.d.ts +9 -0
  107. package/dist/history/internal/keys.d.ts.map +1 -0
  108. package/dist/history/internal/keys.js +22 -0
  109. package/dist/history/internal/keys.js.map +1 -0
  110. package/dist/history/internal/message-chunker.d.ts +14 -0
  111. package/dist/history/internal/message-chunker.d.ts.map +1 -0
  112. package/dist/history/internal/message-chunker.js +60 -0
  113. package/dist/history/internal/message-chunker.js.map +1 -0
  114. package/dist/history/internal/message-transaction.d.ts +17 -0
  115. package/dist/history/internal/message-transaction.d.ts.map +1 -0
  116. package/dist/history/internal/message-transaction.js +27 -0
  117. package/dist/history/internal/message-transaction.js.map +1 -0
  118. package/dist/history/internal/query.d.ts +6 -0
  119. package/dist/history/internal/query.d.ts.map +1 -0
  120. package/dist/history/internal/query.js +28 -0
  121. package/dist/history/internal/query.js.map +1 -0
  122. package/dist/history/internal/session-update.d.ts +20 -0
  123. package/dist/history/internal/session-update.d.ts.map +1 -0
  124. package/dist/history/internal/session-update.js +46 -0
  125. package/dist/history/internal/session-update.js.map +1 -0
  126. package/dist/history/internal/setup.d.ts +28 -0
  127. package/dist/history/internal/setup.d.ts.map +1 -0
  128. package/dist/history/internal/setup.js +27 -0
  129. package/dist/history/internal/setup.js.map +1 -0
  130. package/dist/history/internal/title-generator.d.ts +7 -0
  131. package/dist/history/internal/title-generator.d.ts.map +1 -0
  132. package/dist/history/internal/title-generator.js +16 -0
  133. package/dist/history/internal/title-generator.js.map +1 -0
  134. package/dist/history/internal/ttl-anchor.d.ts +12 -0
  135. package/dist/history/internal/ttl-anchor.d.ts.map +1 -0
  136. package/dist/history/internal/ttl-anchor.js +26 -0
  137. package/dist/history/internal/ttl-anchor.js.map +1 -0
  138. package/dist/history/session-adapter.d.ts +10 -26
  139. package/dist/history/session-adapter.d.ts.map +1 -1
  140. package/dist/history/session-adapter.js +15 -57
  141. package/dist/history/session-adapter.js.map +1 -1
  142. package/dist/history/types.d.ts +36 -0
  143. package/dist/history/types.d.ts.map +1 -0
  144. package/dist/history/types.js +3 -0
  145. package/dist/history/types.js.map +1 -0
  146. package/dist/index.d.ts +18 -10
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js +24 -16
  149. package/dist/index.js.map +1 -1
  150. package/dist/shared/clock.d.ts +3 -0
  151. package/dist/shared/clock.d.ts.map +1 -0
  152. package/dist/shared/clock.js +8 -0
  153. package/dist/shared/clock.js.map +1 -0
  154. package/dist/shared/codec/codec.d.ts +44 -0
  155. package/dist/shared/codec/codec.d.ts.map +1 -0
  156. package/dist/shared/codec/codec.js +44 -0
  157. package/dist/shared/codec/codec.js.map +1 -0
  158. package/dist/shared/codec/compression.d.ts +25 -0
  159. package/dist/shared/codec/compression.d.ts.map +1 -0
  160. package/dist/shared/codec/compression.js +49 -0
  161. package/dist/shared/codec/compression.js.map +1 -0
  162. package/dist/shared/codec/descriptor-keys.d.ts +4 -0
  163. package/dist/shared/codec/descriptor-keys.d.ts.map +1 -0
  164. package/dist/shared/codec/descriptor-keys.js +14 -0
  165. package/dist/shared/codec/descriptor-keys.js.map +1 -0
  166. package/dist/shared/codec/json-serde.d.ts +8 -0
  167. package/dist/shared/codec/json-serde.d.ts.map +1 -0
  168. package/dist/shared/codec/json-serde.js +18 -0
  169. package/dist/shared/codec/json-serde.js.map +1 -0
  170. package/dist/shared/codec/s3/client.d.ts +6 -0
  171. package/dist/shared/codec/s3/client.d.ts.map +1 -0
  172. package/dist/shared/codec/s3/client.js +18 -0
  173. package/dist/shared/codec/s3/client.js.map +1 -0
  174. package/dist/shared/codec/s3/config.d.ts +16 -0
  175. package/dist/shared/codec/s3/config.d.ts.map +1 -0
  176. package/dist/shared/codec/s3/config.js +14 -0
  177. package/dist/shared/codec/s3/config.js.map +1 -0
  178. package/dist/shared/codec/s3/delete.d.ts +8 -0
  179. package/dist/shared/codec/s3/delete.d.ts.map +1 -0
  180. package/dist/shared/codec/s3/delete.js +29 -0
  181. package/dist/shared/codec/s3/delete.js.map +1 -0
  182. package/dist/shared/codec/s3/lifecycle.d.ts +8 -0
  183. package/dist/shared/codec/s3/lifecycle.d.ts.map +1 -0
  184. package/dist/shared/codec/s3/lifecycle.js +47 -0
  185. package/dist/shared/codec/s3/lifecycle.js.map +1 -0
  186. package/dist/shared/codec/s3/offloader.d.ts +33 -0
  187. package/dist/shared/codec/s3/offloader.d.ts.map +1 -0
  188. package/dist/shared/codec/s3/offloader.js +80 -0
  189. package/dist/shared/codec/s3/offloader.js.map +1 -0
  190. package/dist/shared/codec/s3/orphans.d.ts +16 -0
  191. package/dist/shared/codec/s3/orphans.d.ts.map +1 -0
  192. package/dist/shared/codec/s3/orphans.js +73 -0
  193. package/dist/shared/codec/s3/orphans.js.map +1 -0
  194. package/dist/shared/codec/s3/read-write.d.ts +14 -0
  195. package/dist/shared/codec/s3/read-write.d.ts.map +1 -0
  196. package/dist/shared/codec/s3/read-write.js +42 -0
  197. package/dist/shared/codec/s3/read-write.js.map +1 -0
  198. package/dist/shared/constants.d.ts +37 -0
  199. package/dist/shared/constants.d.ts.map +1 -0
  200. package/dist/shared/constants.js +40 -0
  201. package/dist/shared/constants.js.map +1 -0
  202. package/dist/shared/dynamodb/backoff.d.ts +15 -0
  203. package/dist/shared/dynamodb/backoff.d.ts.map +1 -0
  204. package/dist/shared/dynamodb/backoff.js +48 -0
  205. package/dist/shared/dynamodb/backoff.js.map +1 -0
  206. package/dist/shared/dynamodb/batch-write.d.ts +10 -0
  207. package/dist/shared/dynamodb/batch-write.d.ts.map +1 -0
  208. package/dist/shared/dynamodb/batch-write.js +17 -0
  209. package/dist/shared/dynamodb/batch-write.js.map +1 -0
  210. package/dist/shared/dynamodb/client.d.ts +21 -0
  211. package/dist/shared/dynamodb/client.d.ts.map +1 -0
  212. package/dist/shared/dynamodb/client.js +19 -0
  213. package/dist/shared/dynamodb/client.js.map +1 -0
  214. package/dist/shared/dynamodb/drain-unprocessed.d.ts +15 -0
  215. package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +1 -0
  216. package/dist/shared/dynamodb/drain-unprocessed.js +35 -0
  217. package/dist/shared/dynamodb/drain-unprocessed.js.map +1 -0
  218. package/dist/shared/dynamodb/paginate-core.d.ts +22 -0
  219. package/dist/shared/dynamodb/paginate-core.d.ts.map +1 -0
  220. package/dist/shared/dynamodb/paginate-core.js +52 -0
  221. package/dist/shared/dynamodb/paginate-core.js.map +1 -0
  222. package/dist/shared/dynamodb/paginate.d.ts +15 -0
  223. package/dist/shared/dynamodb/paginate.d.ts.map +1 -0
  224. package/dist/shared/dynamodb/paginate.js +20 -0
  225. package/dist/shared/dynamodb/paginate.js.map +1 -0
  226. package/dist/shared/dynamodb/retry-classifier.d.ts +9 -0
  227. package/dist/shared/dynamodb/retry-classifier.d.ts.map +1 -0
  228. package/dist/shared/dynamodb/retry-classifier.js +75 -0
  229. package/dist/shared/dynamodb/retry-classifier.js.map +1 -0
  230. package/dist/shared/dynamodb/retry.d.ts +18 -0
  231. package/dist/shared/dynamodb/retry.d.ts.map +1 -0
  232. package/dist/shared/dynamodb/retry.js +53 -0
  233. package/dist/shared/dynamodb/retry.js.map +1 -0
  234. package/dist/shared/dynamodb/scan.d.ts +15 -0
  235. package/dist/shared/dynamodb/scan.d.ts.map +1 -0
  236. package/dist/shared/dynamodb/scan.js +20 -0
  237. package/dist/shared/dynamodb/scan.js.map +1 -0
  238. package/dist/shared/dynamodb/types.d.ts +24 -0
  239. package/dist/shared/dynamodb/types.d.ts.map +1 -0
  240. package/dist/shared/dynamodb/types.js +3 -0
  241. package/dist/shared/dynamodb/types.js.map +1 -0
  242. package/dist/shared/errors/base-error.d.ts +22 -0
  243. package/dist/shared/errors/base-error.d.ts.map +1 -0
  244. package/dist/shared/errors/base-error.js +28 -0
  245. package/dist/shared/errors/base-error.js.map +1 -0
  246. package/dist/shared/errors/error-code.d.ts +13 -0
  247. package/dist/shared/errors/error-code.d.ts.map +1 -0
  248. package/dist/shared/errors/error-code.js +17 -0
  249. package/dist/shared/errors/error-code.js.map +1 -0
  250. package/dist/shared/errors/errors.d.ts +47 -0
  251. package/dist/shared/errors/errors.d.ts.map +1 -0
  252. package/dist/shared/errors/errors.js +82 -0
  253. package/dist/shared/errors/errors.js.map +1 -0
  254. package/dist/shared/errors/wrap-error.d.ts +16 -0
  255. package/dist/shared/errors/wrap-error.d.ts.map +1 -0
  256. package/dist/shared/errors/wrap-error.js +30 -0
  257. package/dist/shared/errors/wrap-error.js.map +1 -0
  258. package/dist/shared/logging/logger.d.ts +14 -0
  259. package/dist/shared/logging/logger.d.ts.map +1 -0
  260. package/dist/shared/logging/logger.js +16 -0
  261. package/dist/shared/logging/logger.js.map +1 -0
  262. package/dist/shared/logging/redaction.d.ts +19 -0
  263. package/dist/shared/logging/redaction.d.ts.map +1 -0
  264. package/dist/shared/logging/redaction.js +67 -0
  265. package/dist/shared/logging/redaction.js.map +1 -0
  266. package/dist/shared/options.d.ts +32 -0
  267. package/dist/shared/options.d.ts.map +1 -0
  268. package/dist/shared/options.js +3 -0
  269. package/dist/shared/options.js.map +1 -0
  270. package/dist/shared/ulid.d.ts +10 -0
  271. package/dist/shared/ulid.d.ts.map +1 -0
  272. package/dist/shared/ulid.js +65 -0
  273. package/dist/shared/ulid.js.map +1 -0
  274. package/dist/shared/validation/primitives.d.ts +17 -0
  275. package/dist/shared/validation/primitives.d.ts.map +1 -0
  276. package/dist/shared/validation/primitives.js +71 -0
  277. package/dist/shared/validation/primitives.js.map +1 -0
  278. package/dist/shared/validation/ttl.d.ts +16 -0
  279. package/dist/shared/validation/ttl.d.ts.map +1 -0
  280. package/dist/shared/validation/ttl.js +26 -0
  281. package/dist/shared/validation/ttl.js.map +1 -0
  282. package/dist/store/actions/get.d.ts +5 -0
  283. package/dist/store/actions/get.d.ts.map +1 -0
  284. package/dist/store/actions/get.js +21 -0
  285. package/dist/store/actions/get.js.map +1 -0
  286. package/dist/store/actions/list-namespaces.d.ts +9 -0
  287. package/dist/store/actions/list-namespaces.d.ts.map +1 -0
  288. package/dist/store/actions/list-namespaces.js +46 -0
  289. package/dist/store/actions/list-namespaces.js.map +1 -0
  290. package/dist/store/actions/put.d.ts +11 -0
  291. package/dist/store/actions/put.d.ts.map +1 -0
  292. package/dist/store/actions/put.js +81 -0
  293. package/dist/store/actions/put.js.map +1 -0
  294. package/dist/store/actions/reconcile-vector-index.d.ts +17 -0
  295. package/dist/store/actions/reconcile-vector-index.d.ts.map +1 -0
  296. package/dist/store/actions/reconcile-vector-index.js +27 -0
  297. package/dist/store/actions/reconcile-vector-index.js.map +1 -0
  298. package/dist/store/actions/search.d.ts +10 -0
  299. package/dist/store/actions/search.d.ts.map +1 -0
  300. package/dist/store/actions/search.js +72 -0
  301. package/dist/store/actions/search.js.map +1 -0
  302. package/dist/store/internal/filter.d.ts +10 -0
  303. package/dist/store/internal/filter.d.ts.map +1 -0
  304. package/dist/store/internal/filter.js +37 -0
  305. package/dist/store/internal/filter.js.map +1 -0
  306. package/dist/store/internal/index-reconcile.d.ts +22 -0
  307. package/dist/store/internal/index-reconcile.d.ts.map +1 -0
  308. package/dist/store/internal/index-reconcile.js +68 -0
  309. package/dist/store/internal/index-reconcile.js.map +1 -0
  310. package/dist/store/internal/index-sync.d.ts +11 -0
  311. package/dist/store/internal/index-sync.d.ts.map +1 -0
  312. package/dist/store/internal/index-sync.js +26 -0
  313. package/dist/store/internal/index-sync.js.map +1 -0
  314. package/dist/store/internal/item-mapper.d.ts +23 -0
  315. package/dist/store/internal/item-mapper.d.ts.map +1 -0
  316. package/dist/store/internal/item-mapper.js +51 -0
  317. package/dist/store/internal/item-mapper.js.map +1 -0
  318. package/dist/store/internal/keys.d.ts +18 -0
  319. package/dist/store/internal/keys.d.ts.map +1 -0
  320. package/dist/store/internal/keys.js +36 -0
  321. package/dist/store/internal/keys.js.map +1 -0
  322. package/dist/store/internal/namespace-match.d.ts +12 -0
  323. package/dist/store/internal/namespace-match.d.ts.map +1 -0
  324. package/dist/store/internal/namespace-match.js +41 -0
  325. package/dist/store/internal/namespace-match.js.map +1 -0
  326. package/dist/store/internal/query.d.ts +6 -0
  327. package/dist/store/internal/query.d.ts.map +1 -0
  328. package/dist/store/internal/query.js +32 -0
  329. package/dist/store/internal/query.js.map +1 -0
  330. package/dist/store/internal/ranker.d.ts +13 -0
  331. package/dist/store/internal/ranker.d.ts.map +1 -0
  332. package/dist/store/internal/ranker.js +29 -0
  333. package/dist/store/internal/ranker.js.map +1 -0
  334. package/dist/store/internal/semantic-search.d.ts +13 -0
  335. package/dist/store/internal/semantic-search.d.ts.map +1 -0
  336. package/dist/store/internal/semantic-search.js +47 -0
  337. package/dist/store/internal/semantic-search.js.map +1 -0
  338. package/dist/store/internal/setup.d.ts +31 -0
  339. package/dist/store/internal/setup.d.ts.map +1 -0
  340. package/dist/store/internal/setup.js +29 -0
  341. package/dist/store/internal/setup.js.map +1 -0
  342. package/dist/store/internal/validation.d.ts +7 -0
  343. package/dist/store/internal/validation.d.ts.map +1 -0
  344. package/dist/store/internal/validation.js +26 -0
  345. package/dist/store/internal/validation.js.map +1 -0
  346. package/dist/store/store.d.ts +24 -0
  347. package/dist/store/store.d.ts.map +1 -0
  348. package/dist/store/store.js +58 -0
  349. package/dist/store/store.js.map +1 -0
  350. package/dist/store/types.d.ts +28 -0
  351. package/dist/store/types.d.ts.map +1 -0
  352. package/dist/store/types.js +3 -0
  353. package/dist/store/types.js.map +1 -0
  354. package/dist/store/vector-backend.d.ts +27 -0
  355. package/dist/store/vector-backend.d.ts.map +1 -0
  356. package/dist/store/vector-backend.js +3 -0
  357. package/dist/store/vector-backend.js.map +1 -0
  358. package/package.json +21 -22
  359. package/dist/checkpointer/actions/index.d.ts +0 -5
  360. package/dist/checkpointer/actions/index.d.ts.map +0 -1
  361. package/dist/checkpointer/actions/index.js +0 -21
  362. package/dist/checkpointer/actions/index.js.map +0 -1
  363. package/dist/checkpointer/actions/validate-configurable.d.ts +0 -10
  364. package/dist/checkpointer/actions/validate-configurable.d.ts.map +0 -1
  365. package/dist/checkpointer/actions/validate-configurable.js +0 -39
  366. package/dist/checkpointer/actions/validate-configurable.js.map +0 -1
  367. package/dist/checkpointer/actions/writer.d.ts +0 -52
  368. package/dist/checkpointer/actions/writer.d.ts.map +0 -1
  369. package/dist/checkpointer/actions/writer.js +0 -109
  370. package/dist/checkpointer/actions/writer.js.map +0 -1
  371. package/dist/checkpointer/index.d.ts +0 -118
  372. package/dist/checkpointer/index.d.ts.map +0 -1
  373. package/dist/checkpointer/index.js +0 -393
  374. package/dist/checkpointer/index.js.map +0 -1
  375. package/dist/checkpointer/types/index.d.ts +0 -232
  376. package/dist/checkpointer/types/index.d.ts.map +0 -1
  377. package/dist/checkpointer/types/index.js +0 -13
  378. package/dist/checkpointer/types/index.js.map +0 -1
  379. package/dist/checkpointer/utils/deserialization.d.ts +0 -20
  380. package/dist/checkpointer/utils/deserialization.d.ts.map +0 -1
  381. package/dist/checkpointer/utils/deserialization.js +0 -81
  382. package/dist/checkpointer/utils/deserialization.js.map +0 -1
  383. package/dist/checkpointer/utils/index.d.ts +0 -7
  384. package/dist/checkpointer/utils/index.d.ts.map +0 -1
  385. package/dist/checkpointer/utils/index.js +0 -27
  386. package/dist/checkpointer/utils/index.js.map +0 -1
  387. package/dist/checkpointer/utils/validation.d.ts +0 -48
  388. package/dist/checkpointer/utils/validation.d.ts.map +0 -1
  389. package/dist/checkpointer/utils/validation.js +0 -235
  390. package/dist/checkpointer/utils/validation.js.map +0 -1
  391. package/dist/factory.d.ts +0 -153
  392. package/dist/factory.d.ts.map +0 -1
  393. package/dist/factory.js +0 -206
  394. package/dist/factory.js.map +0 -1
  395. package/dist/history/actions/add-message.d.ts +0 -10
  396. package/dist/history/actions/add-message.d.ts.map +0 -1
  397. package/dist/history/actions/add-message.js +0 -24
  398. package/dist/history/actions/add-message.js.map +0 -1
  399. package/dist/history/actions/index.d.ts +0 -9
  400. package/dist/history/actions/index.d.ts.map +0 -1
  401. package/dist/history/actions/index.js +0 -17
  402. package/dist/history/actions/index.js.map +0 -1
  403. package/dist/history/index.d.ts +0 -118
  404. package/dist/history/index.d.ts.map +0 -1
  405. package/dist/history/index.js +0 -179
  406. package/dist/history/index.js.map +0 -1
  407. package/dist/history/types/index.d.ts +0 -184
  408. package/dist/history/types/index.d.ts.map +0 -1
  409. package/dist/history/types/index.js +0 -7
  410. package/dist/history/types/index.js.map +0 -1
  411. package/dist/history/utils/index.d.ts +0 -9
  412. package/dist/history/utils/index.d.ts.map +0 -1
  413. package/dist/history/utils/index.js +0 -27
  414. package/dist/history/utils/index.js.map +0 -1
  415. package/dist/history/utils/optimistic-retry.d.ts +0 -31
  416. package/dist/history/utils/optimistic-retry.d.ts.map +0 -1
  417. package/dist/history/utils/optimistic-retry.js +0 -74
  418. package/dist/history/utils/optimistic-retry.js.map +0 -1
  419. package/dist/history/utils/title-generator.d.ts +0 -12
  420. package/dist/history/utils/title-generator.d.ts.map +0 -1
  421. package/dist/history/utils/title-generator.js +0 -57
  422. package/dist/history/utils/title-generator.js.map +0 -1
  423. package/dist/history/utils/update-expression-builder.d.ts +0 -55
  424. package/dist/history/utils/update-expression-builder.d.ts.map +0 -1
  425. package/dist/history/utils/update-expression-builder.js +0 -112
  426. package/dist/history/utils/update-expression-builder.js.map +0 -1
  427. package/dist/history/utils/validation.d.ts +0 -68
  428. package/dist/history/utils/validation.d.ts.map +0 -1
  429. package/dist/history/utils/validation.js +0 -213
  430. package/dist/history/utils/validation.js.map +0 -1
  431. package/dist/shared/index.d.ts +0 -5
  432. package/dist/shared/index.d.ts.map +0 -1
  433. package/dist/shared/index.js +0 -21
  434. package/dist/shared/index.js.map +0 -1
  435. package/dist/shared/utils/batch-write.d.ts +0 -74
  436. package/dist/shared/utils/batch-write.d.ts.map +0 -1
  437. package/dist/shared/utils/batch-write.js +0 -110
  438. package/dist/shared/utils/batch-write.js.map +0 -1
  439. package/dist/shared/utils/client-factory.d.ts +0 -25
  440. package/dist/shared/utils/client-factory.d.ts.map +0 -1
  441. package/dist/shared/utils/client-factory.js +0 -23
  442. package/dist/shared/utils/client-factory.js.map +0 -1
  443. package/dist/shared/utils/compressor.d.ts +0 -66
  444. package/dist/shared/utils/compressor.d.ts.map +0 -1
  445. package/dist/shared/utils/compressor.js +0 -133
  446. package/dist/shared/utils/compressor.js.map +0 -1
  447. package/dist/shared/utils/constants.d.ts +0 -13
  448. package/dist/shared/utils/constants.d.ts.map +0 -1
  449. package/dist/shared/utils/constants.js +0 -35
  450. package/dist/shared/utils/constants.js.map +0 -1
  451. package/dist/shared/utils/index.d.ts +0 -14
  452. package/dist/shared/utils/index.d.ts.map +0 -1
  453. package/dist/shared/utils/index.js +0 -30
  454. package/dist/shared/utils/index.js.map +0 -1
  455. package/dist/shared/utils/logger.d.ts +0 -75
  456. package/dist/shared/utils/logger.d.ts.map +0 -1
  457. package/dist/shared/utils/logger.js +0 -148
  458. package/dist/shared/utils/logger.js.map +0 -1
  459. package/dist/shared/utils/retry.d.ts +0 -26
  460. package/dist/shared/utils/retry.d.ts.map +0 -1
  461. package/dist/shared/utils/retry.js +0 -169
  462. package/dist/shared/utils/retry.js.map +0 -1
  463. package/dist/shared/utils/s3-offloader.d.ts +0 -153
  464. package/dist/shared/utils/s3-offloader.d.ts.map +0 -1
  465. package/dist/shared/utils/s3-offloader.js +0 -281
  466. package/dist/shared/utils/s3-offloader.js.map +0 -1
  467. package/dist/shared/utils/s3-orphans.d.ts +0 -16
  468. package/dist/shared/utils/s3-orphans.d.ts.map +0 -1
  469. package/dist/shared/utils/s3-orphans.js +0 -79
  470. package/dist/shared/utils/s3-orphans.js.map +0 -1
  471. package/dist/shared/utils/sleep.d.ts +0 -48
  472. package/dist/shared/utils/sleep.d.ts.map +0 -1
  473. package/dist/shared/utils/sleep.js +0 -82
  474. package/dist/shared/utils/sleep.js.map +0 -1
  475. package/dist/shared/utils/ttl.d.ts +0 -24
  476. package/dist/shared/utils/ttl.d.ts.map +0 -1
  477. package/dist/shared/utils/ttl.js +0 -43
  478. package/dist/shared/utils/ttl.js.map +0 -1
  479. package/dist/store/actions/get-operation.d.ts +0 -11
  480. package/dist/store/actions/get-operation.d.ts.map +0 -1
  481. package/dist/store/actions/get-operation.js +0 -42
  482. package/dist/store/actions/get-operation.js.map +0 -1
  483. package/dist/store/actions/index.d.ts +0 -5
  484. package/dist/store/actions/index.d.ts.map +0 -1
  485. package/dist/store/actions/index.js +0 -21
  486. package/dist/store/actions/index.js.map +0 -1
  487. package/dist/store/actions/list-namespaces-operation.d.ts +0 -10
  488. package/dist/store/actions/list-namespaces-operation.d.ts.map +0 -1
  489. package/dist/store/actions/list-namespaces-operation.js +0 -227
  490. package/dist/store/actions/list-namespaces-operation.js.map +0 -1
  491. package/dist/store/actions/put-operation.d.ts +0 -9
  492. package/dist/store/actions/put-operation.d.ts.map +0 -1
  493. package/dist/store/actions/put-operation.js +0 -107
  494. package/dist/store/actions/put-operation.js.map +0 -1
  495. package/dist/store/actions/search-operation.d.ts +0 -17
  496. package/dist/store/actions/search-operation.d.ts.map +0 -1
  497. package/dist/store/actions/search-operation.js +0 -203
  498. package/dist/store/actions/search-operation.js.map +0 -1
  499. package/dist/store/index.d.ts +0 -82
  500. package/dist/store/index.d.ts.map +0 -1
  501. package/dist/store/index.js +0 -172
  502. package/dist/store/index.js.map +0 -1
  503. package/dist/store/types/index.d.ts +0 -131
  504. package/dist/store/types/index.d.ts.map +0 -1
  505. package/dist/store/types/index.js.map +0 -1
  506. package/dist/store/utils/filter.d.ts +0 -16
  507. package/dist/store/utils/filter.d.ts.map +0 -1
  508. package/dist/store/utils/filter.js +0 -133
  509. package/dist/store/utils/filter.js.map +0 -1
  510. package/dist/store/utils/index.d.ts +0 -7
  511. package/dist/store/utils/index.d.ts.map +0 -1
  512. package/dist/store/utils/index.js +0 -27
  513. package/dist/store/utils/index.js.map +0 -1
  514. package/dist/store/utils/validation.d.ts +0 -61
  515. package/dist/store/utils/validation.d.ts.map +0 -1
  516. package/dist/store/utils/validation.js +0 -260
  517. package/dist/store/utils/validation.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/factory/factory.ts"],"names":[],"mappings":";;;AAAA,8DAAqF;AACrF,wDAAyD;AAEzD,iDAAsD;AAEtD,0EAA6E;AAG7E,0CAA+C;AAyB/C;;;;GAIG;AACH,MAAa,eAAe;IACG;IAA7B,YAA6B,OAA2B,EAAE;QAA7B,SAAI,GAAJ,IAAI,CAAyB;IAAG,CAAC;IAE9D,WAAW,CAAC,OAA6B;QACvC,OAAO,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CAAC,OAA6B;QACvC,OAAO,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,wBAAwB,CAAC,OAA0C;QACjE,OAAO,IAAI,iDAA0B,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,CAAC,OAAyB;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,gCAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QACjF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,+BAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,iDAA0B,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7F,OAAO;YACL,KAAK;YACL,KAAK;YACL,OAAO;YACP,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAlCD,0CAkCC"}
@@ -1,11 +1,16 @@
1
+ import { type BaseMessage } from '@langchain/core/messages';
2
+ import type { HistoryContext } from '../internal/setup';
1
3
  /**
2
- * Add multiple messages to a session using optimistic concurrency control.
4
+ * Append messages as one item per message. Each chunk writes its message Puts
5
+ * and the session-metadata count `ADD` in a single `TransactWriteItems`, so
6
+ * `messageCount` can never disagree with the stored messages. A creation-anchored
7
+ * TTL (resolved by read, set in the transaction via `if_not_exists`) gives every
8
+ * item one shared expiry. Batches larger than the 100-item / 4 MB transaction
9
+ * limits are split into chunks and applied with caller-observed atomicity: if a
10
+ * later chunk fails, the committed chunks are rolled back (see {@link appendChunks}).
3
11
  *
4
- * Reads the current messageCount, writes N message items and the updated counter
5
- * in a single TransactWrite (N ≤ 99, leaving room for the metadata item in the
6
- * 100-item transaction limit). The metadata update has a conditional check on the
7
- * observed count; on concurrent modification we re-read and retry.
12
+ * Per item the 400 KB DynamoDB limit still applies; enable S3 offloading so
13
+ * large payloads become small descriptors and stay well under the limits.
8
14
  */
9
- import type { AddMessagesActionParams } from '../types';
10
- export declare const addMessagesAction: (params: AddMessagesActionParams) => Promise<void>;
15
+ export declare function addMessages(context: HistoryContext, sessionId: string, messages: BaseMessage[]): Promise<void>;
11
16
  //# sourceMappingURL=add-messages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-messages.d.ts","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAexD,eAAO,MAAM,iBAAiB,GAAU,QAAQ,uBAAuB,KAAG,OAAO,CAAC,IAAI,CAiDrF,CAAC"}
1
+ {"version":3,"file":"add-messages.d.ts","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA4BxD;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAcf"}
@@ -1,54 +1,56 @@
1
1
  "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addMessages = addMessages;
4
+ const messages_1 = require("@langchain/core/messages");
5
+ const clock_1 = require("../../shared/clock");
6
+ const primitives_1 = require("../../shared/validation/primitives");
7
+ const ttl_1 = require("../../shared/validation/ttl");
8
+ const append_saga_1 = require("../internal/append-saga");
9
+ const item_mapper_1 = require("../internal/item-mapper");
10
+ const message_chunker_1 = require("../internal/message-chunker");
11
+ const title_generator_1 = require("../internal/title-generator");
12
+ const ttl_anchor_1 = require("../internal/ttl-anchor");
13
+ /** Message Puts per append transaction: the 100-item limit, less the metadata Update. */
14
+ const MAX_MESSAGES_PER_TRANSACTION = 99;
15
+ /**
16
+ * Aggregate byte budget per transaction. Held ~500 KB below DynamoDB's 4 MB
17
+ * `TransactWriteItems` ceiling so the conservative per-item estimate (see
18
+ * `ITEM_OVERHEAD_BYTES`) cannot push a chunk over the real limit at commit time.
19
+ */
20
+ const MAX_TRANSACTION_BYTES = 3_500_000;
21
+ async function buildItems(context, sessionId, stored, ttlTimestamp) {
22
+ const items = [];
23
+ for (const message of stored) {
24
+ items.push(await (0, item_mapper_1.buildMessageItem)(context, sessionId, context.ulid(), message, ttlTimestamp));
25
+ }
26
+ return items;
27
+ }
2
28
  /**
3
- * Add multiple messages to a session using optimistic concurrency control.
29
+ * Append messages as one item per message. Each chunk writes its message Puts
30
+ * and the session-metadata count `ADD` in a single `TransactWriteItems`, so
31
+ * `messageCount` can never disagree with the stored messages. A creation-anchored
32
+ * TTL (resolved by read, set in the transaction via `if_not_exists`) gives every
33
+ * item one shared expiry. Batches larger than the 100-item / 4 MB transaction
34
+ * limits are split into chunks and applied with caller-observed atomicity: if a
35
+ * later chunk fails, the committed chunks are rolled back (see {@link appendChunks}).
4
36
  *
5
- * Reads the current messageCount, writes N message items and the updated counter
6
- * in a single TransactWrite (N ≤ 99, leaving room for the metadata item in the
7
- * 100-item transaction limit). The metadata update has a conditional check on the
8
- * observed count; on concurrent modification we re-read and retry.
37
+ * Per item the 400 KB DynamoDB limit still applies; enable S3 offloading so
38
+ * large payloads become small descriptors and stay well under the limits.
9
39
  */
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.addMessagesAction = void 0;
12
- const utils_1 = require("../utils");
13
- const addMessagesAction = async (params) => {
14
- const { client, tableName, userId, sessionId, messages, title, ttlDays, signal } = params;
15
- (0, utils_1.validateUserId)(userId);
16
- (0, utils_1.validateSessionId)(sessionId);
17
- (0, utils_1.validateMessages)(messages);
18
- (0, utils_1.validateMessagesSize)(messages);
19
- (0, utils_1.validateTitle)(title);
20
- (0, utils_1.validateTTLDays)(ttlDays);
21
- const sessionTitle = title ?? (0, utils_1.generateTitle)(messages[0]);
22
- await (0, utils_1.withOptimisticRetry)(`addMessages:${sessionId}`, async () => {
23
- signal?.throwIfAborted();
24
- const existing = await (0, utils_1.withDynamoDBRetry)(async () => {
25
- return await client.get({
26
- TableName: tableName,
27
- Key: { userId, sessionId },
28
- ConsistentRead: true,
29
- ProjectionExpression: 'messageCount',
30
- });
31
- }, { signal });
32
- const expectedCount = existing.Item?.messageCount;
33
- const currentCount = expectedCount ?? 0;
34
- const newCount = currentCount + messages.length;
35
- const messageItems = (0, utils_1.buildMessageItems)(userId, sessionId, messages, currentCount, ttlDays);
36
- const { updateExpression, conditionExpression, expressionAttributeValues } = (0, utils_1.buildOptimisticMetadataUpdate)(sessionTitle, newCount, expectedCount, ttlDays);
37
- await client.transactWrite({
38
- TransactItems: [
39
- ...messageItems.map((item) => ({ Put: { TableName: tableName, Item: item } })),
40
- {
41
- Update: {
42
- TableName: tableName,
43
- Key: { userId, sessionId },
44
- UpdateExpression: updateExpression,
45
- ConditionExpression: conditionExpression,
46
- ExpressionAttributeValues: expressionAttributeValues,
47
- },
48
- },
49
- ],
50
- });
40
+ async function addMessages(context, sessionId, messages) {
41
+ (0, primitives_1.validateNonEmptyString)(sessionId, 'sessionId');
42
+ if (messages.length === 0)
43
+ return;
44
+ const stored = (0, messages_1.mapChatMessagesToStoredMessages)(messages);
45
+ const ttlTimestamp = context.ttl
46
+ ? await (0, ttl_anchor_1.resolveTtlAnchor)(context, sessionId, (0, ttl_1.calculateTtlTimestamp)(context.ttl))
47
+ : undefined;
48
+ const items = await buildItems(context, sessionId, stored, ttlTimestamp);
49
+ const chunks = (0, message_chunker_1.chunkBySize)(items, MAX_MESSAGES_PER_TRANSACTION, MAX_TRANSACTION_BYTES);
50
+ await (0, append_saga_1.appendChunks)(context, sessionId, chunks, {
51
+ now: (0, clock_1.nowIso)(),
52
+ title: (0, title_generator_1.deriveTitle)(stored),
53
+ ttlTimestamp,
51
54
  });
52
- };
53
- exports.addMessagesAction = addMessagesAction;
55
+ }
54
56
  //# sourceMappingURL=add-messages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-messages.js","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAGH,oCAYkB;AAEX,MAAM,iBAAiB,GAAG,KAAK,EAAE,MAA+B,EAAiB,EAAE;IACxF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAE1F,IAAA,sBAAc,EAAC,MAAM,CAAC,CAAC;IACvB,IAAA,yBAAiB,EAAC,SAAS,CAAC,CAAC;IAC7B,IAAA,wBAAgB,EAAC,QAAQ,CAAC,CAAC;IAC3B,IAAA,4BAAoB,EAAC,QAAQ,CAAC,CAAC;IAC/B,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC;IACrB,IAAA,uBAAe,EAAC,OAAO,CAAC,CAAC;IAEzB,MAAM,YAAY,GAAG,KAAK,IAAI,IAAA,qBAAa,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,MAAM,IAAA,2BAAmB,EAAC,eAAe,SAAS,EAAE,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAA,yBAAiB,EACtC,KAAK,IAAI,EAAE;YACT,OAAO,MAAM,MAAM,CAAC,GAAG,CAAC;gBACtB,SAAS,EAAE,SAAS;gBACpB,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBAC1B,cAAc,EAAE,IAAI;gBACpB,oBAAoB,EAAE,cAAc;aACrC,CAAC,CAAC;QACL,CAAC,EACD,EAAE,MAAM,EAAE,CACX,CAAC;QAEF,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAkC,CAAC;QACxE,MAAM,YAAY,GAAG,aAAa,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC;QAEhD,MAAM,YAAY,GAAG,IAAA,yBAAiB,EAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAC3F,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,GACxE,IAAA,qCAA6B,EAAC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QAEhF,MAAM,MAAM,CAAC,aAAa,CAAC;YACzB,aAAa,EAAE;gBACb,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9E;oBACE,MAAM,EAAE;wBACN,SAAS,EAAE,SAAS;wBACpB,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;wBAC1B,gBAAgB,EAAE,gBAAgB;wBAClC,mBAAmB,EAAE,mBAAmB;wBACxC,yBAAyB,EAAE,yBAAyB;qBACrD;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAjDW,QAAA,iBAAiB,qBAiD5B"}
1
+ {"version":3,"file":"add-messages.js","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":";;AAoDA,kCAkBC;AAtED,uDAIkC;AAElC,8CAA4C;AAC5C,mEAA4E;AAC5E,qDAAoE;AACpE,yDAAuD;AACvD,yDAA2D;AAC3D,iEAA0D;AAE1D,iEAA0D;AAC1D,uDAA0D;AAG1D,yFAAyF;AACzF,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAExC,KAAK,UAAU,UAAU,CACvB,OAAuB,EACvB,SAAiB,EACjB,MAAuB,EACvB,YAAqB;IAErB,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,IAAA,8BAAgB,EAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,SAAiB,EACjB,QAAuB;IAEvB,IAAA,mCAAsB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAClC,MAAM,MAAM,GAAG,IAAA,0CAA+B,EAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG;QAC9B,CAAC,CAAC,MAAM,IAAA,6BAAgB,EAAC,OAAO,EAAE,SAAS,EAAE,IAAA,2BAAqB,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,IAAA,6BAAW,EAAC,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,CAAC,CAAC;IACvF,MAAM,IAAA,0BAAY,EAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;QAC7C,GAAG,EAAE,IAAA,cAAM,GAAE;QACb,KAAK,EAAE,IAAA,6BAAW,EAAC,MAAM,CAAC;QAC1B,YAAY;KACb,CAAC,CAAC;AACL,CAAC"}
@@ -1,14 +1,8 @@
1
+ import type { HistoryContext } from '../internal/setup';
1
2
  /**
2
- * Clear all messages and metadata for a session
3
- * Deletes both the metadata item and all individual message items
3
+ * Delete a whole session: every message item plus the metadata item, removed in
4
+ * one batched write. Any offloaded S3 objects for those messages are then
5
+ * best-effort cleaned up.
4
6
  */
5
- import type { ClearActionParams } from '../types';
6
- /**
7
- * Clear all messages in a session by deleting all items (metadata + messages)
8
- * Queries all items with the session prefix, then batch-deletes them
9
- *
10
- * @param params - Parameters for the clear operation
11
- * @throws Error if the operation fails or validation fails
12
- */
13
- export declare const clearAction: (params: ClearActionParams) => Promise<void>;
7
+ export declare function clearSession(context: HistoryContext, sessionId: string): Promise<void>;
14
8
  //# sourceMappingURL=clear.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/history/actions/clear.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAU,QAAQ,iBAAiB,KAAG,OAAO,CAAC,IAAI,CA+DzE,CAAC"}
1
+ {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/history/actions/clear.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5F"}
@@ -1,67 +1,33 @@
1
1
  "use strict";
2
- /**
3
- * Clear all messages and metadata for a session
4
- * Deletes both the metadata item and all individual message items
5
- */
6
2
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.clearAction = void 0;
8
- const shared_1 = require("../../shared");
9
- const utils_1 = require("../utils");
3
+ exports.clearSession = clearSession;
4
+ const descriptor_keys_1 = require("../../shared/codec/descriptor-keys");
5
+ const orphans_1 = require("../../shared/codec/s3/orphans");
6
+ const batch_write_1 = require("../../shared/dynamodb/batch-write");
7
+ const paginate_1 = require("../../shared/dynamodb/paginate");
8
+ const query_1 = require("../internal/query");
10
9
  /**
11
- * Clear all messages in a session by deleting all items (metadata + messages)
12
- * Queries all items with the session prefix, then batch-deletes them
13
- *
14
- * @param params - Parameters for the clear operation
15
- * @throws Error if the operation fails or validation fails
10
+ * Delete a whole session: every message item plus the metadata item, removed in
11
+ * one batched write. Any offloaded S3 objects for those messages are then
12
+ * best-effort cleaned up.
16
13
  */
17
- const clearAction = async (params) => {
18
- const { client, tableName, userId, sessionId, signal } = params;
19
- // Validate inputs
20
- (0, utils_1.validateUserId)(userId);
21
- (0, utils_1.validateSessionId)(sessionId);
22
- // Collect all item keys to delete: metadata item + all message items
23
- const keysToDelete = [];
24
- // Add the metadata item key
25
- keysToDelete.push({ userId, sessionId });
26
- // Query all message items by SK prefix
27
- const messagePrefix = `${sessionId}#msg#`;
28
- let lastEvaluatedKey;
29
- let iterationCount = 0;
30
- do {
31
- // Prevent infinite loops
32
- iterationCount++;
33
- if (iterationCount > shared_1.MAX_LOOP_ITERATIONS) {
34
- throw new Error('Clear operation exceeded maximum iteration limit');
35
- }
36
- const result = await (0, utils_1.withDynamoDBRetry)(async () => {
37
- return await client.query({
38
- TableName: tableName,
39
- KeyConditionExpression: 'userId = :userId AND begins_with(sessionId, :prefix)',
40
- ExpressionAttributeValues: {
41
- ':userId': userId,
42
- ':prefix': messagePrefix,
43
- },
44
- ProjectionExpression: 'userId, sessionId',
45
- ExclusiveStartKey: lastEvaluatedKey,
46
- });
47
- }, { signal });
48
- if (result.Items && result.Items.length > 0) {
49
- // Prevent memory exhaustion
50
- if (keysToDelete.length + result.Items.length > shared_1.MAX_TOTAL_ITEMS_IN_MEMORY) {
51
- throw new Error('Clear operation exceeded maximum items in memory limit');
52
- }
53
- keysToDelete.push(...result.Items.map((item) => ({
54
- userId: item.userId,
55
- sessionId: item.sessionId,
56
- })));
57
- }
58
- lastEvaluatedKey = result.LastEvaluatedKey;
59
- } while (lastEvaluatedKey);
60
- // Batch delete all items (metadata + messages) using shared utility
61
- const deleteRequests = keysToDelete.map((key) => ({
62
- DeleteRequest: { Key: key },
63
- }));
64
- await (0, shared_1.batchWriteAllWithRetry)(client, tableName, deleteRequests, { signal });
65
- };
66
- exports.clearAction = clearAction;
14
+ async function clearSession(context, sessionId) {
15
+ const deletes = [];
16
+ const descriptors = [];
17
+ for await (const raw of (0, paginate_1.paginateQuery)({
18
+ client: context.client,
19
+ params: (0, query_1.sessionItemsQuery)(context.tableName, sessionId),
20
+ })) {
21
+ const item = raw;
22
+ deletes.push({ DeleteRequest: { Key: { PK: item.PK, SK: item.SK } } });
23
+ if (item.message)
24
+ descriptors.push(item.message);
25
+ }
26
+ if (deletes.length === 0)
27
+ return;
28
+ await (0, batch_write_1.batchWriteAll)(context.client, context.tableName, deletes);
29
+ if (context.offloader) {
30
+ await (0, orphans_1.cleanUpS3Orphans)(context.offloader, (0, descriptor_keys_1.collectS3Keys)(descriptors), 'history.clear', context.logger);
31
+ }
32
+ }
67
33
  //# sourceMappingURL=clear.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/history/actions/clear.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,yCAIsB;AAEtB,oCAAgF;AAEhF;;;;;;GAMG;AACI,MAAM,WAAW,GAAG,KAAK,EAAE,MAAyB,EAAiB,EAAE;IAC5E,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEhE,kBAAkB;IAClB,IAAA,sBAAc,EAAC,MAAM,CAAC,CAAC;IACvB,IAAA,yBAAiB,EAAC,SAAS,CAAC,CAAC;IAE7B,qEAAqE;IACrE,MAAM,YAAY,GAAiD,EAAE,CAAC;IAEtE,4BAA4B;IAC5B,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAEzC,uCAAuC;IACvC,MAAM,aAAa,GAAG,GAAG,SAAS,OAAO,CAAC;IAC1C,IAAI,gBAAiD,CAAC;IACtD,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,GAAG,CAAC;QACF,yBAAyB;QACzB,cAAc,EAAE,CAAC;QACjB,IAAI,cAAc,GAAG,4BAAmB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAiB,EACpC,KAAK,IAAI,EAAE;YACT,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC;gBACxB,SAAS,EAAE,SAAS;gBACpB,sBAAsB,EAAE,sDAAsD;gBAC9E,yBAAyB,EAAE;oBACzB,SAAS,EAAE,MAAM;oBACjB,SAAS,EAAE,aAAa;iBACzB;gBACD,oBAAoB,EAAE,mBAAmB;gBACzC,iBAAiB,EAAE,gBAAgB;aACpC,CAAC,CAAC;QACL,CAAC,EACD,EAAE,MAAM,EAAE,CACX,CAAC;QAEF,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,4BAA4B;YAC5B,IAAI,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,kCAAyB,EAAE,CAAC;gBAC1E,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC5E,CAAC;YACD,YAAY,CAAC,IAAI,CACf,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAgB;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAmB;aACpC,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;QAED,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC7C,CAAC,QAAQ,gBAAgB,EAAE;IAE3B,oEAAoE;IACpE,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChD,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;KAC5B,CAAC,CAAC,CAAC;IAEJ,MAAM,IAAA,+BAAsB,EAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9E,CAAC,CAAC;AA/DW,QAAA,WAAW,eA+DtB"}
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/history/actions/clear.ts"],"names":[],"mappings":";;AAeA,oCAqBC;AAnCD,wEAAmE;AACnE,2DAAiE;AACjE,mEAAkE;AAClE,6DAA+D;AAE/D,6CAAsD;AAItD;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,OAAuB,EAAE,SAAiB;IAC3E,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAA,wBAAa,EAAC;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,IAAA,yBAAiB,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;KACxD,CAAC,EAAE,CAAC;QACH,MAAM,IAAI,GAAG,GAAsB,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,OAAO;YAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,IAAA,2BAAa,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAA,0BAAgB,EACpB,OAAO,CAAC,SAAS,EACjB,IAAA,+BAAa,EAAC,WAAW,CAAC,EAC1B,eAAe,EACf,OAAO,CAAC,MAAM,CACf,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,16 +1,9 @@
1
+ import { type BaseMessage } from '@langchain/core/messages';
2
+ import type { HistoryContext } from '../internal/setup';
1
3
  /**
2
- * Get all messages for a session
3
- * Queries individual message items and deserializes to BaseMessage instances
4
+ * Return a session's messages in chronological order. Items past their TTL are
5
+ * filtered out on read (DynamoDB's background TTL sweep can lag by up to 48h),
6
+ * so the returned history is never stale.
4
7
  */
5
- import { BaseMessage } from '@langchain/core/messages';
6
- import type { GetMessagesActionParams } from '../types';
7
- /**
8
- * Get all messages for a session from DynamoDB
9
- * Queries message items by SK prefix and deserializes to proper BaseMessage instances
10
- *
11
- * @param params - Parameters for the get messages operation
12
- * @returns Array of BaseMessage objects in chronological order
13
- * @throws Error if the operation fails or validation fails
14
- */
15
- export declare const getMessagesAction: (params: GetMessagesActionParams) => Promise<BaseMessage[]>;
8
+ export declare function getMessages(context: HistoryContext, sessionId: string): Promise<BaseMessage[]>;
16
9
  //# sourceMappingURL=get-messages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-messages.d.ts","sourceRoot":"","sources":["../../../src/history/actions/get-messages.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAmC,MAAM,0BAA0B,CAAC;AAGxF,OAAO,KAAK,EAAE,uBAAuB,EAAuB,MAAM,UAAU,CAAC;AAG7E;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,uBAAuB,KAC9B,OAAO,CAAC,WAAW,EAAE,CAyDvB,CAAC"}
1
+ {"version":3,"file":"get-messages.d.ts","sourceRoot":"","sources":["../../../src/history/actions/get-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOxD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAYxB"}
@@ -1,66 +1,30 @@
1
1
  "use strict";
2
- /**
3
- * Get all messages for a session
4
- * Queries individual message items and deserializes to BaseMessage instances
5
- */
6
2
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.getMessagesAction = void 0;
3
+ exports.getMessages = getMessages;
8
4
  const messages_1 = require("@langchain/core/messages");
9
- const shared_1 = require("../../shared");
10
- const utils_1 = require("../utils");
5
+ const paginate_1 = require("../../shared/dynamodb/paginate");
6
+ const item_mapper_1 = require("../internal/item-mapper");
7
+ const query_1 = require("../internal/query");
8
+ function isExpired(item, nowSeconds) {
9
+ return item.ttl !== undefined && item.ttl <= nowSeconds;
10
+ }
11
11
  /**
12
- * Get all messages for a session from DynamoDB
13
- * Queries message items by SK prefix and deserializes to proper BaseMessage instances
14
- *
15
- * @param params - Parameters for the get messages operation
16
- * @returns Array of BaseMessage objects in chronological order
17
- * @throws Error if the operation fails or validation fails
12
+ * Return a session's messages in chronological order. Items past their TTL are
13
+ * filtered out on read (DynamoDB's background TTL sweep can lag by up to 48h),
14
+ * so the returned history is never stale.
18
15
  */
19
- const getMessagesAction = async (params) => {
20
- const { client, tableName, userId, sessionId, signal } = params;
21
- // Validate inputs
22
- (0, utils_1.validateUserId)(userId);
23
- (0, utils_1.validateSessionId)(sessionId);
24
- // Query all message items for the session using SK prefix
25
- const messagePrefix = `${sessionId}#msg#`;
26
- const messages = [];
27
- let lastEvaluatedKey;
28
- let iterationCount = 0;
29
- do {
30
- // Prevent infinite loops
31
- iterationCount++;
32
- if (iterationCount > shared_1.MAX_LOOP_ITERATIONS) {
33
- throw new Error('getMessages operation exceeded maximum iteration limit');
34
- }
35
- const result = await (0, utils_1.withDynamoDBRetry)(async () => {
36
- return await client.query({
37
- TableName: tableName,
38
- KeyConditionExpression: 'userId = :userId AND begins_with(sessionId, :prefix)',
39
- ExpressionAttributeValues: {
40
- ':userId': userId,
41
- ':prefix': messagePrefix,
42
- },
43
- ExclusiveStartKey: lastEvaluatedKey,
44
- });
45
- }, { signal });
46
- if (result.Items && result.Items.length > 0) {
47
- // Prevent memory exhaustion
48
- if (messages.length + result.Items.length > shared_1.MAX_TOTAL_ITEMS_IN_MEMORY) {
49
- throw new Error('getMessages operation exceeded maximum items in memory limit');
50
- }
51
- messages.push(...result.Items);
52
- }
53
- lastEvaluatedKey = result.LastEvaluatedKey;
54
- } while (lastEvaluatedKey);
55
- // Return empty array if no messages found
56
- if (messages.length === 0) {
57
- return [];
16
+ async function getMessages(context, sessionId) {
17
+ const nowSeconds = Math.floor(Date.now() / 1000);
18
+ const stored = [];
19
+ for await (const raw of (0, paginate_1.paginateQuery)({
20
+ client: context.client,
21
+ params: (0, query_1.messageQuery)(context.tableName, sessionId),
22
+ })) {
23
+ const item = raw;
24
+ if (isExpired(item, nowSeconds))
25
+ continue;
26
+ stored.push(await (0, item_mapper_1.decodeMessageItem)(context, item));
58
27
  }
59
- // Sort by messageIndex to ensure chronological order
60
- messages.sort((a, b) => a.messageIndex - b.messageIndex);
61
- // Deserialize StoredMessage objects to proper BaseMessage instances
62
- const storedMessages = messages.map((item) => item.message);
63
- return (0, messages_1.mapStoredMessagesToChatMessages)(storedMessages);
64
- };
65
- exports.getMessagesAction = getMessagesAction;
28
+ return (0, messages_1.mapStoredMessagesToChatMessages)(stored);
29
+ }
66
30
  //# sourceMappingURL=get-messages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-messages.js","sourceRoot":"","sources":["../../../src/history/actions/get-messages.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uDAAwF;AAExF,yCAA8E;AAE9E,oCAAgF;AAEhF;;;;;;;GAOG;AACI,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAA+B,EACP,EAAE;IAC1B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEhE,kBAAkB;IAClB,IAAA,sBAAc,EAAC,MAAM,CAAC,CAAC;IACvB,IAAA,yBAAiB,EAAC,SAAS,CAAC,CAAC;IAE7B,0DAA0D;IAC1D,MAAM,aAAa,GAAG,GAAG,SAAS,OAAO,CAAC;IAC1C,MAAM,QAAQ,GAA0B,EAAE,CAAC;IAC3C,IAAI,gBAAiD,CAAC;IACtD,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,GAAG,CAAC;QACF,yBAAyB;QACzB,cAAc,EAAE,CAAC;QACjB,IAAI,cAAc,GAAG,4BAAmB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAiB,EACpC,KAAK,IAAI,EAAE;YACT,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC;gBACxB,SAAS,EAAE,SAAS;gBACpB,sBAAsB,EAAE,sDAAsD;gBAC9E,yBAAyB,EAAE;oBACzB,SAAS,EAAE,MAAM;oBACjB,SAAS,EAAE,aAAa;iBACzB;gBACD,iBAAiB,EAAE,gBAAgB;aACpC,CAAC,CAAC;QACL,CAAC,EACD,EAAE,MAAM,EAAE,CACX,CAAC;QAEF,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,4BAA4B;YAC5B,IAAI,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,kCAAyB,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAClF,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,GAAI,MAAM,CAAC,KAA+B,CAAC,CAAC;QAC5D,CAAC;QAED,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC7C,CAAC,QAAQ,gBAAgB,EAAE;IAE3B,0CAA0C;IAC1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qDAAqD;IACrD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IAEzD,oEAAoE;IACpE,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,OAAO,IAAA,0CAA+B,EAAC,cAAc,CAAC,CAAC;AACzD,CAAC,CAAC;AA3DW,QAAA,iBAAiB,qBA2D5B"}
1
+ {"version":3,"file":"get-messages.js","sourceRoot":"","sources":["../../../src/history/actions/get-messages.ts"],"names":[],"mappings":";;AAqBA,kCAeC;AApCD,uDAIkC;AAElC,6DAA+D;AAC/D,yDAA4D;AAC5D,6CAAiD;AAIjD,SAAS,SAAS,CAAC,IAAqB,EAAE,UAAkB;IAC1D,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,SAAiB;IAEjB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAA,wBAAa,EAAC;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,IAAA,oBAAY,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;KACnD,CAAC,EAAE,CAAC;QACH,MAAM,IAAI,GAAG,GAAsB,CAAC;QACpC,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;YAAE,SAAS;QAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,IAAA,+BAAiB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAA,0CAA+B,EAAC,MAAM,CAAC,CAAC;AACjD,CAAC"}
@@ -1,25 +1,9 @@
1
+ import type { HistoryContext } from '../internal/setup';
2
+ import type { SessionMetadata } from '../types';
1
3
  /**
2
- * List all sessions for a user
4
+ * List all sessions as metadata summaries, newest-updated first. The scan is
5
+ * filtered to session items so the adapter works on a table shared with the
6
+ * checkpointer/store; foreign rows are also skipped defensively.
3
7
  */
4
- import type { ListSessionsActionParams, SessionMetadata } from '../types';
5
- /**
6
- * List all sessions for a user, sorted by most recent
7
- * Uses projection expression to exclude messages for performance
8
- *
9
- * @remarks
10
- * **Performance note:** This action loads all metadata items for a user into memory
11
- * and sorts client-side by `updatedAt`. DynamoDB sorts by SK (sessionId), so server-side
12
- * sorted pagination is not possible with the current schema.
13
- *
14
- * For users with thousands of sessions, consider adding a GSI on `userId + updatedAt`
15
- * to enable server-side sorting with DynamoDB `Limit` and `ScanIndexForward`.
16
- *
17
- * A safety limit of {@link MAX_TOTAL_ITEMS_IN_MEMORY} is applied to prevent
18
- * unbounded memory growth.
19
- *
20
- * @param params - Parameters for the list sessions operation
21
- * @returns Array of session metadata, sorted by most recent first
22
- * @throws Error if the operation fails or validation fails
23
- */
24
- export declare const listSessionsAction: (params: ListSessionsActionParams) => Promise<SessionMetadata[]>;
8
+ export declare function listSessions(context: HistoryContext): Promise<SessionMetadata[]>;
25
9
  //# sourceMappingURL=list-sessions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-sessions.d.ts","sourceRoot":"","sources":["../../../src/history/actions/list-sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG1E;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,wBAAwB,KAC/B,OAAO,CAAC,eAAe,EAAE,CAgE3B,CAAC"}
1
+ {"version":3,"file":"list-sessions.d.ts","sourceRoot":"","sources":["../../../src/history/actions/list-sessions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,UAAU,CAAC;AAEjE;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAuBtF"}
@@ -1,79 +1,36 @@
1
1
  "use strict";
2
- /**
3
- * List all sessions for a user
4
- */
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.listSessionsAction = void 0;
7
- const shared_1 = require("../../shared");
8
- const utils_1 = require("../utils");
3
+ exports.listSessions = listSessions;
4
+ const scan_1 = require("../../shared/dynamodb/scan");
5
+ const keys_1 = require("../internal/keys");
9
6
  /**
10
- * List all sessions for a user, sorted by most recent
11
- * Uses projection expression to exclude messages for performance
12
- *
13
- * @remarks
14
- * **Performance note:** This action loads all metadata items for a user into memory
15
- * and sorts client-side by `updatedAt`. DynamoDB sorts by SK (sessionId), so server-side
16
- * sorted pagination is not possible with the current schema.
17
- *
18
- * For users with thousands of sessions, consider adding a GSI on `userId + updatedAt`
19
- * to enable server-side sorting with DynamoDB `Limit` and `ScanIndexForward`.
20
- *
21
- * A safety limit of {@link MAX_TOTAL_ITEMS_IN_MEMORY} is applied to prevent
22
- * unbounded memory growth.
23
- *
24
- * @param params - Parameters for the list sessions operation
25
- * @returns Array of session metadata, sorted by most recent first
26
- * @throws Error if the operation fails or validation fails
7
+ * List all sessions as metadata summaries, newest-updated first. The scan is
8
+ * filtered to session items so the adapter works on a table shared with the
9
+ * checkpointer/store; foreign rows are also skipped defensively.
27
10
  */
28
- const listSessionsAction = async (params) => {
29
- const { client, tableName, userId, limit, signal } = params;
30
- // Validate inputs
31
- (0, utils_1.validateUserId)(userId);
32
- (0, utils_1.validateLimit)(limit);
11
+ async function listSessions(context) {
33
12
  const sessions = [];
34
- let lastEvaluatedKey;
35
- // Paginate through all results - must fetch ALL sessions before sorting
36
- // DynamoDB sorts by SK (sessionId), not updatedAt, so we cannot rely on
37
- // DynamoDB's Limit to return the most recent sessions
38
- do {
39
- const result = await (0, utils_1.withDynamoDBRetry)(async () => {
40
- return await client.query({
41
- TableName: tableName,
42
- KeyConditionExpression: 'userId = :userId',
43
- FilterExpression: 'itemType = :metadata',
44
- ExpressionAttributeValues: {
45
- ':userId': userId,
46
- ':metadata': 'metadata',
47
- },
48
- ProjectionExpression: 'sessionId, title, createdAt, updatedAt, messageCount',
49
- ExclusiveStartKey: lastEvaluatedKey,
50
- });
51
- }, { signal });
52
- if (!result.Items || result.Items.length === 0) {
53
- break;
54
- }
55
- // Map items to SessionMetadata
56
- const mappedSessions = result.Items.map((item) => ({
13
+ for await (const raw of (0, scan_1.paginateScan)({
14
+ client: context.client,
15
+ params: {
16
+ TableName: context.tableName,
17
+ FilterExpression: '#sk = :session',
18
+ ExpressionAttributeNames: { '#sk': 'SK' },
19
+ ExpressionAttributeValues: { ':session': keys_1.SESSION_SORT_KEY },
20
+ },
21
+ })) {
22
+ const item = raw;
23
+ if (item.SK !== keys_1.SESSION_SORT_KEY || typeof item.sessionId !== 'string')
24
+ continue;
25
+ sessions.push({
57
26
  sessionId: item.sessionId,
58
27
  title: item.title,
28
+ messageCount: item.messageCount,
59
29
  createdAt: item.createdAt,
60
30
  updatedAt: item.updatedAt,
61
- messageCount: item.messageCount,
62
- }));
63
- sessions.push(...mappedSessions);
64
- // Safety limit: prevent unbounded memory growth. Users near this bound should
65
- // add a (userId, updatedAt) GSI — see method JSDoc.
66
- if (sessions.length >= shared_1.MAX_TOTAL_ITEMS_IN_MEMORY) {
67
- (0, shared_1.getLogger)().warn(`listSessions truncated at ${shared_1.MAX_TOTAL_ITEMS_IN_MEMORY} items for userId="${userId}"; ` +
68
- `older sessions are not returned. Add a GSI on (userId, updatedAt) for full coverage.`);
69
- break;
70
- }
71
- lastEvaluatedKey = result.LastEvaluatedKey;
72
- } while (lastEvaluatedKey);
73
- // Sort by most recent first (updatedAt DESC)
74
- sessions.sort((a, b) => b.updatedAt - a.updatedAt);
75
- // Enforce limit on final result
76
- return limit ? sessions.slice(0, limit) : sessions;
77
- };
78
- exports.listSessionsAction = listSessionsAction;
31
+ });
32
+ }
33
+ sessions.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
34
+ return sessions;
35
+ }
79
36
  //# sourceMappingURL=list-sessions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-sessions.js","sourceRoot":"","sources":["../../../src/history/actions/list-sessions.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yCAAoE;AAEpE,oCAA4E;AAE5E;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,kBAAkB,GAAG,KAAK,EACrC,MAAgC,EACJ,EAAE;IAC9B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAE5D,kBAAkB;IAClB,IAAA,sBAAc,EAAC,MAAM,CAAC,CAAC;IACvB,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC;IAErB,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,IAAI,gBAAiD,CAAC;IAEtD,wEAAwE;IACxE,wEAAwE;IACxE,sDAAsD;IACtD,GAAG,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAiB,EACpC,KAAK,IAAI,EAAE;YACT,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC;gBACxB,SAAS,EAAE,SAAS;gBACpB,sBAAsB,EAAE,kBAAkB;gBAC1C,gBAAgB,EAAE,sBAAsB;gBACxC,yBAAyB,EAAE;oBACzB,SAAS,EAAE,MAAM;oBACjB,WAAW,EAAE,UAAU;iBACxB;gBACD,oBAAoB,EAAE,sDAAsD;gBAC5E,iBAAiB,EAAE,gBAAgB;aACpC,CAAC,CAAC;QACL,CAAC,EACD,EAAE,MAAM,EAAE,CACX,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM;QACR,CAAC;QAED,+BAA+B;QAC/B,MAAM,cAAc,GAAsB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpE,SAAS,EAAE,IAAI,CAAC,SAAmB;YACnC,KAAK,EAAE,IAAI,CAAC,KAAe;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAmB;YACnC,SAAS,EAAE,IAAI,CAAC,SAAmB;YACnC,YAAY,EAAE,IAAI,CAAC,YAAsB;SAC1C,CAAC,CAAC,CAAC;QAEJ,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QAEjC,8EAA8E;QAC9E,oDAAoD;QACpD,IAAI,QAAQ,CAAC,MAAM,IAAI,kCAAyB,EAAE,CAAC;YACjD,IAAA,kBAAS,GAAE,CAAC,IAAI,CACd,6BAA6B,kCAAyB,sBAAsB,MAAM,KAAK;gBACrF,sFAAsF,CACzF,CAAC;YACF,MAAM;QACR,CAAC;QAED,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC7C,CAAC,QAAQ,gBAAgB,EAAE;IAE3B,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAEnD,gCAAgC;IAChC,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrD,CAAC,CAAC;AAlEW,QAAA,kBAAkB,sBAkE7B"}
1
+ {"version":3,"file":"list-sessions.js","sourceRoot":"","sources":["../../../src/history/actions/list-sessions.ts"],"names":[],"mappings":";;AAUA,oCAuBC;AAjCD,qDAA0D;AAC1D,2CAAoD;AAIpD;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,OAAuB;IACxD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAA,mBAAY,EAAC;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE;YACN,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,gBAAgB,EAAE,gBAAgB;YAClC,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;YACzC,yBAAyB,EAAE,EAAE,UAAU,EAAE,uBAAgB,EAAE;SAC5D;KACF,CAAC,EAAE,CAAC;QACH,MAAM,IAAI,GAAG,GAAsB,CAAC;QACpC,IAAI,IAAI,CAAC,EAAE,KAAK,uBAAgB,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;YAAE,SAAS;QACjF,QAAQ,CAAC,IAAI,CAAC;YACZ,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { HistoryContext } from '../internal/setup';
2
+ /**
3
+ * Recompute `messageCount` from the authoritative number of stored message items
4
+ * and write it back, repairing any drift. A repair tool: the append path keeps
5
+ * the count consistent transactionally, so this is only needed after external
6
+ * corruption. Run it when the session is quiescent — it `SET`s the count, so a
7
+ * concurrent append's increment could be clobbered. Returns the reconciled count.
8
+ */
9
+ export declare function reconcileMessageCount(context: HistoryContext, sessionId: string): Promise<number>;
10
+ //# sourceMappingURL=reconcile-count.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile-count.d.ts","sourceRoot":"","sources":["../../../src/history/actions/reconcile-count.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAiBxD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAajB"}