diff --git a/frontend-web/src/pages/official-multi-agent-tasks/components/AgentFlow.tsx b/frontend-web/src/pages/official-multi-agent-tasks/components/AgentFlow.tsx
index 6b4af95d..9a927c49 100644
--- a/frontend-web/src/pages/official-multi-agent-tasks/components/AgentFlow.tsx
+++ b/frontend-web/src/pages/official-multi-agent-tasks/components/AgentFlow.tsx
@@ -34,6 +34,39 @@ export default function AgentFlow({
}: AgentFlowProps) {
const seatById = new Map(seats.map((seat) => [seat.agent_id, seat]));
+ // 只有一个阶段时不画阶段框:席位直接横向排列。
+ if (stages.length === 1) {
+ return (
+
+ {stages[0]!.map((agentId) => {
+ const seat = seatById.get(agentId);
+ const state = seatStates?.[agentId] ?? null;
+ return (
+
+
+
+
+ {seat?.name ?? agentId}
+ {state && (
+
+ )}
+
+ );
+ })}
+
+ );
+ }
+
return (
{stages.map((stage, stageIndex) => {
diff --git a/frontend-web/src/pages/official-multi-agent-tasks/multi-agent-tasks.css b/frontend-web/src/pages/official-multi-agent-tasks/multi-agent-tasks.css
index 9263b730..69f67d80 100644
--- a/frontend-web/src/pages/official-multi-agent-tasks/multi-agent-tasks.css
+++ b/frontend-web/src/pages/official-multi-agent-tasks/multi-agent-tasks.css
@@ -549,6 +549,11 @@
.mat-flow--sm .mat-flow-stage { padding: 6px; }
.mat-flow--sm .mat-flow-stage-head { margin-bottom: 6px; }
+/* 单阶段:无阶段框,席位横向并排 */
+.mat-flow--single {
+ gap: 6px;
+}
+
/* 席位胶囊:浅底(-03 系)+ 深字(-10 系)+ 实填头像(-09),色序=§1.1.10 */
.mat-seat {
align-items: center;
diff --git a/frontend-web/src/pages/official-task-analysis/store.ts b/frontend-web/src/pages/official-task-analysis/store.ts
index b48b35e0..39c24fa7 100644
--- a/frontend-web/src/pages/official-task-analysis/store.ts
+++ b/frontend-web/src/pages/official-task-analysis/store.ts
@@ -26,7 +26,7 @@ import type {
TaTask,
} from "./types";
-const STORAGE_KEY = "deerflow.official.task-analysis.v1";
+const STORAGE_KEY = "deerflow.official.task-analysis.v2";
interface TaStore {
tasks: TaTask[];
@@ -126,8 +126,8 @@ function seedStore(): TaStore {
name: "竞品新品发布追踪",
description: "追踪 5 家核心竞品的新品发布与市场反应,按块更新详情内容。",
binding: {
- chainId: "seed-chain-std",
- chainTitle: "标准舆情分析链",
+ chainId: "seed-chain-single",
+ chainTitle: "单阶段并行分析链",
cron: "30 8 * * 1",
cronText: "每周一 08:30",
enabled: false,
@@ -156,6 +156,7 @@ function seedStore(): TaStore {
["analyst"],
["writer"],
];
+ const singleStages = [["collector", "verifier", "analyst"]];
const stdNames = seats;
const runs: TaRunRecord[] = [
@@ -202,9 +203,9 @@ function seedStore(): TaStore {
trigger: "schedule",
scheduledFor: hoursAgo(24 * 3),
startedAt: hoursAgo(24 * 3),
- durationMs: PENDING_MS + stdStages.length * STAGE_MS,
- stages: stdStages,
- stageGoals: ["并行完成全网采集与数据核查", "研判风险与行动方向", "汇总各块结论"],
+ durationMs: PENDING_MS + singleStages.length * STAGE_MS,
+ stages: singleStages,
+ stageGoals: ["三席并行:采集 / 核查 / 研判同时产出"],
seatNames: stdNames,
failStage: null,
},
@@ -507,6 +508,9 @@ export function chainStagesOf(
["writer"],
];
}
+ if (binding.chainId === "seed-chain-single") {
+ return [["collector", "verifier", "analyst"]];
+ }
// 真实业务链的编排由页面侧传入的 chain 数据展开;存储层兜底为单席位串行。
const seats = seedSeatsOf(store);
return seats.map((agentId) => [agentId]);
diff --git a/frontend-web/src/pages/official-task-analysis/task-analysis.css b/frontend-web/src/pages/official-task-analysis/task-analysis.css
index 3d499f08..b6bd9276 100644
--- a/frontend-web/src/pages/official-task-analysis/task-analysis.css
+++ b/frontend-web/src/pages/official-task-analysis/task-analysis.css
@@ -939,15 +939,14 @@
}
.ta-chain-card {
- align-items: center;
background: var(--mat-panel);
border: 1px solid var(--mat-line);
border-radius: 4px;
cursor: pointer;
- display: grid;
+ display: flex;
font: inherit;
- gap: 4px 16px;
- grid-template-columns: minmax(220px, 320px) minmax(0, 1fr);
+ flex-direction: column;
+ gap: 8px;
padding: 12px 16px;
text-align: left;
transition: border-color 120ms ease, box-shadow 120ms ease;
@@ -968,8 +967,6 @@
color: var(--mat-primary);
display: flex;
gap: 6px;
- grid-column: 1;
- width: 100%;
}
.ta-chain-card.is-active header svg {
@@ -999,18 +996,14 @@
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
font-size: 12px;
- grid-column: 1;
line-height: 1.5;
margin: 0;
overflow: hidden;
}
.ta-chain-card-flow {
- align-self: center;
background: var(--fs-004-02);
border-radius: 2px;
- grid-column: 2;
- grid-row: 1 / span 2;
overflow-x: auto;
padding: 8px;
width: 100%;
@@ -1341,13 +1334,4 @@
.ta-chain-grid {
grid-template-columns: 1fr;
}
-
- .ta-chain-card {
- grid-template-columns: 1fr;
- }
-
- .ta-chain-card-flow {
- grid-column: 1;
- grid-row: auto;
- }
}
diff --git a/offline-backend-20260512/backend/packages/harness/deerflow/persistence/migrations/versions/20260909_01_merge_assistant_wiki_and_report_collaboration_heads.py b/offline-backend-20260512/backend/packages/harness/deerflow/persistence/migrations/versions/20260909_01_merge_assistant_wiki_and_report_collaboration_heads.py
new file mode 100644
index 00000000..4a3707a4
--- /dev/null
+++ b/offline-backend-20260512/backend/packages/harness/deerflow/persistence/migrations/versions/20260909_01_merge_assistant_wiki_and_report_collaboration_heads.py
@@ -0,0 +1,21 @@
+"""Merge assistant-wiki metadata and report-collaboration heads.
+
+Revision ID: 20260909_01
+Revises: 20260903_01, 20260907_01
+Create Date: 2026-09-09
+"""
+
+from __future__ import annotations
+
+revision = "20260909_01"
+down_revision = ("20260903_01", "20260907_01")
+branch_labels = None
+depends_on = None
+
+
+def upgrade() -> None:
+ pass
+
+
+def downgrade() -> None:
+ pass