The parent session log has no record of subagent spawns (the workflow engine spawns them internally; the only durable linkage is the child header's parentSession field), so the workbench reconstructs call -> children attribution by creation-time window. Surface that panel in the chat tool block too, not just the trajectory row.
DeepSeek Harness Trace Workbench
Localhost UI backed by real DeepSeek Harness persisted session JSONL files.
node server.js
Then open http://127.0.0.1:5173/.
Defaults:
- Reads sessions from
./.sessionsunder the current working directory (setHARNESS_SESSIONS_ROOTto point elsewhere) - Serves static UI and API from the same localhost origin
- Annotations are appended to
.feedback/*.jsonlnext to the server (local data, not committed)
Useful overrides:
HARNESS_SESSIONS_ROOT=/path/to/.sessions PORT=5174 node server.js
API:
GET /api/healthGET /api/sessionsGET /api/sessions/:id
Current UI capabilities:
- Reads real session JSONL, not mock data; replay-only (the composer is disabled until live runtime wiring lands).
- Three first-class views; the inspector is second-level and belongs to Chat only:
- Chat — markdown-rendered surface conversation; clicking a message opens the inspector as an inner column (paired Input/Output, metadata, feedback, Plain/JSON/JSONL/YAML formatting) that squeezes the conversation, never overlays it.
- Trajectory — self-contained: a structure tree (turn → step, with durations, tool summaries and error dots) navigates a step-grouped event table; lifecycle events are absorbed into the tree and sticky group headers instead of appearing as rows. Expanded rows carry Copy JSON, inline annotations (标注) and the raw event.
- Waterfall — hotspot finder: a summary strip (total / LLM time / tool time / errors / slowest step / tokens) plus an aligned time track; clicking any bar, label or stat jumps to the matching Trajectory row.
- Session list groups subagent sessions under their
parentSession; a spawning tool call links to the sessions it spawned, and a child session shows a breadcrumb back to its parent. - Failed tool calls are marked in every view (red rail +
← errorchip in Trajectory, red bar in Waterfall,Tool failedin Chat). - Panes resize by dragging the dividers (clamped; widths persist), and all panes squeeze each other in one layer.
- URL carries
?session=&view=&sel=so any selection is a shareable deep link.