返回 DeepSeek-Reasonix
extensionFormState.ts
根目录 / desktop / frontend / src / lib / extensionFormState.ts
1 import type { WireExtensionForm, WireExtensionSurface } from "./types";
2
3 export interface ExtensionStatusEntry {
4 pluginId: string;
5 surfaceId: string;
6 label: string;
7 detail?: string;
8 severity?: string;
9 progress?: number;
10 generation?: number;
11 }
12
13 export interface ExtensionFormState {
14 pluginId: string;
15 surfaceId: string;
16 sessionId?: string;
17 generation?: number;
18 formInstanceId: string;
19 formInstanceExact: boolean;
20 form: WireExtensionForm;
21 }
22
23 export interface ExtensionNotificationEntry {
24 id: string;
25 pluginId: string;
26 title: string;
27 body?: string;
28 severity?: string;
29 }
30
31 export function extensionSurfaceKey(surface: Pick<WireExtensionSurface, "pluginId" | "surfaceId">): string {
32 return `${surface.pluginId}:${surface.surfaceId}`;
33 }
34
35 export function acceptsExtensionGeneration(stored: number | undefined, incoming: number | undefined): boolean {
36 return incoming === undefined || stored === undefined || incoming >= stored;
37 }
38
39 export function applyExtensionForm<T extends { extensionForm?: ExtensionFormState }>(s: T, surface: WireExtensionSurface): T {
40 if (!surface.form) return s;
41 return {
42 ...s,
43 extensionForm: {
44 pluginId: surface.pluginId,
45 surfaceId: surface.surfaceId,
46 sessionId: surface.sessionId,
47 generation: surface.generation,
48 formInstanceId: surface.formInstanceId ?? JSON.stringify([surface.pluginId, surface.surfaceId, surface.generation ?? 0]),
49 formInstanceExact: Boolean(surface.formInstanceId),
50 form: surface.form,
51 },
52 };
53 }
54
54 lines TYPESCRIPT