From cce8a78508ed411067c518ff56600d03e5e552e4 Mon Sep 17 00:00:00 2001 From: Codex Date: Tue, 5 May 2026 02:30:13 +0000 Subject: [PATCH] fix: prefer real provider upgrade records --- docs/reference/frontend.md | 2 +- src/components/frontend/src/app.tsx | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/reference/frontend.md b/docs/reference/frontend.md index 43da360d..c5c7f53f 100644 --- a/docs/reference/frontend.md +++ b/docs/reference/frontend.md @@ -28,7 +28,7 @@ frontend 应用源码必须使用 TypeScript + React,禁止在 `src/components ## Provider Gateway Version View -资源节点模块必须提供 `网关版本` 子标签,按每个 Provider 展示 provider-gateway 版本号、升级策略、启动时间、能力摘要、最近自动更新状态和自动更新记录。自动更新记录的数据源是 `provider.upgrade` 任务历史,默认必须渲染为结构化表格字段:状态、模式、任务 id、来源、耗时、策略、结果摘要和更新时间;不得把升级 plan、task result 或服务日志作为裸 JSON 直接铺在页面上。完整升级任务 JSON 只能通过对应行的 `查看原始JSON` 按钮显式打开。 +资源节点模块必须提供 `网关版本` 子标签,按每个 Provider 展示 provider-gateway 版本号、升级策略、启动时间、能力摘要、最近自动更新状态和自动更新记录。自动更新记录的数据源是 `provider.upgrade` 任务历史,默认必须渲染为结构化表格字段:状态、模式、任务 id、来源、耗时、策略、结果摘要和更新时间;不得把升级 plan、task result 或服务日志作为裸 JSON 直接铺在页面上。`最近自动更新` 应优先选择最新 `mode: "schedule"` 的真实升级记录,避免后续预检 plan 覆盖真正的升级结果;完整升级任务 JSON 只能通过对应行的 `查看原始JSON` 按钮显式打开。 ## Provider Gateway Upgrade Control diff --git a/src/components/frontend/src/app.tsx b/src/components/frontend/src/app.tsx index 6081e608..e622b63a 100644 --- a/src/components/frontend/src/app.tsx +++ b/src/components/frontend/src/app.tsx @@ -232,6 +232,10 @@ function providerUpgradeTasks(tasks: any[], providerId: string): any[] { .sort((left, right) => (timeMs(right.updatedAt) ?? 0) - (timeMs(left.updatedAt) ?? 0)); } +function latestScheduledUpgradeTask(records: any[]): any | null { + return records.find((task) => taskUpgradeMode(task) === "schedule") || records[0] || null; +} + async function requestJson(path: string, options: AnyRecord = {}): Promise { const headers = new Headers(options.headers || {}); if (options.body && !headers.has("content-type")) headers.set("content-type", "application/json"); @@ -749,7 +753,7 @@ function ProviderUpgradeRecordsPanel({ provider, tasks, onRaw, limit = 5 }: AnyR function GatewayVersionPage({ nodes, tasks, onRaw }: AnyRecord) { const rows = useMemo(() => nodes.map((node: any) => { const records = providerUpgradeTasks(tasks, node.providerId); - return { node, records, latest: records[0] || null, capabilities: nodeCapabilities(node) }; + return { node, records, latest: latestScheduledUpgradeTask(records), capabilities: nodeCapabilities(node) }; }), [nodes, tasks]); const totalRecords = rows.reduce((sum: number, row: any) => sum + row.records.length, 0);