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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/README.md +1820 -290
  2. package/dist/cjs/backfill/backfill.d.ts +171 -0
  3. package/dist/cjs/backfill/backfill.js +177 -0
  4. package/dist/cjs/checkpointer/actions/delete-thread.d.ts +50 -0
  5. package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
  6. package/dist/cjs/checkpointer/actions/get-tuple.d.ts +36 -0
  7. package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
  8. package/dist/cjs/checkpointer/actions/list.d.ts +55 -0
  9. package/dist/cjs/checkpointer/actions/list.js +70 -0
  10. package/dist/cjs/checkpointer/actions/put-writes.d.ts +49 -0
  11. package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
  12. package/dist/cjs/checkpointer/actions/put.d.ts +95 -0
  13. package/dist/cjs/checkpointer/actions/put.js +79 -0
  14. package/dist/cjs/checkpointer/internal/delta-history.d.ts +124 -0
  15. package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
  16. package/dist/cjs/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/cjs/checkpointer/internal/listing.js +104 -0
  18. package/dist/cjs/checkpointer/internal/parse.d.ts +298 -0
  19. package/dist/cjs/checkpointer/internal/parse.js +184 -0
  20. package/dist/cjs/checkpointer/internal/pending-writes.d.ts +314 -0
  21. package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
  22. package/dist/cjs/checkpointer/internal/read.d.ts +135 -0
  23. package/dist/cjs/checkpointer/internal/read.js +132 -0
  24. package/dist/cjs/checkpointer/internal/rows.d.ts +644 -0
  25. package/dist/cjs/checkpointer/internal/rows.js +356 -0
  26. package/dist/cjs/checkpointer/internal/setup.d.ts +47 -0
  27. package/dist/cjs/checkpointer/internal/setup.js +25 -0
  28. package/dist/cjs/checkpointer/saver.d.ts +306 -0
  29. package/dist/cjs/checkpointer/saver.js +56 -0
  30. package/dist/cjs/checkpointer/types.d.ts +51 -0
  31. package/dist/cjs/factory/factory.d.ts +154 -0
  32. package/dist/cjs/factory/factory.js +137 -0
  33. package/dist/{factory → cjs/factory}/types.d.ts +33 -14
  34. package/dist/cjs/history/actions/add-messages.d.ts +51 -0
  35. package/dist/cjs/history/actions/add-messages.js +17 -0
  36. package/dist/cjs/history/actions/clear.d.ts +52 -0
  37. package/dist/cjs/history/actions/clear.js +29 -0
  38. package/dist/cjs/history/actions/get-messages.d.ts +60 -0
  39. package/dist/cjs/history/actions/get-messages.js +58 -0
  40. package/dist/cjs/history/actions/list-sessions.d.ts +55 -0
  41. package/dist/cjs/history/actions/list-sessions.js +67 -0
  42. package/dist/cjs/history/actions/reconcile-count.d.ts +49 -0
  43. package/dist/cjs/history/actions/reconcile-count.js +8 -0
  44. package/dist/cjs/history/chat-message-history.d.ts +267 -0
  45. package/dist/cjs/history/chat-message-history.js +61 -0
  46. package/dist/cjs/history/internal/append.d.ts +244 -0
  47. package/dist/cjs/history/internal/append.js +267 -0
  48. package/dist/cjs/history/internal/message-read.d.ts +84 -0
  49. package/dist/cjs/history/internal/message-read.js +93 -0
  50. package/dist/cjs/history/internal/parse.d.ts +153 -0
  51. package/dist/cjs/history/internal/parse.js +113 -0
  52. package/dist/cjs/history/internal/rows.d.ts +196 -0
  53. package/dist/cjs/history/internal/rows.js +96 -0
  54. package/dist/cjs/history/internal/session.d.ts +350 -0
  55. package/dist/cjs/history/internal/session.js +296 -0
  56. package/dist/cjs/history/internal/setup.d.ts +64 -0
  57. package/dist/cjs/history/internal/setup.js +60 -0
  58. package/dist/cjs/history/session-adapter.d.ts +112 -0
  59. package/dist/cjs/history/session-adapter.js +38 -0
  60. package/dist/cjs/history/types.d.ts +102 -0
  61. package/dist/cjs/index.d.ts +53 -0
  62. package/dist/cjs/index.js +25 -0
  63. package/dist/cjs/package.json +1 -0
  64. package/dist/cjs/shared/adapter.d.ts +146 -0
  65. package/dist/cjs/shared/adapter.js +70 -0
  66. package/dist/cjs/shared/clock.d.ts +52 -0
  67. package/dist/cjs/shared/clock.js +14 -0
  68. package/dist/cjs/shared/codec/codec.d.ts +336 -0
  69. package/dist/cjs/shared/codec/codec.js +162 -0
  70. package/dist/cjs/shared/codec/compression.d.ts +66 -0
  71. package/dist/cjs/shared/codec/compression.js +45 -0
  72. package/dist/cjs/shared/codec/json-serde.d.ts +80 -0
  73. package/dist/cjs/shared/codec/json-serde.js +58 -0
  74. package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +22 -2
  75. package/dist/{shared → cjs/shared}/codec/s3/client-types.js +0 -1
  76. package/dist/cjs/shared/codec/s3/client.d.ts +63 -0
  77. package/dist/cjs/shared/codec/s3/client.js +78 -0
  78. package/dist/cjs/shared/codec/s3/config.d.ts +260 -0
  79. package/dist/cjs/shared/codec/s3/config.js +92 -0
  80. package/dist/cjs/shared/codec/s3/lifecycle.d.ts +220 -0
  81. package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
  82. package/dist/cjs/shared/codec/s3/offloader.d.ts +428 -0
  83. package/dist/cjs/shared/codec/s3/offloader.js +289 -0
  84. package/dist/cjs/shared/concurrency.d.ts +43 -0
  85. package/dist/{shared → cjs/shared}/concurrency.js +10 -9
  86. package/dist/cjs/shared/dynamodb/abort.d.ts +47 -0
  87. package/dist/cjs/shared/dynamodb/abort.js +16 -0
  88. package/dist/cjs/shared/dynamodb/batch-write.d.ts +86 -0
  89. package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
  90. package/dist/cjs/shared/dynamodb/cancellation.d.ts +124 -0
  91. package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
  92. package/dist/cjs/shared/dynamodb/client.d.ts +177 -0
  93. package/dist/{shared → cjs/shared}/dynamodb/client.js +12 -14
  94. package/dist/cjs/shared/dynamodb/idempotent-write.d.ts +596 -0
  95. package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
  96. package/dist/cjs/shared/dynamodb/paginate.d.ts +111 -0
  97. package/dist/cjs/shared/dynamodb/paginate.js +90 -0
  98. package/dist/cjs/shared/dynamodb/partition-delete.d.ts +204 -0
  99. package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
  100. package/dist/cjs/shared/dynamodb/recency-index.d.ts +243 -0
  101. package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
  102. package/dist/cjs/shared/dynamodb/retry.d.ts +317 -0
  103. package/dist/cjs/shared/dynamodb/retry.js +193 -0
  104. package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
  105. package/dist/cjs/shared/dynamodb/row-size.js +30 -0
  106. package/dist/cjs/shared/dynamodb/table-schema.d.ts +199 -0
  107. package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
  108. package/dist/cjs/shared/errors/base-error.d.ts +231 -0
  109. package/dist/cjs/shared/errors/base-error.js +73 -0
  110. package/dist/cjs/shared/errors/boundary.d.ts +86 -0
  111. package/dist/cjs/shared/errors/boundary.js +61 -0
  112. package/dist/cjs/shared/errors/classify.d.ts +206 -0
  113. package/dist/cjs/shared/errors/classify.js +232 -0
  114. package/dist/cjs/shared/errors/error-code.d.ts +95 -0
  115. package/dist/{shared → cjs/shared}/errors/error-code.js +12 -2
  116. package/dist/cjs/shared/errors/errors.d.ts +233 -0
  117. package/dist/cjs/shared/errors/errors.js +123 -0
  118. package/dist/cjs/shared/logging/logger.d.ts +80 -0
  119. package/dist/cjs/shared/logging/logger.js +30 -0
  120. package/dist/cjs/shared/logging/redaction.d.ts +123 -0
  121. package/dist/cjs/shared/logging/redaction.js +145 -0
  122. package/dist/cjs/shared/logging/secret-patterns.d.ts +227 -0
  123. package/dist/cjs/shared/logging/secret-patterns.js +93 -0
  124. package/dist/cjs/shared/logging/truncate.d.ts +197 -0
  125. package/dist/cjs/shared/logging/truncate.js +31 -0
  126. package/dist/cjs/shared/options.d.ts +100 -0
  127. package/dist/cjs/shared/ulid.d.ts +80 -0
  128. package/dist/{shared → cjs/shared}/ulid.js +7 -21
  129. package/dist/cjs/shared/validation/collaborators.d.ts +160 -0
  130. package/dist/cjs/shared/validation/collaborators.js +79 -0
  131. package/dist/cjs/shared/validation/option-shape.d.ts +91 -0
  132. package/dist/cjs/shared/validation/option-shape.js +31 -0
  133. package/dist/cjs/shared/validation/options.d.ts +145 -0
  134. package/dist/cjs/shared/validation/options.js +166 -0
  135. package/dist/cjs/shared/validation/primitives.d.ts +292 -0
  136. package/dist/cjs/shared/validation/primitives.js +114 -0
  137. package/dist/cjs/shared/validation/ttl.d.ts +94 -0
  138. package/dist/cjs/shared/validation/ttl.js +52 -0
  139. package/dist/cjs/store/actions/list-namespaces.d.ts +79 -0
  140. package/dist/cjs/store/actions/list-namespaces.js +92 -0
  141. package/dist/cjs/store/actions/put.d.ts +43 -0
  142. package/dist/cjs/store/actions/put.js +49 -0
  143. package/dist/cjs/store/actions/reconcile-vector-index.d.ts +38 -0
  144. package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
  145. package/dist/cjs/store/actions/search.d.ts +38 -0
  146. package/dist/cjs/store/actions/search.js +26 -0
  147. package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
  148. package/dist/cjs/store/internal/batch-plan.js +32 -0
  149. package/dist/cjs/store/internal/filter.d.ts +43 -0
  150. package/dist/cjs/store/internal/filter.js +64 -0
  151. package/dist/cjs/store/internal/get-item.d.ts +77 -0
  152. package/dist/cjs/store/internal/get-item.js +58 -0
  153. package/dist/cjs/store/internal/item-write.d.ts +270 -0
  154. package/dist/cjs/store/internal/item-write.js +181 -0
  155. package/dist/cjs/store/internal/parse.d.ts +230 -0
  156. package/dist/cjs/store/internal/parse.js +180 -0
  157. package/dist/cjs/store/internal/rows.d.ts +359 -0
  158. package/dist/cjs/store/internal/rows.js +166 -0
  159. package/dist/cjs/store/internal/semantic-search.d.ts +168 -0
  160. package/dist/{store/internal/text-path.js → cjs/store/internal/semantic-search.js} +92 -28
  161. package/dist/cjs/store/internal/setup.d.ts +96 -0
  162. package/dist/cjs/store/internal/setup.js +103 -0
  163. package/dist/cjs/store/internal/table-search.d.ts +100 -0
  164. package/dist/cjs/store/internal/table-search.js +123 -0
  165. package/dist/cjs/store/internal/vector-index.d.ts +258 -0
  166. package/dist/cjs/store/internal/vector-index.js +269 -0
  167. package/dist/cjs/store/store.d.ts +329 -0
  168. package/dist/cjs/store/store.js +97 -0
  169. package/dist/cjs/store/types.d.ts +111 -0
  170. package/dist/cjs/store/vector-backend.d.ts +104 -0
  171. package/dist/cjs/store/vector-backend.js +4 -0
  172. package/dist/esm/backfill/backfill.d.ts +171 -0
  173. package/dist/esm/backfill/backfill.js +170 -0
  174. package/dist/esm/checkpointer/actions/delete-thread.d.ts +50 -0
  175. package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
  176. package/dist/esm/checkpointer/actions/get-tuple.d.ts +36 -0
  177. package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
  178. package/dist/esm/checkpointer/actions/list.d.ts +55 -0
  179. package/dist/esm/checkpointer/actions/list.js +67 -0
  180. package/dist/esm/checkpointer/actions/put-writes.d.ts +49 -0
  181. package/dist/esm/checkpointer/actions/put-writes.js +18 -0
  182. package/dist/esm/checkpointer/actions/put.d.ts +95 -0
  183. package/dist/esm/checkpointer/actions/put.js +75 -0
  184. package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
  185. package/dist/esm/checkpointer/internal/delta-history.js +126 -0
  186. package/dist/esm/checkpointer/internal/listing.d.ts +149 -0
  187. package/dist/esm/checkpointer/internal/listing.js +95 -0
  188. package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
  189. package/dist/esm/checkpointer/internal/parse.js +169 -0
  190. package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
  191. package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
  192. package/dist/esm/checkpointer/internal/read.d.ts +135 -0
  193. package/dist/esm/checkpointer/internal/read.js +125 -0
  194. package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
  195. package/dist/esm/checkpointer/internal/rows.js +323 -0
  196. package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
  197. package/dist/esm/checkpointer/internal/setup.js +21 -0
  198. package/dist/esm/checkpointer/saver.d.ts +306 -0
  199. package/dist/esm/checkpointer/saver.js +52 -0
  200. package/dist/esm/checkpointer/types.d.ts +51 -0
  201. package/dist/esm/checkpointer/types.js +1 -0
  202. package/dist/esm/factory/factory.d.ts +154 -0
  203. package/dist/esm/factory/factory.js +133 -0
  204. package/dist/esm/factory/types.d.ts +76 -0
  205. package/dist/esm/factory/types.js +1 -0
  206. package/dist/esm/history/actions/add-messages.d.ts +51 -0
  207. package/dist/esm/history/actions/add-messages.js +14 -0
  208. package/dist/esm/history/actions/clear.d.ts +52 -0
  209. package/dist/esm/history/actions/clear.js +26 -0
  210. package/dist/esm/history/actions/get-messages.d.ts +60 -0
  211. package/dist/esm/history/actions/get-messages.js +55 -0
  212. package/dist/esm/history/actions/list-sessions.d.ts +55 -0
  213. package/dist/esm/history/actions/list-sessions.js +64 -0
  214. package/dist/esm/history/actions/reconcile-count.d.ts +49 -0
  215. package/dist/esm/history/actions/reconcile-count.js +5 -0
  216. package/dist/esm/history/chat-message-history.d.ts +267 -0
  217. package/dist/esm/history/chat-message-history.js +57 -0
  218. package/dist/esm/history/internal/append.d.ts +244 -0
  219. package/dist/esm/history/internal/append.js +259 -0
  220. package/dist/esm/history/internal/message-read.d.ts +84 -0
  221. package/dist/esm/history/internal/message-read.js +89 -0
  222. package/dist/esm/history/internal/parse.d.ts +153 -0
  223. package/dist/esm/history/internal/parse.js +105 -0
  224. package/dist/esm/history/internal/rows.d.ts +196 -0
  225. package/dist/esm/history/internal/rows.js +83 -0
  226. package/dist/esm/history/internal/session.d.ts +350 -0
  227. package/dist/esm/history/internal/session.js +285 -0
  228. package/dist/esm/history/internal/setup.d.ts +64 -0
  229. package/dist/esm/history/internal/setup.js +56 -0
  230. package/dist/esm/history/session-adapter.d.ts +112 -0
  231. package/dist/esm/history/session-adapter.js +34 -0
  232. package/dist/esm/history/types.d.ts +102 -0
  233. package/dist/esm/history/types.js +1 -0
  234. package/dist/esm/index.d.ts +53 -0
  235. package/dist/esm/index.js +10 -0
  236. package/dist/esm/shared/adapter.d.ts +146 -0
  237. package/dist/esm/shared/adapter.js +65 -0
  238. package/dist/esm/shared/clock.d.ts +52 -0
  239. package/dist/esm/shared/clock.js +9 -0
  240. package/dist/esm/shared/codec/codec.d.ts +336 -0
  241. package/dist/esm/shared/codec/codec.js +150 -0
  242. package/dist/esm/shared/codec/compression.d.ts +66 -0
  243. package/dist/esm/shared/codec/compression.js +40 -0
  244. package/dist/esm/shared/codec/json-serde.d.ts +80 -0
  245. package/dist/esm/shared/codec/json-serde.js +54 -0
  246. package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
  247. package/dist/esm/shared/codec/s3/client-types.js +3 -0
  248. package/dist/esm/shared/codec/s3/client.d.ts +63 -0
  249. package/dist/esm/shared/codec/s3/client.js +40 -0
  250. package/dist/esm/shared/codec/s3/config.d.ts +260 -0
  251. package/dist/esm/shared/codec/s3/config.js +79 -0
  252. package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
  253. package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
  254. package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
  255. package/dist/esm/shared/codec/s3/offloader.js +278 -0
  256. package/dist/esm/shared/concurrency.d.ts +43 -0
  257. package/dist/esm/shared/concurrency.js +27 -0
  258. package/dist/esm/shared/dynamodb/abort.d.ts +47 -0
  259. package/dist/esm/shared/dynamodb/abort.js +12 -0
  260. package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
  261. package/dist/esm/shared/dynamodb/batch-write.js +74 -0
  262. package/dist/esm/shared/dynamodb/cancellation.d.ts +124 -0
  263. package/dist/esm/shared/dynamodb/cancellation.js +30 -0
  264. package/dist/esm/shared/dynamodb/client.d.ts +177 -0
  265. package/dist/esm/shared/dynamodb/client.js +35 -0
  266. package/dist/esm/shared/dynamodb/idempotent-write.d.ts +596 -0
  267. package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
  268. package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
  269. package/dist/esm/shared/dynamodb/paginate.js +84 -0
  270. package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
  271. package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
  272. package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
  273. package/dist/esm/shared/dynamodb/recency-index.js +136 -0
  274. package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
  275. package/dist/esm/shared/dynamodb/retry.js +180 -0
  276. package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
  277. package/dist/esm/shared/dynamodb/row-size.js +26 -0
  278. package/dist/esm/shared/dynamodb/table-schema.d.ts +199 -0
  279. package/dist/esm/shared/dynamodb/table-schema.js +43 -0
  280. package/dist/esm/shared/errors/base-error.d.ts +231 -0
  281. package/dist/esm/shared/errors/base-error.js +64 -0
  282. package/dist/esm/shared/errors/boundary.d.ts +86 -0
  283. package/dist/esm/shared/errors/boundary.js +54 -0
  284. package/dist/esm/shared/errors/classify.d.ts +206 -0
  285. package/dist/esm/shared/errors/classify.js +220 -0
  286. package/dist/esm/shared/errors/error-code.d.ts +95 -0
  287. package/dist/esm/shared/errors/error-code.js +24 -0
  288. package/dist/esm/shared/errors/errors.d.ts +233 -0
  289. package/dist/esm/shared/errors/errors.js +110 -0
  290. package/dist/esm/shared/logging/logger.d.ts +80 -0
  291. package/dist/esm/shared/logging/logger.js +25 -0
  292. package/dist/esm/shared/logging/redaction.d.ts +123 -0
  293. package/dist/esm/shared/logging/redaction.js +140 -0
  294. package/dist/esm/shared/logging/secret-patterns.d.ts +227 -0
  295. package/dist/esm/shared/logging/secret-patterns.js +83 -0
  296. package/dist/esm/shared/logging/truncate.d.ts +197 -0
  297. package/dist/esm/shared/logging/truncate.js +25 -0
  298. package/dist/esm/shared/options.d.ts +100 -0
  299. package/dist/esm/shared/options.js +1 -0
  300. package/dist/esm/shared/ulid.d.ts +80 -0
  301. package/dist/esm/shared/ulid.js +77 -0
  302. package/dist/esm/shared/validation/collaborators.d.ts +160 -0
  303. package/dist/esm/shared/validation/collaborators.js +70 -0
  304. package/dist/esm/shared/validation/option-shape.d.ts +91 -0
  305. package/dist/esm/shared/validation/option-shape.js +24 -0
  306. package/dist/esm/shared/validation/options.d.ts +145 -0
  307. package/dist/esm/shared/validation/options.js +156 -0
  308. package/dist/esm/shared/validation/primitives.d.ts +292 -0
  309. package/dist/esm/shared/validation/primitives.js +100 -0
  310. package/dist/esm/shared/validation/ttl.d.ts +94 -0
  311. package/dist/esm/shared/validation/ttl.js +46 -0
  312. package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
  313. package/dist/esm/store/actions/list-namespaces.js +86 -0
  314. package/dist/esm/store/actions/put.d.ts +43 -0
  315. package/dist/esm/store/actions/put.js +46 -0
  316. package/dist/esm/store/actions/reconcile-vector-index.d.ts +38 -0
  317. package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
  318. package/dist/esm/store/actions/search.d.ts +38 -0
  319. package/dist/esm/store/actions/search.js +23 -0
  320. package/dist/esm/store/internal/batch-plan.d.ts +56 -0
  321. package/dist/esm/store/internal/batch-plan.js +28 -0
  322. package/dist/esm/store/internal/filter.d.ts +43 -0
  323. package/dist/esm/store/internal/filter.js +60 -0
  324. package/dist/esm/store/internal/get-item.d.ts +77 -0
  325. package/dist/esm/store/internal/get-item.js +54 -0
  326. package/dist/esm/store/internal/item-write.d.ts +270 -0
  327. package/dist/esm/store/internal/item-write.js +173 -0
  328. package/dist/esm/store/internal/parse.d.ts +230 -0
  329. package/dist/esm/store/internal/parse.js +169 -0
  330. package/dist/esm/store/internal/rows.d.ts +359 -0
  331. package/dist/esm/store/internal/rows.js +147 -0
  332. package/dist/esm/store/internal/semantic-search.d.ts +168 -0
  333. package/dist/esm/store/internal/semantic-search.js +200 -0
  334. package/dist/esm/store/internal/setup.d.ts +96 -0
  335. package/dist/esm/store/internal/setup.js +98 -0
  336. package/dist/esm/store/internal/table-search.d.ts +100 -0
  337. package/dist/esm/store/internal/table-search.js +119 -0
  338. package/dist/esm/store/internal/vector-index.d.ts +258 -0
  339. package/dist/esm/store/internal/vector-index.js +256 -0
  340. package/dist/esm/store/store.d.ts +329 -0
  341. package/dist/esm/store/store.js +93 -0
  342. package/dist/esm/store/types.d.ts +111 -0
  343. package/dist/esm/store/types.js +1 -0
  344. package/dist/esm/store/vector-backend.d.ts +104 -0
  345. package/dist/esm/store/vector-backend.js +1 -0
  346. package/package.json +68 -46
  347. package/dist/checkpointer/actions/delete-thread.d.ts +0 -10
  348. package/dist/checkpointer/actions/delete-thread.js +0 -38
  349. package/dist/checkpointer/actions/get-tuple.d.ts +0 -11
  350. package/dist/checkpointer/actions/get-tuple.js +0 -25
  351. package/dist/checkpointer/actions/list.d.ts +0 -20
  352. package/dist/checkpointer/actions/list.js +0 -113
  353. package/dist/checkpointer/actions/put-writes.d.ts +0 -15
  354. package/dist/checkpointer/actions/put-writes.js +0 -62
  355. package/dist/checkpointer/actions/put.d.ts +0 -17
  356. package/dist/checkpointer/actions/put.js +0 -73
  357. package/dist/checkpointer/internal/assemble.d.ts +0 -17
  358. package/dist/checkpointer/internal/assemble.js +0 -38
  359. package/dist/checkpointer/internal/checkpoint-write-verify.d.ts +0 -24
  360. package/dist/checkpointer/internal/checkpoint-write-verify.js +0 -67
  361. package/dist/checkpointer/internal/configurable.d.ts +0 -12
  362. package/dist/checkpointer/internal/configurable.js +0 -24
  363. package/dist/checkpointer/internal/fetch.d.ts +0 -19
  364. package/dist/checkpointer/internal/fetch.js +0 -88
  365. package/dist/checkpointer/internal/filter-match.d.ts +0 -13
  366. package/dist/checkpointer/internal/filter-match.js +0 -15
  367. package/dist/checkpointer/internal/item-reader.d.ts +0 -66
  368. package/dist/checkpointer/internal/item-reader.js +0 -113
  369. package/dist/checkpointer/internal/item-writer.d.ts +0 -35
  370. package/dist/checkpointer/internal/item-writer.js +0 -107
  371. package/dist/checkpointer/internal/keys.d.ts +0 -41
  372. package/dist/checkpointer/internal/keys.js +0 -117
  373. package/dist/checkpointer/internal/list-scope.d.ts +0 -61
  374. package/dist/checkpointer/internal/list-scope.js +0 -108
  375. package/dist/checkpointer/internal/pending-sends.d.ts +0 -13
  376. package/dist/checkpointer/internal/pending-sends.js +0 -29
  377. package/dist/checkpointer/internal/query.d.ts +0 -21
  378. package/dist/checkpointer/internal/query.js +0 -42
  379. package/dist/checkpointer/internal/regular-write.d.ts +0 -28
  380. package/dist/checkpointer/internal/regular-write.js +0 -66
  381. package/dist/checkpointer/internal/setup.d.ts +0 -33
  382. package/dist/checkpointer/internal/setup.js +0 -38
  383. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -29
  384. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  385. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -23
  386. package/dist/checkpointer/internal/special-write-cleanup.js +0 -50
  387. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -53
  388. package/dist/checkpointer/internal/special-write-verify.js +0 -80
  389. package/dist/checkpointer/internal/stored-channels.d.ts +0 -31
  390. package/dist/checkpointer/internal/stored-channels.js +0 -70
  391. package/dist/checkpointer/internal/validation.d.ts +0 -18
  392. package/dist/checkpointer/internal/validation.js +0 -40
  393. package/dist/checkpointer/internal/write-guard.d.ts +0 -20
  394. package/dist/checkpointer/internal/write-guard.js +0 -48
  395. package/dist/checkpointer/internal/write-index.d.ts +0 -36
  396. package/dist/checkpointer/internal/write-index.js +0 -41
  397. package/dist/checkpointer/saver.d.ts +0 -70
  398. package/dist/checkpointer/saver.js +0 -105
  399. package/dist/checkpointer/types.d.ts +0 -58
  400. package/dist/factory/factory.d.ts +0 -40
  401. package/dist/factory/factory.js +0 -87
  402. package/dist/history/actions/add-messages.d.ts +0 -15
  403. package/dist/history/actions/add-messages.js +0 -77
  404. package/dist/history/actions/clear.d.ts +0 -10
  405. package/dist/history/actions/clear.js +0 -34
  406. package/dist/history/actions/get-messages.d.ts +0 -17
  407. package/dist/history/actions/get-messages.js +0 -79
  408. package/dist/history/actions/list-sessions.d.ts +0 -13
  409. package/dist/history/actions/list-sessions.js +0 -53
  410. package/dist/history/actions/reconcile-count.d.ts +0 -12
  411. package/dist/history/actions/reconcile-count.js +0 -64
  412. package/dist/history/chat-message-history.d.ts +0 -73
  413. package/dist/history/chat-message-history.js +0 -111
  414. package/dist/history/internal/append-saga.d.ts +0 -25
  415. package/dist/history/internal/append-saga.js +0 -79
  416. package/dist/history/internal/compensation.d.ts +0 -25
  417. package/dist/history/internal/compensation.js +0 -92
  418. package/dist/history/internal/item-mapper.d.ts +0 -9
  419. package/dist/history/internal/item-mapper.js +0 -27
  420. package/dist/history/internal/keys.d.ts +0 -16
  421. package/dist/history/internal/keys.js +0 -48
  422. package/dist/history/internal/message-chunker.d.ts +0 -13
  423. package/dist/history/internal/message-chunker.js +0 -67
  424. package/dist/history/internal/message-transaction.d.ts +0 -25
  425. package/dist/history/internal/message-transaction.js +0 -61
  426. package/dist/history/internal/message-window.d.ts +0 -17
  427. package/dist/history/internal/message-window.js +0 -49
  428. package/dist/history/internal/query.d.ts +0 -23
  429. package/dist/history/internal/query.js +0 -39
  430. package/dist/history/internal/session-count.d.ts +0 -47
  431. package/dist/history/internal/session-count.js +0 -115
  432. package/dist/history/internal/session-title.d.ts +0 -19
  433. package/dist/history/internal/session-title.js +0 -43
  434. package/dist/history/internal/session-update.d.ts +0 -27
  435. package/dist/history/internal/session-update.js +0 -69
  436. package/dist/history/internal/setup.d.ts +0 -31
  437. package/dist/history/internal/setup.js +0 -43
  438. package/dist/history/internal/title-generator.d.ts +0 -12
  439. package/dist/history/internal/title-generator.js +0 -41
  440. package/dist/history/internal/ttl-anchor.d.ts +0 -24
  441. package/dist/history/internal/ttl-anchor.js +0 -38
  442. package/dist/history/internal/validation.d.ts +0 -25
  443. package/dist/history/internal/validation.js +0 -53
  444. package/dist/history/session-adapter.d.ts +0 -29
  445. package/dist/history/session-adapter.js +0 -35
  446. package/dist/history/types.d.ts +0 -69
  447. package/dist/index.d.ts +0 -29
  448. package/dist/index.js +0 -32
  449. package/dist/shared/clock.d.ts +0 -8
  450. package/dist/shared/clock.js +0 -16
  451. package/dist/shared/codec/codec.d.ts +0 -53
  452. package/dist/shared/codec/codec.js +0 -66
  453. package/dist/shared/codec/compression.d.ts +0 -24
  454. package/dist/shared/codec/compression.js +0 -48
  455. package/dist/shared/codec/descriptor-keys.d.ts +0 -12
  456. package/dist/shared/codec/descriptor-keys.js +0 -14
  457. package/dist/shared/codec/encode.d.ts +0 -13
  458. package/dist/shared/codec/encode.js +0 -43
  459. package/dist/shared/codec/json-serde.d.ts +0 -7
  460. package/dist/shared/codec/json-serde.js +0 -17
  461. package/dist/shared/codec/payload-loss.d.ts +0 -12
  462. package/dist/shared/codec/payload-loss.js +0 -38
  463. package/dist/shared/codec/s3/adapter-config.d.ts +0 -13
  464. package/dist/shared/codec/s3/adapter-config.js +0 -22
  465. package/dist/shared/codec/s3/bounded-body.d.ts +0 -14
  466. package/dist/shared/codec/s3/bounded-body.js +0 -47
  467. package/dist/shared/codec/s3/client.d.ts +0 -18
  468. package/dist/shared/codec/s3/client.js +0 -46
  469. package/dist/shared/codec/s3/config.d.ts +0 -51
  470. package/dist/shared/codec/s3/config.js +0 -58
  471. package/dist/shared/codec/s3/delete.d.ts +0 -7
  472. package/dist/shared/codec/s3/delete.js +0 -28
  473. package/dist/shared/codec/s3/key-scope.d.ts +0 -23
  474. package/dist/shared/codec/s3/key-scope.js +0 -44
  475. package/dist/shared/codec/s3/lifecycle.d.ts +0 -14
  476. package/dist/shared/codec/s3/lifecycle.js +0 -63
  477. package/dist/shared/codec/s3/offloader.d.ts +0 -44
  478. package/dist/shared/codec/s3/offloader.js +0 -118
  479. package/dist/shared/codec/s3/orphans.d.ts +0 -23
  480. package/dist/shared/codec/s3/orphans.js +0 -71
  481. package/dist/shared/codec/s3/read-write.d.ts +0 -18
  482. package/dist/shared/codec/s3/read-write.js +0 -51
  483. package/dist/shared/codec/s3/retry.d.ts +0 -5
  484. package/dist/shared/codec/s3/retry.js +0 -22
  485. package/dist/shared/concurrency.d.ts +0 -6
  486. package/dist/shared/constants.d.ts +0 -112
  487. package/dist/shared/constants.js +0 -115
  488. package/dist/shared/dynamodb/abort.d.ts +0 -9
  489. package/dist/shared/dynamodb/abort.js +0 -27
  490. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  491. package/dist/shared/dynamodb/backoff.js +0 -48
  492. package/dist/shared/dynamodb/batch-write.d.ts +0 -22
  493. package/dist/shared/dynamodb/batch-write.js +0 -53
  494. package/dist/shared/dynamodb/cancellation.d.ts +0 -6
  495. package/dist/shared/dynamodb/cancellation.js +0 -7
  496. package/dist/shared/dynamodb/client.d.ts +0 -28
  497. package/dist/shared/dynamodb/conditional-put.d.ts +0 -67
  498. package/dist/shared/dynamodb/conditional-put.js +0 -76
  499. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -21
  500. package/dist/shared/dynamodb/drain-unprocessed.js +0 -43
  501. package/dist/shared/dynamodb/expiry.d.ts +0 -16
  502. package/dist/shared/dynamodb/expiry.js +0 -29
  503. package/dist/shared/dynamodb/paginate-core.d.ts +0 -24
  504. package/dist/shared/dynamodb/paginate-core.js +0 -82
  505. package/dist/shared/dynamodb/paginate.d.ts +0 -14
  506. package/dist/shared/dynamodb/paginate.js +0 -19
  507. package/dist/shared/dynamodb/partition-delete.d.ts +0 -39
  508. package/dist/shared/dynamodb/partition-delete.js +0 -71
  509. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -17
  510. package/dist/shared/dynamodb/retry-classifier.js +0 -118
  511. package/dist/shared/dynamodb/retry-policy.d.ts +0 -26
  512. package/dist/shared/dynamodb/retry-policy.js +0 -22
  513. package/dist/shared/dynamodb/retry.d.ts +0 -31
  514. package/dist/shared/dynamodb/retry.js +0 -57
  515. package/dist/shared/dynamodb/scan.d.ts +0 -14
  516. package/dist/shared/dynamodb/scan.js +0 -19
  517. package/dist/shared/dynamodb/types.d.ts +0 -23
  518. package/dist/shared/errors/base-error.d.ts +0 -30
  519. package/dist/shared/errors/base-error.js +0 -27
  520. package/dist/shared/errors/boundary.d.ts +0 -18
  521. package/dist/shared/errors/boundary.js +0 -46
  522. package/dist/shared/errors/error-code.d.ts +0 -13
  523. package/dist/shared/errors/errors.d.ts +0 -68
  524. package/dist/shared/errors/errors.js +0 -114
  525. package/dist/shared/errors/upstream-error.d.ts +0 -16
  526. package/dist/shared/errors/upstream-error.js +0 -27
  527. package/dist/shared/errors/wrap-error.d.ts +0 -7
  528. package/dist/shared/errors/wrap-error.js +0 -15
  529. package/dist/shared/logging/logger.d.ts +0 -18
  530. package/dist/shared/logging/logger.js +0 -15
  531. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  532. package/dist/shared/logging/redaction-walk.js +0 -112
  533. package/dist/shared/logging/redaction.d.ts +0 -39
  534. package/dist/shared/logging/redaction.js +0 -75
  535. package/dist/shared/logging/secret-patterns.d.ts +0 -92
  536. package/dist/shared/logging/secret-patterns.js +0 -133
  537. package/dist/shared/options.d.ts +0 -37
  538. package/dist/shared/ulid.d.ts +0 -23
  539. package/dist/shared/validation/options.d.ts +0 -8
  540. package/dist/shared/validation/options.js +0 -90
  541. package/dist/shared/validation/primitives.d.ts +0 -29
  542. package/dist/shared/validation/primitives.js +0 -82
  543. package/dist/shared/validation/ttl.d.ts +0 -28
  544. package/dist/shared/validation/ttl.js +0 -52
  545. package/dist/store/actions/get.d.ts +0 -13
  546. package/dist/store/actions/get.js +0 -73
  547. package/dist/store/actions/list-namespaces.d.ts +0 -8
  548. package/dist/store/actions/list-namespaces.js +0 -59
  549. package/dist/store/actions/put.d.ts +0 -10
  550. package/dist/store/actions/put.js +0 -96
  551. package/dist/store/actions/reconcile-vector-index.d.ts +0 -18
  552. package/dist/store/actions/reconcile-vector-index.js +0 -26
  553. package/dist/store/actions/search.d.ts +0 -9
  554. package/dist/store/actions/search.js +0 -34
  555. package/dist/store/internal/backend-search.d.ts +0 -4
  556. package/dist/store/internal/backend-search.js +0 -74
  557. package/dist/store/internal/batch-plan.d.ts +0 -11
  558. package/dist/store/internal/batch-plan.js +0 -52
  559. package/dist/store/internal/candidates.d.ts +0 -23
  560. package/dist/store/internal/candidates.js +0 -94
  561. package/dist/store/internal/filter.d.ts +0 -9
  562. package/dist/store/internal/filter.js +0 -85
  563. package/dist/store/internal/index-reconcile.d.ts +0 -21
  564. package/dist/store/internal/index-reconcile.js +0 -118
  565. package/dist/store/internal/index-sync.d.ts +0 -10
  566. package/dist/store/internal/index-sync.js +0 -25
  567. package/dist/store/internal/item-mapper.d.ts +0 -27
  568. package/dist/store/internal/item-mapper.js +0 -61
  569. package/dist/store/internal/keys.d.ts +0 -17
  570. package/dist/store/internal/keys.js +0 -41
  571. package/dist/store/internal/namespace-match.d.ts +0 -11
  572. package/dist/store/internal/namespace-match.js +0 -40
  573. package/dist/store/internal/option-validation.d.ts +0 -13
  574. package/dist/store/internal/option-validation.js +0 -77
  575. package/dist/store/internal/overwrite-swap.d.ts +0 -32
  576. package/dist/store/internal/overwrite-swap.js +0 -68
  577. package/dist/store/internal/persist.d.ts +0 -28
  578. package/dist/store/internal/persist.js +0 -64
  579. package/dist/store/internal/query.d.ts +0 -11
  580. package/dist/store/internal/query.js +0 -48
  581. package/dist/store/internal/ranker.d.ts +0 -18
  582. package/dist/store/internal/ranker.js +0 -39
  583. package/dist/store/internal/read-existing.d.ts +0 -23
  584. package/dist/store/internal/read-existing.js +0 -41
  585. package/dist/store/internal/score-direction.d.ts +0 -31
  586. package/dist/store/internal/score-direction.js +0 -38
  587. package/dist/store/internal/search-filter.d.ts +0 -3
  588. package/dist/store/internal/search-filter.js +0 -10
  589. package/dist/store/internal/semantic-search.d.ts +0 -34
  590. package/dist/store/internal/semantic-search.js +0 -87
  591. package/dist/store/internal/setup.d.ts +0 -36
  592. package/dist/store/internal/setup.js +0 -40
  593. package/dist/store/internal/text-path.d.ts +0 -17
  594. package/dist/store/internal/validation.d.ts +0 -18
  595. package/dist/store/internal/validation.js +0 -51
  596. package/dist/store/internal/write-verify.d.ts +0 -42
  597. package/dist/store/internal/write-verify.js +0 -71
  598. package/dist/store/store.d.ts +0 -61
  599. package/dist/store/store.js +0 -107
  600. package/dist/store/types.d.ts +0 -50
  601. package/dist/store/types.js +0 -2
  602. package/dist/store/vector-backend.d.ts +0 -43
  603. package/dist/store/vector-backend.js +0 -2
  604. /package/dist/{checkpointer → cjs/checkpointer}/types.js +0 -0
  605. /package/dist/{factory → cjs/factory}/types.js +0 -0
  606. /package/dist/{history → cjs/history}/types.js +0 -0
  607. /package/dist/{shared → cjs/shared}/options.js +0 -0
  608. /package/dist/{shared/dynamodb → cjs/store}/types.js +0 -0
