前言¶
在 DeepSeek Harness(DSH)里做智能体开发时,画布类创作往往和对话窗口分离:模型要改节点、触发生成或导出快照,要么靠人工点界面,要么自己写一套桥接。社区插件 dsh-infinite-canvas(维护者 Haitang-Hub)把无限画布装进 DSH Desktop 右侧栏,并通过 MCP 把 canvas_* 工具注册到 Harness,让原生会话里的模型可以直接驱动画布。形态与同仓库生态里的 dsh-3d-director-desk 0.2.3 同构;可与 3D 导演台插件并存,由不同 MCP server 名区分调用目标。
下面介绍它是什么、能做什么、如何安装与验收。
这是什么¶
dsh-infinite-canvas 是 DSH 工作台插件包:一个 npm 包同时承担 DSH bundle(cordis.patch.yml 插入服务端入口)、右侧栏「无限画布」标签(sidebarRightTabs.register()),以及 MCP 工具来源(dsh-mcp-client 把桥的 /mcp 注册为 streamable-http、无状态原生工具)。简介侧重的能力包括多模态节点、AI 生成、工程管理,数据与站点经内置 canvas-agent 桥与面板 iframe 内的画布页面执行。
分类为客户端插件;社区目录页:skillhub.cn/plugins/Haitang-Hub/dsh-infinite-canvas。源码与说明:GitHub — Haitang-Hub/dsh-infinite-canvas。许可证 MIT(见仓库 package.json)。
架构与核心能力¶
调用链可以概括为:DSH 会话调用 mcp__infinite-canvas__* → Harness 内 dsh-mcp-client(streamable-http 连 127.0.0.1:17371/mcp,持续重连)→ 插件 spawn 的 canvas-agent 单文件桥 → SSE / 进程内直达 CanvasSession → 右侧栏 iframe 里的画布页面(经 /bootstrap 拿本机 token,在浏览器内执行 canvas_* 工具)。
与 dsh-3d-director-desk 同时启用时,MCP server 名分别为 infinite-canvas 与 director-desk,默认端口 17371 / 17372,互不冲突。
Harness 侧注册的原生工具名(前缀 mcp__infinite-canvas__)包括:
site_navigatecanvas_list_projectscanvas_get_statecanvas_get_selectioncanvas_apply_opscanvas_run_generationcanvas_export_snapshot
宿主还暴露 REST 便于面板与运维:
| 接口 | 用途 |
|---|---|
GET /api/infinite-canvas.bridge-info |
返回 { ready, host, port, supervised, restarts, error? },面板决定显示 iframe 或恢复引导 |
POST /api/infinite-canvas.restart-bridge |
重建插件托管的桥,无需重启整个 DSH Desktop |
桥进程相关环境变量(插件托管时由入口注入):
| 变量 | 作用 |
|---|---|
CANVAS_AGENT_HOME |
配置与会话数据目录(= dshHomePath('infinite-canvas')) |
CANVAS_SITE_DIR |
指向包内 site/,桥伺服画布静态站 + SPA 回退 |
PORT |
监听端口(与 Config.port 一致,默认 17371) |
改端口时可在 Harness 进程环境设 CANVAS_AGENT_PORT=18000,patch 中的 url 与插件 Config.port 会同步。
从源码构建并安装¶
官方 README 给出的流程是先构建前端与单文件桥,再在 dsh-plugin/ 里同步资产并 npm pack,最后用 本地 .tgz 绝对路径 安装(不要用未在文档出现的 dsh plugin add github:... 形式)。
# 1. 构建前端(web/)
cd web && npm install --legacy-peer-deps && npm run build
# 2. 构建单文件桥(canvas-agent/)
cd ../canvas-agent && npm install && npm run build:bundle
# 3. 同步资产并打包(dsh-plugin/)
cd ../dsh-plugin && npm run pack:all # = sync + npm pack,产出 dsh-infinite-canvas-*.tgz
# 4. 安装到 DSH Desktop
dsh plugin --profile web add /绝对路径/dsh-infinite-canvas-0.2.6.tgz
# 5. 完整退出并重新打开 Desktop(安装/替换包必须重启才载入新 JS 模块代码)
说明:README 示例 tarball 文件名为 dsh-infinite-canvas-0.2.6.tgz;当前仓库 package.json 版本为 0.2.9,实际 npm pack 产物文件名以打包时 version 字段为准。安装或换包、改端口后均需完整重启 DSH Desktop 才生效。
典型用法与验收¶
- 在 Desktop 右侧栏「开始」引导页打开 无限画布,确认面板内画布 iframe 正常(桥未就绪时会走引导;可看
bridge-info)。 - 在 原生会话 中调用 MCP 工具,例如
mcp__infinite-canvas__canvas_get_state,验证工具经桥下发到 iframe 执行器全链路可用(README 验收第 4 条)。 - 桥异常时可
POST /api/infinite-canvas.restart-bridge,不必重启 Desktop(端口变更仍须重启)。
按工作台规范第 8 节还可做配置层核对:dsh --profile web --dump-config 应出现本包两层条目;tar -tzf 检查 tgz 含 package.json、dsh/、lib/、bridge/、site/、cordis.patch.yml。
适用场景与注意¶
适合:已在 DSH Desktop(--profile web)上开发 Agent,需要在同一会话里读画布状态、改节点、跑生成或导出,并与 3D 导演台等插件分工协作的场景。
注意:
- 插件以当前 dsh 进程权限 运行;安装前请自行审阅源码与 MIT 许可证。
- 若本机 17371 已被独立
start.bat起的桥占用,插件会复用该进程,数据可能落在~/.infinite-canvas而非dshHomePath('infinite-canvas')。 - iframe 内仍保留页面直连模型的 AI 助手,与 Harness 原生会话并存。
- 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文事实均来自上述仓库 README 与
package.json。
结尾¶
dsh-infinite-canvas 把无限画布、右侧栏面板和 MCP 桥收进一个可 dsh plugin add 安装的包,让 Agent 通过 mcp__infinite-canvas__* 操作画布而不是只「看截图」。目录页:https://www.skillhub.cn/plugins/Haitang-Hub/dsh-infinite-canvas;仓库:https://github.com/Haitang-Hub/dsh-infinite-canvas。