{#- Unified mode display mapping: raw mode → {label, css, dark_css} -#} {%- set mode_label_map = { 'enforce': 'Sequential (Enforce)', 'sequential': 'Sequential (Enforce)', 'enforce_ignore_error': 'Sequential (Ignore Error)', 'permissive': 'Transform (Permissive)', 'transform': 'Transform (Permissive)', 'concurrent': 'Concurrent', 'audit': 'Audit', 'fire_and_forget': 'Fire And Forget', 'disabled': 'Disabled', } -%} {%- set mode_css_map = { 'enforce': 'bg-red-100 text-red-800', 'sequential': 'bg-red-100 text-red-800', 'enforce_ignore_error': 'bg-orange-100 text-orange-800', 'permissive': 'bg-blue-100 text-blue-800', 'transform': 'bg-blue-100 text-blue-800', 'concurrent': 'bg-purple-100 text-purple-800', 'audit': 'bg-yellow-100 text-yellow-800', 'fire_and_forget': 'bg-teal-100 text-teal-800', 'disabled': 'bg-gray-100 text-gray-800', } -%} {%- set mode_dark_css_map = { 'enforce': 'dark:bg-red-900 dark:text-red-200', 'sequential': 'dark:bg-red-900 dark:text-red-200', 'enforce_ignore_error': 'dark:bg-orange-900 dark:text-orange-200', 'permissive': 'dark:bg-blue-900 dark:text-blue-200', 'transform': 'dark:bg-blue-900 dark:text-blue-200', 'concurrent': 'dark:bg-purple-900 dark:text-purple-200', 'audit': 'dark:bg-yellow-900 dark:text-yellow-200', 'fire_and_forget': 'dark:bg-teal-900 dark:text-teal-200', 'disabled': 'dark:bg-gray-700 dark:text-gray-300', } -%}

Plugin Management

{% if not plugins_enabled %}

Plugins are currently disabled

Set PLUGINS_ENABLED=true in your environment to enable plugin functionality.

{% else %}
{{ stats.total_plugins }}
Total Plugins
{{ stats.enabled_plugins }}
Enabled
{{ stats.disabled_plugins }}
Disabled
{{ (stats.plugins_by_mode.enforce | default(0)) + (stats.plugins_by_mode.sequential | default(0)) + (stats.plugins_by_mode.enforce_ignore_error | default(0)) + (stats.plugins_by_mode.concurrent | default(0)) }}
Enforcing
{% endif %}
{% if plugins_enabled %}

Hook Points

All Hooks {{ stats.total_plugins }}
{% for hook, count in stats.plugins_by_hook.items() %}
{{ hook.replace('_', ' ').title() }} {{ count }}
{% endfor %}

Popular Tags

All Tags ({{ stats.total_plugins }}) {% for tag, count in stats.plugins_by_tag.items() %} {{ tag }} ({{ count }}) {% endfor %}

Authors

All Authors ({{ stats.total_plugins }}) {% for author, count in stats.plugins_by_author.items() %} {{ author }} ({{ count }}) {% endfor %}
{% for plugin in plugins %}

{{ plugin.name }}

v{{ plugin.version }}

{% set pdesc = (plugin.description or "") | decode_html %}{{ pdesc[:100] }}{% if pdesc|length > 100 %}...{% endif %}

Author: {{ plugin.author }}
Priority: {{ plugin.priority }}
{% if plugin.status == 'enabled' %} Enabled {% else %} Disabled {% endif %}
{%- set m = plugin.mode -%} {{ mode_label_map.get(m, m | replace('_', ' ') | title) }} {% if plugin.implementation == 'Rust' %} 🦀 Rust {% elif plugin.implementation == 'Python' %} 🐍 Python {% endif %}
{% if plugin.tags %}
{% for tag in plugin.tags %} {% if tag is mapping %}{{ tag.id }}{% else %}{{ tag }}{% endif %} {% endfor %}
{% endif %} {% if plugin.hooks %}
Hooks:
{% for hook in plugin.hooks %} {{ hook.replace('_', ' ') }} {% if not loop.last %},{% endif %} {% endfor %}
{% endif %}
{% endfor %}
{% if not plugins %}

No plugins found

No plugins are currently loaded in the system.

{% endif %} {% endif %}