export type DispatchPlanUiTarget = { projectId: string; threadDisplayName: string; }; export type DispatchPlanUiPayload = { planId: string; status?: string; summary?: string; targets?: DispatchPlanUiTarget[]; }; export function latestPendingDispatchPlan(plans: DispatchPlanUiPayload[] | null | undefined) { return (plans ?? []).find((plan) => plan.status === "pending_user_confirmation") ?? null; } export function summarizeDispatchPlan(plan: DispatchPlanUiPayload | null | undefined) { if (!plan) { return "主 Agent 暂未生成推荐线程。"; } const summary = plan.summary?.trim() || "主 Agent 已生成推荐线程。"; const titles = (plan.targets ?? []) .map((target) => target.threadDisplayName?.trim() || "") .filter(Boolean); if (!titles.length) { return summary; } return `${summary}\n推荐线程:${titles.join("、")}`; } export function extractApprovedTargetProjectIds(plan: DispatchPlanUiPayload | null | undefined) { return (plan?.targets ?? []) .map((target) => target.projectId?.trim() || "") .filter(Boolean); }