sjh9714/dsh-win32
sjh9714/dsh-win32围绕官方持久 PowerShell 与 Workspace Write 方案检查和修复原生 Windows 上的 DeepSeek Harness,创建桌面快捷方式,并仅通过明确的 legacy 安装保留早期 Git Bash 与 BusyBox 预设,无需 WSL。
仿 JetBrains Database 的数据源树与 SQL/Redis 控制台,附 15 个 agent 工具。SQL 需本机 Java 8+,Redis 不需要。
DeepSeek Harness(DSH)的 JetBrains Database 风格数据源插件:右侧边栏的数据库工具窗,以及一组供 Agent 查询/操作数据库的工具。
支持 MySQL、Oracle、Redis、达梦 DM、OceanBase(MySQL / Oracle 两种模式),也可以配置任意自定义 JDBC 驱动。
db{库号}(可展开/收起)→ 键」浏览,每个逻辑库独立分页扫描、各自「加载更多键」,筛选框会自动扫描匹配的键,点键在下方直接看值(表格化返回 hash / list / set / zset,string 原样展示)。行尾可以勾选要展示的逻辑库(默认只展示连接配置里的库,范围为 Redis 的 databases 数量);未连接或未打开过时行尾显示「连接」按钮,连上自动加载 Schema / 键空间,断线后仍可用缓存浏览。structure.json;之后即使不连接(数据库下线、断网、只想离线看结构)也能展开浏览缓存的树,再次连接时自动用最新结构覆盖,离线状态在树上有明确标注。schema.table);顶部 WHERE / ORDER BY 输入框回车即生效,底栏显示实际执行的 SQL、当前区间、总行数与翻页按钮,每页 50 / 100 / 200 / 500 / 1000 行可切,同一张表可重复打开互不影响。LIKE 过滤(回车立即生效,400ms 自动刷新);开着筛选行时点任意单元格可按该值精确筛选,点 NULL 单元格筛 IS NULL,筛选条件与顶部手写 WHERE 用 AND 组合,生效的筛选项数显示在漏斗徽标上,逐列 × 或再次收起即可恢复。null 类型;SQL 按方言加引号并转义字面量。导出内容与当前 WHERE、列筛选条件一致,分页抓取,单次上限 5 万行。NULL 原样、数字与布尔按类型输出、字符串转义单引号,拿来就能执行或改一改再执行。ORDER BY 输入框交给数据库执行,翻页时顺序保持一致;当前排序列的列头显示箭头,输入框里自己写的其它排序不受影响,清空 ORDER BY 即回到默认顺序。dbN):选定后 SQL 不用再写库名前缀,Redis 的键扫描、取值和命令都落在该逻辑库。SQL 模式支持多行编辑、Ctrl+Enter 执行、取消、行数上限、耗时与分页(把单条 SELECT 包成 LIMIT/OFFSET 或 OFFSET … FETCH,每页 200–5000 行可选,也可以选「全部」一次取回,单次上限 5000 行);写语句执行前二次确认,只读连接永远拒绝写。切到 Redis 数据源时变成键表格(键 / 类型 / TTL / 长度)+ 选中键的值面板 + 命令框,写命令二次确认、危险命令(FLUSHALL 等)始终拒绝。Ctrl/⌘ + ↑ / ↓ 直接翻历史,Redis 命令框用 ↑ / ↓,重复的语句会提到最前而不是堆叠。EXPLAIN,Oracle / OceanBase-Oracle 走 EXPLAIN PLAN FOR + DBMS_XPLAN,达梦走驱动自带的 getExplainInfo(EXPLAIN 语句在达梦上只返回空结果),结果与普通查询一样在网格里展示并标出「执行计划」,看完点「关闭计划」回到编辑器。Ctrl/⌘ + Shift + F)会把关键字统一大写,按 SELECT / FROM / WHERE / GROUP BY / ORDER BY / LIMIT 等子句换行并缩进子查询;字符串、反引号标识符、-- 与 /* */ 注释里的内容一概不动。FROM / INTO 识别,识别不到时提示而不是编造表名)——CSV 带 BOM,Excel 打开中文不乱码。可分页的查询除了「当前页」,还能选「全部」:按每批 2000 行自动翻页抓取(单次上限 5 万行),导出的就是整条 SQL 的完整结果。zh 排序,空值沉底,导出 CSV/JSON 也会跟着网格的顺序走。SHOW CREATE,Oracle/达梦走 DBMS_METADATA.GET_DDL,服务器取不到时按缓存的列与索引重建,并在弹窗底部注明来源。函数、存储过程、触发器、序列没有列结构,选中后直接在详情面板展示服务器返回的定义(MySQL SHOW CREATE FUNCTION/PROCEDURE/TRIGGER/SEQUENCE,Oracle/达梦 DBMS_METADATA.GET_DDL);取不到时提示去 SQL 控制台查看,不会拼假 DDL。db_* 工具,Agent 可新增 / 编辑 / 删除 / 刷新数据源,列出连接、测试连通性、浏览 Schema、查看表结构、执行 SQL/EXPLAIN、读取 Redis 键与执行命令、下载缺失驱动。写操作默认关闭,需显式开启 allowAgentWrites;删除数据源必须显式 confirm: true。secrets.json(base64 + 0600 权限,Windows 下继承 profile ACL),API 与日志只返回 hasPassword 和秘密名。--dsw-alias-* / --dsw-radius-* 等语义 token,自动适配深色主题;布局使用标准面板、标签、开关与模态组件。数据源树可以用键盘操作:↑/↓ 在行之间移动,Home/End 跳到首尾,→ 展开、← 收起当前行,Enter 或空格选中该行(连接、查看结构)。展开/收起由行首箭头触发(或 →/←),双击数据源、Schema 或分组行也可以;点击行名不会折叠正在浏览的分支,双击表名仍是打开数据表标签页。焦点所在行有清晰的焦点框,方便只用键盘浏览库表。
SQL 控制台工具条的「事务」通过 JDBC 关闭连接的 auto-commit 来开启事务,不再依赖 BEGIN 语句(Oracle 没有 BEGIN,只有 PL/SQL 块开头,直接发送会报 ORA-06550);「提交」「回滚」调用驱动的 commit() / rollback(),完成后恢复 auto-commit,MySQL、Oracle、达梦等都适用。开启后「提交」「回滚」才可用,工具条同时显示「事务进行中」与操作结果提示。切换数据源或关闭标签页时,未提交的事务会被自动回滚。JDBC 桥接按连接复用同一个数据库会话,因此多条语句共享事务。
选中键后按类型展示成表格:hash 拆成「字段 / 值」,list、set 带序号,zset 展示「成员 / 分数」,stream 展示「ID / 字段」;表头显示类型、TTL(永久 表示无过期)与条目数,未知类型回退为原始 JSON。截图为 shop:customer:42 的 hash。
>= 0.1.6-alpha.2(当前在 0.2.1 上开发验证)。JAVA_HOME、PATH 或「设置 → Java 路径」显式指定),Java 8+ 即可;驱动与桥接 jar 都按 Java 8 字节码编译。jre/(即 jre/bin/java),启动时会优先使用它,其次才回退到系统 Java。jre/ 已加入 npm 发布文件列表。desktop)dsh plugin --profile desktop add link:E:\ai-code-space\dsh-ide-database或安装发布版包:
dsh plugin --profile desktop add dsh-ide-database也可以在 DSH 的「设置 → 插件」页面选择从本地目录/包名安装。安装完成后 重启 DSH(宿主半插件在进程启动时加载),在任意会话打开右侧边栏 → 「+」→「数据库」。
dsh plugin只是把包写进 profile 的依赖与dsh.profile.bundles,不会热加载宿主代码;客户端部分会随 Web 资源热更新,但为了避免半加载状态,建议整体重启。
npm install
npm run build # 编译 Java 桥接、宿主 TS、浏览器 bundle
npm test # 单元测试本地调试可以用一个独立的 Web profile 启动第二个 DSH 实例:
export DSH_HOME=~/.dsh-dev
export DSH_PROFILE=dbweb
dsh --profile dbweb --from-default-profile web --dump-config # 首次创建 profile
dsh plugin --profile dbweb add link:E:\ai-code-space\dsh-ide-database
dsh --profile dbweb --port 16402 --no-openSQL 标签里写语句,Ctrl+Enter 执行;Redis 标签用于 Redis 连接。驱动 · 方言 · 默认端口 · 驱动类 · jar 坐标 MySQL · MySQL · 3306 · com.mysql.cj.jdbc.Driver · com.mysql:mysql-connector-j:8.4.0 OceanBase(MySQL 模式) · MySQL · 2881 · com.mysql.cj.jdbc.Driver · com.mysql:mysql-connector-j:8.4.0 OceanBase(Oracle 模式) · OceanBase Oracle · 2881 · com.oceanbase.jdbc.Driver · com.oceanbase:oceanbase-client:2.4.19 Oracle · Oracle · 1521 · oracle.jdbc.OracleDriver · com.oracle.database.jdbc:ojdbc8:23.26.3.0.0 达梦 DM · 达梦 · 5236 · dm.jdbc.driver.DmDriver · com.dameng:DmJdbcDriver18:8.1.3.140 Redis · Redis · 6379 · — · 不需要驱动
URL 模板支持 {{host}}、{{port}}、{{database}}、{{user}} 占位符;连接表单里的「额外 JDBC 参数」会作为 Properties 传给驱动(每行一个 key=value)。
「设置 → 自定义驱动 → 新建」填写:
org.postgresql.Driverjdbc:postgresql://{{host}}:{{port}}/{{database}}group:artifact:version,可多个),保存后点「下载」。下载使用 Maven 仓库的 .sha1 校验(存在时),文件写入 drivers/ 目录。
工具 · 用途 db_list_connections · 列出已配置连接、设置与驱动状态;Agent 可用连接 id 或名称引用 db_create_connection · 新增数据源(密码写入 secret store);默认值来自预设,可不带 host/port db_update_connection · 编辑已保存的数据源;只改传入的字段,clearPassword 清空密码 db_delete_connection · 删除数据源并断开连接、清理结构缓存;必须显式 confirm: true db_refresh_connection · 重连并重新拉取 Schema 到结构缓存(Redis 为重连) db_test_connection · 测试保存的连接或临时草稿(不落盘) db_list_databases · 列出 Schema/数据库(MySQL 列库,Oracle/达梦列 Schema) db_list_objects · 列出指定 Schema 下的表、视图、例程、序列与触发器 db_describe_table · 列、类型、可空、主键、索引、注释 db_query · 执行单条 SQL;默认只读,allowAgentWrites 开启后才允许写 db_explain · MySQL EXPLAIN、Oracle/达梦执行计划 db_redis_scan · 游标 SCAN,返回键名/类型/TTL;可传 db 指定逻辑库 db_redis_get · 读取键详情(自动识别类型,限制大小);可传 db 指定逻辑库 db_redis_command · 执行 Redis 命令(可传 db 指定逻辑库);写命令受 allowAgentWrites 与只读连接限制 db_download_driver · 下载缺失的预置驱动 jar
写保护规则:
allowAgentWrites。FLUSHALL/FLUSHDB/SHUTDOWN 等)始终拒绝。confirmDestructive 默认开启)。数据目录优先级:
DSH_IDE_DATABASE_DATA 环境变量(显式覆盖,便于测试/多实例)/profiles//data/dsh-ide-database//data/dsh-ide-database/~/.dsh/data/dsh-ide-database/目录内容:
文件 · 说明 connections.json · 连接与自定义驱动配置、插件设置(不含密码) secrets.json · 密码(base64 编码,0600 权限) drivers/*.jar · 缓存的 JDBC 驱动 logs/ · 预留日志目录
环境变量 DSH_IDE_DATABASE_DATA 也可用于在隔离目录中做 UI 验收。
secrets.json 的键,形如 DSH_IDE_DB_)。sec-fetch-site,跨站请求会被拒绝。URLClassLoader 加载;桥接进程与 Node 宿主通过 JSON-lines 通信,取消查询使用 Statement.cancel()。db_query 等 Agent 工具仍按单条提交)。db_redis_command 的完整命令参数使用(仍受只读/危险命令限制)。npm run build:bridge # javac --release 8(JDK 8 用 -source/-target 8)→ bridge/dsh-db-bridge.jar
npm run build:host # tsc → lib/
npm run build:client # esbuild → lib/client.js(window.__ModuleLoader__ 格式)
npm run typecheck
npm test # vitest:host 单元测试 + 客户端工具函数docker run -d --name dshdb-mysql -e MYSQL_ROOT_PASSWORD=testpass -e MYSQL_DATABASE=app -p 13306:3306 mysql:8.0
docker run -d --name dshdb-redis -p 16379:6379 redis:7-alpine
DSH_TEST_MYSQL_PORT=13306 DSH_TEST_REDIS_PORT=16379 npx vitest run tests/integration/mysql.test.mjs集成测试会真实下载 MySQL 驱动、连接数据库、执行查询并验证 Agent 工具。
在一个独立的 DSH Web 实例上运行:
DSH_TEST_TOKEN=<token> PLAYWRIGHT_CHROMIUM_PATH=<chromium> node scripts/qa-live.mjsMIT