← 返回列表
未验证
一个 DeepSeek Harnessdsh插件,用于保护第一轮对话免受工具 schema 过载的影响。
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/19 · 已提供中文文档
DeepSeek Harness (dsh) 插件:仅在会话的第一轮中精简工具 schema 并注入结构化前言
综合分
28.4
GitHub 分
28.4
用户评分
—
★ Stars
2
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add rand0wn/dsh-minimal-anchor该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-system-prompt@deepseek-ai/schemastery用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh-minimal-anchor
CI
一个 DeepSeek Harness(dsh)插件,用于保护第一轮对话免受工具 schema 过载的影响。
为什么
一个全新的 dsh 会话会在第一条消息时就把整个已配置的工具集交给模型——文件编辑、bash、子代理、任务——即使第一条消息只是“看看这个仓库,告诉我发生了什么”。在第一轮使用更小、更聚焦的 schema,可以让模型的早期推理专注于探索,而不是过早行动,同时不影响后续任何轮次的行为。
dsh-minimal-anchor 挂钩 harness 自身的提示词组装流水线,以:
1. 仅在第一轮裁剪工具 —— 缩减到可配置的白名单(默认:read、glob、grep)。
2. 在同一轮前置一段简短的结构性前言,将本次会话定位为探索优先。
3. 从第二轮起不再干预 —— 该会话后续的每次组装都完全原样通过,完整工具集恢复。
安装
dsh plugin --profile add dsh-minimal-anchor
或从本地检出安装:
dsh plugin --profile add /path/to/dsh-minimal-anchor
这会将包添加为该 profile 的依赖,但本身并不会激活它 —— dsh 只会为列在该 profile 的 dsh.profile.bundles 中的包应用其 dsh.bundle 补丁。请将包名添加到 profiles//package.json 中的该列表:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-headless",
"dsh-minimal-anchor"
]
}
}
}
使用 dsh --profile --dump-config 确认它已被组合进去 —— 你应该会看到一个 minimal-anchor 条目。(另一种完全跳过 bundles 列表的等效方式:直接将其插入到你自己的 profiles//cordis.patch.yml 中 —— 参见配置。)
用法
无需调用任何东西 —— 它是一个被动插件。像往常一样启动你的 profile(dsh web、dsh --profile headless "..." 等),每个新会话的第一轮都会自动带着裁剪后的工具列表和前言发出。
配置
profiles//cordis.patch.yml
- insert:
- id: minimal-anchor
name: 'dsh-minimal-anchor'
config:
whitelistedTools: [read, glob, grep]
enforcePreamble: true
customPreamble: 'Your own turn-1 framing text.'
| 字段 | 默认值 | 描述 |
| --- | --- | --- |
| whitelistedTools | [read, glob, grep] | 第一轮保留的工具名称。必须与你的 profile 中注册的确切工具名称匹配 —— 如果不确定,请检查 dsh --profile --dump-config,不同插件的名称各不相同。 |
| enforcePreamble | true | 是否在第一轮前置结构性前言部分。 |
| customPreamble | (内置的探索框架文本) | 前言文本,仅在 enforcePreamble 为 true 时使用。 |
是扩展而不是替换默认白名单?如果你是用 TypeScript 而不是 YAML 来组合配置,DEFAULT_WHITELISTED_TOOLS 和 DEFAULT_PREAMBLE 会从该包中导出。
工作原理
挂接来自 @deepseek-ai/dsh-system-prompt 的 system-prompt/assemble 瀑布流,该瀑布流每轮运行一次,并生成实际发送给模型的 PromptAssembly(sections、tools、contexts)。一个以 assembly 的 scope 为键的 WeakSet 会跟踪该 scope 之前是否已经组装过;第一次时,它会将 assembly.tools 过滤为白名单,并将前言 section 插入到最前面,然后调用 next(),以便瀑布流中的其他所有监听器仍能正常运行。之后针对该 scope 的每次组装都会直接短路到 next() —— 不进行任何变更,除了 WeakSet 条目之外不持久化任何按会话的状态,而该条目无需显式清理,因为它会随 scope 对象一起消亡。
真实的 harness 中不存在 agent/request 或按消息的 hook —— 本插件不使用它,这与同一想法的早期草稿不同,后者假设了 dsh 中并不存在的事件。
故障排除
第 1 轮的工具列表返回为空。 whitelistedTools 按注册工具的确切名称进行匹配 —— 这些名称会因 harness 安装以及你启用的其他插件而有所不同。使用 dsh --profile --dump-config 查看真实名称,或者在 Web UI 中打开某个会话的 Trajectory 标签页,查看“Initial System Prompt”上的 Tools 面板。本插件的早期草稿附带的是猜测的名称(read_file、list_dir、search_files),这些名称在真实 harness 中并不存在 —— 白名单静默地匹配不到任何内容,并剪掉了所有工具。
插件似乎没有加载 / --dump-config 中没有 minimal-anchor 条目。 仅作为 profile 中列出的 dependency(例如在执行 dsh plugin add 之后)还不够 —— 该包还必须位于该 profile 的 dsh.profile.bundles 列表中(参见 Install),然后它的 dsh.bundle 补丁才会被应用。
在某个 fork 上,加载器崩溃并报 Cannot read properties of undefined (reading 'validate')。 Cordis 插件导出的 Config 必须是 schemastery schema(z.object({...})),而不是普通对象 —— 加载器会对 Config 导出的任何内容调用 .validate。
开发
npm install
npm run typecheck
npm test
已针对真实的本地 dsh 启动进行验证(而不仅仅是类型):安装到一个临时 profile 中,打补丁进去,并针对一个实时模型运行 —— 第 1 轮的出站请求恰好携带了白名单中的工具和前言文本,第 2 轮则携带了完整工具集且没有前言。
许可证
MIT同作者(rand0wn)的其他插件
扫码进群