0xkobold 0.2.0 → 0.3.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.
Files changed (60) hide show
  1. package/HEARTBEAT.md +40 -58
  2. package/README.md +387 -337
  3. package/dist/package.json +4 -2
  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/migrate.js +24 -0
  19. package/dist/src/cli/commands/migrate.js.map +1 -0
  20. package/dist/src/cli/commands/tailscale.js +81 -0
  21. package/dist/src/cli/commands/tailscale.js.map +1 -0
  22. package/dist/src/cli/commands/telegram.js +111 -0
  23. package/dist/src/cli/commands/telegram.js.map +1 -0
  24. package/dist/src/cli/commands/tui.js +40 -22
  25. package/dist/src/cli/commands/tui.js.map +1 -1
  26. package/dist/src/cli/commands/whatsapp.js +116 -0
  27. package/dist/src/cli/commands/whatsapp.js.map +1 -0
  28. package/dist/src/cli/program.js +20 -0
  29. package/dist/src/cli/program.js.map +1 -1
  30. package/dist/src/config/index.js +2 -9
  31. package/dist/src/config/index.js.map +1 -1
  32. package/dist/src/config/manager.js +222 -0
  33. package/dist/src/config/manager.js.map +1 -0
  34. package/dist/src/documents/index.js +3 -0
  35. package/dist/src/documents/index.js.map +1 -0
  36. package/dist/src/documents/pdf.js +168 -0
  37. package/dist/src/documents/pdf.js.map +1 -0
  38. package/dist/src/gateway/client.js +318 -0
  39. package/dist/src/gateway/client.js.map +1 -0
  40. package/dist/src/infra/index.js +3 -0
  41. package/dist/src/infra/index.js.map +1 -0
  42. package/dist/src/infra/tailscale.js +163 -0
  43. package/dist/src/infra/tailscale.js.map +1 -0
  44. package/dist/src/media/audio.js +130 -0
  45. package/dist/src/media/audio.js.map +1 -0
  46. package/dist/src/media/index.js +4 -0
  47. package/dist/src/media/index.js.map +1 -0
  48. package/dist/src/media/vision.js +131 -0
  49. package/dist/src/media/vision.js.map +1 -0
  50. package/dist/src/migration/openclaw.js +498 -0
  51. package/dist/src/migration/openclaw.js.map +1 -0
  52. package/dist/src/sandbox/docker-runner.js +228 -0
  53. package/dist/src/sandbox/docker-runner.js.map +1 -0
  54. package/dist/src/sandbox/index.js +3 -0
  55. package/dist/src/sandbox/index.js.map +1 -0
  56. package/dist/src/skills/builtin/duplicate-detector.js +469 -0
  57. package/dist/src/skills/builtin/duplicate-detector.js.map +1 -0
  58. package/dist/src/skills/index.js +2 -0
  59. package/dist/src/skills/index.js.map +1 -1
  60. package/package.json +4 -2
@@ -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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"}