@savestate/cli 0.1.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/LICENSE +21 -0
- package/README.md +256 -0
- package/dist/adapters/claude-code.d.ts +81 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +540 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/clawdbot.d.ts +93 -0
- package/dist/adapters/clawdbot.d.ts.map +1 -0
- package/dist/adapters/clawdbot.js +673 -0
- package/dist/adapters/clawdbot.js.map +1 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/interface.d.ts +8 -0
- package/dist/adapters/interface.d.ts.map +1 -0
- package/dist/adapters/interface.js +8 -0
- package/dist/adapters/interface.js.map +1 -0
- package/dist/adapters/openai-assistants.d.ts +51 -0
- package/dist/adapters/openai-assistants.d.ts.map +1 -0
- package/dist/adapters/openai-assistants.js +114 -0
- package/dist/adapters/openai-assistants.js.map +1 -0
- package/dist/adapters/registry.d.ts +38 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +79 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/cli.d.ts +18 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +81 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/adapters.d.ts +5 -0
- package/dist/commands/adapters.d.ts.map +1 -0
- package/dist/commands/adapters.js +49 -0
- package/dist/commands/adapters.js.map +1 -0
- package/dist/commands/config.d.ts +10 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +60 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/diff.d.ts +5 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +51 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/index.d.ts +12 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +12 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +71 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +10 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +89 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/restore.d.ts +11 -0
- package/dist/commands/restore.d.ts.map +1 -0
- package/dist/commands/restore.js +86 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/search.d.ts +11 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +50 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/snapshot.d.ts +12 -0
- package/dist/commands/snapshot.d.ts.map +1 -0
- package/dist/commands/snapshot.js +84 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +83 -0
- package/dist/config.js.map +1 -0
- package/dist/encryption.d.ts +40 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +120 -0
- package/dist/encryption.js.map +1 -0
- package/dist/format.d.ts +47 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +198 -0
- package/dist/format.js.map +1 -0
- package/dist/index-file.d.ts +42 -0
- package/dist/index-file.d.ts.map +1 -0
- package/dist/index-file.js +68 -0
- package/dist/index-file.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/passphrase.d.ts +23 -0
- package/dist/passphrase.d.ts.map +1 -0
- package/dist/passphrase.js +82 -0
- package/dist/passphrase.js.map +1 -0
- package/dist/restore.d.ts +46 -0
- package/dist/restore.d.ts.map +1 -0
- package/dist/restore.js +113 -0
- package/dist/restore.js.map +1 -0
- package/dist/search.d.ts +35 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +59 -0
- package/dist/search.js.map +1 -0
- package/dist/snapshot.d.ts +43 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +95 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +6 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/interface.d.ts +8 -0
- package/dist/storage/interface.d.ts.map +1 -0
- package/dist/storage/interface.js +8 -0
- package/dist/storage/interface.js.map +1 -0
- package/dist/storage/local.d.ts +22 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +63 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/resolve.d.ts +11 -0
- package/dist/storage/resolve.d.ts.map +1 -0
- package/dist/storage/resolve.js +21 -0
- package/dist/storage/resolve.js.map +1 -0
- package/dist/types.d.ts +273 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code Adapter
|
|
3
|
+
*
|
|
4
|
+
* Adapter for Anthropic's Claude Code coding agent.
|
|
5
|
+
* Captures CLAUDE.md files, .claude/ directory state,
|
|
6
|
+
* global settings, and project structure metadata.
|
|
7
|
+
*
|
|
8
|
+
* Claude Code works in project directories with:
|
|
9
|
+
* - CLAUDE.md — project instructions (root + subdirectories)
|
|
10
|
+
* - .claude/ — local state and settings
|
|
11
|
+
* - ~/.claude/ — global settings and instructions
|
|
12
|
+
*/
|
|
13
|
+
import { readFile, writeFile, readdir, stat, rename, mkdir } from 'node:fs/promises';
|
|
14
|
+
import { existsSync } from 'node:fs';
|
|
15
|
+
import { join, dirname, extname, relative } from 'node:path';
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
import { SAF_VERSION, generateSnapshotId, computeChecksum } from '../format.js';
|
|
18
|
+
/** Project metadata files to look for */
|
|
19
|
+
const PROJECT_META_FILES = [
|
|
20
|
+
'package.json',
|
|
21
|
+
'pyproject.toml',
|
|
22
|
+
'Cargo.toml',
|
|
23
|
+
'go.mod',
|
|
24
|
+
'Gemfile',
|
|
25
|
+
'composer.json',
|
|
26
|
+
'build.gradle',
|
|
27
|
+
'pom.xml',
|
|
28
|
+
'Makefile',
|
|
29
|
+
'CMakeLists.txt',
|
|
30
|
+
'deno.json',
|
|
31
|
+
'deno.jsonc',
|
|
32
|
+
'tsconfig.json',
|
|
33
|
+
];
|
|
34
|
+
/** Directories to skip during manifest generation */
|
|
35
|
+
const SKIP_DIRS = new Set([
|
|
36
|
+
'node_modules', '.git', 'dist', 'build', '.next', '__pycache__',
|
|
37
|
+
'.venv', 'venv', '.tox', 'target', '.gradle', '.idea', '.vscode',
|
|
38
|
+
'vendor', 'coverage', '.nyc_output', '.cache', '.parcel-cache',
|
|
39
|
+
]);
|
|
40
|
+
/** Binary extensions to skip */
|
|
41
|
+
const BINARY_EXTENSIONS = new Set([
|
|
42
|
+
'.png', '.jpg', '.jpeg', '.gif', '.webp', '.ico', '.svg', '.bmp', '.tiff',
|
|
43
|
+
'.mp3', '.mp4', '.wav', '.ogg', '.flac', '.m4a', '.aac', '.webm', '.avi', '.mov', '.mkv',
|
|
44
|
+
'.zip', '.tar', '.gz', '.bz2', '.xz', '.7z', '.rar',
|
|
45
|
+
'.exe', '.dll', '.so', '.dylib', '.o', '.a',
|
|
46
|
+
'.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx',
|
|
47
|
+
'.woff', '.woff2', '.ttf', '.otf', '.eot',
|
|
48
|
+
'.db', '.sqlite', '.sqlite3',
|
|
49
|
+
]);
|
|
50
|
+
/** Maximum file size to capture (1MB) */
|
|
51
|
+
const MAX_FILE_SIZE = 1024 * 1024;
|
|
52
|
+
/** Maximum depth for file manifest generation */
|
|
53
|
+
const MAX_MANIFEST_DEPTH = 6;
|
|
54
|
+
export class ClaudeCodeAdapter {
|
|
55
|
+
id = 'claude-code';
|
|
56
|
+
name = 'Claude Code';
|
|
57
|
+
platform = 'claude-code';
|
|
58
|
+
version = '0.1.0';
|
|
59
|
+
projectDir;
|
|
60
|
+
warnings = [];
|
|
61
|
+
constructor(projectDir) {
|
|
62
|
+
this.projectDir = projectDir ?? process.cwd();
|
|
63
|
+
}
|
|
64
|
+
async detect() {
|
|
65
|
+
// Look for CLAUDE.md at project root or .claude/ directory
|
|
66
|
+
const claudeMd = join(this.projectDir, 'CLAUDE.md');
|
|
67
|
+
const claudeDir = join(this.projectDir, '.claude');
|
|
68
|
+
if (existsSync(claudeMd)) {
|
|
69
|
+
// Make sure it's a real file, not a symlink to something else entirely
|
|
70
|
+
// (e.g., CLAUDE.md -> AGENTS.md means this is a Clawdbot workspace)
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
if (existsSync(claudeDir)) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
async extract() {
|
|
79
|
+
this.warnings = [];
|
|
80
|
+
const personality = await this.readClaudeMdFiles();
|
|
81
|
+
const memoryEntries = await this.readMemoryFiles();
|
|
82
|
+
const settings = await this.readSettings();
|
|
83
|
+
const projectMeta = await this.readProjectMeta();
|
|
84
|
+
const fileManifest = await this.buildFileManifest();
|
|
85
|
+
const knowledge = await this.buildKnowledge();
|
|
86
|
+
const snapshotId = generateSnapshotId();
|
|
87
|
+
const now = new Date().toISOString();
|
|
88
|
+
const projectType = this.detectProjectType(projectMeta);
|
|
89
|
+
// Log warnings
|
|
90
|
+
if (this.warnings.length > 0) {
|
|
91
|
+
for (const w of this.warnings) {
|
|
92
|
+
console.warn(` ⚠ ${w}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const snapshot = {
|
|
96
|
+
manifest: {
|
|
97
|
+
version: SAF_VERSION,
|
|
98
|
+
timestamp: now,
|
|
99
|
+
id: snapshotId,
|
|
100
|
+
platform: this.platform,
|
|
101
|
+
adapter: this.id,
|
|
102
|
+
checksum: '',
|
|
103
|
+
size: 0,
|
|
104
|
+
},
|
|
105
|
+
identity: {
|
|
106
|
+
personality,
|
|
107
|
+
config: settings,
|
|
108
|
+
tools: [],
|
|
109
|
+
fileManifest,
|
|
110
|
+
projectMeta,
|
|
111
|
+
},
|
|
112
|
+
memory: {
|
|
113
|
+
core: memoryEntries,
|
|
114
|
+
knowledge,
|
|
115
|
+
},
|
|
116
|
+
conversations: {
|
|
117
|
+
total: 0,
|
|
118
|
+
conversations: [],
|
|
119
|
+
},
|
|
120
|
+
platform: await this.identify(),
|
|
121
|
+
chain: {
|
|
122
|
+
current: snapshotId,
|
|
123
|
+
ancestors: [],
|
|
124
|
+
},
|
|
125
|
+
restoreHints: {
|
|
126
|
+
platform: this.platform,
|
|
127
|
+
steps: [
|
|
128
|
+
{
|
|
129
|
+
type: 'file',
|
|
130
|
+
description: 'Restore CLAUDE.md files to their original locations',
|
|
131
|
+
target: 'identity/',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
type: 'file',
|
|
135
|
+
description: 'Restore .claude/ directory structure',
|
|
136
|
+
target: '.claude/',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
type: 'file',
|
|
140
|
+
description: 'Restore global ~/.claude/ settings',
|
|
141
|
+
target: '~/.claude/',
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
manualSteps: [
|
|
145
|
+
'Verify .claude/settings.json permissions are correct for your workflow',
|
|
146
|
+
'Review restored CLAUDE.md for project-specific paths that may need updating',
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
return snapshot;
|
|
151
|
+
}
|
|
152
|
+
async restore(snapshot) {
|
|
153
|
+
// Restore CLAUDE.md files from concatenated personality
|
|
154
|
+
if (snapshot.identity.personality) {
|
|
155
|
+
await this.restoreClaudeMdFiles(snapshot.identity.personality);
|
|
156
|
+
}
|
|
157
|
+
// Restore .claude/ directory settings
|
|
158
|
+
if (snapshot.identity.config) {
|
|
159
|
+
await this.restoreSettings(snapshot.identity.config);
|
|
160
|
+
}
|
|
161
|
+
// Restore memory files
|
|
162
|
+
if (snapshot.memory.core.length > 0) {
|
|
163
|
+
await this.restoreMemory(snapshot.memory.core);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async identify() {
|
|
167
|
+
const version = await this.detectClaudeCodeVersion();
|
|
168
|
+
const projectType = this.detectProjectType(await this.readProjectMeta());
|
|
169
|
+
return {
|
|
170
|
+
name: 'Claude Code',
|
|
171
|
+
version: version ?? 'unknown',
|
|
172
|
+
exportMethod: 'direct-file-access',
|
|
173
|
+
// Store extra metadata in apiVersion field for project info
|
|
174
|
+
apiVersion: `project-type:${projectType};root:${this.projectDir}`,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
// ─── Private: Reading ─────────────────────────────────────
|
|
178
|
+
/**
|
|
179
|
+
* Read all CLAUDE.md files — root + subdirectories.
|
|
180
|
+
* Concatenates with path markers.
|
|
181
|
+
*/
|
|
182
|
+
async readClaudeMdFiles() {
|
|
183
|
+
const parts = [];
|
|
184
|
+
// Root CLAUDE.md
|
|
185
|
+
const rootClaudeMd = join(this.projectDir, 'CLAUDE.md');
|
|
186
|
+
if (existsSync(rootClaudeMd)) {
|
|
187
|
+
const content = await this.safeReadFile(rootClaudeMd);
|
|
188
|
+
if (content !== null) {
|
|
189
|
+
parts.push(`--- CLAUDE.md ---\n${content}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Search for subdirectory CLAUDE.md files (up to 3 levels deep)
|
|
193
|
+
const subClaudeMds = await this.findFiles('CLAUDE.md', this.projectDir, 3);
|
|
194
|
+
for (const filePath of subClaudeMds) {
|
|
195
|
+
const relPath = relative(this.projectDir, filePath);
|
|
196
|
+
if (relPath === 'CLAUDE.md')
|
|
197
|
+
continue; // Already handled
|
|
198
|
+
const content = await this.safeReadFile(filePath);
|
|
199
|
+
if (content !== null) {
|
|
200
|
+
parts.push(`--- ${relPath} ---\n${content}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return parts.join('\n\n');
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Read memory files from .claude/memory/ and other locations.
|
|
207
|
+
*/
|
|
208
|
+
async readMemoryFiles() {
|
|
209
|
+
const entries = [];
|
|
210
|
+
// .claude/todos.md
|
|
211
|
+
const todosPath = join(this.projectDir, '.claude', 'todos.md');
|
|
212
|
+
if (existsSync(todosPath)) {
|
|
213
|
+
const content = await this.safeReadFile(todosPath);
|
|
214
|
+
if (content !== null) {
|
|
215
|
+
const fileStat = await stat(todosPath);
|
|
216
|
+
entries.push({
|
|
217
|
+
id: 'file:.claude/todos.md',
|
|
218
|
+
content,
|
|
219
|
+
source: '.claude/todos.md',
|
|
220
|
+
createdAt: fileStat.birthtime.toISOString(),
|
|
221
|
+
updatedAt: fileStat.mtime.toISOString(),
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// .claude/memory/ directory
|
|
226
|
+
const memoryDir = join(this.projectDir, '.claude', 'memory');
|
|
227
|
+
if (existsSync(memoryDir)) {
|
|
228
|
+
const files = await readdir(memoryDir).catch(() => []);
|
|
229
|
+
for (const file of files) {
|
|
230
|
+
const filePath = join(memoryDir, file);
|
|
231
|
+
const s = await stat(filePath).catch(() => null);
|
|
232
|
+
if (!s?.isFile())
|
|
233
|
+
continue;
|
|
234
|
+
const content = await this.safeReadFile(filePath);
|
|
235
|
+
if (content !== null) {
|
|
236
|
+
entries.push({
|
|
237
|
+
id: `file:.claude/memory/${file}`,
|
|
238
|
+
content,
|
|
239
|
+
source: `.claude/memory/${file}`,
|
|
240
|
+
createdAt: s.birthtime.toISOString(),
|
|
241
|
+
updatedAt: s.mtime.toISOString(),
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Global ~/.claude/CLAUDE.md
|
|
247
|
+
const globalClaudeMd = join(homedir(), '.claude', 'CLAUDE.md');
|
|
248
|
+
if (existsSync(globalClaudeMd)) {
|
|
249
|
+
const content = await this.safeReadFile(globalClaudeMd);
|
|
250
|
+
if (content !== null) {
|
|
251
|
+
const fileStat = await stat(globalClaudeMd);
|
|
252
|
+
entries.push({
|
|
253
|
+
id: 'file:~/.claude/CLAUDE.md',
|
|
254
|
+
content,
|
|
255
|
+
source: '~/.claude/CLAUDE.md',
|
|
256
|
+
createdAt: fileStat.birthtime.toISOString(),
|
|
257
|
+
updatedAt: fileStat.mtime.toISOString(),
|
|
258
|
+
metadata: { global: true },
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return entries;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Read settings from .claude/ and ~/.claude/
|
|
266
|
+
*/
|
|
267
|
+
async readSettings() {
|
|
268
|
+
const settings = {};
|
|
269
|
+
// .claude/settings.json (project)
|
|
270
|
+
const projectSettings = join(this.projectDir, '.claude', 'settings.json');
|
|
271
|
+
if (existsSync(projectSettings)) {
|
|
272
|
+
const content = await this.safeReadFile(projectSettings);
|
|
273
|
+
if (content !== null) {
|
|
274
|
+
settings['.claude/settings.json'] = content;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// .claude/settings.local.json (local overrides)
|
|
278
|
+
const localSettings = join(this.projectDir, '.claude', 'settings.local.json');
|
|
279
|
+
if (existsSync(localSettings)) {
|
|
280
|
+
const content = await this.safeReadFile(localSettings);
|
|
281
|
+
if (content !== null) {
|
|
282
|
+
settings['.claude/settings.local.json'] = content;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// ~/.claude/settings.json (global)
|
|
286
|
+
const globalSettings = join(homedir(), '.claude', 'settings.json');
|
|
287
|
+
if (existsSync(globalSettings)) {
|
|
288
|
+
const content = await this.safeReadFile(globalSettings);
|
|
289
|
+
if (content !== null) {
|
|
290
|
+
settings['~/.claude/settings.json'] = content;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return Object.keys(settings).length > 0 ? settings : undefined;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Read project metadata files (package.json, pyproject.toml, etc.)
|
|
297
|
+
*/
|
|
298
|
+
async readProjectMeta() {
|
|
299
|
+
const meta = {};
|
|
300
|
+
for (const file of PROJECT_META_FILES) {
|
|
301
|
+
const filePath = join(this.projectDir, file);
|
|
302
|
+
if (existsSync(filePath)) {
|
|
303
|
+
const content = await this.safeReadFile(filePath);
|
|
304
|
+
if (content !== null) {
|
|
305
|
+
meta[file] = content;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return meta;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Build a file manifest of the project (paths + sizes, no content).
|
|
313
|
+
*/
|
|
314
|
+
async buildFileManifest() {
|
|
315
|
+
const manifest = [];
|
|
316
|
+
await this.walkForManifest(this.projectDir, '', manifest, 0);
|
|
317
|
+
return manifest;
|
|
318
|
+
}
|
|
319
|
+
async walkForManifest(dir, prefix, manifest, depth) {
|
|
320
|
+
if (depth > MAX_MANIFEST_DEPTH)
|
|
321
|
+
return;
|
|
322
|
+
const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
323
|
+
for (const entry of entries) {
|
|
324
|
+
if (SKIP_DIRS.has(entry.name))
|
|
325
|
+
continue;
|
|
326
|
+
if (entry.name.startsWith('.') && depth === 0 && entry.name !== '.claude')
|
|
327
|
+
continue;
|
|
328
|
+
const fullPath = join(dir, entry.name);
|
|
329
|
+
const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
330
|
+
if (entry.isDirectory()) {
|
|
331
|
+
await this.walkForManifest(fullPath, relPath, manifest, depth + 1);
|
|
332
|
+
}
|
|
333
|
+
else if (entry.isFile()) {
|
|
334
|
+
try {
|
|
335
|
+
const s = await stat(fullPath);
|
|
336
|
+
manifest.push({
|
|
337
|
+
path: relPath,
|
|
338
|
+
size: s.size,
|
|
339
|
+
modified: s.mtime.toISOString(),
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
// Skip unreadable files
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Build knowledge documents from CLAUDE.md files and settings.
|
|
350
|
+
*/
|
|
351
|
+
async buildKnowledge() {
|
|
352
|
+
const docs = [];
|
|
353
|
+
const rootClaudeMd = join(this.projectDir, 'CLAUDE.md');
|
|
354
|
+
if (existsSync(rootClaudeMd)) {
|
|
355
|
+
const content = await this.safeReadFile(rootClaudeMd);
|
|
356
|
+
if (content !== null) {
|
|
357
|
+
const buf = Buffer.from(content, 'utf-8');
|
|
358
|
+
docs.push({
|
|
359
|
+
id: 'claude-md:root',
|
|
360
|
+
filename: 'CLAUDE.md',
|
|
361
|
+
mimeType: 'text/markdown',
|
|
362
|
+
path: 'knowledge/CLAUDE.md',
|
|
363
|
+
size: buf.length,
|
|
364
|
+
checksum: computeChecksum(buf),
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return docs;
|
|
369
|
+
}
|
|
370
|
+
// ─── Private: Restore ─────────────────────────────────────
|
|
371
|
+
/**
|
|
372
|
+
* Parse concatenated CLAUDE.md personality back into individual files.
|
|
373
|
+
*/
|
|
374
|
+
async restoreClaudeMdFiles(personality) {
|
|
375
|
+
const files = this.parsePersonality(personality);
|
|
376
|
+
for (const [relPath, content] of files) {
|
|
377
|
+
const targetPath = join(this.projectDir, relPath);
|
|
378
|
+
await this.backupFile(targetPath);
|
|
379
|
+
await mkdir(dirname(targetPath), { recursive: true });
|
|
380
|
+
await writeFile(targetPath, content, 'utf-8');
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Restore settings files.
|
|
385
|
+
*/
|
|
386
|
+
async restoreSettings(settings) {
|
|
387
|
+
for (const [file, value] of Object.entries(settings)) {
|
|
388
|
+
if (typeof value !== 'string')
|
|
389
|
+
continue;
|
|
390
|
+
let targetPath;
|
|
391
|
+
if (file.startsWith('~/')) {
|
|
392
|
+
targetPath = join(homedir(), file.slice(2));
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
targetPath = join(this.projectDir, file);
|
|
396
|
+
}
|
|
397
|
+
await this.backupFile(targetPath);
|
|
398
|
+
await mkdir(dirname(targetPath), { recursive: true });
|
|
399
|
+
await writeFile(targetPath, value, 'utf-8');
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Restore memory entries to their source files.
|
|
404
|
+
*/
|
|
405
|
+
async restoreMemory(entries) {
|
|
406
|
+
for (const entry of entries) {
|
|
407
|
+
let targetPath;
|
|
408
|
+
if (entry.source.startsWith('~/')) {
|
|
409
|
+
targetPath = join(homedir(), entry.source.slice(2));
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
targetPath = join(this.projectDir, entry.source);
|
|
413
|
+
}
|
|
414
|
+
await this.backupFile(targetPath);
|
|
415
|
+
await mkdir(dirname(targetPath), { recursive: true });
|
|
416
|
+
await writeFile(targetPath, entry.content, 'utf-8');
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
// ─── Private: Utilities ───────────────────────────────────
|
|
420
|
+
isBinary(filePath) {
|
|
421
|
+
const ext = extname(filePath).toLowerCase();
|
|
422
|
+
return BINARY_EXTENSIONS.has(ext);
|
|
423
|
+
}
|
|
424
|
+
async safeReadFile(filePath) {
|
|
425
|
+
if (this.isBinary(filePath))
|
|
426
|
+
return null;
|
|
427
|
+
try {
|
|
428
|
+
const s = await stat(filePath);
|
|
429
|
+
if (s.size > MAX_FILE_SIZE) {
|
|
430
|
+
this.warnings.push(`Skipped ${filePath} (${(s.size / 1024 / 1024).toFixed(1)}MB > 1MB limit)`);
|
|
431
|
+
return null;
|
|
432
|
+
}
|
|
433
|
+
return await readFile(filePath, 'utf-8');
|
|
434
|
+
}
|
|
435
|
+
catch {
|
|
436
|
+
return null;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Find files with a specific name up to maxDepth levels.
|
|
441
|
+
*/
|
|
442
|
+
async findFiles(name, dir, maxDepth, depth = 0) {
|
|
443
|
+
if (depth > maxDepth)
|
|
444
|
+
return [];
|
|
445
|
+
const results = [];
|
|
446
|
+
const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
447
|
+
for (const entry of entries) {
|
|
448
|
+
if (SKIP_DIRS.has(entry.name))
|
|
449
|
+
continue;
|
|
450
|
+
if (entry.name.startsWith('.') && entry.name !== '.claude')
|
|
451
|
+
continue;
|
|
452
|
+
const fullPath = join(dir, entry.name);
|
|
453
|
+
if (entry.isFile() && entry.name === name) {
|
|
454
|
+
results.push(fullPath);
|
|
455
|
+
}
|
|
456
|
+
else if (entry.isDirectory()) {
|
|
457
|
+
const sub = await this.findFiles(name, fullPath, maxDepth, depth + 1);
|
|
458
|
+
results.push(...sub);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
return results;
|
|
462
|
+
}
|
|
463
|
+
parsePersonality(personality) {
|
|
464
|
+
const files = new Map();
|
|
465
|
+
const regex = /^--- (.+?) ---$/gm;
|
|
466
|
+
const matches = [...personality.matchAll(regex)];
|
|
467
|
+
for (let i = 0; i < matches.length; i++) {
|
|
468
|
+
const filename = matches[i][1];
|
|
469
|
+
const startIdx = matches[i].index + matches[i][0].length + 1;
|
|
470
|
+
const endIdx = i + 1 < matches.length ? matches[i + 1].index : personality.length;
|
|
471
|
+
let content = personality.slice(startIdx, endIdx);
|
|
472
|
+
content = content.replace(/\n\n$/, '\n');
|
|
473
|
+
if (!content.endsWith('\n'))
|
|
474
|
+
content += '\n';
|
|
475
|
+
files.set(filename, content);
|
|
476
|
+
}
|
|
477
|
+
return files;
|
|
478
|
+
}
|
|
479
|
+
async backupFile(filePath) {
|
|
480
|
+
if (existsSync(filePath)) {
|
|
481
|
+
const backupPath = filePath + '.bak';
|
|
482
|
+
try {
|
|
483
|
+
await rename(filePath, backupPath);
|
|
484
|
+
}
|
|
485
|
+
catch {
|
|
486
|
+
// Continue without backup
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Try to detect Claude Code version from common locations.
|
|
492
|
+
*/
|
|
493
|
+
async detectClaudeCodeVersion() {
|
|
494
|
+
// Check if claude is on PATH and get version
|
|
495
|
+
// We can't run a command here, but we can look for version files
|
|
496
|
+
const versionLocations = [
|
|
497
|
+
join(homedir(), '.claude', 'version'),
|
|
498
|
+
join(homedir(), '.claude', '.version'),
|
|
499
|
+
];
|
|
500
|
+
for (const loc of versionLocations) {
|
|
501
|
+
if (existsSync(loc)) {
|
|
502
|
+
try {
|
|
503
|
+
const v = await readFile(loc, 'utf-8');
|
|
504
|
+
return v.trim();
|
|
505
|
+
}
|
|
506
|
+
catch {
|
|
507
|
+
// ignore
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
return null;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Detect project type from metadata files.
|
|
515
|
+
*/
|
|
516
|
+
detectProjectType(meta) {
|
|
517
|
+
if (meta['Cargo.toml'])
|
|
518
|
+
return 'rust';
|
|
519
|
+
if (meta['pyproject.toml'])
|
|
520
|
+
return 'python';
|
|
521
|
+
if (meta['go.mod'])
|
|
522
|
+
return 'go';
|
|
523
|
+
if (meta['Gemfile'])
|
|
524
|
+
return 'ruby';
|
|
525
|
+
if (meta['composer.json'])
|
|
526
|
+
return 'php';
|
|
527
|
+
if (meta['build.gradle'] || meta['pom.xml'])
|
|
528
|
+
return 'java';
|
|
529
|
+
if (meta['deno.json'] || meta['deno.jsonc'])
|
|
530
|
+
return 'deno';
|
|
531
|
+
if (meta['package.json'])
|
|
532
|
+
return 'node';
|
|
533
|
+
if (meta['CMakeLists.txt'])
|
|
534
|
+
return 'cpp';
|
|
535
|
+
if (meta['Makefile'])
|
|
536
|
+
return 'make';
|
|
537
|
+
return 'unknown';
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clawdbot Adapter
|
|
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.
|
|
8
|
+
*
|
|
9
|
+
* This is the dogfood adapter — SaveState eats its own cooking.
|
|
10
|
+
*/
|
|
11
|
+
import type { Adapter, PlatformMeta, Snapshot } from '../types.js';
|
|
12
|
+
export declare class ClawdbotAdapter implements Adapter {
|
|
13
|
+
readonly id = "clawdbot";
|
|
14
|
+
readonly name = "Clawdbot";
|
|
15
|
+
readonly platform = "clawdbot";
|
|
16
|
+
readonly version = "0.2.0";
|
|
17
|
+
private readonly workspaceDir;
|
|
18
|
+
private warnings;
|
|
19
|
+
constructor(workspaceDir?: string);
|
|
20
|
+
detect(): Promise<boolean>;
|
|
21
|
+
extract(): Promise<Snapshot>;
|
|
22
|
+
restore(snapshot: Snapshot): Promise<void>;
|
|
23
|
+
identify(): Promise<PlatformMeta>;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a file should be skipped (binary or too large).
|
|
26
|
+
*/
|
|
27
|
+
private isBinary;
|
|
28
|
+
private checkFileSize;
|
|
29
|
+
private safeReadFile;
|
|
30
|
+
private readIdentity;
|
|
31
|
+
private readMemory;
|
|
32
|
+
private readConversations;
|
|
33
|
+
/**
|
|
34
|
+
* Read skills/ directory — capture SKILL.md and scripts/ for each skill.
|
|
35
|
+
*/
|
|
36
|
+
private readSkills;
|
|
37
|
+
/**
|
|
38
|
+
* Read personal-scripts/ and personal-scripts/cron-wrappers/
|
|
39
|
+
*/
|
|
40
|
+
private readScripts;
|
|
41
|
+
/**
|
|
42
|
+
* Read extensions/ directory configs (skip node_modules and binary files).
|
|
43
|
+
*/
|
|
44
|
+
private readExtensions;
|
|
45
|
+
/**
|
|
46
|
+
* Read config files from workspace root.
|
|
47
|
+
*/
|
|
48
|
+
private readConfigFiles;
|
|
49
|
+
/**
|
|
50
|
+
* Build knowledge documents index from skills and scripts.
|
|
51
|
+
*/
|
|
52
|
+
private buildKnowledgeIndex;
|
|
53
|
+
private readJsonSafe;
|
|
54
|
+
/**
|
|
55
|
+
* Walk a directory recursively and return file paths matching optional extensions.
|
|
56
|
+
*/
|
|
57
|
+
private walkDir;
|
|
58
|
+
/**
|
|
59
|
+
* Parse concatenated personality back into individual files and write them.
|
|
60
|
+
* Files are joined with `--- FILENAME ---` markers.
|
|
61
|
+
*/
|
|
62
|
+
private restoreIdentity;
|
|
63
|
+
/**
|
|
64
|
+
* Parse the concatenated personality string into individual files.
|
|
65
|
+
* Format: `--- FILENAME ---\ncontent\n\n--- NEXTFILE ---\ncontent`
|
|
66
|
+
*/
|
|
67
|
+
private parsePersonality;
|
|
68
|
+
/**
|
|
69
|
+
* Restore memory entries back to their source files.
|
|
70
|
+
*/
|
|
71
|
+
private restoreMemory;
|
|
72
|
+
/**
|
|
73
|
+
* Restore skills back to skills/ directory.
|
|
74
|
+
*/
|
|
75
|
+
private restoreSkills;
|
|
76
|
+
/**
|
|
77
|
+
* Restore personal scripts.
|
|
78
|
+
*/
|
|
79
|
+
private restoreScripts;
|
|
80
|
+
/**
|
|
81
|
+
* Restore extension configs.
|
|
82
|
+
*/
|
|
83
|
+
private restoreExtensions;
|
|
84
|
+
/**
|
|
85
|
+
* Restore config files to workspace root.
|
|
86
|
+
*/
|
|
87
|
+
private restoreConfigFiles;
|
|
88
|
+
/**
|
|
89
|
+
* Create a .bak backup of an existing file before overwriting.
|
|
90
|
+
*/
|
|
91
|
+
private backupFile;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=clawdbot.d.ts.map
|
|
@@ -0,0 +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"}
|