refactor(frontend): 四生成 hook 结束后额外返回产物(AC-3 留痕前置)

useRefine.refine/recommunicate→RefineVersion|null、useContinue.generate→string|null、
useChapterRewrite.send→RewriteVersion|null、useGenerator.generate→GeneratorArtifact|null。
向后兼容(既有调用忽略返回值不受影响);各 hook 成功用例补返回值断言。
面板据此 if(artifact) 才 append,空候选/错误路径不留痕。
This commit is contained in:
Yaojia Wang
2026-07-09 17:15:49 +02:00
parent ddf7fa061a
commit 59f2f60a7e
8 changed files with 66 additions and 25 deletions

View File

@@ -51,13 +51,13 @@ export interface UseChapterRewrite {
// 已完成的版本栈(每轮一版)。
versions: RewriteVersion[];
latest: RewriteVersion | null;
// 发起一轮整章重写:作者意见 + 当前整章草稿 → 流式重写一版。
// 发起一轮整章重写:作者意见 + 当前整章草稿 → 流式重写一版。返回本版done 且有正文),否则 null。
send: (
projectId: string,
chapterNo: number,
feedback: string,
priorDraft: string,
) => Promise<void>;
) => Promise<RewriteVersion | null>;
stop: () => void;
reset: () => void;
}
@@ -115,7 +115,7 @@ export function useChapterRewrite(): UseChapterRewrite {
// 非 JSON 信封,沿用默认文案。
}
dispatch({ type: "fail", code, message });
return;
return null;
}
const reader = res.body.getReader();
const decoder = new TextDecoder();
@@ -137,13 +137,16 @@ export function useChapterRewrite(): UseChapterRewrite {
if (done && textRef.current.length > 0) {
const version: RewriteVersion = { feedback, text: textRef.current };
setVersions((prev) => [...prev, version]);
return version;
}
return null;
} catch (err: unknown) {
if (err instanceof DOMException && err.name === "AbortError") {
return; // 用户主动停止state 已置 aborted。
return null; // 用户主动停止state 已置 aborted。
}
const message = err instanceof Error ? err.message : "未知网络错误";
dispatch({ type: "fail", code: "NETWORK", message });
return null;
} finally {
controllerRef.current = null;
}