([]);
@@ -154,6 +171,7 @@ export default function RoundtablePlanningPage() {
const step2 = useStep2Orchestration({
currentStep,
selectedModel,
+ orchestrationMode,
buildInitialIntent,
triggerToast,
setRoles,
@@ -189,6 +207,9 @@ export default function RoundtablePlanningPage() {
triggerToast,
intentSending: step1.isIntentSending,
step2FinalizedCount,
+ step3SavedTick,
+ getStep3Snapshot: () => step3Report,
+ hydrateStep3: (snapshot) => setStep3Report(snapshot),
getStep1Snapshot: () => ({
intentThreadId: step1.intentThreadId,
intentReady: step1.intentReady,
@@ -205,9 +226,17 @@ export default function RoundtablePlanningPage() {
consensusPercentage: step2.consensusPercentage,
budgetLimit: step2.budgetLimit,
seatStubMessages: step2.seatStubMessages,
+ orchestrationMode,
+ chain: chainMeta,
}),
hydrateStep1: step1.hydrateFromDraft,
- hydrateStep2: step2.hydrateFromDraft,
+ // 包一层:先把页面持有的编排模式 / 链条恢复出来(老草稿无字段 → recommend),
+ // 再交给 step2 hook 恢复其余 Step 2 状态。
+ hydrateStep2: (snapshot) => {
+ setOrchestrationMode(snapshot.orchestrationMode ?? "recommend");
+ setChainMeta(snapshot.chain ?? null);
+ step2.hydrateFromDraft(snapshot);
+ },
cancelAllStreams: () => {
step2.abortAllInFlight();
step1.stopIntentStream();
@@ -267,23 +296,33 @@ export default function RoundtablePlanningPage() {
// ─── 步骤间转场 handler ───────────────────────────────────
const handleConfirmAgents = useCallback(
- (agents: Array<{ agent_id: string; name: string }>) => {
- const normalized: SelectedAgent[] = agents.map(({ agent_id, name }) => ({
+ (result: SeatSelectionResult) => {
+ const normalized: SelectedAgent[] = result.agents.map(({ agent_id, name }) => ({
agent_id,
// 内置 agent 走 BUILTIN_AGENT_META;非内置用候选池传过来的 name。
name: BUILTIN_AGENT_META[agent_id]?.displayName ?? name ?? agent_id,
}));
step2.setSelectedAgents(normalized);
step2.resetInitGate();
+ // result.mode 决定 Step 2 编排:recommend = 总控自由派活;chain = 按链条顺序派活。
+ setOrchestrationMode(result.mode);
+ setChainMeta(result.mode === "chain" ? result.chain ?? null : null);
setIsRecommendDialogOpen(false);
setCurrentStep(2);
- triggerToast("成功确认!已切换至第二阶段圆桌研讨系统");
+ triggerToast(
+ result.mode === "chain"
+ ? `成功确认!将按业务链条「${result.chain?.title ?? ""}」顺序研讨`
+ : "成功确认!已切换至第二阶段圆桌研讨系统",
+ );
},
[step2, triggerToast],
);
const handleStartNewTask = useCallback(() => {
step2.resetStep2State();
+ setOrchestrationMode("recommend");
+ setChainMeta(null);
+ setStep3Report(null);
step1.stopIntentStream();
drafts.loadedFromDraftRef.current = false;
drafts.setCurrentDraftId(null);
@@ -353,6 +392,16 @@ export default function RoundtablePlanningPage() {
/>
+
+