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 +9 -0
- package/dist/agent/backup.d.ts +4 -7
- package/dist/agent/backup.d.ts.map +1 -1
- package/dist/agent/backup.js +113 -48
- package/dist/agent/backup.js.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/restore.d.ts +16 -0
- package/dist/restore.d.ts.map +1 -0
- package/dist/restore.js +199 -0
- package/dist/restore.js.map +1 -0
- package/dist/utils/backup-paths.d.ts +8 -0
- package/dist/utils/backup-paths.d.ts.map +1 -0
- package/dist/utils/backup-paths.js +14 -0
- package/dist/utils/backup-paths.js.map +1 -0
- package/package.json +1 -1
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
|
|
package/dist/agent/backup.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
7
|
-
*
|
|
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":"
|
|
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"}
|
package/dist/agent/backup.js
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
*
|
|
33
|
-
*
|
|
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
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
71
|
-
|
|
134
|
+
const zipInputs = [".visionclaw"];
|
|
135
|
+
if (fs.existsSync(path.join(stagingRoot, ".claude"))) {
|
|
136
|
+
zipInputs.push(".claude");
|
|
72
137
|
}
|
|
73
|
-
|
|
74
|
-
//
|
|
75
|
-
await execFileAsync("zip", ["-r", zipPath, ...
|
|
76
|
-
cwd:
|
|
77
|
-
timeout: 10 * 60 * 1000,
|
|
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);
|
package/dist/agent/backup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/agent/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,
|
|
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;
|
|
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"}
|
package/dist/restore.js
ADDED
|
@@ -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.
|
|
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",
|