Monolith
本地优先的桌面 AI Agent 客户端,使用你自己的 API Key 协调多智能体工作。
English
·
安全说明
感谢 LINUX DO 开源社区提供交流与分享平台。

Monolith 将对话、代码、终端、文件编辑与多智能体编排整合进一个桌面工作区。你接入自己的 OpenAI 兼容或 Anthropic 兼容端点;会话、用量统计与配置全部保存在 `~/.Monolith` 下的本地 SQLite 数据库中,API Key 经 Windows DPAPI 加密后才落盘。
界面提供 Chat 与 Code 双模式、可调宽度的右侧工作面板(文件、侧边聊天、内嵌浏览器)、真实的底部终端、可选的本地 PIN 安全锁、深浅主题与 11 种界面语言。
Monolith 由同一代码库产出两种 Windows 发行产物:约 58 MB 的单文件便携版(内嵌前端资源与 llama.cpp 本地模型运行时),以及额外携带 WebView2 离线安装包的 NSIS 安装器,可覆盖未预装 WebView2 运行时的机器。
## 为什么选择 Monolith
| 能力 | 说明 |
| --- | --- |
| 自带 API Key | 两种请求协议——OpenAI 兼容(Responses、Chat Completions、自定义路径)与 Anthropic 兼容(Messages、自定义路径),支持 Provider 级与模型级配置。 |
| 本地加密密钥 | API Key 经 Windows DPAPI(用户级)加密后存入 `~/.Monolith/credentials.json`;SQLite 只保存引用与末四位;日志与测试摘要全部脱敏。 |
| 多智能体协作 | Agent 池、嵌套时间线的子代理、任务事件,以及跨 Provider 的模型路由。 |
| 本地模型 | 在云端 Provider 之外,安装并运行本地 GGUF 模型。llama.cpp 运行时随可执行文件内嵌分发、首次使用时解压落盘,提供硬件感知的配置,并以在线下载兜底。 |
| 可靠会话 | SQLite(WAL)中的 `sessions → threads → turns → items` 结构、长历史游标分页、会话 fork,崩溃后恢复为明确的 interrupted 状态。 |
| 真实事件时间线 | 流式回答、可折叠思考状态、工具调用、文件 Diff 与审批全部来自真实运行时事件,没有模拟进度。 |
| 一体化工作台 | 离线打包的代码编辑器与 Diff 视图、xterm 终端、内嵌浏览器面板、含分模型统计的用量热力图。 |
| 本地安全锁 | 可选的 4-8 位数字 PIN,校验完全在本机完成;连续 5 次失败锁定 30 秒,并始终保留游客模式。 |
| 桌面原生 | Windows 系统托盘(运行中任务、最近会话、新建会话、退出)、单实例启动、关闭最小化到托盘偏好。 |
## 界面预览
截图取自真实运行的桌面构建,使用本地演示数据,不包含任何真实 API Key、Token 或会话内容。
### 登录门

### 对话模式

### 代码模式

### 设置 — 模型配置

### 设置 — 桌面行为

