@openclawbrain/openclaw 0.1.12 → 0.2.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.
- package/README.md +1 -0
- package/dist/src/cli.d.ts +72 -1
- package/dist/src/cli.js +1291 -21
- package/dist/src/cli.js.map +1 -1
- package/dist/src/daemon.d.ts +26 -0
- package/dist/src/daemon.js +362 -0
- package/dist/src/daemon.js.map +1 -0
- package/dist/src/import-export.d.ts +36 -0
- package/dist/src/import-export.js +171 -0
- package/dist/src/import-export.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/resolve-activation-root.d.ts +27 -0
- package/dist/src/resolve-activation-root.js +120 -0
- package/dist/src/resolve-activation-root.js.map +1 -0
- package/extension/index.ts +50 -0
- package/package.json +16 -14
- package/LICENSE +0 -201
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brain import/export: backup and restore the activation root directory.
|
|
3
|
+
*
|
|
4
|
+
* export: tar + gzip the entire activation root → output.tar.gz
|
|
5
|
+
* import: extract tar.gz → activation root, with safety checks
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from "node:child_process";
|
|
8
|
+
import { existsSync, mkdirSync, readdirSync, statSync } from "node:fs";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
/**
|
|
11
|
+
* Verify the activation root looks valid (has activation-pointers.json).
|
|
12
|
+
*/
|
|
13
|
+
function validateActivationRoot(activationRoot) {
|
|
14
|
+
if (!existsSync(activationRoot)) {
|
|
15
|
+
throw new Error(`Activation root does not exist: ${activationRoot}`);
|
|
16
|
+
}
|
|
17
|
+
const pointersPath = path.join(activationRoot, "activation-pointers.json");
|
|
18
|
+
if (!existsSync(pointersPath)) {
|
|
19
|
+
throw new Error(`activation-pointers.json not found in ${activationRoot}. ` +
|
|
20
|
+
`This doesn't look like a valid activation root.`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if a tar.gz archive contains activation-pointers.json at the top level.
|
|
25
|
+
*/
|
|
26
|
+
function archiveContainsPointers(archivePath) {
|
|
27
|
+
try {
|
|
28
|
+
const listing = execSync(`tar tzf ${JSON.stringify(archivePath)}`, {
|
|
29
|
+
encoding: "utf8",
|
|
30
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
31
|
+
});
|
|
32
|
+
const entries = listing.split("\n").map((e) => e.replace(/^\.\//, ""));
|
|
33
|
+
return entries.some((e) => e === "activation-pointers.json" || e.endsWith("/activation-pointers.json"));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if activation root already has meaningful data.
|
|
41
|
+
*/
|
|
42
|
+
function activationRootHasData(activationRoot) {
|
|
43
|
+
if (!existsSync(activationRoot))
|
|
44
|
+
return false;
|
|
45
|
+
try {
|
|
46
|
+
const entries = readdirSync(activationRoot);
|
|
47
|
+
return entries.length > 0;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Export (backup) the activation root to a tar.gz archive.
|
|
55
|
+
*/
|
|
56
|
+
export function exportBrain(options) {
|
|
57
|
+
const { activationRoot, outputPath } = options;
|
|
58
|
+
const resolvedRoot = path.resolve(activationRoot);
|
|
59
|
+
const resolvedOutput = path.resolve(outputPath);
|
|
60
|
+
try {
|
|
61
|
+
validateActivationRoot(resolvedRoot);
|
|
62
|
+
// Ensure output directory exists
|
|
63
|
+
const outputDir = path.dirname(resolvedOutput);
|
|
64
|
+
if (!existsSync(outputDir)) {
|
|
65
|
+
mkdirSync(outputDir, { recursive: true });
|
|
66
|
+
}
|
|
67
|
+
// Create tar.gz from the activation root contents
|
|
68
|
+
execSync(`tar czf ${JSON.stringify(resolvedOutput)} -C ${JSON.stringify(resolvedRoot)} .`, { stdio: "pipe" });
|
|
69
|
+
// Verify the archive was created
|
|
70
|
+
if (!existsSync(resolvedOutput)) {
|
|
71
|
+
return {
|
|
72
|
+
ok: false,
|
|
73
|
+
outputPath: resolvedOutput,
|
|
74
|
+
activationRoot: resolvedRoot,
|
|
75
|
+
error: "Archive was not created (tar returned success but file missing)",
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const stats = statSync(resolvedOutput);
|
|
79
|
+
return {
|
|
80
|
+
ok: true,
|
|
81
|
+
outputPath: resolvedOutput,
|
|
82
|
+
activationRoot: resolvedRoot,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
return {
|
|
87
|
+
ok: false,
|
|
88
|
+
outputPath: resolvedOutput,
|
|
89
|
+
activationRoot: resolvedRoot,
|
|
90
|
+
error: err instanceof Error ? err.message : String(err),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Import (restore) a tar.gz archive into the activation root.
|
|
96
|
+
*/
|
|
97
|
+
export function importBrain(options) {
|
|
98
|
+
const { archivePath, activationRoot, force } = options;
|
|
99
|
+
const resolvedArchive = path.resolve(archivePath);
|
|
100
|
+
const resolvedRoot = path.resolve(activationRoot);
|
|
101
|
+
try {
|
|
102
|
+
// Verify archive exists
|
|
103
|
+
if (!existsSync(resolvedArchive)) {
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
activationRoot: resolvedRoot,
|
|
107
|
+
archivePath: resolvedArchive,
|
|
108
|
+
error: `Archive not found: ${resolvedArchive}`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// Verify archive contains activation-pointers.json
|
|
112
|
+
if (!archiveContainsPointers(resolvedArchive)) {
|
|
113
|
+
return {
|
|
114
|
+
ok: false,
|
|
115
|
+
activationRoot: resolvedRoot,
|
|
116
|
+
archivePath: resolvedArchive,
|
|
117
|
+
error: "Archive does not contain activation-pointers.json. " +
|
|
118
|
+
"This doesn't look like a valid brain backup.",
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
// Check if activation root already has data
|
|
122
|
+
let warning;
|
|
123
|
+
if (activationRootHasData(resolvedRoot)) {
|
|
124
|
+
if (!force) {
|
|
125
|
+
return {
|
|
126
|
+
ok: false,
|
|
127
|
+
activationRoot: resolvedRoot,
|
|
128
|
+
archivePath: resolvedArchive,
|
|
129
|
+
error: `Activation root ${resolvedRoot} already contains data. ` +
|
|
130
|
+
`Use --force to overwrite.`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
warning = `Overwrote existing data in ${resolvedRoot}`;
|
|
134
|
+
}
|
|
135
|
+
// Create activation root if needed
|
|
136
|
+
if (!existsSync(resolvedRoot)) {
|
|
137
|
+
mkdirSync(resolvedRoot, { recursive: true });
|
|
138
|
+
}
|
|
139
|
+
// Extract archive
|
|
140
|
+
execSync(`tar xzf ${JSON.stringify(resolvedArchive)} -C ${JSON.stringify(resolvedRoot)}`, { stdio: "pipe" });
|
|
141
|
+
// Verify extraction produced activation-pointers.json
|
|
142
|
+
const pointersPath = path.join(resolvedRoot, "activation-pointers.json");
|
|
143
|
+
if (!existsSync(pointersPath)) {
|
|
144
|
+
return {
|
|
145
|
+
ok: false,
|
|
146
|
+
activationRoot: resolvedRoot,
|
|
147
|
+
archivePath: resolvedArchive,
|
|
148
|
+
error: "Extraction completed but activation-pointers.json not found. " +
|
|
149
|
+
"The archive may have a nested directory structure.",
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const result = {
|
|
153
|
+
ok: true,
|
|
154
|
+
activationRoot: resolvedRoot,
|
|
155
|
+
archivePath: resolvedArchive,
|
|
156
|
+
};
|
|
157
|
+
if (warning !== undefined) {
|
|
158
|
+
result.warning = warning;
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
return {
|
|
164
|
+
ok: false,
|
|
165
|
+
activationRoot: resolvedRoot,
|
|
166
|
+
archivePath: resolvedArchive,
|
|
167
|
+
error: err instanceof Error ? err.message : String(err),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=import-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-export.js","sourceRoot":"","sources":["../../src/import-export.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1422,3 +1422,5 @@ export { describeActivationObservability, inspectActivationState, rollbackActive
|
|
|
1422
1422
|
export { createOpenClawLocalSessionTail, OpenClawLocalSessionTail, type OpenClawLocalSessionTailChangeKindV1, type OpenClawLocalSessionTailChangeV1, type OpenClawLocalSessionTailCursorV1, type OpenClawLocalSessionTailInput, type OpenClawLocalSessionTailLoopOptionsV1, type OpenClawLocalSessionTailLoopResultV1, type OpenClawLocalSessionTailNoopReasonV1, type OpenClawLocalSessionTailPollResultV1 } from "./session-tail.js";
|
|
1423
1423
|
export { discoverOpenClawMainSessionStores, loadOpenClawSessionIndex, readOpenClawAcpStreamFile, readOpenClawSessionFile, type OpenClawMainSessionStoreV1, type OpenClawAcpStreamRecord, type OpenClawInjectedWorkspaceFile, type OpenClawSessionContentPart, type OpenClawSessionCustomRecord, type OpenClawSessionHeaderRecord, type OpenClawSessionIndex, type OpenClawSessionIndexEntry, type OpenClawSessionMessagePayload, type OpenClawSessionMessageRecord, type OpenClawSessionModelChangeRecord, type OpenClawSessionRecord, type OpenClawSessionTextPart, type OpenClawSessionThinkingLevelChangeRecord, type OpenClawSessionThinkingPart, type OpenClawSessionToolCallPart, type OpenClawSystemPromptReport, type OpenClawToolSurfaceEntry } from "./session-store.js";
|
|
1424
1424
|
export { buildPassiveLearningSessionExportFromOpenClawSessionStore, buildPassiveLearningStoreExportFromOpenClawSessionIndex, type OpenClawPassiveLearningPrivacySummaryV1, type OpenClawPassiveLearningSessionEvidenceV1, type OpenClawPassiveLearningSessionExportV1, type OpenClawPassiveLearningStoreExportV1 } from "./local-session-passive-learning.js";
|
|
1425
|
+
export { resolveActivationRoot, type ResolveActivationRootOptions } from "./resolve-activation-root.js";
|
|
1426
|
+
export { runDaemonCommand, type DaemonCliArgs, type DaemonSubcommand, parseDaemonArgs } from "./daemon.js";
|
package/dist/src/index.js
CHANGED
|
@@ -5200,4 +5200,6 @@ export { describeActivationObservability, inspectActivationState, rollbackActive
|
|
|
5200
5200
|
export { createOpenClawLocalSessionTail, OpenClawLocalSessionTail } from "./session-tail.js";
|
|
5201
5201
|
export { discoverOpenClawMainSessionStores, loadOpenClawSessionIndex, readOpenClawAcpStreamFile, readOpenClawSessionFile } from "./session-store.js";
|
|
5202
5202
|
export { buildPassiveLearningSessionExportFromOpenClawSessionStore, buildPassiveLearningStoreExportFromOpenClawSessionIndex } from "./local-session-passive-learning.js";
|
|
5203
|
+
export { resolveActivationRoot } from "./resolve-activation-root.js";
|
|
5204
|
+
export { runDaemonCommand, parseDaemonArgs } from "./daemon.js";
|
|
5203
5205
|
//# sourceMappingURL=index.js.map
|