🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

规划执行模型路由 whg20001/DSH_Model_Router

DeepSeek Harness
whg2000177 天前有提交已提供中文文档扫描:含敏感能力

为规划与执行任务分别指定不同模型

28.3/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add whg20001/DSH_Model_Router
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · tool
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/27·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 77 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 38 处,展示前 38 条)
  • 发起网络请求
    src/client.js:229
    const response = await fetch(API, { cache: 'no-store' });
  • 发起网络请求
    src/client.js:270
    const response = await fetch(`${USAGE_API}?parentSessionId=${encodeURIComponent(parentSessionId)}`, {
  • 发起网络请求
    src/client.js:337
    const response = await fetch(API, {
  • 读取本地文件
    src/cli/main.js:11
    await readFile(`${packageRootFrom(import.meta.url)}/package.json`, "utf8"),
  • 读取本地文件
    src/cli/doctor.js:25
    await access(path, constants.W_OK);
  • 读取本地文件
    src/cli/doctor.js:72
    const patch = inspectCordisPatch(await readFile(paths.patchFile, "utf8"));
  • 读取本地文件
    src/cli/doctor.js:120
    const installed = JSON.parse(await readFile(metadataPath, "utf8"));
  • 读取本地文件
    src/cli/doctor.js:144
    const stale = (await readdir(parent)).filter((name) =>
  • 读取本地文件
    src/cli/install.js:36
    const patchSource = await readFile(paths.patchFile, "utf8");
  • 写入本地文件
    src/cli/install.js:59
    await mkdir(dirname(plan.paths.pluginDir), { recursive: true });
  • 删除本地文件递归
    src/cli/install.js:62
    await rm(stage, { recursive: true, force: true });
  • 写入本地文件
    src/cli/install.js:65
    if (hadPrevious) await rename(plan.paths.pluginDir, previous);
  • 写入本地文件
    src/cli/install.js:67
    await rename(stage, plan.paths.pluginDir);
  • 写入本地文件
    src/cli/install.js:69
    if (hadPrevious) await rename(previous, plan.paths.pluginDir).catch(() => {});
  • 删除本地文件递归
    src/cli/install.js:73
    await rm(plan.paths.pluginDir, { recursive: true, force: true });
  • 写入本地文件
    src/cli/install.js:74
    if (hadPrevious) await rename(previous, plan.paths.pluginDir);
  • 删除本地文件递归
    src/cli/install.js:77
    await rm(previous, { recursive: true, force: true });
  • 删除本地文件递归
    src/cli/install.js:78
    await rm(stage, { recursive: true, force: true });
  • 读取本地文件
    src/cli/install.js:88
    const patch = inspectCordisPatch(await readFile(plan.paths.patchFile, "utf8"));
  • 读取本地文件
    src/cli/uninstall.js:18
    const patchSource = await readFile(paths.patchFile, "utf8");
  • 写入本地文件
    src/cli/uninstall.js:76
    await rename(plan.paths.pluginDir, quarantine);
  • 写入本地文件
    src/cli/uninstall.js:77
    transaction.addRollback(async () => rename(quarantine, plan.paths.pluginDir));
  • 读取本地文件
    src/cli/uninstall.js:82
    const patch = inspectCordisPatch(await readFile(plan.paths.patchFile, "utf8"));
  • 删除本地文件递归
    src/cli/uninstall.js:85
    if (quarantine) await rm(quarantine, { recursive: true, force: true }).catch(() => {});
  • 读取本地文件
    src/cli/plugin-copy.js:8
    const contents = await readFile(join(directory, "package.json"), "utf8");
  • 读取本地文件
    src/cli/plugin-copy.js:42
    for (const entry of await readdir(current, { withFileTypes: true })) {
  • 读取本地文件
    src/cli/plugin-copy.js:46
    const stats = await lstat(path);
  • 读取本地文件
    src/cli/transaction.js:7
    await stat(path);
  • 读取本地文件
    src/cli/transaction.js:19
    mode = (await stat(path)).mode;
  • 写入本地文件
    src/cli/transaction.js:24
    await writeFile(temporary, contents, mode === undefined ? undefined : { mode });
  • 写入本地文件
    src/cli/transaction.js:25
    await rename(temporary, path);
  • 删除本地文件
    src/cli/transaction.js:27
    await rm(temporary, { force: true }).catch(() => {});
  • 写入本地文件
    src/cli/transaction.js:41
    await mkdir(this.directory, { recursive: true });
  • 写入本地文件
    src/cli/transaction.js:53
    await mkdir(dirname(destination), { recursive: true });
  • 写入本地文件
    src/cli/transaction.js:54
    await copyFile(path, destination);
  • 写入本地文件
    src/cli/transaction.js:58
    if (present) await copyFile(destination, path);
  • 删除本地文件
    src/cli/transaction.js:59
    else await rm(path, { force: true });
  • 读取本地文件
    src/cli/transaction.js:93
    return JSON.parse(await readFile(path, "utf8"));
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-llm@deepseek-ai/dsh-settings@deepseek-ai/dsh-subagent@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 规划与执行分设模型

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness Web:规划/执行模型路由插件 DSH Market dsh-sol-luna-router 是独立于 Pi 的可配置 DSH Cordis Web 模型路由插件。用户可以从当前可用的 provider/model 中分别选择规划模型与执行模型;插件不会限定具体厂商或模型名称。 Sol 和 Luna 是断路器协议中的角色名称,不是固定模型:根代理与 Sol 恢复角色使用用户选择的规划模型,一次性 Luna 实现角色使用用户选择的执行模型。插件同时为每个父 session 保存独立的断路器状态。 模型与角色映射 | 配置 | 使用者 | 职责 | | 规划模型(planner) | 根代理、Sol 恢复角色 | 规划、验证,以及断路后的单次恢复 | | 执行模型(executor) | Luna 实现角色 | 执行具体实现任务并返回验证证据 | 例如,用户可以将任意当前可用模型配置为规划模型,并将另一个模型配置为执行模型;模型名称中不需要包含 sol 或 luna。 行为与架构 - 状态阶段:idle、luna、open、sol-recovery、passed、escalated。 - 每次 start_task 清零;Luna 第一次验证失败允许再试一次,第二次打开断路器;之后只允许一个全新的 Sol 恢复,失败即升级。
展开完整文档(README 剩余 1 节)
DeepSeek Harness Web:规划/执行模型路由插件 DSH Market dsh-sol-luna-router 是独立于 Pi 的可配置 DSH Cordis Web 模型路由插件。用户可以从当前可用的 provider/model 中分别选择规划模型与执行模型;插件不会限定具体厂商或模型名称。

Sol 和 Luna 是断路器协议中的角色名称,不是固定模型:根代理与 Sol 恢复角色使用用户选择的规划模型,一次性 Luna 实现角色使用用户选择的执行模型。插件同时为每个父 session 保存独立的断路器状态。

模型与角色映射

| 配置 | 使用者 | 职责 |
| 规划模型(planner) | 根代理、Sol 恢复角色 | 规划、验证,以及断路后的单次恢复 |
| 执行模型(executor) | Luna 实现角色 | 执行具体实现任务并返回验证证据 |

例如,用户可以将任意当前可用模型配置为规划模型,并将另一个模型配置为执行模型;模型名称中不需要包含 sol 或 luna。

行为与架构

- 状态阶段:idle、luna、open、sol-recovery、passed、escalated。
- 每次 start_task 清零;Luna 第一次验证失败允许再试一次,第二次打开断路器;之后只允许一个全新的 Sol 恢复,失败即升级。
- 状态以 dsh-sol-luna-router/state(version 1)追加到父 session;启动 Sol 前先追加 sol_started,持久化失败则不会启动子代理。
- 设置 namespace 为 sol-luna-router:enabled 默认 false,planner/executor 分别保存用户选择的规划与执行路由,subagentProvider 默认 spawn,maxDepth 默认 3。禁用时保留已提交的模型选择。
- Web API:GET/PUT /api/sol-luna-router。GET 每次重新查询全部 provider 的模型;单个 provider 失败只形成 warning。PUT 要求同源、JSON 限制、revision 乐观锁,并在启用时校验所选模型当前可用。
- 启用后,根代理请求固定路由到规划模型;Luna 工作器路由到执行模型;Sol 恢复工作器重新使用规划模型。
- 父代理的直接写工具及 subagent、workflow 等旁路会被拦截;读取、搜索、shell 验证与 run_code 不拦截,但协议明确禁止使用 shell 绕过写限制。子代理隐藏 router 工具。

代码分为无 DSH 依赖的 src/core.js、config.js、models.js、http.js、router.js,以及依赖 DSH 的 src/index.js;浏览器端是 src/client.js 的 ModuleLoader bundle。

命令行安装

前置条件:Node.js >=22.19、pnpm,以及已创建的 DSH profile(默认 ~/.dsh/profiles/web)。推荐通过 npm 包运行:

npx dsh-sol-luna-router install

从当前源码目录安装时使用:

node ./bin/dsh-sol-luna-router.js install --source .

CLI 默认使用 DSH_HOME 环境变量,否则使用 ~/.dsh;profile 默认是 web。也可以显式指定:

dsh-sol-luna-router install --dsh-home /path/to/.dsh --profile web

安装命令会自动:

1. 校验插件源、profile、路径边界及 cordis.patch.yml;
2. 备份 profile 的 package.json、cordis.patch.yml 和已发现的 pnpm lockfile;
3. 通过同级暂存目录安全更新 plugins/dsh-sol-luna-router;
4. 执行 pnpm add file: --save --ignore-scripts;
5. 幂等加入下面的 Cordis entry,并在失败时自动回滚:

- insert:
- id: dsh-sol-luna-router
name: dsh-sol-luna-router

先预览所有动作而不写文件、不运行 pnpm:

dsh-sol-luna-router install --dry-run

Windows PowerShell 仍可使用兼容入口;它会转发到同一个 Node CLI:

.\scripts\install.ps1 -PluginSource C:\path\dsh_plugging
.\scripts\install.ps1 -PluginSource C:\path\dsh_plugging -WhatIf

安装成功后重启 DSH Web,在设置页选择规划模型与执行模型,再打开插件启用开关。

诊断

doctor 是只读检查,不会修改 DSH:

dsh-sol-luna-router doctor
dsh-sol-luna-router doctor --json

它检查 Node/pnpm、profile 配置、Cordis 条目、插件副本、profile 依赖以及 peer dependency 版本。pass/warn 返回 0;存在 fail 返回 1。

卸载

dsh-sol-luna-router uninstall

命令会备份配置、删除精确匹配的 Cordis entry、运行 pnpm remove dsh-sol-luna-router --ignore-scripts,并删除身份验证通过的插件副本。可选参数:

dsh-sol-luna-router uninstall --dry-run
dsh-sol-luna-router uninstall --keep-plugin
安装和卸载的备份位于 ~/.dsh/backups/dsh-sol-luna-router/。退出码 3 表示操作失败且自动回滚不完整,应根据命令输出中的备份目录手动恢复。卸载后重启 DSH Web。

限制与安全边界

这是 Cordis 级工具和请求拦截,不是操作系统沙箱。父代理仍能执行 shell;用户应使用 DSH 权限、工作区隔离和审计。run_code 的动态代码需由宿主自身的工具策略审查。模型目录是 advisory,PUT 只在启用时拒绝不在目录中的路由。

npm run smoke:real-dsh 从 DSH_PROFILE_NODE_MODULES,或 DSH_HOME(默认 ~/.dsh)下的共享 profile node_modules 加载 rc.6 包并验证真实模块兼容性;它不会安装、启动或修改 live DSH 服务。项目另已通过隔离的临时 DSH_HOME 验证 Web 插件加载、GET/PUT API、同源拒绝、设置页渲染与保存交互。

验证

npm test
npm run check
npm run smoke:real-dsh
npm pack --dry-run
预览分享卡片长什么样 ↓whg20001/DSH_Model_Router
分享 · DeepSeek Harness Hub
whg20001/DSH_Model_Router

为规划与执行任务分别指定不同模型

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部