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

@@ -26,18 +26,19 @@ export interface UseRefine {
latest: RefineVersion | null;
// 最初选中的原文accept 回填的对比基线)。
original: string | null;
// 回炉并返回本版产出(供调用方在结束后留痕);失败返回 null。
refine: (
projectId: string,
chapterNo: number,
segment: string,
instruction?: string,
) => Promise<void>;
// 以上一版产出为输入 + 作者新意见再回炉一次。无历史版本时为空操作。
) => Promise<RefineVersion | null>;
// 以上一版产出为输入 + 作者新意见再回炉一次。无历史版本时为空操作(返回 null
recommunicate: (
projectId: string,
chapterNo: number,
instruction: string,
) => Promise<void>;
) => Promise<RefineVersion | null>;
reset: () => void;
}
@@ -52,7 +53,7 @@ export function useRefine(): UseRefine {
chapterNo: number,
segment: string,
instruction: string,
): Promise<void> => {
): Promise<RefineVersion | null> => {
setStatus("refining");
try {
const trimmed = instruction.trim();
@@ -66,16 +67,20 @@ export function useRefine(): UseRefine {
if (error || !data) {
setStatus("error");
toast("回炉失败,请重试。", "error");
return;
return null;
}
setVersions((prev) => [
...prev,
{ segment, instruction: trimmed, refined: data.refined },
]);
const version: RefineVersion = {
segment,
instruction: trimmed,
refined: data.refined,
};
setVersions((prev) => [...prev, version]);
setStatus("ready");
return version;
} catch {
setStatus("error");
toast("回炉请求异常,请检查网络。", "error");
return null;
}
},
[toast],
@@ -91,7 +96,7 @@ export function useRefine(): UseRefine {
(projectId, chapterNo, instruction) => {
const last = versions[versions.length - 1];
// 无历史版本 → 无从「再沟通」;空操作,不打后端。
if (!last) return Promise.resolve();
if (!last) return Promise.resolve(null);
return runRefine(projectId, chapterNo, last.refined, instruction);
},
[runRefine, versions],