# dsh-plugin-thinking-size

在 DeepSeek Harness web 界面的 "Think" 折叠行标题后实时显示思考内容的 token 量：
`Think(128)`、`Think(5.2K)`。思考流式输出时数字实时跳动，历史消息同样显示，
展开/折叠、切换会话后徽标仍在。

[English](README.md) | 中文

![platform](https://img.shields.io/badge/platform-web-blue)
![dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)

## 徽标

| 形态 | 规则 |
| --- | --- |
| `Think(128)` | 不足 1000：整数 |
| `Think(5.2K)` | 1000 – 999 499：一位小数 + K，固定位数（`5000 → 5.0K`） |
| `Think(1.2M)` | 百万以上：一位小数 + M（`1000000 → 1.0M`） |

- **实时** —— 思考流式输出期间数字随之跳动。
- **持久** —— 历史消息的每个 Think 行都保留徽标，展开/折叠、切换会话均不丢失。
- **克制** —— 12px、说明文字色、等宽数字的 `aria-hidden` span，追加在行标题内；
  标题的可读文本仍只有 "Think"。
- **精度可调** —— hover 徽标即可在 **1 位 / 2 位小数** 间切换（默认 1 位），全部徽标即时
  生效；选择经 localStorage 记忆，刷新、重启后仍保留。

## 亲眼看看「雷霆大思考」有多长

部分 LLM 模型素有「雷霆大思考」之名——一个问题下去，先来几千上万 token 的纯思考。
装上本插件，你可以亲眼看着徽标里的数字一路狂飙，每一次思考到底有多长，看一眼便知。
模型在上面究竟想了多久，答案就写在行标题上。

## 原理

- **数据**：订阅当前会话快照（`sessions` 服务 → `chat.nodes`），从 `assistant-step`
  节点的 `reasoning` 块取思考全文——折叠态 DOM 中没有全文，计数必须来自快照而非页面。
- **估算**：DeepSeek 官方近似口径——1 个英文字符 ≈ 0.3 token，1 个中文字符 ≈ 0.6 token，
  合计向上取整。计数按 reasoning block 对象引用缓存（引用不可变），流式增量只需重算
  当前变化的块。
- **写入**：把徽标 span 追加进行标题 span。Think 行（`data-variant="think"`）按会话流
  锚点 key + 锚点内序号与 reasoning 块一一对应。快照订阅与 `MutationObserver` 只置脏
  标记，100ms 节流 sweep 实际干活——React 重渲染抹掉徽标时，Observer 置脏、sweep 补回。
- **静默降级**：零侵入宿主。缺失 `sessions` 服务、宿主 DOM 契约改名、快照畸形时，
  插件闲置或逐行跳过，绝不影响宿主运行。

## 安装

```bash
dsh plugin --profile web add dsh-plugin-thinking-size
```

重启 `dsh web` 生效。

### 从源码接入（本机开发）

```bash
pnpm install
pnpm run build
pnpm test
```

然后在 `~/.dsh/profiles/web/package.json` 中加入本包（`link:` 依赖）并登记进
`dsh.profile.bundles`，重启 `dsh web`。

## 关键词

dsh · deepseek harness · dsh 插件 · web 插件 · 客户端插件 · 聊天界面 · 思考 · 深度思考 · 长思考 · 思考长度 · 思考时长 · 思考过程 · 推理 · 推理 token · 思维链 · token 统计 · token 估算 · 徽标 · 实时显示 · 雷霆大思考
