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.
- package/README.md +49 -0
- package/configs/base/AGENTS.md +93 -0
- package/configs/base/HEARTBEAT.md +58 -0
- package/configs/base/MEMORY.md +20 -0
- package/configs/base/SESSION_HANDOFF.md +18 -0
- package/configs/base/TOOLS.md +22 -0
- package/configs/base/USER.md +10 -0
- package/configs/creator/SOUL.md +55 -0
- package/configs/developer/SOUL.md +39 -0
- package/configs/pro/SOUL.md +50 -0
- package/configs/realestate/SOUL.md +46 -0
- package/configs/standard/SOUL.md +37 -0
- package/dist/configure.d.ts +5 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +268 -0
- package/dist/configure.js.map +1 -0
- package/dist/detect.d.ts +4 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +156 -0
- package/dist/detect.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +542 -0
- package/dist/index.js.map +1 -0
- package/dist/license.d.ts +6 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +125 -0
- package/dist/license.js.map +1 -0
- package/dist/security.d.ts +3 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +100 -0
- package/dist/security.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +227 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +42 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +46 -0
- package/dist/types.js.map +1 -0
- package/dist/validate-keys.d.ts +6 -0
- package/dist/validate-keys.d.ts.map +1 -0
- package/dist/validate-keys.js +83 -0
- package/dist/validate-keys.js.map +1 -0
- package/package.json +47 -0
- 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"}
|