参与开发
构建与架构
从源码运行、代码的布局,以及两条边界。
从源码运行
npm install
npm run electron:dev
Vite 和 Electron 一起跑,带热重载,端口 5173。残留的 Vite 进程会占着这个端口,导致下次启动失败:先把它结束掉。
npm run check
类型检查、lint 和约 1,900 个测试,几秒钟跑完。CI 执行同一条命令。
npm run electron:build 会把安装程序写进
dist-electron/。
代码是怎么分的
| 文件夹 | 包含 |
|---|---|
electron/ | 主进程:窗口、IPC、SQLite、文件守卫、git、浏览器、MCP 服务器、更新 |
src/agent/ | 流式工具调用循环、权限、上下文压缩 |
src/chat/ | 消息列表、diff、授权卡片、上下文环 |
src/tools/ | 工具定义和它们所在的注册表 |
src/voice/ | 采集、检测、轮流说话、语音合成 |
两条边界
electron/preload.cjs 是安全那条。渲染进程没有 Node
权限,只能通过那里暴露的东西访问文件系统、网络和数据库。往里加一个函数是要认真对待的决定。
会话隔离是另一条。Draggy 自己的窗口跑在严格的 CSP 下;每个外部页面跑在独立分区里,不受我们任何策略约束。把两者合并,就是把我们的策略套到别人的网站上,结果只有一片废墟。
约定
- 注释解释为什么,从不解释是什么,最多两行
- 十二种语言保持同步,由测试把关
- 每个子进程都走那套不弹窗口的启动辅助函数
- 提交信息只有一行
其余的在 CONTRIBUTING.md, 而 SECURITY.md 讲的是怎么报告安全漏洞。