contextmate 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 +142 -0
- package/dist/src/adapters/base.d.ts +32 -0
- package/dist/src/adapters/base.d.ts.map +1 -0
- package/dist/src/adapters/base.js +49 -0
- package/dist/src/adapters/base.js.map +1 -0
- package/dist/src/adapters/claude.d.ts +30 -0
- package/dist/src/adapters/claude.d.ts.map +1 -0
- package/dist/src/adapters/claude.js +534 -0
- package/dist/src/adapters/claude.js.map +1 -0
- package/dist/src/adapters/index.d.ts +7 -0
- package/dist/src/adapters/index.d.ts.map +1 -0
- package/dist/src/adapters/index.js +16 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/adapters/openclaw.d.ts +15 -0
- package/dist/src/adapters/openclaw.d.ts.map +1 -0
- package/dist/src/adapters/openclaw.js +198 -0
- package/dist/src/adapters/openclaw.js.map +1 -0
- package/dist/src/bin/contextmate.d.ts +3 -0
- package/dist/src/bin/contextmate.d.ts.map +1 -0
- package/dist/src/bin/contextmate.js +4 -0
- package/dist/src/bin/contextmate.js.map +1 -0
- package/dist/src/cli/adapter.d.ts +3 -0
- package/dist/src/cli/adapter.d.ts.map +1 -0
- package/dist/src/cli/adapter.js +187 -0
- package/dist/src/cli/adapter.js.map +1 -0
- package/dist/src/cli/daemon.d.ts +3 -0
- package/dist/src/cli/daemon.d.ts.map +1 -0
- package/dist/src/cli/daemon.js +212 -0
- package/dist/src/cli/daemon.js.map +1 -0
- package/dist/src/cli/files.d.ts +3 -0
- package/dist/src/cli/files.d.ts.map +1 -0
- package/dist/src/cli/files.js +158 -0
- package/dist/src/cli/files.js.map +1 -0
- package/dist/src/cli/index.d.ts +3 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +20 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/init.d.ts +3 -0
- package/dist/src/cli/init.d.ts.map +1 -0
- package/dist/src/cli/init.js +88 -0
- package/dist/src/cli/init.js.map +1 -0
- package/dist/src/cli/log.d.ts +3 -0
- package/dist/src/cli/log.d.ts.map +1 -0
- package/dist/src/cli/log.js +141 -0
- package/dist/src/cli/log.js.map +1 -0
- package/dist/src/cli/mcp.d.ts +3 -0
- package/dist/src/cli/mcp.d.ts.map +1 -0
- package/dist/src/cli/mcp.js +186 -0
- package/dist/src/cli/mcp.js.map +1 -0
- package/dist/src/cli/status.d.ts +3 -0
- package/dist/src/cli/status.d.ts.map +1 -0
- package/dist/src/cli/status.js +107 -0
- package/dist/src/cli/status.js.map +1 -0
- package/dist/src/config.d.ts +42 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +93 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/crypto/auth.d.ts +4 -0
- package/dist/src/crypto/auth.d.ts.map +1 -0
- package/dist/src/crypto/auth.js +21 -0
- package/dist/src/crypto/auth.js.map +1 -0
- package/dist/src/crypto/encrypt.d.ts +9 -0
- package/dist/src/crypto/encrypt.d.ts.map +1 -0
- package/dist/src/crypto/encrypt.js +39 -0
- package/dist/src/crypto/encrypt.js.map +1 -0
- package/dist/src/crypto/index.d.ts +4 -0
- package/dist/src/crypto/index.d.ts.map +1 -0
- package/dist/src/crypto/index.js +4 -0
- package/dist/src/crypto/index.js.map +1 -0
- package/dist/src/crypto/keys.d.ts +9 -0
- package/dist/src/crypto/keys.d.ts.map +1 -0
- package/dist/src/crypto/keys.js +43 -0
- package/dist/src/crypto/keys.js.map +1 -0
- package/dist/src/mcp/embeddings.d.ts +16 -0
- package/dist/src/mcp/embeddings.d.ts.map +1 -0
- package/dist/src/mcp/embeddings.js +237 -0
- package/dist/src/mcp/embeddings.js.map +1 -0
- package/dist/src/mcp/index.d.ts +10 -0
- package/dist/src/mcp/index.d.ts.map +1 -0
- package/dist/src/mcp/index.js +6 -0
- package/dist/src/mcp/index.js.map +1 -0
- package/dist/src/mcp/rerank.d.ts +14 -0
- package/dist/src/mcp/rerank.d.ts.map +1 -0
- package/dist/src/mcp/rerank.js +47 -0
- package/dist/src/mcp/rerank.js.map +1 -0
- package/dist/src/mcp/scope.d.ts +26 -0
- package/dist/src/mcp/scope.d.ts.map +1 -0
- package/dist/src/mcp/scope.js +71 -0
- package/dist/src/mcp/scope.js.map +1 -0
- package/dist/src/mcp/search.d.ts +18 -0
- package/dist/src/mcp/search.d.ts.map +1 -0
- package/dist/src/mcp/search.js +110 -0
- package/dist/src/mcp/search.js.map +1 -0
- package/dist/src/mcp/server.d.ts +15 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +340 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/sync/client.d.ts +25 -0
- package/dist/src/sync/client.d.ts.map +1 -0
- package/dist/src/sync/client.js +109 -0
- package/dist/src/sync/client.js.map +1 -0
- package/dist/src/sync/engine.d.ts +21 -0
- package/dist/src/sync/engine.d.ts.map +1 -0
- package/dist/src/sync/engine.js +304 -0
- package/dist/src/sync/engine.js.map +1 -0
- package/dist/src/sync/index.d.ts +6 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +6 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/sync/state.d.ts +33 -0
- package/dist/src/sync/state.d.ts.map +1 -0
- package/dist/src/sync/state.js +146 -0
- package/dist/src/sync/state.js.map +1 -0
- package/dist/src/sync/watcher.d.ts +14 -0
- package/dist/src/sync/watcher.d.ts.map +1 -0
- package/dist/src/sync/watcher.js +74 -0
- package/dist/src/sync/watcher.js.map +1 -0
- package/dist/src/sync/websocket.d.ts +22 -0
- package/dist/src/sync/websocket.d.ts.map +1 -0
- package/dist/src/sync/websocket.js +103 -0
- package/dist/src/sync/websocket.js.map +1 -0
- package/dist/src/types.d.ts +63 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/paths.d.ts +9 -0
- package/dist/src/utils/paths.d.ts.map +1 -0
- package/dist/src/utils/paths.js +24 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
import { readFile, readdir, access, stat, unlink, copyFile, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { join, relative } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { BaseAdapter } from './base.js';
|
|
5
|
+
export class ClaudeCodeAdapter extends BaseAdapter {
|
|
6
|
+
get name() {
|
|
7
|
+
return 'claude';
|
|
8
|
+
}
|
|
9
|
+
async detect() {
|
|
10
|
+
const claudeDir = join(homedir(), '.claude');
|
|
11
|
+
try {
|
|
12
|
+
await access(claudeDir);
|
|
13
|
+
return claudeDir;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async import(claudeDir) {
|
|
20
|
+
const result = { imported: [], skipped: [], errors: [] };
|
|
21
|
+
const skillsPath = join(homedir(), '.agents', 'skills');
|
|
22
|
+
// 1. Import skills: ~/.agents/skills/*/SKILL.md -> vault/skills/*/SKILL.md
|
|
23
|
+
await this.importSkills(skillsPath, result);
|
|
24
|
+
// 2. Import rules: ~/.claude/rules/*.md -> vault/claude/rules/*.md
|
|
25
|
+
await this.importRules(join(claudeDir, 'rules'), result);
|
|
26
|
+
// 3. Import global CLAUDE.md: ~/.claude/CLAUDE.md -> vault/claude/CLAUDE.md
|
|
27
|
+
await this.importSingleFile(join(claudeDir, 'CLAUDE.md'), join('claude', 'CLAUDE.md'), result);
|
|
28
|
+
// 4. Import project memories: ~/.claude/projects/*/memory/*.md -> vault/claude/projects/*/memory/*.md
|
|
29
|
+
await this.importProjectMemories(join(claudeDir, 'projects'), result);
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
async createSymlinks(claudeDir) {
|
|
33
|
+
const result = { created: [], errors: [] };
|
|
34
|
+
const skillsPath = join(homedir(), '.agents', 'skills');
|
|
35
|
+
// 1. Skills: link vault/skills/* into ~/.agents/skills/
|
|
36
|
+
await this.symlinkSkills(skillsPath, result);
|
|
37
|
+
// 2. Rules: link vault/claude/rules/*.md back to ~/.claude/rules/
|
|
38
|
+
await this.symlinkFiles(join(this.vaultPath, 'claude', 'rules'), join(claudeDir, 'rules'), result, 'rules/');
|
|
39
|
+
// 3. CLAUDE.md: link vault/claude/CLAUDE.md to ~/.claude/CLAUDE.md
|
|
40
|
+
const vaultClaudeMd = join(this.vaultPath, 'claude', 'CLAUDE.md');
|
|
41
|
+
try {
|
|
42
|
+
await access(vaultClaudeMd);
|
|
43
|
+
await this.safeSymlink(vaultClaudeMd, join(claudeDir, 'CLAUDE.md'));
|
|
44
|
+
result.created.push('CLAUDE.md');
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// No CLAUDE.md in vault
|
|
48
|
+
}
|
|
49
|
+
// 4. Project memories: link vault/claude/projects/*/memory/*.md back to ~/.claude/projects/*/memory/
|
|
50
|
+
await this.symlinkProjectMemories(claudeDir, result);
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
async verifySymlinks(claudeDir) {
|
|
54
|
+
const valid = [];
|
|
55
|
+
const broken = [];
|
|
56
|
+
const skillsPath = join(homedir(), '.agents', 'skills');
|
|
57
|
+
// 1. Verify skill symlinks
|
|
58
|
+
await this.verifySkillSymlinks(skillsPath, valid, broken);
|
|
59
|
+
// 2. Verify rule symlinks
|
|
60
|
+
await this.verifyFileSymlinks(join(this.vaultPath, 'claude', 'rules'), join(claudeDir, 'rules'), valid, broken, 'rules/');
|
|
61
|
+
// 3. Verify CLAUDE.md symlink
|
|
62
|
+
const claudeMdLink = join(claudeDir, 'CLAUDE.md');
|
|
63
|
+
const vaultClaudeMd = join(this.vaultPath, 'claude', 'CLAUDE.md');
|
|
64
|
+
try {
|
|
65
|
+
await access(vaultClaudeMd);
|
|
66
|
+
if (await this.isSymlink(claudeMdLink)) {
|
|
67
|
+
try {
|
|
68
|
+
await stat(claudeMdLink);
|
|
69
|
+
valid.push('CLAUDE.md');
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
broken.push('CLAUDE.md');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
broken.push('CLAUDE.md');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// No CLAUDE.md in vault, skip
|
|
81
|
+
}
|
|
82
|
+
// 4. Verify project memory symlinks
|
|
83
|
+
await this.verifyProjectMemorySymlinks(claudeDir, valid, broken);
|
|
84
|
+
return { valid, broken };
|
|
85
|
+
}
|
|
86
|
+
async removeSymlinks(claudeDir) {
|
|
87
|
+
const skillsPath = join(homedir(), '.agents', 'skills');
|
|
88
|
+
// 1. Remove skill symlinks
|
|
89
|
+
await this.removeSkillSymlinks(skillsPath);
|
|
90
|
+
// 2. Remove rule symlinks
|
|
91
|
+
await this.removeFileSymlinks(join(this.vaultPath, 'claude', 'rules'), join(claudeDir, 'rules'));
|
|
92
|
+
// 3. Remove CLAUDE.md symlink
|
|
93
|
+
await this.removeSingleSymlink(join(claudeDir, 'CLAUDE.md'), join(this.vaultPath, 'claude', 'CLAUDE.md'));
|
|
94
|
+
// 4. Remove project memory symlinks
|
|
95
|
+
await this.removeProjectMemorySymlinks(claudeDir);
|
|
96
|
+
}
|
|
97
|
+
// --- Import helpers ---
|
|
98
|
+
async importSkills(skillsPath, result) {
|
|
99
|
+
const skillDirs = await this.discoverSkillDirs(skillsPath);
|
|
100
|
+
for (const skillDir of skillDirs) {
|
|
101
|
+
const skillName = relative(skillsPath, skillDir);
|
|
102
|
+
const skillFile = join(skillDir, 'SKILL.md');
|
|
103
|
+
const vaultRelative = join('skills', skillName, 'SKILL.md');
|
|
104
|
+
try {
|
|
105
|
+
await this.importSingleFile(skillFile, vaultRelative, result);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
109
|
+
result.errors.push(`skill ${skillName}: ${message}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async importRules(rulesDir, result) {
|
|
114
|
+
let names;
|
|
115
|
+
try {
|
|
116
|
+
names = await readdir(rulesDir);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return; // No rules directory
|
|
120
|
+
}
|
|
121
|
+
for (const name of names) {
|
|
122
|
+
if (!name.endsWith('.md'))
|
|
123
|
+
continue;
|
|
124
|
+
const filePath = join(rulesDir, name);
|
|
125
|
+
const s = await stat(filePath);
|
|
126
|
+
if (!s.isFile())
|
|
127
|
+
continue;
|
|
128
|
+
const vaultRelative = join('claude', 'rules', name);
|
|
129
|
+
try {
|
|
130
|
+
await this.importSingleFile(filePath, vaultRelative, result);
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
134
|
+
result.errors.push(`rule ${name}: ${message}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async importProjectMemories(projectsDir, result) {
|
|
139
|
+
let projectNames;
|
|
140
|
+
try {
|
|
141
|
+
projectNames = await readdir(projectsDir);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return; // No projects directory
|
|
145
|
+
}
|
|
146
|
+
for (const projectName of projectNames) {
|
|
147
|
+
const memoryDir = join(projectsDir, projectName, 'memory');
|
|
148
|
+
let memoryFiles;
|
|
149
|
+
try {
|
|
150
|
+
memoryFiles = await readdir(memoryDir);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
continue; // No memory directory in this project
|
|
154
|
+
}
|
|
155
|
+
for (const fileName of memoryFiles) {
|
|
156
|
+
if (!fileName.endsWith('.md'))
|
|
157
|
+
continue;
|
|
158
|
+
const filePath = join(memoryDir, fileName);
|
|
159
|
+
const s = await stat(filePath);
|
|
160
|
+
if (!s.isFile())
|
|
161
|
+
continue;
|
|
162
|
+
const vaultRelative = join('claude', 'projects', projectName, 'memory', fileName);
|
|
163
|
+
try {
|
|
164
|
+
await this.importSingleFile(filePath, vaultRelative, result);
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
168
|
+
result.errors.push(`project memory ${projectName}/${fileName}: ${message}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
async importSingleFile(sourcePath, vaultRelative, result) {
|
|
174
|
+
let sourceContent;
|
|
175
|
+
try {
|
|
176
|
+
sourceContent = await readFile(sourcePath, 'utf-8');
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return; // Source file doesn't exist
|
|
180
|
+
}
|
|
181
|
+
const vaultDest = join(this.vaultPath, vaultRelative);
|
|
182
|
+
try {
|
|
183
|
+
const existingContent = await readFile(vaultDest, 'utf-8');
|
|
184
|
+
if (existingContent === sourceContent) {
|
|
185
|
+
result.skipped.push(vaultRelative);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// File doesn't exist in vault yet
|
|
191
|
+
}
|
|
192
|
+
await this.copyToVault(sourcePath, vaultRelative);
|
|
193
|
+
result.imported.push(vaultRelative);
|
|
194
|
+
}
|
|
195
|
+
// --- Symlink helpers ---
|
|
196
|
+
async symlinkSkills(skillsPath, result) {
|
|
197
|
+
await mkdir(skillsPath, { recursive: true });
|
|
198
|
+
const vaultSkillsDir = join(this.vaultPath, 'skills');
|
|
199
|
+
let skillNames;
|
|
200
|
+
try {
|
|
201
|
+
skillNames = await readdir(vaultSkillsDir);
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
for (const name of skillNames) {
|
|
207
|
+
const vaultSkillDir = join(vaultSkillsDir, name);
|
|
208
|
+
const s = await stat(vaultSkillDir);
|
|
209
|
+
if (!s.isDirectory())
|
|
210
|
+
continue;
|
|
211
|
+
const linkPath = join(skillsPath, name);
|
|
212
|
+
try {
|
|
213
|
+
if (!(await this.isSymlink(linkPath))) {
|
|
214
|
+
try {
|
|
215
|
+
await access(linkPath);
|
|
216
|
+
await this.backupDirectory(linkPath, name);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// Doesn't exist
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
await this.safeSymlink(vaultSkillDir, linkPath);
|
|
223
|
+
result.created.push(`skill:${name}`);
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
227
|
+
result.errors.push(`skill ${name}: ${message}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async symlinkFiles(vaultDir, targetDir, result, prefix) {
|
|
232
|
+
let names;
|
|
233
|
+
try {
|
|
234
|
+
names = await readdir(vaultDir);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
await mkdir(targetDir, { recursive: true });
|
|
240
|
+
for (const name of names) {
|
|
241
|
+
const vaultFile = join(vaultDir, name);
|
|
242
|
+
const s = await stat(vaultFile);
|
|
243
|
+
if (!s.isFile())
|
|
244
|
+
continue;
|
|
245
|
+
const linkPath = join(targetDir, name);
|
|
246
|
+
try {
|
|
247
|
+
await this.safeSymlink(vaultFile, linkPath);
|
|
248
|
+
result.created.push(`${prefix}${name}`);
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
252
|
+
result.errors.push(`${prefix}${name}: ${message}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
async symlinkProjectMemories(claudeDir, result) {
|
|
257
|
+
const vaultProjectsDir = join(this.vaultPath, 'claude', 'projects');
|
|
258
|
+
let projectNames;
|
|
259
|
+
try {
|
|
260
|
+
projectNames = await readdir(vaultProjectsDir);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
for (const projectName of projectNames) {
|
|
266
|
+
const vaultMemoryDir = join(vaultProjectsDir, projectName, 'memory');
|
|
267
|
+
let memoryFiles;
|
|
268
|
+
try {
|
|
269
|
+
memoryFiles = await readdir(vaultMemoryDir);
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
const targetMemoryDir = join(claudeDir, 'projects', projectName, 'memory');
|
|
275
|
+
await mkdir(targetMemoryDir, { recursive: true });
|
|
276
|
+
for (const fileName of memoryFiles) {
|
|
277
|
+
const vaultFile = join(vaultMemoryDir, fileName);
|
|
278
|
+
const s = await stat(vaultFile);
|
|
279
|
+
if (!s.isFile())
|
|
280
|
+
continue;
|
|
281
|
+
const linkPath = join(targetMemoryDir, fileName);
|
|
282
|
+
try {
|
|
283
|
+
await this.safeSymlink(vaultFile, linkPath);
|
|
284
|
+
result.created.push(`project:${projectName}/memory/${fileName}`);
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
288
|
+
result.errors.push(`project ${projectName}/${fileName}: ${message}`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// --- Verify helpers ---
|
|
294
|
+
async verifySkillSymlinks(skillsPath, valid, broken) {
|
|
295
|
+
const vaultSkillsDir = join(this.vaultPath, 'skills');
|
|
296
|
+
let skillNames;
|
|
297
|
+
try {
|
|
298
|
+
skillNames = await readdir(vaultSkillsDir);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
for (const name of skillNames) {
|
|
304
|
+
const vaultSkillDir = join(vaultSkillsDir, name);
|
|
305
|
+
const s = await stat(vaultSkillDir);
|
|
306
|
+
if (!s.isDirectory())
|
|
307
|
+
continue;
|
|
308
|
+
const linkPath = join(skillsPath, name);
|
|
309
|
+
if (await this.isSymlink(linkPath)) {
|
|
310
|
+
try {
|
|
311
|
+
await stat(linkPath);
|
|
312
|
+
valid.push(`skill:${name}`);
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
broken.push(`skill:${name}`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
broken.push(`skill:${name}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
async verifyFileSymlinks(vaultDir, targetDir, valid, broken, prefix) {
|
|
324
|
+
let names;
|
|
325
|
+
try {
|
|
326
|
+
names = await readdir(vaultDir);
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
for (const name of names) {
|
|
332
|
+
const vaultFile = join(vaultDir, name);
|
|
333
|
+
const s = await stat(vaultFile);
|
|
334
|
+
if (!s.isFile())
|
|
335
|
+
continue;
|
|
336
|
+
const linkPath = join(targetDir, name);
|
|
337
|
+
if (await this.isSymlink(linkPath)) {
|
|
338
|
+
try {
|
|
339
|
+
await stat(linkPath);
|
|
340
|
+
valid.push(`${prefix}${name}`);
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
broken.push(`${prefix}${name}`);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
broken.push(`${prefix}${name}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
async verifyProjectMemorySymlinks(claudeDir, valid, broken) {
|
|
352
|
+
const vaultProjectsDir = join(this.vaultPath, 'claude', 'projects');
|
|
353
|
+
let projectNames;
|
|
354
|
+
try {
|
|
355
|
+
projectNames = await readdir(vaultProjectsDir);
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
for (const projectName of projectNames) {
|
|
361
|
+
const vaultMemoryDir = join(vaultProjectsDir, projectName, 'memory');
|
|
362
|
+
let memoryFiles;
|
|
363
|
+
try {
|
|
364
|
+
memoryFiles = await readdir(vaultMemoryDir);
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
const targetMemoryDir = join(claudeDir, 'projects', projectName, 'memory');
|
|
370
|
+
for (const fileName of memoryFiles) {
|
|
371
|
+
const vaultFile = join(vaultMemoryDir, fileName);
|
|
372
|
+
const s = await stat(vaultFile);
|
|
373
|
+
if (!s.isFile())
|
|
374
|
+
continue;
|
|
375
|
+
const linkPath = join(targetMemoryDir, fileName);
|
|
376
|
+
const label = `project:${projectName}/memory/${fileName}`;
|
|
377
|
+
if (await this.isSymlink(linkPath)) {
|
|
378
|
+
try {
|
|
379
|
+
await stat(linkPath);
|
|
380
|
+
valid.push(label);
|
|
381
|
+
}
|
|
382
|
+
catch {
|
|
383
|
+
broken.push(label);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
broken.push(label);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// --- Remove helpers ---
|
|
393
|
+
async removeSkillSymlinks(skillsPath) {
|
|
394
|
+
const vaultSkillsDir = join(this.vaultPath, 'skills');
|
|
395
|
+
let skillNames;
|
|
396
|
+
try {
|
|
397
|
+
skillNames = await readdir(vaultSkillsDir);
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
for (const name of skillNames) {
|
|
403
|
+
const vaultSkillDir = join(vaultSkillsDir, name);
|
|
404
|
+
const s = await stat(vaultSkillDir);
|
|
405
|
+
if (!s.isDirectory())
|
|
406
|
+
continue;
|
|
407
|
+
const linkPath = join(skillsPath, name);
|
|
408
|
+
if (!(await this.isSymlink(linkPath)))
|
|
409
|
+
continue;
|
|
410
|
+
await unlink(linkPath);
|
|
411
|
+
const backupPath = join(this.backupsPath, 'claude', name);
|
|
412
|
+
try {
|
|
413
|
+
await access(backupPath);
|
|
414
|
+
await this.restoreDirectory(backupPath, linkPath);
|
|
415
|
+
}
|
|
416
|
+
catch {
|
|
417
|
+
try {
|
|
418
|
+
await this.restoreDirectory(vaultSkillDir, linkPath);
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
// Nothing to restore
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
async removeFileSymlinks(vaultDir, targetDir) {
|
|
427
|
+
let names;
|
|
428
|
+
try {
|
|
429
|
+
names = await readdir(vaultDir);
|
|
430
|
+
}
|
|
431
|
+
catch {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
for (const name of names) {
|
|
435
|
+
const linkPath = join(targetDir, name);
|
|
436
|
+
await this.removeSingleSymlink(linkPath, join(vaultDir, name));
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
async removeSingleSymlink(linkPath, vaultSource) {
|
|
440
|
+
if (!(await this.isSymlink(linkPath)))
|
|
441
|
+
return;
|
|
442
|
+
await unlink(linkPath);
|
|
443
|
+
// Restore from backup or vault copy
|
|
444
|
+
const backupPath = join(this.backupsPath, 'claude', relative(this.vaultPath, vaultSource));
|
|
445
|
+
try {
|
|
446
|
+
await access(backupPath);
|
|
447
|
+
await copyFile(backupPath, linkPath);
|
|
448
|
+
}
|
|
449
|
+
catch {
|
|
450
|
+
try {
|
|
451
|
+
await access(vaultSource);
|
|
452
|
+
await copyFile(vaultSource, linkPath);
|
|
453
|
+
}
|
|
454
|
+
catch {
|
|
455
|
+
// Nothing to restore
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
async removeProjectMemorySymlinks(claudeDir) {
|
|
460
|
+
const vaultProjectsDir = join(this.vaultPath, 'claude', 'projects');
|
|
461
|
+
let projectNames;
|
|
462
|
+
try {
|
|
463
|
+
projectNames = await readdir(vaultProjectsDir);
|
|
464
|
+
}
|
|
465
|
+
catch {
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
for (const projectName of projectNames) {
|
|
469
|
+
const vaultMemoryDir = join(vaultProjectsDir, projectName, 'memory');
|
|
470
|
+
let memoryFiles;
|
|
471
|
+
try {
|
|
472
|
+
memoryFiles = await readdir(vaultMemoryDir);
|
|
473
|
+
}
|
|
474
|
+
catch {
|
|
475
|
+
continue;
|
|
476
|
+
}
|
|
477
|
+
const targetMemoryDir = join(claudeDir, 'projects', projectName, 'memory');
|
|
478
|
+
for (const fileName of memoryFiles) {
|
|
479
|
+
const linkPath = join(targetMemoryDir, fileName);
|
|
480
|
+
const vaultFile = join(vaultMemoryDir, fileName);
|
|
481
|
+
await this.removeSingleSymlink(linkPath, vaultFile);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
// --- Utility ---
|
|
486
|
+
async discoverSkillDirs(skillsPath) {
|
|
487
|
+
const dirs = [];
|
|
488
|
+
try {
|
|
489
|
+
const names = await readdir(skillsPath);
|
|
490
|
+
for (const name of names) {
|
|
491
|
+
const dirPath = join(skillsPath, name);
|
|
492
|
+
const s = await stat(dirPath);
|
|
493
|
+
if (s.isDirectory()) {
|
|
494
|
+
const skillFile = join(dirPath, 'SKILL.md');
|
|
495
|
+
try {
|
|
496
|
+
await access(skillFile);
|
|
497
|
+
dirs.push(dirPath);
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
// No SKILL.md in this directory
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
catch {
|
|
506
|
+
// Skills directory doesn't exist
|
|
507
|
+
}
|
|
508
|
+
return dirs;
|
|
509
|
+
}
|
|
510
|
+
async backupDirectory(dirPath, skillName) {
|
|
511
|
+
const backupDest = join(this.backupsPath, 'claude', skillName);
|
|
512
|
+
await mkdir(backupDest, { recursive: true });
|
|
513
|
+
const names = await readdir(dirPath);
|
|
514
|
+
for (const name of names) {
|
|
515
|
+
const filePath = join(dirPath, name);
|
|
516
|
+
const s = await stat(filePath);
|
|
517
|
+
if (s.isFile()) {
|
|
518
|
+
await copyFile(filePath, join(backupDest, name));
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
async restoreDirectory(sourcePath, destPath) {
|
|
523
|
+
await mkdir(destPath, { recursive: true });
|
|
524
|
+
const names = await readdir(sourcePath);
|
|
525
|
+
for (const name of names) {
|
|
526
|
+
const filePath = join(sourcePath, name);
|
|
527
|
+
const s = await stat(filePath);
|
|
528
|
+
if (s.isFile()) {
|
|
529
|
+
await copyFile(filePath, join(destPath, name));
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/adapters/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { BaseAdapter, type AdapterOptions, type ImportResult, type SymlinkResult } from './base.js';
|
|
2
|
+
export { OpenClawAdapter } from './openclaw.js';
|
|
3
|
+
export { ClaudeCodeAdapter } from './claude.js';
|
|
4
|
+
import type { AdapterOptions } from './base.js';
|
|
5
|
+
import type { BaseAdapter } from './base.js';
|
|
6
|
+
export declare function getAdapter(name: string, options: AdapterOptions): BaseAdapter;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,WAAW,CAS7E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { BaseAdapter } from './base.js';
|
|
2
|
+
export { OpenClawAdapter } from './openclaw.js';
|
|
3
|
+
export { ClaudeCodeAdapter } from './claude.js';
|
|
4
|
+
import { OpenClawAdapter } from './openclaw.js';
|
|
5
|
+
import { ClaudeCodeAdapter } from './claude.js';
|
|
6
|
+
export function getAdapter(name, options) {
|
|
7
|
+
switch (name) {
|
|
8
|
+
case 'openclaw':
|
|
9
|
+
return new OpenClawAdapter(options);
|
|
10
|
+
case 'claude':
|
|
11
|
+
return new ClaudeCodeAdapter(options);
|
|
12
|
+
default:
|
|
13
|
+
throw new Error(`Unknown adapter: ${name}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8D,MAAM,WAAW,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIhD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAuB;IAC9D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU;YACb,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,KAAK,QAAQ;YACX,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACxC;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseAdapter, type ImportResult, type SymlinkResult } from './base.js';
|
|
2
|
+
export declare class OpenClawAdapter extends BaseAdapter {
|
|
3
|
+
get name(): string;
|
|
4
|
+
detect(): Promise<string | null>;
|
|
5
|
+
import(workspacePath: string): Promise<ImportResult>;
|
|
6
|
+
createSymlinks(workspacePath: string): Promise<SymlinkResult>;
|
|
7
|
+
verifySymlinks(workspacePath: string): Promise<{
|
|
8
|
+
valid: string[];
|
|
9
|
+
broken: string[];
|
|
10
|
+
}>;
|
|
11
|
+
removeSymlinks(workspacePath: string): Promise<void>;
|
|
12
|
+
private discoverFiles;
|
|
13
|
+
private discoverVaultFiles;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=openclaw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/E,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUhC,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAkCpD,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAyB7D,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAuBrF,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YA8B5C,aAAa;YAuDb,kBAAkB;CAyBjC"}
|