返回 DeepSeek-Reasonix
taskCatalogBridge.ts
根目录 / desktop / frontend / src / lib / taskCatalogBridge.ts
1 import type { ControlResult } from "./types";
2 import type {
3 TaskActionRequest, TaskCatalogStatus, TaskEventPage, TaskEventPageRequest, TaskPage, TaskPageRequest,
4 } from "./taskCatalogTypes";
5
6 export interface TaskCatalogBindings {
7 ListTaskPage(req: TaskPageRequest): Promise<TaskPage>;
8 ListTaskEventPage(req: TaskEventPageRequest): Promise<TaskEventPage>;
9 StopTaskByKey(req: TaskActionRequest): Promise<ControlResult>;
10 CancelTaskByKey(req: TaskActionRequest): Promise<ControlResult>;
11 RequeueTaskByKey(req: TaskActionRequest): Promise<ControlResult>;
12 OpenTaskSessionByKey(req: { projectKey: string; taskId: string }): Promise<ControlResult>;
13 GetTaskCatalogStatus(): Promise<TaskCatalogStatus>;
14 RebuildTaskCatalog(): Promise<void>;
15 }
16
17 export function makeMockTaskCatalogBindings(): TaskCatalogBindings {
18 const unavailable = (command: string): ControlResult => ({ schema_version: 1, command, task_id: "", accepted: false, idempotent: false, error: { code: "mock", message: "not available in browser mock" } });
19 return {
20 async ListTaskPage() { return { items: [], nextCursor: "", revision: 1, partial: false, staleCursor: false, status: await this.GetTaskCatalogStatus() }; },
21 async ListTaskEventPage(req) { return { items: [], nextSequence: req.after, partial: false }; },
22 async StopTaskByKey() { return unavailable("stop"); }, async CancelTaskByKey() { return unavailable("cancel"); },
23 async RequeueTaskByKey() { return unavailable("requeue"); }, async OpenTaskSessionByKey() { return unavailable("open_session"); },
24 async GetTaskCatalogStatus() { return { state: "ready", mode: "memory", revision: 1, indexed: 0, total: 0, pending: 0, failed: 0 }; },
25 async RebuildTaskCatalog() {},
26 };
27 }
28
28 lines TYPESCRIPT