dsh-web-ui
zhu1090093659
Plugin and skin collection for DeepSeek Harness (DSH) Web UI - task board, git graph, right-side panel, remote mobile UI, pet, live token stats, and skin center.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:lamost423/dsh-trace-compare
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
中文 | English
DeepSeek Harness 的执行轨迹可视化插件:把智能体真实的探索过程画出来——它坚持推进的主干、失败或扑空的支路、以及折返点,全部落在同一根时间轴上。
两个入口,一套视觉语言:


body[data-ds-dark-theme] 并 postMessage 进 iframe);独立打开时按系统偏好。时间轴的诚实规则:
⏸ 标注的细缝,标明省略了多久;活动段内的刻度仍显示真实墙钟时间。S15·47),多轮会话的支路不会挂错节点。assistant/message 的 usage(此前的「reasoning N tok」数的是流式段数,不是 token)。日志没有 usage 时标签诚实回退为「N 段推理」。判定的诚实规则(v0.2.1 起):
src/client/verdict.js 的 VERDICT_RULES 常量里,可按项目语料调整;页面与实时两条渲染链路共用这一份实现(构建期注入)。按文件内容识别格式,文件名任意(macOS 复制出的「session.jsonl 2」也能直接选):
.jsonl(session 格式 v0 事件流)~/.dsh/sessions/ 下原样的 .jsonl.zstd——浏览器端直接解压(原生 DecompressionStream('zstd') 可用时优先,否则用内置的 fzstd)先安装兼容版本的 DSH CLI,再把插件加进 profile:
npm install --global @deepseek-ai/dsh@0.1.0-rc.6
dsh plugin --profile web add https://github.com/lamost423/dsh-trace-compare/releases/download/v0.3.3/dsh-trace-compare-0.3.3.tgz
dsh web
从源码安装:
git clone https://github.com/lamost423/dsh-trace-compare.git
cd dsh-trace-compare
corepack enable
pnpm install
pnpm build
dsh plugin --profile web add .
dsh web
重启 dsh web 后,侧边栏底部出现「Trace 对比」入口,每个会话视图多一个「实时迷宫」页签。
一步进主干还是支路,由这一步最坏的工具判定决定:成功/回答留在主干,失败(红 ✗)、扑空(灰 ·)、无效重试(灰 ↻)整步进支路。单个工具调用按四层判:
[status=Failed]、__EXIT__= 非零、[stderr] 后跟 Error / Traceback 这类包装器硬标记 → 失败。只扫输出开头 300 与末尾 1000 字符——真失败要么开头就报、要么是追加在末尾的 stderr 段,长文本中部引用的报错(git log 提交信息、源码字符串)不算;在此之上叠一层行为学检测:时间序上连续的「同工具 + 参数相似度 ≥0.6」调用簇、且簇内至少一次失败,非失败成员改判无效重试(借鉴 AgentLens 对 SWE-agent 轨迹浪费的确定性检测;不加失败约束会把「连续编辑同一文件」冤枉进去)。刻意不用输出长度、不调用 LLM;每个判定都带依据文本,悬停与详情面板可见。全部阈值在 src/client/verdict.js 的 VERDICT_RULES,可按语料调整;上传页与实时页签共用这一份实现。以上规则由四个真实会话(共 871 步)校准,依据与误报案例见下面各版本说明。
实时页签每当新步骤开始(模型推理中、还没发出第一个工具调用),整张迷宫会瞬间变透明,等工具调用出现才恢复。根因是 tier1 时代的老 bug:非回答节点的标签代码无保护地取 tools[0].name,而 in-flight 步在纯推理阶段 tools 为空——TypeError 把 build() 拦腰打断,所有元素停在初始透明度 0。零工具节点跳过工具标签即修复;用合成推送序列(推理期 → 工具出现 → 结算)实测全程可见。Release
此前一步内多次工具调用折叠成「bash +1」标签,各调用的起止/耗时/判定全被吃掉。现在每次调用画成步骤胶囊条下方的细小条(瀑布惯例):按真实起止摆位、判定色填充、悬停看单次调用详情(命令/返回/依据);泳道高度按该泳道最大并行数自适应(computeLayout 的 parH 区),下方支路弧线自动让位。实测语料:16 轮长会话有 36 个并行步、最大并行 5。Release

页面调色板收敛为 CSS 变量单真相源(SVG 属性色经 readPalette 同源取值),随宿主 dsh 明暗主题自动切换:宿主组件监听 body[data-ds-dark-theme](rc.6 的 ThemePresenter 机制)postMessage 进沙箱 iframe,独立打开按系统偏好兜底;导出 SVG/PNG 固定浅色底,暗色下导出前临时切浅色重建、导完切回。同版收紧页头布局:出数据后说明隐藏、上传区收成 31px 细条、泳道统计卡隐藏、图例压成一行,迷宫可视区多出约 250px。顺手把「无效重试」灰从 #b6c0d2 提到 #8892a6,浅色下一眼可辨。Release

双会话对比从「一条正则里程碑」升级成一套按轮次的对比语义:每轮回答节点自动互连对齐线(标注时差与该轮支路数差);「🔗 加锚点」手动钉任意两节点的对比线;「📋 支路盘点」按轮次列两边支路的步数/墙钟耗时/类别构成与差额,点行缩放该轮并高亮该轮支路。语料特定的「模型列表结果」正则里程碑(MODEL_LIKE/mlist)随之退役——判定 v2 清理长度阈值后的最后一个硬编码启发式。「探索期」红色背景带一并退役:它取首末支路的最小最大跨度,16 轮长会话上罩住 99% 的时间轴而支路真实耗时只占 1%,是虚假信号。Release

实时页签只画对话已加载的事件窗口——窗口边缘漏进来的更早轮次步骤此前被钳到 0 秒堆在左边缘,一份 18 小时、533 步的会话被画成「3 轮 · 39 步 · 71.4s」。现在陈旧步被丢弃并标注「⏮ 另有 N 步更早历史未加载」。同时修掉判定的「引用误报」:git log 提交信息里写的 "upstream returns HTTP 400"、源码里的 "not found in" 不再被当成命令自己失败——失败特征只扫输出开头与末尾窗口,且两条渲染链路统一在未截断全文上判定。Release

「reasoning N tok」此前数的是流式段数——本版从 session log 的 assistant/message 读真实 usage,步级与泳道级都显示真 token(无 usage 时诚实回退「N 段推理」)。新增过滤工具行(只看失败/重试、按工具过滤、全文搜索,未命中淡化到 15%)与当前视图的 SVG / 2x PNG 导出。Release

「结果 <60 字符 = 死路」退役,换成上面的分层判定 + 行为学重试检测。动机:校准发现长度阈值冤枉了 338 次调用中的 56 次(todo_write 的 57 字符成功确认全军覆没),反而漏掉藏在长输出里的真失败。判定逻辑同时收敛为单一真相源 src/client/verdict.js(上传页构建期注入、实时链路直接引入),镜像漂移永久消除。Release
pnpm install
pnpm check # 类型检查 + vitest + 构建
上传/可视化页面是一份自包含的 HTML(src/client/maze-upload.html),运行在沙箱化的 <iframe srcDoc> 里;解析与渲染全部在浏览器端完成,上传的日志内容不会到达宿主。
MIT。见 NOTICE——本项目包含源自 DeepSeek Harness 的衍生代码。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: visualization。