feat(FN-3276): add task review tab with metadata persistence and desktop la

This merge lands three major features and a significant dashboard enhancement. FN-3276 adds a full Review tab to the task detail modal with multi-step lifecycle: review metadata persistence in the task store, new task workflow routes for refresh and same-task revision, and the review tab UI surface

Fusion-Task-Id: FN-3276
This commit is contained in:
Fusion
2026-05-07 21:28:56 -07:00
committed by gsxdsm
parent a1354685d0
commit ecbf1f829c
23 changed files with 905 additions and 24 deletions

View File

@@ -250,6 +250,20 @@ export async function fetchTaskDetail(id: string, projectId?: string): Promise<T
throw new Error("Request failed");
}
export interface UpdateTaskReviewRequest {
review: TaskDetail["review"] | null;
}
export interface RefreshTaskReviewResponse {
review: NonNullable<TaskDetail["review"]>;
automationStatus: string | null;
}
export interface ReviseTaskReviewResponse {
task: Task;
review: NonNullable<TaskDetail["review"]>;
}
export interface CreateTaskRequestOptions {
transportNodeId?: string;
localNodeId?: string;
@@ -5084,6 +5098,21 @@ export function acceptTaskReview(taskId: string, projectId?: string): Promise<Ta
});
}
/** Refresh normalized task review data (PR mode or direct mode) */
export function refreshTaskReview(taskId: string, projectId?: string): Promise<RefreshTaskReviewResponse> {
return api<RefreshTaskReviewResponse>(withProjectId(`/tasks/${encodeURIComponent(taskId)}/review/refresh`, projectId), {
method: "POST",
});
}
/** Request an in-place revision pass for selected review items */
export function reviseTaskReviewItems(taskId: string, itemIds: string[], projectId?: string): Promise<ReviseTaskReviewResponse> {
return api<ReviseTaskReviewResponse>(withProjectId(`/tasks/${encodeURIComponent(taskId)}/review/revise`, projectId), {
method: "POST",
body: JSON.stringify({ itemIds }),
});
}
/** Return task to agent - clear assignee and status, move to todo */
export function returnTaskToAgent(taskId: string, projectId?: string): Promise<Task> {
return api<Task>(withProjectId(`/tasks/${encodeURIComponent(taskId)}/return-to-agent`, projectId), {