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

思考画布 qiuyiwu1989-star/dsh-canvas

DeepSeek Harness
qiuyiwu1989-star34 天前有提交已提供中文文档扫描:未发现敏感能力

把会话摊成可缩放卡片图,每张都能追回原文

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · vision
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
数据截至 2026/10/01·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 34 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/10/1) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 会话转为可缩放卡片图
  • 呈现意图与工具动作
  • 卡片追溯来源记录

DeepSeek Harness 的思考画布:把实时会话变成一张可平移缩放的地图,呈现意图、AI 贡献、工具动作和结果,每张卡片都能追溯到来源记录。

README

由 DeepSeek 最新模型翻译生成
思考画布 · Thinking Canvas 把一次会话摊开成一张可以拖动、可以缩放、可以追到出处的图。 DeepSeek Harness 的对话是一列从上往下的流。流适合读,不适合看结构:哪一句是你的意图、哪一段是 AI 的判断、哪一次工具调用才是真正改了文件的动作、你在第几轮改过主意——这些关系在一条直线上是看不出来的。 这个插件在对话视图环里加一个「画布」页签,把当前会话渲染成一张卡片地图。每张卡片都带着它对应那条记录的 anchorSeq,所以画布上的任何一张卡都能回到会话里那一条。 装上 dsh plugin --profile <你的 profile> add github:qiuyiwu1989-star/dsh-canvas dsh plugin 把参数转给 profile 目录里的 pnpm,然后按安装结果对账 dsh.profile.bundles: 这个包声明了 dsh.bundle,所以会自动进入 bundle 层列表。重启应用生效(profile 是启动时读的)。 profile 名就是启动时那个:dsh web 用的是 web,自定义启动用你传的那个名字。 拿不准的话看 $DSH_HOME/profiles/ 下哪个目录最近还在写。
展开完整文档(README 剩余 1 节)
思考画布 · Thinking Canvas

把一次会话摊开成一张可以拖动、可以缩放、可以追到出处的图。

DeepSeek Harness 的对话是一列从上往下的流。流适合读,不适合看结构:哪一句是你的意图、哪一段是 AI 的判断、哪一次工具调用才是真正改了文件的动作、你在第几轮改过主意——这些关系在一条直线上是看不出来的。

这个插件在对话视图环里加一个「画布」页签,把当前会话渲染成一张卡片地图。每张卡片都带着它对应那条记录的 anchorSeq,所以画布上的任何一张卡都能回到会话里那一条。

装上

dsh plugin --profile <你的 profile> add github:qiuyiwu1989-star/dsh-canvas

dsh plugin 把参数转给 profile 目录里的 pnpm,然后按安装结果对账 dsh.profile.bundles: 这个包声明了 dsh.bundle,所以会自动进入 bundle 层列表。重启应用生效(profile 是启动时读的)。

profile 名就是启动时那个:dsh web 用的是 web,自定义启动用你传的那个名字。
拿不准的话看 $DSH_HOME/profiles/ 下哪个目录最近还在写。

没有 prepare 脚本,所以不需要往 pnpm-workspace.yaml 的 allowBuilds 里加任何东西——这个仓库没有构建步骤,lib/ 就是源码。

不想走 pnpm 也可以直接挂补丁:

dsh web --patch /path/to/dsh-canvas/cordis.patch.yml

卸载:

dsh plugin --profile <你的 profile> remove dsh-canvas

装完之后应该看到什么

宿主半侧会在启动时把插件扫描进客户端启动图。真的启动一次,页面里有这一行就说明接上了:

{
"id": "dsh-canvas",
"url": "/plugins/??dsh-canvas/client.js&rev=...",
"inject": ["@deepseek-ai/dsh-client-ui-conversation"]
}

它会被排进 application combo,位置就在它声明依赖的那个包之后。

用它

打开任意一次会话,在对话区顶部的页签里选 画布。

| 动作 | 怎么做 |
| 平移 | 在空白处按住拖动 |
| 缩放 | 滚轮(以光标为中心),或工具条上的 − / + |
| 全览 | 工具条上的「全览」 |
| 看原文 | 点一张卡片,右侧显示它的全文、轮次、步骤、序号 |
| 选卡片 | 卡片右上角的 +,或详情面板里的「加入待用」 |
| 找内容 | 工具条的搜索框;「淡化其他 / 隐藏其他」决定没命中的卡片怎么处理 |
| 只看一类 | 点角色筛选条;再点一次排除;点「全部」复位 |
| 移动卡片 | 直接拖卡片,位置按会话记下来 |
| 取消选择 | Esc |
| 导出 | 底部:选中导出 Markdown(带出处)或整张画布导出 JSON |

卡片角色

画布不按事件的线上形状分类,按「这是谁贡献的」分类。

