Swimlane timeline in run detail (kjvv7)
Run recipe: open a run with i in the hub (or cyberine tui), then press v to swap the step list for a timeline and v again to bring the steps back. The timeline is one lane per worker over the run's time axis, grouped under a labelled rule per step whose heavy segment marks that step's start and end. j/k still move the selected worker, which is highlighted in its lane.
Reading a lane: █ is a tool call in flight, ▒ a model call or model output, ░ other output from a worker that does not stream tokens, · idle (the worker was alive but emitted nothing), ! a stuck event, and blank outside the worker's own start and end. The right-hand column gives busy NN%, or idle 2m50s for the longest silent stretch once it passes 10 seconds, shown in the warning colour from 60 seconds. A live run ends its axis at the current time and marks it with ▲; a finished run ends at its last event. A step's time offset is shared, so a later step's workers start further right.
Where the data comes from: events.jsonl only, nothing new is recorded. worker:start and the terminal worker:done, worker:error or worker:cancelled bound a lane, worker:stuck paints the stuck cell, and token:delta, worker:web-search and progress lines supply the busy cells. The engine has no explicit "model call" or "tool call" event kind, so a progress line starting querying counts as a model call and one starting running or tool: as a tool call; a call is held as busy until the worker's next event for at most 30 seconds (model) or 90 seconds (tool), and plain output is held for 2 seconds, so a worker silent for longer reads as idle even if it was still inside one long call. The classification and the cell logic live in src/tui/runLanes.ts and are covered by npm run selftest:run-lanes.
Known Limitations and Deferred Work: the timeline needs 100 or more columns and prints a one-line explanation below that. It replaces the step list while open, and the other panels (p, t, r) take precedence over it. A worker that restarts keeps one lane. Autopilot runs keep their own turn timeline and have no worker lanes. At most the last 60000 events are read, polled every 2 seconds while the run is live; a very long run is therefore drawn from its tail. The hold windows are fixed constants, not settings.
6. Workflows + live fleet view (the orchestration layer)
Run a multi-step workflow - a DAG of tasks where each step fans out to all available adapters, gets judged, and its winning output flows into dependent steps via {{stepId}} templating:
Meter tracks belong to their own meter (kw1e9)
Two leftovers from the sub-cell meter work.