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

子代理路由进化 ZekaiShi/dsh-evo-subagent

DeepSeek Harnessv1.2.0
ZekaiShi4 天前有提交已提供中文文档扫描:含敏感能力

跨工作区独立人格、自适应风格与陪伴预设:为项目和对话分别维护人格与确认后的通用偏好,支持任意 DSH…

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

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

自动兼容检查未通过:engines.node 要求 >=24.2.0,不满足 Node 22.19.0。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ZekaiShi/dsh-evo-subagent
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

engines.node 要求 >=24.2.0,不满足 Node 22.19.0

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-evo-subagent @ 1.2.0
✗Node 引擎要求 >=24.2.0 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 00:31:29

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 77 处,展示前 59 条)
  • 读取本地文件
    binding.js:41
    text = await readFile(filename, 'utf8')
  • 读取本地文件
    binding.js:68
    const text = await readFile(filename, 'utf8')
  • 写入本地文件
    binding.js:83
    await writeFile(filename, updated, 'utf8')
  • 读取本地文件
    binding.js:102
    text = await readFile(filename, 'utf8')
  • 发起网络请求
    habits.js:92
    async fetch(request) {
  • 发起网络请求
    persona.js:246
    ctx.inject(['connection'], ({ connection }) => connection.fetch.register({ path: '/api/evo-subagent/persona', methods: ['GET', 'POST'], requestBody: '
  • 发起网络请求
    dsh/client.js:248
    var response = await fetch('/api/evo-subagent/persona' + (query ? '?' + query : ''), { method: body ? 'POST' : 'GET', credentials: 'same-origin', cach
  • 发起网络请求
    dsh/client.js:340
    var response = await fetch('/api/evo-subagent/habits' + (selected ? '?target=' + encodeURIComponent(selected) : ''), {
  • 发起网络请求
    dsh/client.js:471
    fetch('/evo-subagent/projects')
  • 发起网络请求
    dsh/client.js:498
    fetch('/evo-subagent/config', {
  • 发起网络请求
    dsh/client.js:515
    fetch('/evo-subagent/config', {
  • 发起网络请求
    dsh/client.js:528
    fetch('/evo-subagent/model', {
  • 读取本地文件
    plugin.js:26
    return JSON.parse(readFileSync(join(evolutionDir, 'config.json'), 'utf8')) ?? {}
  • 写入本地文件
    plugin.js:34
    mkdirSync(evolutionDir, { recursive: true })
  • 写入本地文件
    plugin.js:35
    writeFileSync(join(evolutionDir, 'config.json'), JSON.stringify(config, null, 2), 'utf8')
  • 写入本地文件
    plugin.js:295
    await mkdir(targetDir, { recursive: true })
  • 写入本地文件
    plugin.js:296
    await copyFile(template.filename, target, constants.COPYFILE_EXCL)
  • 读取本地文件
    habits-store.js:146
    const info = lstatSync(this.filename)
  • 读取本地文件
    habits-store.js:148
    markdown = readFileSync(this.filename, 'utf8')
  • 写入本地文件
    habits-store.js:159
    await mkdir(dirname(this.filename), { recursive: true })
  • 写入本地文件
    habits-store.js:186
    await rename(temporary, this.filename)
  • 删除本地文件
    habits-store.js:190
    if (temporary) await unlink(temporary).catch(() => {})
  • 删除本地文件
    habits-store.js:192
    await unlink(lockname)
  • 读取本地文件
    sharing.js:34
    const info = lstatSync(this.filename)
  • 读取本地文件
    sharing.js:36
    state = JSON.parse(readFileSync(this.filename, 'utf8'))
  • 写入本地文件
    sharing.js:55
    await mkdir(dirname(this.filename), { recursive: true })
  • 写入本地文件
    sharing.js:76
    await rename(temporary, this.filename)
  • 删除本地文件
    sharing.js:77
    } finally { if (temporary) await unlink(temporary).catch(() => {}); await lock.close(); await unlink(lockPath) }
  • 读取本地文件
    sharing.js:174
    if (existsSync(join(dir, '.git')) || existsSync(join(dir, 'AGENTS.md'))) return { path: dir, label: basename(dir) }
  • 读取本地文件
    persona-store.js:92
    const filename = join(this.directory, name), info = lstatSync(filename)
  • 读取本地文件
    persona-store.js:94
    return readFileSync(filename, 'utf8')
  • 写入本地文件
    persona-store.js:118
    await mkdir(this.directory, { recursive: true })
  • 写入本地文件
    persona-store.js:149
    await rename(temporary[3], join(this.directory, PERSONA_FILES[3]))
  • 写入本地文件
    persona-store.js:150
    for (let i = 0; i < 3; i++) await rename(temporary[i], join(this.directory, PERSONA_FILES[i]))
  • 删除本地文件
    persona-store.js:153
    for (const file of temporary) await unlink(file).catch(() => {})
  • 删除本地文件
    persona-store.js:154
    await lock.close(); await unlink(lockPath)
  • 读取本地文件
    bili-bridge.js:11
    const info = lstatSync(path)
  • 读取本地文件
    bili-bridge.js:13
    return readFileSync(path, 'utf8')
  • 读取本地文件
    bili-bridge.js:16
    const info = lstatSync(path)
  • 写入本地文件
    bili-bridge.js:24
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    bili-bridge.js:32
    signal?.throwIfAborted(); await rename(temporary, path)
  • 删除本地文件
    bili-bridge.js:33
    } finally { await file.close().catch(() => {}); await unlink(temporary).catch(() => {}) }
  • 读取本地文件
    bili-bridge.js:51
    const names = readdirSync(path).filter(name => folder === 'out' ? /^ {4}- {2}- {2} md$/.test(name) : /^BV[0-9A-Za-z]{10}- {4}- {2}- {2} md$/.t
  • 读取本地文件
    evolution.js:150
    entries = await readdir(agentsDir, { withFileTypes: true })
  • 读取本地文件
    evolution.js:162
    const text = await readFile(filename, 'utf8')
  • 写入本地文件
    evolution.js:164
    await writeFile(filename, addEvolutionReportBlock(text), 'utf8')
  • 读取本地文件
    evolution.js:205
    available = (await stat(join(root, MAIN_AGENT_FILENAME))).isFile()
  • 读取本地文件
    evolution.js:212
    const config = JSON.parse(await readFile(join(root, directory, 'config.json'), 'utf8'))
  • 读取本地文件
    evolution.js:235
    const text = await readFile(previousFile, 'utf8')
  • 写入本地文件
    evolution.js:236
    await writeFile(previousFile, removeMainAgentBlock(text), 'utf8')
  • 读取本地文件
    evolution.js:240
    const text = await readFile(target, 'utf8')
  • 写入本地文件
    evolution.js:241
    await writeFile(target, addMainAgentBlock(text), 'utf8')
  • 写入本地文件
    evolution.js:251
    await mkdir(configDir, { recursive: true })
  • 写入本地文件
    evolution.js:252
    await writeFile(join(configDir, 'config.json'), JSON.stringify({ mainAgentFile: next }, null, 2) + '\n', 'utf8')
  • 写入本地文件
    evolution.js:309
    await mkdir(dirname(filename), { recursive: true })
  • 读取本地文件
    scope.js:9
    return (await stat(dir)).isDirectory()
  • 读取本地文件
    scope.js:32
    await access(join(dir, marker))
  • 读取本地文件
    scope.js:122
    entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    skills.js:16
    const text = readFileSync(path, 'utf8')
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-subagent@deepseek-ai/dsh-tools@deepseek-ai/dsh-working-directory
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 按角色路由子代理
  • 智能体独立进化
  • 命令记忆黑白名单
展开完整介绍(146 字)↓

统一的 DeepSeek Harness 插件:按角色路由子代理 + 每个智能体独立进化(prefercmd/memory 当知识白名单/黑名单),重复任务直接从验证过的命令起步,省 token。统一子代理路由与进化:prefercmd/memory 充当知识白名单/黑名单,省 token。

README

由 DeepSeek 最新模型翻译生成
dsh-evo-subagent dsh-evo-subagent — Route. Remember. Evolve. 不同工作区,不同人格;让熟悉的助手逐渐适应你。 工作区独立人格 · 自适应风格 · 由你掌控的偏好记忆 开发项目需要高效搭档,讨论需要独立判断,日常交流需要温和陪伴。可以共享一份熟悉的人格,也可以为每个工作区分别配置,或让某段对话拥有自己的风格。 可以做什么 | 功能 | 用途 | | 工作区人格 | 为不同项目设置人格名称、预设和风格要求。 | | 对话人格 | 跟随工作区,或让当前对话单独维护人格。 | | 自适应风格 | 根据你的明确反馈,逐渐调整语气、详略和互动方式。 | | 陪伴预设 | 温和陪伴、理性沉稳、轻松幽默、直接利落、细致引导。 | | 偏好记忆 | 用一份可编辑摘要保存你确认的通用交流习惯。 | | 角色协作 | 子代理路由到任意已注册模型,积累可复用的项目经验。 | 独立档案中的学习留在本范围内,不回写共享人格。新的长期偏好由你确认。 安装 dsh plugin add dsh-evo-subagent 需要 DeepSeek Harness ^0.2.1-rc.2 和 Node.js >=24.2.0。
展开完整文档(README 剩余 1 节)
dsh-evo-subagent

dsh-evo-subagent — Route. Remember. Evolve.

不同工作区,不同人格;让熟悉的助手逐渐适应你。

工作区独立人格 · 自适应风格 · 由你掌控的偏好记忆

开发项目需要高效搭档,讨论需要独立判断,日常交流需要温和陪伴。可以共享一份熟悉的人格,也可以为每个工作区分别配置,或让某段对话拥有自己的风格。

可以做什么

| 功能 | 用途 |
| 工作区人格 | 为不同项目设置人格名称、预设和风格要求。 |
| 对话人格 | 跟随工作区,或让当前对话单独维护人格。 |
| 自适应风格 | 根据你的明确反馈,逐渐调整语气、详略和互动方式。 |
| 陪伴预设 | 温和陪伴、理性沉稳、轻松幽默、直接利落、细致引导。 |
| 偏好记忆 | 用一份可编辑摘要保存你确认的通用交流习惯。 |
| 角色协作 | 子代理路由到任意已注册模型,积累可复用的项目经验。 |

独立档案中的学习留在本范围内,不回写共享人格。新的长期偏好由你确认。

安装

dsh plugin add dsh-evo-subagent

需要 DeepSeek Harness ^0.2.1-rc.2 和 Node.js >=24.2.0。

如果之前安装的是 evo-subagent,先移除旧包,再安装新名称:

dsh plugin remove evo-subagent
dsh plugin add dsh-evo-subagent

原有人格、偏好、角色绑定和项目经验会继续复用。

开始使用

打开 DSH 的插件设置,进入 dsh-evo-subagent。

- 陪伴人格: 勾选每个工作区独立,直接列出工作区;展开项目,即可启用该人格、设置名称、预设和风格要求。取消勾选后使用共享人格,原有工作区档案保留。
- 对话人格: 在输入框旁打开人格,选择跟随工作区或仅此对话独立。新建独立对话档案默认暂停后台学习。
- 自适应风格: 选择自主探索并开启逐渐了解我,再用明确反馈给出方向,例如:“写代码时直接一些,聊烦恼时先听我说,再给建议。”
- 用户习惯: 用一段简短摘要维护通用偏好。新的建议放在统一样式的折叠面板中,由你修改和确认。
- 子代理管理: 选择工作区,添加内置角色或自己的 agent 文件,再选择已注册模型。支持通过其他 provider 插件接入的 Codex、Claude Code 等模型。

人格设置保存后,后续回复即可采用。通用习惯有自己的共享范围,可以跨项目共享交流偏好,同时让各工作区保持独立人格。

数据与控制

档案保存在本机 DSH 用户目录。开启人格学习后,少量对话摘录会发送给所选模型进行后台整理,并产生额外模型用量。可以随时暂停学习、忘记偏好或恢复上次风格。

1.2 更新了什么

- 包名与 GitHub 仓库正式从 evo-subagent 更名为 dsh-evo-subagent。
- 工作区独立简化为一个勾选项,下方按工作区折叠管理。
- 简化对话人格选择,统一通用偏好更新面板的布局与动画。

完整更新日志 · 版本发布说明

操作演示

子代理管理操作演示

观看子代理管理视频。此录制介绍角色配置;人格设置请参考上方说明。

下载趋势

npm 累积下载量

图表合并统计 evo-subagent 与 dsh-evo-subagent 的 npm 累积下载量,每天更新。下载次数不等于独立用户数。

反馈问题 · MIT 许可证
预览分享卡片长什么样 ↓ZekaiShi/dsh-evo-subagent
分享 · DeepSeek Harness Hub
ZekaiShi/dsh-evo-subagent

跨工作区独立人格、自适应风格与陪伴预设:为项目和对话分别维护人格与确认后的通用偏好,支持任意 DSH…

这是你的仓库?认领条目

回到顶部