Skip to content

CLI 写入冲突:Desktop 打开时 CLI 无法写入数据库 #184

Description

@baoyu0

问题描述

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 有误导性——实际上不是数据库损坏,而是并发写入冲突。

复现步骤

  1. 打开 PromptHub Desktop
  2. CLI 执行写入操作:prompthub prompt create --title "test" --user-prompt "hello"
  3. 观察报错
  4. 关闭 Desktop,再次执行同上命令 —— 成功

期望行为

CLI 和 Desktop 应能共享同一数据库,至少满足:

  • CLI 写入时 Desktop 不崩溃、不丢数据
  • Desktop 能感知 CLI 写入的变更并刷新展示(现在需要重启 Desktop 才能看到 CLI 写入的内容)

建议修复方向

  1. SQLite WAL mode — 启用 WAL(Write-Ahead Logging),writer 不阻塞 reader,适合 CLI + Desktop 这种低频并发写场景
  2. Desktop 监听 DB 变更fs.watch 检测外部写入后自动刷新 prompt 列表,消除重启才能看到的问题
  3. CLI 侧重试机制 — 遇到锁冲突时等待重试(1-3次),而不是直接抛 malformed 这种误导性错误
  4. 错误消息优化 — 即使保持现有架构,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 集成场景),这个问题影响较大。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions