dsh-infinite-canvas:在 DSH 桌面端把无限画布交给 Agent 操作

前言

在 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_navigate
  • canvas_list_projects
  • canvas_get_state
  • canvas_get_selection
  • canvas_apply_ops
  • canvas_run_generation
  • canvas_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 才生效。

典型用法与验收

  1. 在 Desktop 右侧栏「开始」引导页打开 无限画布,确认面板内画布 iframe 正常(桥未就绪时会走引导;可看 bridge-info)。
  2. 在 原生会话 中调用 MCP 工具,例如 mcp__infinite-canvas__canvas_get_state,验证工具经桥下发到 iframe 执行器全链路可用(README 验收第 4 条)。
  3. 桥异常时可 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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