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

协作画布 aur3l14no/dsh-mindmap

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

在画布上画框分配任务,智能体自动接手并协同作画

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 24 处,展示前 24 条)
  • 发起网络请求
    src/host/api.js:80
    async fetch(request) {
  • 发起网络请求
    src/host/api.js:140
    async fetch(request) {
  • 读取本地文件
    src/host/api.js:188
    if (!file.startsWith(ASSET_DIR) || file.includes(`${sep}..`) || !existsSync(file) || !statSync(file).isFile()) {
  • 读取本地文件
    src/host/api.js:188
    if (!file.startsWith(ASSET_DIR) || file.includes(`${sep}..`) || !existsSync(file) || !statSync(file).isFile()) {
  • 读取本地文件
    src/host/api.js:197
    createReadStream(file).pipe(res)
  • 读取本地文件
    src/host/canvases.js:46
    if (!existsSync(dir)) return []
  • 读取本地文件
    src/host/canvases.js:47
    const entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    src/host/canvases.js:49
    .filter(entry => entry.isDirectory() && NAME.test(entry.name) && existsSync(join(dir, entry.name, CANVAS_FILE)))
  • 读取本地文件
    src/host/canvases.js:61
    if (!existsSync(canvas.file)) throw new MindmapError(`no canvas "${name}" in workspace "${workspace.title}"`, 404)
  • 读取本地文件
    src/host/canvases.js:89
    if (existsSync(canvas.file)) throw new MindmapError(`canvas "${name}" already exists`, 409)
  • 读取本地文件
    src/host/render.js:14
    const BUNDLED_FONTS = readdirSync(FONT_DIR).filter(name => name.endsWith('.otf')).map(name => FONT_DIR + name)
  • 读取本地文件
    src/host/render.js:22
    const XIAOLAI = JSON.parse(readFileSync(XIAOLAI_DIR + 'index.json', 'utf8'))
  • 读取本地文件
    src/host/render.js:405
    const files = [...BUNDLED_FONTS, ...xiaolaiFiles(visible), ...fontFiles.filter(file => existsSync(file))]
  • 读取本地文件
    src/host/render.js:421
    return CJK_FONT_CANDIDATES.filter(file => existsSync(file)).slice(0, 1)
  • 读取本地文件
    src/host/canvas.js:45
    if (!existsSync(this.file)) return this
  • 读取本地文件
    src/host/canvas.js:46
    const data = JSON.parse(await readFile(this.file, 'utf8'))
  • 写入本地文件
    src/host/canvas.js:60
    await mkdir(join(this.dir, 'exports'), { recursive: true })
  • 读取本地文件
    src/host/canvas.js:61
    if (!existsSync(this.file)) await this.writeNow()
  • 写入本地文件
    src/host/canvas.js:157
    await mkdir(this.dir, { recursive: true })
  • 写入本地文件
    src/host/canvas.js:170
    await writeFile(temp, `${JSON.stringify(data, null, 1)}\n`)
  • 写入本地文件
    src/host/canvas.js:171
    await rename(temp, this.file)
  • 读取本地文件
    src/host/text.js:6
    const METRICS = JSON.parse(readFileSync(new URL('../../assets/font-metrics.json', import.meta.url), 'utf8'))
  • 写入本地文件
    src/host/views.js:118
    await mkdir(dir, { recursive: true })
  • 写入本地文件
    src/host/views.js:121
    await writeFile(file, rendered.png)
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

为 DSH Web GUI 提供持久协作的 Excalidraw 画布,画布上的每个框都由画布负责人分配各自的 Agent Teams 队友。

README

由 DeepSeek 最新模型翻译生成
DSH Mindmap 一块持久化的 Excalidraw 画布,供 DSH 使用。智能体在画布上与你并肩作画:画一个框,说明框里放什么,智能体就接手这个框;同时由主智能体规划各个框如何协同。 六个框,每个大洲一个:它们的智能体就投影达成一致,画出一张世界地图 六个框,每个只被要求「<大洲>(见备注)」。智能体之间自行商定一种投影,凭记忆画出一张世界地图,用时不到六分钟。 需要 DSH 0.2.x 及其 Agent Teams 插件。MIT 许可。 安装 插件页面(DSH Web 或 Desktop):在侧边栏打开 Plugins,开启 Agent Teams。然后选择 Add plugin,粘贴下面的地址并安装: https://github.com/aur3l14no/dsh-mindmap/releases/download/v0.1.0/dsh-mindmap-0.1.0.tgz 终端(命令行 Web 配置档): dsh plugin --profile web add @deepseek-ai/dsh-experimental-agent-team-profile@$(dsh --version)
展开完整文档(README 剩余 1 节)
DSH Mindmap

一块持久化的 Excalidraw 画布,供 DSH 使用。智能体在画布上与你并肩作画:画一个框,说明框里放什么,智能体就接手这个框;同时由主智能体规划各个框如何协同。

六个框,每个大洲一个:它们的智能体就投影达成一致,画出一张世界地图

六个框,每个只被要求「<大洲>(见备注)」。智能体之间自行商定一种投影,凭记忆画出一张世界地图,用时不到六分钟。

需要 DSH 0.2.x 及其 Agent Teams 插件。MIT 许可。

安装

插件页面(DSH Web 或 Desktop):在侧边栏打开 Plugins,开启 Agent Teams。然后选择 Add plugin,粘贴下面的地址并安装:

https://github.com/aur3l14no/dsh-mindmap/releases/download/v0.1.0/dsh-mindmap-0.1.0.tgz

终端(命令行 Web 配置档):

dsh plugin --profile web add @deepseek-ai/dsh-experimental-agent-team-profile@$(dsh --version)
dsh plugin --profile web add https://github.com/aur3l14no/dsh-mindmap/releases/download/v0.1.0/dsh-mindmap-0.1.0.tgz
dsh web

让智能体来装:把下面这段粘贴到 DSH(Creator 模式)、Claude Code、Codex 或任意编程智能体里:

Install the DSH plugin dsh-mindmap by following
https://raw.githubusercontent.com/aur3l14no/dsh-mindmap/HEAD/docs/install.md

然后在侧边栏打开 Mindmap,选一个工作区,创建画布。按 F,拖出一个框,输入框里要放的内容,按 Enter。

画布能带来什么

除了常规绘图工具(便签、文本、形状、箭头、拖动、框选、缩放、撤销/重做、自动保存):

- 主智能体:每块画布就是一个 DSH 会话,显示在画布下方。在那里与它对话;它是负责这块画布的智能体团队的主智能体(Team Lead)。
- 智能框:框就是 Excalidraw 的 frame(F 工具)。框覆盖的元素都属于它。画一个框,说明框里要放什么:主智能体的一名新队友会接手这个框,并被锁定在框上。
- 锁定:被锁定的框,以及框里的一切,只有它的持有者、用户或某个智能体能改动。框可以重叠;重叠区域里的内容同时锁定给两个持有者。

智能体之间的依赖、接力与冲突不属于画布机制:主智能体与队友用 Agent Teams(消息、任务板)解决,就像团队在同一工作区里协作一样。调度仍交给 DSH 的自动化任务。

使用方式

- 与主智能体对话:在画布下方的聊天框里进行;拖动它的上边缘可调整大小。
- 把框交给智能体:按 F,拖出一个框,输入要它做什么,按 Enter(按 Esc 则保留普通框)。选中一个还没有智能体的框,同样会提供 Ask an agent。
- 与框的智能体对话:选中它的框,或点击它的标签;聊天会切换到那名队友。聊天上方的标签页可以切回来。对话是你引导智能体的方式:你在画布上画的东西始终归你,绝不会被拿走智能体听到的是:下次它查看时,你改动过它框内或框旁的内容。停止智能体、删除它的工作或解除它的锁,这些决定都由 lead 尊重。
- 观察智能体工作:每个正在工作的智能体都显示为一个协作者光标,位置在它最后读取或绘制的地方,并说明它在做什么、或告诉队友什么(思考时显示为点),它刚改动的内容会高亮描边。点击右上角的头像即可跳转到那里。
- 锁:选中一个框并锁定它,就能把智能体挡在外面;点击锁标记即可解除任何锁,无论是你的还是智能体的。

智能体工具

工作区中每个拥有画布的会话都会获得三个工具和一份简短的画布策略(绘制前先认领并锁定框,遇到锁时给持有者发消息而不是绕开它,让绘图本身作为汇报,只在他人必须行动时才发消息,在画布上只使用这些工具)。它们的描述、schema 和错误信息就是全部约定。

| 工具 | 用途 |
| canvas_read | 你在画布上的身份、带所有者和锁持有者的框,以及以紧凑 Excalidraw JSON 表示的元素,可针对整个画布、单个框或指定 id。 |
| canvas_view | 画布、框、id 或区域的 PNG,绘制效果与画布一致,可选坐标网格。 |
| canvas_write | 一个原子批次,包含创建、部分更新(按 id)、组移动与复制(整体放置、缩放和旋转)、重新堆叠(above/below)、删除和框锁定("lock": true/false)。 |

智能体锁定一个框后即成为其所有者;队友锁定 lead 为它绘制的框时也是如此。只有持有者能修改已锁定的框;画布 lead 可以解除队友的锁(再次锁定该框会把它还给队友),而只有用户能解除用户设置的锁。智能体启动的助手以该智能体的身份写入。

存储

所有内容都存放在工作区中:

.mindmaps//
canvas.excalidraw standard Excalidraw scene; boxes keep owner and lock in customData,
and "mindmap.sessionId" names the canvas lead Session
exports/ images rendered by canvas_view

刷新页面或重启 DSH 会恢复画布、框、锁以及 lead 及其团队;不会重放任何操作。

配置

在配置档的 cordis.patch.yml 中为 mindmap 条目设置这些选项:

- id: mindmap
config:
fontFiles: [/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc]

| 选项 | 默认值 | 含义 |
| fontFiles | [] | 智能体看到的图像所用的字体文件,例如 CJK 字体。为空时使用第一个已安装的 CJK 系统字体。默认字体 Excalifont 中的 CJK 文本则改用 Excalidraw 自带的 Xiaolai 绘制。 |
| teammateProvider | spawn | 框的队友启动时使用的子代理服务商,与 Agent Teams 为新队友所用的一致。 |

开发

npm install --ignore-scripts # peer dependencies come from DSH
npm run build # client bundles and font assets
npm test
npm run parity # PNG 渲染器,与 Excalidraw 自带导出并排对比

想试某个 checkout,用 dsh plugin --profile web add link:$PWD 把它加进配置档,改动后重新构建。发布时会把构建好的 npm pack tarball 作为 dsh-mindmap-<version>.tgz 附上;记得同步更新 Install 里的地址。

client.js 注册页面和页面内嵌的对话;client.canvas.js(Excalidraw)首次访问时才加载。index.js 是 Host 插件:src/host/ 放画布存储、锁与写入规则、画布团队、工具、路由和 PNG 渲染器;src/shared/ 由两端共用。

致谢

这个想法来自蒋炎岩在《生成式软件工程》课程(NJU,2026)讲的 DeepSeek Harness:视频、讲义。其中的 Excalidraw 插件锁住用户选区,以 JSON 交给画布的 Session,再应用模型的替换结果:「锁对象 + 序列化对象 + UI」。Mindmap 把锁变成能圈住一块区域的框,并给每个框配一名 Agent Teams 队友,由画布负责人统一带领。

许可证

MIT。随附的 Excalidraw、渲染库和字体各自保留自己的许可证:见 THIRD_PARTY_NOTICES.md。
预览分享卡片长什么样 ↓aur3l14no/dsh-mindmap
分享 · DeepSeek Harness Hub
aur3l14no/dsh-mindmap

在画布上画框分配任务,智能体自动接手并协同作画

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