dsh-doctor
asdf17128
Find what your DeepSeek Harness (dsh) patches silently broke — dead patches, config fields dropped by whole-config repla…
PROJECT TOPICS
PROJECT README
多模块协同开发插件,内置岐伯、隶首、风后、夔、力牧、皋陶、离朱七级智能体,覆盖从项目初始化、代码归类、计划编排、批量执行、代码审查到测试验证的完整开发闭环。
本插件为 opencode 版「风后力牧」多智能体协同框架的 DeepSeek Harness(dsh)移植,基于 @deepseek-ai/cordis 插件体系实现。
将本插件源码放入 dsh 的 profile 目录,并在 profile 的 cordis.patch.yml 中声明加载。
将本项目的 src/ 复制到 profile 目录下的 module-agent/ 子目录,例如 ~/.dsh/profiles/web/module-agent/。
在 profile 目录的 cordis.patch.yml(~/.dsh/profiles/web/cordis.patch.yml)中新增:
- insert:
- id: module-agent
name: './module-agent/src/index.ts'
config:
# 项目根目录兜底(agent 会话无 cwd 时作为 .module_agent 数据目录的解析根)
dataDir: .
# 启动力牧/皋陶/离朱/夔子智能体使用的 subagent provider,默认 'spawn'
subagentProvider: spawn
启动 dsh web,插件自动加载。
在 dsh 会话中直接输入以下任一指令:
启动岐伯 (项目初始化)
启动隶首 (代码归类)
启动风后力牧 (开发编排)
| 智能体 | 角色 | 职责 |
|---|---|---|
| 岐伯 | 项目设置向导 | 引导生成需求设计、代码规范、模块设计 |
| 隶首 | 代码归类专家 | 扫描已有代码,自动分类文件、绑定模块、提取代码规范 |
| 风后 | 编排总指挥 | 评估变更、生成计划、调度力牧/夔/皋陶/离朱、汇总报告、Git 提交 |
| 夔 | 批量编排器 | 接受风后委托,自动逐模块启动力牧执行 + 皋陶审查,完成后汇总 |
| 力牧 | 计划执行者 | 按开发计划编写代码,自动备份文件、写入执行记录 |
| 皋陶 | 代码审查员 | 对力牧提交的代码进行质量审查,输出问题列表和审查结论 |
| 离朱 | 测试执行者 | 根据测试说明执行编译检查、单元测试、端到端测试 |
岐伯(项目设置)与风后力牧(开发编排)互斥,同一会话只能激活其一。
┌─────────────────────────────────────────┐
│ 岐伯 (qibo) │
│ 项目设置向导 │
│ 需求设计 → 代码规范 → 模块设计 │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 隶首 (lishou) │
│ 代码自归类与模块补全 │
│ 扫描项目 → 文件分类 → 绑定模块 → 更新模块设计 │
└─────────────────────────────────────────────┘
┌──────────────────────────────────────────┐
│ 夔 (kui) │
│ 批量编排 │
│ 风后委托 → 逐模块确认 → 启动力牧/皋陶 │
│ → 等待完成 → 汇总报告 │
└──────────────────────────────────────────┘
┌──────────────────────────────────────────┐
│ 风后 (fengzhou) │
│ 计划编排中枢 │
│ 初始化工件 → 检查规范 → 评估变更 │
│ → 生成计划 → 调度执行 → 汇总 → Git 提交 │
│ │
│ 禁止直接写/改代码 │
└──┬──────────┬────────┬─────────┐
│ │ │ │
▼ ▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ 力牧 │ │ 夔 │ │ 皋陶 │ │ 离朱 │
│ limu │ │ kui │ │gaotao│ │lizhu │
│ │ │ │ │ │ │ │
│计划 │ │批量 │ │代码 │ │测试 │
│执行 │ │编排 │ │审查 │ │执行 │
│ │ │ │ │ │ │ │
│可绑定│ │子代理│ │ │ │ │
│→离朱 │ │启动 │ │ │ │ │
│ │ │力牧& │ │ │ │ │
│ │ │皋陶 │ │ │ │ │
└──┬───┘ └──┬───┘ └──────┘ └──────┘
│ │
▼ ├──────────┐
┌──────┐ ▼ ▼
│ 离朱 │ ┌──────┐ ┌──────┐
│(绑定) │ │力牧* │ │皋陶* │
└──────┘ │(夔启)│ │(夔启)│
└──────┘ └──────┘
新手模式是一个可选的需求引导机制,帮助将模糊需求逐维度明确后再进入开发。
| 维度 | 核心问题 |
|---|---|
| 角色与场景(Who/Where) | 操作者的身份与权限?入口页面? |
| 动作原子性(What) | 核心操作可拆为哪些具体步骤? |
| 数据与范围(Which) | 数据来源、字段列表、排序与分页规则? |
| 边界与异常(What if) | 空状态、加载态、网络超时、并发冲突、极限输入? |
| 可量化验收(Measure) | 性能指标、可观测结果、状态变化? |
任一维度不通过则判定为需求模糊,进入引导流程。
framework 框架模块git add / git commit / git push风后在生成计划前自动读取历史纠正记录,避免重复犯错。用户指正后风后先核实再记录:
多模块并行开发时,风后委托夔自动管理全流程:
风后可配置工作空间的知识库目录,作为子代理(夔/力牧/皋陶/离朱)执行时的外部参考资料。
knowledge_base 工具设置知识库目录及说明下表为 opencode 版(@opencode-ai/plugin)与本 dsh 版关键机制的映射,参照 src/index.ts、src/config.ts 的实际实现:
| 机制 | opencode 版 | dsh 版(本插件) |
|---|---|---|
| 插件入口 | Plugin(ctx) => tool,函数返回工具对象 |
Cordis 插件 apply(ctx, config) + inject(['tools','systemPrompt','agents','subagents','llm','sessions'])(src/index.ts) |
| 工具定义 | tool({...}) 声明工具 |
defineTool + ctx.tools.register()(src/tools/index.ts 的 registerModuleAgentTools) |
| 子智能体调度 | client.session.create / promptAsync |
ctx.subagents.startContinuable() / followup() |
| 身份标记 | setAgentMode 持久化到 session_modes.json |
subagent persona/descriptor:module-agent:role=<mode> marker 或 module-agent:<mode> provider 命名(src/lib/session_state.ts) |
| 权限拦截 | permission.ask / tool.execute.before |
tools/pre-execute 事件 + ctx.tools.guard()(src/index.ts registerGuards) |
| 系统提示词注入 | chat.system.transform |
ctx.systemPrompt.section()(src/index.ts registerPromptInjection) |
| 完成通知 | session.idle 事件 |
agent/pre-step 拦截 dsh 的 subagent-settled 消息并替换为框架完成通知(src/index.ts registerCompletionNotification) |
| 模型能力 | opencode sdk client |
ctx.llm(ModelCatalog 抽象:listProviders / listModels,src/index.ts) |
| 数据存储 | .module_agent/*.json 文件存储 |
两版一致,沿用 .module_agent/*.json 文件存储 |
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。