agent-ecosystem/src/shared/utils/reviewState.ts
iliya 9678d790cd feat: enhance task review process with new event tracking
- Introduced a new function to determine the current review state based on task history events, improving the accuracy of review status tracking.
- Updated the requestReview, approveReview, and requestChanges functions to append corresponding review events to the task history, ensuring comprehensive tracking of review actions.
- Refactored task management logic to utilize the new historyEvents structure, replacing the previous statusHistory implementation for better clarity and maintainability.
- Enhanced tests to validate the new review event handling and ensure correct behavior across various task states.
2026-03-09 14:52:38 +02:00

54 lines
1.7 KiB
TypeScript

import { getDerivedReviewState } from '@shared/utils/taskHistory';
import type { TaskHistoryEvent, TeamReviewState } from '@shared/types';
interface ReviewStateLike {
reviewState?: TeamReviewState | null;
historyEvents?: unknown[];
kanbanColumn?: 'review' | 'approved' | null;
status?: string | null;
}
export function normalizeReviewState(value: unknown): TeamReviewState {
return value === 'review' || value === 'needsFix' || value === 'approved' ? value : 'none';
}
export function getReviewStateFromTask(task: ReviewStateLike): TeamReviewState {
// Prefer derivation from historyEvents when available
if (Array.isArray(task.historyEvents) && task.historyEvents.length > 0) {
return getDerivedReviewState({ historyEvents: task.historyEvents as TaskHistoryEvent[] });
}
const explicit = normalizeReviewState(task.reviewState);
if (explicit !== 'none') {
return explicit;
}
if (task.kanbanColumn === 'review' || task.kanbanColumn === 'approved') {
return task.kanbanColumn;
}
return 'none';
}
export function getKanbanColumnFromReviewState(
reviewState: TeamReviewState
): 'review' | 'approved' | undefined {
return reviewState === 'review' || reviewState === 'approved' ? reviewState : undefined;
}
export function getTaskKanbanColumn(task: ReviewStateLike): 'review' | 'approved' | undefined {
return getKanbanColumnFromReviewState(getReviewStateFromTask(task));
}
export function isApprovedTask(task: ReviewStateLike): boolean {
return getReviewStateFromTask(task) === 'approved';
}
export function isReviewTask(task: ReviewStateLike): boolean {
return getReviewStateFromTask(task) === 'review';
}
export function isNeedsFixTask(task: ReviewStateLike): boolean {
return getReviewStateFromTask(task) === 'needsFix';
}