
1. DuMate 启动服务失败到底卡在哪一环DuMate 是基于 Electron 的桌面客户端启动时会并行拉起四个子进程VMManager 负责沙箱虚拟机、Backend 跑主业务后端、DumateRouter 做路由、Dumate-agt 是智能体核心进程。只要 Dumate-agt 起不来Electron 主进程就会判定整体启动失败表现就是双击图标后没有窗口、进程短暂驻留后自动退出。很多人第一反应是重装应用但重装往往解决不了问题因为故障点通常不在程序本体而在本地数据目录里的 SQLite 数据库。这篇内容面向三类人一是刚遇到 DuMate 闪退、想快速定位原因的用户二是需要把 DuMate 接入统一模型网关、正在找 config.toml 和 settings.json 骨架的开发者三是想搞清楚 Electron 子进程日志该怎么看的技术同学。核心检索词就是 DuMate、Dumate-agt、Electron、SQLite、启动服务失败。我会按“先定位、再修复、后接入”的顺序讲每一步都给可复制的命令和配置你照着做就能复现并确认修复是否生效。需要先说明一个判断原则Electron 主进程日志只记录最终结果比如“Failed to start Dumate-agt”它不会告诉你为什么失败。真正的根因在子进程自己的 stderr 里。所以排查顺序永远是先看主进程日志确认哪个子进程挂了再钻进对应子进程的日志目录找真实报错。DuMate 的日志分布在数据目录下macOS 上一般是~/Library/Application Support/qianfan-desktop-app/log/Windows 则在%APPDATA%\qianfan-desktop-app\log\。下面所有路径我都以 macOS 为例Windows 你把前缀换掉即可。2. 接入前的准备TaoToken 统一 Key 与本地配置骨架在动手修数据库之前先把模型接入这条线理清楚因为 Dumate-agt 启动时也会读取本地配置去初始化模型客户端。如果你用的是 TaoToken 作为统一入口需要先在控制台创建一个 API Key。TaoToken 的定位是把多家模型能力收敛到一个兼容接口上桌面端、编码工具、Agent 都能用同一套 Key 和 Base URL省去每个工具单独配一遍的麻烦。创建 Key 的入口在控制台登录后进入 API Keys 页面新建即可。拿到 Key 之后模型对话类调试可以直接在模型对话页验证连通性长期跑编码或 Agent 任务则建议看 Coding Plan 的额度说明。接入文档里有各语言的调用示例遇到 401/404 这类报错优先对照文档核对 Base URL 和模型名。TaoToken 的 API 地址是https://taotoken.net/api注意这个地址不带任何查询参数直接作为 base_url 使用。官网入口是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content控制台和文档都能从官网导航进去。下面给出 DuMate 侧两份配置骨架一份是config.toml一份是settings.json你可以按自己实际使用的模型名替换。# config.toml —— DuMate / Dumate-agt 模型接入骨架 [model] provider openai-compatible base_url https://taotoken.net/api api_key sk-你的TaoToken密钥 model 你的模型名 timeout_seconds 60 [agent] name Dumate-agt health_check_port 52262 retry 3 log_level info [storage] db_path data/opencode/opencode.db wal_enabled true{ model: { provider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoToken密钥, model: 你的模型名, timeout: 60000 }, agent: { name: Dumate-agt, healthCheckPort: 52262, retry: 3 }, storage: { dbPath: data/opencode/opencode.db, walEnabled: true } }注意api_key 不要提交到 Git 仓库本地配置文件建议加进 .gitignore。TaoToken 的 Key 是统一凭证泄露后所有接入的工具都会受影响。配置放好后先别急着启动 DuMate因为如果数据库本身是坏的配置再对也起不来。接下来进入真正的排障环节。3. 三条线定位进程日志、SQLite 初始化、本地配置3.1 进程日志线确认是哪个子进程挂了先看 Electron 主进程日志路径是~/Library/Application Support/qianfan-desktop-app/log/electron.log。用 tail 跟一下最新内容tail -n 100 ~/Library/Application\ Support/qianfan-desktop-app/log/electron.log你会看到类似这样的关键行[error] [Main] Failed to start Dumate-agt: Error: Dumate-agt failed to start: Process exited with code 1, signal null before health check passed [error] [Main] doInitServices attempt 3/3 failed: 启动服务失败 [error] [Main] doInitServices all retries exhausted这三行说明 Dumate-agt 退出码是 1健康检查没通过重试三次全失败。到这里只能确认故障进程还不能确认原因必须去看子进程日志。3.2 SQLite 初始化线找到真实报错Dumate-agt 的独立日志在~/Library/Application Support/qianfan-desktop-app/log/opencode/std.log。这个文件才是根因所在tail -n 80 ~/Library/Application\ Support/qianfan-desktop-app/log/opencode/std.log典型报错长这样INFO servicedb path.../data/opencode/opencode.db opening database INFO servicedb count9 modebundled applying migrations ERROR servicedefault nameSQLiteError messagedatabase disk image is malformed stackSQLiteError: database disk image is malformed at stats (src/storage/cloud-sync/queue-store.ts:243:8) at start2 (src/storage/cloud-sync/index.ts:50:20)database disk image is malformed就是 SQLite 数据库文件损坏。应用在初始化 cloud-sync 云同步服务时执行队列统计查询触发致命错误agt 进程直接终止。定位到这一步修复方向就明确了。3.3 本地配置线排除配置写错导致的假故障有些情况下数据库没坏但 config.toml 里 base_url 写错、api_key 为空、model 名不存在也会让 agt 在初始化模型客户端时抛异常退出。快速自查三点base_url 是否为https://taotoken.net/api不要多加/v1或斜杠、api_key 是否以sk-开头且无多余空格、model 名是否和文档一致。配置错误和数据库损坏的日志特征不同前者通常报 401/404 或 JSON 解析错误后者一定是 SQLiteError。4. 可复制修复流程从完整性检测到数据库重建4.1 先做完整性检测判断损坏程度进入数据库所在目录路径里有一串哈希目录名每个人不一样用 find 定位find ~/Library/Application\ Support/qianfan-desktop-app -name opencode.db 2/dev/null拿到路径后执行完整性检查sqlite3 /path/to/opencode.db PRAGMA integrity_check;如果输出大量btreeInitPage() returns error code 11或Page X is never used说明是中度以上损坏。输出ok则数据库没问题故障在别处。4.2 方案 A重置修复快但丢历史适合不介意历史对话丢失、只想尽快恢复使用的场景。先备份再删除cd /path/to/data/opencode cp opencode.db opencode.db.corrupted.bak rm -f opencode.db opencode.db-shm opencode.db-wal关键点.db-shm和.db-wal必须一起清理。WAL 预写日志没正常合并是数据库损坏的常见诱因只删主库文件会留下不一致的缓存。删完后重启 DuMate应用会自动重建一个空数据库。4.3 方案 B数据恢复修复保留历史想保住历史会话就用.recover它比普通.dump更适合损坏场景能自动跳过坏页、抢救有效数据。cd /path/to/data/opencode cp opencode.db opencode.db.corrupted.bak echo .recover | sqlite3 opencode.db opencode.db.recovered sqlite3 opencode.db.new opencode.db.recovered sqlite3 opencode.db.new PRAGMA integrity_check;最后一条命令输出ok就说明新库完整。然后关掉 DuMate替换数据库osascript -e quit app DuMate rm -f opencode.db opencode.db-shm opencode.db-wal mv opencode.db.new opencode.db open /Applications/DuMate.app4.4 验证修复是否生效重启后看两个地方。主进程日志应出现[Backend] Server start successfully with health check pass, port 52880 [Dumate-agt] Health check: {healthy:true,version:local} [Dumate-agt] Started on port 52262 [Main] doInitServices completed子进程日志里不再有 SQLiteError说明数据库这条线通了。如果此时模型调用还报错那就是配置线的问题回到第 3.3 节核对 config.toml。5. 本篇常见错排查报错一database is locked。这是 SQLite 单写者限制通常是有残留 DuMate 进程占着库。先ps aux | grep -i dumate找到进程 kill 掉再操作数据库。不要在有进程运行时强行替换文件。报错二.recover导出后导入报语法错误。多半是 shell 重定向把二进制内容当文本处理了。确认用的是sqlite3 new.db recovered.sql这种标准导入方式不要用 cat 拼接。报错三替换数据库后 DuMate 仍闪退。检查是否漏删.db-wal。旧 WAL 文件会和新库冲突导致再次损坏。三个文件必须一起处理。报错四agt 起来了但模型请求 401。这是 TaoToken Key 的问题不是数据库问题。去控制台确认 Key 是否启用、额度是否充足再对照接入文档核对 base_url。模型对话页可以快速验证 Key 是否可用。报错五Windows 下找不到日志目录。把路径前缀换成%APPDATA%\qianfan-desktop-app\log\数据库在%APPDATA%\qianfan-desktop-app\下的哈希目录里用资源管理器搜索 opencode.db 即可。6. 修好之后把接入和排障固化下来数据库修好只是恢复可用真正省心的是把模型接入和日志巡检变成习惯。接入侧TaoToken 的 API Key 建议单独建一个给 DuMate 用方便出问题时快速定位是哪个工具在消耗额度Base URL 固定写https://taotoken.net/api不要凭记忆手敲。排障侧建议每周看一眼log/opencode/std.log有没有 SQLite 相关警告早发现早处理别等到启动失败才动手。如果你还在调模型接入先去 API Keys 页面把 Key 建好再对照接入文档把 config.toml 填完整如果是要长期跑编码或 Agent 任务Coding Plan 的额度模型更适合持续调用只想先验证模型通不通模型对话页最快。三条路径按需选别一上来就改一堆配置先把最小可用链路跑通再扩展。