Add agent reminders, model selection, task distribution and delete functionality

This commit is contained in:
pdyde 2026-02-20 22:37:58 +01:00
parent 56d9bc2c76
commit 84b2fe3dd7
16 changed files with 759 additions and 74 deletions

View file

@ -16,6 +16,32 @@
<div class="row g-4">
<!-- Sidebar -->
<div class="col-lg-4">
<!-- Task Distribution -->
<div class="card mb-3">
<div class="card-header bg-info">
<h5 class="mb-0">📋 Tasks verteilen</h5>
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label">Aufgaben (eine pro Zeile)</label>
<textarea class="form-control" id="todoPrompt" rows="4" placeholder="Recherche Location&#10;Catering planen&#10;Pressemitteilung schreiben"></textarea>
</div>
<div class="mb-3">
<label class="form-label">Agenten auswählen</label>
<div id="agentCheckboxes">
{% for key, agent in agents.items() %}
<div class="form-check">
<input class="form-check-input agent-checkbox" type="checkbox" value="{{ key }}" id="agent_{{ key }}" checked>
<label class="form-check-label" for="agent_{{ key }}">{{ agent.name }}</label>
</div>
{% endfor %}
</div>
</div>
<button type="button" class="btn btn-info w-100" onclick="distributeTodos()">Tasks parallel ausführen</button>
<div id="todoStatus" class="form-text mt-2"></div>
</div>
</div>
<div class="card mb-3">
<div class="card-header bg-dark">
<h5 class="mb-0">Prompt eingeben</h5>
@ -153,5 +179,42 @@ function sendPromptWithStream() {
streamBtn.textContent = 'Live-Antwort anfordern';
});
}
function distributeTodos() {
const prompt = document.getElementById('todoPrompt').value.trim();
if (!prompt) { alert('Bitte Aufgaben eingeben!'); return; }
const selectedAgents = Array.from(document.querySelectorAll('.agent-checkbox:checked')).map(cb => cb.value);
if (selectedAgents.length === 0) { alert('Bitte mindestens einen Agenten auswählen!'); return; }
const status = document.getElementById('todoStatus');
status.textContent = 'Starte parallele Ausführung...';
status.className = 'form-text mt-2 text-info';
const tasks = prompt.split('\n').filter(t => t.trim());
fetch('/api/orchestrator-distribute', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ tasks, agents: selectedAgents })
})
.then(r => r.json())
.then(data => {
if (data.success) {
status.textContent = '✓ ' + data.message + ' - ' + data.results.length + ' Tasks gestartet';
status.className = 'form-text mt-2 text-success';
if (data.results && data.results.length > 0) {
location.reload();
}
} else {
status.textContent = 'Fehler: ' + data.error;
status.className = 'form-text mt-2 text-danger';
}
})
.catch(err => {
status.textContent = 'Fehler: ' + err.message;
status.className = 'form-text mt-2 text-danger';
});
}
</script>
{% endblock %}