visionclaw 0.1.96 → 0.1.97

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## [0.1.97](https://github.com/babelcloud/visionclaw/compare/v0.1.96...v0.1.97) (2026-03-09)
2
+
3
+
4
+ ### Features
5
+
6
+ * **restore:** implement restore command and functionality ([408c773](https://github.com/babelcloud/visionclaw/commit/408c773accde8f70abef3ed6710072a657f46014))
7
+
8
+
9
+
1
10
  ## [0.1.96](https://github.com/babelcloud/visionclaw/compare/v0.1.95...v0.1.96) (2026-03-09)
2
11
 
3
12
 
@@ -1,14 +1,11 @@
1
1
  import type { VisionClawConfig } from "../config/types.js";
2
+ export declare function getReferencedClaudeTranscriptIds(sessionFilePath: string): string[];
2
3
  /**
3
4
  * Create a ZIP backup of VisionClaw profile data and upload it to Google Drive.
4
5
  *
5
- * Backs up:
6
- * - memories/
7
- * - .claude/skills/
8
- * - config.json
9
- * - session.json (if present)
10
- * - owner.json (if present)
11
- * - ~/.claude/projects/<profile-slug>/*.jsonl (session transcripts)
6
+ * Backs up the entire active profile directory under ~/.visionclaw/profiles/
7
+ * except for logs/, and also includes the Claude session transcript .jsonl
8
+ * files referenced by session.json when available.
12
9
  *
13
10
  * @returns Shareable Google Drive link for the uploaded ZIP.
14
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/agent/backup.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA2B3D;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAsEjB"}
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/agent/backup.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA2B3D,wBAAgB,gCAAgC,CAC9C,eAAe,EAAE,MAAM,GACtB,MAAM,EAAE,CAoBV;AAqFD;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CA6FjB"}
@@ -3,7 +3,7 @@ import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { execFile } from "node:child_process";
5
5
  import { promisify } from "node:util";
6
- import { getConfigDir, getConfigFile, getOwnerFile, getSessionFile, getMemoriesDir, getSkillsDir, } from "../config/index.js";
6
+ import { getConfigDir, getSessionFile } from "../config/index.js";
7
7
  import { GoogleDriveClient } from "../drive/google-drive.js";
8
8
  import { logger } from "../logger.js";
9
9
  const execFileAsync = promisify(execFile);
@@ -13,28 +13,91 @@ function formatTimestamp() {
13
13
  return (`${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}` +
14
14
  `-${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`);
15
15
  }
16
- /**
17
- * Compute the Claude Code project JSONL directory for the current profile.
18
- *
19
- * Claude Code derives the project folder name from the working directory by
20
- * replacing every '/' and '.' with '-'. For the default profile this gives:
21
- * /Users/<user>/.visionclaw/profiles/default
22
- * → -Users-<user>--visionclaw-profiles-default
23
- */
24
- function getClaudeSessionDir() {
25
- const slug = getConfigDir().replace(/[/.]/g, "-");
26
- return path.join(os.homedir(), ".claude", "projects", slug);
16
+ function getClaudeProjectSlug(projectPath) {
17
+ return projectPath.replace(/[\\/.:]/g, "-");
18
+ }
19
+ function getClaudeTranscriptDir(profileDir) {
20
+ return path.join(os.homedir(), ".claude", "projects", getClaudeProjectSlug(profileDir));
21
+ }
22
+ export function getReferencedClaudeTranscriptIds(sessionFilePath) {
23
+ if (!fs.existsSync(sessionFilePath)) {
24
+ return [];
25
+ }
26
+ try {
27
+ const raw = JSON.parse(fs.readFileSync(sessionFilePath, "utf-8"));
28
+ const ids = [
29
+ raw.sessionId,
30
+ raw.generalSessionId,
31
+ raw.codingSessionId,
32
+ ].filter((value) => typeof value === "string" && value.length > 0);
33
+ return [...new Set(ids)];
34
+ }
35
+ catch {
36
+ return [];
37
+ }
38
+ }
39
+ function snapshotProfileTree(sourceDir, stagingDir) {
40
+ const skippedPaths = [];
41
+ const excludedRelativeDirs = new Set(["logs"]);
42
+ const copyEntry = (sourcePath, targetPath, relativePath) => {
43
+ const stat = fs.lstatSync(sourcePath);
44
+ if (stat.isDirectory()) {
45
+ if (excludedRelativeDirs.has(relativePath)) {
46
+ return;
47
+ }
48
+ fs.mkdirSync(targetPath, { recursive: true });
49
+ for (const entry of fs.readdirSync(sourcePath)) {
50
+ copyEntry(path.join(sourcePath, entry), path.join(targetPath, entry), relativePath ? path.join(relativePath, entry) : entry);
51
+ }
52
+ return;
53
+ }
54
+ if (stat.isFile()) {
55
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true });
56
+ fs.copyFileSync(sourcePath, targetPath);
57
+ return;
58
+ }
59
+ if (stat.isSymbolicLink()) {
60
+ skippedPaths.push(sourcePath);
61
+ return;
62
+ }
63
+ skippedPaths.push(sourcePath);
64
+ };
65
+ copyEntry(sourceDir, stagingDir, "");
66
+ return { skippedPaths };
67
+ }
68
+ function snapshotClaudeTranscripts(sourceDir, stagingDir, transcriptIds) {
69
+ const skippedPaths = [];
70
+ let copiedCount = 0;
71
+ if (!fs.existsSync(sourceDir) || transcriptIds.length === 0) {
72
+ return { copiedCount, missingIds: [], skippedPaths };
73
+ }
74
+ fs.mkdirSync(stagingDir, { recursive: true });
75
+ const missingIds = [];
76
+ for (const transcriptId of transcriptIds) {
77
+ const entry = `${transcriptId}.jsonl`;
78
+ const sourcePath = path.join(sourceDir, entry);
79
+ if (!fs.existsSync(sourcePath)) {
80
+ missingIds.push(transcriptId);
81
+ continue;
82
+ }
83
+ const stat = fs.lstatSync(sourcePath);
84
+ if (!stat.isFile()) {
85
+ if (!stat.isFile()) {
86
+ skippedPaths.push(sourcePath);
87
+ }
88
+ continue;
89
+ }
90
+ fs.copyFileSync(sourcePath, path.join(stagingDir, entry));
91
+ copiedCount += 1;
92
+ }
93
+ return { copiedCount, missingIds, skippedPaths };
27
94
  }
28
95
  /**
29
96
  * Create a ZIP backup of VisionClaw profile data and upload it to Google Drive.
30
97
  *
31
- * Backs up:
32
- * - memories/
33
- * - .claude/skills/
34
- * - config.json
35
- * - session.json (if present)
36
- * - owner.json (if present)
37
- * - ~/.claude/projects/<profile-slug>/*.jsonl (session transcripts)
98
+ * Backs up the entire active profile directory under ~/.visionclaw/profiles/
99
+ * except for logs/, and also includes the Claude session transcript .jsonl
100
+ * files referenced by session.json when available.
38
101
  *
39
102
  * @returns Shareable Google Drive link for the uploaded ZIP.
40
103
  */
@@ -42,39 +105,41 @@ export async function runBackup(config, ownerEmail) {
42
105
  const zipName = `visionclaw-backup-${formatTimestamp()}.zip`;
43
106
  const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "vc-backup-"));
