@savestate/cli 0.1.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/adapters/chatgpt.d.ts +113 -0
  2. package/dist/adapters/chatgpt.d.ts.map +1 -0
  3. package/dist/adapters/chatgpt.js +668 -0
  4. package/dist/adapters/chatgpt.js.map +1 -0
  5. package/dist/adapters/claude-web.d.ts +81 -0
  6. package/dist/adapters/claude-web.d.ts.map +1 -0
  7. package/dist/adapters/claude-web.js +903 -0
  8. package/dist/adapters/claude-web.js.map +1 -0
  9. package/dist/adapters/gemini.d.ts +108 -0
  10. package/dist/adapters/gemini.d.ts.map +1 -0
  11. package/dist/adapters/gemini.js +814 -0
  12. package/dist/adapters/gemini.js.map +1 -0
  13. package/dist/adapters/index.d.ts +1 -0
  14. package/dist/adapters/index.d.ts.map +1 -1
  15. package/dist/adapters/index.js +1 -0
  16. package/dist/adapters/index.js.map +1 -1
  17. package/dist/adapters/openai-assistants.d.ts +79 -36
  18. package/dist/adapters/openai-assistants.d.ts.map +1 -1
  19. package/dist/adapters/openai-assistants.js +802 -78
  20. package/dist/adapters/openai-assistants.js.map +1 -1
  21. package/dist/adapters/registry.d.ts.map +1 -1
  22. package/dist/adapters/registry.js +6 -4
  23. package/dist/adapters/registry.js.map +1 -1
  24. package/dist/commands/adapters.js +5 -5
  25. package/dist/commands/adapters.js.map +1 -1
  26. package/dist/commands/config.d.ts.map +1 -1
  27. package/dist/commands/config.js +40 -9
  28. package/dist/commands/config.js.map +1 -1
  29. package/dist/storage/index.d.ts +2 -0
  30. package/dist/storage/index.d.ts.map +1 -1
  31. package/dist/storage/index.js +1 -0
  32. package/dist/storage/index.js.map +1 -1
  33. package/dist/storage/resolve.d.ts.map +1 -1
  34. package/dist/storage/resolve.js +19 -4
  35. package/dist/storage/resolve.js.map +1 -1
  36. package/dist/storage/s3.d.ts +64 -0
  37. package/dist/storage/s3.d.ts.map +1 -0
  38. package/dist/storage/s3.js +360 -0
  39. package/dist/storage/s3.js.map +1 -0
  40. package/package.json +1 -1
