# deepseek-harness-desktop

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

## Metadata

- Author: [@ningbainb](https://github.com/ningbainb)
- Repo: <https://github.com/ningbainb/deepseek-harness-desktop.git>
- GitHub: [ningbainb/deepseek-harness-desktop](https://github.com/ningbainb/deepseek-harness-desktop)
- Stars: 156
- Language: TypeScript
- License: [BSD-3-Clause](https://spdx.org/licenses/BSD-3-Clause.html)
- Homepage: <https://ningbainb.github.io/deepseek-harness-desktop/>
- Topics: `ai-agent`, `ai-coding-assistant`, `codex`, `deepseek`, `deepseek-harness`, `desktop-app`, `dsh`, `dsh-plugin`, `electron`, `electron-app`, `gui`, `open-source`, `plugin-system`, `plugins`, `remote-access`, `skills`, `ssh-client`, `windows`, `windows-desktop`
- Forks: 5
- Open Issues: 6
- Last push: 2026-08-20T05:29:52.000Z
- Added: 2026-08-20T00:00:00.000Z

## Install

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

## Wiki

## 一句话定位
把社区实验的「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` 痕迹。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 0.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.json` 的 `engines`（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` 等内置模块 |

## 安装方式
```bash
dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/dsh-liangshen
```

## 配置项
插件宿主层的开关（写在宿主 `agent.cordis.yml` 的 `liangshen` 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_code`） | `code` |

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

## 常见问题

**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` 可将预设同步到非默认位置，但 `resolveDshHome` 在 `DSH_HOME` 为空字符串或仅含空白时仍回退到 `~/.dsh`（src/dsh-home.ts:24-31）。

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [deepseek-harness-desktop](https://deepseek-plugin.org/plugins/ningbainb/deepseek-harness-desktop/packages/dsh-liangshen)
Wiki generated by AI (model: `MiniMax-M3`)
