Monolith 纸飞机 logo

Monolith

本地优先的桌面 AI Agent 客户端,使用你自己的 API Key 协调多智能体工作。

English · 安全说明

感谢 LINUX DO 开源社区提供交流与分享平台。

Rust 1.96+ Tauri 2 React 19 TypeScript SQLite Windows 10/11 MIT 许可证

![Monolith 对话工作区](assest/screenshots/chat-home.png) 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 或会话内容。 ### 登录门 ![Monolith 登录门与游客模式](assest/screenshots/login.png) ### 对话模式 ![Monolith 对话主页与胶囊输入框](assest/screenshots/chat-home.png) ### 代码模式 ![Monolith 代码主页与用量概览](assest/screenshots/code-home.png) ### 设置 — 模型配置 ![Monolith 模型配置](assest/screenshots/model-configuration.png) ### 设置 — 桌面行为 ![Monolith 桌面设置与关闭行为选项](assest/screenshots/desktop-settings.png) ## 架构 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 许可,其许可证文本随运行时一并分发。