@savestate/cli 0.4.2 → 0.6.0

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/README.md +34 -6
  2. package/dist/adapters/clawdbot.d.ts +69 -58
  3. package/dist/adapters/clawdbot.d.ts.map +1 -1
  4. package/dist/adapters/clawdbot.js +375 -101
  5. package/dist/adapters/clawdbot.js.map +1 -1
  6. package/dist/cli.js +8 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/mcp/server.d.ts +26 -0
  9. package/dist/mcp/server.d.ts.map +1 -0
  10. package/dist/mcp/server.js +371 -0
  11. package/dist/mcp/server.js.map +1 -0
  12. package/dist/migrate/capabilities.d.ts +23 -0
  13. package/dist/migrate/capabilities.d.ts.map +1 -0
  14. package/dist/migrate/capabilities.js +80 -0
  15. package/dist/migrate/capabilities.js.map +1 -0
  16. package/dist/migrate/extractors/registry.d.ts +24 -0
  17. package/dist/migrate/extractors/registry.d.ts.map +1 -0
  18. package/dist/migrate/extractors/registry.js +38 -0
  19. package/dist/migrate/extractors/registry.js.map +1 -0
  20. package/dist/migrate/index.d.ts +13 -0
  21. package/dist/migrate/index.d.ts.map +1 -0
  22. package/dist/migrate/index.js +15 -0
  23. package/dist/migrate/index.js.map +1 -0
  24. package/dist/migrate/loaders/registry.d.ts +24 -0
  25. package/dist/migrate/loaders/registry.d.ts.map +1 -0
  26. package/dist/migrate/loaders/registry.js +38 -0
  27. package/dist/migrate/loaders/registry.js.map +1 -0
  28. package/dist/migrate/orchestrator.d.ts +77 -0
  29. package/dist/migrate/orchestrator.d.ts.map +1 -0
  30. package/dist/migrate/orchestrator.js +322 -0
  31. package/dist/migrate/orchestrator.js.map +1 -0
  32. package/dist/migrate/transformers/registry.d.ts +27 -0
  33. package/dist/migrate/transformers/registry.d.ts.map +1 -0
  34. package/dist/migrate/transformers/registry.js +47 -0
  35. package/dist/migrate/transformers/registry.js.map +1 -0
  36. package/dist/migrate/types.d.ts +350 -0
  37. package/dist/migrate/types.d.ts.map +1 -0
  38. package/dist/migrate/types.js +8 -0
  39. package/dist/migrate/types.js.map +1 -0
  40. package/package.json +4 -2
package/README.md CHANGED
@@ -60,12 +60,40 @@ savestate restore latest
60
60
 
61
61
  | Platform | Extract | Restore | Status |
62
62
  |----------|---------|---------|--------|
63
- | **Clawdbot / Moltbot** | ✅ | ✅ | Available now |
64
- | **OpenAI Assistants API** | ✅ | ✅ | Coming soon |
65
- | **Custom file-based agents** | ✅ | ✅ | Coming soon |
66
- | **ChatGPT** | ✅ | ⚠️ Partial | Planned |
67
- | **Claude** | ✅ | ⚠️ Partial | Planned |
68
- | **Gemini** | ✅ | ⚠️ Limited | Planned |
63
+ | **OpenClaw / Clawdbot / Moltbot** | ✅ | ✅ | **Full support** |
64
+ | **OpenAI Assistants API** | ✅ | ✅ | Available |
65
+ | **Claude Code** | ✅ | ✅ | Available |
66
+ | **ChatGPT** | ✅ | ⚠️ Partial | Available |
67
+ | **Claude (consumer)** | ✅ | ⚠️ Partial | Available |
68
+ | **Gemini** | ✅ | ⚠️ Limited | Available |
69
+
70
+ ### OpenClaw Full Backup (v0.3.0+)
71
+
72
+ The OpenClaw adapter captures your **complete agent state**:
73
+
74
+ | Component | What's Captured |
75
+ |-----------|-----------------|
76
+ | **Identity** | SOUL.md, USER.md, AGENTS.md, TOOLS.md, IDENTITY.md |
77
+ | **Memory** | MEMORY.md, memory/*.md, memory SQLite databases |
78
+ | **Skills** | All SKILL.md files + scripts |
79
+ | **Scripts** | personal-scripts/, cron-wrappers/ |
80
+ | **Extensions** | Extension configs |
81
+ | **Conversations** | All session JSONL files (1000+ sessions) |
82
+ | **Gateway Config** | openclaw.json (agent defs, models, routing) |
83
+ | **Cron Jobs** | Scheduled tasks and behaviors |
84
+ | **Channel State** | Telegram offsets, message continuity |
85
+ | **Device Identity** | Device pairing, node relationships |
86
+
87
+ ```bash
88
+ # Full backup including semantic memory DBs
89
+ savestate snapshot
90
+
91
+ # Include credentials (channel auth tokens)
92
+ savestate snapshot --include-credentials
93
+
94
+ # Backup specific agent only
95
+ savestate snapshot --agent-id main
96
+ ```
69
97
 
70
98
  Community adapters welcome! See [Contributing](#contributing).
71
99
 
@@ -1,93 +1,104 @@
1
1
  /**
2
- * Clawdbot Adapter
2
+ * Clawdbot / OpenClaw Adapter
3
3
  *
4
- * First-party adapter for Clawdbot / Moltbot workspaces.
5
- * Reads SOUL.md, MEMORY.md, memory/, USER.md, TOOLS.md,
6
- * skills/, personal-scripts/, extensions/, conversation logs,
7
- * cron wrappers, and config files.
4
+ * First-party adapter for Clawdbot / Moltbot / OpenClaw workspaces.
8
5
  *
9
- * This is the dogfood adapter — SaveState eats its own cooking.
6
+ * Captures:
7
+ * Workspace: SOUL.md, MEMORY.md, memory/, USER.md, TOOLS.md, AGENTS.md
8
+ * Skills: SKILL.md + scripts per skill
9
+ * Personal scripts: personal-scripts/, cron-wrappers/
10
+ * Extensions: extension configs
11
+ * Conversations: session JSONL files
12
+ *
13
+ * NEW in v0.3.0 - Full OpenClaw runtime state:
14
+ * Gateway config: openclaw.json (agent defs, model config, routing)
15
+ * Cron jobs: cron/jobs.json (scheduled behaviors)
16
+ * Credentials: channel auth, OAuth tokens
17
+ * Device identity: device pairing
18
+ * Paired nodes: mobile node pairing
19
+ * Memory databases: SQLite semantic memory
20
+ * Channel state: telegram offsets, whatsapp session, etc.
21
+ *
22
+ * This is the dogfood adapter - SaveState eats its own cooking.
10
23
  */
