21hbguo / dsh-thinking-counter

已收录

DSH「大胖鲸智商检测器」:Thinking 短语检测统计 · 全会话 reasoning 短语命中/分组/聪明程度判定

main工具 查看源代码

安装

npx -y @deepseek-ai/dsh plugin --profile web add github:21hbguo/dsh-thinking-counter

此安装命令根据 GitHub 仓库地址生成,是未经验证的安装起点。

README

维护者编写的文档快照。

在 GitHub 查看 ↗
提交版本 95b4cc5同步于 2026年8月17日

dsh-thinking-counter · 大胖鲸智商检测器

DeepSeek Harness(DSH)Web GUI 提供的 Thinking 短语检测统计插件。从开启时刻起,对所有正在运行/新运行的会话(含子代理)的 thinking(reasoning)内容做短语出现统计——「thinking 里 let me 出现了几次?有没有 we should、出现了几次?」。侧边栏「大胖鲸🧠」按钮点开小面板,一键启动/停止,匹配短语自由增删,并按良性/恶性/中性分组给出「大胖鲸聪明程度」参考判定。

version license platform

✨ 功能特性

功能说明
🕐 统计窗口每次点「启动统计」= 清零重开;开启前产生的消息一律不计;「停止统计」冻结数字保留;「重置统计」手动清零(仅清统计,匹配词保留)
👥 全会话覆盖host 全局监听 session/event,后台并行会话与子代理都被统计,按会话查看明细
🧮 两类指标思考块数(结构化 reasoning 块,跨流式 assistant/chunk 与最终 assistant/message 去重)+ 匹配短语命中次数(词表默认空、由用户自行添加)
🔤 大小写模式每个词独立选择「区分大小写 Aa / 不区分 aa」,chip 徽标点击切换;跨 chunk 边界不丢,命中时记录上下文片段
🗂️ 匹配词分组每个词归属「中性(默认)/ 恶性 / 良性」三组,chip 直接拖动到其他分组区调整;添加时可选择新词分组
🐳 大胖鲸聪明程度独立醒目行(标题 + 进度条 + 判定):良% = 良性词命中 ÷ 全部命中;≥60% 聪明信号明显 / 30–60% 一般 / <30% 信号较弱(阈值在源码 src/client/panel.ts 中可自行调整;仅是关键词假设的参考信号,不代表真实智商)
📊 面板信息聪明程度行 + 思考块 / 思考字符 / 总命中 / 会话数 + 三个分组的短语命中 + 最近命中日志(定高滚动,词·会话·时间·片段)+ 按会话明细(含「正在思考」脉冲点)
💾 配置持久化浏览器 localStorage(dsh.thinkingCounter.v1)为快捷缓存;权威存储 = DSH 插件专属数据空间 ~/.dsh/plugins/dsh-thinking-counter/config.json——host 重启/热重载从磁盘恢复,localStorage 丢失时浏览器自动从 host 回填,词表不丢
👁️ 可选可见文本面板内「含可见文本」开关——默认只统计思考段内文本,开启后可见回复文本也纳入短语匹配

📐 架构

浏览器(client)                             host 半区(Node)
🧠 侧边栏按钮 → popover 面板                 ctx.on('session/event') 全局监听
localStorage 快捷缓存 + host 磁盘权威存储     → 计数引擎(enabled 才记账)
轮询 snapshot(1.5s, 隐藏暂停) + SSE          → Map<sessionId, Counter>
POST config(启动/停止/短语/清空)             → GET snapshot / SSE 信号
  • src/counting.ts — 纯函数计数引擎(滚动尾缓冲处理跨 chunk 匹配、{turn}:{step}:{index} 块去重、命中日志环形队列;事件按结构类型读取,避免 host 类型污染 client 类型图)
  • src/index.ts + src/routes.ts — host 装配:全局监听、SSE 心跳、三条路由
  • src/client/ — 面板(纯 DOM,样式走 --dsw-alias-* 主题令牌 + 明暗兜底)

🚀 快速开始

前提

  • 一个可运行的 DeepSeek Harness (DSH) 环境(本插件是 DSH 插件,必须运行在 DSH 进程内,无法独立使用)。
  • 从源码构建时需要一份 DSH 源码检出(含已安装的 node_modules,构建脚本会使用其中的 tsc / tsdown);也可以直接使用本仓库 Release 里构建好的 tgz。
  • bash / node / npm。

安装

方式 A:源码构建 + 手动装配

# 1. 获取代码
git clone https://github.com/21hbguo/dsh-thinking-counter.git
cd dsh-thinking-counter

# 2. 构建(lib/ 与 node_modules/ 均为 .gitignore 忽略的构建产物,不入库)
DSH_CHECKOUT=/path/to/dsh-source-checkout bash scripts/build.sh
# DSH_CHECKOUT 也可省略,脚本会自动探测 ~/dsh-harness、~/.dsh/dsh-harness、~/deepseek-harness 等常见位置

# 3. 装配到 DSH web profile:
#    a. 把本目录作为 link: 依赖加入目标 profile 的 package.json
#    b. 加入 bundles 数组,bundle 名 = @dsh-external/dsh-thinking-counter
#    c. 在目标 profile 的 node_modules 下为包名建立 junction/symlink,指向本目录
#    d. 应用仓库内 cordis.patch.yml(插入插件行:id=dsh-thinking-counter)
#    e. 重启 DSH

