构建与架构
从源码运行、代码的布局,以及两条边界。
从源码运行#
cd win
npm install
npm run electron:devVite 和 Electron 一起跑,带热重载,端口 5173。如果残留的 Vite 进程占着这个端口,下次启动就会失败,所以先把它结束掉。
npm run check类型检查、lint 和测试。CI 执行同一条命令。npm run electron:build 会把安装程序写进 dist-electron/。
代码是怎么分的#
| 文件夹 | 包含 |
|---|---|
core/ |
共享 Rust 核心:会话状态、URL 策略、MCP 路由、提供商以及文档解析 |
win/ |
Windows Electron 应用(electron/ 为主进程,src/ 为 React 前端) |
macos/ |
原生 macOS SwiftUI 应用 |
linux/ |
原生 Linux GTK 4 与 libadwaita 应用 |
shared/ |
共享测试用例、主机列表和图标 |
两条边界#
electron/preload.cjs 是安全那条。渲染进程没有 Node 权限,只能通过那里暴露的东西访问文件系统、网络和数据库。往里加一个函数是要认真对待的决定。
会话隔离是另一条。Draggy 自己的窗口跑在严格的 CSP 下;每个外部页面跑在独立分区里,不受我们任何策略约束。把两者合并,就会把我们的策略套到别人的网站上,把它们弄坏。
日志与诊断#
Draggy 在应用数据目录(logs/)中保留两份循环滚动的日志:
app.log:生命周期事件、模型管理与错误。提示词和回复会被精简为哈希与长度,密钥会被抹去。debug.log:更详细的追踪。流式输出按长度记录,不记录文本内容。
日志单文件达到 5 MiB 时自动滚动,保留 3 份历史归档。要查看日志,请打开 设置 → 诊断 → 打开日志文件夹,或设置 LOG_LEVEL=DEBUG 或 DEBUG_LOG_LEVEL=DEBUG 获得最详细的输出。提交错误报告时,请使用 设置 → 诊断 → 导出诊断信息。
推理引擎#
Draggy 用内置引擎运行本地模型:
- GGUF (llama.cpp):在端口
11435上的后台隐藏llama-server子进程里 运行.gguf模型文件。macOS 上用 Metal。在 Windows 上,NVIDIA 显卡先试 CUDA,然后是 Vulkan,最后是 CPU。Linux 的顺序相同。AMD 显卡使用 Vulkan,除非你在设置 → 模型中打开 ROCm 版本。
CONTRIBUTING.md 里有其余的内容,而 SECURITY.md 讲的是怎么报告安全漏洞。