@@ -0,0 +1,113 @@
1
+ /**
2
+ * ChatGPT Adapter
3
+ *
4
+ * Export-based adapter for ChatGPT data.
5
+ * Captures conversations, memories, custom instructions, and user profile
6
+ * from a ChatGPT data export (Settings → Data Controls → Export Data).
7
+ *
8
+ * Export structure:
9
+ * conversations.json — All conversations (tree-structured mapping)
10
+ * memories.json — ChatGPT memories (newer exports)
11
+ * custom_instructions.json — About user + response preferences
12
+ * user.json — User profile metadata
13
+ * model_comparisons.json — A/B testing data
14
+ * shared_conversations.json — Publicly shared conversations
15
+ * message_feedback.json — Thumbs up/down on messages
16
+ * chat.html — HTML render of conversations
17
+ *
18
+ * Detection:
19
+ * - SAVESTATE_CHATGPT_EXPORT env var → path to export directory or zip
20
+ * - chatgpt-export/ or conversations.json in cwd
21
+ * - .savestate/imports/chatgpt/ extracted export
22
+ *
23
+ * Restore is partial — ChatGPT has no public API for importing
24
+ * conversations. Generates chatgpt-restore-guide.md with data
25
+ * for manual re-entry.
26
+ */
27
+ import type { Adapter, PlatformMeta, Snapshot } from '../types.js';
28
+ export declare class ChatGPTAdapter implements Adapter {
29
+ readonly id = "chatgpt";
30
+ readonly name = "ChatGPT";
31
+ readonly platform = "chatgpt";
32
+ readonly version = "0.1.0";
33
+ private exportDir;
34
+ private warnings;
35
+ detect(): Promise<boolean>;
36
+ extract(): Promise<Snapshot>;
37
+ restore(snapshot: Snapshot): Promise<void>;
38
+ identify(): Promise<PlatformMeta>;
39
+ /**
40
+ * Resolve the export directory path from env var, cwd, or .savestate/imports/.
41
+ * Returns null if no valid export is found.
42
+ */
43
+ private resolveExportPath;
44
+ /**
45
+ * Check if a directory contains ChatGPT export files.
46
+ */
47
+ private hasExportFiles;
48
+ /**
49
+ * Safely read and parse a JSON file from the export directory.
50
+ */
51
+ private readJsonFile;
52
+ /**
53
+ * Read user.json for profile metadata.
54
+ */
55
+ private readUserJson;
56
+ /**
57
+ * Read custom_instructions.json and build personality string.
58
+ */
59
+ private readCustomInstructions;
60
+ /**
61
+ * Read memories.json into MemoryEntry array.
62
+ */
63
+ private readMemories;
64
+ /**
65
+ * Read conversations.json, walk tree structures, and produce metadata + entries.
66
+ */
67
+ private readConversations;
68
+ /**
69
+ * Walk the conversation tree (mapping) and produce a linear list of messages.
70
+ *
71
+ * Algorithm:
72
+ * 1. Find root node (parent is null or missing)
73
+ * 2. Walk children depth-first
74
+ * 3. When a node has multiple children (branching = user edited), take the last branch
75
+ * 4. Skip null/system messages without content
76
+ * 5. Collect messages in order
77
+ */
78
+ private walkConversationTree;
79
+ /**
80
+ * Recursively collect messages by walking the tree depth-first.
81
+ * For branches (multiple children), take the last child (most recent edit/branch).
82
+ */
83
+ private collectMessages;
84
+ /**
85
+ * Extract a Message from a ChatGPT message node.
86
+ * Returns null if the message should be skipped (system, empty, etc.)
87
+ */
88
+ private extractMessage;
89
+ /**
90
+ * Extract text from ChatGPT content structure.
91
+ * Handles content_type: "text", "code", "tether_browsing_display", etc.
92
+ */
93
+ private extractContent;
94
+ /**
95
+ * Build the chatgpt-restore-guide.md content.
96
+ */
97
+ private buildRestoreGuide;
98
+ /**
99
+ * Build a standalone memories document.
100
+ */
101
+ private buildMemoriesDoc;
102
+ /**
103
+ * Build a standalone custom instructions document.
104
+ */
105
+ private buildInstructionsDoc;
106
+ private log;
107
+ private warn;
108
+ /**
109
+ * Simple string hash for generating IDs when conversation_id is missing.
110
+ */
111
+ private hashString;
112
+ }
113
+ //# sourceMappingURL=chatgpt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt.d.ts","sourceRoot":"","sources":["../../src/adapters/chatgpt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,QAAQ,EAKT,MAAM,aAAa,CAAC;AAkFrB,qBAAa,cAAe,YAAW,OAAO;IAC5C,QAAQ,CAAC,EAAE,aAAa;IACxB,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,OAAO,WAAW;IAE3B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAgB;IAE1B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAK1B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;IAwH5B,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C1C,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAUvC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAmDzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;YACW,YAAY;IAa1B;;OAEG;YACW,YAAY;IAc1B;;OAEG;YACW,sBAAsB;IA2BpC;;OAEG;YACW,YAAY;IAqB1B;;OAEG;YACW,iBAAiB;IAsF/B;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAwBvB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAyCtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAwCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuFzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,IAAI;IAIZ;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}