Skip to content

DSHEssentialTools v2.13.0 — specialised tools first, pwsh as fallback

Choose a tag to compare

@LLYlab LLYlab released this 25 Oct 16:36
· 2 commits to main since this release

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-adu 145 → 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