dsh-ui-thinking-title
No description
- Stars
- 2
- Language
- JavaScript
- Created
- Aug 19, 2026
- Updated
- Aug 19, 2026
Introduction
dsh-ui-thinking-title
DeepSeek Harness (DSH) web client plugin:实时在看多个并发的"思考中"会话,把每个会话的状态表情拼到浏览器标签页标题开头。
- 思维链可见且正在流式输出时 → 按思维链尾部内容打分,显示最匹配的类别表情(🧠 推理 / 🧮 计算 / 🔍 排查 / 💡 顿悟 …)
- 工具调用执行中 → 显示
⚙️工具表情 - 看不到思维链(会话窗口从未打开、无流式内容)→ 才显示默认表情
🤔
标签页标题形如:🧠 优化算法 — 思维链可见的会话标题 — 窗口标题(多个运行中会话各自一个表情依次拼接)
已知问题与更新历史
- v1.3.0:
- 修复 📄 代码草稿误分类:普通英文推理频繁误判为 📄 的根因是英文关键词用子串匹配且无词边界——
import(important)、var(vary)、function(functions)、class(classification)、return(returns)、\bfor\b(每个英文句子都带 for)。v1.3.0 将全部英文关键词改为词边界\b…\b,删除散文高频的for/while,下调泛化词(API/JSON/接口/调用)权重,并移除散文常见符号(:-"'/等)的参与。 - 新增可调分界点(全权重后缀长度):位置权重不再只是全局 0
1 线性——思维链尾部 N 个字符按满权重计分(默认 300),更早内容在 01 线性衰减;值越小,最末尾一小段越不会单独主导判定。设置页「检测参数 → 全权重长度」可调(50~500)。 - 默认匹配表升级为 v4(老用户未自定义过自动升级)。
- 修复 📄 代码草稿误分类:普通英文推理频繁误判为 📄 的根因是英文关键词用子串匹配且无词边界——
- v1.2.0:
- 默认匹配表升级为 v3:合并社区贡献的手调优化(
cause/导致、why: 2、可能/不对、然后、确认/√、感叹号顿悟提示等),修复moght→might拼写、软化过激的更权重;📄 代码草稿改为「关键词 + 语法字符」双通道(;([{=+等各按 0.01 计,代码密集时胜出)。 - 检测频率默认 0.2s(响应更快)。
- 修正 README 多会话说明(此前误称后台会话只能显示默认表情)。
- 默认匹配表升级为 v3:合并社区贡献的手调优化(
- v1.1.0:
- 新增导入 / 导出:设置页一键「复制配置」/「下载文件」导出整套配置(JSON),粘贴到聊天窗口即可分享给他人;「应用导入」一键恢复。
- 新增「恢复默认表」按钮;默认表引入版本号(当前 v3),老用户未自定义过时自动升级。
- v1.0.1:修复客户端会话快照读取——v1.0.0 调用了不存在的
binding.session.snapshot(),异常被吞掉后snap恒为null,导致思维链可见和工具调用时都只显示默认表情。v1.0.1 改为官方公开接口binding.session.getSnapshot()(SessionFace的ObservableSnapshot读取面,与 UI 的useSession同源)。
安装
DSH 生态内按客户端 bundle 包装配(web profile):
# 方式 A:超级注入器(运行时注入,免重启)
dev_inject_plugin -dir <本包目录绝对路径>
# 方式 B:bundle 装配(写入 profile bundles 列表,重启后常驻)
dev_install_package -dir <本包目录绝对路径> -profile web
手动方式:把包目录放到 $HOME/.dsh/plugins/<name>/,并以 @local/ 名字挂到 profiles/<profile>/node_modules/@local/ 下(junction),由 DSH web 客户端按 package.json 的 dsh.client.platform: "web" 识别加载。
依赖:DSH web 客户端(提供 sessions / slots 服务,lib/client.js 通过 window.__ModuleLoader__.load 注册)。零第三方运行时依赖。
使用
-
发送消息让模型思考(屏幕上能看到思维链流式滚动)。
-
观察浏览器标签页标题:思考期显示匹配表情,工具执行期显示 ⚙️。
-
设置页(侧栏 设置 → 思考表情)可实时预览每个运行中会话的表情与最高分,并调整:
设置 说明 默认 启用 总开关 on 默认表情 看不到思维链时显示 🤔 工具表情 会话运行中执行工具时显示 ⚙️ 后缀长度 取思维链最后 N 个字符参与匹配 500 全权重长度 思维链尾部 N 个字符按满权重计分,更早部分 0~1 线性衰减 300 检测频率 轮询间隔(滑块 0.1~10s,可输入任意 >0 的秒数) 0.2s -
分享配置:设置页 → 导入/导出 →「📋 复制配置」把整套配置复制为 JSON(或「⬇️ 下载文件」存为
.json);对方在设置页粘贴并点「应用导入」即可一键套用。默认表升级:设置页「♻️ 恢复默认表」随时回到当前版本默认匹配表。
默认匹配表(v4)
| 表情 | 类别 | 强信号示例 |
|---|---|---|
| 🧠 | 推理思考 | if/so/because/cause/因此/所以/导致/推导/假设 |
| 📄 | 代码草稿 | ``` / function / const / return / def / 实现 / 伪代码 / 重构(英文全词边界)+ 语法字符(; ( [ { = + …各 0.01) |
| 🧮 | 数值计算 | calculate / sum / equation / 计算 / 求和 / 标准差 |
| 🔍 | 排查问题 | bug / error / stack trace / crash / timeout / 报错 / 崩溃 / 死锁 |
| 🤨 | 不确定犹豫 | but / maybe / why / 不确定 / 可能 / 不对 / 想不通 / 卡住 |
| 💡 | 顿悟发现 | key / insight / realize / ! / 关键 / 突破口 / 明白 / 顿悟 |
| 📋 | 规划步骤 | plan / strategy / step / 方案 / 步骤 / 然后 / 之后 |
| ⚖️ | 权衡对比 | compare / versus / better / or / 权衡 / 对比 / 更 / 选择 |
| ⚠️ | 风险谨慎 | risk / edge case / race condition / deadlock / 风险 / 陷阱 / 副作用 |
| 📝 | 总结收尾 | conclude / summary / 总之 / 结论 / 总结 |
| ✅ | 确定完成 | sure / verified / perfect / 确定 / 确认 / 没有问题 / 修复 / 解决 |
默认表随版本演进(当前 v4):tableVersion 变化时,老用户未自定义过的会自动升级到新版默认表;自定义过的保留并可在设置页点「♻️ 恢复默认表」切回。
匹配语法
每一行 = 匹配字符列表 + 权重 + 显示字符串。匹配字符以 ; 分割(不忽略空格):
{内容: 权重}— 段内覆盖该行权重内容/标志— 带正则标志(如[bB]ut/i)- 含正则元字符(
\d、[bB]、|、^、$…)的段按正则匹配,否则按字面量子串匹配(区分大小写) - 示例:
if;so; and ;{therefore: 2};[bB]ut;{[oO][rR]/s: 0.5}
打分:取思维链尾部 N 字符,对每个命中按位置权重 × 段权重累加。位置权重 = 命中位于「全权重长度」(默认 300,可调)之后时按满权重 1 计;早于分界点的部分在 0~1 线性衰减(位置/分界点)。分界线越小,最末尾一小段越不会单独主导判定。取总分最高的行显示其表情;无任何命中显示默认表情。
多会话
插件轮询 sessions.list 中所有 running 的会话,各自独立计算表情,按列表顺序拼在标题最前面(emojis.join("") + " " + 标题)。
可以同时监控多个会话的真实思维链:会话一旦被打开/查看过一次,其事件窗口就会保持存活(切到别的会话也不会关闭),后续的思维链/工具事件仍会实时流给它——所以即使你在看会话 A,正在后台运行的会话 B/C 也会按各自真实思维链显示独立表情。只有从未打开过窗口的会话(从未被选中)无法获取其思维链内容,此时才显示默认表情(与"看不到思维链"语义一致)。
License
MIT