返回 DeepSeek-Reasonix
session_preview_upgrade.go
根目录 / desktop / session_preview_upgrade.go
1 package main
2
3 import (
4 "context"
5 "encoding/json"
6 "os"
7 "path/filepath"
8
9 "reasonix/internal/session"
10 )
11
12 func isDesktopStoredPreview(path string) (bool, error) {
13 body, err := os.ReadFile(filepath.Join(path, "manifest.json"))
14 if err != nil {
15 return false, err
16 }
17 var manifest session.Manifest
18 if err := json.Unmarshal(body, &manifest); err != nil {
19 return false, err
20 }
21 return (manifest.SchemaVersion == 3 && (manifest.Codec == session.PrototypeCodec || manifest.Codec == session.LegacyLinearCodec || manifest.Codec == session.FinalV31Codec)) ||
22 (manifest.SchemaVersion == session.SchemaVersion && manifest.Codec == session.Codec && manifest.StorageRevision == 0), nil
23 }
24
25 func stageDesktopStoredPreview(ctx context.Context, path string) (*session.Service, session.SessionRef, func(), error) {
26 tmp, err := os.MkdirTemp("", "reasonix-preview-upgrade-")
27 if err != nil {
28 return nil, session.SessionRef{}, nil, err
29 }
30 root := filepath.Join(tmp, "sessions")
31 result, err := session.ImportStoredPreview(ctx, path, root)
32 if err != nil {
33 _ = os.RemoveAll(tmp)
34 return nil, session.SessionRef{}, nil, err
35 }
36 service, err := session.NewService("preview-stage", session.NewFilesystemPersistence(root))
37 if err != nil {
38 _ = os.RemoveAll(tmp)
39 return nil, session.SessionRef{}, nil, err
40 }
41 cleanup := func() { _ = service.Shutdown(context.Background()); _ = os.RemoveAll(tmp) }
42 return service, session.SessionRef{HostID: "preview-stage", SessionID: result.TargetID}, cleanup, nil
43 }
44
45 func previewStoredRecovery(ctx context.Context, path string) (HistoryPage, error) {
46 stage, ref, cleanup, err := stageDesktopStoredPreview(ctx, path)
47 if err != nil {
48 return HistoryPage{Messages: []HistoryMessage{}}, err
49 }
50 defer cleanup()
51 messages, err := stage.Query().History(ctx, ref)
52 if err != nil {
53 return HistoryPage{Messages: []HistoryMessage{}}, err
54 }
55 return historyPageFromProviderMessages(messages, func(value string) string { return value }, nil, nil, 0, 32), nil
56 }
57
57 lines GO