为每个会话提供独立画板,供 Agent 读取内容
29.5/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add amumulam/dsh-tldraw-canvas该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · browser
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 18 处,展示前 18 条)
- 读取本地文件index.js:108
const info = await stat(cwd).catch(() => undefined); - 读取本地文件index.js:130
content = await readFile(paths.file, 'utf8'); - 写入本地文件index.js:174
await mkdir(paths.directory, { recursive: true }); - 读取本地文件index.js:178
const existing = JSON.parse(await readFile(paths.file, 'utf8')); - 写入本地文件index.js:180
await copyFile(paths.file, path.join(paths.directory, `${sessionId}.v5.json`)); - 写入本地文件index.js:188
await writeFile(temporary, text, 'utf8'); - 写入本地文件index.js:189
await rename(temporary, paths.file); - 删除本地文件index.js:191
await unlink(temporary).catch(() => {}); - 发起网络请求client.js:396
`)}static assertShapeHasProperty(e,t){if(e[t]===void 0)throw new Error}static warn(e){of&&console.warn(e)}static error(e){of&&console.error(e)}static - 写入剪贴板client.js:396
`)}static assertShapeHasProperty(e,t){if(e[t]===void 0)throw new Error}static warn(e){of&&console.warn(e)}static error(e){of&&console.error(e)}static - 请求外部主机www.w3.orgclient.js:397
`);u.push(H.getShapeUtil("text").getShape({id:S.uniqueId(),type:"text",parentId:this.appState.currentPageId,text:H.normalizeText(p.trim()),point:h,sty - 请求外部主机www.w3.orgclient.js:397
`);u.push(H.getShapeUtil("text").getShape({id:S.uniqueId(),type:"text",parentId:this.appState.currentPageId,text:H.normalizeText(p.trim()),point:h,sty - 请求外部主机www.w3.orgclient.js:397
`);u.push(H.getShapeUtil("text").getShape({id:S.uniqueId(),type:"text",parentId:this.appState.currentPageId,text:H.normalizeText(p.trim()),point:h,sty - 发起网络请求client.js:397
`);u.push(H.getShapeUtil("text").getShape({id:S.uniqueId(),type:"text",parentId:this.appState.currentPageId,text:H.normalizeText(p.trim()),point:h,sty - 写入剪贴板client.js:422
`}catch{H.warn("Could not find tldraw-assets.json file.")}else u.textContent="@import url('https://fonts.googleapis.com/css2?family=Caveat+Brush&famil - 发起网络请求client.js:446
`;async function MMe(e,t){let n=await fetch(`${pm}?sessionId=${encodeURIComponent(e)}`,{signal:t,headers:{accept:"application/json"},cache:"no-store"} - 发起网络请求src/client-entry.js:90
const response = await fetch(`${ENDPOINT}?sessionId=${encodeURIComponent(sessionId)}`, { - 发起网络请求src/client-entry.js:111
const response = await fetch(`${ENDPOINT}?sessionId=${encodeURIComponent(sessionId)}`, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:www.w3.org
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-tldraw-canvas
一个 DeepSeek Harness Desktop 插件:为每个 Session 在右侧栏提供独立的 tldraw 画板。本版本使用原始 MIT 开源版 tldraw v1(2021–2022),而不是商业授权的 tldraw 5 SDK,因此不需要 License Key,没有水印,也没有生产环境限制。
画板会自动保存到该 Session 的项目目录(Workspace 所归属的目录),因此它跟随工作区,而不是保存在浏览器存储里。
安装
git clone https://github.com/amumulam/dsh-tldraw-canvas.git
把检出的目录作为 DSH bundle 安装(插件管理器 → 从文件夹安装,或使用绝对路径调用 install_bundle)。client.js 已预构建,安装后的版本不需要 node_modules。
使用
1. 打开某个 Session 的右侧栏。
2. 从工具列表中添加一个标签页,选择 Tldraw 画板。
3. 开始画图。修改会在短暂停顿后自动保存,关闭标签页时也会再保存一次。
状态栏会显示保存状态和工作区相对路径。
读取画板(Agent 工具)
Host 半部负责统一的读取路径,不再需要临时文件系统脚本。
展开完整文档(README 剩余 1 节)
dsh-tldraw-canvas
一个 DeepSeek Harness Desktop 插件:为每个 Session 在右侧栏提供独立的 tldraw 画板。本版本使用原始 MIT 开源版 tldraw v1(2021–2022),而不是商业授权的 tldraw 5 SDK,因此不需要 License Key,没有水印,也没有生产环境限制。
画板会自动保存到该 Session 的项目目录(Workspace 所归属的目录),因此它跟随工作区,而不是保存在浏览器存储里。
安装
git clone https://github.com/amumulam/dsh-tldraw-canvas.git
把检出的目录作为 DSH bundle 安装(插件管理器 → 从文件夹安装,或使用绝对路径调用 install_bundle)。client.js 已预构建,安装后的版本不需要 node_modules。
使用
1. 打开某个 Session 的右侧栏。
2. 从工具列表中添加一个标签页,选择 Tldraw 画板。
3. 开始画图。修改会在短暂停顿后自动保存,关闭标签页时也会再保存一次。
状态栏会显示保存状态和工作区相对路径。
读取画板(Agent 工具)
Host 半部负责统一的读取路径,不再需要临时文件系统脚本。它注册 tldrawCanvas 服务,并以如下工具暴露给 Agent:
tldraw_read_canvas
参数:
- session_id — 可选;默认读取调用方当前 Session
- include_preview — 默认 true;生成 PNG 预览
工具返回结构化摘要(格式、shape/stroke/text 数量、点数、bounds、每个图形详情)以及预览图,因此 Agent 无需手工解析 JSON 就能回答“画板上有什么”。它同时支持新的 v1 文档和旧版 v5 快照。
其他 Host 插件可以注入 tldrawCanvas 并调用:
const analysis = await ctx.tldrawCanvas.inspect(sessionId);
const { analysis, png } = await ctx.tldrawCanvas.render(sessionId);
inspect 和 render 都是只读的;写入仍然由画板标签页及其自动保存负责。
Workspace 与 Session cwd
DSH 的 Workspace 是一条登记记录:一个命名目录,加上创建于该目录下的 Session 列表。它不是产物仓库;删除 Workspace 不会删除目录、文件或 Session 历史。
一个 Session 有两个目录概念:
- 项目原点 — 不可变的 SessionHeader.cwd。Workspace 归属和归档 Session 的读取都以这个路径为准。
- 当前工作目录 — 之后可能通过 working_directory 工具改变。Agent 工具写入这里,而已经启动的 shell 保留自己的进程目录。
画板固定在项目原点,而不是临时的当前工作目录。这样在同一个 Session 里 cd 不会把画作拆到多个目录,活跃 Session 和归档回放也会读取同一个文件。要在另一个目录画画,请新建一个该目录下的 Session。
保存位置
<session 项目目录>/.dsh/tldraw/<session-id>.json
Host 自己解析 Session 的项目目录,浏览器不能指定任意路径。每个画板都以原子方式写入,并且能在应用重启和 Session 切换后继续使用。
旧版 v5 画板
本插件最初使用 tldraw 5。第一次把旧文件保存为 v1 时,Host 会在旁边复制原文件:
.dsh/tldraw/<session-id>.v5.json
客户端会识别 v5 快照,把 freehand draw 图形转换为 v1 点集,并显示 已迁移旧画板 / Legacy canvas migrated 标记。其他 v5 图形类型不会转换;标记的 tooltip 会说明跳过了多少个。插件永远不会删除 .v5.json 备份。
实现
- index.js — Host 半部:注册 GET/PUT /api/tldraw,解析 Session 的项目目录,原子读写,并备份旧版 v5 文件。
- src/client-entry.js — Client 半部:注册 tldraw 标签页类型、工具列表卡片、跟随主题的编辑器和防抖自动保存。
- src/migrate.js — v5 笔画解码与 v5 → v1 文档转换。
- src/canvas-model.js — 格式无关的分析,以及零依赖的 PNG 预览渲染器。
- client.js — 生成的 bundle。
相似的 DSH 插件
社区里已经有一些画板/画布插件;最接近的几个在编辑器、存储和 Agent 能力上有所不同:
| 项目 | 编辑器 | 所在位置 | 持久化 | Agent 工具 |
| johappel/dsh-tldraw(包名 dsh-whiteboard) | tldraw 5 | 右侧栏标签页 | workspace 级 snapshot | 9 个白板工具 |
| zhang-guo-wen/dsh-whiteboard | draw.io | 主面板画廊 + 右侧编辑器 | 插件 files/ 目录 | 编辑器型 |
| Jegozhou/dsh-excalidraw | Excalidraw 0.18 | 主面板 | DSH_HOME/excalidraw/drawings | 5 个带类型的场景工具 |
| CSlawyer1985/dsh-excalidraw-board | excalidraw.com iframe | 浮层 | 上游站点 | 无本地工具 |
| lb-aigc/dsh-canvas | React Flow 节点画布 | 右侧栏 + 会话 | session projection | 5 个节点工具 |
dsh-tldraw-canvas 的定位不同:它使用 MIT tldraw v1 编辑器,每个 Session 在项目目录内保存一个文件,并提供只读摘要 + PNG 预览工具,而不是协作编辑工具集。
为什么使用 tldraw v1
当前 tldraw 5 SDK 源码可见,但在生产环境需要商业/试用/Hobby License Key。原始 tldraw v1 是 MIT,但已停止维护(最后一个版本 1.29.2,2022 年)。本插件有意用现代功能和维护支持换取一个真正开源的编辑器。
开发
npm install
npm run build
npm run build 会从 src/client-entry.js 重新生成 client.js。
测试
node --test test/*.test.mjs
测试覆盖 Host API 的读写约定、非法与并发请求、损坏文件、临时文件清理、旧版 v5 备份、v5 笔画点解码、v5 → v1 转换、可复用读取服务,以及 Agent 工具的摘要/图片信封。
声明
这是一个独立的社区插件。tldraw 是 tldraw Inc. 的商标;本项目与 tldraw Inc. 没有关联,也未获得其背书。打包的 tldraw v1 代码仍遵循其 MIT 许可证(见 THIRD_PARTY_NOTICES.md)。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
amumulam/dsh-tldraw-canvas
为每个会话提供独立画板,供 Agent 读取内容
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目