@yfwu2020/dsh-think-flow
DSH 思维链可视化:把模型的实时思考按 turn → step →(思考原文 + 工具调用)聚合成可读的右侧栏视图 适合需要直观、结构化观察模型思维链和执行步骤的用户。
설치
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:yfwu2020/dsh-think-flow配置项
改 profile 的 cordis.patch.yml 里 id: think-flow 那一行的 config:(覆盖,不要再 insert):
- id: think-flow
config:
maxTurnsPerSession: 20
| 键 | 默认 | 范围 | 含义 |
|---|---|---|---|
maxTurnsPerSession | 20 | 0–500 | 每个会话常驻多少轮的正文(0 = 不限)。⚠️ 这是正文窗口,不是"能看到多少轮" |
maxIndexTurns | 2000 | 0–20000 | 目录(全轮骨架)最多记多少轮。一轮骨架几百字节,所以给得宽 |
coldTtlMs | 7200000 | 0–86400000 | 按需折进来的冷轮正文保留多久(空闲计时:读一次续一次期。0 = 不按时间收) |
maxColdChars | 4000000 | 0–2e8 | 冷轮正文的硬上限。和 coldTtlMs 是两条独立策略,谁先到算谁 |
maxReasoningCharsPerStep | 120000 | 1000–400000 | 单个 step 的思考原文上限,超了从尾部保留并打上"这段不全" |
maxSessions | 32 | 1–256 | 内存里同时跟踪多少个会话(LRU) |
sseThrottleMs | 120 | 0–2000 | 合并推送的最小间隔。别调到 0:流式每秒几百个事件 |
heartbeatMs | 15000 | 2000–120000 | SSE 心跳,防代理掐连接 |
snapshotTailChars | 4000 | 200–20000 | 连接快照里给"当前步"带多少字符原文(其余步骤走 /step 按需取) |
titleStepChars | 420 | 80–4000 | 生成中文标题时,每一步最多喂多少字思考原文 |
titleTotalChars | 24000 | 2000–200000 | 一次标题请求的字符上限(整轮一起总结,一次调用) |
titleReasoningEffort | 'low' | — | 生成标题的推理档位(压缩任务,低档就够) |
titleCachePath | '' | — | 标题缓存路径。空 = ~/.dsh/think-flow/titles.json |
autoTickMs | 5000 | 20–60000 | 自动标题(面板上的「实时」)的节拍器间隔 |
maxHydrateEvents | 20000 | 0–200000 | 历史回看时最多折入多少条落盘事件(从最新往回取) |
maxTitledTurns | 640 | 0–10000 | 标题缓存最多保留多少轮 |
三条策略要一起看(它们管的是同一块内存):
turns(正文) maxTurnsPerSession = 20 ← 常驻
└ 更早的轮次按需折进来 = 冷轮正文
├ coldTtlMs = 7,200,000 空闲 2 小时收回
└ maxColdChars = 4,000,000 字符超了从最旧的丢
index(全轮骨架) maxIndexTurns = 2000 ← 目录读它;正文丢了它还在
时间策略管"不用了就还回来",但它没有内存上界(两小时里连开几百个老轮次会一直涨), 字符上限补的正是那个洞 —— 所以两条都建议留着。
清理全是自动的,没有手动入口(要手动只能删文件或重启进程)。除上面那些,
还有两处硬编码上限:trace.attempts 是 128 条 FIFO;订阅者的增量队列由节流窗口清空。
另外卸载插件不会删 ~/.dsh/think-flow/(标题缓存留着,重装即复用)。