diff --git a/apps/web/app/components/agent/agent-conversation.tsx b/apps/web/app/components/agent/agent-conversation.tsx
index 4495debf..552cf1e3 100644
--- a/apps/web/app/components/agent/agent-conversation.tsx
+++ b/apps/web/app/components/agent/agent-conversation.tsx
@@ -32,6 +32,8 @@ import {
useDecideApproval,
useIsAdminSession,
} from "~/api/agent.ts";
+import { DOWNLOAD_STATUS_LABEL, PLAN_STATUS_LABEL } from "~/api/downloads.ts";
+import { RECORD_STATUS_LABEL } from "~/api/records.ts";
import { ApprovalCard, type ApprovalCardStatus } from "~/components/agentui/approval-card.tsx";
import { type CitationItem, CitationList } from "~/components/agentui/citations.tsx";
import { CHEVRON_CLASS, Disclosure } from "~/components/agentui/disclosure.tsx";
@@ -51,8 +53,11 @@ import { StreamingCursor, StreamingResponse } from "~/components/agentui/streami
import { ToolApproval } from "~/components/agentui/tool-approval.tsx";
import { ToolResult, ToolResultOutput, type ToolResultStatus } from "~/components/agentui/tool-result.tsx";
import { StatusBadge, type StatusTone } from "~/components/console/status-badge.tsx";
+import { TechInfo } from "~/components/console/tech-info.tsx";
+import { formatUsd } from "~/components/schedules/labels.ts";
import { Button } from "~/components/ui/button.tsx";
import { errorMessage } from "~/lib/api.ts";
+import { humanizeReason } from "~/lib/reasons.ts";
import { cn, formatDateTime } from "~/lib/utils.ts";
import { InlineApproval, OptionsCard } from "./agent-interaction.tsx";
import { ToolCallIo } from "./tool-call-card-io.tsx";
@@ -103,16 +108,13 @@ function CapabilityBadges({ id, extra }: { id: string; extra?: ReactNode }) {
const m = capabilityMeta(id);
return (
<>
+ {/* 只标需要注意的:会改动数据的动作和中高风险;只读、scope、幂等进技术信息 */}
{m ? (
<>
-
仅供参考,不作为完成依据。
@@ -984,19 +1034,19 @@ export function FinalReport({
) : (
{report.summary}
-{p.planId.slice(0, 8)}
- - 取自下载计划、下载任务和整理记录(生成于 {formatDateTime(report.generatedAt)} - )。「已提交」指已进入下载器,整理成功才算入库。 -
> ) : (服务端汇报还没有生成,以任务和整理记录的实际状态为准。
)} {run.error ? ( -- {String((run.error as { message?: unknown }).message ?? JSON.stringify(run.error))} -
+ <> ++ {humanizeReason(String((run.error as { message?: unknown }).message ?? "")) || "会话出错"} +
+- {run.data ? splitContextGoal(run.data.run.goal).text : ""} + {run.data ? shortGoalTitle(run.data.run.goal) : ""}