@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.
- package/README.md +1720 -154
- package/dist/backfill/backfill.d.ts +168 -0
- package/dist/backfill/backfill.js +393 -0
- package/dist/checkpointer/actions/delete-thread.d.ts +47 -6
- package/dist/checkpointer/actions/delete-thread.js +58 -21
- package/dist/checkpointer/actions/get-tuple.d.ts +29 -4
- package/dist/checkpointer/actions/get-tuple.js +44 -10
- package/dist/checkpointer/actions/list.d.ts +46 -4
- package/dist/checkpointer/actions/list.js +121 -66
- package/dist/checkpointer/actions/put-writes.d.ts +41 -9
- package/dist/checkpointer/actions/put-writes.js +62 -77
- package/dist/checkpointer/actions/put.d.ts +83 -4
- package/dist/checkpointer/actions/put.js +177 -25
- package/dist/checkpointer/internal/delta-history.d.ts +112 -0
- package/dist/checkpointer/internal/delta-history.js +252 -0
- package/dist/checkpointer/internal/listing.d.ts +149 -0
- package/dist/checkpointer/internal/listing.js +245 -0
- package/dist/checkpointer/internal/parse.d.ts +262 -0
- package/dist/checkpointer/internal/parse.js +372 -0
- package/dist/checkpointer/internal/pending-writes.d.ts +275 -0
- package/dist/checkpointer/internal/pending-writes.js +588 -0
- package/dist/checkpointer/internal/read.d.ts +130 -0
- package/dist/checkpointer/internal/read.js +264 -0
- package/dist/checkpointer/internal/rows.d.ts +571 -0
- package/dist/checkpointer/internal/rows.js +834 -0
- package/dist/checkpointer/internal/setup.d.ts +42 -19
- package/dist/checkpointer/internal/setup.js +65 -29
- package/dist/checkpointer/saver.d.ts +256 -16
- package/dist/checkpointer/saver.js +275 -29
- package/dist/checkpointer/types.d.ts +39 -39
- package/dist/checkpointer/types.js +10 -1
- package/dist/factory/factory.d.ts +134 -28
- package/dist/factory/factory.js +240 -21
- package/dist/factory/types.d.ts +76 -0
- package/dist/factory/types.js +10 -0
- package/dist/history/actions/add-messages.d.ts +31 -4
- package/dist/history/actions/add-messages.js +38 -58
- package/dist/history/actions/clear.d.ts +49 -6
- package/dist/history/actions/clear.js +66 -14
- package/dist/history/actions/get-messages.d.ts +54 -6
- package/dist/history/actions/get-messages.js +126 -43
- package/dist/history/actions/list-sessions.d.ts +52 -10
- package/dist/history/actions/list-sessions.js +139 -40
- package/dist/history/actions/reconcile-count.d.ts +42 -10
- package/dist/history/actions/reconcile-count.js +45 -45
- package/dist/history/chat-message-history.d.ts +220 -33
- package/dist/history/chat-message-history.js +240 -43
- package/dist/history/internal/append.d.ts +212 -0
- package/dist/history/internal/append.js +500 -0
- package/dist/history/internal/message-read.d.ts +84 -0
- package/dist/history/internal/message-read.js +204 -0
- package/dist/history/internal/parse.d.ts +153 -0
- package/dist/history/internal/parse.js +252 -0
- package/dist/history/internal/rows.d.ts +195 -0
- package/dist/history/internal/rows.js +250 -0
- package/dist/history/internal/session.d.ts +331 -0
- package/dist/history/internal/session.js +628 -0
- package/dist/history/internal/setup.d.ts +52 -17
- package/dist/history/internal/setup.js +92 -21
- package/dist/history/session-adapter.d.ts +102 -7
- package/dist/history/session-adapter.js +103 -9
- package/dist/history/types.d.ts +80 -29
- package/dist/history/types.js +10 -1
- package/dist/index.d.ts +42 -11
- package/dist/index.js +33 -12
- package/dist/shared/adapter.d.ts +135 -0
- package/dist/shared/adapter.js +143 -0
- package/dist/shared/clock.d.ts +51 -2
- package/dist/shared/clock.js +57 -2
- package/dist/shared/codec/codec.d.ts +288 -13
- package/dist/shared/codec/codec.js +416 -19
- package/dist/shared/codec/compression.d.ts +43 -7
- package/dist/shared/codec/compression.js +53 -13
- package/dist/shared/codec/json-serde.d.ts +76 -4
- package/dist/shared/codec/json-serde.js +181 -8
- package/dist/shared/codec/s3/client-types.d.ts +53 -0
- package/dist/shared/codec/s3/client-types.js +26 -0
- package/dist/shared/codec/s3/client.d.ts +43 -10
- package/dist/shared/codec/s3/client.js +82 -9
- package/dist/shared/codec/s3/config.d.ts +242 -11
- package/dist/shared/codec/s3/config.js +293 -11
- package/dist/shared/codec/s3/lifecycle.d.ts +164 -6
- package/dist/shared/codec/s3/lifecycle.js +335 -27
- package/dist/shared/codec/s3/offloader.d.ts +393 -18
- package/dist/shared/codec/s3/offloader.js +595 -37
- package/dist/shared/concurrency.d.ts +43 -0
- package/dist/shared/concurrency.js +78 -0
- package/dist/shared/dynamodb/abort.d.ts +47 -0
- package/dist/shared/dynamodb/abort.js +59 -0
- package/dist/shared/dynamodb/batch-write.d.ts +77 -14
- package/dist/shared/dynamodb/batch-write.js +146 -27
- package/dist/shared/dynamodb/cancellation.d.ts +121 -4
- package/dist/shared/dynamodb/cancellation.js +147 -3
- package/dist/shared/dynamodb/client.d.ts +162 -8
- package/dist/shared/dynamodb/client.js +153 -5
- package/dist/shared/dynamodb/idempotent-write.d.ts +551 -0
- package/dist/shared/dynamodb/idempotent-write.js +593 -0
- package/dist/shared/dynamodb/paginate.d.ts +105 -9
- package/dist/shared/dynamodb/paginate.js +175 -7
- package/dist/shared/dynamodb/partition-delete.d.ts +185 -14
- package/dist/shared/dynamodb/partition-delete.js +314 -44
- package/dist/shared/dynamodb/recency-index.d.ts +231 -0
- package/dist/shared/dynamodb/recency-index.js +377 -0
- package/dist/shared/dynamodb/retry.d.ts +276 -8
- package/dist/shared/dynamodb/retry.js +433 -23
- package/dist/shared/dynamodb/table-schema.d.ts +190 -0
- package/dist/shared/dynamodb/table-schema.js +209 -0
- package/dist/shared/errors/base-error.d.ts +184 -10
- package/dist/shared/errors/base-error.js +160 -14
- package/dist/shared/errors/boundary.d.ts +71 -0
- package/dist/shared/errors/boundary.js +143 -0
- package/dist/shared/errors/classify.d.ts +97 -0
- package/dist/shared/errors/classify.js +257 -0
- package/dist/shared/errors/error-code.d.ts +77 -2
- package/dist/shared/errors/error-code.js +83 -1
- package/dist/shared/errors/errors.d.ts +158 -59
- package/dist/shared/errors/errors.js +219 -92
- package/dist/shared/logging/logger.d.ts +69 -3
- package/dist/shared/logging/logger.js +97 -3
- package/dist/shared/logging/redaction.d.ts +92 -8
- package/dist/shared/logging/redaction.js +273 -17
- package/dist/shared/logging/secret-patterns.d.ts +149 -19
- package/dist/shared/logging/secret-patterns.js +188 -27
- package/dist/shared/logging/truncate.d.ts +197 -0
- package/dist/shared/logging/truncate.js +231 -0
- package/dist/shared/options.d.ts +59 -7
- package/dist/shared/options.js +9 -1
- package/dist/shared/ulid.d.ts +77 -7
- package/dist/shared/ulid.js +103 -8
- package/dist/shared/validation/collaborators.d.ts +141 -0
- package/dist/shared/validation/collaborators.js +188 -0
- package/dist/shared/validation/option-shape.d.ts +89 -0
- package/dist/shared/validation/option-shape.js +113 -0
- package/dist/shared/validation/options.d.ts +145 -0
- package/dist/shared/validation/options.js +328 -0
- package/dist/shared/validation/primitives.d.ts +288 -21
- package/dist/shared/validation/primitives.js +353 -50
- package/dist/shared/validation/ttl.d.ts +66 -10
- package/dist/shared/validation/ttl.js +113 -15
- package/dist/store/actions/list-namespaces.d.ts +76 -6
- package/dist/store/actions/list-namespaces.js +166 -24
- package/dist/store/actions/put.d.ts +33 -8
- package/dist/store/actions/put.js +53 -60
- package/dist/store/actions/reconcile-vector-index.d.ts +31 -10
- package/dist/store/actions/reconcile-vector-index.js +34 -15
- package/dist/store/actions/search.d.ts +34 -6
- package/dist/store/actions/search.js +56 -51
- package/dist/store/internal/batch-plan.d.ts +26 -0
- package/dist/store/internal/batch-plan.js +109 -0
- package/dist/store/internal/filter.d.ts +36 -3
- package/dist/store/internal/filter.js +66 -15
- package/dist/store/internal/get-item.d.ts +45 -0
- package/dist/store/internal/get-item.js +115 -0
- package/dist/store/internal/item-write.d.ts +230 -0
- package/dist/store/internal/item-write.js +463 -0
- package/dist/store/internal/parse.d.ts +225 -0
- package/dist/store/internal/parse.js +350 -0
- package/dist/store/internal/rows.d.ts +355 -0
- package/dist/store/internal/rows.js +447 -0
- package/dist/store/internal/semantic-search.d.ts +161 -6
- package/dist/store/internal/semantic-search.js +360 -18
- package/dist/store/internal/setup.d.ts +77 -20
- package/dist/store/internal/setup.js +178 -47
- package/dist/store/internal/table-search.d.ts +100 -0
- package/dist/store/internal/table-search.js +213 -0
- package/dist/store/internal/vector-index.d.ts +247 -0
- package/dist/store/internal/vector-index.js +546 -0
- package/dist/store/store.d.ts +270 -17
- package/dist/store/store.js +329 -38
- package/dist/store/types.d.ts +76 -26
- package/dist/store/types.js +13 -1
- package/dist/store/vector-backend.d.ts +64 -4
- package/dist/store/vector-backend.js +15 -1
- package/package.json +58 -36
- package/dist/checkpointer/actions/delete-thread.d.ts.map +0 -1
- package/dist/checkpointer/actions/delete-thread.js.map +0 -1
- package/dist/checkpointer/actions/get-tuple.d.ts.map +0 -1
- package/dist/checkpointer/actions/get-tuple.js.map +0 -1
- package/dist/checkpointer/actions/list.d.ts.map +0 -1
- package/dist/checkpointer/actions/list.js.map +0 -1
- package/dist/checkpointer/actions/put-writes.d.ts.map +0 -1
- package/dist/checkpointer/actions/put-writes.js.map +0 -1
- package/dist/checkpointer/actions/put.d.ts.map +0 -1
- package/dist/checkpointer/actions/put.js.map +0 -1
- package/dist/checkpointer/internal/assemble.d.ts +0 -10
- package/dist/checkpointer/internal/assemble.d.ts.map +0 -1
- package/dist/checkpointer/internal/assemble.js +0 -37
- package/dist/checkpointer/internal/assemble.js.map +0 -1
- package/dist/checkpointer/internal/configurable.d.ts +0 -13
- package/dist/checkpointer/internal/configurable.d.ts.map +0 -1
- package/dist/checkpointer/internal/configurable.js +0 -23
- package/dist/checkpointer/internal/configurable.js.map +0 -1
- package/dist/checkpointer/internal/fetch.d.ts +0 -10
- package/dist/checkpointer/internal/fetch.d.ts.map +0 -1
- package/dist/checkpointer/internal/fetch.js +0 -46
- package/dist/checkpointer/internal/fetch.js.map +0 -1
- package/dist/checkpointer/internal/filter-match.d.ts +0 -12
- package/dist/checkpointer/internal/filter-match.d.ts.map +0 -1
- package/dist/checkpointer/internal/filter-match.js +0 -14
- package/dist/checkpointer/internal/filter-match.js.map +0 -1
- package/dist/checkpointer/internal/item-reader.d.ts +0 -55
- package/dist/checkpointer/internal/item-reader.d.ts.map +0 -1
- package/dist/checkpointer/internal/item-reader.js +0 -88
- package/dist/checkpointer/internal/item-reader.js.map +0 -1
- package/dist/checkpointer/internal/item-writer.d.ts +0 -26
- package/dist/checkpointer/internal/item-writer.d.ts.map +0 -1
- package/dist/checkpointer/internal/item-writer.js +0 -92
- package/dist/checkpointer/internal/item-writer.js.map +0 -1
- package/dist/checkpointer/internal/keys.d.ts +0 -31
- package/dist/checkpointer/internal/keys.d.ts.map +0 -1
- package/dist/checkpointer/internal/keys.js +0 -87
- package/dist/checkpointer/internal/keys.js.map +0 -1
- package/dist/checkpointer/internal/query.d.ts +0 -20
- package/dist/checkpointer/internal/query.d.ts.map +0 -1
- package/dist/checkpointer/internal/query.js +0 -36
- package/dist/checkpointer/internal/query.js.map +0 -1
- package/dist/checkpointer/internal/setup.d.ts.map +0 -1
- package/dist/checkpointer/internal/setup.js.map +0 -1
- package/dist/checkpointer/internal/special-write-cas.d.ts +0 -30
- package/dist/checkpointer/internal/special-write-cas.d.ts.map +0 -1
- package/dist/checkpointer/internal/special-write-cas.js +0 -104
- package/dist/checkpointer/internal/special-write-cas.js.map +0 -1
- package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -24
- package/dist/checkpointer/internal/special-write-cleanup.d.ts.map +0 -1
- package/dist/checkpointer/internal/special-write-cleanup.js +0 -47
- package/dist/checkpointer/internal/special-write-cleanup.js.map +0 -1
- package/dist/checkpointer/internal/special-write-verify.d.ts +0 -54
- package/dist/checkpointer/internal/special-write-verify.d.ts.map +0 -1
- package/dist/checkpointer/internal/special-write-verify.js +0 -65
- package/dist/checkpointer/internal/special-write-verify.js.map +0 -1
- package/dist/checkpointer/internal/validation.d.ts +0 -13
- package/dist/checkpointer/internal/validation.d.ts.map +0 -1
- package/dist/checkpointer/internal/validation.js +0 -30
- package/dist/checkpointer/internal/validation.js.map +0 -1
- package/dist/checkpointer/internal/write-guard.d.ts +0 -13
- package/dist/checkpointer/internal/write-guard.d.ts.map +0 -1
- package/dist/checkpointer/internal/write-guard.js +0 -39
- package/dist/checkpointer/internal/write-guard.js.map +0 -1
- package/dist/checkpointer/internal/write-index.d.ts +0 -37
- package/dist/checkpointer/internal/write-index.d.ts.map +0 -1
- package/dist/checkpointer/internal/write-index.js +0 -42
- package/dist/checkpointer/internal/write-index.js.map +0 -1
- package/dist/checkpointer/saver.d.ts.map +0 -1
- package/dist/checkpointer/saver.js.map +0 -1
- package/dist/checkpointer/types.d.ts.map +0 -1
- package/dist/checkpointer/types.js.map +0 -1
- package/dist/factory/factory.d.ts.map +0 -1
- package/dist/factory/factory.js.map +0 -1
- package/dist/history/actions/add-messages.d.ts.map +0 -1
- package/dist/history/actions/add-messages.js.map +0 -1
- package/dist/history/actions/clear.d.ts.map +0 -1
- package/dist/history/actions/clear.js.map +0 -1
- package/dist/history/actions/get-messages.d.ts.map +0 -1
- package/dist/history/actions/get-messages.js.map +0 -1
- package/dist/history/actions/list-sessions.d.ts.map +0 -1
- package/dist/history/actions/list-sessions.js.map +0 -1
- package/dist/history/actions/reconcile-count.d.ts.map +0 -1
- package/dist/history/actions/reconcile-count.js.map +0 -1
- package/dist/history/chat-message-history.d.ts.map +0 -1
- package/dist/history/chat-message-history.js.map +0 -1
- package/dist/history/internal/append-saga.d.ts +0 -20
- package/dist/history/internal/append-saga.d.ts.map +0 -1
- package/dist/history/internal/append-saga.js +0 -35
- package/dist/history/internal/append-saga.js.map +0 -1
- package/dist/history/internal/compensation.d.ts +0 -21
- package/dist/history/internal/compensation.d.ts.map +0 -1
- package/dist/history/internal/compensation.js +0 -84
- package/dist/history/internal/compensation.js.map +0 -1
- package/dist/history/internal/item-mapper.d.ts +0 -12
- package/dist/history/internal/item-mapper.d.ts.map +0 -1
- package/dist/history/internal/item-mapper.js +0 -33
- package/dist/history/internal/item-mapper.js.map +0 -1
- package/dist/history/internal/keys.d.ts +0 -17
- package/dist/history/internal/keys.d.ts.map +0 -1
- package/dist/history/internal/keys.js +0 -49
- package/dist/history/internal/keys.js.map +0 -1
- package/dist/history/internal/message-chunker.d.ts +0 -14
- package/dist/history/internal/message-chunker.d.ts.map +0 -1
- package/dist/history/internal/message-chunker.js +0 -68
- package/dist/history/internal/message-chunker.js.map +0 -1
- package/dist/history/internal/message-transaction.d.ts +0 -26
- package/dist/history/internal/message-transaction.d.ts.map +0 -1
- package/dist/history/internal/message-transaction.js +0 -60
- package/dist/history/internal/message-transaction.js.map +0 -1
- package/dist/history/internal/query.d.ts +0 -10
- package/dist/history/internal/query.d.ts.map +0 -1
- package/dist/history/internal/query.js +0 -31
- package/dist/history/internal/query.js.map +0 -1
- package/dist/history/internal/session-count.d.ts +0 -41
- package/dist/history/internal/session-count.d.ts.map +0 -1
- package/dist/history/internal/session-count.js +0 -109
- package/dist/history/internal/session-count.js.map +0 -1
- package/dist/history/internal/session-title.d.ts +0 -20
- package/dist/history/internal/session-title.d.ts.map +0 -1
- package/dist/history/internal/session-title.js +0 -44
- package/dist/history/internal/session-title.js.map +0 -1
- package/dist/history/internal/session-update.d.ts +0 -28
- package/dist/history/internal/session-update.d.ts.map +0 -1
- package/dist/history/internal/session-update.js +0 -70
- package/dist/history/internal/session-update.js.map +0 -1
- package/dist/history/internal/setup.d.ts.map +0 -1
- package/dist/history/internal/setup.js.map +0 -1
- package/dist/history/internal/title-generator.d.ts +0 -13
- package/dist/history/internal/title-generator.d.ts.map +0 -1
- package/dist/history/internal/title-generator.js +0 -25
- package/dist/history/internal/title-generator.js.map +0 -1
- package/dist/history/internal/ttl-anchor.d.ts +0 -25
- package/dist/history/internal/ttl-anchor.d.ts.map +0 -1
- package/dist/history/internal/ttl-anchor.js +0 -38
- package/dist/history/internal/ttl-anchor.js.map +0 -1
- package/dist/history/internal/validation.d.ts +0 -9
- package/dist/history/internal/validation.d.ts.map +0 -1
- package/dist/history/internal/validation.js +0 -16
- package/dist/history/internal/validation.js.map +0 -1
- package/dist/history/session-adapter.d.ts.map +0 -1
- package/dist/history/session-adapter.js.map +0 -1
- package/dist/history/types.d.ts.map +0 -1
- package/dist/history/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/shared/clock.d.ts.map +0 -1
- package/dist/shared/clock.js.map +0 -1
- package/dist/shared/codec/codec.d.ts.map +0 -1
- package/dist/shared/codec/codec.js.map +0 -1
- package/dist/shared/codec/compression.d.ts.map +0 -1
- package/dist/shared/codec/compression.js.map +0 -1
- package/dist/shared/codec/descriptor-keys.d.ts +0 -4
- package/dist/shared/codec/descriptor-keys.d.ts.map +0 -1
- package/dist/shared/codec/descriptor-keys.js +0 -14
- package/dist/shared/codec/descriptor-keys.js.map +0 -1
- package/dist/shared/codec/json-serde.d.ts.map +0 -1
- package/dist/shared/codec/json-serde.js.map +0 -1
- package/dist/shared/codec/s3/client.d.ts.map +0 -1
- package/dist/shared/codec/s3/client.js.map +0 -1
- package/dist/shared/codec/s3/config.d.ts.map +0 -1
- package/dist/shared/codec/s3/config.js.map +0 -1
- package/dist/shared/codec/s3/delete.d.ts +0 -8
- package/dist/shared/codec/s3/delete.d.ts.map +0 -1
- package/dist/shared/codec/s3/delete.js +0 -29
- package/dist/shared/codec/s3/delete.js.map +0 -1
- package/dist/shared/codec/s3/lifecycle.d.ts.map +0 -1
- package/dist/shared/codec/s3/lifecycle.js.map +0 -1
- package/dist/shared/codec/s3/offloader.d.ts.map +0 -1
- package/dist/shared/codec/s3/offloader.js.map +0 -1
- package/dist/shared/codec/s3/orphans.d.ts +0 -18
- package/dist/shared/codec/s3/orphans.d.ts.map +0 -1
- package/dist/shared/codec/s3/orphans.js +0 -58
- package/dist/shared/codec/s3/orphans.js.map +0 -1
- package/dist/shared/codec/s3/read-write.d.ts +0 -14
- package/dist/shared/codec/s3/read-write.d.ts.map +0 -1
- package/dist/shared/codec/s3/read-write.js +0 -43
- package/dist/shared/codec/s3/read-write.js.map +0 -1
- package/dist/shared/codec/s3/retry.d.ts +0 -5
- package/dist/shared/codec/s3/retry.d.ts.map +0 -1
- package/dist/shared/codec/s3/retry.js +0 -25
- package/dist/shared/codec/s3/retry.js.map +0 -1
- package/dist/shared/constants.d.ts +0 -64
- package/dist/shared/constants.d.ts.map +0 -1
- package/dist/shared/constants.js +0 -67
- package/dist/shared/constants.js.map +0 -1
- package/dist/shared/dynamodb/backoff.d.ts +0 -15
- package/dist/shared/dynamodb/backoff.d.ts.map +0 -1
- package/dist/shared/dynamodb/backoff.js +0 -48
- package/dist/shared/dynamodb/backoff.js.map +0 -1
- package/dist/shared/dynamodb/batch-write.d.ts.map +0 -1
- package/dist/shared/dynamodb/batch-write.js.map +0 -1
- package/dist/shared/dynamodb/cancellation.d.ts.map +0 -1
- package/dist/shared/dynamodb/cancellation.js.map +0 -1
- package/dist/shared/dynamodb/client.d.ts.map +0 -1
- package/dist/shared/dynamodb/client.js.map +0 -1
- package/dist/shared/dynamodb/conditional-put.d.ts +0 -51
- package/dist/shared/dynamodb/conditional-put.d.ts.map +0 -1
- package/dist/shared/dynamodb/conditional-put.js +0 -59
- package/dist/shared/dynamodb/conditional-put.js.map +0 -1
- package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -19
- package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +0 -1
- package/dist/shared/dynamodb/drain-unprocessed.js +0 -44
- package/dist/shared/dynamodb/drain-unprocessed.js.map +0 -1
- package/dist/shared/dynamodb/paginate-core.d.ts +0 -22
- package/dist/shared/dynamodb/paginate-core.d.ts.map +0 -1
- package/dist/shared/dynamodb/paginate-core.js +0 -52
- package/dist/shared/dynamodb/paginate-core.js.map +0 -1
- package/dist/shared/dynamodb/paginate.d.ts.map +0 -1
- package/dist/shared/dynamodb/paginate.js.map +0 -1
- package/dist/shared/dynamodb/partition-delete.d.ts.map +0 -1
- package/dist/shared/dynamodb/partition-delete.js.map +0 -1
- package/dist/shared/dynamodb/retry-classifier.d.ts +0 -9
- package/dist/shared/dynamodb/retry-classifier.d.ts.map +0 -1
- package/dist/shared/dynamodb/retry-classifier.js +0 -87
- package/dist/shared/dynamodb/retry-classifier.js.map +0 -1
- package/dist/shared/dynamodb/retry.d.ts.map +0 -1
- package/dist/shared/dynamodb/retry.js.map +0 -1
- package/dist/shared/dynamodb/scan.d.ts +0 -15
- package/dist/shared/dynamodb/scan.d.ts.map +0 -1
- package/dist/shared/dynamodb/scan.js +0 -20
- package/dist/shared/dynamodb/scan.js.map +0 -1
- package/dist/shared/dynamodb/types.d.ts +0 -24
- package/dist/shared/dynamodb/types.d.ts.map +0 -1
- package/dist/shared/dynamodb/types.js +0 -3
- package/dist/shared/dynamodb/types.js.map +0 -1
- package/dist/shared/errors/base-error.d.ts.map +0 -1
- package/dist/shared/errors/base-error.js.map +0 -1
- package/dist/shared/errors/error-code.d.ts.map +0 -1
- package/dist/shared/errors/error-code.js.map +0 -1
- package/dist/shared/errors/errors.d.ts.map +0 -1
- package/dist/shared/errors/errors.js.map +0 -1
- package/dist/shared/errors/wrap-error.d.ts +0 -16
- package/dist/shared/errors/wrap-error.d.ts.map +0 -1
- package/dist/shared/errors/wrap-error.js +0 -30
- package/dist/shared/errors/wrap-error.js.map +0 -1
- package/dist/shared/logging/logger.d.ts.map +0 -1
- package/dist/shared/logging/logger.js.map +0 -1
- package/dist/shared/logging/redaction-walk.d.ts +0 -23
- package/dist/shared/logging/redaction-walk.d.ts.map +0 -1
- package/dist/shared/logging/redaction-walk.js +0 -92
- package/dist/shared/logging/redaction-walk.js.map +0 -1
- package/dist/shared/logging/redaction.d.ts.map +0 -1
- package/dist/shared/logging/redaction.js.map +0 -1
- package/dist/shared/logging/secret-patterns.d.ts.map +0 -1
- package/dist/shared/logging/secret-patterns.js.map +0 -1
- package/dist/shared/options.d.ts.map +0 -1
- package/dist/shared/options.js.map +0 -1
- package/dist/shared/ulid.d.ts.map +0 -1
- package/dist/shared/ulid.js.map +0 -1
- package/dist/shared/validation/primitives.d.ts.map +0 -1
- package/dist/shared/validation/primitives.js.map +0 -1
- package/dist/shared/validation/ttl.d.ts.map +0 -1
- package/dist/shared/validation/ttl.js.map +0 -1
- package/dist/store/actions/get.d.ts +0 -5
- package/dist/store/actions/get.d.ts.map +0 -1
- package/dist/store/actions/get.js +0 -35
- package/dist/store/actions/get.js.map +0 -1
- package/dist/store/actions/list-namespaces.d.ts.map +0 -1
- package/dist/store/actions/list-namespaces.js.map +0 -1
- package/dist/store/actions/put.d.ts.map +0 -1
- package/dist/store/actions/put.js.map +0 -1
- package/dist/store/actions/reconcile-vector-index.d.ts.map +0 -1
- package/dist/store/actions/reconcile-vector-index.js.map +0 -1
- package/dist/store/actions/search.d.ts.map +0 -1
- package/dist/store/actions/search.js.map +0 -1
- package/dist/store/internal/backend-search.d.ts +0 -5
- package/dist/store/internal/backend-search.d.ts.map +0 -1
- package/dist/store/internal/backend-search.js +0 -68
- package/dist/store/internal/backend-search.js.map +0 -1
- package/dist/store/internal/filter.d.ts.map +0 -1
- package/dist/store/internal/filter.js.map +0 -1
- package/dist/store/internal/index-reconcile.d.ts +0 -22
- package/dist/store/internal/index-reconcile.d.ts.map +0 -1
- package/dist/store/internal/index-reconcile.js +0 -105
- package/dist/store/internal/index-reconcile.js.map +0 -1
- package/dist/store/internal/index-sync.d.ts +0 -11
- package/dist/store/internal/index-sync.d.ts.map +0 -1
- package/dist/store/internal/index-sync.js +0 -26
- package/dist/store/internal/index-sync.js.map +0 -1
- package/dist/store/internal/item-mapper.d.ts +0 -25
- package/dist/store/internal/item-mapper.d.ts.map +0 -1
- package/dist/store/internal/item-mapper.js +0 -53
- package/dist/store/internal/item-mapper.js.map +0 -1
- package/dist/store/internal/keys.d.ts +0 -18
- package/dist/store/internal/keys.d.ts.map +0 -1
- package/dist/store/internal/keys.js +0 -42
- package/dist/store/internal/keys.js.map +0 -1
- package/dist/store/internal/namespace-match.d.ts +0 -12
- package/dist/store/internal/namespace-match.d.ts.map +0 -1
- package/dist/store/internal/namespace-match.js +0 -41
- package/dist/store/internal/namespace-match.js.map +0 -1
- package/dist/store/internal/overwrite-swap.d.ts +0 -33
- package/dist/store/internal/overwrite-swap.d.ts.map +0 -1
- package/dist/store/internal/overwrite-swap.js +0 -62
- package/dist/store/internal/overwrite-swap.js.map +0 -1
- package/dist/store/internal/persist.d.ts +0 -27
- package/dist/store/internal/persist.d.ts.map +0 -1
- package/dist/store/internal/persist.js +0 -59
- package/dist/store/internal/persist.js.map +0 -1
- package/dist/store/internal/query.d.ts +0 -6
- package/dist/store/internal/query.d.ts.map +0 -1
- package/dist/store/internal/query.js +0 -32
- package/dist/store/internal/query.js.map +0 -1
- package/dist/store/internal/ranker.d.ts +0 -13
- package/dist/store/internal/ranker.d.ts.map +0 -1
- package/dist/store/internal/ranker.js +0 -31
- package/dist/store/internal/ranker.js.map +0 -1
- package/dist/store/internal/read-existing.d.ts +0 -19
- package/dist/store/internal/read-existing.d.ts.map +0 -1
- package/dist/store/internal/read-existing.js +0 -29
- package/dist/store/internal/read-existing.js.map +0 -1
- package/dist/store/internal/score-direction.d.ts +0 -32
- package/dist/store/internal/score-direction.d.ts.map +0 -1
- package/dist/store/internal/score-direction.js +0 -39
- package/dist/store/internal/score-direction.js.map +0 -1
- package/dist/store/internal/search-filter.d.ts +0 -4
- package/dist/store/internal/search-filter.d.ts.map +0 -1
- package/dist/store/internal/search-filter.js +0 -11
- package/dist/store/internal/search-filter.js.map +0 -1
- package/dist/store/internal/semantic-search.d.ts.map +0 -1
- package/dist/store/internal/semantic-search.js.map +0 -1
- package/dist/store/internal/setup.d.ts.map +0 -1
- package/dist/store/internal/setup.js.map +0 -1
- package/dist/store/internal/validation.d.ts +0 -13
- package/dist/store/internal/validation.d.ts.map +0 -1
- package/dist/store/internal/validation.js +0 -35
- package/dist/store/internal/validation.js.map +0 -1
- package/dist/store/internal/write-verify.d.ts +0 -37
- package/dist/store/internal/write-verify.d.ts.map +0 -1
- package/dist/store/internal/write-verify.js +0 -68
- package/dist/store/internal/write-verify.js.map +0 -1
- package/dist/store/store.d.ts.map +0 -1
- package/dist/store/store.js.map +0 -1
- package/dist/store/types.d.ts.map +0 -1
- package/dist/store/types.js.map +0 -1
- package/dist/store/vector-backend.d.ts.map +0 -1
- 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;
|