docs(components): per-group contributor reference (12 그룹)
docs/components/<group>/README.md 12 페이지 + 인덱스 작성. 각 그룹 페이지가 구성 crate 표 + 구조 mermaid + data flow mermaid + 주요 type/trait/함수 시그니처 + 외부 의존 + 핵심 결정 (HOTFIXES + spec 의 "왜" 통합) + 관련 spec/HOTFIXES 링크. 인덱스가 그룹 wiring 다이어그램 + 진입 가이드 보유. ARCHITECTURE.md 의 ASCII crate 의존 그래프를 mermaid flowchart 로 교체 (등가 정보, Gitea/GitHub 자동 렌더). docs/components/ 진입 링크 추가. 이 layer 는 contributor 향 — 사용자 향 grand picture 는 README.md 의 logical-architecture diagram 그대로 유지. 진척도는 HANDOFF.md, per-task spec 은 tasks/INDEX.md 가 기존대로 source of truth. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -33,24 +33,89 @@ Cargo workspace, 함수 호출 기반 모듈러 모놀리스. UI binary (`kebab-
|
||||
|
||||
## crate 의존성 그래프
|
||||
|
||||
```text
|
||||
kebab-cli, kebab-tui, kebab-desktop
|
||||
└─> kebab-app
|
||||
├─> kebab-source-fs
|
||||
├─> kebab-parse-md / kebab-parse-pdf / kebab-parse-image / kebab-parse-audio
|
||||
│ └─> kebab-parse-types
|
||||
├─> kebab-normalize
|
||||
│ └─> kebab-parse-types
|
||||
├─> kebab-chunk
|
||||
├─> kebab-store-sqlite
|
||||
├─> kebab-store-vector
|
||||
├─> kebab-embed-local (kebab-embed trait crate)
|
||||
├─> kebab-search
|
||||
├─> kebab-llm-local (kebab-llm trait crate)
|
||||
├─> kebab-rag
|
||||
├─> kebab-eval
|
||||
└─> kebab-config
|
||||
└─> kebab-core (모두 의존)
|
||||
> 그룹 단위 view + 컴포넌트별 상세는 [docs/components/](components/).
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph UI ["UI binary"]
|
||||
cli["kebab-cli"]
|
||||
tui["kebab-tui"]
|
||||
desktop["kebab-desktop<br/>(P9-5)"]
|
||||
end
|
||||
app["kebab-app<br/>(facade)"]
|
||||
subgraph Ingest ["ingest pipeline"]
|
||||
srcfs["kebab-source-fs"]
|
||||
pmd["kebab-parse-md"]
|
||||
ppdf["kebab-parse-pdf"]
|
||||
pimg["kebab-parse-image"]
|
||||
paud["kebab-parse-audio<br/>(P8 보류)"]
|
||||
ptypes["kebab-parse-types"]
|
||||
norm["kebab-normalize"]
|
||||
chunk["kebab-chunk"]
|
||||
end
|
||||
subgraph Persist ["persistence"]
|
||||
sqlite["kebab-store-sqlite"]
|
||||
vector["kebab-store-vector"]
|
||||
end
|
||||
subgraph Adapters ["traits + adapters"]
|
||||
embed["kebab-embed<br/>(trait)"]
|
||||
embedlocal["kebab-embed-local<br/>(fastembed)"]
|
||||
llm["kebab-llm<br/>(trait)"]
|
||||
llmlocal["kebab-llm-local<br/>(Ollama)"]
|
||||
search["kebab-search"]
|
||||
rag["kebab-rag"]
|
||||
end
|
||||
eval["kebab-eval"]
|
||||
config["kebab-config"]
|
||||
core["kebab-core<br/>(domain types)"]
|
||||
|
||||
cli --> app
|
||||
tui --> app
|
||||
desktop --> app
|
||||
|
||||
app --> srcfs
|
||||
app --> pmd
|
||||
app --> ppdf
|
||||
app --> pimg
|
||||
app --> paud
|
||||
app --> norm
|
||||
app --> chunk
|
||||
app --> sqlite
|
||||
app --> vector
|
||||
app --> embedlocal
|
||||
app --> llmlocal
|
||||
app --> search
|
||||
app --> rag
|
||||
app --> eval
|
||||
app --> config
|
||||
|
||||
pmd --> ptypes
|
||||
ppdf --> ptypes
|
||||
pimg --> ptypes
|
||||
paud --> ptypes
|
||||
norm --> ptypes
|
||||
embedlocal --> embed
|
||||
llmlocal --> llm
|
||||
rag --> search
|
||||
rag --> llm
|
||||
rag --> sqlite
|
||||
search --> sqlite
|
||||
search --> vector
|
||||
search --> embed
|
||||
eval --> app
|
||||
|
||||
config --> core
|
||||
embed --> core
|
||||
llm --> core
|
||||
sqlite --> core
|
||||
vector --> core
|
||||
chunk --> core
|
||||
norm --> core
|
||||
ptypes --> core
|
||||
search --> core
|
||||
rag --> core
|
||||
srcfs --> core
|
||||
eval --> core
|
||||
```
|
||||
|
||||
UI → store/llm/parse 직접 의존 금지. 모든 user-facing 진입은 `kebab-app` facade 만 통한다 (frozen 설계 §8). `kebab-cli` 가 `--config <path>` flag 를 honor 하려면 `kebab_app::*_with_config(cfg, …)` companion 을 통해 Config 을 명시적으로 thread 하는 패턴 — 자세한 이유는 [tasks/HOTFIXES.md](../tasks/HOTFIXES.md) 의 `--config` 항목.
|
||||
|
||||
Reference in New Issue
Block a user