参与开发

构建与架构

从源码运行、代码的布局,以及两条边界。

从源码运行

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 讲的是怎么报告安全漏洞。