11
24
  import type { Adapter, PlatformMeta, Snapshot } from '../types.js';
25
+ export interface OpenClawState {
26
+ /** Gateway configuration (openclaw.json) */
27
+ gatewayConfig?: string;
28
+ /** Cron jobs configuration */
29
+ cronJobs?: string;
30
+ /** Device identity */
31
+ deviceIdentity?: Record<string, string>;
32
+ /** Paired nodes */
33
+ pairedNodes?: Record<string, string>;
34
+ /** Channel credentials (redacted by default) */
35
+ credentials?: Record<string, string>;
36
+ /** Channel state (telegram offsets, etc.) */
37
+ channelState?: Record<string, string>;
38
+ /** Memory database paths (for binary backup) */
39
+ memoryDatabases?: MemoryDatabaseEntry[];
40
+ }
41
+ export interface MemoryDatabaseEntry {
42
+ /** Agent ID this database belongs to */
43
+ agentId: string;
44
+ /** Relative path within archive */
45
+ archivePath: string;
46
+ /** Original file path */
47
+ sourcePath: string;
48
+ /** Size in bytes */
49
+ size: number;
50
+ /** SHA-256 checksum */
51
+ checksum: string;
52
+ }
53
+ export interface ClawdbotAdapterOptions {
54
+ /** Include credentials in backup (default: false for security) */
55
+ includeCredentials?: boolean;
56
+ /** Include memory SQLite databases (default: true, but large!) */
57
+ includeMemoryDatabases?: boolean;
58
+ /** Redact API keys from gateway config (default: true) */
59
+ redactSecrets?: boolean;
60
+ /** Specific agent ID to backup (default: all agents) */
61
+ agentId?: string;
62
+ }
12
63
  export declare class ClawdbotAdapter implements Adapter {
13
64
  readonly id = "clawdbot";
14
- readonly name = "Clawdbot";
15
- readonly platform = "clawdbot";
16
- readonly version = "0.2.0";
65
+ readonly name = "OpenClaw";
66
+ readonly platform = "openclaw";
67
+ readonly version = "0.3.0";
17
68
  private readonly workspaceDir;
69
+ private readonly options;
18
70
  private warnings;
19
- constructor(workspaceDir?: string);
71
+ constructor(workspaceDir?: string, options?: ClawdbotAdapterOptions);
20
72
  detect(): Promise<boolean>;
21
73
  extract(): Promise<Snapshot>;
22
74
  restore(snapshot: Snapshot): Promise<void>;
23
75
  identify(): Promise<PlatformMeta>;
24
- /**
25
- * Check if a file should be skipped (binary or too large).
26
- */
76
+ private findOpenClawConfigDir;
77
+ private readOpenClawState;
78
+ private readDirectoryFiles;
79
+ private indexMemoryDatabases;
80
+ private redactSensitiveData;
81
+ private redactObject;
82
+ private restoreOpenClawState;
27
83
  private isBinary;
28
84
  private checkFileSize;
29
85
  private safeReadFile;
30
86
  private readIdentity;
31
87
  private readMemory;
32
88
  private readConversations;
33
- /**
34
- * Read skills/ directory — capture SKILL.md and scripts/ for each skill.
35
- */
36
89
  private readSkills;
37
- /**
38
- * Read personal-scripts/ and personal-scripts/cron-wrappers/
39
- */
40
90
  private readScripts;
41
- /**
42
- * Read extensions/ directory configs (skip node_modules and binary files).
43
- */
44
91
  private readExtensions;
45
- /**
46
- * Read config files from workspace root.
47
- */
48
92
  private readConfigFiles;
49
- /**
50
- * Build knowledge documents index from skills and scripts.
51
- */
52
93
  private buildKnowledgeIndex;
53
- private readJsonSafe;
54
- /**
55
- * Walk a directory recursively and return file paths matching optional extensions.
56
- */
57
94
  private walkDir;
58
- /**
59
- * Parse concatenated personality back into individual files and write them.
60
- * Files are joined with `--- FILENAME ---` markers.
61
- */
62
95
  private restoreIdentity;
63
- /**
64
- * Parse the concatenated personality string into individual files.
65
- * Format: `--- FILENAME ---\ncontent\n\n--- NEXTFILE ---\ncontent`
66
- */
67
96
  private parsePersonality;
68
- /**
69
- * Restore memory entries back to their source files.
70
- */
71
97
  private restoreMemory;
72
- /**
73
- * Restore skills back to skills/ directory.
74
- */
75
98
  private restoreSkills;
76
- /**
77
- * Restore personal scripts.
78
- */
79
99
  private restoreScripts;
80
- /**
81
- * Restore extension configs.
82
- */
83
100
  private restoreExtensions;
84
- /**
85
- * Restore config files to workspace root.
86
- */
87
101
  private restoreConfigFiles;
88
- /**
89
- * Create a .bak backup of an existing file before overwriting.
90
- */
91
102
  private backupFile;
92
103
  }
