@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
|
@@ -1,35 +1,72 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hides what deleting a thread means for the checkpointer's rows.
|
|
4
|
+
*
|
|
5
|
+
* The partition delete itself is shared; what is decided here is which rows of
|
|
6
|
+
* a thread's partition are the checkpointer's to remove, which objects each one
|
|
7
|
+
* names, and which write id pins each delete, so a checkpoint or a pending
|
|
8
|
+
* write rewritten after the read is left alone. A caller names a thread and
|
|
9
|
+
* never learns the row kinds, their sort keys or how a refusal is counted.
|
|
10
|
+
*/
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
12
|
exports.deleteThread = deleteThread;
|
|
4
13
|
const partition_delete_1 = require("../../shared/dynamodb/partition-delete");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
/** The offloaded payloads a checkpointer row can reference. */
|
|
9
|
-
function descriptorsOf(row) {
|
|
10
|
-
return [
|
|
11
|
-
row.metadata,
|
|
12
|
-
row.checkpoint,
|
|
13
|
-
row.value,
|
|
14
|
-
];
|
|
15
|
-
}
|
|
14
|
+
const retry_1 = require("../../shared/dynamodb/retry");
|
|
15
|
+
const parse_1 = require("../internal/parse");
|
|
16
|
+
const rows_1 = require("../internal/rows");
|
|
16
17
|
/**
|
|
17
|
-
* Delete
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* Delete exactly the checkpoint, payload and write rows of one thread that the
|
|
19
|
+
* partition read observed.
|
|
20
|
+
*
|
|
21
|
+
* Accepts: `threadId` — validated like every identifier. `options.signal` —
|
|
22
|
+
* stops the read between pages.
|
|
23
|
+
*
|
|
24
|
+
* Returns: nothing. Deleting a thread that does not exist is not an error:
|
|
25
|
+
* there is simply nothing in the partition.
|
|
26
|
+
*
|
|
27
|
+
* Throws: `VALIDATION` for a malformed `threadId`;
|
|
28
|
+
* `BATCH_WRITE_INCOMPLETE` when a row's delete fails, carrying what did
|
|
29
|
+
* succeed; `ABORTED` when the signal fires, whether between pages or during
|
|
30
|
+
* a row's delete — a cancel is reported as a cancel and never as an incomplete
|
|
31
|
+
* delete, and no further row is issued after it. A refused row is **not** one of
|
|
32
|
+
* those failures and raises nothing: the pin turned it away because it was
|
|
33
|
+
* rewritten after the read, and deleting it would erase a write already
|
|
34
|
+
* acknowledged to its author and release the object that write uploaded, so
|
|
35
|
+
* leaving it is the safe answer rather than a degraded one. The error's two
|
|
36
|
+
* counts are **rows**, not batches — rows deleted and rows attempted, summed
|
|
37
|
+
* across every flush of the pass, with `details.succeededCount` repeating the first
|
|
38
|
+
* and `details.failedChunks` holding each failing row's own error — and its message says so,
|
|
39
|
+
* because a pass that sends one request per row is not a batch that did not
|
|
40
|
+
* drain. Refused rows are in neither count; they are reported at `warn` with
|
|
41
|
+
* their sort keys and counted as skipped. The remedy for a refusal is the same
|
|
42
|
+
* as for a row written after the read: re-run once the thread is quiescent.
|
|
43
|
+
*
|
|
44
|
+
* Guarantees: a row this adapter did not write is left in place and logged, so
|
|
45
|
+
* a shared-table partition is never collaterally wiped. A row written or
|
|
46
|
+
* rewritten after the read is left in place and reported too: every delete is
|
|
47
|
+
* pinned on the id of the write that produced the row it names, so a checkpoint
|
|
48
|
+
* re-put while this runs keeps both its rows and the objects they name, and its
|
|
49
|
+
* pending writes are then left alone with them. A row written before that id
|
|
50
|
+
* existed carries none and is deleted as it always was. A row written at a key
|
|
51
|
+
* the read never saw still survives the pass, which is why the thread should be
|
|
52
|
+
* quiescent.
|
|
21
53
|
*/
|
|
22
|
-
async function deleteThread(context, threadId) {
|
|
23
|
-
(0,
|
|
54
|
+
async function deleteThread(context, threadId, options = {}) {
|
|
55
|
+
const thread = (0, parse_1.parseThreadId)(threadId);
|
|
24
56
|
await (0, partition_delete_1.deletePartitionRows)({
|
|
25
57
|
client: context.client,
|
|
26
58
|
tableName: context.tableName,
|
|
27
|
-
params: (0,
|
|
59
|
+
params: (0, rows_1.partitionQuery)(context.tableName, (0, rows_1.partitionKey)(thread), { consistent: true }),
|
|
28
60
|
logger: context.logger,
|
|
61
|
+
retry: (0, retry_1.retryFor)(context, options.signal),
|
|
62
|
+
signal: options.signal,
|
|
29
63
|
offloader: context.offloader,
|
|
30
64
|
operation: 'deleteThread',
|
|
31
|
-
ownsSortKey:
|
|
32
|
-
descriptorsOf,
|
|
65
|
+
ownsSortKey: rows_1.isCheckpointerSortKey,
|
|
66
|
+
descriptorsOf: rows_1.checkpointRowDescriptors,
|
|
67
|
+
idAttribute: rows_1.WRITE_GROUP_ATTRIBUTE,
|
|
68
|
+
unitOf: rows_1.checkpointRowUnit,
|
|
69
|
+
kindOf: rows_1.checkpointRowKind,
|
|
70
|
+
scope: [thread],
|
|
33
71
|
});
|
|
34
72
|
}
|
|
35
|
-
//# sourceMappingURL=delete-thread.js.map
|
|
@@ -1,10 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides which checkpoint a read config resolves to.
|
|
3
|
+
*
|
|
4
|
+
* A config may name a checkpoint, only a namespace, or no thread at all, and
|
|
5
|
+
* each has one answer here: the checkpoint named, else the newest in the
|
|
6
|
+
* namespace (the root when none is given), else nothing rather than an error,
|
|
7
|
+
* as the reference saver answers. That the read is strongly consistent, so a
|
|
8
|
+
* checkpoint just written is always seen, is fixed here too.
|
|
9
|
+
*/
|
|
1
10
|
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
2
11
|
import type { CheckpointTuple } from '@langchain/langgraph-checkpoint';
|
|
3
12
|
import type { CheckpointerContext } from '../internal/setup';
|
|
4
13
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
14
|
+
* One checkpoint with its metadata and pending writes.
|
|
15
|
+
*
|
|
16
|
+
* Accepts: `config` — `checkpoint_id` names the checkpoint, and its absence
|
|
17
|
+
* asks for the newest in the namespace. A config naming **no thread** is
|
|
18
|
+
* accepted: its other identifiers are still validated, and the answer is
|
|
19
|
+
* "nothing" rather than an error, which is what the reference saver does
|
|
20
|
+
* (`@langchain/langgraph-checkpoint@1.1.5` `dist/memory.js:86-92`: `thread_id`
|
|
21
|
+
* is read optionally while `checkpoint_ns` is asserted either way).
|
|
22
|
+
* `config.signal` — cancels the reads; checked before any of them.
|
|
23
|
+
*
|
|
24
|
+
* Returns: the tuple, or undefined for an unknown thread, an unknown
|
|
25
|
+
* checkpoint, a config naming no thread, or a META row whose PAYLOAD row is not
|
|
26
|
+
* there yet — the window the ordered write leaves open.
|
|
27
|
+
*
|
|
28
|
+
* Throws: `VALIDATION`, before any read, naming `config`, `configurable` or
|
|
29
|
+
* `signal` for a config of the wrong shape, or `thread_id`, `checkpoint_ns`,
|
|
30
|
+
* `checkpoint_id` or `thread_ts` for a malformed identifier; whatever the
|
|
31
|
+
* reads throw.
|
|
32
|
+
*
|
|
33
|
+
* Guarantees: strongly consistent, so a checkpoint just written is always seen.
|
|
8
34
|
*/
|
|
9
35
|
export declare function getCheckpointTuple(context: CheckpointerContext, config: RunnableConfig): Promise<CheckpointTuple | undefined>;
|
|
10
|
-
//# sourceMappingURL=get-tuple.d.ts.map
|
|
@@ -1,19 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hides which checkpoint a read config resolves to.
|
|
4
|
+
*
|
|
5
|
+
* A config may name a checkpoint, only a namespace, or no thread at all, and
|
|
6
|
+
* each has one answer here: the checkpoint named, else the newest in the
|
|
7
|
+
* namespace (the root when none is given), else nothing rather than an error,
|
|
8
|
+
* as the reference saver answers. That the read is strongly consistent, so a
|
|
9
|
+
* checkpoint just written is always seen, is fixed here too.
|
|
10
|
+
*/
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
12
|
exports.getCheckpointTuple = getCheckpointTuple;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const fetch_1 = require("../internal/fetch");
|
|
13
|
+
const parse_1 = require("../internal/parse");
|
|
14
|
+
const read_1 = require("../internal/read");
|
|
7
15
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
16
|
+
* One checkpoint with its metadata and pending writes.
|
|
17
|
+
*
|
|
18
|
+
* Accepts: `config` — `checkpoint_id` names the checkpoint, and its absence
|
|
19
|
+
* asks for the newest in the namespace. A config naming **no thread** is
|
|
20
|
+
* accepted: its other identifiers are still validated, and the answer is
|
|
21
|
+
* "nothing" rather than an error, which is what the reference saver does
|
|
22
|
+
* (`@langchain/langgraph-checkpoint@1.1.5` `dist/memory.js:86-92`: `thread_id`
|
|
23
|
+
* is read optionally while `checkpoint_ns` is asserted either way).
|
|
24
|
+
* `config.signal` — cancels the reads; checked before any of them.
|
|
25
|
+
*
|
|
26
|
+
* Returns: the tuple, or undefined for an unknown thread, an unknown
|
|
27
|
+
* checkpoint, a config naming no thread, or a META row whose PAYLOAD row is not
|
|
28
|
+
* there yet — the window the ordered write leaves open.
|
|
29
|
+
*
|
|
30
|
+
* Throws: `VALIDATION`, before any read, naming `config`, `configurable` or
|
|
31
|
+
* `signal` for a config of the wrong shape, or `thread_id`, `checkpoint_ns`,
|
|
32
|
+
* `checkpoint_id` or `thread_ts` for a malformed identifier; whatever the
|
|
33
|
+
* reads throw.
|
|
34
|
+
*
|
|
35
|
+
* Guarantees: strongly consistent, so a checkpoint just written is always seen.
|
|
11
36
|
*/
|
|
12
37
|
async function getCheckpointTuple(context, config) {
|
|
13
|
-
const
|
|
14
|
-
|
|
38
|
+
const parsed = (0, parse_1.parseConfig)(config);
|
|
39
|
+
if (parsed.threadId === undefined)
|
|
40
|
+
return undefined;
|
|
41
|
+
const address = {
|
|
42
|
+
threadId: parsed.threadId,
|
|
43
|
+
checkpointNs: parsed.checkpointNs ?? parse_1.ROOT_NAMESPACE,
|
|
44
|
+
checkpointId: parsed.checkpointId,
|
|
45
|
+
};
|
|
46
|
+
const meta = await (0, read_1.fetchTargetMeta)(context, address, parsed.signal);
|
|
15
47
|
if (!meta)
|
|
16
48
|
return undefined;
|
|
17
|
-
return (0,
|
|
49
|
+
return (0, read_1.assembleTuple)(context, { threadId: address.threadId, checkpointNs: address.checkpointNs }, meta, {
|
|
50
|
+
signal: parsed.signal,
|
|
51
|
+
consistent: true,
|
|
52
|
+
});
|
|
18
53
|
}
|
|
19
|
-
//# sourceMappingURL=get-tuple.js.map
|
|
@@ -1,10 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides when a listing reads, and when it stops.
|
|
3
|
+
*
|
|
4
|
+
* A `limit` of `0` is answered before any request is built, a config that
|
|
5
|
+
* pins one checkpoint in a known namespace is a single direct read rather than
|
|
6
|
+
* a range, and every other listing streams tuples until the caller stops
|
|
7
|
+
* pulling or `limit` is reached. The read is deliberately unbounded and
|
|
8
|
+
* eventually consistent; past a threshold an operator is warned instead of the
|
|
9
|
+
* caller being refused. Where the rows come from is `listing`'s concern.
|
|
10
|
+
*/
|
|
1
11
|
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
2
12
|
import type { CheckpointListOptions, CheckpointTuple } from '@langchain/langgraph-checkpoint';
|
|
3
13
|
import type { CheckpointerContext } from '../internal/setup';
|
|
4
14
|
/**
|
|
5
|
-
* Yield checkpoint tuples for a thread
|
|
6
|
-
*
|
|
7
|
-
*
|
|
15
|
+
* Yield checkpoint tuples for a thread, newest first: every namespace when the
|
|
16
|
+
* config names none (grouped by namespace, newest first within each), else the
|
|
17
|
+
* one namespace given. Without a `thread_id` every thread in the table is
|
|
18
|
+
* listed: through a table scan, as the reference savers do, which is unordered
|
|
19
|
+
* across threads, or through the recency index when `indexName` is set. Either
|
|
20
|
+
* read is cross-tenant by construction. Honors `options.before` (only
|
|
21
|
+
* checkpoints older than the given id), `options.filter` (metadata equality),
|
|
22
|
+
* and `options.limit` (max tuples yielded; the read stops right after the
|
|
23
|
+
* yield that reaches it).
|
|
24
|
+
*
|
|
25
|
+
* Accepts: `config` — `thread_id` scopes the read to one thread and its absence
|
|
26
|
+
* lists every thread in the table, through a scan as the reference savers do or
|
|
27
|
+
* through the recency index when `indexName` is set; `checkpoint_ns` scopes to
|
|
28
|
+
* one namespace and its absence spans every namespace of the thread.
|
|
29
|
+
* `options.before` — only checkpoints older than that id. `options.filter` —
|
|
30
|
+
* metadata equality. `options.limit` — at most this many tuples, up to the
|
|
31
|
+
* package's page ceiling; `0` yields nothing, which is what the reference
|
|
32
|
+
* returns, and a negative value is refused.
|
|
33
|
+
*
|
|
34
|
+
* Returns: an async generator over the tuples, newest first within a namespace,
|
|
35
|
+
* unordered across threads on the scan path. The read stops right after the
|
|
36
|
+
* yield that reaches `limit`, and abandoning the generator stops it too.
|
|
37
|
+
*
|
|
38
|
+
* Throws: `VALIDATION`, from the first `.next()` and before any read, for
|
|
39
|
+
* a config of the wrong shape (`config`, `configurable`, `signal`), a
|
|
40
|
+
* malformed identifier, or options that fail the checks
|
|
41
|
+
* {@link parseListScope} makes;
|
|
42
|
+
* `FORMAT_UNSUPPORTED` for a row of ours written by a newer version; whatever
|
|
43
|
+
* the reads and decodes throw.
|
|
44
|
+
*
|
|
45
|
+
* Guarantees: eventually consistent — a listing tolerates the replica lag
|
|
46
|
+
* `getTuple` does not. The read is deliberately unbounded: this generator
|
|
47
|
+
* streams and never accumulates, `limit` returns early, and a raw-row cap would
|
|
48
|
+
* turn a caller asking for a handful of rare matches over a large thread into a
|
|
49
|
+
* hard error instead of the true (possibly empty) answer. Past the warning
|
|
50
|
+
* threshold an operator is told to narrow the filter or pass a limit.
|
|
8
51
|
*/
|
|
9
52
|
export declare function listCheckpoints(context: CheckpointerContext, config: RunnableConfig, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple>;
|
|
10
|
-
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1,87 +1,142 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hides when a listing reads, and when it stops.
|
|
4
|
+
*
|
|
5
|
+
* A `limit` of `0` is answered before any request is built, a config that
|
|
6
|
+
* pins one checkpoint in a known namespace is a single direct read rather than
|
|
7
|
+
* a range, and every other listing streams tuples until the caller stops
|
|
8
|
+
* pulling or `limit` is reached. The read is deliberately unbounded and
|
|
9
|
+
* eventually consistent; past a threshold an operator is warned instead of the
|
|
10
|
+
* caller being refused. Where the rows come from is `listing`'s concern.
|
|
11
|
+
*/
|
|
2
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
13
|
exports.listCheckpoints = listCheckpoints;
|
|
4
|
-
const
|
|
14
|
+
const clock_1 = require("../../shared/clock");
|
|
5
15
|
const paginate_1 = require("../../shared/dynamodb/paginate");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
const table_schema_1 = require("../../shared/dynamodb/table-schema");
|
|
17
|
+
const listing_1 = require("../internal/listing");
|
|
18
|
+
const parse_1 = require("../internal/parse");
|
|
19
|
+
const read_1 = require("../internal/read");
|
|
20
|
+
/**
|
|
21
|
+
* The tuple for one META item that passes every filter, assembled eventually
|
|
22
|
+
* consistently (a history listing tolerates a replica lag `getTuple` does not)
|
|
23
|
+
* and reusing the metadata the filter already decoded. Undefined when the row
|
|
24
|
+
* is filtered out or its payload is missing.
|
|
25
|
+
*/
|
|
26
|
+
async function tupleFor(context, meta, scope) {
|
|
27
|
+
if (!(0, listing_1.passesKeyFilters)(meta, scope))
|
|
28
|
+
return undefined;
|
|
29
|
+
const verdict = await (0, listing_1.passesMetadataFilter)(context, meta, scope);
|
|
30
|
+
if (!verdict.pass)
|
|
31
|
+
return undefined;
|
|
32
|
+
return (0, read_1.assembleTuple)(context, { threadId: meta.threadId, checkpointNs: meta.checkpointNs }, meta, {
|
|
33
|
+
signal: scope.signal,
|
|
34
|
+
consistent: false,
|
|
35
|
+
metadata: verdict.metadata,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** A `checkpoint_id` addresses one row: read it directly instead of scanning the namespace for it. */
|
|
39
|
+
async function* listOne(context, scope) {
|
|
40
|
+
const meta = await (0, read_1.fetchTargetMeta)(context, {
|
|
41
|
+
threadId: scope.threadId,
|
|
42
|
+
checkpointNs: scope.checkpointNs,
|
|
43
|
+
checkpointId: scope.checkpointId,
|
|
44
|
+
}, scope.signal);
|
|
45
|
+
if (!meta)
|
|
46
|
+
return;
|
|
47
|
+
const tuple = await tupleFor(context, meta, scope);
|
|
48
|
+
if (tuple)
|
|
49
|
+
yield tuple;
|
|
19
50
|
}
|
|
20
51
|
/**
|
|
21
|
-
* True when
|
|
22
|
-
*
|
|
23
|
-
*
|
|
52
|
+
* True when the caller asked for no tuples at all. Answered before any request
|
|
53
|
+
* is built: DynamoDB rejects `Limit: 0`, and yielding one tuple and only then
|
|
54
|
+
* testing the limit returns a result the caller did not ask for. The reference
|
|
55
|
+
* saver returns nothing here (`@langchain/langgraph-checkpoint@1.1.5`
|
|
56
|
+
* `dist/memory.js:172`).
|
|
57
|
+
*
|
|
58
|
+
* Exactly `0`, not "zero or less": a negative limit is refused by
|
|
59
|
+
* {@link parseListScope} before this runs, so treating one as a request for
|
|
60
|
+
* nothing would be a branch no call could reach.
|
|
24
61
|
*/
|
|
25
|
-
function
|
|
26
|
-
|
|
27
|
-
return false;
|
|
28
|
-
return before === undefined || meta.checkpointId < before;
|
|
62
|
+
function asksForNothing(scope) {
|
|
63
|
+
return scope.limit === 0;
|
|
29
64
|
}
|
|
30
|
-
/**
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
65
|
+
/**
|
|
66
|
+
* True when the scope names exactly one row, which is only so once the
|
|
67
|
+
* namespace is known. A `checkpoint_id` without a `checkpoint_ns` may address a
|
|
68
|
+
* checkpoint in any namespace — a subgraph's, for instance — so the read stays
|
|
69
|
+
* namespace-wide and `passesKeyFilters` narrows it to that id.
|
|
70
|
+
*/
|
|
71
|
+
function addressesOneRow(scope) {
|
|
72
|
+
return (scope.threadId !== undefined &&
|
|
73
|
+
scope.checkpointId !== undefined &&
|
|
74
|
+
scope.checkpointNs !== undefined);
|
|
36
75
|
}
|
|
37
76
|
/**
|
|
38
|
-
* Yield checkpoint tuples for a thread
|
|
39
|
-
*
|
|
40
|
-
*
|
|
77
|
+
* Yield checkpoint tuples for a thread, newest first: every namespace when the
|
|
78
|
+
* config names none (grouped by namespace, newest first within each), else the
|
|
79
|
+
* one namespace given. Without a `thread_id` every thread in the table is
|
|
80
|
+
* listed: through a table scan, as the reference savers do, which is unordered
|
|
81
|
+
* across threads, or through the recency index when `indexName` is set. Either
|
|
82
|
+
* read is cross-tenant by construction. Honors `options.before` (only
|
|
83
|
+
* checkpoints older than the given id), `options.filter` (metadata equality),
|
|
84
|
+
* and `options.limit` (max tuples yielded; the read stops right after the
|
|
85
|
+
* yield that reaches it).
|
|
86
|
+
*
|
|
87
|
+
* Accepts: `config` — `thread_id` scopes the read to one thread and its absence
|
|
88
|
+
* lists every thread in the table, through a scan as the reference savers do or
|
|
89
|
+
* through the recency index when `indexName` is set; `checkpoint_ns` scopes to
|
|
90
|
+
* one namespace and its absence spans every namespace of the thread.
|
|
91
|
+
* `options.before` — only checkpoints older than that id. `options.filter` —
|
|
92
|
+
* metadata equality. `options.limit` — at most this many tuples, up to the
|
|
93
|
+
* package's page ceiling; `0` yields nothing, which is what the reference
|
|
94
|
+
* returns, and a negative value is refused.
|
|
95
|
+
*
|
|
96
|
+
* Returns: an async generator over the tuples, newest first within a namespace,
|
|
97
|
+
* unordered across threads on the scan path. The read stops right after the
|
|
98
|
+
* yield that reaches `limit`, and abandoning the generator stops it too.
|
|
99
|
+
*
|
|
100
|
+
* Throws: `VALIDATION`, from the first `.next()` and before any read, for
|
|
101
|
+
* a config of the wrong shape (`config`, `configurable`, `signal`), a
|
|
102
|
+
* malformed identifier, or options that fail the checks
|
|
103
|
+
* {@link parseListScope} makes;
|
|
104
|
+
* `FORMAT_UNSUPPORTED` for a row of ours written by a newer version; whatever
|
|
105
|
+
* the reads and decodes throw.
|
|
106
|
+
*
|
|
107
|
+
* Guarantees: eventually consistent — a listing tolerates the replica lag
|
|
108
|
+
* `getTuple` does not. The read is deliberately unbounded: this generator
|
|
109
|
+
* streams and never accumulates, `limit` returns early, and a raw-row cap would
|
|
110
|
+
* turn a caller asking for a handful of rare matches over a large thread into a
|
|
111
|
+
* hard error instead of the true (possibly empty) answer. Past the warning
|
|
112
|
+
* threshold an operator is told to narrow the filter or pass a limit.
|
|
41
113
|
*/
|
|
42
114
|
async function* listCheckpoints(context, config, options) {
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
115
|
+
const scope = (0, parse_1.parseListScope)(config, options);
|
|
116
|
+
if (asksForNothing(scope))
|
|
117
|
+
return;
|
|
118
|
+
if (addressesOneRow(scope)) {
|
|
119
|
+
yield* listOne(context, scope);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const now = (0, clock_1.nowSeconds)();
|
|
46
123
|
let yielded = 0;
|
|
47
124
|
let scanned = 0;
|
|
48
|
-
|
|
49
|
-
* Unbounded: this is a generator that streams and never accumulates, and
|
|
50
|
-
* `limit` already returns early, so the caller's own bound is what stops the
|
|
51
|
-
* read. The shared in-memory cap counts *raw rows pulled*, not
|
|
52
|
-
* filter-matched ones, so leaving it in place turned a caller asking for a
|
|
53
|
-
* handful of rare matches over a large thread into a hard
|
|
54
|
-
* ResultTruncatedError instead of the true (possibly empty) answer.
|
|
55
|
-
*/
|
|
56
|
-
for await (const raw of (0, paginate_1.paginateQuery)({
|
|
57
|
-
client: context.client,
|
|
58
|
-
params,
|
|
59
|
-
maxItems: Number.POSITIVE_INFINITY,
|
|
60
|
-
maxIterations: Number.POSITIVE_INFINITY,
|
|
61
|
-
})) {
|
|
125
|
+
for await (const raw of (0, listing_1.metaRows)(context, scope, now)) {
|
|
62
126
|
scanned += 1;
|
|
63
|
-
if (scanned ===
|
|
127
|
+
if (scanned === paginate_1.LIST_SCAN_WARN_THRESHOLD) {
|
|
64
128
|
context.logger.warn('list: scanned a large number of rows without the caller stopping; this read is ' +
|
|
65
|
-
'deliberately unbounded, so narrow the filter or pass options.limit', { threadId, checkpointNs, scanned });
|
|
66
|
-
}
|
|
67
|
-
if (limit !== undefined && yielded >= limit)
|
|
68
|
-
return;
|
|
69
|
-
const meta = (0, item_reader_1.narrowMetaItem)(raw);
|
|
70
|
-
if (!meta) {
|
|
71
|
-
context.logger.warn('list: skipped a row that is not a checkpoint meta item', {
|
|
72
|
-
sortKey: raw.SK,
|
|
73
|
-
});
|
|
74
|
-
continue;
|
|
129
|
+
'deliberately unbounded, so narrow the filter or pass options.limit', { threadId: scope.threadId, checkpointNs: scope.checkpointNs, scanned });
|
|
75
130
|
}
|
|
76
|
-
|
|
131
|
+
const meta = (0, listing_1.parseListedRow)(context, raw);
|
|
132
|
+
if (!meta || (0, table_schema_1.isExpiredRow)(meta, now))
|
|
77
133
|
continue;
|
|
78
|
-
|
|
134
|
+
const tuple = await tupleFor(context, meta, scope);
|
|
135
|
+
if (!tuple)
|
|
79
136
|
continue;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
137
|
+
yield tuple;
|
|
138
|
+
yielded += 1;
|
|
139
|
+
if (scope.limit !== undefined && yielded >= scope.limit)
|
|
140
|
+
return;
|
|
85
141
|
}
|
|
86
142
|
}
|
|
87
|
-
//# sourceMappingURL=list.js.map
|
|
@@ -1,15 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides how one `putWrites` call's rows are known to be one call's.
|
|
3
|
+
*
|
|
4
|
+
* Every call draws a write group from a strictly monotonic ULID factory, and
|
|
5
|
+
* that one id serves three ends: the object id each offloaded write is uploaded
|
|
6
|
+
* under (record 4), the owner a guard rejection is compared against to tell a
|
|
7
|
+
* rival call from this call's own retry, and the order the read side uses to
|
|
8
|
+
* pick the earliest call that wrote a channel. A caller passes writes and a
|
|
9
|
+
* task id and never sees the group.
|
|
10
|
+
*/
|
|
1
11
|
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
2
12
|
import type { PendingWrite } from '@langchain/langgraph-checkpoint';
|
|
3
13
|
import type { CheckpointerContext } from '../internal/setup';
|
|
4
14
|
/**
|
|
5
|
-
* Persist a task's intermediate writes for a checkpoint
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
15
|
+
* Persist a task's intermediate writes for a checkpoint, one row per write.
|
|
16
|
+
*
|
|
17
|
+
* Accepts: `config` — must name a `checkpoint_id`, since writes always attach
|
|
18
|
+
* to a checkpoint. `writes` — one task's, in order; their channels are
|
|
19
|
+
* validated before anything is encoded or uploaded. `taskId` — validated as the
|
|
20
|
+
* sort-key segment it becomes. `config.signal` — cancels the writes' retries;
|
|
21
|
+
* checked before anything is encoded.
|
|
22
|
+
*
|
|
23
|
+
* Returns: nothing. Every write is attempted; a regular write that loses its
|
|
24
|
+
* first-write-wins race is a normal outcome, not a failure.
|
|
25
|
+
*
|
|
26
|
+
* Throws: `VALIDATION` naming `config`, `configurable` or `signal` for a
|
|
27
|
+
* config of the wrong shape; `thread_id`, `checkpoint_ns`, `checkpoint_id` or
|
|
28
|
+
* `thread_ts` for a malformed identifier, and `checkpoint_id` when the config
|
|
29
|
+
* names none; `taskId`, `writes`, `channel`, `sortKey` — every one of them
|
|
30
|
+
* before anything is encoded or uploaded — `payload` or `s3Key`; the first
|
|
31
|
+
* genuine write failure, after every write has settled and the cleanup has
|
|
32
|
+
* run.
|
|
33
|
+
*
|
|
34
|
+
* Guarantees: regular writes are first-write-wins, matching the reference
|
|
35
|
+
* checkpointer; special negative-index writes always overwrite (see
|
|
36
|
+
* {@link commitPendingWrites}). Cleanup of this call's own uploads only ever
|
|
37
|
+
* targets uploads confirmed unreferenced: a verified non-commit, or a guard
|
|
38
|
+
* rejection whose returned row provably belongs to another call. A special write's superseded
|
|
39
|
+
* payload is released only once the write that superseded it committed. An
|
|
40
|
+
* upload can leak. A payload refused partway through the encode releases the
|
|
41
|
+
* objects the earlier writes of the same call had already uploaded, before the
|
|
42
|
+
* refusal reaches the caller and while no row of the call exists. Every
|
|
43
|
+
* offloaded write of this call is uploaded under the call's own `writeGroup`,
|
|
44
|
+
* so no row another call writes names one of this call's uploads, and no
|
|
45
|
+
* release reads the row again first.
|
|
13
46
|
*/
|
|
14
47
|
export declare function putWrites(context: CheckpointerContext, config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void>;
|
|
15
|
-
//# sourceMappingURL=put-writes.d.ts.map
|