You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
crates/core/ engine convert dùng chung + diagnostics chi tiết
crates/cli/ CLI convert, lệnh handoff và benchmark
crates/mcp/ stdio MCP surface, tool deterministic và LLM opt-in
crates/knowledge/ contract retrieval/grounding framework-free + adapter desktop opt-in
crates/server/ Markhand Web API, auth, storage adapter và worker
app/ desktop "Markhand" (Tauri)
web/ SPA React/Vite chỉ chạy browser, qua HTTP/SSE
deploy/ hạ tầng local và POC, script và observability
bench/ tài sản đánh giá converter/Web tái tạo được + báo cáo
plans/ danh mục issue Markhand Web chính thức + evidence
vendor/ markitdown-rs tham khảo, đã loại khỏi workspace
CLI, desktop và MCP dùng chung fileconv-core: cả ba path-dep thẳng vào
crates/core (Converter/FormatKind) — không re-implement logic convert ở đâu
khác. Markhand Web đi theo boundary riêng: web/ (browser SPA) chỉ nói
HTTP/SSE với fileconv-server (crates/server) — server sở hữu auth/services/
repositories/storage adapters và các worker; phần retrieval/grounding (search,
Q&A) đi qua contract fileconv-knowledge (crates/knowledge) — types, query,
rank, citation, ask, identity, và phần kế hoạch embedding (mode/dimension,
embedding.rs) — dùng chung giữa server và các adapter desktop opt-in (SQLite/HNSW).
Chunk primitive (chunk_markdown/normalize_newlines/locate_chunk_span/
locate_chunk_text) và embedding runtime (suy luận/parse runtime path) đều bắt
nguồn từ fileconv-core (src/chunk.rs, src/embedding_runtime.rs): server path-dep
thẳng vào fileconv-core để chunk (services/chunking.rs, services/citation.rs),
còn fileconv-knowledge tái dùng/re-export phần embedding runtime và normalize_search_text
khi cần (ví dụ infer_runtime_path re-export fileconv_core::embedding_runtime::infer_embedding_runtime_path;
rank.rs/query.rs/citation.rs gọi trực tiếp fileconv_core::intelligence::normalize_search_text)
chứ không tự định nghĩa lại.
crates/core/ — fileconv-core (engine)
File
Trách nhiệm
src/lib.rs
Converter, FormatKind (Pdf, Docx, Pptx, Xlsx, Csv, Html, Text, Image, Audio, Unknown), ConverterOptions; convert_path_detailed() là API chính (NFC + cắt output + soft warnings + derive title); convert_path() là lớp compatibility mỏng gọi convert_path_detailed() rồi bỏ warnings
job runner theo loại (convert/index/embedding/delete/reconcile) + sandbox/subprocess converter, fairness, limits — danh mục module ở src/workers/mod.rs, chạy qua src/bin/worker.rs, tách khỏi tiến trình API
list/create/adopt/remove project, import đệ quy folder local
Settings
components/Settings.tsx
modal cài OCR lang, PDF OCR, audio lang/threads, model whisper, LLM/embedding
state
state/store.ts
Zustand store duy nhất (không persist — Rust là nguồn sự thật)
lib
lib/ipc.ts, lib/types.ts
wrap invoke + type FsNode/Settings mirror Rust serde
Tauri bridge
src-tauri/src/lib.rs
AppState, convert_and_write_md/convert_and_write_md_detailed; đăng ký toàn bộ command qua tauri::generate_handler! — registry là macro đó, không phải một con số cố định
Shell: download_corpus*.sh, download_models.sh, download_pdfium.sh,
make_sample10.sh, make_vn_images.sh, make_xl_images.sh
(download_tessdata.sh chỉ còn giá trị lịch sử — Tesseract đã loại bỏ, ADR 0016).