{% from "_macros.html" import icon %} {# What the helper panel holds for one job: its head, its transcript so far, and the box to message it. Returned by `GET /api/chats/{id}/jobs/{job}`; the transcript part alone by `?part=turns`, which the transcript polls for while the job runs -- the whole body is never replaced under a half-typed message, which is why the poll lives on the turns and not on the body. Everything in `turns` is another model's words (a helper here) or came off a device: the user turns are printed as text, the assistant text went through `render_markdown`, and the tool lines are escaped by Jinja. #} {% set running = job.state == "running" %}
{{ job.id }} {{ job.agent or t("subagent") }} {{ job_state(job.state) }} · {{ job_duration(job.seconds) }}

{{ job.description }}

{% if running %} {% endif %}
{% include "chat/_job_turns.html" %}