architecture / current state
从桌面窗口,到一轮可恢复的 Agent 执行。
SparkWork 的主线不是“把模型接进窗口”,而是把模型、工具、权限、事件、持久化和交付结果放进同一条可观察的执行链。
五个主要边界
Renderer对话、代码、终端、浏览器、画布和审查视图。
Electron Main生命周期、窗口、IPC、文件、Git、终端与系统集成。
Agent Runtime会话、执行器、Provider、MCP、Skills、权限、工作流与团队。
StorageSQLite/WAL、迁移、Repository、事件、用量和审计。
Spark Engineturn machine、tool runner、权限、事件账本与 CLI/TUI。
启动顺序
- 主进程先隔离开发数据目录,安装日志、异常、退出和特权协议保护。
- Electron ready 后初始化 SQLite、迁移前备份、迁移和恢复检查。
- 启动会话、Provider、MCP、浏览器、终端、Computer Use、更新、通知和后台维护服务。
- 注册集中式 typed IPC,再创建安全配置的 BrowserWindow 和 preload。
- 窗口 ready-to-show 后显示;退出按注册的清理步骤停止任务、释放服务和关闭数据库。
任务流
- Renderer 接收消息,负责队列、计划审批和用户可见状态。
- Main IPC 将请求交给 Session Service/Turn Registry,不让 UI 直接调用 SDK。
- Runtime 选择 Claude SDK、Codex 或 Spark Engine,合并 Provider、Model、Skill、Rule 和 MCP 上下文。
- Executor 执行模型轮次;工具调用进入权限闸门,可一次允许、会话允许、拒绝或暂停。
- 事件、用量、性能、checkpoint、产物和失败原因写入存储或本地 workspace。
- 流式事件回到 renderer,形成时间线、审查面板、任务面板、通知和可恢复的后续操作。
仓库落点
| 目录 | 看什么 | 变更时注意 |
|---|---|---|
apps/desktop |
Electron main / preload / renderer | IPC、权限、窗口生命周期和跨平台原生依赖 |
packages/agent-runtime |
会话、执行器、Provider、MCP、工作流、团队、媒体 | 取消、重试、事件恢复和上下文预算 |
packages/storage |
SQLite、迁移和 Repository | 旧数据库启动、备份、schema 兼容 |
spark-engine |
内核、工具、权限、CLI、serve | 保持独立构建、边界检查和包 smoke |
apps/website |
自有域名官网和用户文档 | 与 GitHub Pages 工程手册分开发布 |
必须守住的安全约束
Electron
contextIsolation: truenodeIntegration: falsesandbox: true- preload 只暴露最小 bridge
运行时
- 工具不绕过权限闸门
- 凭据不进 SQLite 或日志
- 外部能力有 adapter 和失败降级
- 长任务有取消、关闭和恢复路径