基于
/Users/hanqing/CliX/jan-main本地源码快照(应用版本 0.8.4)的中文架构精读。
在线阅读:https://hanqing.github.io/jan-source-notes/
这不是 Jan 的使用手册,也不是 API 文档,而是一份“跟着一次请求穿过整个系统”的源码阅读笔记。写法参考 refs/dg-ai-notes:每章都回答三个问题——是什么、怎么做、为什么这样做。
Jan 是一个跨平台桌面 AI 应用。它把 React/Vite WebView、TypeScript Core、Rust/Tauri 宿主、本地推理后端、远程 Provider、MCP、RAG 和文件/数据库存储拼成一个产品。主线从 UI 发出一条消息开始,沿着 ServiceHub、模型工厂、Vercel AI SDK、Tauri command、llama.cpp/MLX 或远程 API,最后回到流式 UI 和持久化文件。
React UI
↓ ServiceHub / Zustand / custom chat transport
TypeScript Core + Extensions
↓ Tauri invoke / plugin guest API
Rust/Tauri AppState + commands
├─ llama.cpp / MLX subprocess
├─ OpenAI-compatible proxy → remote providers
├─ MCP client processes / HTTP servers
└─ thread.json + messages.jsonl / mobile SQLite
- 想先建立地图:读 第 1 章:开篇总览 和 第 2 章:运行时拓扑。
- 想理解一次对话:直接读 第 6 章:聊天请求旅程。
- 想研究本地模型:读 第 5 章:推理引擎。
- 想研究 Agent 能力:读 第 8 章:MCP、工具与 RAG。
- 想从源码跳转:查 源码导航表。
- 分析对象:
jan-main,不是在线仓库的任意最新提交。 - 版本锚点:
src-tauri/Cargo.toml与 Tauri 配置中的0.8.4。 - 证据优先级:入口文件、类型定义、ServiceHub、Tauri command、插件 state/command、测试与配置文件。
- 文中把“当前快照事实”和“设计推断”分开;如果一个结论是从调用关系推出来的,会明确写成“推断”。
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
mkdocs serve本文档是对开源项目 Jan 的独立学习笔记。Jan 源码版权与许可证以其上游仓库为准;本文档内容采用 CC BY-SA 4.0,欢迎指出源码对应关系或内容错误。