## 架构
React 19 前端渲染整个工作区,与 Rust 侧的全部交互只经由 Tauri 2 的 IPC 命令与事件完成。边界之内由 Rust workspace 负责:`monolith-agent` 驱动会话与流式处理,`monolith-router` 选择目标模型,`monolith-provider-openai` 与 `monolith-provider-anthropic` 两个适配器分别实现两种线上协议,`monolith-tools` 在权限模型约束下执行工具调用,`monolith-db` 把会话、用量与配置持久化到本地 SQLite(WAL)。`monolith-security` 负责凭据加密、日志脱敏与 SVG 清洗。流式文本与思考增量先在内存缓冲、再批量落盘 SQLite,长回答不会产生写放大。
桌面壳还负责本地模型运行时的管理:优先使用数据目录下已安装的 llama.cpp 运行时,缺失时解压可执行文件内嵌的副本,仍不可用才回退到在线下载。
### Provider 传输层
| 关注点 | 行为 |
| --- | --- |
| 协议 | OpenAI 兼容(`responses`、`chat_completions`、自定义)与 Anthropic 兼容(`messages`、自定义),endpoint 选项按协议严格裁剪 |
| 重试 | 两种协议统一对网络错误、408、429 与可恢复 5xx 退避重试;认证与协议错误不重试 |
| Headers | Provider 级默认头 + 模型级覆盖,合并顺序受协议强制头与认证头约束;`Authorization`、`x-api-key`、`anthropic-version`、`Content-Type` 禁止覆盖 |
| 模型发现 | 按协议拉取远程模型列表,用户确认前不自动保存 |
| 连接测试 | 状态、首 Token 延迟、总耗时、Token/s、输入/输出 Token、HTTP 状态与脱敏响应摘要;批量测试可取消并遵守并发限制 |
| 弹性 | Provider/模型级并发限制、速率限制、熔断与健康跟踪 |
### 隐私边界
- 全部应用数据都在 `~/.Monolith` 下:SQLite 数据库、凭据文件、已下载的本地模型与运行时。
- API Key 经 Windows DPAPI(用户级)加密后才写入 `credentials.json`,绝不以明文进入 SQLite、YAML 或 JSON;诊断导出不包含凭据文件。
- 日志、错误信息与连接测试摘要对 `Authorization`、`x-api-key` 与 Cookie 值脱敏。
- Provider 品牌 SVG 入库与渲染前经过严格的元素白名单清洗。
- 对话流量直达你配置的端点,不经过任何中转服务。
## 快速开始
### 安装发布产物
| 产物 | 说明 |
| --- | --- |
| `Monolith-portable.exe` | 约 58 MB 的单文件便携版,内嵌前端资源与 llama.cpp 本地模型运行时,直接运行、无需安装;需要系统已具备 WebView2 运行时(当前 Windows 10/11 默认预装)。 |
| `Monolith_0.1.0_x64-setup.exe` | 约 219 MB 的 NSIS 安装器,除应用本体外还内置 WebView2 离线安装包,在没有 WebView2、甚至没有网络的机器上也能完成安装。 |
两种产物首次运行都会在用户目录创建并使用 `~/.Monolith`,存放会话、设置、凭据与本地模型。
### 本地数据与配置
首次启动会自动生成用户配置文件 `~/.Monolith/config.json`(所有用户统一的默认模板,可手动编辑,也可在 设置 → 常规 → 配置文件 中修改):
- `storage.*`:数据根、会话产物、本地模型目录的重定向(改动后重启生效,不自动迁移数据)
- `defaults.permission_mode`:权限模式的启动默认值(询问/自动接受/计划/自动/绕过)
- `defaults.workspace_fallback`:未选择文件夹的会话归属(`home` = 归入 Home 工作区;`none` = 保留独立会话)
文件带 `version` 字段并保留未知键,升级安全;JSON 损坏时应用按默认值运行且不会覆盖你的文件。详见 `docs/用户配置文件.md`。
### 环境要求(开发)
- Rust 1.96+(MSVC 工具链)
- Node.js 24+ 与 npm 11+
- Windows 10/11(主要目标平台)
```bash
git clone https://github.com/amine123max/Monolith.git
cd Monolith/apps/monolith-desktop
npm install
npm run tauri dev
```
### 发布构建
```bash
cd Monolith/apps/monolith-desktop
powershell -ExecutionPolicy Bypass -File scripts/fetch-llama-runtime.ps1 # 首次先暂存本地模型运行时
npm run tauri build
npm run release:stage
```
`release:stage` 会校验便携版 exe 确实内嵌了前端资源与本地模型运行时,然后把两种产物暂存到 `target/release/release-assets/`。
## 验证
```bash
cargo test --workspace # Rust workspace 测试
cd apps/monolith-desktop
npx tsc --noEmit # TypeScript 类型检查
npm test # 前端单元测试
npm run build:gate # 生产构建 + 启动 JS 体积预算门禁
```
回归套件覆盖:思考状态持久化与恢复、1200 项长会话游标分页、流式刷写行为、协议边界校验、Header 合并与脱敏规则、SVG 清洗、前端与命令注册表的 IPC 契约一致性,以及 11 种语言的 i18n 键齐全性。
## 项目结构
```text
Monolith/
├── apps/monolith-desktop/ React 界面(src/)、Tauri 2 壳(src-tauri/)、发布脚本(scripts/)
├── crates/
│ ├── monolith-agent/ Agent 运行时、流式处理、恢复
│ ├── monolith-db/ SQLite 仓储与迁移(WAL)
│ ├── monolith-domain/ 会话与 Provider 领域模型
│ ├── monolith-protocol/ 模型与 IPC 事件契约
│ ├── monolith-provider/ Provider 公共抽象
│ ├── monolith-provider-openai/ OpenAI 兼容适配器
│ ├── monolith-provider-anthropic/ Anthropic 兼容适配器
│ ├── monolith-router/ 模型路由
│ ├── monolith-security/ 凭据加密、脱敏、清洗
│ └── monolith-tools/ 工具执行与权限
└── assest/ 品牌资源与 README 截图
```
## 安全
安全策略与漏洞报告方式见 [SECURITY.md](SECURITY.md)。请勿在公开 Issue 中包含 API Key、Token 或含密钥的日志。
## 社区
感谢 [LINUX DO](https://linux.do/) 开源社区提供交流与分享平台。
## 许可证
Monolith 以 [MIT 许可证](LICENSE)发布。随包分发的 llama.cpp 运行时同为 MIT 许可,其许可证文本随运行时一并分发。