# dsh-complex-project-preset

**给 DeepSeek Harness（DSH）的一个 Agent 预设：标准模式的全部工具，加上「先想清楚再动手」的工作纪律。**

> English: [README.md](README.md)

复杂项目模式的完整定义都在 [`cordis.patch.yml`](cordis.patch.yml) 里：它往 Profile 里插入一行 `@deepseek-ai/dsh-agent-preset`，注册一个 id 为 `complex-project` 的预设。这个包装的是**一套配置**，不带任何宿主代码、不带前端界面，所以升级风险很小。

---

## 它解决什么 / Why

标准模式能干活，但不会**自己守规矩**：改动越做越大、文档越写越像流水账、没让你点头就把代码推上去了。

这个预设把四条纪律写进人格提示（persona），每次会话自动生效：

| 纪律 | 一句话 |
| --- | --- |
| 四文档制度 | 每个项目最多四个文档：项目介绍、方案设定、改动记录、现状与下一步 |
| 文档只写当前状态 | 不写 AI 修改历史、不留被推翻的旧方案、不出现「阶段 1～5」这类临时说法 |
| 提交推送红线 | 你没说「可以提交」，它不 commit、不 push、不开 PR |
| 谨慎编码 + 大白话 | 先复述目标和验收标准再动手；手术式最小改动；汇报先说结论 |

## 里面有什么 / What's inside

工具栈与「标准模式」一致（bash/pwsh 按平台二选一、文件读写与搜索、任务与后台作业、技能、计划模式、压缩、子代理与工作流、网页抓取、TODO 工具、present），差异全在 persona 提示与文档规则上：

- `persona` —— 四文档制度、文档只写当前状态、提交推送红线、谨慎编码四条、大白话汇报；
- `agent-instructions` —— 照常加载用户全局 `AGENTS.md`（上限 64 KB）；
- `planning` / `compaction` / `delegation` —— 与标准模式相同的分组与隔离设置；
- `tool-plugin-manager` —— 关闭，避免 agent 在自己的 preset 里改插件树。

> ⚠️ persona 里**刻意不设 `suffix`**。DSH 的提示词变量只注册了 `provider` 与 `model`，写别的 `{{变量}}` 会在装配阶段直接抛错，整轮对话一个请求都发不出去。工作目录由运行时上下文自动注入，不需要在这里声明。

## 安装 / Install

```sh
# 从 npm 安装（推荐，免构建）
dsh plugin --profile web add dsh-complex-project-preset

# 或从仓库 / 本地目录安装
dsh plugin --profile web add https://github.com/sueqet/dsh-complex-project-preset
dsh plugin --profile web add link:<本地目录>
```

安装后**重启 Profile**（重新执行 `dsh web` 或重启桌面端）才会装载 —— 预设是 Profile 组合里的一行，不是运行时热加载。

卸载 / Uninstall：`dsh plugin --profile web remove dsh-complex-project-preset`

### 会和「本地同名预设」打架 / Conflicts with a hand-rolled copy

如果你的 Profile 里已经用 `cordis.patch.yml` 手写过 `id: preset-complex-project` 的行，装上这个包会**重复注册同一个预设**（DSH 会报 `Duplicate agent preset: complex-project`）。做法是：

1. 删掉自己 `cordis.patch.yml` 里那段 `- id: preset-complex-project ...`；
2. 再 `dsh plugin --profile <name> add dsh-complex-project-preset`；
3. 重启 Profile。

同理，同一时间只该装一个提供 `complex-project` 的包。

### 版本要求 / Version requirement

需要 **DSH ≥ 0.1.7-rc.2**（预设注册表 `@deepseek-ai/dsh-agent-preset-registry` 在此版本进入基础组合）与 **Node.js ≥ 22.19.0**。已在 DSH 0.1.7-rc.2 与桌面端 0.2.1-rc.2 上验证。

Node 这条下限是 DSH 自己的要求，不是这个包的：DSH 的组合里用到 `process.getBuiltinModule`，Node 从 22.3 才提供。本包只有一份清单加一个 YAML patch，没有宿主代码、没有前端代码、也没有安装期脚本，自己从不加载 JavaScript，这条下限只是如实反映 DSH 能跑的版本范围。

## 怎么确认装上了 / Verify

重启后打开「新建会话」的模式选择器，列表里应该多一项 **复杂项目模式**（order 2，排在标准模式之后）。选中它开一轮对话，随便问一句项目现状——回答里应该出现四文档的说法，而不是自由发挥。

命令行侧也可以查组合树：

```sh
dsh --profile web --dump-config | grep -A3 preset-complex-project
```

## 开发 / Develop

```sh
npm test          # 校验 manifest 与 cordis.patch.yml 的一致性（含 !!js 表达式解析）
npm pack --dry-run
```

`tools/smoke.mjs` 会检查：`dsh.bundle.patch` 指向存在的文件、仓库字段指回本仓库、预设行的必填字段齐全、子行 id 不重复、persona 提示没有被截断且没有误设 `suffix`。它优先用 DSH 自带的 `loadOverlayPatches` 解析，所以 `!!js` 表达式与真实启动时的行为一致。

## 许可 / License

[MIT](LICENSE) © 2026 sueqet
