返回 DeepSeek-Reasonix
canonicalHistoryWindow.ts
根目录 / desktop / frontend / src / lib / canonicalHistoryWindow.ts
1 import { app } from "./bridge";
2 import { asArray } from "./array";
3 import { entriesFor } from "./canonicalTranscriptBackend";
4 import type { HistoryWindowPage, PersistentMessage } from "../generated/desktopContract.generated";
5 import type { HistoryWindowPageView, HistoryWindowRequestView } from "./types";
6
7 function unsupportedWindow(): HistoryWindowPageView {
8 return {
9 entries: [], status: "unsupported", olderCursor: "", newerCursor: "",
10 hasOlder: false, hasNewer: false, totalTurns: 0, startTurn: 0, endTurn: 0,
11 revision: 0, revisionKnown: false, digest: "",
12 };
13 }
14
15 export async function readCanonicalHistoryWindow(tabId: string, req: HistoryWindowRequestView, remote: boolean): Promise<HistoryWindowPageView> {
16 let page: HistoryWindowPage;
17 if (remote) {
18 if (typeof app.RemoteSessionHistoryWindowForTab !== "function") {
19 return unsupportedWindow();
20 }
21 page = await app.RemoteSessionHistoryWindowForTab(tabId, req);
22 } else {
23 if (typeof app.SessionHistoryWindowForTab !== "function") {
24 return unsupportedWindow();
25 }
26 page = await app.SessionHistoryWindowForTab(tabId, req);
27 }
28 const status = (page.status || "ready") as HistoryWindowPageView["status"];
29 if (status === "unsupported") {
30 return unsupportedWindow();
31 }
32 const entries = entriesFor(asArray<PersistentMessage>(page.messages), page.snapshotSequence);
33 const turns = entries.map(entry => entry.turn).filter(turn => turn > 0);
34 return {
35 entries,
36 status,
37 olderCursor: page.olderCursor ?? "",
38 newerCursor: page.newerCursor ?? "",
39 hasOlder: Boolean(page.hasOlder),
40 hasNewer: Boolean(page.hasNewer),
41 totalTurns: page.totalTurns ?? (turns.length > 0 ? Math.max(...turns) : 0),
42 startTurn: turns.length > 0 ? Math.min(...turns) : 0,
43 endTurn: turns.length > 0 ? Math.max(...turns) : 0,
44 revision: page.snapshotSequence ?? 0,
45 revisionKnown: (page.snapshotSequence ?? 0) > 0,
46 digest: page.generation ?? "",
47 };
48 }
49
49 lines TYPESCRIPT