Repository navigation
DSHEssentialTools v2.13.0 — specialised tools first, pwsh as fallback
v2.13.0 — 治「模型疯狂 pwsh」:工具选择优先级提示 + 修掉 dlt_run 的输出校验 bug
反馈:「AI 不喜欢用这些 tool 了,现在疯狂 pwsh」。查下来是两个原因叠加,都不是模型"变懒":
1) dlt_run / dlt_build 的输出曾被宿主判为非法
输出 schema 声明 exitCode: number,但超时或进程起不来时真实值是 null → 宿主
「无损 JSON / 类型校验」直接判 invalid output。模型撞一次 value.exitCode must be a number,
之后就会本能地绕开这个工具、回到万能的 pwsh。
- 修:新增
normalizedRun(),exitCode统一归一化(拿不到就是-1),并显式给timedOut。 - 顺手把
dlt_run的描述改成「首选执行入口 …… 而不是 pwsh 里拼命令行」。
2) ADU 的提示只讲"怎么装",没讲"什么时候该用它而不是 pwsh"
旧提示的重点是"按需装载、粘性、忘了就 rememory",模型的默认推理就变成了
「我手里没有专用工具 → 用 pwsh」。现在 tool:det-adu 这一段整个重写为工具选择优先级:
- 先列这一轮真实可用的专用工具(按已装模块动态生成,不推荐手里没有的工具):
文档 →dlt_doc_*、执行/编译 →dlt_run/dlt_build、环境 →dlt_env、
图片 →alv_*、浏览器 →det_browser、网页 →web_*、插件 →det_global_plugin_*。 - 再明确写:pwsh 只用于 git、目录/文件日常整理、以及确实没有专用工具时的临时探测;
判据是「只要上面有一件工具能直接完成这件事,就先用它」。 - 装载/卸载后即时刷新这段文案(
_refreshAduPrompt),保证"可用清单"永远是真的;全装模式下同样注册。
测试
alv-adu145 → 157:提示生成器与_refreshAduPrompt的源码守卫;dlt-tools的
normalizedRun与exitCode: number双声明守卫(并禁止宿主不认识的nullable);
行为上断言"已装模块的工具被点名、未装的不点名、未装单独提示 adu_load"。- 全量:128 + 60 + 23 + 47 + 17 + 37 + 22 + 40 + 71 + 10 + 157 = 612 断言全绿。
Install
powershell dsh plugin --profile web add github:LLYlab/DSHEssentialTools