deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:konanzheng/dsh-timeline
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
把 DeepSeek Harness 会话轨迹渲染成一条 S 形能量轨迹时间轴 —— 从流水账变成看得见的思路。
一个 DSH 客户端插件:读取当前会话的历史事件,把每一轮交互(turn)组织成卡片,用一条蓝→紫→粉渐变的能量连线按 S 形串起来;并从工具调用中归纳过程洞察(定位/读写/验证/报错模式),让用户一眼看到 AI 是如何一步步解决问题的。
卡片与详情窗口会把原始工具调用加工成结论:
| 模式 | 归纳输出 |
|---|---|
| grep/glob 多次 | 通过「timeline.ts、timeline.css」等 3 次搜索定位关键代码 |
| read/write 多次 | 通过超多次读写文件(读 21 次、改 17 次)最终实现正确逻辑(超多次/多次/少量分级) |
| bash 多次 | 通过 7 次命令执行验证运行效果 |
| 存在报错 | 过程中出现 2 次报错,经调试修复后通过 |
⚠ 首次报错 / 🔧 修复 / ⚡ 重点动作)读 → 改 → 验、搜 → 读 → 改、报错 → 修复,箭头区分关系ESC 关闭;再按一次 ESC 关闭整个时间轴text 块,丢弃 reasoning 思考块,且只保留最后一条 assistant 消息)# 在插件根目录构建
~/.bun/bin/node scripts/build-client.mjs # 产出 lib/index.js + lib/client.js
~/.bun/bin/node node_modules/typescript/bin/tsc --noEmit # 类型检查
# 用 DSH 插件工具热装配(例如 dev_install_package / dev_inject_plugin)
cordis.patch.yml 已内置)cordis.patch.yml 以 insert 注册 { id: dsh-history, name: dsh-history },随 DSH profile 装配时自动加载 client bundle。
package.json 的 dsh.client.inject 声明了三个运行时模块(由宿主提供):
| 模块 | 用途 |
|---|---|
@deepseek-ai/dsh-client-runtime |
ctx.sessions.list.current 取当前会话 |
@deepseek-ai/dsh-client-ui-slots |
UI 扩展(如有) |
@deepseek-ai/dsh-client-connection |
connection.api.sessions.history 读取事件历史 |
src/
├── index.ts # host 入口(空 apply,客户端逻辑都在 client 模块)
└── client/
├── wire.ts # 事件/API 的 wire 类型镜像(不依赖宿主类型)
├── model.ts # history 事件 → TimelineGraph(轮次/文件/工具边)
├── timeline.ts # 布局(S 形)+ 渲染 + 洞察/归纳/逻辑链 + 详情窗 + 缩放
├── timeline.css # 深色能量主题样式(内联进 client bundle)
└── plugin.ts # 插件装配:按钮注入、面板开关、视图联动(自动开/关)
connection.api.sessions.history(sessionId)
→ buildGraph(events) # model.ts:turn/start…turn/end 折叠
→ TimelineGraph{turns, edgeCount}
→ renderTimeline(stage, graph) # timeline.ts
├─ analyzeGraph() 洞察条(高频文件 / 工具分布 / 统计)
├─ summarizeTurn() 意图标签 + 里程碑
├─ buildTurnChain() 因果逻辑链
├─ summarizeToolPatterns() 过程归纳(定位/读写/验证/报错)
└─ layoutGraph() S 形布局 + 贝塞尔连线
pathPoints 取每张卡片自身的中心(ry + h_i/2),行间距用行内最高卡片,任意高度混合的行连线都不会脱离卡片measureCardHeights),保证行不重叠zoom,卡片用 transform: scale(zoom)(--node-w 保持未缩放,避免双重缩放),SVG 同坐标系linearGradient 用 objectBoundingBox,SVG 必须保持真实画布尺寸(不能强制 100% 视口),否则渐变退化assistant/message 只取 text 块(丢弃 reasoning 思考块)并覆盖式保留最后一条消息 —— 卡片展示「这轮交付了什么」而非「在想什么」~/.bun/bin/node scripts/build-client.mjs # 构建
~/.bun/bin/node node_modules/typescript/bin/tsc --noEmit # 类型检查
改动 src/client/* 后构建,DSH 侧热重载插件包(dev_reload_package),刷新页面即可。
Apache License 2.0
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。