44
107
  const zipPath = path.join(tmpDir, zipName);
108
+ const stagingRoot = path.join(tmpDir, "staging");
45
109
  try {
46
- const homeDir = os.homedir();
47
- const toRel = (p) => path.relative(homeDir, p);
48
- const items = [];
49
- // Directories (added recursively by zip -r)
50
- const memoriesDir = getMemoriesDir();
51
- if (fs.existsSync(memoriesDir))
52
- items.push(toRel(memoriesDir));
53
- const skillsDir = getSkillsDir();
54
- if (fs.existsSync(skillsDir))
55
- items.push(toRel(skillsDir));
56
- // Individual config files
57
- for (const f of [getConfigFile(), getOwnerFile(), getSessionFile()]) {
58
- if (fs.existsSync(f))
59
- items.push(toRel(f));
110
+ const profileDir = getConfigDir();
111
+ if (!fs.existsSync(profileDir)) {
112
+ throw new Error(`Profile directory not found: ${profileDir}`);
60
113
  }
61
- // Session JSONL transcripts
62
- const claudeSessionDir = getClaudeSessionDir();
63
- if (fs.existsSync(claudeSessionDir)) {
64
- for (const entry of fs.readdirSync(claudeSessionDir)) {
65
- if (entry.endsWith(".jsonl")) {
66
- items.push(toRel(path.join(claudeSessionDir, entry)));
67
- }
68
- }
114
+ const profileDirName = path.basename(profileDir);
115
+ const stagedProfileDir = path.join(stagingRoot, ".visionclaw", "profiles", profileDirName);
116
+ const transcriptDir = getClaudeTranscriptDir(profileDir);
117
+ const transcriptIds = getReferencedClaudeTranscriptIds(getSessionFile());
118
+ const stagedTranscriptDir = path.join(stagingRoot, ".claude", "projects", getClaudeProjectSlug(profileDir));
119
+ const snapshot = snapshotProfileTree(profileDir, stagedProfileDir);
120
+ const transcripts = snapshotClaudeTranscripts(transcriptDir, stagedTranscriptDir, transcriptIds);
121
+ logger.system(`Creating backup zip: ${zipPath} (.visionclaw/profiles/${profileDirName})`);
122
+ if (snapshot.skippedPaths.length > 0) {
123
+ logger.warn(`Skipping ${snapshot.skippedPaths.length} symlink or unsupported runtime entr${snapshot.skippedPaths.length === 1 ? "y" : "ies"} during backup.`);
124
+ }
125
+ if (transcripts.copiedCount > 0) {
126
+ logger.system(`Including ${transcripts.copiedCount} Claude transcript file${transcripts.copiedCount === 1 ? "" : "s"} in backup.`);
127
+ }
128
+ if (transcripts.missingIds.length > 0) {
129
+ logger.warn(`Missing ${transcripts.missingIds.length} transcript file${transcripts.missingIds.length === 1 ? "" : "s"} referenced by session.json.`);
130
+ }
131
+ if (transcripts.skippedPaths.length > 0) {
132
+ logger.warn(`Skipping ${transcripts.skippedPaths.length} unsupported entr${transcripts.skippedPaths.length === 1 ? "y" : "ies"} in Claude transcript storage.`);
69
133
  }
70
- if (items.length === 0) {
71
- throw new Error("No files found to back up");
134
+ const zipInputs = [".visionclaw"];
135
+ if (fs.existsSync(path.join(stagingRoot, ".claude"))) {
136
+ zipInputs.push(".claude");
72
137
  }
73
- logger.system(`Creating backup zip: ${zipPath} (${items.length} item(s))`);
74
- // Run zip from the home directory so paths inside the archive are relative
75
- await execFileAsync("zip", ["-r", zipPath, ...items], {
76
- cwd: homeDir,
77
- timeout: 10 * 60 * 1000, // 10 min — JSONL files can be large
138
+ // Run zip from the staging directory so the archive keeps the expected
139
+ // ~/.visionclaw/profiles/<profile> layout without touching live sockets.
140
+ await execFileAsync("zip", ["-r", zipPath, ...zipInputs], {
141
+ cwd: stagingRoot,
142
+ timeout: 10 * 60 * 1000,
78
143
  });
79
144
  logger.system("Backup zip created, uploading to Google Drive...");
80
145
  const drive = new GoogleDriveClient(config);
@@ -1 +1 @@
1
- {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/agent/backup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/agent/backup.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -24,7 +24,7 @@ function printHelp() {
24
24
  console.log(`VisionClaw\n\nUsage:\n visionclaw [--profile <name>] [--debug]\n\nOptions:\n --profile <name> Use a specific profile (default: "default")\n -d, --debug Enable debug logging (sets LOG_LEVEL=debug)\n -v, --version Print version and exit\n -h, --help Show this help and exit\n`);
25
25
  }
26
26
  function printCommandHelp() {
27
- console.log(`VisionClaw\n\nUsage:\n visionclaw [command] [options]\n\nCommands:\n prepare-mac Prepare a fresh Mac (install dependencies, configure desktop, check permissions)\n prepare-windows Prepare a fresh Windows machine (install dependencies, check prerequisites)\n prepare Auto-detect platform and run the appropriate prepare command\n setup Run manufacturer (pre-ship) setup without starting the agent\n set-owner Set the owner email for post-ship onboarding\n reconfigure Update an existing profile without starting the agent\n reinstall-skills Reinstall built-in skills (does not start the agent)\n\nGlobal options:\n --profile <name> Use a specific profile (default: "default")\n -d, --debug Enable debug logging (sets LOG_LEVEL=debug)\n -v, --version Print version and exit\n -h, --help Show this help and exit\n`);
27
+ console.log(`VisionClaw\n\nUsage:\n visionclaw [command] [options]\n\nCommands:\n prepare-mac Prepare a fresh Mac (install dependencies, configure desktop, check permissions)\n prepare-windows Prepare a fresh Windows machine (install dependencies, check prerequisites)\n prepare Auto-detect platform and run the appropriate prepare command\n setup Run manufacturer (pre-ship) setup without starting the agent\n restore Restore a profile from a VisionClaw backup ZIP\n set-owner Set the owner email for post-ship onboarding\n reconfigure Update an existing profile without starting the agent\n reinstall-skills Reinstall built-in skills (does not start the agent)\n\nGlobal options:\n --profile <name> Use a specific profile (default: "default")\n -d, --debug Enable debug logging (sets LOG_LEVEL=debug)\n -v, --version Print version and exit\n -h, --help Show this help and exit\n`);
28
28
  }
29
29
  async function printVersionAndExit() {
30
30
  try {
@@ -104,6 +104,11 @@ async function main() {
104
104
  logger.system("\nManufacturer setup complete!");
105
105
  process.exit(0);
106
106
  }
107
+ if (parsed.command === "restore") {
108
+ const { runRestoreCli } = (await import("./restore.js"));
109
+ await runRestoreCli(parsed.commandArgs);
110
+ return;
111
+ }
107
112
  logger.system(`Provider: ${loadConfig().provider}`);
108
113
  if (parsed.command === "set-owner") {
109
114
  const { runSetOwner } = (await import("./onboarding/set-owner.js"));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAejD,SAAS,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnD,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9F,OAAO;QACL,OAAO;QACP,WAAW;QACX,OAAO;QACP,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;QACpE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAClE,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC;KACzE,CAAC;AACJ,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC,8SAA8S,CAAC,CAAC;AAC9T,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,CAAC,GAAG,CAAC,64BAA64B,CAAC,CAAC;AAC75B,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,IAAI,CAAC;QACH,2EAA2E;QAC3E,+CAA+C;QAC/C,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAyB,CAAC;QAElF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,MAAM,CAAC,OAAO;YAAE,gBAAgB,EAAE,CAAC;;YAClC,SAAS,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,mBAAmB,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,uCAAuC;IACvC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3B,oDAAoD;IACpD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;IAClC,CAAC;IACD,MAAM,CAAC,IAAI,EAAE,CAAC;IAEd,kEAAkE;IAClE,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,GAAG,CACR,gCAAgC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAC3F,EAAE,KAAK,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAC9D,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,MAAM,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;IACrD,MAAM,CAAC,MAAM,CAAC,YAAY,UAAU,EAAE,IAAI,CAAC,CAAC;IAE5C,qDAAqD;IACrD,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QACrC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAErE,CAAC;QACF,MAAM,aAAa,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;QACzC,MAAM,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAE7E,CAAC;QACF,MAAM,iBAAiB,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAE7E,CAAC;YACF,MAAM,iBAAiB,EAAE,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAErE,CAAC;YACF,MAAM,aAAa,EAAE,CAAC;QACxB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,IAAI,YAAY,EAAE,EAAE,CAAC;YACnB,MAAM,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,OAAO,0DAA0D,CAAC,CAAC;YACpG,OAAO;QACT,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,4CAA4C,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAC;QAClF,MAAM,QAAQ,EAAE,CAAC;QACjB,MAAM,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,aAAa,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAEjE,CAAC;QACF,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QACrC,0FAA0F;QAC1F,mFAAmF;QACnF,6DAA6D;QAC7D,uDAAuD;QACvD,MAAM,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAE9D,CAAC;QACF,MAAM,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;QAC1C,oBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,gBAAgB,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,oEAAoE;IACpE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,uCAAuC,MAAM,CAAC,OAAO,qCAAqC,CAAC,CAAC;QAC1G,MAAM,QAAQ,EAAE,CAAC;QACjB,MAAM,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,MAAM,CAAC,mBAAmB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAEjD,wEAAwE;IACxE,kEAAkE;IAClE,IAAI,gBAA4D,CAAC;IACjE,IAAI,SAAqD,CAAC;IAC1D,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,cAAc,CAAC;YACzB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS;YAClC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;YACrB,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU;YACjC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM;YACnE,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU;YACjC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc;YACzC,MAAM;YACN,WAAW,EAAE;gBACX,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,CAAC;wBAAC,OAAO,aAAa,EAAE,CAAC,IAAI,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBAAC,OAAO,KAAK,CAAC;oBAAC,CAAC;gBAC9D,CAAC;gBACD,gBAAgB,EAAE,GAAG,EAAE;oBACrB,IAAI,CAAC;wBAAC,OAAO,aAAa,EAAE,CAAC,aAAa,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBAAC,OAAO,KAAK,CAAC;oBAAC,CAAC;gBACvE,CAAC;gBACD,WAAW,EAAE,GAAG,EAAE;oBAChB,IAAI,CAAC;wBAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;gBACxE,CAAC;aACF;SACF,CAAC,CAAC;QAEH,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC;QACrC,SAAS,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,iEAAiE;IACjE,oBAAoB,EAAE,CAAC;IAEvB,6DAA6D;IAC7D,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qCAAqC,CAAC,CAAC;IAChF,MAAM,eAAe,EAAE,CAAC;IAExB,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjE,iEAAiE;IACjE,MAAM,cAAc,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE5E,0EAA0E;IAC1E,IAAI,SAAS;QAAE,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IACvC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC/D,eAAe,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,CAAC,GAAG,CAAC,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ type RestoreEntryKind = "file" | "directory";
2
+ interface RestoreEntry {
3
+ source: string;
4
+ target: string;
5
+ label: string;
6
+ kind: RestoreEntryKind;
7
+ }
8
+ interface RestorePlan {
9
+ sourceProfile: string;
10
+ entries: RestoreEntry[];
11
+ warnings: string[];
12
+ }
13
+ export declare function buildRestorePlan(extractedRoot: string): RestorePlan;
14
+ export declare function runRestoreCli(args?: string[]): Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=restore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../src/restore.ts"],"names":[],"mappings":"AAUA,KAAK,gBAAgB,GAAG,MAAM,GAAG,WAAW,CAAC;AAO7C,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,UAAU,WAAW;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAsGD,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,CAuBnE;AAwED,wBAAsB,aAAa,CACjC,IAAI,GAAE,MAAM,EAA0B,GACrC,OAAO,CAAC,IAAI,CAAC,CAkDf"}
@@ -0,0 +1,199 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import os from "node:os";
4
+ import { execFile } from "node:child_process";
5
+ import { promisify } from "node:util";
6
+ import { getConfigDir, getProfile } from "./config/index.js";
7
+ import { logger } from "./logger.js";
8
+ const execFileAsync = promisify(execFile);
9
+ function parseRestoreArgs(args) {
10
+ let zipPath;
11
+ let force = false;
12
+ for (let i = 0; i < args.length; i += 1) {
13
+ const arg = args[i];
14
+ if (arg === "--force") {
15
+ force = true;
16
+ continue;
17
+ }
18
+ if (arg === "--profile") {
19
+ i += 1;
20
+ continue;
21
+ }
22
+ if (arg === "-d" ||
23
+ arg === "--debug" ||
24
+ arg === "-h" ||
25
+ arg === "--help" ||
26
+ arg === "-v" ||
27
+ arg === "--version") {
28
+ continue;
29
+ }
30
+ if (arg.startsWith("-")) {
31
+ throw new Error(`Unknown restore option: ${arg}`);
32
+ }
33
+ if (zipPath) {
34
+ throw new Error(`Restore accepts a single ZIP path.\nUsage: visionclaw restore <zip-path> [--force]`);
35
+ }
36
+ zipPath = arg;
37
+ }
38
+ if (!zipPath) {
39
+ throw new Error("Usage: visionclaw restore <zip-path> [--force]");
40
+ }
41
+ return { zipPath, force };
42
+ }
43
+ function escapePowerShellLiteral(value) {
44
+ return value.replace(/'/g, "''");
45
+ }
46
+ async function extractZipArchive(zipPath, destDir) {
47
+ if (process.platform === "win32") {
48
+ await execFileAsync("powershell", [
49
+ "-NoProfile",
50
+ "-Command",
51
+ `Expand-Archive -LiteralPath '${escapePowerShellLiteral(zipPath)}' -DestinationPath '${escapePowerShellLiteral(destDir)}' -Force`,
52
+ ], { timeout: 10 * 60 * 1000 });
53
+ return;
54
+ }
55
+ await execFileAsync("unzip", ["-oq", zipPath, "-d", destDir], {
56
+ timeout: 10 * 60 * 1000,
57
+ });
58
+ }
59
+ function getSourceProfileDir(extractedRoot) {
60
+ const profilesDir = path.join(extractedRoot, ".visionclaw", "profiles");
61
+ if (!fs.existsSync(profilesDir)) {
62
+ throw new Error("Backup does not contain a .visionclaw/profiles directory.");
63
+ }
64
+ const profileDirs = fs
65
+ .readdirSync(profilesDir, { withFileTypes: true })
66
+ .filter((entry) => entry.isDirectory());
67
+ if (profileDirs.length === 0) {
68
+ throw new Error("Backup does not contain a VisionClaw profile directory.");
69
+ }
70
+ if (profileDirs.length > 1) {
71
+ throw new Error("Backup contains multiple VisionClaw profiles. Restore one profile per archive.");
72
+ }
73
+ const sourceProfile = profileDirs[0].name;
74
+ return {
75
+ sourceProfile,
76
+ sourceProfileDir: path.join(profilesDir, sourceProfile),
77
+ };
78
+ }
79
+ export function buildRestorePlan(extractedRoot) {
80
+ const { sourceProfile, sourceProfileDir } = getSourceProfileDir(extractedRoot);
81
+ const warnings = [];
82
+ const entries = [
83
+ {
84
+ source: sourceProfileDir,
85
+ target: getConfigDir(),
86
+ label: `${sourceProfile}/`,
87
+ kind: "directory",
88
+ },
89
+ ];
90
+ if (!fs.existsSync(path.join(sourceProfileDir, "google-tokens.json"))) {
91
+ warnings.push("Backup does not contain google-tokens.json. Google integrations may require re-authentication after restore.");
92
+ }
93
+ return {
94
+ sourceProfile,
95
+ entries,
96
+ warnings,
97
+ };
98
+ }
99
+ function removePath(target, kind) {
100
+ if (kind === "directory") {
101
+ fs.rmSync(target, { recursive: true, force: true });
102
+ return;
103
+ }
104
+ fs.rmSync(target, { force: true });
105
+ }
106
+ function copyRestoreEntry(entry) {
107
+ if (entry.kind === "directory") {
108
+ fs.mkdirSync(path.dirname(entry.target), { recursive: true });
109
+ fs.cpSync(entry.source, entry.target, { recursive: true });
110
+ return;
111
+ }
112
+ fs.mkdirSync(path.dirname(entry.target), { recursive: true });
113
+ fs.copyFileSync(entry.source, entry.target);
114
+ }
115
+ function backupExistingEntry(entry, backupPath) {
116
+ const hadOriginal = fs.existsSync(entry.target);
117
+ if (hadOriginal) {
118
+ fs.mkdirSync(path.dirname(backupPath), { recursive: true });
119
+ if (entry.kind === "directory") {
120
+ fs.cpSync(entry.target, backupPath, { recursive: true });
121
+ }
122
+ else {
123
+ fs.copyFileSync(entry.target, backupPath);
124
+ }
125
+ }
126
+ return {
127
+ entry,
128
+ backupPath,
129
+ hadOriginal,
130
+ };
131
+ }
132
+ function restoreRollbackEntries(entries) {
133
+ for (let i = entries.length - 1; i >= 0; i -= 1) {
134
+ const rollback = entries[i];
135
+ removePath(rollback.entry.target, rollback.entry.kind);
136
+ if (!rollback.hadOriginal)
137
+ continue;
138
+ if (rollback.entry.kind === "directory") {
139
+ fs.mkdirSync(path.dirname(rollback.entry.target), { recursive: true });
140
+ fs.cpSync(rollback.backupPath, rollback.entry.target, { recursive: true });
141
+ }
142
+ else {
143
+ fs.mkdirSync(path.dirname(rollback.entry.target), { recursive: true });
144
+ fs.copyFileSync(rollback.backupPath, rollback.entry.target);
145
+ }
146
+ }
147
+ }
148
+ function preflightRestore(entries, force) {
149
+ if (force)
150
+ return;
151
+ const existingTargets = entries
152
+ .filter((entry) => fs.existsSync(entry.target))
153
+ .map((entry) => `${entry.label} -> ${entry.target}`);
154
+ if (existingTargets.length > 0) {
155
+ throw new Error(`Restore would overwrite existing data:\n${existingTargets.join("\n")}\nRe-run with --force to replace those paths.`);
156
+ }
157
+ }
158
+ export async function runRestoreCli(args = process.argv.slice(2)) {
159
+ const parsed = parseRestoreArgs(args);
160
+ const zipPath = path.resolve(parsed.zipPath);
161
+ if (!fs.existsSync(zipPath)) {
162
+ throw new Error(`Backup ZIP not found: ${zipPath}`);
163
+ }
164
+ if (!zipPath.toLowerCase().endsWith(".zip")) {
165
+ throw new Error(`Restore expects a .zip file: ${zipPath}`);
166
+ }
167
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "vc-restore-"));
168
+ const extractDir = path.join(tmpDir, "extract");
169
+ const rollbackDir = path.join(tmpDir, "rollback");
170
+ try {
171
+ fs.mkdirSync(extractDir, { recursive: true });
172
+ logger.system(`Restoring VisionClaw profile "${getProfile()}" from ${zipPath}`);
173
+ await extractZipArchive(zipPath, extractDir);
174
+ const plan = buildRestorePlan(extractDir);
175
+ preflightRestore(plan.entries, parsed.force);
176
+ logger.system(`Backup source profile: ${plan.sourceProfile}; restoring ${plan.entries.length} item(s) into "${getProfile()}"`);
177
+ for (const warning of plan.warnings) {
178
+ logger.warn(warning);
179
+ }
180
+ const applied = [];
181
+ try {
182
+ plan.entries.forEach((entry, index) => {
183
+ const rollbackEntry = backupExistingEntry(entry, path.join(rollbackDir, String(index)));
184
+ applied.push(rollbackEntry);
185
+ removePath(entry.target, entry.kind);
186
+ copyRestoreEntry(entry);
187
+ });
188
+ }
189
+ catch (error) {
190
+ restoreRollbackEntries(applied);
191
+ throw error;
192
+ }
193
+ logger.system(`Restore complete for profile "${getProfile()}".`);
194
+ }
195
+ finally {
196
+ fs.rmSync(tmpDir, { recursive: true, force: true });
197
+ }
198
+ }
199
+ //# sourceMappingURL=restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../src/restore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Claude project folders are derived from filesystem paths. On Windows the
3
+ * path also contains backslashes and a drive-letter colon, so normalize all of
4
+ * those characters for stable backup/restore behavior across platforms.
5
+ */
6
+ export declare function getClaudeProjectSlug(projectPath: string): string;
7
+ export declare function getClaudeSessionDirForConfigDir(configDir: string): string;
8
+ //# sourceMappingURL=backup-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-paths.d.ts","sourceRoot":"","sources":["../../src/utils/backup-paths.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOzE"}
@@ -0,0 +1,14 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ /**
4
+ * Claude project folders are derived from filesystem paths. On Windows the
5
+ * path also contains backslashes and a drive-letter colon, so normalize all of
6
+ * those characters for stable backup/restore behavior across platforms.
7
+ */
8
+ export function getClaudeProjectSlug(projectPath) {
9
+ return projectPath.replace(/[\\/.:]/g, "-");
10
+ }
11
+ export function getClaudeSessionDirForConfigDir(configDir) {
12
+ return path.join(os.homedir(), ".claude", "projects", getClaudeProjectSlug(configDir));
13
+ }
14
+ //# sourceMappingURL=backup-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-paths.js","sourceRoot":"","sources":["../../src/utils/backup-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,OAAO,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,SAAiB;IAC/D,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,CAAC,OAAO,EAAE,EACZ,SAAS,EACT,UAAU,EACV,oBAAoB,CAAC,SAAS,CAAC,CAChC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "visionclaw",
3
- "version": "0.1.96",
3
+ "version": "0.1.97",
4
4
  "description": "A personal assistant agent that runs on your desktop, receives commands from messaging channels, and executes tasks autonomously.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",