dsh-zidev-toolbox
一条命令,给 DSH 装上 46 个确定性工具:JSON/YAML/CSV/文本/编码/正则这类"格式活",加上 JVM、Python、Windows 生产报告的"诊断活"。纯本地、无网络、无安装期脚本、无二进制依赖。
30 秒安装
dsh plugin --profile web add dsh-zidev-toolbox
装完重启应用(bundle 列表是启动时读的)。想装到桌面版就把 web 换成 desktop。
离线或固定版本:
dsh plugin --profile web add https://github.com/ax2/dsh-zidev-toolbox/releases/latest/download/dsh-zidev-toolbox.tgz
这个包是四个独立插件的合装层:它一次插入四行 bundle,四个插件仍各自独立版本。不要把它和单独安装的那四个混用(会重复注册同名工具)。
15 秒看到效果
把这段贴进对话:
Traceback (most recent call last):
File "svc.py", line 42, in handle
KeyError: 'user_id'
模型会调用 python_traceback,拿回这样的结构化结果(实测输出):
{
"exception_type": "KeyError",
"exception_message": "'user_id'",
"deepest_frame": { "file": "svc.py", "line": 42, "function": "handle" },
"cause_hints": [{ "hint": "The mapping has no key 'user_id'; production data is usually missing the key that test data always has." }],
"coverage": { "total_lines": 3, "parsed_lines": 3, "unknown_count": 0, "confidence": 1, "parser_version": "tb-1" }
}
其他几个一看就懂的:
| 你说 | 它调用 | 你拿到 |
|---|---|---|
"校验 {"a":1,},要精确行列" |
json_validate |
line 1 / column 9 / position 8 + 错误文案 |
"C:\temp\CON.txt 这个路径能用吗" |
path_inspect |
reserved_name(error):保留 DOS 设备名,带扩展名也算,position: 8 |
| "贴上 jstack,有没有死锁" | java_thread_dump |
Java 级死锁环(waiting_for/holding 链)、锁竞争队列、状态直方图 |
| "这是 GC 日志,p99 停顿多少" | java_gc_log |
事件与停顿计数、p50/p90/p99、Young/Full 拆分、promotion failure |
"netstat -ano 里谁在监听 8080" |
netstat_parse |
监听项 + PID/进程名,并按状态分组;文本里没有的绝不编造 |
| "D 盘哪个目录最占空间" | dir_usage |
总字节、最大文件、扩展名直方图(只读,符号链接从不跟随) |
装了哪四个
| 插件 | 工具 | 做什么 | 测试 |
|---|---|---|---|
| dsh-deterministic-tools | 29 | JSON 校验(精确行列偏移)/ 受限 JSONPath / 结构化 diff / CSV↔JSON / YAML↔JSON / 文本统计 / 正则捕获 / base64·hex·URL 编解码 / 哈希 / Unicode·进制·颜色·CIDR·JWT·时间戳检查 | 35 |
| dsh-jvm-doctor | 5 | thread dump(含 Java 级死锁环)/ GC 日志 / Maven·Gradle 依赖冲突 / 异常链(... N more 还原)/ Spring 配置 diff(载荷前脱敏) |
47 |
| dsh-py-doctor | 6 | traceback 根因 / pytest 摘要 / Django migrations·N+1·checks / celery 报告 —— 每个都带解析覆盖率 | 75 |
| dsh-win-native | 6 | 编码检测与转换(GBK/Big5/Shift-JIS 置信度)/ Windows 路径合法性 / netstat 解读 / 只读磁盘巡检与重复文件 | 57 |
为什么不直接让模型自己算?
它确实能算。 我们实测过:不给插件、只让它算 hello world 的 sha256,模型自己写了两轮 pwsh,算对了。所以这些工具卖的不是"模型做不到",而是:
- 一次就对的概率——214 个测试盯着的固定实现,而不是每次现写命令、和引号/编码/PowerShell 版本搏斗;
- 可复现:同样输入永远同样输出;
- 边界明确:结构化输入超预算拒绝(
INPUT_TOO_LARGE),文本截断按 code point 并标truncated,解析覆盖率与未识别行明确上报; - 知道自己不知道:
jwt_inspect声明不验签、netstat_parse不编造进程名与 UDP 状态、诊断工具只出事实不做因果推断; - 结构化回执:
{ result, meta }可以直接进下一步,而不是让模型解析自由文本。
它要花多少 token(实测,不是估算)
工具 schema 每个请求都要发,装了不用也要付:
| 配置 | 工具名数 | 首次请求 inputTokens |
|---|---|---|
| 干净 headless base | 75 | 11,931 |
| base + 这四个插件(46 工具) | 121 | 19,608(+7,677,占 39%) |
同一个"校验 JSON 并给精确行列"的任务:不装插件,模型自己写 pwsh 走 3 步、输出 1,323 tokens、13.0 s;装插件 2 步、输出 314 tokens、6.1 s,但 raw token 反而多 17%。
所以:一次性小活它更贵。 划算的是聚合压缩(内容不进上下文)、结果远小于输入、shell 一行搞不定的活、以及模型算不准的活。只想留常用的就按 id 覆盖:
# profiles/<name>/cordis.patch.yml
- id: deterministic-tools
config:
only: [json_format, json_validate, json_query, text_diff, csv_to_json]
toolPrefix: zi
(29 个裁到 5 个,固定税从约 3.4k 降到约 0.6k tokens/请求。实测有效:真实启动后模型只收到 zi__json_format、zi__json_validate。)
边界
- 46 个工具里只有 2 个碰磁盘:
dir_usage、file_duplicates,都是只读、有文件数/字节预算、软链接与 junction 跳过并上报、从不跟随。 - 其余全部是纯文本/纯字节分析:你不给数据,它不会自己去读。
- 不发网络请求、不装二进制、不写安装期脚本(pnpm 的
allowBuilds拦不住它)。 - 超预算拒绝而不是静默截断;截断一定标出来。
从哪来
这四个插件是 zi-devtools(Rust 工具箱,16 个 crate / 154 个工具)在 DSH 上的对应实现:按同一份契约(回执信封、预算门禁、边界行为)用 TypeScript 重写,独立版本、独立测试。
- npm:dsh-deterministic-tools · dsh-jvm-doctor · dsh-py-doctor · dsh-win-native
- 每个仓库都有 Release + 预构建 tarball(
releases/latest/download/<repo>.tgz)
License
MIT
No comments yet. Be the first to write one.