feat: board-first orchestration with Gateway Bridge, live-update, and flow-board
- GatewayBridgeController: MCP-artiger Kommando-Adapter für Agent-zu-Backend - TaskBridgeService + LiveUpdateService: SSE Live-Sync + Bridge-Kommandos - FlowBoard.vue: Board-first orchestration dashboard panel - live-sync.ts store + live.ts service: SSE-basierte Live-Updates - Nullability-Warnung in HealthController.cs gefixt - nginx.conf: SSE-Proxy + CORS für Bridge-Endpunkte - .gitignore: pnpm/corepack local caches ausgeschlossen - docs: architecture-board-first-orchestration.md hinzugefügt - README: Backend Bridge API dokumentiert
This commit is contained in:
@@ -169,6 +169,13 @@ function progressHint(taskLike: Pick<TaskDto, 'id' | 'lastActivityMessage' | 'ex
|
||||
return taskLike.lastActivityMessage?.trim() || childStatusSummary(taskLike.id) || (taskLike.expectedFrom ? `Wartet auf ${taskLike.expectedFrom}` : 'Noch kein relevanter Progress-Status')
|
||||
}
|
||||
|
||||
function delegationSummary(taskLike: TaskDto): string | null {
|
||||
if (taskLike.parentTaskId) return 'Sichtbare Child-Delegation'
|
||||
if (children.value.length) return `${children.value.length} sichtbare Child-Tasks`
|
||||
if (taskLike.isAgentTask) return 'Delegation im Board sichtbar'
|
||||
return null
|
||||
}
|
||||
|
||||
/* ── API calls ───────────────────────────────── */
|
||||
async function loadTask() {
|
||||
loading.value = true
|
||||
@@ -380,6 +387,7 @@ function handleKeydown(e: KeyboardEvent) {
|
||||
<span v-if="task.isAgentTask" class="meta-chip">🤖 Agent-Task</span>
|
||||
<span v-if="task.expectedFrom" class="meta-chip">⏳ Erwartet: {{ task.expectedFrom }}</span>
|
||||
<span v-if="task.parentTaskId" class="meta-chip">↳ Sichtbare Child-Task</span>
|
||||
<span v-if="delegationSummary(task)" class="meta-chip">{{ delegationSummary(task) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -408,8 +416,9 @@ function handleKeydown(e: KeyboardEvent) {
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div v-if="task.isAgentTask || childStatusSummary(task.id)" class="progress-banner">
|
||||
<div v-if="task.isAgentTask || childStatusSummary(task.id) || delegationSummary(task)" class="progress-banner">
|
||||
<strong>Letzter Fortschritt:</strong> {{ progressHint(task) }}
|
||||
<span v-if="delegationSummary(task)" class="delegation-inline">· {{ delegationSummary(task) }}</span>
|
||||
</div>
|
||||
|
||||
<!-- Description -->
|
||||
@@ -577,6 +586,7 @@ function handleKeydown(e: KeyboardEvent) {
|
||||
<dl class="info-list">
|
||||
<div><dt>ID</dt><dd>#{{ task.id.slice(0, 8) }}</dd></div>
|
||||
<div><dt>Quelle</dt><dd>{{ task.source || '—' }}</dd></div>
|
||||
<div v-if="delegationSummary(task)"><dt>Delegation</dt><dd>{{ delegationSummary(task) }}</dd></div>
|
||||
<div><dt>Erstellt</dt><dd>{{ formatDate(task.createdAt) }}</dd></div>
|
||||
<div><dt>Geändert</dt><dd>{{ formatDate(task.updatedAt, true) }}</dd></div>
|
||||
<div v-if="task.isAgentTask"><dt>Letzter Status</dt><dd>{{ relativeTime(task.lastActivityAt ?? task.updatedAt) }}</dd></div>
|
||||
|
||||
Reference in New Issue
Block a user