{% 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 %}
| Date | Start | End | {{ 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') }}Commands | {{ sort_header('Cost', 'cost') }} {{ sort_header('Model', 'model') }}|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ 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 }} |