kebab-embed/kebab-llm 은 "새 type 없음"을 자처한 순수 re-export 셸이었다 (trait 은 이미 kebab-core 소유, mock + test helper 만 보유). "kebab-core 재구성 시 안정 surface" 라는 명분은 1인 RAG 엔 speculative YAGNI. 흡수: - kebab-core 에 default-OFF `mock` feature + src/mock.rs (MockEmbedder, MockLanguageModel, assert_vector_shape/assert_unit_norm/assert_finish_chunk 을 kebab_core:: → crate:: import 만 바꿔 verbatim 이동). - production import 2곳(kebab-embed-local, kebab-llm-local) + test import 다수(search/rag/parse-image/embed-local) 를 kebab_core 로 repoint. mock 쓰는 crate 는 dev-dep 에 features=["mock"] (default 빌드 무영향). - shim 자체 테스트: mock 동작 테스트는 kebab-core/tests/ 로 이동, reexports.rs(셸 재수출 테스트)는 폐기. - crates/kebab-embed, crates/kebab-llm 삭제 + workspace member/deps 정리. - ARCHITECTURE/HANDOFF/component README 의 crate 그래프·표·rationale 갱신 (22 → 20 crates). llm-local 의 broken intra-doc link 2건도 정리. trait surface·동작 불변 (test-only + import-rename). workspace build 는 mock default-OFF 라 mock 코드 미컴파일. 적대적 검증 3렌즈(build-test-integrity + behavior-identity[mock byte-identical] + dead-crate-completeness) 통과, clippy --workspace -D warnings 클린. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
41 lines
1.7 KiB
TOML
41 lines
1.7 KiB
TOML
[package]
|
|
name = "kebab-search"
|
|
version = { workspace = true }
|
|
edition = { workspace = true }
|
|
rust-version = { workspace = true }
|
|
license = { workspace = true }
|
|
repository = { workspace = true }
|
|
description = "Retriever implementations for kb (P2-2 lexical FTS5; P3 vector / hybrid will follow)"
|
|
|
|
[dependencies]
|
|
kebab-core = { path = "../kebab-core" }
|
|
kebab-config = { path = "../kebab-config" }
|
|
kebab-store-sqlite = { path = "../kebab-store-sqlite" }
|
|
# P3-4 hybrid retriever wraps a `dyn VectorStore` (typically backed by
|
|
# `kb-store-vector::LanceVectorStore`) and a `dyn Embedder` (any P3-2
|
|
# adapter). Listed as a runtime dep so callers can construct
|
|
# `VectorRetriever::new` against the trait objects without a concrete
|
|
# adapter — the concrete adapter (`kb-embed-local`) stays out of this
|
|
# crate per the spec's Forbidden deps list.
|
|
kebab-store-vector = { path = "../kebab-store-vector" }
|
|
rusqlite = { workspace = true }
|
|
globset = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
tracing = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
anyhow = { workspace = true }
|
|
# p9-fb-32: parse documents.updated_at (RFC3339) into OffsetDateTime
|
|
# for SearchHit.indexed_at.
|
|
time = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
tempfile = { workspace = true }
|
|
# Hybrid integration tests inject a `MockEmbedder` (kebab-core `mock`
|
|
# feature) and stand up a real `LanceVectorStore` on a tmp directory.
|
|
# The mock-retriever unit tests (the bulk of the hybrid suite) do not
|
|
# need either, but the integration / snapshot lane does.
|
|
kebab-core = { path = "../kebab-core", features = ["mock"] }
|
|
|
|
[lints]
|
|
workspace = true
|