dsh-plugin
DayuanJiang/next-ai-draw-iodsh 的 draw.io 绘图插件:通过 next-ai-drawio MCP 服务器作图,点回复里的链接在右侧栏打开实时预览,可以手动修改图,AI 的每次修改都是可以恢复的版本。需 Node.js 18+,首次使用由 npx 下载 MCP 服务器。
DeepSeek Harness 的数据库浏览器:在对话区第三个页签连接 SQLite、MySQL/MariaDB、PostgreSQL、SQL Server、MongoDB、ClickHouse、Redis、Elasticsearch 与 Qdrant——浏览结构树、分页查看数据、编辑单元格、插入行、建表/改表/删表、执行 SQL、CSV/JSON/SQL/Markdown 导入导出,以及可编辑的 E-R 关系图。只读连接按语句白名单硬拒绝写路径,agent 工具默认只读、写工具需显式授权,所有写操作(含被拒尝试)进入可查可删的审计日志;附带 MCP stdio 服务器,把同一份连接暴露给任意外部 AI 客户端。
DeepSeek Harness 的数据库浏览器插件——在对话区「数据库」页签里,像 PyCharm 的 Database 面板一样直接浏览、查询、修改你的数据库。
A PyCharm-Database-style database panel for DeepSeek Harness, as a third Conversation tab.
| 类型 | 引擎 | 说明 |
|---|---|---|
| SQL | SQLite | 内置 node:sqlite,开箱即用,零驱动 |
| SQL | MySQL / MariaDB | mysql2 驱动 |
| SQL | PostgreSQL | pg 驱动(含 pgvector:ORDER BY embedding <=> '[…]') |
| SQL | SQL Server | mssql 驱动 |
| SQL | ClickHouse | @clickhouse/client |
| NoSQL | MongoDB | mongodb 驱动,查询框收 JSON 命令文档 |
| NoSQL | Redis | 零依赖(RESP2 协议自实现),按 key 类型分组浏览 |
| NoSQL | Elasticsearch | 零依赖(Node 原生 fetch),便捷搜索或原始 REST |
| 向量 | Qdrant | 零依赖,向量搜索 / scroll / payload 浏览 |
SQL 驱动为可选依赖:装哪个用哪个,不用的不用装。
information_schema 全量查询(300 表不再 300 次往返)COUNT(*) 按「连接 + 库 + 表 + 筛选」缓存 30 秒——翻页不重复计数,任何写操作即刻失效DROP TABLE——要求手输表名确认(按钮在匹配前禁用),宿主侧二次校验,只读连接拒绝,删除与失败尝试都进审计CREATE DATABASE;🗑 删库与删表同一标准(手输库名才能执行、宿主二次校验、只读连接拒绝、成败都进审计)安装重启后,10 个工具自动注册给 DSH 的 AI 助手,聊天里直接说:
db_list_connectionsdb_connect + db_peek_pagedb_schema / db_describe_tabledb_er_graph调用过程与结果摘要在会话中实时展示。密码永不进入对话——工具没有密码参数,连接一律使用面板记住的凭据。
零依赖 MCP stdio 服务器(lib/mcp.js),与面板共享连接档案和安全规则。在 Claude Desktop / Cursor 等客户端注册:
{ "command": "node", "args": ["<插件目录>/lib/mcp.js"], "env": { "DSH_HOME": "可选,默认 ~/.dsh" } }
方式一:dshmarket 市场(推荐)— 在 DSH 设置 → 插件 → 市场里搜 dsh-database-explorer,点安装。
方式二:命令行
npm install -g dsh-database-explorer # 或
dsh plugin --profile web add dsh-database-explorer
安装后必须完全退出并重启 DSH Desktop(托盘右键退出,不是刷新页面)。插件的后端注册在 DSH 进程里,页面刷新更新不到它;升级后前后端版本不一致时,面板顶部会挂红色横幅明确提醒。
| 层 | 机制 | 效果 |
|---|---|---|
| 连接级只读 | 连接编辑勾选 🔒 只读 | 该连接一切写路径被硬拒绝:面板写操作、agent 写工具、SQL/原生命令统一按语句预检(仅放行单条读语句;redis 按读命令白名单、mongo 仅 find/count/aggregate、es/qdrant 仅读端点)。SQLite 只读模式打开文件、pg 会话级只读、ClickHouse readonly=1 引擎级兜底 |
| agent 写工具授权 | 默认关闭 | SQL 执行 / 改格 / 插行 / 删行需在 ~/.dsh/plugin-data/dsh-database-explorer/ 创建空文件 agent-write-tools 显式授权(重启生效),删除文件即收回。模型不可自授 |
| 写操作审计 | 自动 | 改格/删行/插行/导入/建表/改表/删表/建库/删库/写 SQL(含被拒尝试)逐条记入 plugin-data/dsh-database-explorer/audit-log.jsonl(超 5MB 轮转一代)。面板 📜 查看;删除记录/清空日志的动作本身也会留痕 |
推荐用法:生产库建两个档案——「生产库 🔒 只读」日常浏览随便点,「生产库(可写)」真正要改数据时才连。
dpapi:v1:<密文>,connections.json 不再有明文(防文件外流;不防同用户本地进程,DPAPI 语义如此)所有接口同源校验 + Host 白名单(localhost / 127.0.0.1 / ::1),防 DNS rebinding;DSH 供局域网使用时,非本机请求返回 403 并说明原因。本插件仅允许本机浏览器访问。
| 症状 | 原因与处理 |
|---|---|
| 没有「数据库」页签 | 完全退出 DSH Desktop 重启(后端注册在 DSH 进程里,刷新页面无效) |
| 面板顶部红色版本横幅 | 前后端版本不一致(升级后没重启)——完全退出重启即消 |
| 连接报「缺少驱动」 | SQL 驱动必须装进 DSH profile 的 node_modules(市场 / dsh plugin add 会装好;游离在 profile 外的插件副本装不了驱动) |
| 局域网另一台机器打开是 403 | 设计如此:本插件仅允许本机访问,在本机浏览器打开 |
| 单元格双击不能编辑 | 该表无主键(防误改),或当前连接是只读连接,或结果来自 SQL 查询(SQL 结果一律只读) |
| ES 深分页报错 | Elasticsearch from+size 引擎限制(>10000),用 scroll 或收窄条件 |
npm test # 全量回归(10 个套件,含真实 SQLite 边界用例)
npm run release # 发布流水线:版本握手 → pack 清单闸门(拦截 lib/package.json 遮蔽宿主包定位)→ 三副本同步 → 回归 → git tag → npm publish
架构:宿主半区(lib/index.js 路由 + lib/connections.js 连接管理 + lib/tools.js agent 工具 + lib/mcp.js MCP 出口)运行在 DSH 进程;浏览器半区(lib/client.js)经 dsh.client 声明注入对话区。注意:lib/ 目录下不要放名为 package.json 的文件——DSH 从模块位置向上找最近清单,会遮蔽包根配置导致 UI 无法注入(release 流水线已加闸门拦截)。
https://github.com/xing-he888/dsh-database-explorer
MIT