deepseek-harness-desktop/packages/dsh-liangshen

156Star5Fork6Issue0Watching

为 DSH 安装「梁神模式」两阶段锚定 agent preset:首轮暴露 Minimal 双工具引导轨迹,锚定后切换 PTC Mode 解锁全部能力。

语言
TypeScript
License
BSD-3-Clause
分支
main
ai-agentai-coding-assistantcodexdeepseekdeepseek-harnessdesktop-appdshdsh-plugin

安装

$ dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/dsh-liangshen

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

把社区实验的「Anchored Standard」思路做成 DSH 一键安装插件:宿主进程启动时把内置的「梁神模式」预设同步到 ~/.dsh/.agent-presets,新建会话在预设选择器里选择「梁神模式」即可启用。会话首轮只暴露官方 Minimal 预设的双工具(持久 bash + str_replace_editor)和一行 persona,把模型的执行轨迹锚定在 Minimal 上;锚定建立后自动切换到 PTC Mode(单一 run_code 工具),完整工具能力重新可用,全程不需要手动配置。

核心能力

  • 同步内置「梁神模式」预设到宿主目录(~/.dsh/.agent-presets/liangshen),新建会话在预设选择器里直接可选;升级插件后完整重启即自动更新预设文件
  • 首轮请求只暴露 Minimal 精确双工具(持久 bash + str_replace_editor)与一行 persona,清空运行时上下文并只放行用户消息,把模型执行轨迹锚定在 Minimal 上
  • 首次 tool/call 后通过「首块推理含 we 且无 let me」的门控(或四步兜底 / 无工具首轮响应后自动晋升)切换到 PTC Mode:单一 run_code 工具,完整工具注册表通过生成 SDK 调用
  • 晋升后恢复全部 prompt section(含 plan mode 的 plan:policy),在 persona 末尾追加所选工作区路径,workspace 指令与 skill 目录延迟一步注入以避免与目录切换同帧落地
  • 通过 system-prompt 段向模型宣告插件存在、工作原理与限制(默认开启),使模型在用户提到「梁神模式 / 锚定模式 / anchored standard」时能据此协作
  • 附带 tools/analyze-session.mjs 离线分析器,可在不读原始 reasoning 的情况下测量会话的轨迹标记(we / let me / let's / I)与晋升边界

技术实现

  • 语言: TypeScript(宿主侧)+ JavaScript / .mjs(预设内的运行时逻辑)
  • 关键依赖: @deepseek-ai/cordis(cordis 插件运行时)、@deepseek-ai/dsh-system-prompt(prompt section 注册)、schemastery(Config schema 校验)
  • 架构模式: cordis bundle 包(host 半区单实例挂载,无浏览器半区);通过 inject: ['systemPrompt'] 等待 prompt 装配就绪后注册宣告段;预设以 presets/liangshen/agent.cordis.yml 形式挂入宿主 .agent-presets 目录,由宿主预设加载器解析;两阶段核心逻辑在预设内的 tool-bootstrap.mjs,通过 system-prompt/assemble / agent/pre-step 钩子和 session/event 监听实现工具目录裁剪、消息白名单与晋升判定
  • 入口文件: src/index.ts(cordis 插件宿主入口)+ presets/liangshen/agent.cordis.yml(预设清单)+ presets/liangshen/tool-bootstrap.mjs(两阶段锚定核心逻辑)

适用场景

希望在 DeepSeek V4 Pro 上稳定复现「首轮按 Minimal 风格作答、随后解锁完整能力」这一轨迹形态的普通用户与高级用户。当标准预设或 PTC Mode 在首轮任务上效果不佳、又不想长期停留在仅有两个工具的 Minimal 状态时,这个插件提供了一条中间路径:首轮精确对齐 Minimal 的字节级表面以稳定轨迹,锚定建立后自动回到 PTC Mode 的完整能力。原始实验基于社区评测(DeepSeek V4 Pro、max、V4.1b 题面)拿到 98 / 99(均值 98.5),第二轮全程无 let me 痕迹。

前置依赖与兼容性

依赖最低版本说明
DSH0.1.0-rc.5+需要 preset 机制与 system-prompt/assemble 钩子;devDependencies 锁定 @deepseek-ai/dsh-system-prompt@^0.1.0-rc.7(README.md:74 / package.json:39)
Node.js^22.19.0 或 >=24.0.0来自 package.jsonengines(package.json:7-9)
平台macOS / Linux / Windows预设使用持久 PTY shell(@deepseek-ai/dsh-tool-bash-persistent)作为 phase-1 bash;agent.cordis.yml 没有显式声明 Windows fallback(presets/liangshen/agent.cordis.yml:84-115)
原生模块仅使用 node:fs / node:path / node:os / node:url 等内置模块

安装方式

dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/dsh-liangshen

配置项

插件宿主层的开关(写在宿主 agent.cordis.ymlliangshen row config 段):

配置类型说明默认值
enabled布尔总开关;关闭后既不同步预设也不向模型宣告插件存在true
announceToAgent布尔是否向模型注册一段 system-prompt 宣告插件的工作原理与限制;关闭后模型将不知道本插件存在true

预设内 tool-bootstrap 段的可调参数(修改后需重启宿主才生效):

配置类型说明默认值
shellTools字符串数组phase-1 暴露的持久 shell 工具名[bash]
commonTools字符串数组phase-1 暴露的另一个常驻工具[str_replace_editor]
messageSources字符串数组phase-1 放行的消息来源[user]
anchorGate布尔首次 tool/call 后是否等待首个 minimal-like 推理块才晋升true
maxBootstrapSteps数字锚定门控无果时的兜底晋升步数4
promoteAfterFirstResponse布尔首轮无工具调用的响应在发出后立即晋升;锚定门控会话也会在首轮 turn/end 释放true
deferredSources字符串数组晋升后延迟注入的消息来源[agent-instructions, skill-catalog]
deferredGraceSteps数字晋升后上述来源延迟注入的步数1
promotedPresentation字符串晋升后工具目录的呈现形式(code 即 PTC Mode 单 run_codecode

enabledannounceToAgent 之外的其余参数默认已对应实测高命中窗口,普通用户无需调整。

常见问题

Q: 梁神模式和官方 Minimal 预设是一回事吗?

A: 不是。Minimal 只保留两个工具但牺牲了完整能力;梁神模式是「两阶段」方案,首轮精确对齐 Minimal 的字节级表面以稳定执行轨迹,锚定建立后自动切换到 PTC Mode(单一 run_code 工具),恢复完整工具能力。

Q: 工具目录什么时候会变化?

A: 仅变化一次。会话出现首次持久 tool/call 并通过锚定门控(首块推理含 we 且无 let me,四步兜底)后切换到 PTC Mode;首轮响应没有调用任何工具也会在响应后自动晋升。切换发生在 step 边界,当前步的原生工具调用不会被中断。

Q: 安装后需要做什么手动配置吗?

A: 不需要。插件宿主启动时自动把 presets/liangshen 同步到 ~/.dsh/.agent-presets,新建会话在预设选择器里选「梁神模式」即可。升级插件后完整重启 dsh web 就会自动刷新预设文件。

Q: 如何验证插件确实生效?

A: 导出 session JSONL 检查 request/header:首份 header 应只含 bash/str_replace_editor(持久 shell + 沙箱化编辑器);首次工具调用后变更的 header 应恰好为 run_code(PTC)。也可运行仓库自带的 node tools/analyze-session.mjs <session.jsonl> 自动汇总轨迹标记(we / let me / let's / I)与晋升边界。

Q: 怎么卸载?

A: 运行 dsh plugin --profile web remove @linxin666/dsh-liangshen 并完整重启 dsh web。如果同时通过 dsh-web-ui-all 聚合包挂载了同一份预设,两边都会写入相同的 agent.cordis.yml,需要先 remove 另一个以避免双源挂载冲突。

Q: 可以在已有内容的会话中途切换到这个预设吗?

A: 不建议。预设的工作原理是把会话首轮的请求轨迹锚定到 Minimal 上,已产生内容的会话没有「首轮」可言,切换可能不会按预期生效。

Q: 插件会发起网络请求或收集遥测数据吗?

A: 不会。README 明确插件不发起网络请求,也不增加遥测。

上手难度

入门 — 装好插件后只需在新建会话的预设选择器里选「梁神模式」,无需编辑任何文件或命令行参数。

已知问题与限制

  • 不要在已产生内容的会话中途切换预设:切换可能不按预期生效,因为插件的工作原理是把会话首轮的请求轨迹锚定到 Minimal 上(README.md:73)。
  • 前缀缓存会在第一、二次请求之间失效一次:因为工具目录只变化一次,介于两请求之间会有一次前缀缓存变化(README.md:70)。
  • 预设与 shell 访问具有相同信任等级presets/liangshen/agent.cordis.yml 会被插件写入宿主 ~/.dsh/.agent-presets/liangshen,注册持久 bash(PTY)、str_replace_editor 等工具;安装前可自行审阅该文件(README.md:71)。
  • phase-1 编辑器继承宿主文件沙箱:没有挂载裸 dsh-fs-local,phase-1 的 str_replace_editor 写入受宿主文件沙箱策略约束,不存在本地文件系统绕过(README.md:68 / agent.cordis.yml:114-122)。
  • phase-1 持久 bash 持续整个会话:与 Standard 的一次性 shell 不同,phase-1 暴露的持久 bash 会替换一次性 shell 直到会话结束(两个工具都注册 bash 名字)(README.md:69 / agent.cordis.yml:84-111)。
  • 依赖宿主 PTY 后端:phase-1 bash 注册 @deepseek-ai/dsh-tool-bash-persistent,预设本身未声明 Windows 自定义 bash 后端;macOS / Linux 的 PTY 后端能力是 phase-1 工作前提(presets/liangshen/agent.cordis.yml:84-111)。
  • 同步到宿主目录的文件 id 是硬编码白名单src/index.ts 通过 syncPresetTrees(bundledPresetsRoot(), targetRoot, ['liangshen-exact']) 仅同步 liangshen-exact 这一棵子树,retire 列表只清理 liangshen-exact 这个已不再打包的 id,其他用户自建的预设目录不会被插件触碰(src/index.ts:81)。
  • DSH_HOME 环境变量可覆盖同步目标:通过 DSH_HOME 可将预设同步到非默认位置,但 resolveDshHomeDSH_HOME 为空字符串或仅含空白时仍回退到 ~/.dsh(src/dsh-home.ts:24-31)。
deepseek-harness-desktop/packages/dsh-liangshen — DeepSeek Harness 插件 | deepseek-plugin.org