Chuyển đến nội dung chính

dsh-sqlite

Đã xác minh

@cxxl/dsh-sqlite · v0.3.2 · MIT · Giao diện web

DSH plugin: persistent SQLite tools for the agent (sqlite_query / sqlite_exec / sqlite_tables / sqlite_export / sqlite_import), a read-only table browser settings page, and a persistence-usage prompt rule — zero runtime deps beyond Node 22 node:sqlite.

Cài đặt

dsh plugin add @cxxl/dsh-sqlite

Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.

Mã nguồn

Thẻ

Tác giả

Readme

dsh-sqlite

给 DeepSeek Harness 的 agent 提供持久关系型 SQL 能力的插件:跨会话、跨工作区、跨机器可同步的结构化数据存储。

安装

dsh plugin --profile web add @cxxl/dsh-sqlite
# 装完重启一次(bundle 层只在启动时读取)

五个工具

工具 作用
sqlite_query 只读查询(SELECT / WITH / EXPLAIN / 只读 PRAGMA),结果 Markdown 表格,默认 100 行、上限 500
sqlite_exec 写操作(标准 DDL/DML,可多语句);危险操作需 confirm: true
sqlite_tables 列库文件、表结构、行数,附 quick_check 完整性检查
sqlite_export 导出为 SQL 文本(全部表或指定表),用于备份 / git 同步
sqlite_import 从 SQL 文本恢复(覆盖式:替换文件中包含的表,其余保留)

数据位置

  • 默认库:~/.dsh/data/agent.db;命名库:~/.dsh/data/<库名>.db(库名仅允许 [a-zA-Z0-9_-]{1,64})
  • WAL 模式 + busy_timeout 3000ms,多会话并发安全;首次调用才打开,插件停用自动关闭

安全边界

  • sqlite_exec 拒绝:ATTACH / DETACH / LOAD_EXTENSION / 全部 PRAGMA
  • 危险操作必须显式 confirm: true:DROP、无 WHERE 的 DELETE/UPDATE、含 DROP 的 ALTER、VACUUM/REINDEX
  • 单次 SQL ≤ 64KB;大批量写入请分批(每批约 1000 行)

跨机器同步

机器A:sqlite_export(to: "<仓库>/data/agent.sql") → git commit & push
机器B:git pull → sqlite_import(from: "<仓库>/data/agent.sql")

已知限制(v1)

  • SQL 字符串值内不要包含分号(语句按分号切分)
  • 大表查询请用 WHERE/LIMIT 收窄;查询结果最多返回 500 行
  • SQLite 动态类型:列声明类型是"亲和性建议",值与类型不符时以存储为准
  • to / from 建议使用绝对路径
  • 部分导出时注意表间外键引用关系

稳定触发(v1.2)

插件向每个会话注入一段常驻提示词规则(约 40 token/回合):用户要求"记住/记录/跟踪/保存"或表达"以后查/对比/统计"意图时,使用 sqlite 工具而非文本文件。规则不覆盖模型判断,最终决策权在模型。

跨会话协作(v2)

多会话并行同一任务时的对齐机制(设计见 DESIGN.md 第 15 节):

  • 协作数据放命名库(任务名,kebab-case),同一任务的会话共用同一个命名库
  • 会话开工时自动收到协作库清单(含各库 meta 描述与表说明)
  • 其他会话对命名库的写入会自动提醒相关会话(直到你查询确认);新库出现会广播
  • 库表带描述:新建协作库后先建 meta 表(label / description / table:<名>)
  • 默认库 agent.db 是个人数据区,不参与协作提醒

引擎

Node 内置 node:sqlite(实验性,Node ≥ 22.5),零原生依赖;所有引擎调用隔离在 lib/engine.js,可整体替换为 better-sqlite3 而不动其余代码。