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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/README.md +1720 -154
  2. package/dist/backfill/backfill.d.ts +168 -0
  3. package/dist/backfill/backfill.js +393 -0
  4. package/dist/checkpointer/actions/delete-thread.d.ts +47 -6
  5. package/dist/checkpointer/actions/delete-thread.js +58 -21
  6. package/dist/checkpointer/actions/get-tuple.d.ts +29 -4
  7. package/dist/checkpointer/actions/get-tuple.js +44 -10
  8. package/dist/checkpointer/actions/list.d.ts +46 -4
  9. package/dist/checkpointer/actions/list.js +121 -66
  10. package/dist/checkpointer/actions/put-writes.d.ts +41 -9
  11. package/dist/checkpointer/actions/put-writes.js +62 -77
  12. package/dist/checkpointer/actions/put.d.ts +83 -4
  13. package/dist/checkpointer/actions/put.js +177 -25
  14. package/dist/checkpointer/internal/delta-history.d.ts +112 -0
  15. package/dist/checkpointer/internal/delta-history.js +252 -0
  16. package/dist/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/checkpointer/internal/listing.js +245 -0
  18. package/dist/checkpointer/internal/parse.d.ts +262 -0
  19. package/dist/checkpointer/internal/parse.js +372 -0
  20. package/dist/checkpointer/internal/pending-writes.d.ts +275 -0
  21. package/dist/checkpointer/internal/pending-writes.js +588 -0
  22. package/dist/checkpointer/internal/read.d.ts +130 -0
  23. package/dist/checkpointer/internal/read.js +264 -0
  24. package/dist/checkpointer/internal/rows.d.ts +571 -0
  25. package/dist/checkpointer/internal/rows.js +834 -0
  26. package/dist/checkpointer/internal/setup.d.ts +42 -19
  27. package/dist/checkpointer/internal/setup.js +65 -29
  28. package/dist/checkpointer/saver.d.ts +256 -16
  29. package/dist/checkpointer/saver.js +275 -29
  30. package/dist/checkpointer/types.d.ts +39 -39
  31. package/dist/checkpointer/types.js +10 -1
  32. package/dist/factory/factory.d.ts +134 -28
  33. package/dist/factory/factory.js +240 -21
  34. package/dist/factory/types.d.ts +76 -0
  35. package/dist/factory/types.js +10 -0
  36. package/dist/history/actions/add-messages.d.ts +31 -4
  37. package/dist/history/actions/add-messages.js +38 -58
  38. package/dist/history/actions/clear.d.ts +49 -6
  39. package/dist/history/actions/clear.js +66 -14
  40. package/dist/history/actions/get-messages.d.ts +54 -6
  41. package/dist/history/actions/get-messages.js +126 -43
  42. package/dist/history/actions/list-sessions.d.ts +52 -10
  43. package/dist/history/actions/list-sessions.js +139 -40
  44. package/dist/history/actions/reconcile-count.d.ts +42 -10
  45. package/dist/history/actions/reconcile-count.js +45 -45
  46. package/dist/history/chat-message-history.d.ts +220 -33
  47. package/dist/history/chat-message-history.js +240 -43
  48. package/dist/history/internal/append.d.ts +212 -0
  49. package/dist/history/internal/append.js +500 -0
  50. package/dist/history/internal/message-read.d.ts +84 -0
  51. package/dist/history/internal/message-read.js +204 -0
  52. package/dist/history/internal/parse.d.ts +153 -0
  53. package/dist/history/internal/parse.js +252 -0
  54. package/dist/history/internal/rows.d.ts +195 -0
  55. package/dist/history/internal/rows.js +250 -0
  56. package/dist/history/internal/session.d.ts +331 -0
  57. package/dist/history/internal/session.js +628 -0
  58. package/dist/history/internal/setup.d.ts +52 -17
  59. package/dist/history/internal/setup.js +92 -21
  60. package/dist/history/session-adapter.d.ts +102 -7
  61. package/dist/history/session-adapter.js +103 -9
  62. package/dist/history/types.d.ts +80 -29
  63. package/dist/history/types.js +10 -1
  64. package/dist/index.d.ts +42 -11
  65. package/dist/index.js +33 -12
  66. package/dist/shared/adapter.d.ts +135 -0
  67. package/dist/shared/adapter.js +143 -0
  68. package/dist/shared/clock.d.ts +51 -2
  69. package/dist/shared/clock.js +57 -2
  70. package/dist/shared/codec/codec.d.ts +288 -13
  71. package/dist/shared/codec/codec.js +416 -19
  72. package/dist/shared/codec/compression.d.ts +43 -7
  73. package/dist/shared/codec/compression.js +53 -13
  74. package/dist/shared/codec/json-serde.d.ts +76 -4
  75. package/dist/shared/codec/json-serde.js +181 -8
  76. package/dist/shared/codec/s3/client-types.d.ts +53 -0
  77. package/dist/shared/codec/s3/client-types.js +26 -0
  78. package/dist/shared/codec/s3/client.d.ts +43 -10
  79. package/dist/shared/codec/s3/client.js +82 -9
  80. package/dist/shared/codec/s3/config.d.ts +242 -11
  81. package/dist/shared/codec/s3/config.js +293 -11
  82. package/dist/shared/codec/s3/lifecycle.d.ts +164 -6
  83. package/dist/shared/codec/s3/lifecycle.js +335 -27
  84. package/dist/shared/codec/s3/offloader.d.ts +393 -18
  85. package/dist/shared/codec/s3/offloader.js +595 -37
  86. package/dist/shared/concurrency.d.ts +43 -0
  87. package/dist/shared/concurrency.js +78 -0
  88. package/dist/shared/dynamodb/abort.d.ts +47 -0
  89. package/dist/shared/dynamodb/abort.js +59 -0
  90. package/dist/shared/dynamodb/batch-write.d.ts +77 -14
  91. package/dist/shared/dynamodb/batch-write.js +146 -27
  92. package/dist/shared/dynamodb/cancellation.d.ts +121 -4
  93. package/dist/shared/dynamodb/cancellation.js +147 -3
  94. package/dist/shared/dynamodb/client.d.ts +162 -8
  95. package/dist/shared/dynamodb/client.js +153 -5
  96. package/dist/shared/dynamodb/idempotent-write.d.ts +551 -0
  97. package/dist/shared/dynamodb/idempotent-write.js +593 -0
  98. package/dist/shared/dynamodb/paginate.d.ts +105 -9
  99. package/dist/shared/dynamodb/paginate.js +175 -7
  100. package/dist/shared/dynamodb/partition-delete.d.ts +185 -14
  101. package/dist/shared/dynamodb/partition-delete.js +314 -44
  102. package/dist/shared/dynamodb/recency-index.d.ts +231 -0
  103. package/dist/shared/dynamodb/recency-index.js +377 -0
  104. package/dist/shared/dynamodb/retry.d.ts +276 -8
  105. package/dist/shared/dynamodb/retry.js +433 -23
  106. package/dist/shared/dynamodb/table-schema.d.ts +190 -0
  107. package/dist/shared/dynamodb/table-schema.js +209 -0
  108. package/dist/shared/errors/base-error.d.ts +184 -10
  109. package/dist/shared/errors/base-error.js +160 -14
  110. package/dist/shared/errors/boundary.d.ts +71 -0
  111. package/dist/shared/errors/boundary.js +143 -0
  112. package/dist/shared/errors/classify.d.ts +97 -0
  113. package/dist/shared/errors/classify.js +257 -0
  114. package/dist/shared/errors/error-code.d.ts +77 -2
  115. package/dist/shared/errors/error-code.js +83 -1
  116. package/dist/shared/errors/errors.d.ts +158 -59
  117. package/dist/shared/errors/errors.js +219 -92
  118. package/dist/shared/logging/logger.d.ts +69 -3
  119. package/dist/shared/logging/logger.js +97 -3
  120. package/dist/shared/logging/redaction.d.ts +92 -8
  121. package/dist/shared/logging/redaction.js +273 -17
  122. package/dist/shared/logging/secret-patterns.d.ts +149 -19
  123. package/dist/shared/logging/secret-patterns.js +188 -27
  124. package/dist/shared/logging/truncate.d.ts +197 -0
  125. package/dist/shared/logging/truncate.js +231 -0
  126. package/dist/shared/options.d.ts +59 -7
  127. package/dist/shared/options.js +9 -1
  128. package/dist/shared/ulid.d.ts +77 -7
  129. package/dist/shared/ulid.js +103 -8
  130. package/dist/shared/validation/collaborators.d.ts +141 -0
  131. package/dist/shared/validation/collaborators.js +188 -0
  132. package/dist/shared/validation/option-shape.d.ts +89 -0
  133. package/dist/shared/validation/option-shape.js +113 -0
  134. package/dist/shared/validation/options.d.ts +145 -0
  135. package/dist/shared/validation/options.js +328 -0
  136. package/dist/shared/validation/primitives.d.ts +288 -21
  137. package/dist/shared/validation/primitives.js +353 -50
  138. package/dist/shared/validation/ttl.d.ts +66 -10
  139. package/dist/shared/validation/ttl.js +113 -15
  140. package/dist/store/actions/list-namespaces.d.ts +76 -6
  141. package/dist/store/actions/list-namespaces.js +166 -24
  142. package/dist/store/actions/put.d.ts +33 -8
  143. package/dist/store/actions/put.js +53 -60
  144. package/dist/store/actions/reconcile-vector-index.d.ts +31 -10
  145. package/dist/store/actions/reconcile-vector-index.js +34 -15
  146. package/dist/store/actions/search.d.ts +34 -6
  147. package/dist/store/actions/search.js +56 -51
  148. package/dist/store/internal/batch-plan.d.ts +26 -0
  149. package/dist/store/internal/batch-plan.js +109 -0
  150. package/dist/store/internal/filter.d.ts +36 -3
  151. package/dist/store/internal/filter.js +66 -15
  152. package/dist/store/internal/get-item.d.ts +45 -0
  153. package/dist/store/internal/get-item.js +115 -0
  154. package/dist/store/internal/item-write.d.ts +230 -0
  155. package/dist/store/internal/item-write.js +463 -0
  156. package/dist/store/internal/parse.d.ts +225 -0
  157. package/dist/store/internal/parse.js +350 -0
  158. package/dist/store/internal/rows.d.ts +355 -0
  159. package/dist/store/internal/rows.js +447 -0
  160. package/dist/store/internal/semantic-search.d.ts +161 -6
  161. package/dist/store/internal/semantic-search.js +360 -18
  162. package/dist/store/internal/setup.d.ts +77 -20
  163. package/dist/store/internal/setup.js +178 -47
  164. package/dist/store/internal/table-search.d.ts +100 -0
  165. package/dist/store/internal/table-search.js +213 -0
  166. package/dist/store/internal/vector-index.d.ts +247 -0
  167. package/dist/store/internal/vector-index.js +546 -0
  168. package/dist/store/store.d.ts +270 -17
  169. package/dist/store/store.js +329 -38
  170. package/dist/store/types.d.ts +76 -26
  171. package/dist/store/types.js +13 -1
  172. package/dist/store/vector-backend.d.ts +64 -4
  173. package/dist/store/vector-backend.js +15 -1
  174. package/package.json +58 -36
  175. package/dist/checkpointer/actions/delete-thread.d.ts.map +0 -1
  176. package/dist/checkpointer/actions/delete-thread.js.map +0 -1
  177. package/dist/checkpointer/actions/get-tuple.d.ts.map +0 -1
  178. package/dist/checkpointer/actions/get-tuple.js.map +0 -1
  179. package/dist/checkpointer/actions/list.d.ts.map +0 -1
  180. package/dist/checkpointer/actions/list.js.map +0 -1
  181. package/dist/checkpointer/actions/put-writes.d.ts.map +0 -1
  182. package/dist/checkpointer/actions/put-writes.js.map +0 -1
  183. package/dist/checkpointer/actions/put.d.ts.map +0 -1
  184. package/dist/checkpointer/actions/put.js.map +0 -1
  185. package/dist/checkpointer/internal/assemble.d.ts +0 -10
  186. package/dist/checkpointer/internal/assemble.d.ts.map +0 -1
  187. package/dist/checkpointer/internal/assemble.js +0 -37
  188. package/dist/checkpointer/internal/assemble.js.map +0 -1
  189. package/dist/checkpointer/internal/configurable.d.ts +0 -13
  190. package/dist/checkpointer/internal/configurable.d.ts.map +0 -1
  191. package/dist/checkpointer/internal/configurable.js +0 -23
  192. package/dist/checkpointer/internal/configurable.js.map +0 -1
  193. package/dist/checkpointer/internal/fetch.d.ts +0 -10
  194. package/dist/checkpointer/internal/fetch.d.ts.map +0 -1
  195. package/dist/checkpointer/internal/fetch.js +0 -46
  196. package/dist/checkpointer/internal/fetch.js.map +0 -1
  197. package/dist/checkpointer/internal/filter-match.d.ts +0 -12
  198. package/dist/checkpointer/internal/filter-match.d.ts.map +0 -1
  199. package/dist/checkpointer/internal/filter-match.js +0 -14
  200. package/dist/checkpointer/internal/filter-match.js.map +0 -1
  201. package/dist/checkpointer/internal/item-reader.d.ts +0 -55
  202. package/dist/checkpointer/internal/item-reader.d.ts.map +0 -1
  203. package/dist/checkpointer/internal/item-reader.js +0 -88
  204. package/dist/checkpointer/internal/item-reader.js.map +0 -1
  205. package/dist/checkpointer/internal/item-writer.d.ts +0 -26
  206. package/dist/checkpointer/internal/item-writer.d.ts.map +0 -1
  207. package/dist/checkpointer/internal/item-writer.js +0 -92
  208. package/dist/checkpointer/internal/item-writer.js.map +0 -1
  209. package/dist/checkpointer/internal/keys.d.ts +0 -31
  210. package/dist/checkpointer/internal/keys.d.ts.map +0 -1
  211. package/dist/checkpointer/internal/keys.js +0 -87
  212. package/dist/checkpointer/internal/keys.js.map +0 -1
  213. package/dist/checkpointer/internal/query.d.ts +0 -20
  214. package/dist/checkpointer/internal/query.d.ts.map +0 -1
  215. package/dist/checkpointer/internal/query.js +0 -36
  216. package/dist/checkpointer/internal/query.js.map +0 -1
  217. package/dist/checkpointer/internal/setup.d.ts.map +0 -1
  218. package/dist/checkpointer/internal/setup.js.map +0 -1
  219. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -30
  220. package/dist/checkpointer/internal/special-write-cas.d.ts.map +0 -1
  221. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  222. package/dist/checkpointer/internal/special-write-cas.js.map +0 -1
  223. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -24
  224. package/dist/checkpointer/internal/special-write-cleanup.d.ts.map +0 -1
  225. package/dist/checkpointer/internal/special-write-cleanup.js +0 -47
  226. package/dist/checkpointer/internal/special-write-cleanup.js.map +0 -1
  227. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -54
  228. package/dist/checkpointer/internal/special-write-verify.d.ts.map +0 -1
  229. package/dist/checkpointer/internal/special-write-verify.js +0 -65
  230. package/dist/checkpointer/internal/special-write-verify.js.map +0 -1
  231. package/dist/checkpointer/internal/validation.d.ts +0 -13
  232. package/dist/checkpointer/internal/validation.d.ts.map +0 -1
  233. package/dist/checkpointer/internal/validation.js +0 -30
  234. package/dist/checkpointer/internal/validation.js.map +0 -1
  235. package/dist/checkpointer/internal/write-guard.d.ts +0 -13
  236. package/dist/checkpointer/internal/write-guard.d.ts.map +0 -1
  237. package/dist/checkpointer/internal/write-guard.js +0 -39
  238. package/dist/checkpointer/internal/write-guard.js.map +0 -1
  239. package/dist/checkpointer/internal/write-index.d.ts +0 -37
  240. package/dist/checkpointer/internal/write-index.d.ts.map +0 -1
  241. package/dist/checkpointer/internal/write-index.js +0 -42
  242. package/dist/checkpointer/internal/write-index.js.map +0 -1
  243. package/dist/checkpointer/saver.d.ts.map +0 -1
  244. package/dist/checkpointer/saver.js.map +0 -1
  245. package/dist/checkpointer/types.d.ts.map +0 -1
  246. package/dist/checkpointer/types.js.map +0 -1
  247. package/dist/factory/factory.d.ts.map +0 -1
  248. package/dist/factory/factory.js.map +0 -1
  249. package/dist/history/actions/add-messages.d.ts.map +0 -1
  250. package/dist/history/actions/add-messages.js.map +0 -1
  251. package/dist/history/actions/clear.d.ts.map +0 -1
  252. package/dist/history/actions/clear.js.map +0 -1
  253. package/dist/history/actions/get-messages.d.ts.map +0 -1
  254. package/dist/history/actions/get-messages.js.map +0 -1
  255. package/dist/history/actions/list-sessions.d.ts.map +0 -1
  256. package/dist/history/actions/list-sessions.js.map +0 -1
  257. package/dist/history/actions/reconcile-count.d.ts.map +0 -1
  258. package/dist/history/actions/reconcile-count.js.map +0 -1
  259. package/dist/history/chat-message-history.d.ts.map +0 -1
  260. package/dist/history/chat-message-history.js.map +0 -1
  261. package/dist/history/internal/append-saga.d.ts +0 -20
  262. package/dist/history/internal/append-saga.d.ts.map +0 -1
  263. package/dist/history/internal/append-saga.js +0 -35
  264. package/dist/history/internal/append-saga.js.map +0 -1
  265. package/dist/history/internal/compensation.d.ts +0 -21
  266. package/dist/history/internal/compensation.d.ts.map +0 -1
  267. package/dist/history/internal/compensation.js +0 -84
  268. package/dist/history/internal/compensation.js.map +0 -1
  269. package/dist/history/internal/item-mapper.d.ts +0 -12
  270. package/dist/history/internal/item-mapper.d.ts.map +0 -1
  271. package/dist/history/internal/item-mapper.js +0 -33
  272. package/dist/history/internal/item-mapper.js.map +0 -1
  273. package/dist/history/internal/keys.d.ts +0 -17
  274. package/dist/history/internal/keys.d.ts.map +0 -1
  275. package/dist/history/internal/keys.js +0 -49
  276. package/dist/history/internal/keys.js.map +0 -1
  277. package/dist/history/internal/message-chunker.d.ts +0 -14
  278. package/dist/history/internal/message-chunker.d.ts.map +0 -1
  279. package/dist/history/internal/message-chunker.js +0 -68
  280. package/dist/history/internal/message-chunker.js.map +0 -1
  281. package/dist/history/internal/message-transaction.d.ts +0 -26
  282. package/dist/history/internal/message-transaction.d.ts.map +0 -1
  283. package/dist/history/internal/message-transaction.js +0 -60
  284. package/dist/history/internal/message-transaction.js.map +0 -1
  285. package/dist/history/internal/query.d.ts +0 -10
  286. package/dist/history/internal/query.d.ts.map +0 -1
  287. package/dist/history/internal/query.js +0 -31
  288. package/dist/history/internal/query.js.map +0 -1
  289. package/dist/history/internal/session-count.d.ts +0 -41
  290. package/dist/history/internal/session-count.d.ts.map +0 -1
  291. package/dist/history/internal/session-count.js +0 -109
  292. package/dist/history/internal/session-count.js.map +0 -1
  293. package/dist/history/internal/session-title.d.ts +0 -20
  294. package/dist/history/internal/session-title.d.ts.map +0 -1
  295. package/dist/history/internal/session-title.js +0 -44
  296. package/dist/history/internal/session-title.js.map +0 -1
  297. package/dist/history/internal/session-update.d.ts +0 -28
  298. package/dist/history/internal/session-update.d.ts.map +0 -1
  299. package/dist/history/internal/session-update.js +0 -70
  300. package/dist/history/internal/session-update.js.map +0 -1
  301. package/dist/history/internal/setup.d.ts.map +0 -1
  302. package/dist/history/internal/setup.js.map +0 -1
  303. package/dist/history/internal/title-generator.d.ts +0 -13
  304. package/dist/history/internal/title-generator.d.ts.map +0 -1
  305. package/dist/history/internal/title-generator.js +0 -25
  306. package/dist/history/internal/title-generator.js.map +0 -1
  307. package/dist/history/internal/ttl-anchor.d.ts +0 -25
  308. package/dist/history/internal/ttl-anchor.d.ts.map +0 -1
  309. package/dist/history/internal/ttl-anchor.js +0 -38
  310. package/dist/history/internal/ttl-anchor.js.map +0 -1
  311. package/dist/history/internal/validation.d.ts +0 -9
  312. package/dist/history/internal/validation.d.ts.map +0 -1
  313. package/dist/history/internal/validation.js +0 -16
  314. package/dist/history/internal/validation.js.map +0 -1
  315. package/dist/history/session-adapter.d.ts.map +0 -1
  316. package/dist/history/session-adapter.js.map +0 -1
  317. package/dist/history/types.d.ts.map +0 -1
  318. package/dist/history/types.js.map +0 -1
  319. package/dist/index.d.ts.map +0 -1
  320. package/dist/index.js.map +0 -1
  321. package/dist/shared/clock.d.ts.map +0 -1
  322. package/dist/shared/clock.js.map +0 -1
  323. package/dist/shared/codec/codec.d.ts.map +0 -1
  324. package/dist/shared/codec/codec.js.map +0 -1
  325. package/dist/shared/codec/compression.d.ts.map +0 -1
  326. package/dist/shared/codec/compression.js.map +0 -1
  327. package/dist/shared/codec/descriptor-keys.d.ts +0 -4
  328. package/dist/shared/codec/descriptor-keys.d.ts.map +0 -1
  329. package/dist/shared/codec/descriptor-keys.js +0 -14
  330. package/dist/shared/codec/descriptor-keys.js.map +0 -1
  331. package/dist/shared/codec/json-serde.d.ts.map +0 -1
  332. package/dist/shared/codec/json-serde.js.map +0 -1
  333. package/dist/shared/codec/s3/client.d.ts.map +0 -1
  334. package/dist/shared/codec/s3/client.js.map +0 -1
  335. package/dist/shared/codec/s3/config.d.ts.map +0 -1
  336. package/dist/shared/codec/s3/config.js.map +0 -1
  337. package/dist/shared/codec/s3/delete.d.ts +0 -8
  338. package/dist/shared/codec/s3/delete.d.ts.map +0 -1
  339. package/dist/shared/codec/s3/delete.js +0 -29
  340. package/dist/shared/codec/s3/delete.js.map +0 -1
  341. package/dist/shared/codec/s3/lifecycle.d.ts.map +0 -1
  342. package/dist/shared/codec/s3/lifecycle.js.map +0 -1
  343. package/dist/shared/codec/s3/offloader.d.ts.map +0 -1
  344. package/dist/shared/codec/s3/offloader.js.map +0 -1
  345. package/dist/shared/codec/s3/orphans.d.ts +0 -18
  346. package/dist/shared/codec/s3/orphans.d.ts.map +0 -1
  347. package/dist/shared/codec/s3/orphans.js +0 -58
  348. package/dist/shared/codec/s3/orphans.js.map +0 -1
  349. package/dist/shared/codec/s3/read-write.d.ts +0 -14
  350. package/dist/shared/codec/s3/read-write.d.ts.map +0 -1
  351. package/dist/shared/codec/s3/read-write.js +0 -43
  352. package/dist/shared/codec/s3/read-write.js.map +0 -1
  353. package/dist/shared/codec/s3/retry.d.ts +0 -5
  354. package/dist/shared/codec/s3/retry.d.ts.map +0 -1
  355. package/dist/shared/codec/s3/retry.js +0 -25
  356. package/dist/shared/codec/s3/retry.js.map +0 -1
  357. package/dist/shared/constants.d.ts +0 -64
  358. package/dist/shared/constants.d.ts.map +0 -1
  359. package/dist/shared/constants.js +0 -67
  360. package/dist/shared/constants.js.map +0 -1
  361. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  362. package/dist/shared/dynamodb/backoff.d.ts.map +0 -1
  363. package/dist/shared/dynamodb/backoff.js +0 -48
  364. package/dist/shared/dynamodb/backoff.js.map +0 -1
  365. package/dist/shared/dynamodb/batch-write.d.ts.map +0 -1
  366. package/dist/shared/dynamodb/batch-write.js.map +0 -1
  367. package/dist/shared/dynamodb/cancellation.d.ts.map +0 -1
  368. package/dist/shared/dynamodb/cancellation.js.map +0 -1
  369. package/dist/shared/dynamodb/client.d.ts.map +0 -1
  370. package/dist/shared/dynamodb/client.js.map +0 -1
  371. package/dist/shared/dynamodb/conditional-put.d.ts +0 -51
  372. package/dist/shared/dynamodb/conditional-put.d.ts.map +0 -1
  373. package/dist/shared/dynamodb/conditional-put.js +0 -59
  374. package/dist/shared/dynamodb/conditional-put.js.map +0 -1
  375. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -19
  376. package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +0 -1
  377. package/dist/shared/dynamodb/drain-unprocessed.js +0 -44
  378. package/dist/shared/dynamodb/drain-unprocessed.js.map +0 -1
  379. package/dist/shared/dynamodb/paginate-core.d.ts +0 -22
  380. package/dist/shared/dynamodb/paginate-core.d.ts.map +0 -1
  381. package/dist/shared/dynamodb/paginate-core.js +0 -52
  382. package/dist/shared/dynamodb/paginate-core.js.map +0 -1
  383. package/dist/shared/dynamodb/paginate.d.ts.map +0 -1
  384. package/dist/shared/dynamodb/paginate.js.map +0 -1
  385. package/dist/shared/dynamodb/partition-delete.d.ts.map +0 -1
  386. package/dist/shared/dynamodb/partition-delete.js.map +0 -1
  387. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -9
  388. package/dist/shared/dynamodb/retry-classifier.d.ts.map +0 -1
  389. package/dist/shared/dynamodb/retry-classifier.js +0 -87
  390. package/dist/shared/dynamodb/retry-classifier.js.map +0 -1
  391. package/dist/shared/dynamodb/retry.d.ts.map +0 -1
  392. package/dist/shared/dynamodb/retry.js.map +0 -1
  393. package/dist/shared/dynamodb/scan.d.ts +0 -15
  394. package/dist/shared/dynamodb/scan.d.ts.map +0 -1
  395. package/dist/shared/dynamodb/scan.js +0 -20
  396. package/dist/shared/dynamodb/scan.js.map +0 -1
  397. package/dist/shared/dynamodb/types.d.ts +0 -24
  398. package/dist/shared/dynamodb/types.d.ts.map +0 -1
  399. package/dist/shared/dynamodb/types.js +0 -3
  400. package/dist/shared/dynamodb/types.js.map +0 -1
  401. package/dist/shared/errors/base-error.d.ts.map +0 -1
  402. package/dist/shared/errors/base-error.js.map +0 -1
  403. package/dist/shared/errors/error-code.d.ts.map +0 -1
  404. package/dist/shared/errors/error-code.js.map +0 -1
  405. package/dist/shared/errors/errors.d.ts.map +0 -1
  406. package/dist/shared/errors/errors.js.map +0 -1
  407. package/dist/shared/errors/wrap-error.d.ts +0 -16
  408. package/dist/shared/errors/wrap-error.d.ts.map +0 -1
  409. package/dist/shared/errors/wrap-error.js +0 -30
  410. package/dist/shared/errors/wrap-error.js.map +0 -1
  411. package/dist/shared/logging/logger.d.ts.map +0 -1
  412. package/dist/shared/logging/logger.js.map +0 -1
  413. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  414. package/dist/shared/logging/redaction-walk.d.ts.map +0 -1
  415. package/dist/shared/logging/redaction-walk.js +0 -92
  416. package/dist/shared/logging/redaction-walk.js.map +0 -1
  417. package/dist/shared/logging/redaction.d.ts.map +0 -1
  418. package/dist/shared/logging/redaction.js.map +0 -1
  419. package/dist/shared/logging/secret-patterns.d.ts.map +0 -1
  420. package/dist/shared/logging/secret-patterns.js.map +0 -1
  421. package/dist/shared/options.d.ts.map +0 -1
  422. package/dist/shared/options.js.map +0 -1
  423. package/dist/shared/ulid.d.ts.map +0 -1
  424. package/dist/shared/ulid.js.map +0 -1
  425. package/dist/shared/validation/primitives.d.ts.map +0 -1
  426. package/dist/shared/validation/primitives.js.map +0 -1
  427. package/dist/shared/validation/ttl.d.ts.map +0 -1
  428. package/dist/shared/validation/ttl.js.map +0 -1
  429. package/dist/store/actions/get.d.ts +0 -5
  430. package/dist/store/actions/get.d.ts.map +0 -1
  431. package/dist/store/actions/get.js +0 -35
  432. package/dist/store/actions/get.js.map +0 -1
  433. package/dist/store/actions/list-namespaces.d.ts.map +0 -1
  434. package/dist/store/actions/list-namespaces.js.map +0 -1
  435. package/dist/store/actions/put.d.ts.map +0 -1
  436. package/dist/store/actions/put.js.map +0 -1
  437. package/dist/store/actions/reconcile-vector-index.d.ts.map +0 -1
  438. package/dist/store/actions/reconcile-vector-index.js.map +0 -1
  439. package/dist/store/actions/search.d.ts.map +0 -1
  440. package/dist/store/actions/search.js.map +0 -1
  441. package/dist/store/internal/backend-search.d.ts +0 -5
  442. package/dist/store/internal/backend-search.d.ts.map +0 -1
  443. package/dist/store/internal/backend-search.js +0 -68
  444. package/dist/store/internal/backend-search.js.map +0 -1
  445. package/dist/store/internal/filter.d.ts.map +0 -1
  446. package/dist/store/internal/filter.js.map +0 -1
  447. package/dist/store/internal/index-reconcile.d.ts +0 -22
  448. package/dist/store/internal/index-reconcile.d.ts.map +0 -1
  449. package/dist/store/internal/index-reconcile.js +0 -105
  450. package/dist/store/internal/index-reconcile.js.map +0 -1
  451. package/dist/store/internal/index-sync.d.ts +0 -11
  452. package/dist/store/internal/index-sync.d.ts.map +0 -1
  453. package/dist/store/internal/index-sync.js +0 -26
  454. package/dist/store/internal/index-sync.js.map +0 -1
  455. package/dist/store/internal/item-mapper.d.ts +0 -25
  456. package/dist/store/internal/item-mapper.d.ts.map +0 -1
  457. package/dist/store/internal/item-mapper.js +0 -53
  458. package/dist/store/internal/item-mapper.js.map +0 -1
  459. package/dist/store/internal/keys.d.ts +0 -18
  460. package/dist/store/internal/keys.d.ts.map +0 -1
  461. package/dist/store/internal/keys.js +0 -42
  462. package/dist/store/internal/keys.js.map +0 -1
  463. package/dist/store/internal/namespace-match.d.ts +0 -12
  464. package/dist/store/internal/namespace-match.d.ts.map +0 -1
  465. package/dist/store/internal/namespace-match.js +0 -41
  466. package/dist/store/internal/namespace-match.js.map +0 -1
  467. package/dist/store/internal/overwrite-swap.d.ts +0 -33
  468. package/dist/store/internal/overwrite-swap.d.ts.map +0 -1
  469. package/dist/store/internal/overwrite-swap.js +0 -62
  470. package/dist/store/internal/overwrite-swap.js.map +0 -1
  471. package/dist/store/internal/persist.d.ts +0 -27
  472. package/dist/store/internal/persist.d.ts.map +0 -1
  473. package/dist/store/internal/persist.js +0 -59
  474. package/dist/store/internal/persist.js.map +0 -1
  475. package/dist/store/internal/query.d.ts +0 -6
  476. package/dist/store/internal/query.d.ts.map +0 -1
  477. package/dist/store/internal/query.js +0 -32
  478. package/dist/store/internal/query.js.map +0 -1
  479. package/dist/store/internal/ranker.d.ts +0 -13
  480. package/dist/store/internal/ranker.d.ts.map +0 -1
  481. package/dist/store/internal/ranker.js +0 -31
  482. package/dist/store/internal/ranker.js.map +0 -1
  483. package/dist/store/internal/read-existing.d.ts +0 -19
  484. package/dist/store/internal/read-existing.d.ts.map +0 -1
  485. package/dist/store/internal/read-existing.js +0 -29
  486. package/dist/store/internal/read-existing.js.map +0 -1
  487. package/dist/store/internal/score-direction.d.ts +0 -32
  488. package/dist/store/internal/score-direction.d.ts.map +0 -1
  489. package/dist/store/internal/score-direction.js +0 -39
  490. package/dist/store/internal/score-direction.js.map +0 -1
  491. package/dist/store/internal/search-filter.d.ts +0 -4
  492. package/dist/store/internal/search-filter.d.ts.map +0 -1
  493. package/dist/store/internal/search-filter.js +0 -11
  494. package/dist/store/internal/search-filter.js.map +0 -1
  495. package/dist/store/internal/semantic-search.d.ts.map +0 -1
  496. package/dist/store/internal/semantic-search.js.map +0 -1
  497. package/dist/store/internal/setup.d.ts.map +0 -1
  498. package/dist/store/internal/setup.js.map +0 -1
  499. package/dist/store/internal/validation.d.ts +0 -13
  500. package/dist/store/internal/validation.d.ts.map +0 -1
  501. package/dist/store/internal/validation.js +0 -35
  502. package/dist/store/internal/validation.js.map +0 -1
  503. package/dist/store/internal/write-verify.d.ts +0 -37
  504. package/dist/store/internal/write-verify.d.ts.map +0 -1
  505. package/dist/store/internal/write-verify.js +0 -68
  506. package/dist/store/internal/write-verify.js.map +0 -1
  507. package/dist/store/store.d.ts.map +0 -1
  508. package/dist/store/store.js.map +0 -1
  509. package/dist/store/types.d.ts.map +0 -1
  510. package/dist/store/types.js.map +0 -1
  511. package/dist/store/vector-backend.d.ts.map +0 -1
  512. package/dist/store/vector-backend.js.map +0 -1
