dsh-compact-activity
简体中文 | English
让 DeepSeek Harness 的思考、工具调用和图片输出更容易浏览。
插件把连续的思考和工具调用收进一个默认折叠的总过程项。展开后仍使用 DSH 官方组件,模型正文保持可见。
功能概览
- 过程折叠:连续或单条思考、工具调用都可以收进一个总过程项。
- 实时状态:显示进行中、已完成或执行错误,以及思考、工具和失败步骤计数;运行中的工具会复用官方摘要。
- 错误识别:统计结构化工具错误、思考中断,以及 Bash/PWSH 等终端工具的非零退出码和终止信号。
- 正文保留:同一 step 同时包含思考和正文时,只折叠 Think,正文继续显示。
- 图片折叠:非用户输入的图片默认收起,用户和 steering 消息中的图片保持原样。
- 官方交互不变:不替换官方渲染器,不修改模型上下文、会话日志或工具执行。
状态、计数和图片文案跟随 DSH 的语言设置,支持 中文 和 English。切换语言后,已显示的总过程项和图片标记会同步更新。
效果展示
image
image
image
image
image
image
安装
DSH Desktop 2.0.12(Beta:2.0.12-beta.1)
从系统托盘打开 DSH Terminal,针对当前 profile 运行:
dsh plugin add dsh-compact-activity@latest
dsh --dump-config
pnpm list dsh-compact-activity --depth 0
配置输出应包含 id: ui-compact-activity 和 name: dsh-compact-activity。验证后重启 DSH Desktop。
Desktop 已内置 Node.js、pnpm 和 DSH。无需为本插件全局安装这些工具,也不要使用 npm 代替 pnpm。DSH Terminal 中的命令默认操作 Desktop 当前 profile,不要添加 --profile web。
Desktop 对刚发布的 npm 包默认应用 24 小时最短发布时间策略。安装时应优先使用 @latest,然后比较 npm 的最新版本和 profile 实际安装版本:
$latest = pnpm view dsh-compact-activity dist-tags.latest
pnpm list dsh-compact-activity --depth 0
如果实际版本不是 $latest,再显式安装查询到的版本以确认用户选择:
dsh plugin add "dsh-compact-activity@$latest"
dsh plugin update dsh-compact-activity --latest 也可能因安全窗口继续保留旧版本并显示 Already up to date,因此必须核对实际版本,不能只看命令是否成功。
Desktop 的每个 profile 有独立的插件清单和构建配置。托盘从 desktop 切换到 web 后,之前安装在 desktop 的插件不会自动出现在 web;必须切换到目标 profile 后,在该 profile 的 DSH Terminal 中再次执行上面的安装、更新和验证命令。切回其他 profile 时同理。
普通 DSH CLI/Web
适用于终端中已有 dsh 和 pnpm 的 Linux、macOS 和 Windows 环境。只有 Node.js 和 npm 无法安装 DSH 插件;请先按 DSH 官方方式配置 pnpm 和 DSH。
dsh plugin --profile web add dsh-compact-activity@latest
dsh --profile web --dump-config
配置输出应包含 id: ui-compact-activity 和 name: dsh-compact-activity。验证后运行 dsh --profile web。插件默认启用。
让 Agent 帮你安装
如果你的 Agent 可以使用终端,把下面这段话直接发给它:
请安装并验证最新版 dsh-compact-activity。
1. 如果目标是 DSH Desktop(稳定版 2.0.12 或 Beta 2.0.12-beta.1),直接定位并使用 Desktop 提供的 DSH Terminal 程序或启动入口。不要用普通 PowerShell、CMD 或其他终端代替。找不到 DSH Terminal 时停止并报告,不要猜测路径。
2. 在 DSH Terminal 中优先运行 `dsh plugin add dsh-compact-activity@latest`、`dsh --dump-config` 和 `pnpm list dsh-compact-activity --depth 0`。这些命令操作 Desktop 当前 profile,不要添加 `--profile web`。
3. 用 `pnpm view dsh-compact-activity dist-tags.latest` 查询 npm 最新版本。如果实际安装版本不一致,再运行 `dsh plugin add "dsh-compact-activity@<查询到的版本>"`,不要预先写死版本号。
4. 只有目标明确是普通 DSH CLI/Web 时,才使用带 `--profile web` 的插件命令。此路径需要 `dsh` 和 `pnpm`;npm 不能代替 pnpm。
5. 配置输出必须包含 `id: ui-compact-activity` 和 `name: dsh-compact-activity`。读取已安装包的 `package.json` 并报告 npm 最新版本、实际版本、安装路径和验证结果。
6. 如果定位或启动终端、执行命令、联网下载或读取验证结果需要当前没有的权限,立即向用户说明受阻操作、所需权限和用途,并请求授权。得到授权前不要继续,不要自行提权或绕过限制。
7. 不要安装全局工具,不要检查 app.asar 内部路径,也不要编辑 profile 清单、修改 Desktop 应用文件或手动复制插件。
使用方式
插件没有独立的设置页面。安装后重启 DSH Web 或 Desktop 即可生效;语言由 DSH 的 Language 设置控制:
| 场景 | 显示行为 |
|---|
| 连续或单条过程消息 | 合并为一个默认收起的总折叠项 |
| 正在思考 | 显示 进行中...、计数和 正在思考 |
| 正在调用工具 | 显示最后一个官方工具的类型和摘要 |
| 正常完成 | 显示 已完成 和计数;历史失败保留在失败计数中 |
| 最后过程项失败或中断 | 显示 执行错误;后续正文不会覆盖该状态 |
| 同一 step 同时有思考和正文 | 只折叠 Think,正文继续显示 |
| 展开总过程 | 继续使用官方 Think 和工具组件,并显示成员状态 |
| 切换 DSH 语言 | 总过程和图片标记同步切换中文或英文 |
过长的实时摘要会自动截断,不会挤压页面布局。
更新与卸载
在 DSH Desktop 的 DSH Terminal 中更新或卸载:
dsh plugin update dsh-compact-activity --latest
dsh plugin remove dsh-compact-activity
更新后运行 pnpm view dsh-compact-activity dist-tags.latest 和 pnpm list dsh-compact-activity --depth 0 对比版本。若版本不一致,再使用查询到的明确版本执行 dsh plugin add "dsh-compact-activity@<version>"。
普通 CLI/Web 更新或卸载:
dsh plugin --profile web update dsh-compact-activity --latest
dsh plugin --profile web remove dsh-compact-activity
操作后请重启 DSH Desktop 或 DSH Web。
Desktop 切换 profile 后插件不生效
按以下顺序排查:
-
从托盘切换到需要使用插件的目标 profile。
-
从该 profile 打开 DSH Terminal,运行:
dsh plugin add dsh-compact-activity@latest
dsh --dump-config
$latest = pnpm view dsh-compact-activity dist-tags.latest
pnpm list dsh-compact-activity --depth 0
-
确认输出同时包含 id: ui-compact-activity、name: dsh-compact-activity,并比较 npm 最新版本和实际安装版本。
-
如果版本不一致,运行 dsh plugin add "dsh-compact-activity@$latest",然后重新检查实际版本和配置。
-
重启 DSH Desktop,再检查总过程折叠。
pnpm peers check 对旧版插件可能报告缺少 React、DSH Client 或 Locale peer dependencies。这些模块由 DSH 宿主提供,不应手动安装到 profile;当前版本已将它们标记为 optional peer。若目标 profile 已包含上述配置但仍无效果,记录 DSH/Desktop 版本、启动方式、npm 最新版本、实际插件版本、安装路径和浏览器控制台错误。不要编辑 profile 清单、复制插件文件或检查 app.asar;这些操作会绕过 Desktop 的正常插件加载流程。
从本地源码安装
项目使用严格模式 TypeScript。需要 Node.js 22.19+ 或 24+:
pnpm install
npm run check
dsh plugin --profile web add .
dsh --profile web --dump-config
dsh --profile web
当前 DSH alpha 的 client 包尚未发布到 npm;本分支的开发依赖通过
../clone/deepseek-harness 链接到本地 alpha checkout。若两个仓库目录不同,
请相应调整 package.json 中的 link: 开发依赖。
如果使用 Harness 源码版,请在 Harness 源码根目录执行 pnpm dsh ...,并把 . 换成本插件目录的绝对路径。
从 tarball 安装
npm pack
dsh plugin --profile web add ./dsh-compact-activity-<version>.tgz
请将 <version> 替换为 npm pack 输出中的实际版本。tarball 已包含预构建的 lib/,安装时不需要再次构建。
开发与验证
npm run typecheck
npm test
npm run build
npm pack --dry-run
npm run check 会依次执行严格类型检查、测试和生产构建。lib/ 是本地生成且不纳入 Git 的构建产物;prepack 会在发布或打包前重新生成它,并将其包含在 npm 包中。
测试使用开发依赖 jsdom、react-dom 和 tsx,用于验证核心分组逻辑及浏览器控制器行为。这些依赖不会进入 npm tarball;npm test 会自动发现 test/*.test.ts。
scripts/
└── clean.ts # 使用 Node 原生 TypeScript 清理构建目录
src/
├── index.ts # Host 入口,让 Loader 发现浏览器插件
└── client/
├── index.ts # 注册控制器并管理样式生命周期
├── activity-group.ts # 过程分组、边界、状态和计数
├── locales.ts # DSH Locale namespace 的中英文词典
├── styles.ts # 总折叠行及隐藏状态样式
└── components/
└── CompactActivityController.tsx # 控制官方过程行的总折叠状态
tsconfig.json 开启 strict、noUncheckedIndexedAccess 和 exactOptionalPropertyTypes,并检查源码、测试、构建配置及脚本。
兼容性
兼容性状态:
截至 2026-09-19,以下结果基于本地源码和 Desktop 内置运行时包;尚未启动真实 Electron/Desktop 窗口做人工回归。
| 运行环境 | 版本 | 结果 |
|---|
| DeepSeek Harness 官方 Web | 0.1.6-alpha.2(commit ddefc45f) | 插件开发依赖直接链接本地源码;npm run typecheck、npm test 和 npm run build 通过。真实 Web 窗口未做人工回归。 |
| 社区 DSH Desktop 稳定版 | 2.0.12,内置 DSH 0.1.5-rc.2 | vendor/dsh-runtime/0.1.5-rc.2 的 Client bundle 仍保留 Chat Flow、Think、Tool 和 Turn-process 标记;未发现源码契约冲突,但真实 Desktop 启动和 profile 组合未回归。 |
| 社区 DSH Desktop Beta | 2.0.12-beta.1,内置 DSH 0.1.6-alpha.2 | 与当前官方 Web 源码使用同一 Client 契约;Beta 的内置运行时版本与本地源码一致。真实 Desktop 启动和 profile 组合未回归。 |
Linux 和 macOS 用户也可通过官方 CLI/Web 使用插件。
插件依赖以下 DSH Web 扩展点和稳定标记:
conversation.session.header.actions
@deepseek-ai/dsh-client-locale 的 locale service 与 slot t 翻译 seat
- Chat Flow 的
data-chat-flow 与 data-chat-flow-key
- 官方过程项的
data-variant="think"、data-tool、data-state 和 data-disclosure-row
assistant-step 与 tool-call Chat Node 数据
语言词典注册到插件自有的 compact-activity namespace,状态和计数通过 DSH 注入的 t 翻译函数呈现;其余标记由 DSH 提供,不属于本插件控制的公共 API。升级 DSH 后,建议人工检查总过程折叠、官方子项交互、语言切换和工具实时摘要。
图片折叠
非用户输入的图片默认收起,范围包括:
- Assistant 消息中的附件图片和 Markdown 图片;
- 工具结果中的图片画廊;
- 其他非
user / steering Chat Flow 行中的图片展示。
用户输入和 steering 消息中的图片保持原样。插件使用自己的独立标记:data-dca-image-group、data-dca-image-target 和 data-dca-image-hidden,只插入原生 <details>/<summary> 标记并隐藏原图片目标,不移动或替换 DSH 的图片 DOM 子树。
图片折叠支持淡入淡出过渡,并遵循 prefers-reduced-motion。检测复用 DSH 的图片按钮、Markdown 图片属性和失败回退结构;同一 Markdown 图片引用只生成一个标记,展开后显示图片名称和路径。Windows Desktop 中的本地 Markdown 路径会根据当前 Session 工作目录补全盘符,并通过已鉴权的 /api/file 路由重新挂载;无法解析或文件不存在时保留 DSH 的回退文本。升级 DSH 后,建议检查 Assistant 图片、工具图片、多图画廊、失败回退、用户图片和 lightbox 展开。
DSH Desktop 服务边界
本插件是跨环境 Web UI 插件,不执行 profile 切换、插件安装/更新/卸载或依赖修复,因此不使用 Desktop 专用的 desktopProfiles、desktopPnpm、desktopRuntime 或 Electron IPC。Desktop 仍通过普通 DSH Web Client 模块加载本插件;不要为本插件添加 Desktop Host 服务作为必需注入,也不要访问 app.asar 或其他 Desktop 私有路径。
Desktop 真实环境验证应使用 Desktop 提供的 DSH Terminal,并确认当前 profile 的配置包含 id: ui-compact-activity 和 name: dsh-compact-activity。仓库中的 jsdom 测试不能替代真实 Desktop/Web 宿主回归检查。
问题反馈
遇到兼容性问题时,请在 GitHub Issues 提交:
- DSH 版本和启动方式;
- 插件版本;
- 浏览器控制台错误;
- 能复现问题的界面截图。
请勿在 issue 中提交模型上下文、令牌或其他敏感信息。
许可证
MIT © 2026 wallpap