| 角色 | 对应会话里的什么 |
| 我的意图 | 你发出的消息 |
| 我的选择 | steering——你在 AI 干活中途插进去的纠正 |
| AI 的贡献 | 助手的每一步回答(思考过程单独收在卡片详情里) |
| 工具动作 | 工具调用,标题就是工具名 |
| 成果 | 轮次收尾 |
| 上下文 | 注入的上下文与系统提示词 |
| 系统 | 压缩、重试、过程折叠 |
| 出错 | 轮次错误与触顶 |
| 其他 | 未识别的事件类型 |

示例画布

没有会话可画时(空会话),画布会给你一个五张卡的示例——一个虚构的社区读书会报名页,
从意图到交付。全部虚构,不含任何真实转写、人名或文件。示例数据也提交在 examples/sample-canvas.json。

边界

- 只读。 画布只读会话快照,不改会话、不写文件、不调模型、不发网络请求。
- 只画已加载的那一段窗口。 和 Chat/Trajectory 一样,它读的是客户端当前驻留的会话窗口。
更早的历史要在对话里加载出来才会进入画布——画布不会偷偷去拉全量历史。
- 不进模型上下文。 画布是纯浏览器侧插件,宿主半侧是空的;它不注册工具、不写系统提示词, 所以模型看不见它。
- v0.1 不能从画布跳回对话。 反向定位还没做。目前能靠「轮次 / 步骤 / 序号」自己找。
- 同一时刻只有一份样式。 第二次激活不会再插一份 CSS,也不会把第一份的所有权抢走。

状态存在哪

全部在浏览器本地,不上传:

| 键 | 内容 |
| dsh-canvas:view:<sessionId> | 平移与缩放 |
| dsh-canvas:layout:<sessionId> | 你手动拖过的卡片位置 |

清掉这两类键就回到默认布局。localStorage 不可用时(隐私模式、配额满),画布照常工作,只是不记事。

为什么没有构建步骤

DSH 的客户端 bundle 不是 ES module,而是 window.__ModuleLoader__.load({ id, factory }) 这种「注册一个工厂、物化时才跑模块体」的格式;require 从外壳冻结的模块表里取 React。
这个格式是可以直接手写的,所以本仓库:

- lib/client.js 就是源码,没有 src/,没有 tsdown,没有第二个产物;
- 运行时依赖为零——dependencies、peerDependencies、devDependencies 全空;
- pnpm add github:... 不需要 allowBuilds,因为没有任何脚本要跑。

代价是类型靠 JSDoc 与测试而不是编译器。换来的是:任何人 clone 下来就能读、能改、能测。

开发

node --test test/*.test.mjs # 契约测试
node scripts/smoke.mjs # 端到端:加载 bundle、挂载、渲染、导出、比对示例
node scripts/smoke.mjs --write # 改了示例后重新生成 examples/sample-canvas.json

测试不需要浏览器,也不需要装任何东西。test/harness.mjs 用一个 node:vm 上下文提供 window / document / navigator,用一套桩 React 按真实顺序走一遍渲染路径——函数组件会被展开,useEffect 在挂载时执行一次。所以「注册了什么」「渲染出几张卡」「卸载会不会留下样式」都是被真跑出来断言的,不是靠读代码。

test/sanitize.test.mjs 是发布闸门:它扫全树的文本文件,撞到人名、绝对家目录路径、私有域名、服务器地址、凭据形状的串就失败。

目录

lib/index.js 宿主半侧(空壳 —— 有行才有 bundle 被发现) lib/client.js 浏览器半侧:画布本身 cordis.patch.yml 往 profile 插一行 docs/ARCHITECTURE.md 数据契约:读什么、从哪读、为什么这么分类 examples/ 虚构示例数据 test/ 契约测试 + 发布闸门 scripts/smoke.mjs 无浏览器的端到端自检

兼容性与验证

针对 DeepSeek Harness 0.1.2-rc.1 的客户端槽位契约编写与实测,桌面应用 0.8.2。
它只依赖 slots 这一个客户端 Service,locale 是可选依赖——没有也能跑,只是文案退回 navigator.language。

发布前在真实启动里验过一遍(隔离的 DSH_HOME,没有碰任何现有会话):profile 组合出
画布行 → 客户端模块系统把它扫进启动图 → /plugins combo 里带着本仓库的 bundle 发出来。
上面「装完之后应该看到什么」那一行就是那次启动里的实录。

许可

MIT。仓库只包含通用实现与虚构示例,不含任何真实会话、逐字稿、客户信息或凭据。
预览分享卡片长什么样 ↓qiuyiwu1989-star/dsh-canvas
分享 · DeepSeek Harness Hub
qiuyiwu1989-star/dsh-canvas

把会话摊成可缩放卡片图,每张都能追回原文

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