方式 B:DSH 注入器环境(开发期热注入,免重启)

在 DSH 会话中使用超级模组注入器:

dev_inject_plugin /path/to/dsh-thinking-counter

注入后立即生效;卸载即净,不影响下次启动。

方式 C:Release bundle 包

下载 Releases 中的 dsh-external-dsh-thinking-counter-0.1.0.tgz,作为 bundle 包装配(与 dsh 家族插件一致),装配时应用仓库内的 cordis.patch.yml 插入插件行。

验证

  1. 构建成功后刷新 DSH Web GUI。
  2. 侧边栏底部出现 🧠 大胖鲸 按钮(双行模式会显示聪明程度%与进度条)。
  3. 点开面板 → 点击 启动统计
  4. 添加想检测的短语(如 let mewe shouldhowever),选择分组与大小写模式。
  5. 让任意会话运行一轮 thinking,回到面板即可看到思考块数、总命中、最近命中日志与「大胖鲸聪明程度」。

排错表

现象原因解决
侧边栏无 🧠 按钮插件未装配,或 client 半区未注入确认 bundle 行已装配 / 注入成功;刷新浏览器
面板启动后一直无命中词表为空,或没有产生 thinking 事件手动添加匹配短语;确认 DSH 会话确实输出了 reasoning 内容
重启后统计数字归零统计为运行期数据,host 重启清零这是预期行为;配置(词表/开关)会从磁盘恢复
面板配置丢失localStorage 被清或跨浏览器浏览器会自动从 host 磁盘回填(~/.dsh/plugins/dsh-thinking-counter/config.json
多标签页数字互相覆盖多 GUI 标签页共享 host 计数器,localStorage 后写覆盖建议同时只保留一个控制面板标签页
构建报 cannot locate the dsh checkout未设置 DSH_CHECKOUT 且常见路径无 DSH 检出export DSH_CHECKOUT=/path/to/dsh-source-checkout 后重跑

🗂️ API

端点方法说明
/api/thinking-counter/configPOST{ enabled?, matchers?, matchVisible?, reset? }matchers 接受 string(=不区分、中性)或 { pattern, caseSensitive?, group? }[](group: neutral/negative/positive,默认 neutral),返回最新快照
/api/thinking-counter/snapshotGET快照:totals / recentHits / sessions
/api/thinking-counter/streamGETSSE data: changed(500ms 节流 + 30s 心跳)

⚙️ 配置项

插件无独立设置页,运行时通过面板或 API 控制:

配置类型默认说明
enabledbooleanfalse(面板未启动)总开关;开启时才开始统计,再次开启会清零重开
matchers(string | MatcherObject)[][](词表默认空)匹配短语;MatcherObject = { pattern, caseSensitive?, group? }
matchVisiblebooleanfalse是否把可见回复文本也纳入短语匹配
聪明阈值number60 / 30≥60% 明显、30–60% 一般、<30% 较弱;源码 src/client/panel.ts 中可改

持久化位置:

  • 浏览器快捷缓存:localStoragedsh.thinkingCounter.v1
  • host 权威存储:~/.dsh/plugins/dsh-thinking-counter/config.json(旧版 ~/.dsh/dsh-thinking-counter.json 会自动迁移)

🔐 安全说明

  • 只统计本机 DSH 会话事件:插件不读取文件内容、不接触 API key / token。
  • 无遥测、无外联:唯一的网络活动是浏览器向 DSH 同源端点拉取快照/SSE,不向任何第三方发送数据。
  • 快照端点与 DSH Web 同源:请勿把 DSH 直接暴露到公网。
  • 匹配词仅存本机:词表与统计配置保存在浏览器 localStorage 与 DSH 插件数据目录,不会上传。

❓ 常见问题

Q:为什么启动后一直没有命中? 三种常见原因:词表是空的(默认空,需手动添加短语);当前会话没有产生 thinking/reasoning 内容;统计开启之前产生的消息不计入(每次开启 = 清零重开)。

Q:重启后统计数字会丢吗? 数字会丢——统计是运行期数据,host 重启清零。但词表、开关、含可见文本等配置会从插件数据空间恢复,浏览器会自动回填,所以不需要重新配词。

Q:「大胖鲸聪明程度」是真的智商吗? 不是。它只是「良性词命中 ÷ 全部命中」的占比,是关键词假设的娱乐/参考信号;把它当乐子看就好,别当评测结论。

Q:多开标签页会怎样? 多标签页共享同一个 host 计数引擎,数字一致;但 localStorage 是后写覆盖,建议只保留一个面板标签页做控制,避免配置互相覆盖。

📄 License

BSD-3-Clause © 2026 21hbguo

项目文件与信号

以下项目是目录快照中检测到的公开仓库信号。

测试已检测

仓库信息

开发语言
TypeScript
许可证
BSD-3-Clause
最新发布
v0.1.0
最后更新
2026年8月17日 08:46

谨慎安装

请检查源代码、权限、生命周期脚本、依赖与网络访问;不受信任的插件应先在隔离环境中测试。