[package]
name = "kebab-store-vector"
version       = { workspace = true }
edition       = { workspace = true }
rust-version  = { workspace = true }
license       = { workspace = true }
repository    = { workspace = true }
description   = "LanceDB-backed VectorStore for kb (§5.6 embedding_records, §6.3 lancedb tables, §7.2 VectorStore)"

[dependencies]
kebab-core = { path = "../kebab-core" }
kebab-config = { path = "../kebab-config" }
# kb-store-sqlite is allowed for the embedding_records writers only
# (P3-3 spec: "Allowed dep `kb-store-sqlite` for writing/reading rows in
# embedding_records"). The Two-phase upsert flow uses
# `put_embedding_records_pending` + `mark_embedding_records_committed`.
kebab-store-sqlite = { path = "../kebab-store-sqlite" }

# LanceDB embedded vector store. `default-features=false` opts out of
# the cloud object-store integrations (aws / gcs / azure / dynamodb /
# oss); kb is always-local for v1, so dragging in those SDKs would just
# inflate the build.
lancedb         = { workspace = true }
arrow           = { workspace = true }
arrow-array     = { workspace = true }
arrow-schema    = { workspace = true }
# Embedded async runtime. The VectorStore trait is sync (§7.2) but
# LanceDB's Rust API is async-only; we own a current-thread
# tokio::Runtime and `block_on` per trait method. current-thread saves
# the two worker threads a multi-thread runtime would spawn — kb-app
# already serializes vector ops behind its own job scheduler so the
# extra parallelism wouldn't be exploited.
tokio           = { workspace = true }
# `try_collect` for streaming Lance query results into a Vec<RecordBatch>.
futures         = { workspace = true }

serde           = { workspace = true }
serde_json      = { workspace = true }
tracing         = { workspace = true }
thiserror       = { workspace = true }
anyhow          = { workspace = true }
blake3          = { workspace = true }
time            = { workspace = true }

[dev-dependencies]
tempfile        = { workspace = true }
serde_json      = { workspace = true }
# Integration tests seed `documents` / `chunks` fixtures by raw SQL
# (no kb-parse-md / kb-normalize / kb-chunk dep) so they can construct
# adversarial filter / dim-mismatch states. rusqlite is a `[dev-]`
# dep only — the runtime crate uses kb-store-sqlite's typed surface
# (`filter_chunks`, `put_embedding_records_pending`, …) and does not
# touch rusqlite directly (P3-3 spec: kb-store-vector must not list
# rusqlite/globset as direct deps).
rusqlite        = { workspace = true }

[lints]
workspace = true
