Chuyển đến nội dung chính

dsh-thinkbar

Đã xác minh

dsh-thinkbar · v0.1.4 · MIT · Giao diện web

Reasoning-wait thinking indicator for the DeepSeek Harness web composer

Cài đặt

dsh plugin add dsh-thinkbar

Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.

Mã nguồn

Thẻ

Tác giả

Readme

🧠 dsh-thinkbar

DeepSeek Harness Web 对话框动态思考指示器插件

npm version License: MIT DSH Compatibility TypeScript Node.js

English | 简体中文


dsh-thinkbar 效果演示

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.right Slot 生命周期锚点与 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
  1. 状态投影(Projection):通过公开的 ctx.uiConversation.events 和 ctx.uiConversation.views 为每个 { turn, step } 推导互斥的思考与 Tool 阶段。并行 Tool 仍按 call ID 独立配对,但该 Step 的思考计时保持停止。
  2. 生命周期锚定与 Portal:在 conversation.input.right 注册锚点,在 [data-composer-card] 容器内寻找其后唯一的 button[aria-haspopup="menu"] 语义按钮,并 Portal 挂载插件图层。
  3. 安全降级机制:若无法唯一识别模型按钮,插件保持 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 参考资料


📄 许可与归属

MIT License

原始思考指示器逻辑抽离自 DeepSeek Harness commit 6d7ae5aa57b4dedfc03b09de7cafb65c01338800。DeepSeek Harness 版权归 DeepSeek (c) 2026 所有,按 MIT 协议分发;独立打包与后续扩展由 dsh-thinkbar 贡献者维护。