| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import type { DashboardResponse } from "@/lib/api/types";
- export type PipelineStage = {
- id: string;
- label: string;
- status: "active" | "warn" | "plain";
- count?: number;
- };
- // stage_conclusions.status -> 导航卡状态。failed/blocked 必须可见为 warn,
- // 不再只按「有无数据」判断(V1 bug: 失败阶段曾显示为正常)。
- function fromConclusion(status: string | undefined, fallback: "active" | "warn" | "plain"): "active" | "warn" | "plain" {
- if (!status) return fallback;
- if (["failed", "fail", "rule_blocked", "error", "missing"].includes(status)) return "warn";
- if (["success", "pass", "partial_success", "pending", "review"].includes(status)) return "active";
- return fallback;
- }
- export function pipelineStages(dashboard?: DashboardResponse): PipelineStage[] {
- const counts = dashboard?.counts || {};
- const files = dashboard?.files || {};
- const conclusionByStage = new Map(
- (dashboard?.stage_conclusions || []).map((row) => [row.stage_id, row.status])
- );
- const stage = (
- id: string,
- label: string,
- fallback: "active" | "warn" | "plain",
- count?: number
- ): PipelineStage => ({
- id,
- label,
- status: fromConclusion(conclusionByStage.get(id), fallback),
- ...(count === undefined ? {} : { count })
- });
- return [
- stage("source", "数据源", files["source_context.json"] ? "active" : "warn"),
- stage("query", "Query", counts.queries ? "active" : "warn", counts.queries),
- stage("platform", "平台 / 内容", counts.discovered_content_items ? "active" : "warn", counts.discovered_content_items),
- stage("judge", "判断", counts.rule_decisions ? "active" : "warn", counts.rule_decisions),
- stage("walk", "游走", counts.walk_actions ? "active" : "plain", counts.walk_actions),
- stage("asset", "资产沉淀", files["final_output.json"] ? "active" : "plain"),
- stage("learning", "策略学习", files["strategy_review.json"] ? "active" : "plain")
- ];
- }
|