为不同角色分配模型并协调分工,保存常用方案
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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
hugefiver/dsmm
为不同角色分配模型并协调分工,保存常用方案
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 21,780未汉化DSH
73.5
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 1,947已汉化MCP
72.7
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,347已汉化DSH
71.9
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13917 个插件含 PR 收录与…
★ 343已汉化DSH
71.6