{% extends "base.html" %} {% block styles %} {{ super() }} .task-back { margin-top: 0; } .timeline-step { border: 1px solid #c8d0d6; background: #fff; padding: 1rem; margin-bottom: 1rem; } .step-heading { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; align-items: baseline; margin-bottom: 0.75rem; } .step-heading p { margin: 0; color: #4d5a63; } .evidence-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; margin-bottom: 1rem; } .evidence-pane { margin: 0; min-width: 0; } .evidence-pane h3 { font-size: 1rem; margin: 0 0 0.35rem; } .screenshot-frame { min-height: 6rem; border: 1px solid #c8d0d6; background: #f8fafb; display: grid; place-items: center; overflow: hidden; color: #5e6b73; position: relative; } .screenshot-frame img { display: block; width: 100%; height: auto; } .overlay-svg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; } .overlay-svg .overlay-box { fill: none; stroke-width: 2; vector-effect: non-scaling-stroke; } .overlay-svg .overlay-box.source-ui { stroke: #1e88e5; } .overlay-svg .overlay-box.source-ocr { stroke: #fb8c00; } .overlay-svg .overlay-boxes { display: none; } .overlay-svg.show-boxes .overlay-boxes { display: inline; } .overlay-svg .action-tap { fill: #e53935; fill-opacity: 0.25; stroke: #e53935; stroke-width: 2; vector-effect: non-scaling-stroke; } .overlay-svg .action-swipe-line { stroke: #e53935; stroke-width: 3; vector-effect: non-scaling-stroke; fill: none; } .overlay-svg .action-swipe-dot { fill: #e53935; } .overlay-toggle { margin-bottom: 1rem; } .step-details { margin-top: 0.75rem; } .step-details summary { cursor: pointer; font-weight: 600; } .step-details pre { white-space: pre-wrap; overflow-wrap: anywhere; margin: 0.65rem 0 0; padding: 0.65rem; border: 1px solid #d5dce0; background: #f8fafb; } .operation-grid { display: grid; grid-template-columns: minmax(7rem, 0.4fr) minmax(0, 1fr); gap: 0.35rem 0.75rem; margin: 0.65rem 0 0; } .operation-grid dt { font-weight: 600; } .operation-grid dd { margin: 0; overflow-wrap: anywhere; } .observation-list, .ui-tree-nodes { margin: 0.65rem 0 0; padding-left: 1.25rem; } .observation-list li, .ui-tree-nodes li { margin-bottom: 0.45rem; overflow-wrap: anywhere; } .observation-list span, .ui-tree-nodes span { color: #4d5a63; margin-left: 0.4rem; } .ui-tree-nodes code { overflow-wrap: anywhere; } @media (max-width: 640px) { .evidence-grid { grid-template-columns: minmax(0, 1fr); } .timeline-step { padding: 0.75rem; } } {% endblock %} {% block body %}

← Back to executions

Execution

{% for row in task_rows %}{% endfor %}
FieldValue
{{ row[0] }}{{ row[1] }}

Timeline

{% if not timeline_steps %}

No timeline records.

{% else %}

{% endif %} {% for step in timeline_steps %}
Step {{ step.index }}

{{ step.timestamp }}

Before action

{% if step.before_screenshot_src %} Screenshot before action {% if step.overlay.width and step.overlay.height %} {% endif %} {% else %} No screenshot {% endif %}

After action

{% if step.after_screenshot_src %} Screenshot after action {% else %} No screenshot {% endif %}
Operation
Action
{{ step.tool_call.get("action") or "-" }}
Description
{{ step.tool_call.get("description") or "-" }}
{{ step.tool_call | tojson(indent=2) }}
Result
{{ step.result | tojson(indent=2) }}
{% if step.prompt %}
Planner prompt
{{ step.prompt }}
{% endif %} {% if step.ocr_results %}
OCR results ({{ step.ocr_results|length }})
{% endif %} {% if step.ui_tree_nodes %}
UI tree ({{ step.ui_tree_nodes|length }} normalized nodes)
{% endif %}
{% endfor %} {% endblock %}