feat: Parent-Child TaskFlow — Delegated durch sichtbare Child-Tasks ersetzt

- Delegated State aus Board, Entities, DTOs, Frontend-Spalten und Tests entfernt
- Parent-Tasks bleiben InProgress waehrend delegierter Agentenarbeit
- Child-Tasks laufen sichtbar mit normalen States und parentTaskId
- Doku: README, Phase 3, Changelog, Controller-Kommentare angepasst
- openclaw-task-board-flow.md als Referenzdoku hinzugefuegt
- 73/73 Backend-Tests gruen, Frontend-Build gruen
This commit is contained in:
2026-06-21 21:30:52 +02:00
parent b89289989a
commit ac131f7f53
15 changed files with 464 additions and 133 deletions
+6 -8
View File
@@ -4,7 +4,7 @@
* Fetches tasks from /api/dashboard/tasks and /api/dashboard/tasks/board
* and maps them into TaskItem[] format for the TaskStrip component.
*
* Board state: grouped by column (offen, inProgress, delegated, review, done, blocked)
* Board state: grouped by column (offen, inProgress, review, blocked, done)
* Auto-refresh: every 30 seconds.
*/
import { defineStore } from 'pinia'
@@ -34,10 +34,9 @@ export interface DashboardTaskDto {
export interface BoardGroup {
offen: DashboardTaskDto[]
inProgress: DashboardTaskDto[]
delegated: DashboardTaskDto[]
review: DashboardTaskDto[]
done: DashboardTaskDto[]
blocked: DashboardTaskDto[]
done: DashboardTaskDto[]
}
export interface AgentWorkflowOverview {
@@ -97,10 +96,9 @@ export const useTaskStore = defineStore('tasks', {
board: {
offen: [] as DashboardTaskDto[],
inProgress: [] as DashboardTaskDto[],
delegated: [] as DashboardTaskDto[],
review: [] as DashboardTaskDto[],
done: [] as DashboardTaskDto[],
blocked: [] as DashboardTaskDto[],
done: [] as DashboardTaskDto[],
} as BoardGroup,
boardLoading: false,
boardError: null as string | null,
@@ -169,10 +167,9 @@ export const useTaskStore = defineStore('tasks', {
const canonicalMap: Record<string, string> = {
offen: 'Backlog',
inProgress: 'In progress',
delegated: 'Delegated',
review: 'Review',
done: 'Done',
blocked: 'Blocked',
done: 'Done',
}
// Save previous state for rollback
@@ -188,7 +185,6 @@ export const useTaskStore = defineStore('tasks', {
const task =
findAndRemove(this.board.offen) ??
findAndRemove(this.board.inProgress) ??
findAndRemove(this.board.delegated) ??
findAndRemove(this.board.review) ??
findAndRemove(this.board.blocked) ??
findAndRemove(this.board.done)
@@ -322,6 +318,7 @@ export const useTaskStore = defineStore('tasks', {
priority?: string
assignedTo?: string
expectedFrom?: string
parentTaskId?: string | null
}) {
try {
const res = await apiFetch('/api/dashboard/tasks/agent', {
@@ -333,6 +330,7 @@ export const useTaskStore = defineStore('tasks', {
priority: data.priority ?? 'Medium',
assignedTo: data.assignedTo ?? null,
expectedFrom: data.expectedFrom ?? null,
parentTaskId: data.parentTaskId ?? null,
}),
})
if (!res.ok) throw new Error(`HTTP ${res.status}`)