返回 DeepSeek-Reasonix
draftPresentation.ts
根目录 / desktop / frontend / src / app-shell / draftPresentation.ts
1 import type { SessionDraftSurface } from "../app-runtime/useSessionDraftSurface";
2
3 const DRAFT_ATTENTION_PHASES = new Set([
4 "accepted",
5 "dispatch_unknown",
6 "dispatching_shell",
7 "resume_required",
8 "runtime_failed",
9 "terminal_failed",
10 ]);
11
12 export function sameDraftError(left: string, right: string | undefined): boolean {
13 const normalize = (value: string) => value.trim().replace(/^Error:\s*/, "");
14 return Boolean(right) && normalize(left) === normalize(right!);
15 }
16
17 /** Healthy drafts use the new-session landing; recovery controls need room. */
18 export function draftSurfaceNeedsAttention(draft: SessionDraftSurface): boolean {
19 return draft.saveState === "conflict" || draft.saveState === "error" || Boolean(draft.taskError) || Boolean(draft.submissionError)
20 || Boolean(draft.operation && DRAFT_ATTENTION_PHASES.has(draft.operation.phase));
21 }
22
23 export function creationHeroVisible(draft: SessionDraftSurface | null | undefined, emptyHero: boolean): boolean {
24 // A hidden formal tab must not collapse the active draft's recovery surface.
25 return draft ? !draftSurfaceNeedsAttention(draft) : emptyHero;
26 }
27
27 lines TYPESCRIPT