概览
dsh-codex-reasoning-router
README / ZH
插件文档
dsh-codex-reasoning-router
English | 简体中文 | AI / LLM 上下文
DeepSeek Harness(DSH)的可组合多模型 Agent 角色 插件。它不再要求切换到专用 preset,可以与 Standard、Code 或用户自定义 preset 一起使用。
默认团队:
brain:无工具深度推理,默认openai-codex/gpt-5.6-sol+max。coordinator:无工具任务拆解、分派与集成建议,默认 Sol +high。worker:拥有当前 preset 工具的真实 DSH 子代理,默认gpt-5.6-luna+max,绝对深度上限为 2。agent_role_catalog:从当前用户已注册的 DSH provider 读取可用模型,以及每个模型真实支持的 reasoning effort。agent_role_run:按角色运行 advisory 或子代理。
旧版 luna-sol-reasoning-router preset 与 sol_consult 状态机仍然保留,但默认不启用路由锁定。
安装
先安装并认证所需模型 provider,例如 dsh-codex,然后安装本插件:
pnpm dsh plugin --profile web add dsh-codex
pnpm dsh plugin --profile web add link:/absolute/path/to/dsh-codex-reasoning-router
也可以从 GitHub 安装:
pnpm dsh plugin --profile web add github:chenmzh/dsh-codex-reasoning-router
重启 DSH 并新建会话。0.2 起无需复制或选择专用 preset;插件默认叠加到任何 preset。只有继续使用旧 Luna+Sol 路由模式时,才需要复制 preset/luna-sol-reasoning-router。
配置
默认配置见 cordis.patch.yml:
teamEnabled: true
presetIds: [] # 空数组 = 所有 preset;也可只写 standard/code/自定义 id
roles:
- id: brain
kind: advisory # 无工具、一次性推理调用
description: Deep reasoning
provider: openai-codex
model: gpt-5.6-sol
reasoningEffort: max
maxTokens: 3000
- id: coordinator
kind: advisory
description: Coordinate work
provider: openai-codex
model: gpt-5.6-sol
reasoningEffort: high
- id: worker
kind: subagent # 真正的 DSH 子代理,继承当前 preset 的组合
description: Implement and verify
provider: openai-codex
model: gpt-5.6-luna
reasoningEffort: max
subagentProvider: spawn
maxDepth: 2 # 绝对深度:root=0,子代依次为 1、2……
toolDeny: [web_search] # 可选;也可用 toolAllow
角色数组可以任意增删,id 必须是小写字母开头的 kebab/snake 标识。字段说明:
| 字段 | 含义 |
|---|---|
kind |
advisory 为无工具推理;subagent 为有工具的真实子代理 |
provider / model |
省略时继承调用者;填写时必须存在于用户的实时模型目录 |
reasoningEffort |
省略时使用模型默认;填写时必须是该模型目录公开的 effort |
systemPrompt |
可选角色 persona;省略时使用内置角色提示 |
subagentProvider |
spawn、fork 或宿主已注册的其他 provider |
maxDepth |
子代理树的绝对深度上限,不是“还能递归几层” |
toolAllow / toolDeny |
DSH 原生子代理工具可见性过滤,仅用于 subagent |
模型名和 effort 不靠插件硬编码猜测。运行时先通过 ctx.llm.listProviders()、listModels() 与 resolveModelInfo()读取当前用户目录;无效组合在发起模型请求或创建子代理前报错。会话中的 Agent 也可以调用 agent_role_catalog 查看同一目录。
触发规则
WebUI 的“Agent 角色 → 触发规则”Tab 可以配置并持久化以下策略:
- rules(默认):向根 Agent 注入明确的 MUST 条件;高风险、证据矛盾、架构决策、重复失败及任务宽度阈值均可调整。
- manual:只有用户明确要求时才允许调用角色。
- first-turn:首个用户回合在根 Agent 执行前自动运行所选 advisory 角色一次;失败时可选择 fail-open。
深度推理和协调角色的每轮调用上限、Worker 并发上限由运行时硬限制。每次 agent_role_run 必须选择 trigger_reason;重复深度咨询可要求提供 prior_advice_evaluation。角色映射使用已配置角色的下拉选择,只有 customInstructions 是自由文本。
与其他 preset 组合
默认 presetIds: [],所以只需选择原本想用的 preset:
Standard preset + agent 角色
Code preset + agent 角色
自定义 preset + agent 角色
子代理由 DSH 的 in-process provider 创建,自动继承父 Agent 的 preset composition、工作区、策略与可见工具,再应用角色自己的模型、effort、persona、工具过滤和深度上限。
若只想让插件出现在指定 preset:
presetIds: [standard, code, my-review-preset]
旧版 Luna + Sol 路由
要恢复 0.1 行为,在配置中设置:
requiredPresetId: luna-sol-reasoning-router
lunaProvider: openai-codex
lunaModel: gpt-5.6-luna
solProvider: openai-codex
solModel: gpt-5.6-sol
initialSolReasoning: medium
escalatedSolReasoning: high
initialConsultEnabled: true
failOpen: true
然后复制并选择随包提供的 preset。旧模式继续保证:Sol 无工具、主 Luna 路由被校验、同一 blocker 最多两次咨询、状态写入 session event。requiredPresetId: ''(0.2 默认)表示完全关闭旧路由锁定,不影响 Agent 角色。
安全与边界
- Advisory 角色的请求不含工具;如果模型仍返回 tool-call,插件会报错并且绝不执行。
- Worker 使用 DSH 原生 subagent runtime;
maxDepth由 provider 在每次创建时强制检查。 - 工具过滤是组合可见性,不是新的安全沙箱;实际权限仍由 DSH sandbox/approval policy 决定。
- 角色模型和 effort 在调用前对实时目录做精确验证,不静默降级、不自动换模型。
- 子代理的 reasoning effort 通过 agent-scoped
installModelSelection在首次请求前安装,不依赖模型名猜测。
开发与验证
pnpm install --offline
pnpm run check
pnpm pack --dry-run
当前测试覆盖旧路由不变量以及目录读取、effort 校验、advisory 无工具、worker 模型/effort、工具过滤与绝对深度传递。
许可证
Apache-2.0,见 LICENSE。
