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
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateConfig = generateConfig;
37
+ exports.installWorkspaceFiles = installWorkspaceFiles;
38
+ exports.backupConfig = backupConfig;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const crypto = __importStar(require("crypto"));
42
+ const types_1 = require("./types");
43
+ const CONFIGS_DIR = path.join(__dirname, '..', 'configs');
44
+ function getConfigsDir() {
45
+ if (fs.existsSync(CONFIGS_DIR))
46
+ return CONFIGS_DIR;
47
+ throw new Error('Config templates not found. Package may be corrupted — reinstall clawmagic.');
48
+ }
49
+ function generateConfig(options) {
50
+ const { flavor, apiKeys, existingConfig } = options;
51
+ const flavorInfo = types_1.FLAVORS.find(f => f.value === flavor) || types_1.FLAVORS[0];
52
+ // Build providers from validated API keys
53
+ const providers = {};
54
+ const providerOrder = [];
55
+ for (const key of apiKeys) {
56
+ if (!key.validated)
57
+ continue;
58
+ switch (key.provider) {
59
+ case 'anthropic':
60
+ providers.anthropic = {
61
+ apiKey: key.key,
62
+ baseUrl: 'https://api.anthropic.com',
63
+ models: [],
64
+ };
65
+ providerOrder.push('anthropic');
66
+ break;
67
+ case 'openai':
68
+ providers.openai = {
69
+ apiKey: key.key,
70
+ baseUrl: 'https://api.openai.com/v1',
71
+ models: [],
72
+ };
73
+ providerOrder.push('openai');
74
+ break;
75
+ case 'google':
76
+ providers.google = {
77
+ apiKey: key.key,
78
+ baseUrl: 'https://generativelanguage.googleapis.com/v1beta',
79
+ models: [],
80
+ };
81
+ providerOrder.push('google');
82
+ break;
83
+ }
84
+ }
85
+ // Determine default model based on available providers
86
+ let defaultModel = flavorInfo.defaultModel;
87
+ if (!providers.anthropic && providers.openai) {
88
+ defaultModel = 'openai/gpt-4o';
89
+ }
90
+ else if (!providers.anthropic && !providers.openai && providers.google) {
91
+ defaultModel = 'google/gemini-2.5-flash';
92
+ }
93
+ // Build fallback chain
94
+ const fallbackModels = [];
95
+ if (providers.anthropic)
96
+ fallbackModels.push('anthropic/claude-sonnet-4-20250514');
97
+ if (providers.openai)
98
+ fallbackModels.push('openai/gpt-4o');
99
+ if (providers.google)
100
+ fallbackModels.push('google/gemini-2.5-flash');
101
+ // Generate gateway auth token
102
+ const gatewayToken = crypto.randomBytes(32).toString('hex');
103
+ const config = {
104
+ models: {
105
+ default: defaultModel,
106
+ providers,
107
+ },
108
+ agents: {
109
+ defaults: {
110
+ workspace: '~/.openclaw/workspace',
111
+ contextTokens: 200000,
112
+ },
113
+ },
114
+ tools: {
115
+ profile: flavorInfo.toolsProfile,
116
+ web: {
117
+ search: {
118
+ provider: 'brave',
119
+ },
120
+ },
121
+ },
122
+ gateway: {
123
+ host: '127.0.0.1',
124
+ port: 18789,
125
+ auth: {
126
+ token: gatewayToken,
127
+ },
128
+ },
129
+ heartbeat: {
130
+ enabled: true,
131
+ intervalMinutes: 30,
132
+ },
133
+ };
134
+ // Add model fallback if multiple providers
135
+ if (fallbackModels.length > 1) {
136
+ config.models.fallback = fallbackModels.slice(1);
137
+ }
138
+ // Merge with existing config (preserve user customizations)
139
+ if (existingConfig) {
140
+ // Preserve existing gateway port if set
141
+ if (existingConfig.gateway?.port) {
142
+ config.gateway.port = existingConfig.gateway.port;
143
+ }
144
+ // Preserve existing gateway host if not loopback default
145
+ if (existingConfig.gateway?.host && existingConfig.gateway.host !== '0.0.0.0') {
146
+ config.gateway.host = existingConfig.gateway.host;
147
+ }
148
+ // Preserve existing auth token if present
149
+ if (existingConfig.gateway?.auth?.token) {
150
+ config.gateway.auth.token = existingConfig.gateway.auth.token;
151
+ }
152
+ // Preserve channels
153
+ if (existingConfig.channels) {
154
+ config.channels = existingConfig.channels;
155
+ }
156
+ // Preserve cron
157
+ if (existingConfig.cron) {
158
+ config.cron = existingConfig.cron;
159
+ }
160
+ // Preserve skills entries
161
+ if (existingConfig.skills) {
162
+ config.skills = existingConfig.skills;
163
+ }
164
+ }
165
+ return config;
166
+ }
167
+ function installWorkspaceFiles(flavor, workspacePath) {
168
+ const installed = [];
169
+ const skipped = [];
170
+ const configsDir = getConfigsDir();
171
+ // Ensure workspace exists
172
+ if (!fs.existsSync(workspacePath)) {
173
+ fs.mkdirSync(workspacePath, { recursive: true });
174
+ }
175
+ // Copy base files (don't overwrite existing)
176
+ const baseDir = path.join(configsDir, 'base');
177
+ if (fs.existsSync(baseDir)) {
178
+ const baseFiles = fs.readdirSync(baseDir);
179
+ for (const file of baseFiles) {
180
+ const dest = path.join(workspacePath, file);
181
+ if (fs.existsSync(dest)) {
182
+ skipped.push(file);
183
+ continue;
184
+ }
185
+ fs.copyFileSync(path.join(baseDir, file), dest);
186
+ installed.push(file);
187
+ }
188
+ }
189
+ else {
190
+ console.warn(' ⚠ Base config templates not found — workspace files will not be installed.');
191
+ console.warn(' Reinstall clawmagic or check your installation.');
192
+ }
193
+ // Copy flavor-specific SOUL.md
194
+ const flavorDir = path.join(configsDir, flavor);
195
+ if (fs.existsSync(flavorDir)) {
196
+ const soulSrc = path.join(flavorDir, 'SOUL.md');
197
+ const soulDest = path.join(workspacePath, 'SOUL.md');
198
+ if (fs.existsSync(soulSrc)) {
199
+ if (!fs.existsSync(soulDest)) {
200
+ fs.copyFileSync(soulSrc, soulDest);
201
+ installed.push('SOUL.md');
202
+ }
203
+ else {
204
+ skipped.push('SOUL.md (exists)');
205
+ }
206
+ }
207
+ }
208
+ // Create memory directory structure
209
+ const memoryDir = path.join(workspacePath, 'memory');
210
+ if (!fs.existsSync(memoryDir)) {
211
+ fs.mkdirSync(memoryDir, { recursive: true });
212
+ installed.push('memory/');
213
+ // Create heartbeat state
214
+ const heartbeatState = {
215
+ lastChecks: {
216
+ email: null,
217
+ calendar: null,
218
+ weather: null,
219
+ },
220
+ };
221
+ fs.writeFileSync(path.join(memoryDir, 'heartbeat-state.json'), JSON.stringify(heartbeatState, null, 2));
222
+ installed.push('memory/heartbeat-state.json');
223
+ }
224
+ // Create life/ PARA structure
225
+ const lifeDirs = [
226
+ 'life',
227
+ 'life/projects',
228
+ 'life/areas',
229
+ 'life/resources',
230
+ 'life/archive',
231
+ ];
232
+ for (const dir of lifeDirs) {
233
+ const fullPath = path.join(workspacePath, dir);
234
+ if (!fs.existsSync(fullPath)) {
235
+ fs.mkdirSync(fullPath, { recursive: true });
236
+ installed.push(`${dir}/`);
237
+ }
238
+ }
239
+ // Create life/index.md if not exists
240
+ const indexPath = path.join(workspacePath, 'life', 'index.md');
241
+ if (!fs.existsSync(indexPath)) {
242
+ fs.writeFileSync(indexPath, `# Entity Index\n\n_No entities tracked yet. Facts will be added as you interact with your agent._\n`);
243
+ installed.push('life/index.md');
244
+ }
245
+ // Create docs directory
246
+ const docsDir = path.join(workspacePath, 'docs');
247
+ if (!fs.existsSync(docsDir)) {
248
+ fs.mkdirSync(docsDir, { recursive: true });
249
+ installed.push('docs/');
250
+ }
251
+ return installed;
252
+ }
253
+ function backupConfig(configPath) {
254
+ if (!fs.existsSync(configPath))
255
+ return null;
256
+ try {
257
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
258
+ const backupPath = `${configPath}.backup-${timestamp}`;
259
+ fs.copyFileSync(configPath, backupPath);
260
+ return backupPath;
261
+ }
262
+ catch (err) {
263
+ console.warn(` ⚠ Could not back up config: ${err.message || 'unknown error'}`);
264
+ console.warn(' Continuing without backup.');
265
+ return null;
266
+ }
267
+ }
268
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { OpenClawInfo } from './types';
2
+ export declare function detectOpenClaw(): OpenClawInfo | null;
3
+ export declare function calculateSecurityScore(config: any, workspacePath?: string): number;
4
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,wBAAgB,cAAc,IAAI,YAAY,GAAG,IAAI,CA+CpD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAuElF"}
package/dist/detect.js ADDED
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.detectOpenClaw = detectOpenClaw;
37
+ exports.calculateSecurityScore = calculateSecurityScore;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const os = __importStar(require("os"));
41
+ const child_process_1 = require("child_process");
42
+ function detectOpenClaw() {
43
+ // Try to find openclaw binary
44
+ let version = '';
45
+ try {
46
+ const whichResult = (0, child_process_1.execSync)('which openclaw 2>/dev/null', { encoding: 'utf-8', timeout: 5000 }).trim();
47
+ if (!whichResult)
48
+ return null;
49
+ }
50
+ catch {
51
+ // Try common locations
52
+ const commonPaths = [
53
+ '/usr/local/bin/openclaw',
54
+ '/usr/bin/openclaw',
55
+ path.join(os.homedir(), '.local', 'bin', 'openclaw'),
56
+ ];
57
+ const found = commonPaths.find(p => fs.existsSync(p));
58
+ if (!found)
59
+ return null;
60
+ }
61
+ // Get version
62
+ try {
63
+ version = (0, child_process_1.execSync)('openclaw --version 2>/dev/null', { encoding: 'utf-8', timeout: 5000 }).trim();
64
+ // Extract version number if prefixed
65
+ const match = version.match(/[\d]+\.[\d]+\.[\d]+/);
66
+ if (match)
67
+ version = match[0];
68
+ }
69
+ catch {
70
+ version = 'unknown';
71
+ }
72
+ // Find config
73
+ const configPath = path.join(os.homedir(), '.openclaw', 'openclaw.json');
74
+ const workspacePath = path.join(os.homedir(), '.openclaw', 'workspace');
75
+ let currentConfig = null;
76
+ if (fs.existsSync(configPath)) {
77
+ try {
78
+ const raw = fs.readFileSync(configPath, 'utf-8');
79
+ currentConfig = JSON.parse(raw);
80
+ }
81
+ catch {
82
+ currentConfig = null;
83
+ }
84
+ }
85
+ return {
86
+ version,
87
+ configPath,
88
+ workspacePath,
89
+ currentConfig,
90
+ };
91
+ }
92
+ function calculateSecurityScore(config, workspacePath) {
93
+ let score = 0;
94
+ if (!config)
95
+ return 0;
96
+ // Gateway auth enabled (+15)
97
+ if (config.gateway?.auth?.token || config.gateway?.auth?.enabled) {
98
+ score += 15;
99
+ }
100
+ // HTTPS/TLS configured (+10)
101
+ if (config.gateway?.tls?.cert || config.gateway?.tls?.enabled) {
102
+ score += 10;
103
+ }
104
+ // File permissions correct (+10)
105
+ if (workspacePath) {
106
+ try {
107
+ const configPath = path.join(path.dirname(workspacePath), 'openclaw.json');
108
+ if (fs.existsSync(configPath)) {
109
+ const stat = fs.statSync(configPath);
110
+ const mode = stat.mode & 0o777;
111
+ if (mode <= 0o600)
112
+ score += 10;
113
+ }
114
+ }
115
+ catch { }
116
+ }
117
+ // API keys not in plaintext config (+15)
118
+ // Check if keys use env vars or external refs
119
+ const configStr = JSON.stringify(config);
120
+ const hasPlaintextKeys = /sk-[a-zA-Z0-9]{20,}/.test(configStr) || /sk-ant-[a-zA-Z0-9]{20,}/.test(configStr);
121
+ if (!hasPlaintextKeys) {
122
+ score += 15;
123
+ }
124
+ // Heartbeat configured (+5)
125
+ if (config.heartbeat?.enabled !== false && config.heartbeat) {
126
+ score += 5;
127
+ }
128
+ // Memory system active (+10)
129
+ if (workspacePath && fs.existsSync(path.join(workspacePath, 'MEMORY.md'))) {
130
+ score += 10;
131
+ }
132
+ // Model fallback chain (+10)
133
+ const providers = config.models?.providers;
134
+ if (providers && Object.keys(providers).length >= 2) {
135
+ score += 10;
136
+ }
137
+ // Skills configured (+10)
138
+ if (config.skills?.entries && Object.keys(config.skills.entries).length > 0) {
139
+ score += 10;
140
+ }
141
+ else if (config.tools?.profile === 'full') {
142
+ score += 5;
143
+ }
144
+ // Workspace files present (+10)
145
+ if (workspacePath) {
146
+ const requiredFiles = ['AGENTS.md', 'SOUL.md', 'MEMORY.md'];
147
+ const present = requiredFiles.filter(f => fs.existsSync(path.join(workspacePath, f)));
148
+ score += Math.floor((present.length / requiredFiles.length) * 10);
149
+ }
150
+ // Cron jobs configured (+5)
151
+ if (config.cron?.jobs && config.cron.jobs.length > 0) {
152
+ score += 5;
153
+ }
154
+ return Math.min(score, 100);
155
+ }
156
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}