{% extends "base.html" %} {% block title %}Store submissions — {{ config.INSTANCE_NAME }}{% endblock %} {% block content %} {% set base_qs %} {%- if status_filter %}status={{ status_filter }}&{% endif -%} {%- if submitter_filter %}submitter={{ submitter_filter }}&{% endif -%} {%- if type_filter %}type={{ type_filter }}&{% endif -%} {%- if name_filter %}name={{ name_filter }}&{% endif -%} {%- if version_filter %}version={{ version_filter }}&{% endif -%} {%- if sort_filter %}sort={{ sort_filter }}&{% endif -%} {%- if order_filter %}order={{ order_filter }}&{% endif -%} {%- endset %} {% set base_qs_no_sort %} {%- if status_filter %}status={{ status_filter }}&{% endif -%} {%- if submitter_filter %}submitter={{ submitter_filter }}&{% endif -%} {%- if type_filter %}type={{ type_filter }}&{% endif -%} {%- if name_filter %}name={{ name_filter }}&{% endif -%} {%- if version_filter %}version={{ version_filter }}&{% endif -%} {%- endset %} {# Sort-link helper: clicking a sortable header toggles asc/desc on that column while preserving every active filter. Default order on first click of any column except created_at is ascending; clicking the active column flips it. #} {% macro sort_link(col, label) -%} {% set is_active = (sort_filter == col) %} {% set new_order = "desc" if (is_active and order_filter == "asc") else ("asc" if is_active else ("desc" if col == "created_at" else "asc")) %} {{ label }}{% if is_active %}{{ " ↓" if order_filter == "desc" else " ↑" }}{% endif %} {%- endmacro %} {# Format bytes to KB for display. Returns "—" when None. #} {% macro fmt_size(b) -%} {%- if b is none -%}—{%- elif b < 1024 -%}{{ b }} B{%- elif b < 1048576 -%}{{ "%.1f"|format(b / 1024) }} KB{%- else -%}{{ "%.1f"|format(b / 1048576) }} MB{%- endif -%} {%- endmacro %}
Every upload to /api/store/entities writes one row here. Inline
checks (manifest, static security, quality+templating) run synchronously;
the LLM security review runs in the background and flips
pending_llm → approved or blocked_llm. Click a
row to see the full check breakdown. Override a blocked submission to
force-publish (audit trail captured), retry a review_error,
or delete spam outright. See docs/STORE_GUARDRAILS.md.
| {{ sort_link("created_at", "When") }} | Submitter | Type / {{ sort_link("name", "name") }} | Version | {{ sort_link("status", "Status") }} | {{ sort_link("file_size", "Size") }} | Findings | Model |
|---|---|---|---|---|---|---|---|
| {{ s.created_at.strftime("%Y-%m-%d %H:%M:%S") if s.created_at else "" }} | {# Filter-by-submitter link. stopPropagation in JS so row click is suppressed when clicking the email. #} {{ s.submitter_email or s.submitter_id }} | {{ s.type }} {{ s.name | store_display_name }} | {{ s.version or "" }} | {{ s.status }} | {{ fmt_size(s.file_size) }} | {%- if s.inline_checks and s.inline_checks.static_security and s.inline_checks.static_security.findings -%} {%- for f in s.inline_checks.static_security.findings %} [{{ f.severity }}] {{ f.file }}:{{ f.line }} — {{ f.reason }} {%- endfor %} {%- endif -%} {%- if s.inline_checks and s.inline_checks.manifest and s.inline_checks.manifest.issues %} manifest: {{ s.inline_checks.manifest.issues | join(", ") }} {%- endif -%} {%- if s.llm_findings and s.llm_findings.summary %} llm: {{ s.llm_findings.risk_level }} — {{ s.llm_findings.summary }} {%- endif -%} {%- if s.llm_findings and s.llm_findings.error %} error: {{ s.llm_findings.error }} {%- endif -%} | {{ s.reviewed_by_model or "" }} |