给失败的工具结果追加可执行提示(如路径不存在时给出最近的已存在目录)。
安装
# Release 预构建包
dsh plugin --profile web add "https://github.com/ikta2010/dsh-tool-error-hints/releases/latest/download/dsh-tool-error-hints.tgz"
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:ikta2010/dsh-tool-error-hints
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
给失败的工具结果追加一条可执行的提示,治"弱模型瞎猜路径"。
为什么需要(有真实数据)
2026-09-13 对真实会话 session-7b9b38a1(本地 27B 跑长任务)的 796 条 tool/result 取证:
- 失败 92 条(12%)
- 最高频形态:
ls: cannot access '<path>': No such file or directory [exit code: 2]
问题不在报错文案,而在报错只说"不存在"、不说"哪儿存在":
本地模型反复瞎猜绝对路径(/nas/dsh/docker/dsh、/home/ikta/bin/wake-v100.sh),
而压缩之后它会退回已经纠正过的错误写法——同一个错路径能再错 4 次。
它做什么
挂在 tools/post-execute(waterfall),在失败结果之后注入一条 source.kind='plugin' 的提示:
| 识别到的失败 | 注入的提示 |
|---|---|
| 路径不存在 | 最近的已存在祖先目录及其内容(模型据此即可改对)+ 工作区根提示 |
| 命令不存在 | 说明容器内没有该可执行文件,建议先 command -v 探测 |
| 权限不足 | 说明以非 root 运行,sudo/apt-get/写 /var 会失败 |
| 把目录当文件读 | 提示改用 ls |
误报防护(重要)
grep 未找到匹配项、(无匹配)、no matches 都是合法的空结果,不是错误。
自测时踩过这个坑,因此按证据强度分两级:
- STRONG(
No such file or directory/cannot access/文件不存在…)→ 抽不到路径也给兜底提示 - WEAK(泛化的
not found/未找到/找不到)→ 必须先抽出像路径的 token 才提示
自测用例 10/10 通过(5 类真报错都提示、5 类正常输出零误伤)。
配置
- id: tool-error-hints
name: 'dsh-tool-error-hints'
config:
enabled: true
roots: [/nas/dsh] # 解析相对路径、找"最近的已存在目录"时的根
maxEntries: 24 # 列目录条数上限
maxHintsPerPath: 2 # 同一路径本轮最多提示几次(防刷屏)
include: [] # 只对哪些工具生效(空=全部)
exclude: [] # 排除哪些工具
安装
bash /nas/dsh/工具/dsh-tool-error-hints/install.sh
dsh-restart
激活方式:~/.dsh/profiles/web/cordis.patch.yml 里的 insert: 条目。
不要写进 package.json 的 dsh.profile.bundles —— 实测 dsh web 每次启动
会把 package.json 还原成出厂版本,写进去的会被冲掉(见 dsh-loop-breaker 的同类记录)。
确证是否真的加载
dump-config 只组合配置树、不 import 模块,所以"配置里有"不等于"加载了"。
插件在 apply() 时写一行加载心跳:
tail -1 ~/.dsh-logs/tool-error-hints-loaded.log
# 2026-09-13T14:10:00.000Z pid=12345 roots=/nas/dsh maxEntries=24
设计约束
- 只读:仅
existsSync/readdirSync/statSync,绝不执行命令、绝不写文件 - 不覆盖工具结果:只通过
additionalContexts追加,不改写工具输出本身 - 异常全吞:提示插件绝不能影响正常工具流程
链接
同类插件
DayuanJiang/next-ai-draw-io#dsh-plugin★ 36655
dsh 的 draw.io 绘图插件:通过 next-ai-drawio MCP 服务器作图,点回复里的链接在右侧栏打开实时预览,可以手动修改图,AI 的每次修改都是可以恢复的版本。需 Node.js 18+,首次使用由 npx 下载 MCP 服务器。
Tencent/WeKnora#dsh-weknora★ 36400
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 7113
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
T-Auto/dsh-ops★ 5155
为 Windows 的 DSH 提供 bash、PowerShell 7 及 Rust 高性能工具,减少 token 消耗。
sixtysevenlf/dsh-blender-plugin★ 1600
让 DSH agent 通过直连 TCP 通道驱动本地 Blender,提供 15 个工具:视口帧、自定义视角渲染、Python 执行、无头与作业卸载、事务回滚,以及 34 个 family / 228 个 op 的规划层。
yjl9903/AnimeGarden#dsh★ 1392
Anime Garden 的 DSH 插件:在 DSH 内搜索来自動漫花園、蜜柑计划、萌番组和 ANi 的动画 BT 资源——支持对话搜索、按字幕组和类型筛选的侧边栏面板、新番周历,以及站内浮窗播放。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。