问题描述
PromptHub CLI(@prompthub/cli)和 Desktop 共用同一个 SQLite 数据库文件。当 Desktop 处于打开状态时(v0.5.8),CLI 执行写入操作(prompt create / prompt update)会失败:
{
"error": {
"code": "INTERNAL_ERROR",
"message": "database disk image is malformed",
"exitCode": 10
}
}
关掉 Desktop 后 CLI 写入立即恢复正常,说明是 Desktop 持有了数据库锁导致 CLI 写入冲突。错误信息 malformed 有误导性——实际上不是数据库损坏,而是并发写入冲突。
复现步骤
- 打开 PromptHub Desktop
- CLI 执行写入操作:
prompthub prompt create --title "test" --user-prompt "hello"
- 观察报错
- 关闭 Desktop,再次执行同上命令 —— 成功
期望行为
CLI 和 Desktop 应能共享同一数据库,至少满足:
- CLI 写入时 Desktop 不崩溃、不丢数据
- Desktop 能感知 CLI 写入的变更并刷新展示(现在需要重启 Desktop 才能看到 CLI 写入的内容)
建议修复方向
- SQLite WAL mode — 启用 WAL(Write-Ahead Logging),writer 不阻塞 reader,适合 CLI + Desktop 这种低频并发写场景
- Desktop 监听 DB 变更 —
fs.watch 检测外部写入后自动刷新 prompt 列表,消除重启才能看到的问题
- CLI 侧重试机制 — 遇到锁冲突时等待重试(1-3次),而不是直接抛
malformed 这种误导性错误
- 错误消息优化 — 即使保持现有架构,
database disk image is malformed 也应改为 database is locked by another process (Desktop)
环境
- OS: Windows
- Desktop: v0.5.8
- CLI: 0.5.8-beta.3
- Database:
%APPDATA%\PromptHub\prompthub.db(Desktop 和 CLI 共用)
附加上下文
CLI 的定位是 "CLI 写,Desktop 看",但这个工作流被锁机制打断了。对于重度 CLI 用户(如 AI coding agent 集成场景),这个问题影响较大。
问题描述
PromptHub CLI(
@prompthub/cli)和 Desktop 共用同一个 SQLite 数据库文件。当 Desktop 处于打开状态时(v0.5.8),CLI 执行写入操作(prompt create/prompt update)会失败:关掉 Desktop 后 CLI 写入立即恢复正常,说明是 Desktop 持有了数据库锁导致 CLI 写入冲突。错误信息
malformed有误导性——实际上不是数据库损坏,而是并发写入冲突。复现步骤
prompthub prompt create --title "test" --user-prompt "hello"期望行为
CLI 和 Desktop 应能共享同一数据库,至少满足:
建议修复方向
fs.watch检测外部写入后自动刷新 prompt 列表,消除重启才能看到的问题malformed这种误导性错误database disk image is malformed也应改为database is locked by another process (Desktop)环境
%APPDATA%\PromptHub\prompthub.db(Desktop 和 CLI 共用)附加上下文
CLI 的定位是 "CLI 写,Desktop 看",但这个工作流被锁机制打断了。对于重度 CLI 用户(如 AI coding agent 集成场景),这个问题影响较大。