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

多角色编排 hugefiver/dsmm

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

为不同角色分配模型并协调分工,保存常用方案

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 49 处,展示前 42 条)
  • 发起网络请求
    src/client/deployment-workspace.ts:99
    if (this.state.pending === destination) this.request(destination);
  • 发起网络请求
    src/command-approval.ts:138
    const outcome = await approval.request({ agent: exec.agent, callId: exec.callId, toolName: exec.name, signal: binding.signal, reason: combined, displa
  • 发起网络请求
    src/permission-control.ts:141
    const outcome = binding.simple ? await this.request(binding, request, approval, true) : await approval.request(request);
  • 发起网络请求
    src/permission-control.ts:196
    const outcome = await this.request(binding, request, approval, binding.entry.mode === "allow" && !binding.ask);
  • 发起网络请求
    src/permission-control.ts:212
    try { const result = await service.request(request); this.checkIntegrity(binding); return result; }
  • 发起网络请求
    src/permission-control.ts:218
    if (binding?.simple) return service.request(request);
  • 发起网络请求
    src/permission-control.ts:220
    || request.callId !== binding.callId || request.toolName !== binding.registration.definition.name || request.signal !== binding.signal) return service
  • 发起网络请求
    src/permission-control.ts:225
    const outcome = await this.request(binding, actual, service, covers && binding.entry!.mode === "allow" && !binding.ask);
  • 读取本地文件
    src/preset-materializer.ts:17
    lstatSync(path: string): PresetFileStatus;
  • 写入本地文件
    src/preset-materializer.ts:18
    mkdirSync(path: string, options?: { recursive?: boolean }): void;
  • 读取本地文件
    src/preset-materializer.ts:19
    readFileSync(path: string, encoding: "utf8"): string;
  • 读取本地文件
    src/preset-materializer.ts:20
    readdirSync(path: string): string[];
  • 写入本地文件
    src/preset-materializer.ts:22
    renameSync(from: string, to: string): void;
  • 删除本地文件
    src/preset-materializer.ts:23
    rmSync(path: string, options: { recursive: boolean; force: boolean }): void;
  • 写入本地文件
    src/preset-materializer.ts:24
    writeFileSync(path: string, data: string, encoding: "utf8"): void;
  • 读取本地文件
    src/preset-materializer.ts:28
    lstatSync(path) {
  • 读取本地文件
    src/preset-materializer.ts:29
    return lstatSync(path);
  • 写入本地文件
    src/preset-materializer.ts:31
    mkdirSync(path, options) {
  • 写入本地文件
    src/preset-materializer.ts:32
    mkdirSync(path, options);
  • 读取本地文件
    src/preset-materializer.ts:34
    readFileSync(path, encoding) {
  • 写入本地文件
    src/preset-materializer.ts:43
    renameSync(from, to) {
  • 删除本地文件
    src/preset-materializer.ts:46
    rmSync(path, options) {
  • 删除本地文件
    src/preset-materializer.ts:47
    rmSync(path, options);
  • 读取本地文件
    src/profile-runtime.ts:136
    const stat = lstatSync(path, { bigint: true }), parent = lstatSync(directory!, { bigint: true });
  • 读取本地文件
    src/profile-runtime.ts:457
    try { lstatSync(legacy); exists = true; } catch (error) { if ((error as NodeJS.ErrnoException).code !== "ENOENT") throw error; }
  • 删除本地文件
    src/profile-store.ts:438
    if (created) unlinkSync(path);
  • 读取本地文件
    src/profile-store.ts:454
    const current = lstatSync(this.profileDir);
  • 删除本地文件
    src/profile-store.ts:513
    try { assertLock(); const named = status(path); if (named !== undefined && sameFile(owned, named)) unlinkSync(path); } catch { }
  • 读取本地文件
    src/profile-store.ts:537
    const file = regularFile(path, MAX_PROFILE_BYTES), owned = lstatSync(path);
  • 读取本地文件
    src/profile-store.ts:539
    if (!sameFile(owned, lstatSync(path)) || !regularFile(path, MAX_PROFILE_BYTES).bytes.equals(file.bytes)) conflict("Child capture changed before native
  • 删除本地文件
    src/profile-store.ts:540
    unlinkSync(path);
  • 删除本地文件
    src/profile-store.ts:633
    if (ownedStatus !== undefined && ownedBytes !== undefined && current !== undefined && sameFile(ownedStatus, current) && current.isFile() && !current.i
  • 读取本地文件
    src/profile-store.ts:662
    if (!sameFile(owned, lstatSync(temporary)) || !staged.bytes.equals(bytes)) conflict("The staged file changed before commit. No file was replaced.");
  • 删除本地文件
    src/profile-store.ts:673
    if (owned !== undefined && current !== undefined && sameFile(owned, current)) unlinkSync(temporary);
  • 读取本地文件
    src/profile-store.ts:704
    const named = lstatSync(path, { bigint: true });
  • 读取本地文件
    src/profile-store.ts:726
    try { return lstatSync(path); } catch (error) {
  • 写入本地文件
    src/profile-store.ts:742
    try { mkdirSync(path, { mode: 0o700 }); } catch (error) { if (errorCode(error) !== "EEXIST") throw error; }
  • 读取本地文件
    src/prompt-content.ts:14
    if (text === undefined) { text = readFileSync(join(sourceRoot, path), "utf8").trim(); assets.set(path, text); }
  • 读取本地文件
    src/prompt-content.ts:20
    if (text === undefined) { text = readFileSync(join(promptRoot, "shared", name), "utf8").trim(); sharedAssets.set(name, text); }
  • 读取本地文件
    src/skills.ts:83
    const parsed = parseSkillMarkdown(await readFile(join(packageRoot, "skills", name, "SKILL.md"), { encoding: "utf8", signal }));
  • 发起网络请求
    src/web-fetch-fakeip.ts:83
    fetch(request: WebFetchRequest, signal?: AbortSignal): Promise<WebFetchResult> {
  • 发起网络请求
    src/web-fetch-fakeip.ts:110
    return new HttpFetchProvider(limits, resolve).fetch(request, signal);
扫描于 2026/10/31(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-web-fetch-http@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/cordis-plugin-group@deepseek-ai/cordis-plugin-include@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-instructions@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-agent-preset-registry@deepseek-ai/dsh-api-gateway@deepseek-ai/dsh-api-remote-access@deepseek-ai/dsh-fs-local
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

把 ocmm 移植到 dsh 的版本。

README

由 DeepSeek 最新模型翻译生成
DSMM DSMM 是 DeepSeek Harness(DSH)的插件。它让不同智能体分工处理任务,给各个角色配置模型和备用模型,把常用设置保存成方案,也提供 Git 写操作等命令防护规则。 比如,让 Planner 拆解任务、Coding 写代码、Reviewer 检查结果,再由 Orchestrator 协调。各个角色可以用不同的模型,不必共用一套配置。 当前发布版本为 @dsmm/dsmm@0.3.15,支持 DSH 0.2.1-rc.2。安装前请确认客户端版本;其他 DSH 版本暂不在支持范围内。Desktop 使用自带运行时,独立命令行环境需要 Node.js 22 或更高版本。 - 源码仓库:hugefiver/dsmm - 发布地址:GitHub Releases (v0.3.15) 与 npm (@dsmm/dsmm) 安装与升级 初次安装 1. 打开 DeepSeek Harness Desktop,进入 插件(Plugins) 页面。 2. 点击 添加插件(Add plugin),输入 @dsmm/dsmm@0.3.15 并确认。 3. 安装完成后,检查插件是否处于启用状态。如果界面提示需要重启,请按提示重启客户端。 Desktop 的插件由客户端自己管理。全局 npm 安装和独立 npm 版 dsh 命令不能替代这一步。
展开完整文档(README 剩余 1 节)
DSMM

DSMM 是 DeepSeek Harness(DSH)的插件。它让不同智能体分工处理任务,给各个角色配置模型和备用模型,把常用设置保存成方案,也提供 Git 写操作等命令防护规则。

比如,让 Planner 拆解任务、Coding 写代码、Reviewer 检查结果,再由 Orchestrator 协调。各个角色可以用不同的模型,不必共用一套配置。

当前发布版本为 @dsmm/dsmm@0.3.15,支持 DSH 0.2.1-rc.2。安装前请确认客户端版本;其他 DSH 版本暂不在支持范围内。Desktop 使用自带运行时,独立命令行环境需要 Node.js 22 或更高版本。

- 源码仓库:hugefiver/dsmm
- 发布地址:GitHub Releases (v0.3.15) 与 npm (@dsmm/dsmm)

安装与升级

初次安装

1. 打开 DeepSeek Harness Desktop,进入 插件(Plugins) 页面。
2. 点击 添加插件(Add plugin),输入 @dsmm/dsmm@0.3.15 并确认。
3. 安装完成后,检查插件是否处于启用状态。如果界面提示需要重启,请按提示重启客户端。

Desktop 的插件由客户端自己管理。全局 npm 安装和独立 npm 版 dsh 命令不能替代这一步。

已有版本升级(Windows)

DSH Desktop 当前不支持在界面中用同名版本原位覆盖更新插件。受支持的升级方式如下:

1. 保存好正在进行的任务,正常退出并完全关闭 DSH Desktop。
2. 使用 Desktop 安装自带的命令行工具更新配置。以下示例适用于 Windows 默认安装路径(%LOCALAPPDATA%\Programs\DeepSeek Harness\): & "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add @dsmm/dsmm@0.3.15 --save-exact --ignore-scripts --registry=https://registry.npmjs.org

若安装在自定义路径,请替换为对应的实际位置;非 Windows 系统请参考 Desktop 自身菜单或官方指引,不要混用非 Desktop 的独立 CLI 命令。
3. 重新打开 DSH Desktop 即可加载新版本。

不要在任务还在运行时升级,也不要为升级手动删除配置。插件更新不保证正在运行的任务能继续执行。

启用 Deepwork

Deepwork 是 DSMM 提供的角色委派与模型路由工作流模块。

插件安装后,Deepwork 模块总开关默认开启,但新创建的普通会话默认不开启 Deepwork 模式。

- 在当前会话中开启:点击会话菜单中的「启用 Deepwork」(英文界面为 Enable Deepwork)。开启后当前会话即可使用角色调度;再次点击「关闭 Deepwork」即可停用。
- 让新会话默认开启:在预设方案配置中,将「默认 Deepwork 模式」(defaultActive)设置为启用。
- 模块总开关限制:如果在插件部署配置中关闭了 Deepwork 模块总开关,会话菜单中将无法开启该模式;若界面提示需要重启,需重启客户端生效。

配置与方案

两种配置范围

DSMM 包含两处相互独立的配置区域:

- 插件部署配置(Plugins → DSMM bundle config):用于管理全局部署或当前原生配置档的覆盖项,包括模块开关、全局执行策略与防护设置。
- 具名预设方案(Settings → Deepwork Profiles):用于保存不同的工作流配置(如日常编码、深度审查等),每个方案拥有独立的角色模型路由与参数。

方案保存、设为默认与会话切换

在 Settings → Deepwork Profiles 中编辑方案时,请注意以下操作的区别:

- 保存方案(Save profile):仅将当前修改写入文件保存,不会自动改变正在运行的会话,也不会自动变成新建会话的默认方案。
- 设为未来默认(Set as future default):将当前选中的方案设为后续新建会话使用的默认配置。
- 在当前会话中应用方案(Apply profile to current session):在已有对话历史的原生会话中直接更换预设方案。
- 会话必须处于真正空闲状态:无正在生成的回复、无排队输入、无待处理审批且无运行中的子任务。界面单独显示 idle 状态并不代表没有后台活动,需等待所有操作完全结束。
- 切换成功后,已存在的旧子任务继续保留启动时的原配置与限制,后续新委派的子任务才会使用新方案。
- 使用方案模型(Use profile model):把当前会话的模型切换为方案中配置的主模型。保存或切换方案本身不会自动改模型;要一起换模型,需要明确点击这个操作。操作期间如果又手动选择了模型,以较新的选择为准。

配置角色模型与参数

在方案编辑页点击「配置全部 Agent 模型」(Configure all Agent models),可以为各个角色配置:

- 主模型(Primary):该角色优先调用的服务商与模型。
- 推理强度与参数:按模型支持的选项填写,例如 medium 或 high。不同模型接受的值可能不同,不能把同一组档位套在所有模型上。
- 备用路由(Fallback Routes):当主模型不可用时依次尝试的候选通道(最多支持 32 个备用路由)。

权限和后台任务

- Git 保护范围不是执行许可:“所有写操作”和“仅高风险写操作”决定保护规则检查哪些 Git 操作;检查后是询问、禁止还是关闭保护,由对应设置决定。选择范围不代表自动执行或批准命令。
- 子任务不继承临时授权:子任务被拒绝的操作不会自动继承父任务已获得的单次审批。
- 禁止审批时会直接拒绝:如果原生会话的审批策略是 never,需要审批的操作会被拒绝,DSMM 不能替它放行。
- 授权功能仍有限制:目前无法单独授予指定外部目录的写权限,无法为子代理开放审批,也无法跨会话记住临时授权。
- 任务等待与取消:角色调用默认等待执行完成。若需后台异步执行,须在启动前完成配置,正在前台同步等待的任务无法中途切入后台;取消任务请使用原生的中断操作。

相关文档

需要了解具体设置时,可以继续阅读:

- 预设方案
- 插件设置
- 模型与备用路由
- 权限与审批

参与开发请看测试说明、兼容性说明和维护指南。

许可证与归属

本项目遵循 Anti American AI Public License (AAAPL),版权所有 © 2026 Hugefiver。依赖库与第三方授权详情请见 docs/maintenance.md。
预览分享卡片长什么样 ↓hugefiver/dsmm
分享 · DeepSeek Harness Hub
hugefiver/dsmm

为不同角色分配模型并协调分工,保存常用方案

回到顶部