@farukada/aws-langgraph-dynamodb-ts 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +224 -512
- package/dist/checkpointer/actions/delete-thread.d.ts +7 -6
- package/dist/checkpointer/actions/delete-thread.d.ts.map +1 -1
- package/dist/checkpointer/actions/delete-thread.js +47 -152
- package/dist/checkpointer/actions/delete-thread.js.map +1 -1
- package/dist/checkpointer/actions/get-tuple.d.ts +6 -14
- package/dist/checkpointer/actions/get-tuple.d.ts.map +1 -1
- package/dist/checkpointer/actions/get-tuple.js +13 -166
- package/dist/checkpointer/actions/get-tuple.js.map +1 -1
- package/dist/checkpointer/actions/list.d.ts +10 -0
- package/dist/checkpointer/actions/list.d.ts.map +1 -0
- package/dist/checkpointer/actions/list.js +51 -0
- package/dist/checkpointer/actions/list.js.map +1 -0
- package/dist/checkpointer/actions/put-writes.d.ts +6 -6
- package/dist/checkpointer/actions/put-writes.d.ts.map +1 -1
- package/dist/checkpointer/actions/put-writes.js +26 -75
- package/dist/checkpointer/actions/put-writes.js.map +1 -1
- package/dist/checkpointer/actions/put.d.ts +6 -11
- package/dist/checkpointer/actions/put.d.ts.map +1 -1
- package/dist/checkpointer/actions/put.js +29 -161
- package/dist/checkpointer/actions/put.js.map +1 -1
- package/dist/checkpointer/internal/assemble.d.ts +10 -0
- package/dist/checkpointer/internal/assemble.d.ts.map +1 -0
- package/dist/checkpointer/internal/assemble.js +37 -0
- package/dist/checkpointer/internal/assemble.js.map +1 -0
- package/dist/checkpointer/internal/configurable.d.ts +13 -0
- package/dist/checkpointer/internal/configurable.d.ts.map +1 -0
- package/dist/checkpointer/internal/configurable.js +23 -0
- package/dist/checkpointer/internal/configurable.js.map +1 -0
- package/dist/checkpointer/internal/fetch.d.ts +10 -0
- package/dist/checkpointer/internal/fetch.d.ts.map +1 -0
- package/dist/checkpointer/internal/fetch.js +46 -0
- package/dist/checkpointer/internal/fetch.js.map +1 -0
- package/dist/checkpointer/internal/filter-match.d.ts +12 -0
- package/dist/checkpointer/internal/filter-match.d.ts.map +1 -0
- package/dist/checkpointer/internal/filter-match.js +14 -0
- package/dist/checkpointer/internal/filter-match.js.map +1 -0
- package/dist/checkpointer/internal/item-reader.d.ts +10 -0
- package/dist/checkpointer/internal/item-reader.d.ts.map +1 -0
- package/dist/checkpointer/internal/item-reader.js +26 -0
- package/dist/checkpointer/internal/item-reader.js.map +1 -0
- package/dist/checkpointer/internal/item-writer.d.ts +14 -0
- package/dist/checkpointer/internal/item-writer.d.ts.map +1 -0
- package/dist/checkpointer/internal/item-writer.js +68 -0
- package/dist/checkpointer/internal/item-writer.js.map +1 -0
- package/dist/checkpointer/internal/keys.d.ts +15 -0
- package/dist/checkpointer/internal/keys.d.ts.map +1 -0
- package/dist/checkpointer/internal/keys.js +52 -0
- package/dist/checkpointer/internal/keys.js.map +1 -0
- package/dist/checkpointer/internal/query.d.ts +16 -0
- package/dist/checkpointer/internal/query.d.ts.map +1 -0
- package/dist/checkpointer/internal/query.js +33 -0
- package/dist/checkpointer/internal/query.js.map +1 -0
- package/dist/checkpointer/internal/setup.d.ts +31 -0
- package/dist/checkpointer/internal/setup.d.ts.map +1 -0
- package/dist/checkpointer/internal/setup.js +29 -0
- package/dist/checkpointer/internal/setup.js.map +1 -0
- package/dist/checkpointer/internal/validation.d.ts +9 -0
- package/dist/checkpointer/internal/validation.d.ts.map +1 -0
- package/dist/checkpointer/internal/validation.js +28 -0
- package/dist/checkpointer/internal/validation.js.map +1 -0
- package/dist/checkpointer/saver.d.ts +21 -0
- package/dist/checkpointer/saver.d.ts.map +1 -0
- package/dist/checkpointer/saver.js +49 -0
- package/dist/checkpointer/saver.js.map +1 -0
- package/dist/checkpointer/types.d.ts +43 -0
- package/dist/checkpointer/types.d.ts.map +1 -0
- package/dist/{store/types/index.js → checkpointer/types.js} +1 -1
- package/dist/checkpointer/types.js.map +1 -0
- package/dist/factory/factory.d.ts +41 -0
- package/dist/factory/factory.d.ts.map +1 -0
- package/dist/factory/factory.js +49 -0
- package/dist/factory/factory.js.map +1 -0
- package/dist/history/actions/add-messages.d.ts +12 -7
- package/dist/history/actions/add-messages.d.ts.map +1 -1
- package/dist/history/actions/add-messages.js +50 -48
- package/dist/history/actions/add-messages.js.map +1 -1
- package/dist/history/actions/clear.d.ts +5 -11
- package/dist/history/actions/clear.d.ts.map +1 -1
- package/dist/history/actions/clear.js +28 -62
- package/dist/history/actions/clear.js.map +1 -1
- package/dist/history/actions/get-messages.d.ts +6 -13
- package/dist/history/actions/get-messages.d.ts.map +1 -1
- package/dist/history/actions/get-messages.js +23 -59
- package/dist/history/actions/get-messages.js.map +1 -1
- package/dist/history/actions/list-sessions.d.ts +6 -22
- package/dist/history/actions/list-sessions.d.ts.map +1 -1
- package/dist/history/actions/list-sessions.js +26 -69
- package/dist/history/actions/list-sessions.js.map +1 -1
- package/dist/history/actions/reconcile-count.d.ts +10 -0
- package/dist/history/actions/reconcile-count.d.ts.map +1 -0
- package/dist/history/actions/reconcile-count.js +39 -0
- package/dist/history/actions/reconcile-count.js.map +1 -0
- package/dist/history/chat-message-history.d.ts +36 -0
- package/dist/history/chat-message-history.d.ts.map +1 -0
- package/dist/history/chat-message-history.js +67 -0
- package/dist/history/chat-message-history.js.map +1 -0
- package/dist/history/internal/append-saga.d.ts +17 -0
- package/dist/history/internal/append-saga.d.ts.map +1 -0
- package/dist/history/internal/append-saga.js +94 -0
- package/dist/history/internal/append-saga.js.map +1 -0
- package/dist/history/internal/item-mapper.d.ts +12 -0
- package/dist/history/internal/item-mapper.d.ts.map +1 -0
- package/dist/history/internal/item-mapper.js +33 -0
- package/dist/history/internal/item-mapper.js.map +1 -0
- package/dist/history/internal/keys.d.ts +9 -0
- package/dist/history/internal/keys.d.ts.map +1 -0
- package/dist/history/internal/keys.js +22 -0
- package/dist/history/internal/keys.js.map +1 -0
- package/dist/history/internal/message-chunker.d.ts +14 -0
- package/dist/history/internal/message-chunker.d.ts.map +1 -0
- package/dist/history/internal/message-chunker.js +60 -0
- package/dist/history/internal/message-chunker.js.map +1 -0
- package/dist/history/internal/message-transaction.d.ts +17 -0
- package/dist/history/internal/message-transaction.d.ts.map +1 -0
- package/dist/history/internal/message-transaction.js +27 -0
- package/dist/history/internal/message-transaction.js.map +1 -0
- package/dist/history/internal/query.d.ts +6 -0
- package/dist/history/internal/query.d.ts.map +1 -0
- package/dist/history/internal/query.js +28 -0
- package/dist/history/internal/query.js.map +1 -0
- package/dist/history/internal/session-update.d.ts +20 -0
- package/dist/history/internal/session-update.d.ts.map +1 -0
- package/dist/history/internal/session-update.js +46 -0
- package/dist/history/internal/session-update.js.map +1 -0
- package/dist/history/internal/setup.d.ts +28 -0
- package/dist/history/internal/setup.d.ts.map +1 -0
- package/dist/history/internal/setup.js +27 -0
- package/dist/history/internal/setup.js.map +1 -0
- package/dist/history/internal/title-generator.d.ts +7 -0
- package/dist/history/internal/title-generator.d.ts.map +1 -0
- package/dist/history/internal/title-generator.js +16 -0
- package/dist/history/internal/title-generator.js.map +1 -0
- package/dist/history/internal/ttl-anchor.d.ts +12 -0
- package/dist/history/internal/ttl-anchor.d.ts.map +1 -0
- package/dist/history/internal/ttl-anchor.js +26 -0
- package/dist/history/internal/ttl-anchor.js.map +1 -0
- package/dist/history/session-adapter.d.ts +10 -26
- package/dist/history/session-adapter.d.ts.map +1 -1
- package/dist/history/session-adapter.js +15 -57
- package/dist/history/session-adapter.js.map +1 -1
- package/dist/history/types.d.ts +36 -0
- package/dist/history/types.d.ts.map +1 -0
- package/dist/history/types.js +3 -0
- package/dist/history/types.js.map +1 -0
- package/dist/index.d.ts +18 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -16
- package/dist/index.js.map +1 -1
- package/dist/shared/clock.d.ts +3 -0
- package/dist/shared/clock.d.ts.map +1 -0
- package/dist/shared/clock.js +8 -0
- package/dist/shared/clock.js.map +1 -0
- package/dist/shared/codec/codec.d.ts +44 -0
- package/dist/shared/codec/codec.d.ts.map +1 -0
- package/dist/shared/codec/codec.js +44 -0
- package/dist/shared/codec/codec.js.map +1 -0
- package/dist/shared/codec/compression.d.ts +25 -0
- package/dist/shared/codec/compression.d.ts.map +1 -0
- package/dist/shared/codec/compression.js +49 -0
- package/dist/shared/codec/compression.js.map +1 -0
- package/dist/shared/codec/descriptor-keys.d.ts +4 -0
- package/dist/shared/codec/descriptor-keys.d.ts.map +1 -0
- package/dist/shared/codec/descriptor-keys.js +14 -0
- package/dist/shared/codec/descriptor-keys.js.map +1 -0
- package/dist/shared/codec/json-serde.d.ts +8 -0
- package/dist/shared/codec/json-serde.d.ts.map +1 -0
- package/dist/shared/codec/json-serde.js +18 -0
- package/dist/shared/codec/json-serde.js.map +1 -0
- package/dist/shared/codec/s3/client.d.ts +6 -0
- package/dist/shared/codec/s3/client.d.ts.map +1 -0
- package/dist/shared/codec/s3/client.js +18 -0
- package/dist/shared/codec/s3/client.js.map +1 -0
- package/dist/shared/codec/s3/config.d.ts +16 -0
- package/dist/shared/codec/s3/config.d.ts.map +1 -0
- package/dist/shared/codec/s3/config.js +14 -0
- package/dist/shared/codec/s3/config.js.map +1 -0
- package/dist/shared/codec/s3/delete.d.ts +8 -0
- package/dist/shared/codec/s3/delete.d.ts.map +1 -0
- package/dist/shared/codec/s3/delete.js +29 -0
- package/dist/shared/codec/s3/delete.js.map +1 -0
- package/dist/shared/codec/s3/lifecycle.d.ts +8 -0
- package/dist/shared/codec/s3/lifecycle.d.ts.map +1 -0
- package/dist/shared/codec/s3/lifecycle.js +47 -0
- package/dist/shared/codec/s3/lifecycle.js.map +1 -0
- package/dist/shared/codec/s3/offloader.d.ts +33 -0
- package/dist/shared/codec/s3/offloader.d.ts.map +1 -0
- package/dist/shared/codec/s3/offloader.js +80 -0
- package/dist/shared/codec/s3/offloader.js.map +1 -0
- package/dist/shared/codec/s3/orphans.d.ts +16 -0
- package/dist/shared/codec/s3/orphans.d.ts.map +1 -0
- package/dist/shared/codec/s3/orphans.js +73 -0
- package/dist/shared/codec/s3/orphans.js.map +1 -0
- package/dist/shared/codec/s3/read-write.d.ts +14 -0
- package/dist/shared/codec/s3/read-write.d.ts.map +1 -0
- package/dist/shared/codec/s3/read-write.js +42 -0
- package/dist/shared/codec/s3/read-write.js.map +1 -0
- package/dist/shared/constants.d.ts +37 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +40 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/dynamodb/backoff.d.ts +15 -0
- package/dist/shared/dynamodb/backoff.d.ts.map +1 -0
- package/dist/shared/dynamodb/backoff.js +48 -0
- package/dist/shared/dynamodb/backoff.js.map +1 -0
- package/dist/shared/dynamodb/batch-write.d.ts +10 -0
- package/dist/shared/dynamodb/batch-write.d.ts.map +1 -0
- package/dist/shared/dynamodb/batch-write.js +17 -0
- package/dist/shared/dynamodb/batch-write.js.map +1 -0
- package/dist/shared/dynamodb/client.d.ts +21 -0
- package/dist/shared/dynamodb/client.d.ts.map +1 -0
- package/dist/shared/dynamodb/client.js +19 -0
- package/dist/shared/dynamodb/client.js.map +1 -0
- package/dist/shared/dynamodb/drain-unprocessed.d.ts +15 -0
- package/dist/shared/dynamodb/drain-unprocessed.d.ts.map +1 -0
- package/dist/shared/dynamodb/drain-unprocessed.js +35 -0
- package/dist/shared/dynamodb/drain-unprocessed.js.map +1 -0
- package/dist/shared/dynamodb/paginate-core.d.ts +22 -0
- package/dist/shared/dynamodb/paginate-core.d.ts.map +1 -0
- package/dist/shared/dynamodb/paginate-core.js +52 -0
- package/dist/shared/dynamodb/paginate-core.js.map +1 -0
- package/dist/shared/dynamodb/paginate.d.ts +15 -0
- package/dist/shared/dynamodb/paginate.d.ts.map +1 -0
- package/dist/shared/dynamodb/paginate.js +20 -0
- package/dist/shared/dynamodb/paginate.js.map +1 -0
- package/dist/shared/dynamodb/retry-classifier.d.ts +9 -0
- package/dist/shared/dynamodb/retry-classifier.d.ts.map +1 -0
- package/dist/shared/dynamodb/retry-classifier.js +75 -0
- package/dist/shared/dynamodb/retry-classifier.js.map +1 -0
- package/dist/shared/dynamodb/retry.d.ts +18 -0
- package/dist/shared/dynamodb/retry.d.ts.map +1 -0
- package/dist/shared/dynamodb/retry.js +53 -0
- package/dist/shared/dynamodb/retry.js.map +1 -0
- package/dist/shared/dynamodb/scan.d.ts +15 -0
- package/dist/shared/dynamodb/scan.d.ts.map +1 -0
- package/dist/shared/dynamodb/scan.js +20 -0
- package/dist/shared/dynamodb/scan.js.map +1 -0
- package/dist/shared/dynamodb/types.d.ts +24 -0
- package/dist/shared/dynamodb/types.d.ts.map +1 -0
- package/dist/shared/dynamodb/types.js +3 -0
- package/dist/shared/dynamodb/types.js.map +1 -0
- package/dist/shared/errors/base-error.d.ts +22 -0
- package/dist/shared/errors/base-error.d.ts.map +1 -0
- package/dist/shared/errors/base-error.js +28 -0
- package/dist/shared/errors/base-error.js.map +1 -0
- package/dist/shared/errors/error-code.d.ts +13 -0
- package/dist/shared/errors/error-code.d.ts.map +1 -0
- package/dist/shared/errors/error-code.js +17 -0
- package/dist/shared/errors/error-code.js.map +1 -0
- package/dist/shared/errors/errors.d.ts +47 -0
- package/dist/shared/errors/errors.d.ts.map +1 -0
- package/dist/shared/errors/errors.js +82 -0
- package/dist/shared/errors/errors.js.map +1 -0
- package/dist/shared/errors/wrap-error.d.ts +16 -0
- package/dist/shared/errors/wrap-error.d.ts.map +1 -0
- package/dist/shared/errors/wrap-error.js +30 -0
- package/dist/shared/errors/wrap-error.js.map +1 -0
- package/dist/shared/logging/logger.d.ts +14 -0
- package/dist/shared/logging/logger.d.ts.map +1 -0
- package/dist/shared/logging/logger.js +16 -0
- package/dist/shared/logging/logger.js.map +1 -0
- package/dist/shared/logging/redaction.d.ts +19 -0
- package/dist/shared/logging/redaction.d.ts.map +1 -0
- package/dist/shared/logging/redaction.js +67 -0
- package/dist/shared/logging/redaction.js.map +1 -0
- package/dist/shared/options.d.ts +32 -0
- package/dist/shared/options.d.ts.map +1 -0
- package/dist/shared/options.js +3 -0
- package/dist/shared/options.js.map +1 -0
- package/dist/shared/ulid.d.ts +10 -0
- package/dist/shared/ulid.d.ts.map +1 -0
- package/dist/shared/ulid.js +65 -0
- package/dist/shared/ulid.js.map +1 -0
- package/dist/shared/validation/primitives.d.ts +17 -0
- package/dist/shared/validation/primitives.d.ts.map +1 -0
- package/dist/shared/validation/primitives.js +71 -0
- package/dist/shared/validation/primitives.js.map +1 -0
- package/dist/shared/validation/ttl.d.ts +16 -0
- package/dist/shared/validation/ttl.d.ts.map +1 -0
- package/dist/shared/validation/ttl.js +26 -0
- package/dist/shared/validation/ttl.js.map +1 -0
- package/dist/store/actions/get.d.ts +5 -0
- package/dist/store/actions/get.d.ts.map +1 -0
- package/dist/store/actions/get.js +21 -0
- package/dist/store/actions/get.js.map +1 -0
- package/dist/store/actions/list-namespaces.d.ts +9 -0
- package/dist/store/actions/list-namespaces.d.ts.map +1 -0
- package/dist/store/actions/list-namespaces.js +46 -0
- package/dist/store/actions/list-namespaces.js.map +1 -0
- package/dist/store/actions/put.d.ts +11 -0
- package/dist/store/actions/put.d.ts.map +1 -0
- package/dist/store/actions/put.js +81 -0
- package/dist/store/actions/put.js.map +1 -0
- package/dist/store/actions/reconcile-vector-index.d.ts +17 -0
- package/dist/store/actions/reconcile-vector-index.d.ts.map +1 -0
- package/dist/store/actions/reconcile-vector-index.js +27 -0
- package/dist/store/actions/reconcile-vector-index.js.map +1 -0
- package/dist/store/actions/search.d.ts +10 -0
- package/dist/store/actions/search.d.ts.map +1 -0
- package/dist/store/actions/search.js +72 -0
- package/dist/store/actions/search.js.map +1 -0
- package/dist/store/internal/filter.d.ts +10 -0
- package/dist/store/internal/filter.d.ts.map +1 -0
- package/dist/store/internal/filter.js +37 -0
- package/dist/store/internal/filter.js.map +1 -0
- package/dist/store/internal/index-reconcile.d.ts +22 -0
- package/dist/store/internal/index-reconcile.d.ts.map +1 -0
- package/dist/store/internal/index-reconcile.js +68 -0
- package/dist/store/internal/index-reconcile.js.map +1 -0
- package/dist/store/internal/index-sync.d.ts +11 -0
- package/dist/store/internal/index-sync.d.ts.map +1 -0
- package/dist/store/internal/index-sync.js +26 -0
- package/dist/store/internal/index-sync.js.map +1 -0
- package/dist/store/internal/item-mapper.d.ts +23 -0
- package/dist/store/internal/item-mapper.d.ts.map +1 -0
- package/dist/store/internal/item-mapper.js +51 -0
- package/dist/store/internal/item-mapper.js.map +1 -0
- package/dist/store/internal/keys.d.ts +18 -0
- package/dist/store/internal/keys.d.ts.map +1 -0
- package/dist/store/internal/keys.js +36 -0
- package/dist/store/internal/keys.js.map +1 -0
- package/dist/store/internal/namespace-match.d.ts +12 -0
- package/dist/store/internal/namespace-match.d.ts.map +1 -0
- package/dist/store/internal/namespace-match.js +41 -0
- package/dist/store/internal/namespace-match.js.map +1 -0
- package/dist/store/internal/query.d.ts +6 -0
- package/dist/store/internal/query.d.ts.map +1 -0
- package/dist/store/internal/query.js +32 -0
- package/dist/store/internal/query.js.map +1 -0
- package/dist/store/internal/ranker.d.ts +13 -0
- package/dist/store/internal/ranker.d.ts.map +1 -0
- package/dist/store/internal/ranker.js +29 -0
- package/dist/store/internal/ranker.js.map +1 -0
- package/dist/store/internal/semantic-search.d.ts +13 -0
- package/dist/store/internal/semantic-search.d.ts.map +1 -0
- package/dist/store/internal/semantic-search.js +47 -0
- package/dist/store/internal/semantic-search.js.map +1 -0
- package/dist/store/internal/setup.d.ts +31 -0
- package/dist/store/internal/setup.d.ts.map +1 -0
- package/dist/store/internal/setup.js +29 -0
- package/dist/store/internal/setup.js.map +1 -0
- package/dist/store/internal/validation.d.ts +7 -0
- package/dist/store/internal/validation.d.ts.map +1 -0
- package/dist/store/internal/validation.js +26 -0
- package/dist/store/internal/validation.js.map +1 -0
- package/dist/store/store.d.ts +24 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.js +58 -0
- package/dist/store/store.js.map +1 -0
- package/dist/store/types.d.ts +28 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +3 -0
- package/dist/store/types.js.map +1 -0
- package/dist/store/vector-backend.d.ts +27 -0
- package/dist/store/vector-backend.d.ts.map +1 -0
- package/dist/store/vector-backend.js +3 -0
- package/dist/store/vector-backend.js.map +1 -0
- package/package.json +21 -22
- package/dist/checkpointer/actions/index.d.ts +0 -5
- package/dist/checkpointer/actions/index.d.ts.map +0 -1
- package/dist/checkpointer/actions/index.js +0 -21
- package/dist/checkpointer/actions/index.js.map +0 -1
- package/dist/checkpointer/actions/validate-configurable.d.ts +0 -10
- package/dist/checkpointer/actions/validate-configurable.d.ts.map +0 -1
- package/dist/checkpointer/actions/validate-configurable.js +0 -39
- package/dist/checkpointer/actions/validate-configurable.js.map +0 -1
- package/dist/checkpointer/actions/writer.d.ts +0 -52
- package/dist/checkpointer/actions/writer.d.ts.map +0 -1
- package/dist/checkpointer/actions/writer.js +0 -109
- package/dist/checkpointer/actions/writer.js.map +0 -1
- package/dist/checkpointer/index.d.ts +0 -118
- package/dist/checkpointer/index.d.ts.map +0 -1
- package/dist/checkpointer/index.js +0 -393
- package/dist/checkpointer/index.js.map +0 -1
- package/dist/checkpointer/types/index.d.ts +0 -232
- package/dist/checkpointer/types/index.d.ts.map +0 -1
- package/dist/checkpointer/types/index.js +0 -13
- package/dist/checkpointer/types/index.js.map +0 -1
- package/dist/checkpointer/utils/deserialization.d.ts +0 -20
- package/dist/checkpointer/utils/deserialization.d.ts.map +0 -1
- package/dist/checkpointer/utils/deserialization.js +0 -81
- package/dist/checkpointer/utils/deserialization.js.map +0 -1
- package/dist/checkpointer/utils/index.d.ts +0 -7
- package/dist/checkpointer/utils/index.d.ts.map +0 -1
- package/dist/checkpointer/utils/index.js +0 -27
- package/dist/checkpointer/utils/index.js.map +0 -1
- package/dist/checkpointer/utils/validation.d.ts +0 -48
- package/dist/checkpointer/utils/validation.d.ts.map +0 -1
- package/dist/checkpointer/utils/validation.js +0 -235
- package/dist/checkpointer/utils/validation.js.map +0 -1
- package/dist/factory.d.ts +0 -153
- package/dist/factory.d.ts.map +0 -1
- package/dist/factory.js +0 -206
- package/dist/factory.js.map +0 -1
- package/dist/history/actions/add-message.d.ts +0 -10
- package/dist/history/actions/add-message.d.ts.map +0 -1
- package/dist/history/actions/add-message.js +0 -24
- package/dist/history/actions/add-message.js.map +0 -1
- package/dist/history/actions/index.d.ts +0 -9
- package/dist/history/actions/index.d.ts.map +0 -1
- package/dist/history/actions/index.js +0 -17
- package/dist/history/actions/index.js.map +0 -1
- package/dist/history/index.d.ts +0 -118
- package/dist/history/index.d.ts.map +0 -1
- package/dist/history/index.js +0 -179
- package/dist/history/index.js.map +0 -1
- package/dist/history/types/index.d.ts +0 -184
- package/dist/history/types/index.d.ts.map +0 -1
- package/dist/history/types/index.js +0 -7
- package/dist/history/types/index.js.map +0 -1
- package/dist/history/utils/index.d.ts +0 -9
- package/dist/history/utils/index.d.ts.map +0 -1
- package/dist/history/utils/index.js +0 -27
- package/dist/history/utils/index.js.map +0 -1
- package/dist/history/utils/optimistic-retry.d.ts +0 -31
- package/dist/history/utils/optimistic-retry.d.ts.map +0 -1
- package/dist/history/utils/optimistic-retry.js +0 -74
- package/dist/history/utils/optimistic-retry.js.map +0 -1
- package/dist/history/utils/title-generator.d.ts +0 -12
- package/dist/history/utils/title-generator.d.ts.map +0 -1
- package/dist/history/utils/title-generator.js +0 -57
- package/dist/history/utils/title-generator.js.map +0 -1
- package/dist/history/utils/update-expression-builder.d.ts +0 -55
- package/dist/history/utils/update-expression-builder.d.ts.map +0 -1
- package/dist/history/utils/update-expression-builder.js +0 -112
- package/dist/history/utils/update-expression-builder.js.map +0 -1
- package/dist/history/utils/validation.d.ts +0 -68
- package/dist/history/utils/validation.d.ts.map +0 -1
- package/dist/history/utils/validation.js +0 -213
- package/dist/history/utils/validation.js.map +0 -1
- package/dist/shared/index.d.ts +0 -5
- package/dist/shared/index.d.ts.map +0 -1
- package/dist/shared/index.js +0 -21
- package/dist/shared/index.js.map +0 -1
- package/dist/shared/utils/batch-write.d.ts +0 -74
- package/dist/shared/utils/batch-write.d.ts.map +0 -1
- package/dist/shared/utils/batch-write.js +0 -110
- package/dist/shared/utils/batch-write.js.map +0 -1
- package/dist/shared/utils/client-factory.d.ts +0 -25
- package/dist/shared/utils/client-factory.d.ts.map +0 -1
- package/dist/shared/utils/client-factory.js +0 -23
- package/dist/shared/utils/client-factory.js.map +0 -1
- package/dist/shared/utils/compressor.d.ts +0 -66
- package/dist/shared/utils/compressor.d.ts.map +0 -1
- package/dist/shared/utils/compressor.js +0 -133
- package/dist/shared/utils/compressor.js.map +0 -1
- package/dist/shared/utils/constants.d.ts +0 -13
- package/dist/shared/utils/constants.d.ts.map +0 -1
- package/dist/shared/utils/constants.js +0 -35
- package/dist/shared/utils/constants.js.map +0 -1
- package/dist/shared/utils/index.d.ts +0 -14
- package/dist/shared/utils/index.d.ts.map +0 -1
- package/dist/shared/utils/index.js +0 -30
- package/dist/shared/utils/index.js.map +0 -1
- package/dist/shared/utils/logger.d.ts +0 -75
- package/dist/shared/utils/logger.d.ts.map +0 -1
- package/dist/shared/utils/logger.js +0 -148
- package/dist/shared/utils/logger.js.map +0 -1
- package/dist/shared/utils/retry.d.ts +0 -26
- package/dist/shared/utils/retry.d.ts.map +0 -1
- package/dist/shared/utils/retry.js +0 -169
- package/dist/shared/utils/retry.js.map +0 -1
- package/dist/shared/utils/s3-offloader.d.ts +0 -153
- package/dist/shared/utils/s3-offloader.d.ts.map +0 -1
- package/dist/shared/utils/s3-offloader.js +0 -281
- package/dist/shared/utils/s3-offloader.js.map +0 -1
- package/dist/shared/utils/s3-orphans.d.ts +0 -16
- package/dist/shared/utils/s3-orphans.d.ts.map +0 -1
- package/dist/shared/utils/s3-orphans.js +0 -79
- package/dist/shared/utils/s3-orphans.js.map +0 -1
- package/dist/shared/utils/sleep.d.ts +0 -48
- package/dist/shared/utils/sleep.d.ts.map +0 -1
- package/dist/shared/utils/sleep.js +0 -82
- package/dist/shared/utils/sleep.js.map +0 -1
- package/dist/shared/utils/ttl.d.ts +0 -24
- package/dist/shared/utils/ttl.d.ts.map +0 -1
- package/dist/shared/utils/ttl.js +0 -43
- package/dist/shared/utils/ttl.js.map +0 -1
- package/dist/store/actions/get-operation.d.ts +0 -11
- package/dist/store/actions/get-operation.d.ts.map +0 -1
- package/dist/store/actions/get-operation.js +0 -42
- package/dist/store/actions/get-operation.js.map +0 -1
- package/dist/store/actions/index.d.ts +0 -5
- package/dist/store/actions/index.d.ts.map +0 -1
- package/dist/store/actions/index.js +0 -21
- package/dist/store/actions/index.js.map +0 -1
- package/dist/store/actions/list-namespaces-operation.d.ts +0 -10
- package/dist/store/actions/list-namespaces-operation.d.ts.map +0 -1
- package/dist/store/actions/list-namespaces-operation.js +0 -227
- package/dist/store/actions/list-namespaces-operation.js.map +0 -1
- package/dist/store/actions/put-operation.d.ts +0 -9
- package/dist/store/actions/put-operation.d.ts.map +0 -1
- package/dist/store/actions/put-operation.js +0 -107
- package/dist/store/actions/put-operation.js.map +0 -1
- package/dist/store/actions/search-operation.d.ts +0 -17
- package/dist/store/actions/search-operation.d.ts.map +0 -1
- package/dist/store/actions/search-operation.js +0 -203
- package/dist/store/actions/search-operation.js.map +0 -1
- package/dist/store/index.d.ts +0 -82
- package/dist/store/index.d.ts.map +0 -1
- package/dist/store/index.js +0 -172
- package/dist/store/index.js.map +0 -1
- package/dist/store/types/index.d.ts +0 -131
- package/dist/store/types/index.d.ts.map +0 -1
- package/dist/store/types/index.js.map +0 -1
- package/dist/store/utils/filter.d.ts +0 -16
- package/dist/store/utils/filter.d.ts.map +0 -1
- package/dist/store/utils/filter.js +0 -133
- package/dist/store/utils/filter.js.map +0 -1
- package/dist/store/utils/index.d.ts +0 -7
- package/dist/store/utils/index.d.ts.map +0 -1
- package/dist/store/utils/index.js +0 -27
- package/dist/store/utils/index.js.map +0 -1
- package/dist/store/utils/validation.d.ts +0 -61
- package/dist/store/utils/validation.d.ts.map +0 -1
- package/dist/store/utils/validation.js +0 -260
- package/dist/store/utils/validation.js.map +0 -1
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.searchItems = searchItems;
|
|
4
|
+
const paginate_1 = require("../../shared/dynamodb/paginate");
|
|
5
|
+
const scan_1 = require("../../shared/dynamodb/scan");
|
|
6
|
+
const filter_1 = require("../internal/filter");
|
|
7
|
+
const item_mapper_1 = require("../internal/item-mapper");
|
|
8
|
+
const keys_1 = require("../internal/keys");
|
|
9
|
+
const query_1 = require("../internal/query");
|
|
10
|
+
const ranker_1 = require("../internal/ranker");
|
|
11
|
+
const validation_1 = require("../internal/validation");
|
|
12
|
+
const get_1 = require("./get");
|
|
13
|
+
const DEFAULT_LIMIT = 10;
|
|
14
|
+
function passesFilter(item, op) {
|
|
15
|
+
if (!op.filter)
|
|
16
|
+
return true;
|
|
17
|
+
return (0, filter_1.matchesStoreFilter)(item.value, op.filter);
|
|
18
|
+
}
|
|
19
|
+
async function collectCandidates(context, op) {
|
|
20
|
+
const source = op.namespacePrefix.length > 0
|
|
21
|
+
? (0, paginate_1.paginateQuery)({
|
|
22
|
+
client: context.client,
|
|
23
|
+
params: (0, query_1.scopedQuery)(context.tableName, op.namespacePrefix),
|
|
24
|
+
})
|
|
25
|
+
: (0, scan_1.paginateScan)({ client: context.client, params: (0, query_1.storeScan)(context.tableName) });
|
|
26
|
+
const candidates = [];
|
|
27
|
+
for await (const raw of source) {
|
|
28
|
+
const record = (0, item_mapper_1.narrowStoreRecord)(raw);
|
|
29
|
+
if (!record)
|
|
30
|
+
continue;
|
|
31
|
+
if (!(0, keys_1.namespaceMatchesPrefix)(record.namespace, op.namespacePrefix))
|
|
32
|
+
continue;
|
|
33
|
+
const item = await (0, item_mapper_1.readStoreItem)(context, record);
|
|
34
|
+
if (!passesFilter(item, op))
|
|
35
|
+
continue;
|
|
36
|
+
candidates.push({ item, embedding: record.embedding });
|
|
37
|
+
}
|
|
38
|
+
return candidates;
|
|
39
|
+
}
|
|
40
|
+
async function searchViaBackend(context, backend, index, op, topK) {
|
|
41
|
+
const queryVector = await index.embeddings.embedQuery(op.query);
|
|
42
|
+
const matches = await backend.query(op.namespacePrefix, queryVector, topK);
|
|
43
|
+
const results = [];
|
|
44
|
+
for (const match of matches) {
|
|
45
|
+
const item = await (0, get_1.getItem)(context, match.namespace, match.key);
|
|
46
|
+
if (item && passesFilter(item, op))
|
|
47
|
+
results.push({ ...item, score: match.score });
|
|
48
|
+
}
|
|
49
|
+
return results;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Search items under a namespace prefix: metadata filtering plus optional
|
|
53
|
+
* semantic ranking. A non-empty prefix uses a native Query; an empty prefix
|
|
54
|
+
* falls back to a (filtered) Scan. Semantic ranking uses the configured
|
|
55
|
+
* VectorBackend when present, else an in-memory cosine ranking (capped).
|
|
56
|
+
*/
|
|
57
|
+
async function searchItems(context, op) {
|
|
58
|
+
const offset = op.offset ?? 0;
|
|
59
|
+
const limit = op.limit ?? DEFAULT_LIMIT;
|
|
60
|
+
(0, validation_1.validatePaging)(offset, limit);
|
|
61
|
+
if (op.query && context.index && context.vectorBackend) {
|
|
62
|
+
const ranked = await searchViaBackend(context, context.vectorBackend, context.index, op, offset + limit);
|
|
63
|
+
return ranked.slice(offset, offset + limit);
|
|
64
|
+
}
|
|
65
|
+
const candidates = await collectCandidates(context, op);
|
|
66
|
+
if (!op.query || !context.index) {
|
|
67
|
+
return candidates.map(({ item }) => ({ ...item })).slice(offset, offset + limit);
|
|
68
|
+
}
|
|
69
|
+
const queryVector = await context.index.embeddings.embedQuery(op.query);
|
|
70
|
+
return (0, ranker_1.rankInMemory)(candidates, queryVector, context.maxSearchCandidates).slice(offset, offset + limit);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/store/actions/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** A JSON value stored in an item or supplied in a filter. */
|
|
2
|
+
export type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
3
|
+
[key: string]: JsonValue;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* True when `value` satisfies every field condition in `filter`. A plain value
|
|
7
|
+
* is exact-match ($eq); an operator object ({ $gt: 4 }) applies comparisons.
|
|
8
|
+
*/
|
|
9
|
+
export declare function matchesStoreFilter(value: Record<string, JsonValue>, filter: Record<string, JsonValue>): boolean;
|
|
10
|
+
//# sourceMappingURL=filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/store/internal/filter.ts"],"names":[],"mappings":"AAIA,8DAA8D;AAC9D,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AA6BjC;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAChC,OAAO,CAIT"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.matchesStoreFilter = matchesStoreFilter;
|
|
4
|
+
const node_util_1 = require("node:util");
|
|
5
|
+
const errors_1 = require("../../shared/errors/errors");
|
|
6
|
+
const COMPARATORS = {
|
|
7
|
+
$eq: (actual, expected) => (0, node_util_1.isDeepStrictEqual)(actual, expected),
|
|
8
|
+
$ne: (actual, expected) => !(0, node_util_1.isDeepStrictEqual)(actual, expected),
|
|
9
|
+
$gt: (actual, expected) => actual > expected,
|
|
10
|
+
$gte: (actual, expected) => actual >= expected,
|
|
11
|
+
$lt: (actual, expected) => actual < expected,
|
|
12
|
+
$lte: (actual, expected) => actual <= expected,
|
|
13
|
+
};
|
|
14
|
+
function isOperatorObject(condition) {
|
|
15
|
+
return (typeof condition === 'object' &&
|
|
16
|
+
condition !== null &&
|
|
17
|
+
!Array.isArray(condition) &&
|
|
18
|
+
Object.keys(condition).every((key) => key.startsWith('$')));
|
|
19
|
+
}
|
|
20
|
+
function matchesCondition(actual, condition) {
|
|
21
|
+
if (!isOperatorObject(condition))
|
|
22
|
+
return (0, node_util_1.isDeepStrictEqual)(actual, condition);
|
|
23
|
+
return Object.entries(condition).every(([operator, expected]) => {
|
|
24
|
+
const comparator = COMPARATORS[operator];
|
|
25
|
+
if (!comparator)
|
|
26
|
+
throw new errors_1.ValidationError(`Unknown filter operator "${operator}"`, 'filter');
|
|
27
|
+
return comparator(actual, expected);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* True when `value` satisfies every field condition in `filter`. A plain value
|
|
32
|
+
* is exact-match ($eq); an operator object ({ $gt: 4 }) applies comparisons.
|
|
33
|
+
*/
|
|
34
|
+
function matchesStoreFilter(value, filter) {
|
|
35
|
+
return Object.entries(filter).every(([field, condition]) => matchesCondition(value[field], condition));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/store/internal/filter.ts"],"names":[],"mappings":";;AA4CA,gDAOC;AAnDD,yCAA8C;AAE9C,uDAA6D;AAW7D,MAAM,WAAW,GAAwE;IACvF,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAA,6BAAiB,EAAC,MAAM,EAAE,QAAQ,CAAC;IAC9D,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAA,6BAAiB,EAAC,MAAM,EAAE,QAAQ,CAAC;IAC/D,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,GAAI,QAAmB;IACpE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,IAAK,QAAmB;IACtE,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,GAAI,QAAmB;IACpE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,IAAK,QAAmB;CACvE,CAAC;AAEF,SAAS,gBAAgB,CAAC,SAAoB;IAC5C,OAAO,CACL,OAAO,SAAS,KAAK,QAAQ;QAC7B,SAAS,KAAK,IAAI;QAClB,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAiB,EAAE,SAAoB;IAC/D,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAAE,OAAO,IAAA,6BAAiB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE;QAC9D,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,wBAAe,CAAC,4BAA4B,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC9F,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,KAAgC,EAChC,MAAiC;IAEjC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,CACzD,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAC1C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { VectorBackend, VectorRef } from '../vector-backend';
|
|
2
|
+
import type { StoreContext } from './setup';
|
|
3
|
+
/** A canonical item's location plus the embedding recomputed for it. */
|
|
4
|
+
export interface ReconcileTarget {
|
|
5
|
+
namespace: string[];
|
|
6
|
+
key: string;
|
|
7
|
+
embedding: number[] | undefined;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Enumerate canonical items under `prefix`, recomputing each embedding. A failed
|
|
11
|
+
* embedding rejects the whole reconcile by design: silently skipping an item
|
|
12
|
+
* would drop it from the live set, after which {@link selectOrphans} would prune
|
|
13
|
+
* its still-valid backend vector. Fail-fast keeps the backend from losing data.
|
|
14
|
+
*/
|
|
15
|
+
export declare function collectReconcileTargets(context: StoreContext, prefix: string[]): Promise<ReconcileTarget[]>;
|
|
16
|
+
/** Re-push every live embedding to the backend; returns the upsert count. */
|
|
17
|
+
export declare function pushEmbeddings(backend: VectorBackend, targets: ReconcileTarget[]): Promise<number>;
|
|
18
|
+
/** Refs present in the backend but absent from `live` — orphans to prune. */
|
|
19
|
+
export declare function selectOrphans(backendRefs: VectorRef[], live: ReconcileTarget[]): VectorRef[];
|
|
20
|
+
/** Delete backend vectors with no canonical item; returns the prune count. */
|
|
21
|
+
export declare function pruneOrphans(context: StoreContext, backend: VectorBackend, prefix: string[], live: ReconcileTarget[]): Promise<number>;
|
|
22
|
+
//# sourceMappingURL=index-reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-reconcile.d.ts","sourceRoot":"","sources":["../../../src/store/internal/index-reconcile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACjC;AAOD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,eAAe,EAAE,CAAC,CAc5B;AAED,6EAA6E;AAC7E,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,eAAe,EAAE,GACzB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,SAAS,EAAE,CAG5F;AAED,8EAA8E;AAC9E,wBAAsB,YAAY,CAChC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,eAAe,EAAE,GACtB,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.collectReconcileTargets = collectReconcileTargets;
|
|
4
|
+
exports.pushEmbeddings = pushEmbeddings;
|
|
5
|
+
exports.selectOrphans = selectOrphans;
|
|
6
|
+
exports.pruneOrphans = pruneOrphans;
|
|
7
|
+
const paginate_1 = require("../../shared/dynamodb/paginate");
|
|
8
|
+
const item_mapper_1 = require("./item-mapper");
|
|
9
|
+
const keys_1 = require("./keys");
|
|
10
|
+
const query_1 = require("./query");
|
|
11
|
+
const semantic_search_1 = require("./semantic-search");
|
|
12
|
+
/** Separator joining namespace elements into a collision-free identity. */
|
|
13
|
+
const REF_KEY_SEPARATOR = ' ';
|
|
14
|
+
/** Stable identity for a (namespace, key) pair. */
|
|
15
|
+
function refIdentity(namespace, key) {
|
|
16
|
+
return `${namespace.join(REF_KEY_SEPARATOR)}${REF_KEY_SEPARATOR}${key}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Enumerate canonical items under `prefix`, recomputing each embedding. A failed
|
|
20
|
+
* embedding rejects the whole reconcile by design: silently skipping an item
|
|
21
|
+
* would drop it from the live set, after which {@link selectOrphans} would prune
|
|
22
|
+
* its still-valid backend vector. Fail-fast keeps the backend from losing data.
|
|
23
|
+
*/
|
|
24
|
+
async function collectReconcileTargets(context, prefix) {
|
|
25
|
+
const targets = [];
|
|
26
|
+
const source = (0, paginate_1.paginateQuery)({
|
|
27
|
+
client: context.client,
|
|
28
|
+
params: (0, query_1.scopedQuery)(context.tableName, prefix),
|
|
29
|
+
});
|
|
30
|
+
for await (const raw of source) {
|
|
31
|
+
const record = raw;
|
|
32
|
+
if (!record.namespace || !(0, keys_1.namespaceMatchesPrefix)(record.namespace, prefix))
|
|
33
|
+
continue;
|
|
34
|
+
const item = await (0, item_mapper_1.readStoreItem)(context, record);
|
|
35
|
+
const embedding = await (0, semantic_search_1.embedValue)(context, item.value);
|
|
36
|
+
targets.push({ namespace: record.namespace, key: record.key, embedding });
|
|
37
|
+
}
|
|
38
|
+
return targets;
|
|
39
|
+
}
|
|
40
|
+
/** Re-push every live embedding to the backend; returns the upsert count. */
|
|
41
|
+
async function pushEmbeddings(backend, targets) {
|
|
42
|
+
let upserted = 0;
|
|
43
|
+
for (const target of targets) {
|
|
44
|
+
if (!target.embedding)
|
|
45
|
+
continue;
|
|
46
|
+
await backend.upsert(target.namespace, target.key, target.embedding);
|
|
47
|
+
upserted += 1;
|
|
48
|
+
}
|
|
49
|
+
return upserted;
|
|
50
|
+
}
|
|
51
|
+
/** Refs present in the backend but absent from `live` — orphans to prune. */
|
|
52
|
+
function selectOrphans(backendRefs, live) {
|
|
53
|
+
const liveKeys = new Set(live.map((target) => refIdentity(target.namespace, target.key)));
|
|
54
|
+
return backendRefs.filter((ref) => !liveKeys.has(refIdentity(ref.namespace, ref.key)));
|
|
55
|
+
}
|
|
56
|
+
/** Delete backend vectors with no canonical item; returns the prune count. */
|
|
57
|
+
async function pruneOrphans(context, backend, prefix, live) {
|
|
58
|
+
if (!backend.listKeys) {
|
|
59
|
+
context.logger.info('reconcileVectorIndex prune skipped: backend has no listKeys', { prefix });
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
const orphans = selectOrphans(await backend.listKeys(prefix), live);
|
|
63
|
+
for (const ref of orphans) {
|
|
64
|
+
await backend.delete(ref.namespace, ref.key);
|
|
65
|
+
}
|
|
66
|
+
return orphans.length;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=index-reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-reconcile.js","sourceRoot":"","sources":["../../../src/store/internal/index-reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Logger } from '../../shared/logging/logger';
|
|
2
|
+
import type { VectorBackend } from '../vector-backend';
|
|
3
|
+
/**
|
|
4
|
+
* Best-effort sync of one item's embedding to the vector backend after the
|
|
5
|
+
* canonical DynamoDB write has already succeeded. A present embedding upserts;
|
|
6
|
+
* its absence deletes any stale vector. Failures are logged at `warn` and
|
|
7
|
+
* swallowed — the canonical item stands and `reconcileVectorIndex` repairs any
|
|
8
|
+
* drift — so a backend hiccup never fails an otherwise-successful put.
|
|
9
|
+
*/
|
|
10
|
+
export declare function syncVectorIndex(backend: VectorBackend, namespace: string[], key: string, embedding: number[] | undefined, logger: Logger): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=index-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-sync.d.ts","sourceRoot":"","sources":["../../../src/store/internal/index-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EAAE,EACnB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,EAC/B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.syncVectorIndex = syncVectorIndex;
|
|
4
|
+
/**
|
|
5
|
+
* Best-effort sync of one item's embedding to the vector backend after the
|
|
6
|
+
* canonical DynamoDB write has already succeeded. A present embedding upserts;
|
|
7
|
+
* its absence deletes any stale vector. Failures are logged at `warn` and
|
|
8
|
+
* swallowed — the canonical item stands and `reconcileVectorIndex` repairs any
|
|
9
|
+
* drift — so a backend hiccup never fails an otherwise-successful put.
|
|
10
|
+
*/
|
|
11
|
+
async function syncVectorIndex(backend, namespace, key, embedding, logger) {
|
|
12
|
+
try {
|
|
13
|
+
if (embedding)
|
|
14
|
+
await backend.upsert(namespace, key, embedding);
|
|
15
|
+
else
|
|
16
|
+
await backend.delete(namespace, key);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
logger.warn('store.put vector-index sync failed; reconcileVectorIndex will repair', {
|
|
20
|
+
namespace,
|
|
21
|
+
key,
|
|
22
|
+
message: error.message,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=index-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-sync.js","sourceRoot":"","sources":["../../../src/store/internal/index-sync.ts"],"names":[],"mappings":";;AAUA,0CAiBC;AAxBD;;;;;;GAMG;AACI,KAAK,UAAU,eAAe,CACnC,OAAsB,EACtB,SAAmB,EACnB,GAAW,EACX,SAA+B,EAC/B,MAAc;IAEd,IAAI,CAAC;QACH,IAAI,SAAS;YAAE,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;;YAC1D,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,sEAAsE,EAAE;YAClF,SAAS;YACT,GAAG;YACH,OAAO,EAAG,KAAe,CAAC,OAAO;SAClC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Item } from '@langchain/langgraph-checkpoint';
|
|
2
|
+
import type { DocItem } from '../../shared/dynamodb/types';
|
|
3
|
+
import type { StoreItemRecord } from '../types';
|
|
4
|
+
import type { JsonValue } from './filter';
|
|
5
|
+
import type { StoreContext } from './setup';
|
|
6
|
+
/**
|
|
7
|
+
* Narrow a raw scanned row to a {@link StoreItemRecord}, or `undefined` for a
|
|
8
|
+
* foreign row on a shared table (no `namespace`). Replaces an unchecked cast at
|
|
9
|
+
* the scan boundary, the one place rows are not written by this library.
|
|
10
|
+
*/
|
|
11
|
+
export declare function narrowStoreRecord(raw: DocItem): StoreItemRecord | undefined;
|
|
12
|
+
/** Fields controlling a stored item's timestamps, embedding, and ttl. */
|
|
13
|
+
export interface BuildItemOptions {
|
|
14
|
+
createdAt: string;
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
embedding?: number[];
|
|
17
|
+
ttlTimestamp?: number;
|
|
18
|
+
}
|
|
19
|
+
/** Encode a value into the DynamoDB record for a stored item. */
|
|
20
|
+
export declare function buildStoreItem(context: StoreContext, namespace: string[], key: string, value: Record<string, JsonValue>, options: BuildItemOptions): Promise<StoreItemRecord>;
|
|
21
|
+
/** Decode a DynamoDB record back into a store {@link Item}. */
|
|
22
|
+
export declare function readStoreItem(context: StoreContext, record: StoreItemRecord): Promise<Item>;
|
|
23
|
+
//# sourceMappingURL=item-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-mapper.d.ts","sourceRoot":"","sources":["../../../src/store/internal/item-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAG5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAE3E;AAOD,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,iEAAiE;AACjE,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EAAE,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,+DAA+D;AAC/D,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAYjG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.narrowStoreRecord = narrowStoreRecord;
|
|
4
|
+
exports.buildStoreItem = buildStoreItem;
|
|
5
|
+
exports.readStoreItem = readStoreItem;
|
|
6
|
+
const codec_1 = require("../../shared/codec/codec");
|
|
7
|
+
const keys_1 = require("./keys");
|
|
8
|
+
/**
|
|
9
|
+
* Narrow a raw scanned row to a {@link StoreItemRecord}, or `undefined` for a
|
|
10
|
+
* foreign row on a shared table (no `namespace`). Replaces an unchecked cast at
|
|
11
|
+
* the scan boundary, the one place rows are not written by this library.
|
|
12
|
+
*/
|
|
13
|
+
function narrowStoreRecord(raw) {
|
|
14
|
+
return Array.isArray(raw.namespace) ? raw : undefined;
|
|
15
|
+
}
|
|
16
|
+
/** Map a store context to the codec collaborators. */
|
|
17
|
+
function storeCodecDeps(context) {
|
|
18
|
+
return { serde: context.serde, compression: context.compression, offloader: context.offloader };
|
|
19
|
+
}
|
|
20
|
+
/** Encode a value into the DynamoDB record for a stored item. */
|
|
21
|
+
async function buildStoreItem(context, namespace, key, value, options) {
|
|
22
|
+
const descriptor = await (0, codec_1.encodePayload)(value, storeCodecDeps(context), {
|
|
23
|
+
keyParts: [...namespace, key],
|
|
24
|
+
});
|
|
25
|
+
const record = {
|
|
26
|
+
PK: (0, keys_1.partitionKey)(namespace),
|
|
27
|
+
SK: (0, keys_1.sortKey)(namespace, key),
|
|
28
|
+
namespace,
|
|
29
|
+
key,
|
|
30
|
+
value: descriptor,
|
|
31
|
+
createdAt: options.createdAt,
|
|
32
|
+
updatedAt: options.updatedAt,
|
|
33
|
+
};
|
|
34
|
+
if (options.embedding)
|
|
35
|
+
record.embedding = options.embedding;
|
|
36
|
+
if (options.ttlTimestamp !== undefined)
|
|
37
|
+
record.ttl = options.ttlTimestamp;
|
|
38
|
+
return record;
|
|
39
|
+
}
|
|
40
|
+
/** Decode a DynamoDB record back into a store {@link Item}. */
|
|
41
|
+
async function readStoreItem(context, record) {
|
|
42
|
+
const value = await (0, codec_1.decodePayload)(record.value, storeCodecDeps(context));
|
|
43
|
+
return {
|
|
44
|
+
namespace: record.namespace,
|
|
45
|
+
key: record.key,
|
|
46
|
+
value,
|
|
47
|
+
createdAt: new Date(record.createdAt),
|
|
48
|
+
updatedAt: new Date(record.updatedAt),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=item-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-mapper.js","sourceRoot":"","sources":["../../../src/store/internal/item-mapper.ts"],"names":[],"mappings":";;AAcA,8CAEC;AAgBD,wCAsBC;AAGD,sCAYC;AAnED,oDAAwF;AAIxF,iCAA+C;AAG/C;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,GAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,sDAAsD;AACtD,SAAS,cAAc,CAAC,OAAqB;IAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AAClG,CAAC;AAUD,iEAAiE;AAC1D,KAAK,UAAU,cAAc,CAClC,OAAqB,EACrB,SAAmB,EACnB,GAAW,EACX,KAAgC,EAChC,OAAyB;IAEzB,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAa,EAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE;QACrE,QAAQ,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC;KAC9B,CAAC,CAAC;IACH,MAAM,MAAM,GAAoB;QAC9B,EAAE,EAAE,IAAA,mBAAY,EAAC,SAAS,CAAC;QAC3B,EAAE,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,GAAG,CAAC;QAC3B,SAAS;QACT,GAAG;QACH,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;IACF,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAC5D,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AACxD,KAAK,UAAU,aAAa,CAAC,OAAqB,EAAE,MAAuB;IAChF,MAAM,KAAK,GAAG,MAAM,IAAA,qBAAa,EAC/B,MAAM,CAAC,KAAK,EACZ,cAAc,CAAC,OAAO,CAAC,CACxB,CAAC;IACF,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,KAAK;QACL,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACrC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;KACtC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Separator joining namespace elements (and the trailing key) in the sort key. */
|
|
2
|
+
export declare const NAMESPACE_SEPARATOR = "#";
|
|
3
|
+
/** Partition key for an item: the scope-root namespace element. */
|
|
4
|
+
export declare function partitionKey(namespace: string[]): string;
|
|
5
|
+
/** Sort key: the rest of the namespace plus the key, separator-joined. */
|
|
6
|
+
export declare function sortKey(namespace: string[], key: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* `begins_with` prefix selecting a scoped subtree within `prefix[0]`'s
|
|
9
|
+
* partition. Terminated with the separator so `['users','u1']` does not match a
|
|
10
|
+
* sibling like `u10`. An empty rest yields '' (matches the whole partition).
|
|
11
|
+
*/
|
|
12
|
+
export declare function sortKeyPrefix(prefix: string[]): string;
|
|
13
|
+
/**
|
|
14
|
+
* True when `namespace` starts with `prefix`, compared element-by-element (not
|
|
15
|
+
* as a string prefix, so ["userspace"] does not match prefix ["users"]).
|
|
16
|
+
*/
|
|
17
|
+
export declare function namespaceMatchesPrefix(namespace: string[], prefix: string[]): boolean;
|
|
18
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/store/internal/keys.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAExD;AAED,0EAA0E;AAC1E,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAGtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAGrF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NAMESPACE_SEPARATOR = void 0;
|
|
4
|
+
exports.partitionKey = partitionKey;
|
|
5
|
+
exports.sortKey = sortKey;
|
|
6
|
+
exports.sortKeyPrefix = sortKeyPrefix;
|
|
7
|
+
exports.namespaceMatchesPrefix = namespaceMatchesPrefix;
|
|
8
|
+
/** Separator joining namespace elements (and the trailing key) in the sort key. */
|
|
9
|
+
exports.NAMESPACE_SEPARATOR = '#';
|
|
10
|
+
/** Partition key for an item: the scope-root namespace element. */
|
|
11
|
+
function partitionKey(namespace) {
|
|
12
|
+
return namespace[0];
|
|
13
|
+
}
|
|
14
|
+
/** Sort key: the rest of the namespace plus the key, separator-joined. */
|
|
15
|
+
function sortKey(namespace, key) {
|
|
16
|
+
return [...namespace.slice(1), key].join(exports.NAMESPACE_SEPARATOR);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* `begins_with` prefix selecting a scoped subtree within `prefix[0]`'s
|
|
20
|
+
* partition. Terminated with the separator so `['users','u1']` does not match a
|
|
21
|
+
* sibling like `u10`. An empty rest yields '' (matches the whole partition).
|
|
22
|
+
*/
|
|
23
|
+
function sortKeyPrefix(prefix) {
|
|
24
|
+
const rest = prefix.slice(1);
|
|
25
|
+
return rest.length === 0 ? '' : `${rest.join(exports.NAMESPACE_SEPARATOR)}${exports.NAMESPACE_SEPARATOR}`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* True when `namespace` starts with `prefix`, compared element-by-element (not
|
|
29
|
+
* as a string prefix, so ["userspace"] does not match prefix ["users"]).
|
|
30
|
+
*/
|
|
31
|
+
function namespaceMatchesPrefix(namespace, prefix) {
|
|
32
|
+
if (prefix.length > namespace.length)
|
|
33
|
+
return false;
|
|
34
|
+
return prefix.every((element, index) => namespace[index] === element);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/store/internal/keys.ts"],"names":[],"mappings":";;;AAIA,oCAEC;AAGD,0BAEC;AAOD,sCAGC;AAMD,wDAGC;AA9BD,mFAAmF;AACtE,QAAA,mBAAmB,GAAG,GAAG,CAAC;AAEvC,mEAAmE;AACnE,SAAgB,YAAY,CAAC,SAAmB;IAC9C,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,0EAA0E;AAC1E,SAAgB,OAAO,CAAC,SAAmB,EAAE,GAAW;IACtD,OAAO,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,2BAAmB,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,MAAgB;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,2BAAmB,CAAC,GAAG,2BAAmB,EAAE,CAAC;AAC5F,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,SAAmB,EAAE,MAAgB;IAC1E,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MatchCondition } from '@langchain/langgraph-checkpoint';
|
|
2
|
+
/** True when `namespace` satisfies a prefix/suffix match condition (with `*`). */
|
|
3
|
+
export declare function matchNamespace(namespace: string[], condition: MatchCondition): boolean;
|
|
4
|
+
/** Cap a namespace to at most `maxDepth` elements (no-op when undefined). */
|
|
5
|
+
export declare function truncateDepth(namespace: string[], maxDepth?: number): string[];
|
|
6
|
+
/**
|
|
7
|
+
* Leading concrete (non-wildcard) elements of the first prefix condition. An
|
|
8
|
+
* empty result means the listing cannot be scoped to a single partition and
|
|
9
|
+
* must fall back to a Scan.
|
|
10
|
+
*/
|
|
11
|
+
export declare function prefixRoot(conditions?: MatchCondition[]): string[];
|
|
12
|
+
//# sourceMappingURL=namespace-match.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespace-match.d.ts","sourceRoot":"","sources":["../../../src/store/internal/namespace-match.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAQtE,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,cAAc,GAAG,OAAO,CAQtF;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,CASlE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.matchNamespace = matchNamespace;
|
|
4
|
+
exports.truncateDepth = truncateDepth;
|
|
5
|
+
exports.prefixRoot = prefixRoot;
|
|
6
|
+
const WILDCARD = '*';
|
|
7
|
+
function segmentMatches(actual, path) {
|
|
8
|
+
return path.every((element, index) => element === WILDCARD || element === actual[index]);
|
|
9
|
+
}
|
|
10
|
+
/** True when `namespace` satisfies a prefix/suffix match condition (with `*`). */
|
|
11
|
+
function matchNamespace(namespace, condition) {
|
|
12
|
+
const { matchType, path } = condition;
|
|
13
|
+
if (path.length > namespace.length)
|
|
14
|
+
return false;
|
|
15
|
+
const slice = matchType === 'prefix'
|
|
16
|
+
? namespace.slice(0, path.length)
|
|
17
|
+
: namespace.slice(namespace.length - path.length);
|
|
18
|
+
return segmentMatches(slice, path);
|
|
19
|
+
}
|
|
20
|
+
/** Cap a namespace to at most `maxDepth` elements (no-op when undefined). */
|
|
21
|
+
function truncateDepth(namespace, maxDepth) {
|
|
22
|
+
return maxDepth === undefined ? namespace : namespace.slice(0, maxDepth);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Leading concrete (non-wildcard) elements of the first prefix condition. An
|
|
26
|
+
* empty result means the listing cannot be scoped to a single partition and
|
|
27
|
+
* must fall back to a Scan.
|
|
28
|
+
*/
|
|
29
|
+
function prefixRoot(conditions) {
|
|
30
|
+
const prefixCondition = conditions?.find((condition) => condition.matchType === 'prefix');
|
|
31
|
+
if (!prefixCondition)
|
|
32
|
+
return [];
|
|
33
|
+
const root = [];
|
|
34
|
+
for (const element of prefixCondition.path) {
|
|
35
|
+
if (element === WILDCARD)
|
|
36
|
+
break;
|
|
37
|
+
root.push(element);
|
|
38
|
+
}
|
|
39
|
+
return root;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=namespace-match.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespace-match.js","sourceRoot":"","sources":["../../../src/store/internal/namespace-match.ts"],"names":[],"mappings":";;AASA,wCAQC;AAGD,sCAEC;AAOD,gCASC;AApCD,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,SAAS,cAAc,CAAC,MAAgB,EAAE,IAAsB;IAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,kFAAkF;AAClF,SAAgB,cAAc,CAAC,SAAmB,EAAE,SAAyB;IAC3E,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACjD,MAAM,KAAK,GACT,SAAS,KAAK,QAAQ;QACpB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;QACjC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,6EAA6E;AAC7E,SAAgB,aAAa,CAAC,SAAmB,EAAE,QAAiB;IAClE,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,UAA6B;IACtD,MAAM,eAAe,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;IAC1F,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,OAAO,KAAK,QAAQ;YAAE,MAAM;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QueryCommandInput, ScanCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
2
|
+
/** Query input for a scoped prefix (PK = prefix[0], optional SK begins_with). */
|
|
3
|
+
export declare function scopedQuery(tableName: string, prefix: string[]): QueryCommandInput;
|
|
4
|
+
/** Scan input for the rootless case, filtered to store items only. */
|
|
5
|
+
export declare function storeScan(tableName: string): ScanCommandInput;
|
|
6
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/store/internal/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIjF,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAgBlF;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAM7D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scopedQuery = scopedQuery;
|
|
4
|
+
exports.storeScan = storeScan;
|
|
5
|
+
const keys_1 = require("./keys");
|
|
6
|
+
/** Query input for a scoped prefix (PK = prefix[0], optional SK begins_with). */
|
|
7
|
+
function scopedQuery(tableName, prefix) {
|
|
8
|
+
const skPrefix = (0, keys_1.sortKeyPrefix)(prefix);
|
|
9
|
+
if (skPrefix.length === 0) {
|
|
10
|
+
return {
|
|
11
|
+
TableName: tableName,
|
|
12
|
+
KeyConditionExpression: '#pk = :pk',
|
|
13
|
+
ExpressionAttributeNames: { '#pk': 'PK' },
|
|
14
|
+
ExpressionAttributeValues: { ':pk': (0, keys_1.partitionKey)(prefix) },
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
TableName: tableName,
|
|
19
|
+
KeyConditionExpression: '#pk = :pk AND begins_with(#sk, :skp)',
|
|
20
|
+
ExpressionAttributeNames: { '#pk': 'PK', '#sk': 'SK' },
|
|
21
|
+
ExpressionAttributeValues: { ':pk': (0, keys_1.partitionKey)(prefix), ':skp': skPrefix },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Scan input for the rootless case, filtered to store items only. */
|
|
25
|
+
function storeScan(tableName) {
|
|
26
|
+
return {
|
|
27
|
+
TableName: tableName,
|
|
28
|
+
FilterExpression: 'attribute_exists(#ns)',
|
|
29
|
+
ExpressionAttributeNames: { '#ns': 'namespace' },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/store/internal/query.ts"],"names":[],"mappings":";;AAKA,kCAgBC;AAGD,8BAMC;AA5BD,iCAAqD;AAErD,iFAAiF;AACjF,SAAgB,WAAW,CAAC,SAAiB,EAAE,MAAgB;IAC7D,MAAM,QAAQ,GAAG,IAAA,oBAAa,EAAC,MAAM,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,sBAAsB,EAAE,WAAW;YACnC,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;YACzC,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAA,mBAAY,EAAC,MAAM,CAAC,EAAE;SAC3D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,sBAAsB,EAAE,sCAAsC;QAC9D,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;QACtD,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAA,mBAAY,EAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE;KAC7E,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,SAAgB,SAAS,CAAC,SAAiB;IACzC,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,gBAAgB,EAAE,uBAAuB;QACzC,wBAAwB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Item, SearchItem } from '@langchain/langgraph-checkpoint';
|
|
2
|
+
/** A decoded item plus its stored embedding, awaiting ranking. */
|
|
3
|
+
export interface RankCandidate {
|
|
4
|
+
item: Item;
|
|
5
|
+
embedding?: number[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Rank candidates by cosine similarity to `queryVector`, descending. Throws a
|
|
9
|
+
* {@link ValidationError} when the candidate count exceeds `maxCandidates`
|
|
10
|
+
* (steer large corpora to an external VectorBackend).
|
|
11
|
+
*/
|
|
12
|
+
export declare function rankInMemory(candidates: RankCandidate[], queryVector: number[], maxCandidates: number): SearchItem[];
|
|
13
|
+
//# sourceMappingURL=ranker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranker.d.ts","sourceRoot":"","sources":["../../../src/store/internal/ranker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAQxE,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,aAAa,EAAE,EAC3B,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,MAAM,GACpB,UAAU,EAAE,CAcd"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rankInMemory = rankInMemory;
|
|
4
|
+
const errors_1 = require("../../shared/errors/errors");
|
|
5
|
+
const semantic_search_1 = require("./semantic-search");
|
|
6
|
+
/** Sort weight for an item without an embedding; below the −1 cosine minimum. */
|
|
7
|
+
const UNSCORED_RANK = -2;
|
|
8
|
+
/**
|
|
9
|
+
* Rank candidates by cosine similarity to `queryVector`, descending. Throws a
|
|
10
|
+
* {@link ValidationError} when the candidate count exceeds `maxCandidates`
|
|
11
|
+
* (steer large corpora to an external VectorBackend).
|
|
12
|
+
*/
|
|
13
|
+
function rankInMemory(candidates, queryVector, maxCandidates) {
|
|
14
|
+
if (candidates.length > maxCandidates) {
|
|
15
|
+
throw new errors_1.ValidationError(`Semantic search candidate set (${candidates.length}) exceeds maxSearchCandidates ` +
|
|
16
|
+
`(${maxCandidates}); use a dedicated VectorBackend for large corpora`, 'maxSearchCandidates');
|
|
17
|
+
}
|
|
18
|
+
return candidates
|
|
19
|
+
.map(({ item, embedding }) => ({
|
|
20
|
+
...item,
|
|
21
|
+
score: embedding ? (0, semantic_search_1.cosineSimilarity)(queryVector, embedding) : undefined,
|
|
22
|
+
}))
|
|
23
|
+
.sort((a, b) => rankValue(b) - rankValue(a));
|
|
24
|
+
}
|
|
25
|
+
/** Sort weight: real cosine score, or a value below the cosine minimum for unscored items. */
|
|
26
|
+
function rankValue(item) {
|
|
27
|
+
return item.score ?? UNSCORED_RANK;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=ranker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranker.js","sourceRoot":"","sources":["../../../src/store/internal/ranker.ts"],"names":[],"mappings":";;AAmBA,oCAkBC;AAnCD,uDAA6D;AAC7D,uDAAqD;AAErD,iFAAiF;AACjF,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC;AAQzB;;;;GAIG;AACH,SAAgB,YAAY,CAC1B,UAA2B,EAC3B,WAAqB,EACrB,aAAqB;IAErB,IAAI,UAAU,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;QACtC,MAAM,IAAI,wBAAe,CACvB,kCAAkC,UAAU,CAAC,MAAM,gCAAgC;YACjF,IAAI,aAAa,oDAAoD,EACvE,qBAAqB,CACtB,CAAC;IACJ,CAAC;IACD,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,GAAG,IAAI;QACP,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAA,kCAAgB,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;KACxE,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,8FAA8F;AAC9F,SAAS,SAAS,CAAC,IAAgB;IACjC,OAAO,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { JsonValue } from './filter';
|
|
2
|
+
import type { StoreContext } from './setup';
|
|
3
|
+
/** Cosine similarity of two equal-length vectors; 0 for zero/mismatched vectors. */
|
|
4
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
5
|
+
/** Extract and join the indexable text of a value for the configured fields. */
|
|
6
|
+
export declare function extractText(value: Record<string, JsonValue>, fields: string[]): string;
|
|
7
|
+
/**
|
|
8
|
+
* Embed a value for indexing, or undefined when indexing is off or the text is
|
|
9
|
+
* empty. `fieldsOverride` (from a put's `index` option) takes precedence over
|
|
10
|
+
* the store's configured fields.
|
|
11
|
+
*/
|
|
12
|
+
export declare function embedValue(context: StoreContext, value: Record<string, JsonValue>, fieldsOverride?: string[]): Promise<number[] | undefined>;
|
|
13
|
+
//# sourceMappingURL=semantic-search.d.ts.map
|