Besprechung als eigenes Mittel: Termin, Tagesordnung, eine Runde je Teilnehmer, Protokoll (#686)
Aufgabentyp meeting mit Teilnehmerliste (Frontmatter, SQLite, Taskboard-Werkzeug, WebUI). MeetingRunner: jeder Teilnehmer einmal in Reihenfolge, Beitraege gerahmt als Daten des Verfassers, danach schliesst die Leitung mit Ergebnis und Aufgaben. Protokoll schreibt die Instanz in den Bereich der Einheit der Leitung. Teilnehmer nur aus dem Adressbuch der Leitung, hoechstens 12. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
2df2fc476f
commit
f2bf8b5b59
@@ -67,6 +67,11 @@ public sealed class EngineTaskDispatcher : ITaskDispatcher
|
||||
return await DispatchToolJobAsync(task, ct);
|
||||
|
||||
var agents = _agents();
|
||||
|
||||
// #686: a meeting — the assignee chairs, each participant gets one turn.
|
||||
if (task.Type == TaskItemType.Meeting)
|
||||
return await DispatchMeetingAsync(task, agents, ct);
|
||||
|
||||
var message = BuildMessage(task, await WhyAsync(task, ct));
|
||||
if (!string.IsNullOrWhiteSpace(instruction))
|
||||
message = instruction.Trim() + "\n\n---\n\n" + message;
|
||||
@@ -117,6 +122,25 @@ public sealed class EngineTaskDispatcher : ITaskDispatcher
|
||||
};
|
||||
}
|
||||
|
||||
private async Task<TaskLauf> DispatchMeetingAsync(TaskItem task, IReadOnlyList<AgentConfig> agents, CancellationToken ct)
|
||||
{
|
||||
var chair = ResolveFreshAgent(agents, TaskAssignee.AgentId(task.Assignee));
|
||||
if (chair is null)
|
||||
{
|
||||
_logger.LogWarning("Meeting {TaskId}: no chair — '{Assignee}' is not an agent", task.Id, task.Assignee);
|
||||
return TaskLauf.Gescheitert;
|
||||
}
|
||||
|
||||
var outcome = await new MeetingRunner(_engine, _agents, _instanceId, _logger, _clock).RunAsync(task, chair, ct);
|
||||
return outcome.Chair?.Status switch
|
||||
{
|
||||
AgentRunStatus.Completed => TaskLauf.Erledigt,
|
||||
AgentRunStatus.BudgetExceeded => TaskLauf.KeinBudget,
|
||||
AgentRunStatus.ShuttingDown => TaskLauf.NichtGelaufen,
|
||||
_ => TaskLauf.Gescheitert
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tickt einen <see cref="IToolJobProvider"/> (Poll) und weckt den Ziel-Agenten nur,
|
||||
/// wenn der Tick etwas meldet. Der Tick selbst gilt als erfolgreich, auch wenn nichts
|
||||
|
||||
Reference in New Issue
Block a user