@@ -0,0 +1,259 @@
1
+ import { nowIso } from '../../shared/clock.js';
2
+ import { PayloadLocation, collectS3Keys, } from '../../shared/codec/codec.js';
3
+ import { cleanUpS3Orphans } from '../../shared/codec/s3/offloader.js';
4
+ import { abortErrorFrom, isAbortError } from '../../shared/dynamodb/abort.js';
5
+ import { batchWriteAll } from '../../shared/dynamodb/batch-write.js';
6
+ import { conditionFailedAt, conditionalCheckFailure } from '../../shared/dynamodb/cancellation.js';
7
+ import { readRow, settledVerdict, transactIdempotently, verdictFor, } from '../../shared/dynamodb/idempotent-write.js';
8
+ import { SORT_KEY_ATTRIBUTE, rowKeyOf } from '../../shared/dynamodb/table-schema.js';
9
+ import { failureLabel, hasErrorCode, toError, } from '../../shared/errors/base-error.js';
10
+ import { refusedByService } from '../../shared/errors/classify.js';
11
+ import { ErrorCode } from '../../shared/errors/error-code.js';
12
+ import { compensationFailedError, retryBudgetMayStillLand, unsettledAppendError, } from '../../shared/errors/errors.js';
13
+ import { absorbLoggerFailure } from '../../shared/logging/logger.js';
14
+ import { truncateForLog } from '../../shared/logging/truncate.js';
15
+ import { buildMessageRow } from './rows.js';
16
+ import { buildSessionUpdate, deriveTitle, revertSessionCount, revertSessionCreation, } from './session.js';
17
+ import { MESSAGE_APPEND_RETRY_MAX_ATTEMPTS } from './setup.js';
18
+ const MAX_MESSAGES_PER_TRANSACTION = 99;
19
+ const MAX_TRANSACTION_BYTES = 3_500_000;
20
+ function keyOfFailedUpload(error) {
21
+ if (!hasErrorCode(error, ErrorCode.S3_OFFLOAD_FAILED))
22
+ return [];
23
+ const { operation, key } = error.context;
24
+ return operation === 'upload' && typeof key === 'string' ? [key] : [];
25
+ }
26
+ async function buildMessageRows(context, request) {
27
+ const { sessionId, signal } = request;
28
+ const ttlTimestamp = request.anchor?.ttlTimestamp;
29
+ const messageIds = request.messages.map(() => context.ulid());
30
+ const items = [];
31
+ try {
32
+ for (const [index, message] of request.messages.entries()) {
33
+ items.push(await buildMessageRow(context, { sessionId, messageId: messageIds[index], message, ttlTimestamp }, signal));
34
+ }
35
+ }
36
+ catch (error) {
37
+ if (context.offloader) {
38
+ await cleanUpS3Orphans(context.offloader, {
39
+ keys: [
40
+ ...collectS3Keys(items.map((item) => item.message)),
41
+ ...keyOfFailedUpload(error),
42
+ ],
43
+ operation: 'history.addMessages.encode',
44
+ logger: context.logger,
45
+ });
46
+ }
47
+ throw error;
48
+ }
49
+ return items;
50
+ }
51
+ export async function appendMessages(context, request) {
52
+ const items = await buildMessageRows(context, request);
53
+ const chunks = chunkBySize(items, MAX_MESSAGES_PER_TRANSACTION, MAX_TRANSACTION_BYTES);
54
+ await appendChunks(context, {
55
+ sessionId: request.sessionId,
56
+ chunks,
57
+ fields: {
58
+ now: nowIso(),
59
+ title: deriveTitle(request.messages),
60
+ ttlTimestamp: request.anchor?.ttlTimestamp,
61
+ forceTtlRefresh: request.anchor?.refresh,
62
+ restart: request.anchor?.expiredAnchor,
63
+ },
64
+ signal: request.signal,
65
+ });
66
+ }
67
+ function reportStep(context, report) {
68
+ absorbLoggerFailure(() => report(context.logger));
69
+ }
70
+ async function cleanBatchS3(context, chunks) {
71
+ if (!context.offloader)
72
+ return;
73
+ const descriptors = chunks.flat().map((item) => item.message);
74
+ await cleanUpS3Orphans(context.offloader, {
75
+ keys: collectS3Keys(descriptors),
76
+ operation: 'history.addMessages',
77
+ logger: context.logger,
78
+ });
79
+ }
80
+ async function rollbackCommitted(context, append, committed) {
81
+ const { sessionId } = append;
82
+ const { now, title } = append.fields;
83
+ const keys = committed.flatMap((chunk) => chunk.keys);
84
+ const total = committed.reduce((sum, chunk) => sum + chunk.count, 0);
85
+ if (keys.length === 0) {
86
+ await revertSessionCreation(context, sessionId, { total, createdAt: now, title });
87
+ return;
88
+ }
89
+ try {
90
+ await batchWriteAll(context.client, context.tableName, keys.map((Key) => ({ DeleteRequest: { Key } })), { retry: context.retry });
91
+ }
92
+ catch (error) {
93
+ const deleted = error.details
94
+ .succeededCount;
95
+ await revertSessionCount(context, sessionId, deleted, now);
96
+ throw error;
97
+ }
98
+ await revertSessionCreation(context, sessionId, { total, createdAt: now, title });
99
+ }
100
+ export async function compensate(context, append, failure) {
101
+ const { sessionId, chunks } = append;
102
+ const { committed, trigger, uncertain, unsettledBecause } = failure;
103
+ if (committed.length > 0) {
104
+ reportStep(context, (logger) => logger.warn('history.addMessages compensating committed chunks after a chunk failed', {
105
+ sessionId,
106
+ committedChunks: committed.length,
107
+ }));
108
+ }
109
+ const firstDead = committed.length + (uncertain ? 1 : 0);
110
+ await cleanBatchS3(context, chunks.slice(firstDead));
111
+ try {
112
+ await rollbackCommitted(context, append, committed);
113
+ }
114
+ catch (rollbackError) {
115
+ reportStep(context, (logger) => logger.error('history.addMessages rollback failed; messageCount may have drifted', {
116
+ sessionId,
117
+ committedChunks: committed.length,
118
+ }));
119
+ throw compensationFailedError(trigger, toError(rollbackError));
120
+ }
121
+ await cleanBatchS3(context, chunks.slice(0, committed.length));
122
+ if (!uncertain)
123
+ throw trigger;
124
+ reportStep(context, (logger) => logger.error('history.addMessages could not tell whether a failed chunk committed; messageCount may have drifted', {
125
+ sessionId,
126
+ committedChunks: committed.length,
127
+ reason: truncateForLog(failureLabel(unsettledBecause ?? trigger)),
128
+ }));
129
+ if (isAbortError(trigger))
130
+ throw trigger;
131
+ throw unsettledAppendError(trigger, unsettledBecause ?? trigger);
132
+ }
133
+ function chunkProbe(chunk) {
134
+ return {
135
+ key: rowKeyOf(chunk[0]),
136
+ kind: 'attribute',
137
+ attribute: SORT_KEY_ATTRIBUTE,
138
+ expected: chunk[0].SK,
139
+ };
140
+ }
141
+ async function settleFailedChunk(context, chunk, failure) {
142
+ const answeredRefusal = !isAbortError(failure) && !retryBudgetMayStillLand(failure) && refusedByService(failure);
143
+ if (answeredRefusal)
144
+ return { verdict: 'not-landed' };
145
+ const probe = chunkProbe(chunk);
146
+ let row;
147
+ try {
148
+ row = await readRow(context, probe);
149
+ }
150
+ catch (error) {
151
+ return { verdict: 'unverified', unsettledBecause: toError(error) };
152
+ }
153
+ const verdict = settledVerdict(verdictFor(probe, row), failure);
154
+ return verdict === 'unverified' ? { verdict, unsettledBecause: failure } : { verdict };
155
+ }
156
+ async function commitChunk(context, append, chunk, position) {
157
+ const fields = { ...append.fields, sessionId: append.sessionId, count: chunk.length };
158
+ try {
159
+ await writeMessageChunk(context, chunk, position === 0 ? fields : { ...fields, restart: undefined }, { signal: append.signal });
160
+ return undefined;
161
+ }
162
+ catch (error) {
163
+ return toError(error);
164
+ }
165
+ }
166
+ function asCommitted(chunk) {
167
+ return { keys: chunk.map((item) => rowKeyOf(item)), count: chunk.length };
168
+ }
169
+ export async function appendChunks(context, append) {
170
+ const committed = [];
171
+ for (const [position, chunk] of append.chunks.entries()) {
172
+ if (append.signal?.aborted) {
173
+ await compensate(context, append, {
174
+ committed,
175
+ trigger: abortErrorFrom(append.signal),
176
+ uncertain: false,
177
+ });
178
+ }
179
+ const failure = await commitChunk(context, append, chunk, position);
180
+ if (!failure) {
181
+ committed.push(asCommitted(chunk));
182
+ continue;
183
+ }
184
+ const settled = await settleFailedChunk(context, chunk, failure);
185
+ if (settled.verdict === 'landed')
186
+ committed.push(asCommitted(chunk));
187
+ if (settled.verdict === 'landed' && !isAbortError(failure))
188
+ continue;
189
+ await compensate(context, append, {
190
+ committed,
191
+ trigger: failure,
192
+ uncertain: settled.verdict === 'unverified',
193
+ unsettledBecause: settled.unsettledBecause,
194
+ });
195
+ }
196
+ }
197
+ function isTtlConditionLoss(error) {
198
+ return conditionFailedAt(error, 0) && conditionalCheckFailure(error) !== undefined;
199
+ }
200
+ async function attempt(context, items, fields, retry) {
201
+ await transactIdempotently(context, [
202
+ buildSessionUpdate(context.tableName, fields),
203
+ ...items.map((item) => ({ Put: { TableName: context.tableName, Item: item } })),
204
+ ], { signal: retry.signal, rng: retry.rng, minAttempts: MESSAGE_APPEND_RETRY_MAX_ATTEMPTS });
205
+ }
206
+ export async function writeMessageChunk(context, items, fields, retry = {}) {
207
+ const withIndex = { ...fields, indexShards: context.indexShards, writeId: context.ulid() };
208
+ try {
209
+ await attempt(context, items, withIndex, retry);
210
+ }
211
+ catch (error) {
212
+ const pinned = fields.forceTtlRefresh || fields.restart !== undefined;
213
+ if (pinned && isTtlConditionLoss(error)) {
214
+ await attempt(context, items, { ...withIndex, forceTtlRefresh: false, restart: undefined }, retry);
215
+ return;
216
+ }
217
+ throw error;
218
+ }
219
+ }
220
+ const ROW_OVERHEAD_BYTES = 256;
221
+ function utf8Bytes(value) {
222
+ return Buffer.byteLength(value, 'utf8');
223
+ }
224
+ function descriptorBytes(descriptor) {
225
+ const body = descriptor.location === PayloadLocation.INLINE
226
+ ? descriptor.bytes.length
227
+ : utf8Bytes(descriptor.s3Key);
228
+ return body + utf8Bytes(descriptor.serdeType);
229
+ }
230
+ export function estimateRowBytes(item) {
231
+ return (utf8Bytes(item.PK) +
232
+ utf8Bytes(item.SK) +
233
+ utf8Bytes(item.sessionId) +
234
+ descriptorBytes(item.message) +
235
+ ROW_OVERHEAD_BYTES);
236
+ }
237
+ function shouldFlush(chunk, next, limits) {
238
+ if (chunk.count === 0)
239
+ return false;
240
+ return chunk.count >= limits.maxItems || chunk.bytes + next > limits.maxBytes;
241
+ }
242
+ export function chunkBySize(items, maxItems, maxBytes) {
243
+ const chunks = [];
244
+ let current = [];
245
+ let currentBytes = 0;
246
+ for (const item of items) {
247
+ const size = estimateRowBytes(item);
248
+ if (shouldFlush({ count: current.length, bytes: currentBytes }, size, { maxItems, maxBytes })) {
249
+ chunks.push(current);
250
+ current = [];
251
+ currentBytes = 0;
252
+ }
253
+ current.push(item);
254
+ currentBytes += size;
255
+ }
256
+ if (current.length > 0)
257
+ chunks.push(current);
258
+ return chunks;
259
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Hides how a session's message key space is read.
3
+ *
4
+ * A read admits only rows this package wrote as a message of this session,
5
+ * refusing any other row in the key space rather than skipping it, treats an
6
+ * expired row as absent however long the sweep lags, walks newest-first when
7
+ * it wants the latest few and restores chronological order, and counts the
8
+ * rows the same way it reads them, so a repaired count is the number a read
9
+ * returns.
10
+ */
11
+ import type { ParsedWindow, SessionId } from './parse.js';
12
+ import { type MessageRow } from './rows.js';
13
+ import type { HistoryContext } from './setup.js';
14
+ /**
15
+ * Read the live message items a window selects, in chronological order.
16
+ *
17
+ * Without `limit` the query walks the session oldest-first. With it the query
18
+ * walks newest-first with a matching page cap and stops as soon as `limit`
19
+ * live items are in hand — rows past their TTL are skipped here, so a page can
20
+ * come back short and the walk simply continues — and the tail is then
21
+ * reversed back into chronological order. `before` becomes an exclusive upper
22
+ * sort-key bound: the message prefix plus the ULID time characters of that
23
+ * instant, which every message id from that millisecond onwards sorts after.
24
+ *
25
+ * Accepts: `window.limit` — absent asks for the whole session, which is what
26
+ * `getMessages()` with no arguments means; otherwise at least 1, which is why
27
+ * no zero case is handled below. `parseMessageWindow` refuses `0` for its
28
+ * own reason, and that refusal is also what keeps `Limit: 0` — which DynamoDB
29
+ * rejects outright with a raw `ValidationException` — out of the query built
30
+ * here. `window.before` — already parsed as a real date. `signal` — aborts
31
+ * between pages.
32
+ *
33
+ * Returns: the live messages in chronological order, oldest first, whichever
34
+ * direction the query walked.
35
+ *
36
+ * Throws: `FORMAT_UNSUPPORTED` for a row a newer version wrote — checked before
37
+ * the row's ttl, so the answer does not depend on the reading machine's clock;
38
+ * `VALIDATION` naming `message` for a row in this session's message key
39
+ * space that this adapter did not write, checked before the ttl for the same
40
+ * reason; `ABORTED`; whatever the query throws.
41
+ *
42
+ * Guarantees: strongly consistent, so the turn just appended is visible to the
43
+ * very next read. An unlimited window is deliberately uncapped — silently
44
+ * truncating a conversation is worse than a slow read, and a caller that wants
45
+ * a bound passes `limit` — so past {@link LIST_SCAN_WARN_THRESHOLD} messages
46
+ * the read still succeeds and an operator is told the session is unusually
47
+ * large.
48
+ */
49
+ export declare function readWindow(context: HistoryContext, sessionId: SessionId, window: ParsedWindow, signal?: AbortSignal): Promise<MessageRow[]>;
50
+ /**
51
+ * The number of message rows a session holds, counted the way the read path
52
+ * counts them.
53
+ *
54
+ * Only rows `getMessages` would return are counted: an expired message that
55
+ * DynamoDB's TTL sweep has not yet removed is invisible to every reader, so
56
+ * counting it would "repair" `messageCount` to a number nobody ever sees. The
57
+ * count is therefore a definition, not an implementation detail — it is what
58
+ * makes the repaired value agree with what the session returns. For the same
59
+ * reason a message a newer release wrote, and a row in the message key space
60
+ * that this adapter did not write, are both refused rather than counted:
61
+ * `getMessages` refuses them.
62
+ *
63
+ * Accepts: `sessionId` — validated by the caller. `signal` — aborts the reads.
64
+ *
65
+ * Returns: how many messages a reader would actually see right now.
66
+ *
67
+ * Throws: `FORMAT_UNSUPPORTED` for a message row a newer release wrote, checked
68
+ * before the row's ttl as `getMessages` checks it; `VALIDATION` naming
69
+ * `message` for a row in the message key space that is not one of this
70
+ * adapter's, which `getMessages` refuses too; whatever the query throws
71
+ * after retries; `ABORTED`.
72
+ *
73
+ * Guarantees: each row comes back projected to its identity, its format
74
+ * version and its ttl, so no message payload is transferred however large the
75
+ * session is — the descriptor is projected by the one nested path
76
+ * `message.location` that every descriptor this package has written carries,
77
+ * which proves the attribute is there and a map without reading the bytes it
78
+ * holds. Every check runs here rather than in a filter, because a filter would
79
+ * drop an expired row before its version could be checked. The pages are
80
+ * walked by the shared paginator with both of its caps lifted: a partial count
81
+ * is not a repair, it is a new and wrong number, so the count either completes
82
+ * or fails.
83
+ */
84
+ export declare function countLiveMessages(context: HistoryContext, sessionId: SessionId, signal?: AbortSignal): Promise<number>;
@@ -0,0 +1,89 @@
1
+ import { nowSeconds } from '../../shared/clock.js';
2
+ import { LIST_SCAN_WARN_THRESHOLD, paginateQuery } from '../../shared/dynamodb/paginate.js';
3
+ import { retryFor } from '../../shared/dynamodb/retry.js';
4
+ import { isExpiredRow, assertReadableRow } from '../../shared/dynamodb/table-schema.js';
5
+ import { validationError } from '../../shared/errors/errors.js';
6
+ import { truncateForLog } from '../../shared/logging/truncate.js';
7
+ import { ulidTimePrefix } from '../../shared/ulid.js';
8
+ import { messageQuery, messageSortKey, parseMessageRow } from './rows.js';
9
+ function parseSessionMessageRow(context, sessionId, raw) {
10
+ assertReadableRow(raw, 'message');
11
+ const item = parseMessageRow(raw);
12
+ if (item)
13
+ return item;
14
+ context.logger.warn('getMessages: refused a row that is not a chat message item', {
15
+ sessionId,
16
+ sortKey: truncateForLog(raw.SK),
17
+ });
18
+ throw validationError('a row in the message key space of this session is not a chat message item this package ' +
19
+ 'wrote: its `sessionId` or `message` attribute is absent, is of the wrong type, or names ' +
20
+ 'another session. The `warn` logged alongside this names the row', 'message');
21
+ }
22
+ export async function readWindow(context, sessionId, window, signal) {
23
+ const now = nowSeconds();
24
+ const limit = window.limit ?? Number.POSITIVE_INFINITY;
25
+ const items = [];
26
+ for await (const raw of paginateQuery({
27
+ retry: retryFor(context, signal),
28
+ signal,
29
+ client: context.client,
30
+ params: messageQuery(context.tableName, sessionId, {
31
+ consistent: true,
32
+ descending: window.limit !== undefined,
33
+ limit: window.limit,
34
+ beforeSortKey: window.before && messageSortKey(ulidTimePrefix(window.before.getTime())),
35
+ }),
36
+ maxItems: Number.POSITIVE_INFINITY,
37
+ maxIterations: Number.POSITIVE_INFINITY,
38
+ })) {
39
+ const item = parseSessionMessageRow(context, sessionId, raw);
40
+ if (isExpiredRow(item, now))
41
+ continue;
42
+ items.push(item);
43
+ if (items.length >= limit)
44
+ break;
45
+ }
46
+ if (items.length >= LIST_SCAN_WARN_THRESHOLD) {
47
+ context.logger.warn('getMessages: a session holds very many messages; the read is complete but slow. Pass a ' +
48
+ '`limit` to read only the newest turns', { sessionId, messages: items.length });
49
+ }
50
+ return window.limit === undefined ? items : items.reverse();
51
+ }
52
+ function parseCountableRow(raw, sessionId) {
53
+ assertReadableRow(raw, 'message');
54
+ const item = parseMessageRow(raw);
55
+ if (item)
56
+ return item;
57
+ throw validationError(`session "${sessionId}" holds a row in its message key space that is not a chat message ` +
58
+ 'item this package wrote, so its messages cannot be counted: a read of the session ' +
59
+ 'reports the same row and names it. Remove or repair the row, then reconcile again', 'message');
60
+ }
61
+ export async function countLiveMessages(context, sessionId, signal) {
62
+ const now = nowSeconds();
63
+ const query = messageQuery(context.tableName, sessionId, { consistent: true });
64
+ let total = 0;
65
+ for await (const raw of paginateQuery({
66
+ retry: retryFor(context, signal),
67
+ signal,
68
+ client: context.client,
69
+ params: {
70
+ ...query,
71
+ ProjectionExpression: '#pk, #sid, #msg.#loc, #v, #ttl',
72
+ ExpressionAttributeNames: {
73
+ ...query.ExpressionAttributeNames,
74
+ '#sid': 'sessionId',
75
+ '#msg': 'message',
76
+ '#loc': 'location',
77
+ '#v': 'v',
78
+ '#ttl': 'ttl',
79
+ },
80
+ },
81
+ maxItems: Number.POSITIVE_INFINITY,
82
+ maxIterations: Number.POSITIVE_INFINITY,
83
+ })) {
84
+ const row = parseCountableRow(raw, sessionId);
85
+ if (!isExpiredRow(row, now))
86
+ total += 1;
87
+ }
88
+ return total;
89
+ }
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Hides the rules chat-history input must meet before anything reads it.
3
+ *
4
+ * A session id, an append's messages, a read window and the listing options
5
+ * are each parsed once into a type only this module can build (record 21), so
6
+ * an action that holds one never checks it again. Which messages may be
7
+ * stored is decided by the read side's own rebuild, so write and read agree
8
+ * by construction, and which instants a `before` may name follows from the
9
+ * range a message id can express.
10
+ */
11
+ import { type BaseMessage, type StoredMessage } from '@langchain/core/messages';
12
+ import { type PageLimit } from '../../shared/validation/primitives.js';
13
+ import type { GetMessagesOptions, ListSessionsOptions, MessageWindow } from '../types.js';
14
+ declare const sessionIdBrand: unique symbol;
15
+ declare const storableMessagesBrand: unique symbol;
16
+ declare const parsedWindowBrand: unique symbol;
17
+ /**
18
+ * A session id checked as the partition key it becomes. {@link parseSessionId}
19
+ * is the only way to obtain one, so an internal function that asks for a
20
+ * `SessionId` cannot be handed one nobody checked, and does not check it again.
21
+ * Each of the four history actions that take one — add, clear, get and
22
+ * reconcile — parses it on every call, and the session adapter parses the id
23
+ * it is bound to when it is built. The brand is phantom: at run time it is the
24
+ * caller's string.
25
+ */
26
+ export type SessionId = string & {
27
+ readonly [sessionIdBrand]: true;
28
+ };
29
+ /**
30
+ * Messages in their stored form, each one proven to rebuild on the read side.
31
+ * Built only by {@link parseStoredMessages}; the array is the one
32
+ * {@link parseMessages} made, which no caller holds.
33
+ */
34
+ export type StorableMessages = StoredMessage[] & {
35
+ readonly [storableMessagesBrand]: true;
36
+ };
37
+ /**
38
+ * A conversation window checked against the page rule and the range a message
39
+ * id can express, holding only the keys the caller gave. Built only by
40
+ * {@link parseMessageWindow}; its `before` is a copy, so a caller moving its own
41
+ * `Date` afterwards moves nothing this package reads.
42
+ */
43
+ export type ParsedWindow = {
44
+ readonly limit?: PageLimit;
45
+ readonly before?: Date;
46
+ } & {
47
+ readonly [parsedWindowBrand]: true;
48
+ };
49
+ /**
50
+ * Parse a session id.
51
+ *
52
+ * Accepts: `value` — anything; a session id reaches the partition key, so it is
53
+ * held to every identifier rule at {@link MAX_PARTITION_ID_BYTES}.
54
+ *
55
+ * Returns: `value` as a {@link SessionId}.
56
+ *
57
+ * Throws: `VALIDATION` naming `sessionId`.
58
+ */
59
+ export declare function parseSessionId(value: unknown): SessionId;
60
+ /**
61
+ * Parse stored messages: prove each one rebuilds on the read side.
62
+ *
63
+ * Accepts: `stored` — the stored form of one call's messages. The check *is*
64
+ * the read side's own rebuild (`mapStoredMessagesToChatMessages`), so write and
65
+ * read agree by construction rather than by two lists of types kept in step by
66
+ * hand.
67
+ *
68
+ * Returns: `stored`, as {@link StorableMessages}.
69
+ *
70
+ * Throws: `VALIDATION` naming `messages`, carrying the offending index and
71
+ * type. The type comes off the caller's own object and nothing length-checked
72
+ * it, so the message names it bounded by {@link truncateForLog}, and so is
73
+ * what LangChain says about it — that text renders the same unchecked value
74
+ * into itself, so bounding only the type bounds nothing. The two take
75
+ * different caps because they are different things: the type is an identifier,
76
+ * while what LangChain threw is prose, cut once by `redactedMessage` and not
77
+ * again here. `context` still names `messages`, which is what a caller
78
+ * branches on. A `RemoveMessage`, or a tool, function or generic message
79
+ * missing its required field, is refused here instead of being persisted and
80
+ * then skipped or thrown by `getMessages`. A hole in a sparse array is refused
81
+ * as missing, naming its index: the array is walked by index, where
82
+ * `Array.prototype.forEach` would skip the hole and let it through.
83
+ */
84
+ export declare function parseStoredMessages(stored: StoredMessage[]): StorableMessages;
85
+ /**
86
+ * Parse the messages of one append, in two passes: to the stored form, then
87
+ * proof that each rebuilds.
88
+ *
89
+ * Accepts: `messages` — declared `BaseMessage[]`; a non-array is refused, and
90
+ * so is an entry LangChain cannot serialize.
91
+ *
92
+ * Returns: a fresh array of stored messages, as {@link StorableMessages}.
93
+ *
94
+ * Throws: `VALIDATION` naming `messages`, with the offending index for an
95
+ * entry.
96
+ */
97
+ export declare function parseMessages(messages: BaseMessage[]): StorableMessages;
98
+ /**
99
+ * Parse a conversation window.
100
+ *
101
+ * Accepts: `window.limit` — an integer from 1 to the page ceiling; the only
102
+ * floor of 1 in the package, because a window feeds a model, and an empty
103
+ * conversation is not a visibly empty answer but an invented one.
104
+ * `window.before` — a valid `Date` inside the range a message id can express.
105
+ *
106
+ * Returns: a fresh window holding only the keys the caller gave, as a
107
+ * {@link ParsedWindow}.
108
+ *
109
+ * Throws: `VALIDATION` naming `limit` or `before`.
110
+ */
111
+ export declare function parseMessageWindow(window: MessageWindow): ParsedWindow;
112
+ /** The arguments of `getMessages`, parsed. */
113
+ export interface GetMessagesRequest {
114
+ readonly sessionId: SessionId;
115
+ readonly window: ParsedWindow;
116
+ readonly signal: AbortSignal | undefined;
117
+ }
118
+ /**
119
+ * Parse the arguments of `getMessages`.
120
+ *
121
+ * Accepts: `sessionId` — as {@link parseSessionId}. `options` — an object with
122
+ * only `limit`, `before` and `signal`; the window as {@link parseMessageWindow}.
123
+ *
124
+ * Returns: the request the read works from.
125
+ *
126
+ * Throws: `VALIDATION`, in this order: `options.<key>`, `signal`, `sessionId`,
127
+ * `limit`, `before`.
128
+ */
129
+ export declare function parseGetMessagesRequest(sessionId: string, options: GetMessagesOptions): GetMessagesRequest;
130
+ /** The options of `listSessions`, parsed. */
131
+ export interface ListSessionsRequest {
132
+ readonly limit: PageLimit | undefined;
133
+ readonly maxItems: number | undefined;
134
+ readonly maxIterations: number | undefined;
135
+ readonly cursor: string | undefined;
136
+ readonly signal: AbortSignal | undefined;
137
+ }
138
+ /**
139
+ * Parse the options of `listSessions`.
140
+ *
141
+ * Accepts: `options` — only `limit`, `cursor`, `maxIterations`, `maxItems` and
142
+ * `signal`. `limit` — 0 to the page ceiling; `0` is answered with an empty page.
143
+ * `maxItems`, `maxIterations` — an integer of at least 1, or `Infinity`.
144
+ * `cursor` — a string, and only with `indexName`. `indexName` — the adapter's
145
+ * configured recency index, if any.
146
+ *
147
+ * Returns: the request the listing works from.
148
+ *
149
+ * Throws: `VALIDATION`, in this order: `options.<key>`, `signal`, `limit`,
150
+ * `maxItems`, `maxIterations`, `cursor`.
151
+ */
152
+ export declare function parseListSessionsRequest(options: ListSessionsOptions, indexName: string | undefined): ListSessionsRequest;
153
+ export {};