{% extends parent %} {% block title %}Sessions - Introspect{% endblock %} {# Build query string helper — keeps all current params, overrides given ones. Uses kwargs + context-var fallback because Jinja2 macro defaults cannot reference template context variables when the template uses {% extends %}. #} {% macro qs() -%} page={{ kwargs.get("page", page) }}&page_size={{ kwargs.get("page_size", page_size) }}&sort={{ kwargs.get("sort", sort) }}&order={{ kwargs.get("order", order) }}&model={{ kwargs.get("model", filter_model) }}&project={{ kwargs.get("project", filter_project) }}&branch={{ kwargs.get("branch", filter_branch) }}&command={{ kwargs.get("command", filter_command) }}&q={{ kwargs.get("q", filter_q) }} {%- endmacro %} {# Sortable column header #} {% macro sort_header(label, col) %} {% set new_order = 'asc' if sort == col and order == 'desc' else 'desc' %} {% set arrow = '' %} {% if sort == col %} {% set arrow = ' ▲' if order == 'asc' else ' ▼' %} {% endif %} {{ label }}{{ arrow }} {% endmacro %} {% block content %}

Sessions ({{ total }} total)

{# ── Filter bar ── #}
{% if filter_model or filter_project or filter_branch or filter_command or filter_q %} Clear filters {% endif %}
{# ── Sessions table ── #}
{{ sort_header('Project', 'project') }} {{ sort_header('Branch', 'branch') }} {{ sort_header('Title', 'title') }} {{ sort_header('Duration', 'duration') }} {{ sort_header('User', 'user_msgs') }} {{ sort_header('Asst', 'asst_msgs') }} {{ sort_header('Tools', 'tool_calls') }} {{ sort_header('Read', 'files_read') }} {{ sort_header('Edited', 'files_edited') }} {{ sort_header('Read Only', 'files_read_only') }} {{ sort_header('Outside', 'files_outside') }} {{ sort_header('Cost', 'cost') }} {{ sort_header('Model', 'model') }} {% for s in sessions %} {% endfor %}
Date Start EndCommands
{{ s.project }} {{ s.branch }} {{ s.title or '(no title)' }} {{ s.date }} {{ s.start_time }} {{ s.end_time }} {{ s.duration }} {{ s.user_msgs }} {{ s.asst_msgs }} {% if s.tool_count %}{{ s.tool_count }}{% else %}0{% endif %} {{ s.files_read }} {{ s.files_edited }} {{ s.files_read_only }} {{ s.files_outside }} {% if s.commands %}{% for c in s.commands.split(', ') %}{{ c }}{% endfor %}{% endif %} {% if s.cost %}{{ s.cost }}{% else %}—{% endif %} {{ s.model }}
{# ── Pagination + page size ── #} {% endblock %}