dsh-prism
简体中文 | English
DSH 界面两档模式插件:简化 / 原生一键切换,工具卡片白话化,降低 DeepSeek Harness 的上手门槛。新手看白话,老手要完整,同一套界面两种读法。
项目仍在持续迭代:跟进 DSH 接口演进、扩充工具覆盖、打磨简化档体验,欢迎试用与反馈。
为什么做这个
DeepSeek Harness 发布后,社区对它的批评集中在一点:门槛。
- 界面新闻:「一切皆插件」的设计十分依赖配置(YAML + 插件 + 效果组件 + 服务),「对高级用户而言功能强大,但对于只想快速用上可用智能代理的人来说,上手门槛较高」
- 极客公园:DSH「对非编程用户不是很友好」,像框架、不像成品,是给开发者的尝鲜版
- 社区开发者:「这玩意鬼才用,我为什么没事要插拔」
DSH 的毛坯房是刻意为之,但「想省事的人」和「要全功能的人」不该被迫接受同一套界面。dsh-prism 用两档模式回应这个矛盾:
| 档位 | 适用的人 | 界面表现 |
|---|---|---|
| 简化 | 想先用起来、不想研究术语的人 | 工具调用归组折叠:正式回复前的一串调用收成一行统计,点开展开面板看每个工具的交付文档 |
| 原生 | 老手、需要完整信息的人 | 插件零接管,产品原貌原样渲染,一个像素都不改 |
默认原生档,切换一次即生效,刷新页面回原生档。不想用的时候,卸掉插件,界面回到出厂状态,没有任何残留。
功能
- 左下角悬浮入口:显示当前模式,点开菜单切换「简化 / 原生」,菜单内含「隐藏复杂工具」开关
- 简化档 = 工具调用折叠组 × 交付文档:
- 总结档:一次 user turn 内、模型正式回复之前的整串工具调用收成一个折叠组,收起时只显示一行统计「N 个工具 · M 次思考」(M 为组内模型思考次数,按 assistant 输出的 reasoning 块计数;无思考时只显示工具数),行尾带组状态(✓ 完成 / ● 运行中 / ✕ 有出错)
- 中间档:点开统计行展开文档化面板——标题区(「本次调用 N 个工具 · M 次思考」)+ 清单区(每个工具一行:类别图标 + 白话动作/参数摘要 + 状态图标)+ 说明区;每行复用白话卡片样式,点单行展开该工具的「交付文档」详情(脱敏结果 Markdown 渲染)
- 隐藏复杂工具:21 个高级工具(目标 / 计划、子代理编排、后台任务、插件系统)在面板内默认折叠成白话摘要行,点「展开」即展开并打开详情;菜单开关可随时关闭折叠
- 归组规则:一个 user turn 内、正式回复(最后一条含文本的 assistant 消息)之前的全部工具调用为一组;运行中随新调用累计,刷新重放后按同一规则归组,每个工具恰好显示一次
- 双语界面:插件全部文案跟随 DSH 界面语言(简体中文 / English),设置里切换语言即时生效,无需刷新;工具白话文案、参数摘要、菜单与状态均有中英双语\n- 数据脱敏(简化档):
- 路径只显示文件名(
file_path等参数用 basename 呈现) token / secret / password / api_key / authorization等敏感参数名永不展示- 结果文本中的常见密钥形态(
sk-xxx、Bearer xxx、key=xxx)替换为占位符 - 详情面板只展示白话摘要与脱敏结果,不暴露原始参数
- 路径只显示文件名(
- 原生档 = 产品原貌:原生档下插件完全不注册任何工具卡片,交还产品原样渲染(含通用卡片);简化档才注册折叠组节点(以更低的 priority shadow 产品 tool-call 树),模式切换时动态注册 / 注销、即时生效
- 白话文案全覆盖:33 个工具规则表全覆盖白话文案(如
pwsh→ 「正在电脑上执行一条命令」),其中 19 个没有原生卡片的工具在 v1.0.0 起由插件卡片接管;v1.1.0 起简化档把工具调用整体收成折叠组,组内所有工具行(含有原生卡片的read/write/web_search等)统一按白话规则渲染,原生档下它们仍是产品原版卡片
设计原则
- 纯展示层:只改界面呈现,模型输入输出零改动,不影响 agent 的任何工作
- 原生零接管:原生档不注册任何卡片,产品原貌完整回归;简化档把工具调用收成折叠组,组内工具行统一按白话规则渲染,官方工具卡片本身不被改动,原生档下保持原版
- 内存态切换:刷新回原生档,简单、干净、无配置污染
- 跟随主题:全部使用官方
--dsw-alias-*设计变量,明暗主题自适应
安装
需要先装好 DeepSeek Harness(Node.js 22.19+ 或 24+)。
当前通过 GitHub 发布,克隆本仓库后以本地路径安装:
npx -y @deepseek-ai/dsh plugin --profile web add <本仓库目录>
也可以直接从 Releases 下载打包产物。启动 Web UI 后,左下角会出现悬浮入口。
使用
- 启动后点击左下角悬浮按键(显示当前模式)
- 选择「简化」:一次任务里的工具调用归成折叠组,收起是一行统计,点开展开面板看每个工具的白话行与交付文档详情
- 菜单里可开关「隐藏复杂工具」(仅简化档生效)
- 选择「原生」:恢复完整原生界面
- 刷新页面回到原生档
常见问题
为什么刷新后回到原生档? 档位存在内存里,这是刻意设计:简化档是临时辅助,不想用的时候刷新即消失,不留任何状态。
为什么有些工具卡片看起来没变?
read、write、web_search 等工具官方已有产品级原生卡片,插件不为它们注册替代卡片(原生档完全原版);简化档把它们与其他工具一起收进折叠组,以统一的白话行展示,不改变官方卡片本身。
简化档会影响 agent 干活吗? 不会。插件只改界面显示,模型收到的输入输出与原生完全一致。
点开详情后表格 / 代码块是什么效果?
结果文本先脱敏,再按 Markdown 子集渲染:| a | b | 表格、``` 代码块、# 标题、- 列表、**粗体**、行内代码与 commit 哈希高亮;任何解析失败都退化为纯文本。
Roadmap
- 跟进 DSH 官方接口演进,保持新版本兼容
- 扩充工具规则表,让更多工具自动获得白话文案与文档化呈现
- 打磨简化档体验:时间线行、交付文档渲染、脱敏粒度
- 按社区反馈补充适配说明与常见问题
有想法或遇到不适配的工具,欢迎开 issue 讨论。
更新日志
v1.2.0(2026-08-18)
- 界面双语适配:全部文案跟随 DSH 界面语言(zh/en),切换即时生效;33 工具规则、参数摘要、菜单、组状态均有英文
v1.1.1(2026-08-18)
- 修复:简化档归组在真实浏览器完全失效(
ToolGroupNode裸用 framework hookuseSession,每次渲染抛错导致槽位条目退出、回退产品原版渲染,两档看起来一样);改为从组件 props 取运行时注入的 hook - 组状态升级为三态 + 混合计数:全对显示 ✓、全错显示 ✕、对错混合显示警示符号 + 「✓ n · ✕ m」计数(对在前);组内还有调用在跑时只显示 ● 运行中,跑完才给对错总结
- 状态计数按根工具调用计算,与组内行数口径一致
v1.1.0(2026-08-18)
- 简化档工具调用归组折叠:一次 user turn 内、正式回复之前的整串工具调用收成一个折叠组
- 总结档:收起时一行统计「N 个工具 · M 次思考」(M 按 assistant 输出的 reasoning 块计数,无思考时只显工具数),行尾带组状态
- 中间档:点开统计行展开文档化面板(标题区 + 每工具一行 + 说明区),每行复用白话卡片样式,点行看脱敏交付文档详情
- 归组在运行中随新调用累计、刷新重放按同一规则归组;每工具恰好显示一次
- 行推导提取为共享函数
toolRowMeta,时间线卡片与折叠组面板共用,文案与状态完全一致
- 折叠组统计行的开合状态按组独立存内存 store(每个 turn 一组),刷新回默认收起
- 修复:简化档的 tool-call 节点渲染器与产品 ToolCallTree 同 key 注册冲突(keyed 槽同 key 同 priority 会抛错),改为以
priority: -1shadow 产品渲染;白话卡片不再注册到tool.call.toolview(该槽在简化档无消费方),折叠组面板内直接渲染
v1.0.0(2026-08-18)
- 架构:规则表 + 参数名规则驱动(33 工具白话文案、接管名单自动推导),新增工具只需加一行
- 原生档零注册:产品原貌完整回归,切换即时生效
- 简化档:时间线行(类别图标 + 白话动作 + 状态图标)+ 交付文档详情(Markdown 子集渲染:表格 / 代码块 / 标题 / commit 高亮)
- 新增「隐藏复杂工具」开关(默认开启):21 个高级工具折叠成一行
- 数据脱敏加严:敏感参数名永不展示、密钥形态替换、详情先脱敏后渲染
- 悬浮入口动态定位,跟随侧栏与输入框,不遮挡输入
早期版本
- 初版:简化 / 原生两档切换,33 工具白话文案,接管 19 个无原生卡片的工具
贡献
- 发现工具适配问题:开 issue,附上工具名与界面截图即可
- 想补充白话文案或新工具规则:按「新增一个工具」一节改
TOOL_RULES,提 PR - 代码风格:与
lib/client.js保持一致(零依赖、React.createElement、中文注释)
架构(全部实现位于 lib/client.js)
TOOL_RULES 规则表:33 个工具 → 白话文案与参数摘要声明
ARG_NAME_RULES 参数名规则:无显式声明的工具按参数名自动生成摘要
SENSITIVE_KEY 敏感参数名(任何情况下不展示其值)
注册是动态的:conversation.chat.node 的 tool-call 渲染器仅在简化档注册(以 priority: -1 shadow 产品 ToolCallTree;keyed 槽同 key 同 priority 的注册会抛错,更低 priority 者胜出),原生档零注册,产品界面原样呈现。折叠组面板内的工具行直接渲染白话卡片,不经 tool.call.toolview 槽分发(该槽的消费方是产品 ToolCallTree,简化档下已被 shadow)。
规则表字段
| 字段 | 含义 |
|---|---|
tools |
工具名(数组);多个工具共用一条规则 |
doing / done |
进行中 / 完成的白话文案;缺省时自动生成通用文案 |
complex |
标记复杂工具:简化档默认折叠成一行,点击可展开 |
noArgs |
不显示参数摘要(保持原有行为) |
arg.pick |
候选参数键,按序取第一个非空字符串 |
arg.mode |
呈现方式:file=路径只留文件名 / raw=原文 / short=截断(配 max)/ count=数组计数(配 unit)/ wrap=(值)包裹 / fixed=固定文案 |
arg.prefix |
摘要前缀 |
arg.fallback |
参数缺省时的文案;不填则不显示摘要 |
新增一个工具
- 在
TOOL_RULES加一行,只写工具名即可:doing/done 自动生成通用白话文案,参数摘要由ARG_NAME_RULES按参数名自动生成(如file_path→ 「文件:xxx」、url→ 「链接:xxx」),简化档折叠组面板自动按规则渲染该工具行。 - 想更精准时再补
doing/done/arg;想让它默认折叠则加complex: true。 - 简化档折叠组面板会把组内所有工具(含产品有原生卡片的
read/write等)按规则渲染成白话行;原生档下它们仍是产品原版卡片,无需特殊处理。
装配
cordis.patch.yml:bundle patch 注入(insert prism)。package.json:dsh.client.inject: ["@deepseek-ai/dsh-client-runtime"],浏览器半体经exports["./client"]加载。- 经 web profile 的
node_modules/dsh-prismjunction 直接指向工作树装配;修改lib/client.js后刷新页面即生效(无需同步副本)。
License
MIT
No comments yet. Be the first to write one.