{% if not trajectory_ctx.has_data %}

{% if trajectory_ctx.error %}Trajectory unavailable. {{ trajectory_ctx.error }}{% else %}No tool calls in this session — nothing to plot.{% endif %}

{% else %} {% set m = trajectory_ctx.metrics %} {% set p = trajectory_ctx.phases %} {% set calls = trajectory_ctx.calls %} {% set detail = trajectory_ctx.view == 'detail' %}

Trajectory

{% for v, lbl in [('category','Category'),('detail','Detailed')] %} {{ lbl }} {% endfor %}

Each tile is one tool call, in order. The strip is split into locate (before the first edit) · implement (editing, plus any test/fix cycles) · verify (the trailing test/lint/typecheck run once editing has stopped). Hover a tile for the command or file.

Calls {{ m.total }}
Locate len {{ m.locate_len }}
First nav {{ m.first_nav }}
Edits {{ m.edits }}
Searches {{ m.search }}
Distinct files read {{ m.distinct_files }}
Max re-reads {{ m.max_rereads }}
{% for item in trajectory_ctx.legend %} {{ item.label }} {% endfor %}
{% macro tile(c) %} {% if detail %} {{ c.detail }} {% else %} {{ c.glyph }} {% endif %} {% endmacro %} {% set bands = [ ('locate', '#f4f7f4', calls[:p.locate_end]), ('implement', '#f4f2f8', calls[p.locate_end:p.implement_end]), ('verify', '#f2f5fa', calls[p.implement_end:]), ] %}
{% for name, bg, band in bands %}{% if band %}
{{ name }} · {{ band|length }}
{% for c in band %}{{ tile(c) }}{% endfor %}
{% endif %}{% endfor %}
{% endif %}