feat: Review-Agent (Multi-Agent-Kommunikation)

- Session hat optionalen ReviewAgentId + MaxReviewIterations
- Nach end_turn des Worker-Agents wird der Review-Agent aufgerufen
- Review-Agent bekommt Worker-Konversation als Kontext + kann Tools nutzen
- [APPROVED] in Review-Antwort → fertig, sonst Feedback an Worker
- Worker korrigiert und wird erneut reviewed (max N Runden)
- SSE-Events: review_start, review_text, review_tool_use, review_feedback, review_approved
- Chat-UI: Review-Phase als eigene Bubble mit Header, Text, Status
- Session-Page: Review-Agent-Picker (gleicher Agent-Card-Helper)
- Dashboard: Review-Agent-Badge auf Session-Cards
- DB-Migration: review_agent_id, max_review_iterations auf sessions
This commit is contained in:
Meleki committed 2026-03-06 16:04:00 +01:00
1 parent 2598656f1c
commit 5fe3f8ac87
12 files changed
+619 -18

No files matched your search

+71
View File
@@ -973,3 +973,74 @@
text-align: center;
padding: var(--page-padding);
}
/* Review Bubbles */
.review-bubble {
align-self: flex-start;
background: var(--f1-bg);
border: var(--border-width) solid var(--f1-border);
border-left: 3px solid var(--secondary);
max-width: 80%;
display: flex;
flex-direction: column;
gap: var(--badge-spacing);
}
.review-header {
display: flex;
align-items: center;
gap: var(--badge-spacing);
color: var(--secondary);
}
.review-round {
opacity: var(--semi-transparent);
font-size: var(--font-size);
}
.review-content {
word-break: break-word;
}
.review-tool-use {
font-size: var(--font-size);
opacity: var(--semi-transparent);
display: flex;
align-items: center;
gap: var(--badge-spacing);
}
.review-status {
display: flex;
align-items: center;
gap: var(--badge-spacing);
padding-top: var(--badge-spacing);
border-top: var(--border-width) solid var(--f2-border);
font-weight: bold;
}
.review-approved {
color: var(--success);
}
.review-rejected {
color: var(--warning);
}
/* Review Iterations Row */
.review-iterations-row {
display: flex;
align-items: center;
gap: var(--box-spacing);
}
.review-iterations-row label {
margin: 0;
white-space: nowrap;
}
.review-iterations-row input[type="number"] {
width: 5em;
}