clawmagic 1.0.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 (46) hide show
  1. package/README.md +49 -0
  2. package/configs/base/AGENTS.md +93 -0
  3. package/configs/base/HEARTBEAT.md +58 -0
  4. package/configs/base/MEMORY.md +20 -0
  5. package/configs/base/SESSION_HANDOFF.md +18 -0
  6. package/configs/base/TOOLS.md +22 -0
  7. package/configs/base/USER.md +10 -0
  8. package/configs/creator/SOUL.md +55 -0
  9. package/configs/developer/SOUL.md +39 -0
  10. package/configs/pro/SOUL.md +50 -0
  11. package/configs/realestate/SOUL.md +46 -0
  12. package/configs/standard/SOUL.md +37 -0
  13. package/dist/configure.d.ts +5 -0
  14. package/dist/configure.d.ts.map +1 -0
  15. package/dist/configure.js +268 -0
  16. package/dist/configure.js.map +1 -0
  17. package/dist/detect.d.ts +4 -0
  18. package/dist/detect.d.ts.map +1 -0
  19. package/dist/detect.js +156 -0
  20. package/dist/detect.js.map +1 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +542 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/license.d.ts +6 -0
  26. package/dist/license.d.ts.map +1 -0
  27. package/dist/license.js +125 -0
  28. package/dist/license.js.map +1 -0
  29. package/dist/security.d.ts +3 -0
  30. package/dist/security.d.ts.map +1 -0
  31. package/dist/security.js +100 -0
  32. package/dist/security.js.map +1 -0
  33. package/dist/server.d.ts +12 -0
  34. package/dist/server.d.ts.map +1 -0
  35. package/dist/server.js +227 -0
  36. package/dist/server.js.map +1 -0
  37. package/dist/types.d.ts +42 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/dist/types.js +46 -0
  40. package/dist/types.js.map +1 -0
  41. package/dist/validate-keys.d.ts +6 -0
  42. package/dist/validate-keys.d.ts.map +1 -0
  43. package/dist/validate-keys.js +83 -0
  44. package/dist/validate-keys.js.map +1 -0
  45. package/package.json +47 -0
  46. package/src/web/index.html +746 -0
