dsh-at-file
FSMargoo/dsh-at-fileCodex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
在会话区新增「图谱」Tab,把单个会话的执行过程渲染为可交互 DAG:轮次、LLM 步骤、工具、技能、子代理、代码改动与测试,支持实时状态、重试聚合、关键路径与轨迹双向联动。
中文 | English
给 DeepSeek Harness (DSH) 的单个任务画一张可交互的执行流程图谱:从
任务开始 → Agent / Skill / Tool → 子任务 → 代码改动 → 测试 → 成功 / 失败 / 重试一眼看清,支持实时执行状态与历史回溯。
session.jsonl(zstd)解析而来,节点保留 Event ID,可与原始 Trajectory 双向跳转。一次克制的信息可视化,融合四种气质:
| 取向 | 落到产品上 |
|---|---|
| Apple 的克制 | 发丝线边框、低饱和配色、柔光无重阴影、状态用「染色 + 圆点」而非色块 |
| Linear 的信息密度 | 紧凑工具栏、等宽数字、高密度详情日志、单屏放下更多 |
| Vercel 的视觉精度 | 全局 tabular-nums、大写微标签、像素级对齐、仅浮层带分层阴影 |
| AI Agent 的实时执行感 | 运行节点脉冲 + 秒级计时、活动边虚线流动、LIVE 徽标呼吸 |
视觉上采用玻璃拟态:图谱 / 详情 / 轨迹与「对话」「轨迹」两个原生 Tab 一样透出皮肤壁纸;每张卡片按节点类型染上专属半透明色调(任务蓝 · 轮次靛 · Agent 青 · 工具石灰 · Skill 紫 · 子代理琥珀 · 计划绿 · 代码橙 · 测试天蓝)。
画布只呈现语义上重要的节点,避免被几百个步骤淹没:
N steps · N tools · N tok · ↻重试 · ✗失败)×N · M files 一张卡点击任意关键节点,右侧详情面板展示具体做了什么:
Ctrl/⌘ + 滚轮在光标处缩放(限幅 0.3×–2.2×,不会缩成看不清的小图);拖拽平移、⤢ 适配宽度、⇕ 一键折叠到轮次概览/全部展开、类型过滤、搜索、聚焦节点、邻域高亮会话运行时通过 SSE 增量刷新:
RUNNING 节点脉冲高亮 + 秒级计时(18.2s · running 实时跳动)PENDING / RUNNING / SUCCESS / FAILED / SKIPPED / CANCELLED / RETRYINGevent_ids / session_id / task_id / 时间戳,随时回答「这个节点对应哪条 Event」npm run demo # 使用内置脚本化数据(含一个"正在运行"的任务,可看实时效果)
npm run demo -- --real # 读取你本机真实 $DSH_HOME 会话
npm run demo -- --port 8123
打开打印出的地址即可;图谱会悬浮在页面上,自动加载任务。
dsh plugin --profile web add github:KevinZhangNothing/dsh-task-graph
dsh plugin 会调用 pnpm 安装,并自动把声明了 dsh.bundle 的包注册进 dsh.profile.bundles(已实测)。重启引擎(或重新加载 Web UI)后,原生「对话 / 轨迹」标签旁会出现第三个「图谱」Tab。
发布到 npm 后即可直接
dsh plugin --profile web add dsh-task-graph; 也可以在插件市场(dshmarket)里搜索安装。
点击「图谱」后只在内容区展示任务执行图谱——标签栏、侧边栏与其它功能入口保持可见。点回「对话 / 轨迹」或按 Esc 即恢复原视图。
cd "$DSH_HOME/profiles/web"
dsh plugin --profile web add link:/path/to/dsh-task-graph
# 或手工:pnpm add "dsh-task-graph@link:/path/to/dsh-task-graph"
服务端需要 Node ≥ 22.15(用内置
zlib.zstdDecompressSync解码.zstd会话,零原生依赖)。
DSH session.jsonl (zstd, 多帧)
│ lib/sessions.js 逐帧解码 + 缓存 + 增量
▼
lib/graph.js buildGraph(events) ← 纯函数,Node/浏览器通用
│ nodes[] + edges[] + summary
▼
lib/analytics.js criticalPath / performanceProfile
▼
lib/routes.js createApi(store) ← /task-graph/api/*(任务列表/图谱/事件/单事件)
│ + startLiveStream(SSE 实时尾随)
├──────────────┬───────────────────────────┐
▼ ▼ ▼
lib/index.js demo/server.mjs lib/client.js
(DSH webServer (独立 demo 服务) (浏览器 UI:SVG 渲染、布局、
挂载 HTTP 路由) 详情面板、Trajectory 联动)
lib/graph.js / lib/analytics.js 是纯模块,被服务端、demo、单测共享,保证"同一套构建逻辑"。lib/client.js 零依赖纯 DOM + SVG;既能被 DSH 的 window.__ModuleLoader__ 加载,也能被 demo 页当作普通 <script> 直接运行。所有接口均为只读 GET,前缀 /task-graph:
| 路由 | 说明 |
|---|---|
/task-graph/api/status | 健康检查、版本、DSH_HOME |
/task-graph/api/tasks?roots=true&q=&limit= | 任务(会话)列表 + 摘要统计 |
/task-graph/api/task?id=<workspace>/<dir> | 完整图谱(nodes/edges/summary/critical_path) |
/task-graph/api/events?id=…&from= | 紧凑轨迹事件(用于联动抽屉) |
/task-graph/api/event?id=…&seq= | 单条事件完整 payload |
/task-graph/api/live?id=… | SSE 实时尾随新事件 |
图谱统一为(详见 docs/data-model.md):
{
"task_id": "…",
"nodes": [{ "id": "…", "type": "agent", "status": "SUCCESS", "event_ids": [12, 13], "parent_id": "phase-1", "…": "…" }],
"edges": [{ "source": "…", "target": "…", "type": "calls" }]
}
task / phase / agent / tool / skill / subagent / code / test / planPENDING / RUNNING / SUCCESS / FAILED / SKIPPED / CANCELLED / RETRYINGcontains / depends_on / calls / invokes / delegates / consumes / modifies / validates / produces / retriesnpm test # node:test 单测(30 例)
npm run demo # 本地预览
目录结构:
lib/ index.js 服务端入口 · sessions.js 解码 · graph.js 构建 ·
analytics.js 分析 · routes.js HTTP API · client.js 浏览器 UI
demo/ server.mjs · index.html · sample-events.js(脚本化数据)
test/ node:test 单测 + fixtures
docs/ data-model.md · trajectory-events.md · spec.md · images/
MIT