@@ -0,0 +1,331 @@
1
+ /**
2
+ * Hides the SESSION row: what it carries and how each field changes.
3
+ *
4
+ * A session's metadata — `messageCount`, `title`, `createdAt`, `updatedAt`,
5
+ * `ttl`, the `writeId` of the last append, and the recency-index keys — lives
6
+ * on one row, and `messageCount` is a copy of a fact the message rows hold.
7
+ * Keeping the copy in step is this module's job and nobody else's: the append
8
+ * adds to it in the same transaction that writes the messages, a rolled-back
9
+ * append subtracts exactly what it added (and never from a later incarnation of
10
+ * the session), a repair recomputes it under a compare-and-swap, and a listing
11
+ * reads it back only from a row this release can summarise. The recency-index
12
+ * keys are the one field this module does not write alone: `sessionIndexTarget`
13
+ * below tells `src/backfill/backfill.ts` which row is a SESSION row, and
14
+ * backfill writes the keys onto it directly, for a row that predates the index.
15
+ */
16
+ import type { StoredMessage } from '@langchain/core/messages';
17
+ import type { AttributeMap, TransactAction } from '../../shared/dynamodb/client';
18
+ import { type IndexTarget } from '../../shared/dynamodb/recency-index';
19
+ import type { SessionMetadata } from '../types';
20
+ import type { SessionId } from './parse';
21
+ import type { HistoryContext } from './setup';
22
+ /**
23
+ * Subtract a count this append already added from the session, leaving it consistent.
24
+ * Guarded so a concurrently-deleted SESSION row is never resurrected as a
25
+ * permanent, ttl-less junk row: if the row is already gone there is nothing
26
+ * to revert, so that specific condition failure is swallowed rather than
27
+ * surfaced — this runs only from an already-in-progress rollback, where a
28
+ * spurious error for a no-op would misrepresent what happened.
29
+ *
30
+ * The same condition also pins the *incarnation*: `createdAt <= createdBefore`
31
+ * (this call's own append timestamp). A session `clear()`-ed and re-created by
32
+ * another caller between this call's commit and its rollback carries a later
33
+ * `createdAt`; decrementing it would corrupt the new incarnation's count, and
34
+ * its rows were never this call's to revert. That rejection is swallowed too,
35
+ * for the same reason as a vanished row.
36
+ *
37
+ * Deliberately does not revert a `forceTtlRefresh`-driven ttl SET from an
38
+ * earlier committed chunk: the healed anchor is never shorter than what
39
+ * was there before, so leaving it in place after a rollback only means the
40
+ * session's metadata row outlives its content a bit longer than ideal —
41
+ * self-healing (the next successful append, or DynamoDB's own TTL sweep,
42
+ * resolves it), unlike reverting, which would need to re-check for a
43
+ * concurrent legitimate extension to avoid regressing it. See README.md's
44
+ * "TTL expiry" section.
45
+ *
46
+ * Accepts: `delta` — how many messages to subtract; `0` is a no-op and spends
47
+ * no write. `createdBefore` — this call's own append timestamp, which pins the
48
+ * incarnation.
49
+ *
50
+ * Returns: nothing, whether the decrement applied or the guard correctly
51
+ * refused it.
52
+ *
53
+ * Throws: whatever the write throws other than its own condition failure. A
54
+ * vanished row and a newer incarnation are both "nothing of mine to revert",
55
+ * not errors — this runs from an in-progress rollback, where a spurious error
56
+ * for a no-op would misrepresent what happened.
57
+ *
58
+ * Guarantees: the decrement is applied at most once, however often the request
59
+ * is re-sent. `ADD #count :neg` is one of the two writes in this package that
60
+ * are not naturally idempotent — the append's own `ADD #count :n` is the
61
+ * other — and applied twice it subtracts twice, with nothing reading the row
62
+ * back afterwards to notice, so a re-sent attempt must be answered from
63
+ * DynamoDB's idempotency cache rather than re-evaluated. Two things hold
64
+ * that together and only together: the `ClientRequestToken`, which makes a
65
+ * re-send a no-op, and the deadline of `MAX_WRITE_LIFETIME_MS`, which
66
+ * stops the retrying while that token is still honoured. Nothing in the token
67
+ * enforces that window — the service honours it for its own ten minutes
68
+ * whatever a caller's retry policy says — so without the deadline a long
69
+ * policy could still be retrying after the window closed, and the re-send
70
+ * would then land as a second subtraction, leaving `messageCount` quietly
71
+ * wrong. `reconcileMessageCount` is the repair if that happens anyway: it
72
+ * recounts the live messages and writes the true total back.
73
+ *
74
+ * The guard is no second line of defence for it. An attempt the condition
75
+ * turns away commits nothing, so DynamoDB caches no result for that attempt's
76
+ * token and a retry is a fresh evaluation rather than a deduplicated one — the
77
+ * exactly-once promise holds for an attempt that **committed**, which is also
78
+ * the only attempt whose re-send could subtract twice.
79
+ */
80
+ export declare function revertSessionCount(context: HistoryContext, sessionId: SessionId, delta: number, createdBefore: string): Promise<void>;
81
+ /** What a rolled-back append had created on the SESSION row, which the revert undoes. */
82
+ export interface CreatedSession {
83
+ /** Messages the append added to `messageCount`. */
84
+ readonly total: number;
85
+ /** The `createdAt` the append stamped, which pins the revert to that incarnation. */
86
+ readonly createdAt: string;
87
+ /** The title the append contributed, if it contributed one. */
88
+ readonly title?: string;
89
+ }
90
+ /**
91
+ * Undo a rolled-back append's effect on the session row.
92
+ *
93
+ * When this call is the one that created the row — `createdAt` still equals
94
+ * this call's timestamp, and the only messages counted on it are the ones
95
+ * being reverted — the whole row is deleted. Without that, a failed first
96
+ * append left a "ghost session": `title`, `createdAt` and `sessionId` are all
97
+ * written via `if_not_exists`, so they were never reverted and never set
98
+ * again, leaving `listSessions()` reporting a session with `messageCount: 0`
99
+ * whose title still held up to 80 characters of a message the caller was told
100
+ * had not persisted, with no API to clear it.
101
+ *
102
+ * Both conditions are load-bearing. `createdAt = :now` establishes that this
103
+ * call created the row; `messageCount = :total` establishes that nothing else
104
+ * has added to it since. A concurrent append to the same brand-new session
105
+ * fails the count check, because deleting the row would destroy that caller's
106
+ * committed messages — so it falls through to the plain decrement, and then
107
+ * strips just the title this call contributed, which is the only part of the
108
+ * row still carrying rolled-back message content.
109
+ *
110
+ * Accepts: `created` — what this call contributed to the row. `created.total`
111
+ * — every message this call counted onto the row; `0` is a no-op.
112
+ * `created.createdAt` — this call's timestamp, which is what "I created this
113
+ * row" means here. `created.title` — the title this call may have contributed.
114
+ *
115
+ * Returns: nothing. The row is deleted, or decremented and stripped of this
116
+ * call's title; both are a complete undo of what this call contributed.
117
+ *
118
+ * Throws: whatever the writes throw other than their own condition failures.
119
+ *
120
+ * Guarantees: the delete is applied at most once, and inside the window its
121
+ * token is honoured for, a re-send of an attempt that **committed** is
122
+ * answered from DynamoDB's idempotency cache rather than re-evaluated. The
123
+ * condition would already stop such a re-send from removing anything it should
124
+ * not; what the token adds is that it comes back as the success it was.
125
+ * Re-evaluated instead, it finds the row gone, fails both equalities, and the
126
+ * cancellation is read below as "a concurrent append has added to this row" —
127
+ * sending a rollback that already completed down the decrement-and-strip path
128
+ * meant for the case where the row survived. Both writes on that path are
129
+ * themselves guarded, and the decrement's incarnation pin refuses a session
130
+ * re-created in the meantime, so the price is two spurious conditional writes
131
+ * rather than a wrong count; the token is what keeps them from being spent.
132
+ *
133
+ * A rejection carries no idempotency forward — a cancelled attempt commits
134
+ * nothing, so nothing is cached for its token — and here that is exactly the
135
+ * wanted behaviour, since the fall-through below is a fresh decision about
136
+ * what to do instead. The deadline drawn beside the token is what keeps the
137
+ * retrying inside that window; the token enforces no window of its own.
138
+ */
139
+ export declare function revertSessionCreation(context: HistoryContext, sessionId: SessionId, created: CreatedSession): Promise<void>;
140
+ /** Fields driving the per-session metadata update inside the append transaction. */
141
+ export interface SessionUpdateFields {
142
+ sessionId: string;
143
+ /** Index partitions, from the adapter's context; see `indexKeys`. */
144
+ indexShards?: number;
145
+ /**
146
+ * The id of the append writing this update, drawn per chunk transaction by
147
+ * {@link writeMessageChunk}. It travels in the fields rather than being
148
+ * minted inside the builder, so an attempt rebuilt for a retry carries the
149
+ * id of the write it retries rather than a new one.
150
+ */
151
+ writeId: string;
152
+ count: number;
153
+ now: string;
154
+ title?: string;
155
+ ttlTimestamp?: number;
156
+ forceTtlRefresh?: boolean;
157
+ }
158
+ /**
159
+ * Build the metadata `Update` transact-item: `ADD` the message count and `SET`
160
+ * `updatedAt` and the appending write's id every time, while `createdAt`,
161
+ * `sessionId`, `title`, and the `ttl` anchor are written once via
162
+ * `if_not_exists`. Folding the `ttl` anchor in here means the first append
163
+ * fixes one shared expiry atomically with the count, with no separate
164
+ * pre-write that could orphan a metadata-only row. When
165
+ * `forceTtlRefresh` is set (because {@link resolveTtlAnchor} found the persisted
166
+ * anchor missing or already expired), the `ttl` clause instead does a plain
167
+ * `SET`, so the SESSION row's own stale attribute actually heals instead of
168
+ * being permanently blocked by `if_not_exists`. When forceTtlRefresh is set,
169
+ * the SET is additionally guarded by a ConditionExpression so a concurrent
170
+ * caller's already-healed anchor can never be regressed backward — see
171
+ * append.ts for how a lost race is retried without forcing.
172
+ *
173
+ * Accepts: `count` — how many messages this append adds, which `ADD` applies to
174
+ * whatever the row holds, so two concurrent appends both count. `title` —
175
+ * written once and never overwritten, so a session keeps the title its first
176
+ * turn produced. `writeId` — the appending write's own id, rewritten on every
177
+ * append so the row always names the write that last added to it.
178
+ * `ttlTimestamp` — absent leaves the row without an expiry. `forceTtlRefresh` —
179
+ * see above.
180
+ *
181
+ * Returns: the `Update` transact-item. It creates the row when there is none:
182
+ * every once-only field is an `if_not_exists`, so the first append and the
183
+ * thousandth build the same item.
184
+ *
185
+ * Throws: nothing. The condition it carries is evaluated by DynamoDB, and a
186
+ * failed condition surfaces from the transaction, not from here.
187
+ */
188
+ export declare function buildSessionUpdate(tableName: string, fields: SessionUpdateFields): TransactAction;
189
+ /**
190
+ * Strip a title this call contributed to a session row it created, when the
191
+ * row itself could not be deleted because a concurrent append has since added
192
+ * messages to it.
193
+ *
194
+ * Without this, that narrow window reopens exactly the leak C4 closes: the
195
+ * title is derived from the first human message of an append the caller was
196
+ * told had failed, and `if_not_exists` means nothing ever overwrites it — so
197
+ * a row that now belongs to a different caller keeps up to 80 characters of
198
+ * rolled-back message content.
199
+ *
200
+ * Both guards are load-bearing. `createdAt = :now` establishes that this call
201
+ * created the row, and `title = :title` that the title on it is still the one
202
+ * this call wrote — so a pre-existing title, or one a concurrent caller won
203
+ * the `if_not_exists` race for, is never removed. A condition rejection means
204
+ * exactly that and is not an error; anything else is.
205
+ *
206
+ * Accepts: `createdAt` — this call's own timestamp. `title` — the exact string
207
+ * this call wrote, compared as a value so nothing else's title is removed.
208
+ *
209
+ * Returns: nothing, whether the title was removed or the guards correctly
210
+ * refused.
211
+ *
212
+ * Throws: whatever the update throws other than its own condition failure.
213
+ */
214
+ export declare function removeRolledBackTitle(context: HistoryContext, sessionId: SessionId, createdAt: string, title: string): Promise<void>;
215
+ /** The resolved ttl anchor plus whether the persisted SESSION-row value must be force-refreshed. */
216
+ export interface TtlAnchorResult {
217
+ ttlTimestamp: number;
218
+ refresh: boolean;
219
+ }
220
+ /**
221
+ * Resolve the session's creation-anchored TTL: the value already stored on the
222
+ * SESSION item, if one exists AND is still in the future; otherwise the
223
+ * supplied `candidate`, with `refresh: true` so the caller force-overwrites
224
+ * the stale/missing persisted anchor instead of leaving it stuck (DynamoDB's
225
+ * `if_not_exists` would otherwise never correct an already-expired anchor).
226
+ * This is a strongly-consistent read, never a write, so it cannot leave a
227
+ * metadata-only orphan row when the following append transaction fails.
228
+ *
229
+ * When a stale anchor is healed, only the persisted SESSION row's `ttl` is
230
+ * force-refreshed — the message rows already written under the expired
231
+ * anchor keep their own (already-expired) `ttl` and get swept independently
232
+ * by DynamoDB's TTL sweep. Until that sweep runs (and until
233
+ * `reconcileMessageCount` repairs the count), `messageCount` can therefore be
234
+ * temporarily overstated relative to what `getMessages` actually returns.
235
+ * This is expected, not a bug.
236
+ *
237
+ * Accepts: `candidate` — the anchor this append would use if the session has
238
+ * none, already computed from the configured ttl.
239
+ *
240
+ * Returns: the anchor to stamp on this append's messages, and whether the
241
+ * SESSION row's own `ttl` must be force-overwritten rather than left to
242
+ * `if_not_exists`.
243
+ *
244
+ * Throws: whatever the read throws after retries.
245
+ *
246
+ * Guarantees: a read, never a write — so a failure of the append that follows
247
+ * cannot leave a metadata-only orphan row behind. Strongly consistent, so an
248
+ * anchor an earlier append committed is always seen. Two appends that start
249
+ * together on a session that has none each propose their own candidate; the
250
+ * append transaction's own condition is what settles which persists, so this
251
+ * read never has to be the arbiter (see {@link buildSessionUpdate}).
252
+ */
253
+ export declare function resolveTtlAnchor(context: HistoryContext, sessionId: SessionId, candidate: number, signal?: AbortSignal): Promise<TtlAnchorResult>;
254
+ /**
255
+ * Derive a session title from the first human message's text content, at most
256
+ * {@link MAX_TITLE_LENGTH} characters including the ellipsis. Returns undefined
257
+ * when there is no usable text.
258
+ *
259
+ * Truncation counts *code points*, not UTF-16 code units: slicing by index
260
+ * could cut a surrogate pair in half, leaving a lone surrogate that no longer
261
+ * round-trips through UTF-8. The ellipsis is also counted against the maximum
262
+ * rather than appended past it.
263
+ *
264
+ * Accepts: `messages` — one append's messages, in order. The first `human` one
265
+ * is the title's source; an append of only AI or tool messages has none, and an
266
+ * append to an existing session produces a title that is then discarded by
267
+ * `if_not_exists`.
268
+ *
269
+ * Returns: the title, or undefined when there is no usable text — no human
270
+ * message, empty content, or a multimodal message carrying no text block.
271
+ * Undefined means "do not write a title", not "write an empty one".
272
+ *
273
+ * Throws: nothing. A title is a convenience; nothing about it may fail an
274
+ * append.
275
+ */
276
+ export declare function deriveTitle(messages: StoredMessage[]): string | undefined;
277
+ /**
278
+ * Recompute `messageCount` from the stored message rows and write it, pinned to
279
+ * the count the row held when the recount began.
280
+ *
281
+ * Accepts: `sessionId` — parsed. `signal` — cancels the reads, the recount and
282
+ * the write.
283
+ *
284
+ * Returns: the count written.
285
+ *
286
+ * Throws: `CONDITION_CONFLICT` when the session does not exist, or when it
287
+ * changed during every one of the compare-and-swap's attempts;
288
+ * `FORMAT_UNSUPPORTED` for a message row a newer release wrote; `VALIDATION`
289
+ * naming `message` for a row in the message key space this package did not
290
+ * write; whatever the reads and the write throw.
291
+ */
292
+ export declare function repairMessageCount(context: HistoryContext, sessionId: SessionId, signal?: AbortSignal): Promise<number>;
293
+ /**
294
+ * The public summary of a SESSION row: the session a row describes, or
295
+ * undefined for a foreign, malformed or expired row.
296
+ *
297
+ * The `sessionId` is bound to the partition the row was found in, as
298
+ * `parseMetaRow`, `parseStoreRow` and `parseMessageRow` bind theirs.
299
+ * Both reads that reach here select rows by something other than the partition
300
+ * — a table scan filtered on the sort key, and a recency-index query — so
301
+ * without the binding a row planted anywhere in the table under this adapter's
302
+ * SESSION sort key was summarised under whatever `sessionId` it claimed, and a
303
+ * caller taking that id to `getMessages` read a partition the row never lived
304
+ * in.
305
+ *
306
+ * Accepts: `raw` — a row a listing read. `atSeconds` — the listing's clock,
307
+ * against which an expired row is absent.
308
+ *
309
+ * Returns: the summary, or `undefined` for a foreign, malformed or expired row.
310
+ *
311
+ * Throws: `FORMAT_UNSUPPORTED` for a row a newer release wrote. It is not a
312
+ * foreign row to skip, and summarising it under this release's rules could
313
+ * return its attributes with a meaning they no longer have. Checked before the
314
+ * shape, the binding and the ttl — as every other read of this package's rows
315
+ * checks it — so a newer row is refused rather than judged against attribute
316
+ * names it may no longer use, and the answer does not depend on the reading
317
+ * machine's clock.
318
+ */
319
+ export declare function summariseSession(raw: AttributeMap, atSeconds: number): SessionMetadata | undefined;
320
+ /**
321
+ * Where a history row sits in the recency index, for a row written before the
322
+ * index existed.
323
+ *
324
+ * Accepts: `row` — any row of the table.
325
+ *
326
+ * Returns: a SESSION row's identity — its session id, at its own `updatedAt` —
327
+ * or `undefined` for a message row or a row of another adapter.
328
+ *
329
+ * Throws: nothing.
330
+ */
331
+ export declare function sessionIndexTarget(row: AttributeMap): IndexTarget | undefined;