93
104
  //# sourceMappingURL=clawdbot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clawdbot.d.ts","sourceRoot":"","sources":["../../src/adapters/clawdbot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,QAAQ,EAOT,MAAM,aAAa,CAAC;AAqCrB,qBAAa,eAAgB,YAAW,OAAO;IAC7C,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,OAAO,WAAW;IAE3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,YAAY,CAAC,EAAE,MAAM;IAI3B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAW1B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;IAwF5B,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B1C,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAoBvC;;OAEG;IACH,OAAO,CAAC,QAAQ;YAMF,aAAa;YAab,YAAY;YAcZ,YAAY;YAcZ,UAAU;YA8CV,iBAAiB;IAoD/B;;OAEG;YACW,UAAU;IAoExB;;OAEG;YACW,WAAW;IAsBzB;;OAEG;YACW,cAAc;IA2C5B;;OAEG;YACW,eAAe;IAyB7B;;OAEG;YACW,mBAAmB;YAmCnB,YAAY;IAS1B;;OAEG;YACW,OAAO;IA2BrB;;;OAGG;YACW,eAAe;IAe7B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;OAEG;YACW,aAAa;IAe3B;;OAEG;YACW,aAAa;IAc3B;;OAEG;YACW,cAAc;IAS5B;;OAEG;YACW,iBAAiB;IAa/B;;OAEG;YACW,kBAAkB;IAUhC;;OAEG;YACW,UAAU;CAUzB"}
1
+ {"version":3,"file":"clawdbot.d.ts","sourceRoot":"","sources":["../../src/adapters/clawdbot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,QAAQ,EAOT,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gDAAgD;IAChD,eAAe,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AA8CD,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kEAAkE;IAClE,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,0DAA0D;IAC1D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAgB,YAAW,OAAO;IAC7C,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,OAAO,WAAW;IAE3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB;IAU7D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAe1B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;IAuH5B,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC1C,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IA8BvC,OAAO,CAAC,qBAAqB;YAYf,iBAAiB;YAqFjB,kBAAkB;YAwBlB,oBAAoB;IAmClC,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,YAAY;YAyBN,oBAAoB;IAiFlC,OAAO,CAAC,QAAQ;YAMF,aAAa;YAab,YAAY;YAcZ,YAAY;YAcZ,UAAU;YA8CV,iBAAiB;YA8DjB,UAAU;YAmEV,WAAW;YAsBX,cAAc;YA0Cd,eAAe;YAwBf,mBAAmB;YAmCnB,OAAO;YA2BP,eAAe;IAW7B,OAAO,CAAC,gBAAgB;YAoBV,aAAa;YASb,aAAa;YAcb,cAAc;YASd,iBAAiB;YAajB,kBAAkB;YAUlB,UAAU;CAUzB"}