Histórico persistente de execuções com visualização detalhada

- Novo executionsStore em db.js com cache in-memory e escrita debounced
- Camada de cache (src/cache/index.js) com TTL e suporte opcional a Redis
- Persistência de execuções de agentes e pipelines com metadados completos
- Pipeline grava cada etapa com prompt, resultado, timestamps e status
- 4 endpoints REST: listagem paginada com filtros, detalhe, exclusão individual e limpeza total
- Componente frontend (history.js) com cards, filtros, paginação e modal de detalhe
- Timeline visual para pipelines com prompts colapsáveis por etapa
- Correção do executor: --max-turns em vez de --max-tokens, --permission-mode bypassPermissions
- Refatoração do scheduler com persistência melhorada e graceful shutdown
This commit is contained in:
Frederico Castro
2026-02-26 01:36:28 -03:00
parent 2f7a9d4c56
commit 4b6c876f36
13 changed files with 1536 additions and 398 deletions

View File

@@ -59,6 +59,12 @@
<span>Terminal</span>
</a>
</li>
<li class="sidebar-nav-item">
<a href="#" class="sidebar-nav-link" data-section="history">
<i data-lucide="history"></i>
<span>Histórico</span>
</a>
</li>
<li class="sidebar-nav-item">
<a href="#" class="sidebar-nav-link" data-section="settings">
<i data-lucide="settings"></i>
@@ -387,6 +393,36 @@
</div>
</section>
<section id="history" class="section" aria-label="Histórico de Execuções" hidden>
<div class="section-toolbar">
<div class="toolbar-filters">
<div class="search-field">
<i data-lucide="search"></i>
<input type="text" placeholder="Buscar..." id="history-search" aria-label="Buscar no histórico" />
</div>
<select class="select" id="history-filter-type" aria-label="Filtrar por tipo">
<option value="">Todos os tipos</option>
<option value="agent">Agentes</option>
<option value="pipeline">Pipelines</option>
</select>
<select class="select" id="history-filter-status" aria-label="Filtrar por status">
<option value="">Todos os status</option>
<option value="completed">Concluído</option>
<option value="error">Erro</option>
<option value="running">Em execução</option>
</select>
</div>
<div class="toolbar-actions">
<button class="btn btn-ghost btn-sm btn-danger" id="history-clear-btn" type="button">
<i data-lucide="trash-2"></i>
Limpar Histórico
</button>
</div>
</div>
<div id="history-list"></div>
<div id="history-pagination"></div>
</section>
<section id="settings" class="section" aria-label="Configurações" hidden>
<div class="settings-grid">
<div class="card">
@@ -864,6 +900,19 @@
</div>
</div>
<div class="modal-overlay" id="execution-detail-modal-overlay" role="dialog" aria-modal="true" aria-labelledby="execution-detail-title" hidden>
<div class="modal modal-lg">
<div class="modal-header">
<h2 class="modal-title" id="execution-detail-title">Detalhe da Execução</h2>
<button class="modal-close" data-modal-close="execution-detail-modal-overlay" aria-label="Fechar" type="button">
<i data-lucide="x"></i>
</button>
</div>
<div class="modal-body" id="execution-detail-content">
</div>
</div>
</div>
<div class="modal-overlay" id="confirm-modal-overlay" role="dialog" aria-modal="true" aria-labelledby="confirm-modal-title" hidden>
<div class="modal modal--sm">
<div class="modal-header">
@@ -954,6 +1003,7 @@
<script src="js/components/schedules.js"></script>
<script src="js/components/pipelines.js"></script>
<script src="js/components/settings.js"></script>
<script src="js/components/history.js"></script>
<script src="js/app.js"></script>
<script>
lucide.createIcons();