全部插件

DSH / BUNDLE / CLIENT-UI

dsh-codex-reasoning-router

v0.3.1chenmzh / dsh-codex-reasoning-routerccd16ef6d6

可安装组合包UI 与客户端插件社区 · Topic 自动分析Web UI

概览

dsh-codex-reasoning-router

Composable multi-model agent roles and legacy Luna/Sol reasoning routing for DeepSeek Harness

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 spawnfork 或宿主已注册的其他 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