diff --git a/web/storyforge-web-v4/assets/app.js b/web/storyforge-web-v4/assets/app.js index 83fb17d..5fdc7b2 100644 --- a/web/storyforge-web-v4/assets/app.js +++ b/web/storyforge-web-v4/assets/app.js @@ -985,10 +985,12 @@ function renderOneLinerRunsHtml() { const pendingRunCount = safeArray(runs).filter((item) => item.run_status === "needs_confirmation").length; const activeRunCount = safeArray(runs).filter((item) => ["queued", "running", "blocked"].includes(item.run_status)).length; const completedRunCount = safeArray(runs).filter((item) => item.run_status === "done").length; - const filterKey = String(appState.onelinerRunFilter || "").trim() || (activeRunCount || pendingRunCount ? "focus" : "done"); + const problemRunCount = safeArray(runs).filter((item) => ["blocked", "failed", "cancelled"].includes(item.run_status)).length; + const filterKey = String(appState.onelinerRunFilter || "").trim() || (activeRunCount || pendingRunCount ? "focus" : completedRunCount ? "done" : "problems"); const runFilterPredicates = { focus: (item) => ["needs_confirmation", "queued", "running", "blocked"].includes(item.run_status), done: (item) => item.run_status === "done", + problems: (item) => ["blocked", "failed", "cancelled"].includes(item.run_status), all: () => true }; const filteredRuns = safeArray(runs).filter(runFilterPredicates[filterKey] || runFilterPredicates.focus); @@ -1035,10 +1037,12 @@ function renderOneLinerRunsHtml() { 待确认 ${escapeHtml(formatNumber(pendingRunCount))} 执行中 ${escapeHtml(formatNumber(activeRunCount))} 已完成 ${escapeHtml(formatNumber(completedRunCount))} + 异常 ${escapeHtml(formatNumber(problemRunCount))}
${runs.length > 1 ? ` @@ -1057,6 +1061,9 @@ function renderOneLinerRunsHtml() { `).join("")} + ${!filteredRuns.length ? ` +