package/dist/index.js ADDED
@@ -0,0 +1,542 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const inquirer_1 = __importDefault(require("inquirer"));
44
+ const ora_1 = __importDefault(require("ora"));
45
+ const types_1 = require("./types");
46
+ const license_1 = require("./license");
47
+ const detect_1 = require("./detect");
48
+ const configure_1 = require("./configure");
49
+ const security_1 = require("./security");
50
+ const validate_keys_1 = require("./validate-keys");
51
+ const VERSION = '1.0.0';
52
+ const BRAND = chalk_1.default.hex('#DA7756');
53
+ const DIM = chalk_1.default.dim;
54
+ const GREEN = chalk_1.default.green;
55
+ const RED = chalk_1.default.red;
56
+ const BOLD = chalk_1.default.bold;
57
+ const YELLOW = chalk_1.default.yellow;
58
+ // ─── CLI Flags ──────────────────────────────────────────────────────────────
59
+ const args = process.argv.slice(2);
60
+ if (args.includes('--help') || args.includes('-h')) {
61
+ console.log(`
62
+ ${BRAND('🪄 ClawMagic')} v${VERSION}
63
+ OpenClaw, Configured Automagically.
64
+
65
+ ${BOLD('Usage:')}
66
+ npx clawmagic Interactive setup wizard (web UI)
67
+ npx clawmagic --no-web Terminal-only mode
68
+ npx clawmagic --key KEY Non-interactive with license key
69
+ npx clawmagic --version Show version
70
+ npx clawmagic --help Show this help
71
+
72
+ ${BOLD('Options:')}
73
+ --key <license-key> License key (CM-XXXXX-XXXXX-XXXXX-XXXXX)
74
+ --flavor <flavor> Skip flavor selection (standard|developer|pro|creator|realestate)
75
+ --skip-keys Skip API key prompts (use existing keys from config)
76
+ --web Force web UI mode (default when display available)
77
+ --no-web Force terminal mode
78
+ --version Show version number
79
+ --help Show help
80
+
81
+ ${BOLD('Documentation:')}
82
+ https://clawmagic.dev/docs
83
+
84
+ ${BOLD('Support:')}
85
+ Discord: discord.gg/clawd
86
+ Email: support@clawmagic.dev
87
+ `);
88
+ process.exit(0);
89
+ }
90
+ if (args.includes('--version') || args.includes('-v')) {
91
+ console.log(VERSION);
92
+ process.exit(0);
93
+ }
94
+ // Extract --key value
95
+ function getArgValue(flag) {
96
+ const idx = args.indexOf(flag);
97
+ if (idx !== -1 && idx + 1 < args.length) {
98
+ return args[idx + 1];
99
+ }
100
+ return undefined;
101
+ }
102
+ const presetKey = getArgValue('--key');
103
+ const presetFlavor = getArgValue('--flavor');
104
+ // ─── Ctrl+C Handler ─────────────────────────────────────────────────────────
105
+ process.on('SIGINT', () => {
106
+ console.log('\n');
107
+ console.log(DIM('Setup cancelled. No changes were made.'));
108
+ process.exit(0);
109
+ });
110
+ process.on('SIGTERM', () => {
111
+ process.exit(0);
112
+ });
113
+ // ─── Main ───────────────────────────────────────────────────────────────────
114
+ async function main() {
115
+ console.log();
116
+ console.log(BRAND('🪄 ClawMagic') + ` v${VERSION}`);
117
+ console.log(DIM(' OpenClaw, Configured Automagically.'));
118
+ console.log();
119
+ // ─── Pre-flight: Detect OpenClaw ────────────────────────────────────────
120
+ const spinner = (0, ora_1.default)({ text: 'Detecting OpenClaw installation...', color: 'yellow' }).start();
121
+ const ocInfo = (0, detect_1.detectOpenClaw)();
122
+ if (!ocInfo) {
123
+ spinner.fail('OpenClaw not found');
124
+ console.log();
125
+ console.log(RED(' OpenClaw must be installed before running ClawMagic.'));
126
+ console.log(DIM(' Install it: https://docs.openclaw.com/install'));
127
+ console.log();
128
+ process.exit(1);
129
+ }
130
+ spinner.succeed(`OpenClaw ${BOLD(ocInfo.version)} detected`);
131
+ const beforeScore = (0, detect_1.calculateSecurityScore)(ocInfo.currentConfig, ocInfo.workspacePath);
132
+ if (ocInfo.currentConfig) {
133
+ console.log(DIM(` Config: ${ocInfo.configPath}`));
134
+ console.log(DIM(` Security score: ${beforeScore}/100`));
135
+ }
136
+ else {
137
+ console.log(DIM(` Fresh installation — no config yet`));
138
+ }
139
+ console.log();
140
+ // ─── Step 1: License Key ───────────────────────────────────────────────
141
+ console.log(BOLD('Step 1/5: License Key'));
142
+ console.log();
143
+ let licenseKey = presetKey || '';
144
+ if (!licenseKey) {
145
+ const { key } = await inquirer_1.default.prompt([
146
+ {
147
+ type: 'input',
148
+ name: 'key',
149
+ message: 'Enter your license key:',
150
+ prefix: ' ',
151
+ validate: (input) => {
152
+ if (!input.trim())
153
+ return 'License key is required';
154
+ if (!(0, license_1.validateLicenseFormat)(input.trim())) {
155
+ return 'Invalid format. Expected: CM-XXXXX-XXXXX-XXXXX-XXXXX';
156
+ }
157
+ return true;
158
+ },
159
+ },
160
+ ]);
161
+ licenseKey = key.trim();
162
+ }
163
+ else {
164
+ if (!(0, license_1.validateLicenseFormat)(licenseKey)) {
165
+ console.log(RED(' Invalid license key format. Expected: CM-XXXXX-XXXXX-XXXXX-XXXXX'));
166
+ process.exit(1);
167
+ }
168
+ console.log(DIM(` Using key: ${licenseKey.substring(0, 8)}...`));
169
+ }
170
+ // Validate
171
+ const validateSpinner = (0, ora_1.default)({ text: 'Validating license...', color: 'yellow', indent: 2 }).start();
172
+ try {
173
+ const licenseInfo = await (0, license_1.validateLicense)(licenseKey);
174
+ if (licenseInfo.status !== 'valid') {
175
+ validateSpinner.fail(`License ${licenseInfo.status}`);
176
+ if (licenseInfo.status === 'expired') {
177
+ console.log(RED(' Your license has expired. Renew at https://clawmagic.dev/account'));
178
+ }
179
+ else if (licenseInfo.status === 'revoked') {
180
+ console.log(RED(' This license has been revoked. Contact support@clawmagic.dev'));
181
+ }
182
+ else {
183
+ console.log(RED(' Invalid license key. Check your purchase email or visit https://clawmagic.dev'));
184
+ }
185
+ process.exit(1);
186
+ }
187
+ validateSpinner.succeed(`License validated ${DIM(`(${licenseInfo.tier})`)}`);
188
+ // Activate
189
+ const activateSpinner = (0, ora_1.default)({ text: 'Activating machine...', color: 'yellow', indent: 2 }).start();
190
+ const activationInfo = await (0, license_1.activateLicense)(licenseKey);
191
+ if (activationInfo.status === 'limit_reached') {
192
+ activateSpinner.fail('Activation limit reached');
193
+ console.log(RED(` All activation slots used. Manage devices at https://clawmagic.dev/account`));
194
+ process.exit(1);
195
+ }
196
+ activateSpinner.succeed(`Machine activated ${DIM(`(${activationInfo.activations}/${activationInfo.max} slots)`)}`);
197
+ }
198
+ catch (err) {
199
+ validateSpinner.fail('License validation failed');
200
+ console.log(RED(` ${err.message}`));
201
+ process.exit(1);
202
+ }
203
+ console.log();
204
+ // ─── Step 2: Choose Flavor ────────────────────────────────────────────
205
+ console.log(BOLD('Step 2/5: Choose Your Flavor'));
206
+ console.log();
207
+ let selectedFlavor = presetFlavor || '';
208
+ if (!selectedFlavor || !types_1.FLAVORS.find(f => f.value === selectedFlavor)) {
209
+ const { flavor } = await inquirer_1.default.prompt([
210
+ {
211
+ type: 'list',
212
+ name: 'flavor',
213
+ message: 'Select a configuration flavor:',
214
+ prefix: ' ',
215
+ choices: types_1.FLAVORS.map(f => ({
216
+ name: `${BOLD(f.name)} ${DIM('—')} ${f.description}`,
217
+ value: f.value,
218
+ short: f.name,
219
+ })),
220
+ },
221
+ ]);
222
+ selectedFlavor = flavor;
223
+ }
224
+ else {
225
+ const flavorInfo = types_1.FLAVORS.find(f => f.value === selectedFlavor);
226
+ console.log(GREEN(` ✓ ${flavorInfo.name}`) + DIM(` — ${flavorInfo.description}`));
227
+ }
228
+ const flavorInfo = types_1.FLAVORS.find(f => f.value === selectedFlavor);
229
+ console.log();
230
+ // ─── Step 3: API Keys ────────────────────────────────────────────────
231
+ console.log(BOLD('Step 3/5: API Keys'));
232
+ console.log();
233
+ const apiKeys = [];
234
+ const skipKeys = args.includes('--skip-keys');
235
+ // Pull existing keys from current config
236
+ const existingProviders = ocInfo?.currentConfig?.models?.providers || {};
237
+ if (skipKeys) {
238
+ // Use existing keys from config
239
+ for (const [id, conf] of Object.entries(existingProviders)) {
240
+ if (conf?.apiKey) {
241
+ apiKeys.push({ provider: id, key: conf.apiKey, validated: true });
242
+ console.log(DIM(` ✓ ${id}: using existing key`));
243
+ }
244
+ }
245
+ if (apiKeys.length === 0) {
246
+ console.log(YELLOW(' ⚠ No existing API keys found. Add them later in openclaw.json'));
247
+ }
248
+ console.log();
249
+ }
250
+ else {
251
+ const providers = [
252
+ { id: 'anthropic', name: 'Anthropic', prefix: 'sk-ant-', required: false },
253
+ { id: 'openai', name: 'OpenAI', prefix: 'sk-', required: false },
254
+ { id: 'google', name: 'Google Gemini', prefix: 'AI', required: false },
255
+ ];
256
+ for (const provider of providers) {
257
+ const { hasKey } = await inquirer_1.default.prompt([
258
+ {
259
+ type: 'confirm',
260
+ name: 'hasKey',
261
+ message: `Do you have a ${provider.name} API key?`,
262
+ prefix: ' ',
263
+ default: provider.id === 'anthropic',
264
+ },
265
+ ]);
266
+ if (!hasKey) {
267
+ console.log(DIM(` ○ ${provider.name}: skipped`));
268
+ continue;
269
+ }
270
+ const { key } = await inquirer_1.default.prompt([
271
+ {
272
+ type: 'password',
273
+ name: 'key',
274
+ message: `${provider.name} API Key:`,
275
+ prefix: ' ',
276
+ mask: '*',
277
+ validate: (input) => {
278
+ if (!input.trim())
279
+ return `${provider.name} API key is required`;
280
+ return true;
281
+ },
282
+ },
283
+ ]);
284
+ const keySpinner = (0, ora_1.default)({ text: `Validating ${provider.name} key...`, color: 'yellow', indent: 4 }).start();
285
+ const isValid = await (0, validate_keys_1.validateApiKey)(provider.id, key.trim());
286
+ if (isValid) {
287
+ keySpinner.succeed(`${provider.name}: ${(0, validate_keys_1.maskKey)(key.trim())} ${GREEN('[valid]')}`);
288
+ apiKeys.push({ provider: provider.id, key: key.trim(), validated: true });
289
+ }
290
+ else {
291
+ keySpinner.warn(`${provider.name}: could not validate ${DIM('(will use anyway)')}`);
292
+ apiKeys.push({ provider: provider.id, key: key.trim(), validated: false });
293
+ }
294
+ }
295
+ if (apiKeys.length === 0) {
296
+ console.log();
297
+ console.log(YELLOW(' ⚠ No API keys provided. You can add them later in openclaw.json'));
298
+ }
299
+ console.log();
300
+ } // end skipKeys else block
301
+ // ─── Step 4: Configure ────────────────────────────────────────────────
302
+ console.log(BOLD('Step 4/5: Configuring OpenClaw'));
303
+ console.log();
304
+ // Backup existing config
305
+ const backupSpinner = (0, ora_1.default)({ text: 'Backing up existing configuration...', color: 'yellow', indent: 2 }).start();
306
+ const backupPath = (0, configure_1.backupConfig)(ocInfo.configPath);
307
+ if (backupPath) {
308
+ backupSpinner.succeed(`Backed up to ${DIM(path.basename(backupPath))}`);
309
+ }
310
+ else {
311
+ backupSpinner.succeed('No existing config to back up');
312
+ }
313
+ // Generate new config
314
+ const configSpinner = (0, ora_1.default)({ text: 'Writing openclaw.json...', color: 'yellow', indent: 2 }).start();
315
+ const newConfig = (0, configure_1.generateConfig)({
316
+ flavor: selectedFlavor,
317
+ apiKeys,
318
+ existingConfig: ocInfo.currentConfig,
319
+ });
320
+ // Ensure directory exists
321
+ const configDir = path.dirname(ocInfo.configPath);
322
+ if (!fs.existsSync(configDir)) {
323
+ fs.mkdirSync(configDir, { recursive: true });
324
+ }
325
+ fs.writeFileSync(ocInfo.configPath, JSON.stringify(newConfig, null, 2));
326
+ configSpinner.succeed('Configuration written');
327
+ // Security hardening
328
+ const securitySpinner = (0, ora_1.default)({ text: 'Security hardening...', color: 'yellow', indent: 2 }).start();
329
+ const secReport = (0, security_1.hardenSecurity)(ocInfo.configPath, ocInfo.workspacePath);
330
+ const afterScore = (0, detect_1.calculateSecurityScore)(newConfig, ocInfo.workspacePath);
331
+ securitySpinner.succeed(`Security hardened ${DIM(`(${beforeScore} → ${afterScore})`)}`);
332
+ // Model routing
333
+ const routingSpinner = (0, ora_1.default)({ text: 'Configuring model routing...', color: 'yellow', indent: 2 }).start();
334
+ const providerCount = apiKeys.filter(k => k.validated).length;
335
+ const routingDesc = providerCount > 1
336
+ ? `${providerCount} providers, fallback chain`
337
+ : providerCount === 1
338
+ ? '1 provider configured'
339
+ : 'No providers (add keys later)';
340
+ routingSpinner.succeed(`Model routing configured ${DIM(`(${routingDesc})`)}`);
341
+ // Memory system
342
+ const memorySpinner = (0, ora_1.default)({ text: 'Initializing three-tier memory system...', color: 'yellow', indent: 2 }).start();
343
+ await sleep(300); // Brief pause for visual effect
344
+ memorySpinner.succeed('Three-tier memory system initialized');
345
+ // Skills
346
+ const skillsSpinner = (0, ora_1.default)({ text: 'Activating skills...', color: 'yellow', indent: 2 }).start();
347
+ await sleep(200);
348
+ skillsSpinner.succeed(`${flavorInfo.skills.length} skills activated`);
349
+ // Workspace files
350
+ const filesSpinner = (0, ora_1.default)({ text: 'Installing workspace files...', color: 'yellow', indent: 2 }).start();
351
+ const installed = (0, configure_1.installWorkspaceFiles)(selectedFlavor, ocInfo.workspacePath);
352
+ filesSpinner.succeed(`Workspace files installed ${DIM(`(${installed.length} new)`)}`);
353
+ console.log();
354
+ // ─── Step 5: Verification ────────────────────────────────────────────
355
+ console.log(BOLD('Step 5/5: Verification'));
356
+ console.log();
357
+ // Validate config
358
+ const validSpinner = (0, ora_1.default)({ text: 'Validating configuration...', color: 'yellow', indent: 2 }).start();
359
+ try {
360
+ const configCheck = JSON.parse(fs.readFileSync(ocInfo.configPath, 'utf-8'));
361
+ if (configCheck.models && configCheck.gateway) {
362
+ validSpinner.succeed('Configuration valid');
363
+ }
364
+ else {
365
+ validSpinner.warn('Configuration may be incomplete');
366
+ }
367
+ }
368
+ catch {
369
+ validSpinner.fail('Configuration file is invalid JSON');
370
+ }
371
+ // Check gateway
372
+ const gwSpinner = (0, ora_1.default)({ text: 'Checking gateway...', color: 'yellow', indent: 2 }).start();
373
+ try {
374
+ const { execSync } = require('child_process');
375
+ execSync('openclaw gateway status 2>/dev/null', { encoding: 'utf-8' });
376
+ gwSpinner.succeed('Gateway accepts new config');
377
+ }
378
+ catch {
379
+ gwSpinner.succeed('Gateway ready ' + DIM('(restart needed to apply)'));
380
+ }
381
+ // ─── Done! ────────────────────────────────────────────────────────────
382
+ console.log();
383
+ console.log(BRAND(' 🪄 Done!') + ' OpenClaw is production-ready.');
384
+ console.log();
385
+ // Summary
386
+ const primaryProvider = apiKeys.find(k => k.provider === 'anthropic')
387
+ ? 'Anthropic'
388
+ : apiKeys.find(k => k.provider === 'openai')
389
+ ? 'OpenAI'
390
+ : apiKeys.find(k => k.provider === 'google')
391
+ ? 'Google'
392
+ : 'None';
393
+ const fallbackProviders = apiKeys
394
+ .filter(k => k.validated && k.provider !== primaryProvider.toLowerCase())
395
+ .map(k => k.provider === 'anthropic' ? 'Anthropic' : k.provider === 'openai' ? 'OpenAI' : 'Google');
396
+ const providerSummary = fallbackProviders.length > 0
397
+ ? `${primaryProvider} (primary), ${fallbackProviders.join(', ')} (fallback)`
398
+ : primaryProvider;
399
+ console.log(` ${DIM('Security Score:')} ${BOLD(`${beforeScore} → ${afterScore}`)}`);
400
+ console.log(` ${DIM('Providers:')} ${providerSummary}`);
401
+ console.log(` ${DIM('Skills:')} ${flavorInfo.skills.length} active`);
402
+ console.log(` ${DIM('Memory:')} Three-tier system initialized`);
403
+ console.log(` ${DIM('Flavor:')} ${flavorInfo.name}`);
404
+ console.log();
405
+ console.log(BOLD(' Next steps:'));
406
+ console.log(` 1. Restart your gateway: ${BRAND('openclaw gateway restart')}`);
407
+ console.log(` 2. Send a test message to your agent`);
408
+ console.log(` 3. Join our Discord: ${BRAND('discord.gg/clawd')}`);
409
+ console.log();
410
+ }
411
+ function sleep(ms) {
412
+ return new Promise(resolve => setTimeout(resolve, ms));
413
+ }
414
+ // ─── Web Mode ─────────────────────────────────────────────────────────────
415
+ async function launchWebMode() {
416
+ console.log();
417
+ console.log(BRAND('🪄 ClawMagic') + ` v${VERSION}`);
418
+ console.log(DIM(' OpenClaw, Configured Automagically.'));
419
+ console.log();
420
+ // Pre-flight: detect OpenClaw
421
+ const spinnerDetect = (0, ora_1.default)({ text: 'Detecting OpenClaw installation...', color: 'yellow' }).start();
422
+ const ocInfo = (0, detect_1.detectOpenClaw)();
423
+ if (!ocInfo) {
424
+ spinnerDetect.fail('OpenClaw not found');
425
+ console.log();
426
+ console.log(RED(' OpenClaw must be installed before running ClawMagic.'));
427
+ console.log(DIM(' Install it: https://docs.openclaw.com/install'));
428
+ console.log();
429
+ process.exit(1);
430
+ }
431
+ spinnerDetect.succeed(`OpenClaw ${BOLD(ocInfo.version)} detected`);
432
+ // License validation
433
+ let licenseKey = presetKey || '';
434
+ if (!licenseKey) {
435
+ const { key } = await inquirer_1.default.prompt([
436
+ {
437
+ type: 'input',
438
+ name: 'key',
439
+ message: 'Enter your license key:',
440
+ prefix: ' ',
441
+ validate: (input) => {
442
+ if (!input.trim())
443
+ return 'License key is required';
444
+ if (!(0, license_1.validateLicenseFormat)(input.trim())) {
445
+ return 'Invalid format. Expected: CM-XXXXX-XXXXX-XXXXX-XXXXX';
446
+ }
447
+ return true;
448
+ },
449
+ },
450
+ ]);
451
+ licenseKey = key.trim();
452
+ }
453
+ else {
454
+ if (!(0, license_1.validateLicenseFormat)(licenseKey)) {
455
+ console.log(RED(' Invalid license key format. Expected: CM-XXXXX-XXXXX-XXXXX-XXXXX'));
456
+ process.exit(1);
457
+ }
458
+ console.log(DIM(` Using key: ${licenseKey.substring(0, 8)}...`));
459
+ }
460
+ const validateSpinner = (0, ora_1.default)({ text: 'Validating license...', color: 'yellow', indent: 2 }).start();
461
+ let licenseInfo = { status: 'valid', tier: 'standard', email: '' };
462
+ try {
463
+ licenseInfo = await (0, license_1.validateLicense)(licenseKey);
464
+ if (licenseInfo.status !== 'valid') {
465
+ validateSpinner.fail(`License ${licenseInfo.status}`);
466
+ process.exit(1);
467
+ }
468
+ validateSpinner.succeed(`License validated ${DIM(`(${licenseInfo.tier})`)}`);
469
+ const activateSpinner = (0, ora_1.default)({ text: 'Activating machine...', color: 'yellow', indent: 2 }).start();
470
+ const activationInfo = await (0, license_1.activateLicense)(licenseKey);
471
+ if (activationInfo.status === 'limit_reached') {
472
+ activateSpinner.fail('Activation limit reached');
473
+ process.exit(1);
474
+ }
475
+ activateSpinner.succeed(`Machine activated ${DIM(`(${activationInfo.activations}/${activationInfo.max} slots)`)}`);
476
+ }
477
+ catch (err) {
478
+ validateSpinner.fail('License validation failed');
479
+ console.log(RED(` ${err.message}`));
480
+ process.exit(1);
481
+ }
482
+ console.log();
483
+ // Start web server
484
+ const { startServer } = require('./server');
485
+ const WEB_PORT = 3456;
486
+ const serverSpinner = (0, ora_1.default)({ text: 'Starting web UI...', color: 'yellow', indent: 2 }).start();
487
+ try {
488
+ await startServer({
489
+ port: WEB_PORT,
490
+ licenseInfo,
491
+ onShutdown: () => {
492
+ console.log(DIM('\n Web UI closed. Goodbye!'));
493
+ },
494
+ });
495
+ serverSpinner.succeed(`Web UI running at ${BRAND(`http://localhost:${WEB_PORT}`)}`);
496
+ }
497
+ catch (err) {
498
+ serverSpinner.fail(`Could not start web server: ${err.message}`);
499
+ console.log(DIM(' Falling back to terminal mode...'));
500
+ console.log();
501
+ return main();
502
+ }
503
+ // Open browser
504
+ try {
505
+ const open = require('open');
506
+ await open(`http://localhost:${WEB_PORT}`);
507
+ console.log(DIM(' Opened in your default browser.'));
508
+ }
509
+ catch {
510
+ console.log(DIM(` Open ${BRAND(`http://localhost:${WEB_PORT}`)} in your browser.`));
511
+ }
512
+ console.log();
513
+ console.log(DIM(' Waiting for configuration to complete... (Ctrl+C to cancel)'));
514
+ }
515
+ // ─── Determine mode ───────────────────────────────────────────────────────
516
+ function shouldUseWebMode() {
517
+ if (args.includes('--no-web'))
518
+ return false;
519
+ if (args.includes('--web'))
520
+ return true;
521
+ // Default to web if a display is available (not headless)
522
+ if (process.env.DISPLAY || process.env.WAYLAND_DISPLAY || process.platform === 'darwin' || process.platform === 'win32') {
523
+ return true;
524
+ }
525
+ return false;
526
+ }
527
+ // ─── Run ──────────────────────────────────────────────────────────────────
528
+ const runFn = shouldUseWebMode() ? launchWebMode : main;
529
+ runFn().catch((err) => {
530
+ if (err.message?.includes('User force closed')) {
531
+ // Ctrl+C during prompt
532
+ console.log('\n');
533
+ console.log(DIM('Setup cancelled. No changes were made.'));
534
+ process.exit(0);
535
+ }
536
+ console.error();
537
+ console.error(RED(' Error: ') + err.message);
538
+ console.error(DIM(' If this persists, contact support@clawmagic.dev'));
539
+ console.error();
540
+ process.exit(1);
541
+ });
542
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { LicenseInfo, ActivationInfo } from './types';
2
+ export declare function generateFingerprint(): string;
3
+ export declare function validateLicenseFormat(key: string): boolean;
4
+ export declare function validateLicense(key: string): Promise<LicenseInfo>;
5
+ export declare function activateLicense(key: string): Promise<ActivationInfo>;
6
+ //# sourceMappingURL=license.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAItD,wBAAgB,mBAAmB,IAAI,MAAM,CAU5C;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAiCvE;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAgC1E"}