Tarefas executáveis, broadcast global para agendamentos e dashboard persistente

- Tarefas agora são templates executáveis com botão play e seleção de agente
- Dropdown de tarefas salvas no modal de execução para reutilização rápida
- Broadcast global no manager para execuções agendadas via cron aparecerem no terminal
- Dashboard atividade recente agora consulta executionsStore persistente
- Suporte a exibição de pipelines e agentes na atividade recente
This commit is contained in:
Frederico Castro
2026-02-26 02:14:47 -03:00
parent 4b6c876f36
commit 22a3ce9262
8 changed files with 126 additions and 13 deletions

View File

@@ -75,6 +75,9 @@ const TasksUI = {
${createdAt}
</span>
<div class="task-card-actions">
<button class="btn btn-primary btn-sm" data-action="execute-task" data-id="${task.id}" title="Executar tarefa">
<i data-lucide="play"></i>
</button>
<button class="btn btn--ghost btn--sm" data-action="edit-task" data-id="${task.id}" title="Editar tarefa">
<i data-lucide="pencil"></i>
</button>
@@ -209,6 +212,49 @@ const TasksUI = {
}
},
async execute(taskId) {
const task = TasksUI.tasks.find((t) => t.id === taskId);
if (!task) return;
try {
const agents = await API.agents.list();
const activeAgents = agents.filter((a) => a.status === 'active');
if (activeAgents.length === 0) {
Toast.warning('Nenhum agente ativo disponível para executar');
return;
}
const selectEl = document.getElementById('execute-agent-select');
if (selectEl) {
selectEl.innerHTML = '<option value="">Selecionar agente...</option>' +
activeAgents.map((a) => `<option value="${a.id}">${a.agent_name || a.name}</option>`).join('');
selectEl.value = '';
}
const hiddenId = document.getElementById('execute-agent-id');
if (hiddenId) hiddenId.value = '';
const taskEl = document.getElementById('execute-task-desc');
if (taskEl) {
const parts = [task.name];
if (task.description) parts.push(task.description);
taskEl.value = parts.join('\n\n');
}
const instructionsEl = document.getElementById('execute-instructions');
if (instructionsEl) instructionsEl.value = '';
await AgentsUI._loadSavedTasks();
const savedTaskSelect = document.getElementById('execute-saved-task');
if (savedTaskSelect) savedTaskSelect.value = task.id;
Modal.open('execute-modal-overlay');
} catch (err) {
Toast.error(`Erro ao abrir execução: ${err.message}`);
}
},
_categoryClass(category) {
const map = {
'code-review': 'badge--blue',