50 lines
2.0 KiB
TypeScript
50 lines
2.0 KiB
TypeScript
import {
|
|
normalizeWorkflowProfileSessionEndPolicy,
|
|
normalizeWorkflowProfileSessionStartPolicy,
|
|
type WorkflowStep,
|
|
} from "@/lib/types/http";
|
|
|
|
function stepUpdatePayload(step: WorkflowStep): Partial<WorkflowStep> {
|
|
return {
|
|
name: step.name,
|
|
position: step.position,
|
|
color: step.color,
|
|
stage_type: step.stage_type ?? "custom",
|
|
prompt: step.prompt ?? "",
|
|
events: step.events ?? {},
|
|
allow_manual_move: step.allow_manual_move ?? true,
|
|
is_start_step: step.is_start_step ?? false,
|
|
show_in_command_panel: step.show_in_command_panel ?? false,
|
|
auto_archive_after_hours: step.auto_archive_after_hours ?? 0,
|
|
agent_profile_id: step.agent_profile_id ?? "",
|
|
profile_session_start_policy: normalizeWorkflowProfileSessionStartPolicy(
|
|
step.profile_session_start_policy,
|
|
),
|
|
profile_session_end_policy: normalizeWorkflowProfileSessionEndPolicy(
|
|
step.profile_session_end_policy,
|
|
),
|
|
session_target: step.session_target ?? null,
|
|
complete_task_on_enter: step.complete_task_on_enter ?? false,
|
|
auto_advance_requires_signal: step.auto_advance_requires_signal ?? false,
|
|
cancel_triggers_turn_complete: step.cancel_triggers_turn_complete ?? false,
|
|
wip_limit: step.wip_limit ?? 0,
|
|
pull_from_step_id: step.pull_from_step_id ?? "",
|
|
};
|
|
}
|
|
|
|
export function areStepDraftsEqual(left: WorkflowStep[], right: WorkflowStep[]): boolean;
|
|
export function areStepDraftsEqual(left: WorkflowStep, right: WorkflowStep): boolean;
|
|
export function areStepDraftsEqual(
|
|
left: WorkflowStep[] | WorkflowStep,
|
|
right: WorkflowStep[] | WorkflowStep,
|
|
): boolean {
|
|
if (Array.isArray(left) && Array.isArray(right)) {
|
|
if (left.length !== right.length) return false;
|
|
return left.every((step, index) => areStepDraftsEqual(step, right[index]));
|
|
}
|
|
if (Array.isArray(left) || Array.isArray(right)) return false;
|
|
return JSON.stringify(stepUpdatePayload(left)) === JSON.stringify(stepUpdatePayload(right));
|
|
}
|
|
|
|
export { stepUpdatePayload };
|