0xkobold 0.2.0 → 0.3.1

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.
Files changed (62) hide show
  1. package/HEARTBEAT.md +40 -58
  2. package/README.md +387 -337
  3. package/dist/package.json +11 -3
  4. package/dist/src/auth/device-auth.js +202 -0
  5. package/dist/src/auth/device-auth.js.map +1 -0
  6. package/dist/src/auth/index.js +3 -0
  7. package/dist/src/auth/index.js.map +1 -0
  8. package/dist/src/channels/index.js +8 -0
  9. package/dist/src/channels/index.js.map +1 -0
  10. package/dist/src/channels/slack/webhook.js +128 -0
  11. package/dist/src/channels/slack/webhook.js.map +1 -0
  12. package/dist/src/channels/telegram/bot.js +223 -0
  13. package/dist/src/channels/telegram/bot.js.map +1 -0
  14. package/dist/src/channels/whatsapp/integration.js +325 -0
  15. package/dist/src/channels/whatsapp/integration.js.map +1 -0
  16. package/dist/src/cli/commands/check.js +69 -0
  17. package/dist/src/cli/commands/check.js.map +1 -0
  18. package/dist/src/cli/commands/init.js +134 -79
  19. package/dist/src/cli/commands/init.js.map +1 -1
  20. package/dist/src/cli/commands/migrate.js +24 -0
  21. package/dist/src/cli/commands/migrate.js.map +1 -0
  22. package/dist/src/cli/commands/tailscale.js +81 -0
  23. package/dist/src/cli/commands/tailscale.js.map +1 -0
  24. package/dist/src/cli/commands/telegram.js +111 -0
  25. package/dist/src/cli/commands/telegram.js.map +1 -0
  26. package/dist/src/cli/commands/tui.js +40 -22
  27. package/dist/src/cli/commands/tui.js.map +1 -1
  28. package/dist/src/cli/commands/whatsapp.js +116 -0
  29. package/dist/src/cli/commands/whatsapp.js.map +1 -0
  30. package/dist/src/cli/program.js +22 -0
  31. package/dist/src/cli/program.js.map +1 -1
  32. package/dist/src/config/index.js +2 -9
  33. package/dist/src/config/index.js.map +1 -1
  34. package/dist/src/config/manager.js +222 -0
  35. package/dist/src/config/manager.js.map +1 -0
  36. package/dist/src/documents/index.js +3 -0
  37. package/dist/src/documents/index.js.map +1 -0
  38. package/dist/src/documents/pdf.js +168 -0
  39. package/dist/src/documents/pdf.js.map +1 -0
  40. package/dist/src/gateway/client.js +318 -0
  41. package/dist/src/gateway/client.js.map +1 -0
  42. package/dist/src/infra/index.js +3 -0
  43. package/dist/src/infra/index.js.map +1 -0
  44. package/dist/src/infra/tailscale.js +163 -0
  45. package/dist/src/infra/tailscale.js.map +1 -0
  46. package/dist/src/media/audio.js +130 -0
  47. package/dist/src/media/audio.js.map +1 -0
  48. package/dist/src/media/index.js +4 -0
  49. package/dist/src/media/index.js.map +1 -0
  50. package/dist/src/media/vision.js +131 -0
  51. package/dist/src/media/vision.js.map +1 -0
  52. package/dist/src/migration/openclaw.js +498 -0
  53. package/dist/src/migration/openclaw.js.map +1 -0
  54. package/dist/src/sandbox/docker-runner.js +228 -0
  55. package/dist/src/sandbox/docker-runner.js.map +1 -0
  56. package/dist/src/sandbox/index.js +3 -0
  57. package/dist/src/sandbox/index.js.map +1 -0
  58. package/dist/src/skills/builtin/duplicate-detector.js +469 -0
  59. package/dist/src/skills/builtin/duplicate-detector.js.map +1 -0
  60. package/dist/src/skills/index.js +2 -0
  61. package/dist/src/skills/index.js.map +1 -1
  62. package/package.json +11 -3
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Vision/Image Support - v0.3.0
3
+ *
4
+ * Image analysis using Claude Vision or GPT-4V.
5
+ */
6
+ import Anthropic from "@anthropic-ai/sdk";
7
+ import * as fs from "node:fs/promises";
8
+ import { Buffer } from "node:buffer";
9
+ export class VisionAnalyzer {
10
+ config;
11
+ anthropic;
12
+ constructor(config) {
13
+ this.config = {
14
+ model: config.provider === "claude" ? "claude-3-opus-20240229" : "gpt-4-vision-preview",
15
+ maxTokens: 4000,
16
+ ...config,
17
+ };
18
+ if (config.provider === "claude") {
19
+ this.anthropic = new Anthropic({ apiKey: config.apiKey });
20
+ }
21
+ }
22
+ /**
23
+ * Analyze image file
24
+ */
25
+ async analyzeImage(imagePath, prompt = "Describe this image.") {
26
+ const imageBuffer = await fs.readFile(imagePath);
27
+ return this.analyzeBuffer(imageBuffer, prompt);
28
+ }
29
+ /**
30
+ * Analyze image from URL
31
+ */
32
+ async analyzeUrl(imageUrl, prompt = "Describe this image.") {
33
+ const response = await fetch(imageUrl);
34
+ if (!response.ok) {
35
+ throw new Error(`Failed to fetch image: ${response.status}`);
36
+ }
37
+ const imageBuffer = Buffer.from(await response.arrayBuffer());
38
+ return this.analyzeBuffer(imageBuffer, prompt);
39
+ }
40
+ /**
41
+ * Analyze image buffer
42
+ */
43
+ async analyzeBuffer(imageBuffer, prompt) {
44
+ if (this.config.provider === "claude") {
45
+ return this.analyzeWithClaude(imageBuffer, prompt);
46
+ }
47
+ throw new Error(`Provider ${this.config.provider} not yet implemented`);
48
+ }
49
+ /**
50
+ * Analyze with Claude
51
+ */
52
+ async analyzeWithClaude(imageBuffer, prompt) {
53
+ if (!this.anthropic) {
54
+ throw new Error("Anthropic client not initialized");
55
+ }
56
+ const base64Image = imageBuffer.toString("base64");
57
+ const mediaType = this.detectMediaType(imageBuffer);
58
+ const response = await this.anthropic.messages.create({
59
+ model: this.config.model,
60
+ max_tokens: this.config.maxTokens,
61
+ messages: [
62
+ {
63
+ role: "user",
64
+ content: [
65
+ {
66
+ type: "image",
67
+ source: {
68
+ type: "base64",
69
+ media_type: mediaType,
70
+ data: base64Image,
71
+ },
72
+ },
73
+ {
74
+ type: "text",
75
+ text: prompt,
76
+ },
77
+ ],
78
+ },
79
+ ],
80
+ });
81
+ const content = response.content[0];
82
+ if (content.type !== "text") {
83
+ throw new Error("Unexpected response type from Claude");
84
+ }
85
+ // Parse structured response
86
+ return {
87
+ description: content.text,
88
+ objects: this.extractObjects(content.text),
89
+ text: this.extractTextContent(content.text),
90
+ confidence: 0.95, // Claude doesn't provide explicit confidence
91
+ rawResponse: response,
92
+ };
93
+ }
94
+ /**
95
+ * Detect media type from buffer
96
+ */
97
+ detectMediaType(buffer) {
98
+ if (buffer[0] === 0xff && buffer[1] === 0xd8)
99
+ return "image/jpeg";
100
+ if (buffer[0] === 0x89 && buffer[1] === 0x50)
101
+ return "image/png";
102
+ if (buffer[0] === 0x47 && buffer[1] === 0x49)
103
+ return "image/gif";
104
+ if (buffer[8] === 0x57 && buffer[9] === 0x45)
105
+ return "image/webp";
106
+ return "image/jpeg"; // default
107
+ }
108
+ /**
109
+ * Extract objects from description
110
+ */
111
+ extractObjects(description) {
112
+ const commonObjects = [
113
+ "person", "people", "face", "car", "building", "tree", "animal",
114
+ "food", "furniture", "text", "logo", "sign", "nature", "indoor"
115
+ ];
116
+ return commonObjects.filter(obj => description.toLowerCase().includes(obj));
117
+ }
118
+ /**
119
+ * Extract text content
120
+ */
121
+ extractTextContent(description) {
122
+ const textMatch = description.match(/["']([^"']+)["']/);
123
+ return textMatch?.[1];
124
+ }
125
+ }
126
+ // Helper function
127
+ export async function analyzeImage(imagePath, config, prompt) {
128
+ const analyzer = new VisionAnalyzer(config);
129
+ return analyzer.analyzeImage(imagePath, prompt);
130
+ }
131
+ //# sourceMappingURL=vision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision.js","sourceRoot":"","sources":["../../../src/media/vision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,498 @@
1
+ /**
2
+ * OpenClaw to 0xKobold Migration Tool - v0.3.0
3
+ *
4
+ * Full-featured migration supporting OpenClaw folder structure.
5
+ */
6
+ import * as fs from "node:fs/promises";
7
+ import * as path from "node:path";
8
+ import { existsSync } from "node:fs";
9
+ import { homedir } from "os";
10
+ class OpenClawMigration {
11
+ config;
12
+ result;
13
+ constructor(config) {
14
+ this.config = {
15
+ sourcePath: config.sourcePath,
16
+ targetPath: config.targetPath,
17
+ dryRun: config.dryRun ?? false,
18
+ backup: config.backup ?? true,
19
+ verbose: config.verbose ?? true,
20
+ };
21
+ this.result = {
22
+ success: false,
23
+ migrated: [],
24
+ warnings: [],
25
+ errors: [],
26
+ skipped: [],
27
+ };
28
+ }
29
+ async migrate() {
30
+ console.log("🔄 OpenClaw → 0xKobold Migration\n");
31
+ console.log(`Source: ${this.config.sourcePath}`);
32
+ console.log(`Target: ${this.config.targetPath}`);
33
+ console.log(`Mode: ${this.config.dryRun ? "DRY RUN" : "LIVE"}\n`);
34
+ try {
35
+ await this.validateSource();
36
+ if (this.config.backup && !this.config.dryRun) {
37
+ await this.backupTarget();
38
+ }
39
+ // Create same folder structure as OpenClaw
40
+ await this.createFolderStructure();
41
+ // Migrate each component
42
+ await this.migrateConfig();
43
+ await this.migrateDatabase();
44
+ await this.migrateAgents();
45
+ await this.migrateIdentity();
46
+ await this.migrateChannels();
47
+ await this.migrateBrowser();
48
+ await this.migrateCanvas();
49
+ await this.migrateCredentials();
50
+ await this.migrateMedia();
51
+ await this.migrateCron();
52
+ await this.migrateWorkspace();
53
+ this.result.success = this.result.errors.length === 0;
54
+ this.logSummary();
55
+ return this.result;
56
+ }
57
+ catch (error) {
58
+ this.result.errors.push(String(error));
59
+ this.result.success = false;
60
+ return this.result;
61
+ }
62
+ }
63
+ async validateSource() {
64
+ if (!existsSync(this.config.sourcePath)) {
65
+ throw new Error(`Source directory not found: ${this.config.sourcePath}`);
66
+ }
67
+ const configPath = path.join(this.config.sourcePath, "openclaw.json");
68
+ if (!existsSync(configPath)) {
69
+ throw new Error(`No openclaw.json found - is this an OpenClaw installation?`);
70
+ }
71
+ this.log("✅", "OpenClaw installation validated");
72
+ }
73
+ async backupTarget() {
74
+ if (existsSync(this.config.targetPath)) {
75
+ const backupPath = `${this.config.targetPath}.backup.${Date.now()}`;
76
+ this.log("📦", `Creating backup: ${backupPath}`);
77
+ await fs.cp(this.config.targetPath, backupPath, { recursive: true });
78
+ }
79
+ }
80
+ async createFolderStructure() {
81
+ this.log("📁", "Creating folder structure...");
82
+ const folders = [
83
+ "agents",
84
+ "browser",
85
+ "canvas",
86
+ "credentials",
87
+ "cron",
88
+ "devices",
89
+ "identity",
90
+ "media",
91
+ "workspace",
92
+ "skills",
93
+ ];
94
+ if (!this.config.dryRun) {
95
+ await fs.mkdir(this.config.targetPath, { recursive: true });
96
+ for (const folder of folders) {
97
+ await fs.mkdir(path.join(this.config.targetPath, folder), { recursive: true });
98
+ }
99
+ }
100
+ this.log("✅", "Folder structure created");
101
+ }
102
+ async migrateConfig() {
103
+ this.log("📝", "Migrating configuration...");
104
+ try {
105
+ const sourceConfig = await this.readOpenClawConfig();
106
+ const targetConfig = this.convertConfig(sourceConfig);
107
+ // Save main config
108
+ if (!this.config.dryRun) {
109
+ const configPath = path.join(this.config.targetPath, "config.json");
110
+ await fs.writeFile(configPath, JSON.stringify(targetConfig, null, 2), "utf-8");
111
+ await fs.chmod(configPath, 0o600);
112
+ // Create backup (OpenClaw style)
113
+ const configBakPath = path.join(this.config.targetPath, "config.json.bak");
114
+ await fs.writeFile(configBakPath, JSON.stringify(targetConfig, null, 2), "utf-8");
115
+ }
116
+ this.result.migrated.push("config");
117
+ this.log("✅", "Configuration migrated with backup");
118
+ }
119
+ catch (error) {
120
+ this.result.errors.push(`Config migration failed: ${error}`);
121
+ }
122
+ }
123
+ async migrateDatabase() {
124
+ this.log("💾", "Migrating database...");
125
+ try {
126
+ const sourceDbDir = path.join(this.config.sourcePath, "workspace");
127
+ const targetDbDir = path.join(this.config.targetPath, "workspace");
128
+ if (!existsSync(sourceDbDir)) {
129
+ this.result.skipped.push("database");
130
+ this.log("⚠️", "No workspace data found");
131
+ return;
132
+ }
133
+ const files = await fs.readdir(sourceDbDir);
134
+ const dbFiles = files.filter(f => f.endsWith(".db"));
135
+ if (dbFiles.length === 0) {
136
+ this.result.skipped.push("database");
137
+ this.log("⚠️", "No database files found");
138
+ return;
139
+ }
140
+ // Copy all databases (preserve OpenClaw structure)
141
+ if (!this.config.dryRun) {
142
+ for (const dbFile of dbFiles) {
143
+ const sourceDb = path.join(sourceDbDir, dbFile);
144
+ const targetDb = path.join(targetDbDir, dbFile);
145
+ await fs.cp(sourceDb, targetDb);
146
+ // Create backup
147
+ await fs.cp(sourceDb, `${targetDb}.bak`);
148
+ }
149
+ // Also create unified kobold.db symlink or copy
150
+ const mainDb = dbFiles.find(f => f.includes("default") || f.includes("main")) || dbFiles[0];
151
+ if (mainDb) {
152
+ await fs.copyFile(path.join(targetDbDir, mainDb), path.join(this.config.targetPath, "kobold.db"));
153
+ }
154
+ }
155
+ this.result.migrated.push("database");
156
+ this.log("✅", `Migrated ${dbFiles.length} database(s) with backups`);
157
+ }
158
+ catch (error) {
159
+ this.result.errors.push(`Database migration failed: ${error}`);
160
+ }
161
+ }
162
+ async migrateAgents() {
163
+ this.log("🤖", "Migrating agents...");
164
+ try {
165
+ const sourceAgentsDir = path.join(this.config.sourcePath, "agents");
166
+ const targetAgentsDir = path.join(this.config.targetPath, "agents");
167
+ if (!existsSync(sourceAgentsDir)) {
168
+ this.result.skipped.push("agents");
169
+ return;
170
+ }
171
+ if (!this.config.dryRun) {
172
+ await fs.cp(sourceAgentsDir, targetAgentsDir, { recursive: true });
173
+ }
174
+ this.result.migrated.push("agents");
175
+ this.log("✅", "Agents migrated");
176
+ }
177
+ catch (error) {
178
+ this.result.warnings.push(`Agent migration incomplete: ${error}`);
179
+ }
180
+ }
181
+ async migrateIdentity() {
182
+ this.log("🔐", "Migrating identity...");
183
+ try {
184
+ const identityDir = path.join(this.config.sourcePath, "identity");
185
+ const targetIdentityDir = path.join(this.config.targetPath, "identity");
186
+ const targetDevicesDir = path.join(this.config.targetPath, "devices");
187
+ if (!existsSync(identityDir)) {
188
+ this.result.skipped.push("identity");
189
+ return;
190
+ }
191
+ if (!this.config.dryRun) {
192
+ // Copy identity folder
193
+ await fs.cp(identityDir, targetIdentityDir, { recursive: true });
194
+ // Also convert to 0xKobold format in devices/
195
+ const deviceJson = path.join(identityDir, "device.json");
196
+ if (existsSync(deviceJson)) {
197
+ const device = JSON.parse(await fs.readFile(deviceJson, "utf-8"));
198
+ await fs.writeFile(path.join(targetDevicesDir, `${device.id || "device"}.json`), JSON.stringify(device, null, 2), "utf-8");
199
+ }
200
+ // Migrate tokens
201
+ const tokenFile = path.join(identityDir, "tokens.json");
202
+ if (existsSync(tokenFile)) {
203
+ await fs.cp(tokenFile, path.join(this.config.targetPath, ".device-token"));
204
+ }
205
+ }
206
+ this.result.migrated.push("identity");
207
+ this.result.migrated.push("device-identity");
208
+ this.log("✅", "Identity migrated (both formats)");
209
+ }
210
+ catch (error) {
211
+ this.result.warnings.push(`Identity migration incomplete: ${error}`);
212
+ }
213
+ }
214
+ async migrateChannels() {
215
+ this.log("📱", "Migrating channels...");
216
+ try {
217
+ // Devices folder in OpenClaw may have channel data
218
+ const devicesDir = path.join(this.config.sourcePath, "devices");
219
+ if (existsSync(devicesDir)) {
220
+ const files = await fs.readdir(devicesDir);
221
+ for (const file of files) {
222
+ if (file.includes("whatsapp") || file.includes("baileys") || file.includes("telegram")) {
223
+ if (!this.config.dryRun) {
224
+ const wsDir = path.join(this.config.targetPath, file.replace("device-", ""));
225
+ await fs.mkdir(wsDir, { recursive: true });
226
+ await fs.cp(path.join(devicesDir, file), path.join(wsDir, path.basename(file)));
227
+ }
228
+ this.result.migrated.push(`channel-${file}`);
229
+ }
230
+ }
231
+ }
232
+ this.log("✅", "Channels migrated");
233
+ }
234
+ catch (error) {
235
+ this.result.warnings.push(`Channel migration incomplete: ${error}`);
236
+ }
237
+ }
238
+ async migrateBrowser() {
239
+ this.log("🌐", "Migrating browser data...");
240
+ try {
241
+ const sourceDir = path.join(this.config.sourcePath, "browser");
242
+ const targetDir = path.join(this.config.targetPath, "browser");
243
+ if (!existsSync(sourceDir)) {
244
+ this.result.skipped.push("browser");
245
+ return;
246
+ }
247
+ if (!this.config.dryRun) {
248
+ await fs.cp(sourceDir, targetDir, { recursive: true });
249
+ }
250
+ this.result.migrated.push("browser");
251
+ this.log("✅", "Browser data migrated");
252
+ }
253
+ catch (error) {
254
+ this.result.warnings.push(`Browser migration incomplete: ${error}`);
255
+ }
256
+ }
257
+ async migrateCanvas() {
258
+ this.log("🎨", "Migrating canvas data...");
259
+ try {
260
+ const sourceDir = path.join(this.config.sourcePath, "canvas");
261
+ const targetDir = path.join(this.config.targetPath, "canvas");
262
+ if (!existsSync(sourceDir)) {
263
+ this.result.skipped.push("canvas");
264
+ return;
265
+ }
266
+ if (!this.config.dryRun) {
267
+ await fs.cp(sourceDir, targetDir, { recursive: true });
268
+ }
269
+ this.result.migrated.push("canvas");
270
+ this.log("✅", "Canvas data migrated");
271
+ }
272
+ catch (error) {
273
+ this.result.warnings.push(`Canvas migration incomplete: ${error}`);
274
+ }
275
+ }
276
+ async migrateCredentials() {
277
+ this.log("🔑", "Migrating credentials...");
278
+ try {
279
+ const sourceDir = path.join(this.config.sourcePath, "credentials");
280
+ const targetDir = path.join(this.config.targetPath, "credentials");
281
+ if (!existsSync(sourceDir)) {
282
+ this.result.skipped.push("credentials");
283
+ return;
284
+ }
285
+ if (!this.config.dryRun) {
286
+ await fs.cp(sourceDir, targetDir, { recursive: true });
287
+ // Secure permissions
288
+ await fs.chmod(targetDir, 0o700);
289
+ }
290
+ this.result.migrated.push("credentials");
291
+ this.log("✅", "Credentials migrated (secure)");
292
+ }
293
+ catch (error) {
294
+ this.result.warnings.push(`Credentials migration incomplete: ${error}`);
295
+ }
296
+ }
297
+ async migrateMedia() {
298
+ this.log("🎵", "Migrating media...");
299
+ try {
300
+ const sourceDir = path.join(this.config.sourcePath, "media");
301
+ const targetDir = path.join(this.config.targetPath, "media");
302
+ if (!existsSync(sourceDir)) {
303
+ this.result.skipped.push("media");
304
+ return;
305
+ }
306
+ if (!this.config.dryRun) {
307
+ await fs.cp(sourceDir, targetDir, { recursive: true });
308
+ }
309
+ this.result.migrated.push("media");
310
+ this.log("✅", "Media migrated");
311
+ }
312
+ catch (error) {
313
+ this.result.warnings.push(`Media migration incomplete: ${error}`);
314
+ }
315
+ }
316
+ async migrateCron() {
317
+ this.log("⏰", "Migrating cron jobs...");
318
+ try {
319
+ const sourceDir = path.join(this.config.sourcePath, "cron");
320
+ const targetDir = path.join(this.config.targetPath, "cron");
321
+ if (!existsSync(sourceDir)) {
322
+ this.result.skipped.push("cron");
323
+ return;
324
+ }
325
+ if (!this.config.dryRun) {
326
+ await fs.cp(sourceDir, targetDir, { recursive: true });
327
+ }
328
+ this.result.migrated.push("cron");
329
+ this.log("✅", "Cron jobs migrated");
330
+ }
331
+ catch (error) {
332
+ this.result.warnings.push(`Cron migration incomplete: ${error}`);
333
+ }
334
+ }
335
+ async migrateWorkspace() {
336
+ this.log("💼", "Migrating workspace...");
337
+ try {
338
+ const sourceDir = path.join(this.config.sourcePath, "workspace");
339
+ const targetDir = path.join(this.config.targetPath, "workspace");
340
+ if (!existsSync(sourceDir)) {
341
+ this.result.skipped.push("workspace");
342
+ return;
343
+ }
344
+ // Copy non-DB files (DBs handled separately)
345
+ const files = await fs.readdir(sourceDir);
346
+ if (!this.config.dryRun) {
347
+ for (const file of files) {
348
+ if (!file.endsWith(".db")) {
349
+ await fs.cp(path.join(sourceDir, file), path.join(targetDir, file), { recursive: true });
350
+ }
351
+ }
352
+ }
353
+ this.result.migrated.push("workspace-files");
354
+ this.log("✅", "Workspace files migrated");
355
+ }
356
+ catch (error) {
357
+ this.result.warnings.push(`Workspace migration incomplete: ${error}`);
358
+ }
359
+ }
360
+ async readOpenClawConfig() {
361
+ const configPath = path.join(this.config.sourcePath, "openclaw.json");
362
+ const content = await fs.readFile(configPath, "utf-8");
363
+ return JSON.parse(content);
364
+ }
365
+ convertConfig(source) {
366
+ const target = {
367
+ version: "0.3.0-migrated",
368
+ _migratedFrom: {
369
+ tool: "OpenClaw",
370
+ version: source.meta?.lastTouchedVersion || "unknown",
371
+ date: new Date().toISOString(),
372
+ },
373
+ persona: {
374
+ name: "0xKobold",
375
+ emoji: "🐉",
376
+ description: "Migrated from OpenClaw",
377
+ },
378
+ llm: Object.fromEntries(Object.entries({
379
+ provider: source.auth?.profiles?.["anthropic:claude"] ? "claude" : "ollama",
380
+ model: "claude-3-sonnet-20240229",
381
+ maxTokens: 4000,
382
+ temperature: 0.7,
383
+ }).filter(([, v]) => v !== undefined)),
384
+ gateway: {
385
+ enabled: true,
386
+ port: source.gateway?.port || 18789,
387
+ host: source.gateway?.mode === "remote" ? "0.0.0.0" : "localhost",
388
+ cors: ["*"],
389
+ remote: source.gateway?.remote?.url ? {
390
+ enabled: true,
391
+ url: source.gateway.remote.url,
392
+ token: source.gateway.remote.token,
393
+ autoReconnect: true,
394
+ reconnectDelay: 1000,
395
+ } : {
396
+ enabled: false,
397
+ },
398
+ tailscale: {
399
+ enabled: source.gateway?.tailscale?.mode === "on",
400
+ autoConnect: true,
401
+ },
402
+ },
403
+ channels: {
404
+ discord: {
405
+ enabled: source.channels?.discord?.enabled || false,
406
+ token: source.channels?.discord?.token,
407
+ dm: {
408
+ enabled: source.channels?.discord?.dm?.enabled || false,
409
+ },
410
+ },
411
+ },
412
+ agents: {
413
+ maxConcurrent: source.agents?.defaults?.maxConcurrent || 4,
414
+ subagents: {
415
+ maxConcurrent: source.agents?.defaults?.subagents?.maxConcurrent || 8,
416
+ },
417
+ compaction: {
418
+ mode: source.agents?.defaults?.compaction?.mode || "safeguard",
419
+ },
420
+ },
421
+ hooks: source.hooks?.internal || { enabled: true },
422
+ tools: {
423
+ allowed: source.tools?.allowed || [],
424
+ },
425
+ _migrationNotes: [
426
+ "Review LLM API keys in config.json",
427
+ "Verify Discord token if enabled",
428
+ "Check remote gateway URL if configured",
429
+ "Database converted on first run",
430
+ "All OpenClaw folders migrated",
431
+ ],
432
+ };
433
+ return target;
434
+ }
435
+ log(level, message) {
436
+ if (this.config.verbose) {
437
+ console.log(`${level} ${message}`);
438
+ }
439
+ }
440
+ logSummary() {
441
+ console.log("\n" + "=".repeat(60));
442
+ console.log("MIGRATION SUMMARY");
443
+ console.log("=".repeat(60));
444
+ if (this.result.success) {
445
+ console.log("\n✅ Status: SUCCESS");
446
+ }
447
+ else {
448
+ console.log("\n❌ Status: FAILED");
449
+ }
450
+ console.log(`\nMigrated (${this.result.migrated.length}):`);
451
+ this.result.migrated.forEach(item => {
452
+ console.log(` ✅ ${item}`);
453
+ });
454
+ if (this.result.warnings.length > 0) {
455
+ console.log(`\nWarnings (${this.result.warnings.length}):`);
456
+ this.result.warnings.forEach(w => {
457
+ console.log(` ⚠️ ${w}`);
458
+ });
459
+ }
460
+ if (this.result.errors.length > 0) {
461
+ console.log(`\nErrors (${this.result.errors.length}):`);
462
+ this.result.errors.forEach(e => {
463
+ console.log(` ❌ ${e}`);
464
+ });
465
+ }
466
+ if (this.result.skipped.length > 0) {
467
+ console.log(`\nSkipped (${this.result.skipped.length}):`);
468
+ this.result.skipped.forEach(s => {
469
+ console.log(` ⏭️ ${s}`);
470
+ });
471
+ }
472
+ console.log("\n" + "=".repeat(60));
473
+ if (this.config.dryRun) {
474
+ console.log("\n🔍 This was a DRY RUN. No changes were made.");
475
+ console.log(" To migrate: 0xkobold migrate --live");
476
+ }
477
+ else {
478
+ console.log("\n✅ Migration complete!");
479
+ console.log(" Review ~/.0xkobold/config.json and the _migrationNotes.");
480
+ }
481
+ }
482
+ }
483
+ // CLI command
484
+ export async function runMigration(options) {
485
+ const sourcePath = options.source || path.join(homedir(), ".openclaw");
486
+ const targetPath = options.target || path.join(homedir(), ".0xkobold");
487
+ const migration = new OpenClawMigration({
488
+ sourcePath,
489
+ targetPath,
490
+ dryRun: options.dryRun ?? !options.force,
491
+ verbose: true,
492
+ });
493
+ const result = await migration.migrate();
494
+ process.exit(result.success ? 0 : 1);
495
+ }
496
+ export { OpenClawMigration };
497
+ export default OpenClawMigration;
498
+ //# sourceMappingURL=openclaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../../src/migration/openclaw.ts"],"names":[],"mappings":"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"}