dsh-thinkbar
已验证dsh-thinkbar · v0.1.4 · MIT · Web 界面
Reasoning-wait thinking indicator for the DeepSeek Harness web composer
安装
dsh plugin add dsh-thinkbar 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
标签
作者
说明文档
dsh-thinkbar 是 DeepSeek Harness 的轻量级、无侵入 Web UI 插件。它会在每个助手 Step 的模型思考阶段为现有模型选择器填充动态热感渐变,并在该 Step 调用工具时切换为独立的 Tool 活动动效。
✨ 核心特性
- 🌡️ 物理热感温阶配色(Iron Scale):指示器从 8% 启航,在 20 秒内按 ease-out 曲线平滑填满,沿 Harness 官方信息蓝(0s)→ 红热(~6.7s)→ 橙红(~13.3s)→ 金黄高热(20s)自然过渡。
- ⚡ 零侵入 Portal 适配:通过公开的
conversation.input.rightSlot 生命周期锚点与 DOM 语义发现注入独立图层,不修改 DSH 核心源码、不依赖生成的 CSS 类名或模型文案。 - 🎯 跨模型逐 Step 状态机:每次模型请求开始即激活,存在
reasoning块时持续跟随,并在 Tool 调用开始后互斥切换到 Tool 阶段。 - 🛠️ 可见的 Tool 活动:使用独立的紫青色扫光,并临时显示当前正在执行的 Tool 名称。
- 💨 灵动抽空动效:当思考转为正文、工具调用或 Step 完成时,在 240ms 内迅速丝滑抽空归零。
- ♿ 无障碍友好:深度适配系统
prefers-reduced-motion减弱动态偏好。 - 🔒 纯前端无遥测:无服务端行为、不改变 prompt/消息/请求、零遥测与数据收集。
📋 运行要求
| 依赖项 | 要求版本 | 说明 |
|---|---|---|
| DeepSeek Harness | 0.1.2-alpha.4 |
支持当前按需物化 Conversation 生命周期 |
| Profile | 标准 DSH web Profile |
需启用官方模型选择插件 |
| Node.js | ^22.19.0 || >=24.0.0 |
推荐 LTS 版本 |
| 包管理器 | pnpm (>= 9.0) |
DSH 推荐工作流 |
[!IMPORTANT] 当前版本精确兼容
0.1.2-alpha.4。早期版本使用了不同的 Conversation Target 生命周期,暂不支持。
🚀 快速上手
安装
通过 npm 注册表安装:
pnpm dsh plugin --profile web add dsh-thinkbar
或安装本地 release tarball:
pnpm dsh plugin --profile web add ./dsh-thinkbar-<version>.tgz
安装后启动/重启 Web Profile:
pnpm dsh web
验证插件已正确加载:
pnpm dsh --profile web --dump-config
(输出中必须恰好包含一个 dsh-thinkbar 行)
升级与卸载
# 升级至指定版本
pnpm dsh plugin --profile web add dsh-thinkbar@<version>
# 卸载插件
pnpm dsh plugin --profile web remove dsh-thinkbar
🔍 工作原理
[ step/start ] ──> 开始思考填充 (8% -> 100%, 0s -> 20s)
│
[ assistant/chunk: reasoning ] ──> 继续思考填充
│ │
│ └──> 配色渐变: 官方蓝 -> 红 -> 橙 -> 金黄
│
[ text / step/end ] ──────────────> 快速抽空 (240ms) -> 回到 Idle 待机
[ assistant tool-call / tool/call ] ──> 停止思考计时 + 快速抽空 (240ms)
│
└──> 超过 200ms 后显示紫青 Tool 扫光与名称
│
[ 最后一个匹配的 tool/result ] ───────┴──> 保持 Idle,等待下一次 step/start
- 状态投影(Projection):通过公开的
ctx.uiConversation.events和ctx.uiConversation.views为每个{ turn, step }推导互斥的思考与 Tool 阶段。并行 Tool 仍按 call ID 独立配对,但该 Step 的思考计时保持停止。 - 生命周期锚定与 Portal:在
conversation.input.right注册锚点,在[data-composer-card]容器内寻找其后唯一的button[aria-haspopup="menu"]语义按钮,并 Portal 挂载插件图层。 - 安全降级机制:若无法唯一识别模型按钮,插件保持 DOM 纯净并仅在控制台输出一次兼容性提示:
[dsh-thinkbar] Could not uniquely identify the DeepSeek Harness model selector; the indicator is disabled.
🛠️ 故障排查
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 安装后页面无变化 | 未重启 Profile 或 Bundle 未生效 | 重启 Web Profile,并通过 pnpm dsh --profile web --dump-config 确认插件存在。 |
| client bundle 加载失败 | DSH 版本不匹配 | 确认 DSH 版本精确为 0.1.2-alpha.4,检查浏览器控制台与服务端 stderr。 |
| 控制台出现兼容性告警 | 缺少模型选择器或存在冲突按钮 | 确认已启用官方模型选择插件,且无其他插件在右侧 Slot 插入同名菜单按钮。 |
| 模型回答时指示器未激活 | 本次回答未产生 reasoning 块 | 指示器仅在收到 reasoning 事件后激活,直接输出正文或 Tool 调用时保持待机。 |
| 卸载后残留显示 | 进程缓存未释放 | 执行卸载命令后必须重启 Profile 服务。 |
🧑💻 本地开发
# 安装依赖
pnpm install --frozen-lockfile
# 执行类型检查、单元测试、构建校验与 publint
pnpm verify
# 打包本地 tarball
pnpm pack
发布流水线
# 一键自动化发版脚本
npm run publish
# 不发布的 dry-run 完整演练
npm run publish -- --dry-run
浏览器产物为 DSH lazy-CJS factory,必须严格保留 window.__ModuleLoader__.load(...) 外层 envelope。
Contributor 参考资料
📄 许可与归属
原始思考指示器逻辑抽离自 DeepSeek Harness commit 6d7ae5aa57b4dedfc03b09de7cafb65c01338800。DeepSeek Harness 版权归 DeepSeek (c) 2026 所有,按 MIT 协议分发;独立打包与后续扩展由 dsh-thinkbar 贡献者维护。
