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,125 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.generateFingerprint = generateFingerprint;
40
+ exports.validateLicenseFormat = validateLicenseFormat;
41
+ exports.validateLicense = validateLicense;
42
+ exports.activateLicense = activateLicense;
43
+ const os = __importStar(require("os"));
44
+ const crypto = __importStar(require("crypto"));
45
+ const node_fetch_1 = __importDefault(require("node-fetch"));
46
+ const API_BASE = 'https://clawmagic.dev/api/license';
47
+ function generateFingerprint() {
48
+ const parts = [
49
+ os.hostname(),
50
+ os.platform(),
51
+ os.arch(),
52
+ os.cpus()[0]?.model || 'unknown-cpu',
53
+ os.userInfo().username,
54
+ ];
55
+ const hash = crypto.createHash('sha256').update(parts.join('|')).digest('hex');
56
+ return hash.substring(0, 16);
57
+ }
58
+ function validateLicenseFormat(key) {
59
+ // Format: CM-XXXXX-XXXXX-XXXXX-XXXXX
60
+ return /^CM-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}$/i.test(key);
61
+ }
62
+ async function validateLicense(key) {
63
+ const fingerprint = generateFingerprint();
64
+ try {
65
+ const response = await (0, node_fetch_1.default)(`${API_BASE}/validate`, {
66
+ method: 'POST',
67
+ headers: { 'Content-Type': 'application/json' },
68
+ body: JSON.stringify({ key, fingerprint }),
69
+ timeout: 15000,
70
+ });
71
+ if (!response.ok) {
72
+ if (response.status === 401 || response.status === 403 || response.status === 404) {
73
+ return { status: 'invalid', tier: '', email: '' };
74
+ }
75
+ if (response.status === 410) {
76
+ return { status: 'expired', tier: '', email: '' };
77
+ }
78
+ throw new Error(`License server returned ${response.status}`);
79
+ }
80
+ const data = await response.json();
81
+ return {
82
+ status: data.status || 'valid',
83
+ tier: data.tier || 'standard',
84
+ email: data.email || '',
85
+ };
86
+ }
87
+ catch (err) {
88
+ if (err.type === 'request-timeout' || err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND' || err.code === 'ETIMEDOUT' || err.code === 'EHOSTUNREACH') {
89
+ throw new Error('Could not reach license server. Check your internet connection and try again.');
90
+ }
91
+ throw err;
92
+ }
93
+ }
94
+ async function activateLicense(key) {
95
+ const fingerprint = generateFingerprint();
96
+ const hostname = os.hostname();
97
+ try {
98
+ const response = await (0, node_fetch_1.default)(`${API_BASE}/activate`, {
99
+ method: 'POST',
100
+ headers: { 'Content-Type': 'application/json' },
101
+ body: JSON.stringify({ key, fingerprint, hostname }),
102
+ timeout: 15000,
103
+ });
104
+ if (!response.ok) {
105
+ if (response.status === 403) {
106
+ return { status: 'limit_reached', tier: '', activations: 0, max: 0 };
107
+ }
108
+ throw new Error(`License server returned ${response.status}`);
109
+ }
110
+ const data = await response.json();
111
+ return {
112
+ status: data.status || 'activated',
113
+ tier: data.tier || 'standard',
114
+ activations: data.activations || 1,
115
+ max: data.max || 3,
116
+ };
117
+ }
118
+ catch (err) {
119
+ if (err.type === 'request-timeout' || err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND' || err.code === 'ETIMEDOUT' || err.code === 'EHOSTUNREACH') {
120
+ throw new Error('Could not reach license server. Check your internet connection and try again.');
121
+ }
122
+ throw err;
123
+ }
124
+ }
125
+ //# sourceMappingURL=license.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,kDAUC;AAED,sDAGC;AAED,0CAiCC;AAED,0CAgCC;AA3FD,uCAAyB;AACzB,+CAAiC;AACjC,4DAA+B;AAG/B,MAAM,QAAQ,GAAG,mCAAmC,CAAC;AAErD,SAAgB,mBAAmB;IACjC,MAAM,KAAK,GAAG;QACZ,EAAE,CAAC,QAAQ,EAAE;QACb,EAAE,CAAC,QAAQ,EAAE;QACb,EAAE,CAAC,IAAI,EAAE;QACT,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,aAAa;QACpC,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ;KACvB,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/E,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,qCAAqC;IACrC,OAAO,uDAAuD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3E,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,GAAG,QAAQ,WAAW,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;YAC1C,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAClF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACpD,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACpD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO;YAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACzJ,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,GAAG,QAAQ,WAAW,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;YACpD,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,WAAW;YAClC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;YAClC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;SACnB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACzJ,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { SecurityReport } from './types';
2
+ export declare function hardenSecurity(configPath: string, workspacePath: string): SecurityReport;
3
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,cAAc,CA8DxF"}
@@ -0,0 +1,100 @@
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.hardenSecurity = hardenSecurity;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const detect_1 = require("./detect");
40
+ function hardenSecurity(configPath, workspacePath) {
41
+ const actions = [];
42
+ // Read current config
43
+ let config = {};
44
+ if (fs.existsSync(configPath)) {
45
+ try {
46
+ config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
47
+ }
48
+ catch { }
49
+ }
50
+ const beforeScore = (0, detect_1.calculateSecurityScore)(config, workspacePath);
51
+ // Set file permissions (600 for config, 700 for workspace)
52
+ if (fs.existsSync(configPath)) {
53
+ try {
54
+ fs.chmodSync(configPath, 0o600);
55
+ actions.push('Set config file permissions to 600');
56
+ }
57
+ catch {
58
+ actions.push('Could not set config permissions (may need sudo)');
59
+ }
60
+ }
61
+ if (fs.existsSync(workspacePath)) {
62
+ try {
63
+ fs.chmodSync(workspacePath, 0o700);
64
+ actions.push('Set workspace directory permissions to 700');
65
+ }
66
+ catch {
67
+ actions.push('Could not set workspace permissions (may need sudo)');
68
+ }
69
+ }
70
+ // Set permissions on .openclaw directory
71
+ const openclawDir = path.dirname(configPath);
72
+ if (fs.existsSync(openclawDir)) {
73
+ try {
74
+ fs.chmodSync(openclawDir, 0o700);
75
+ actions.push('Set .openclaw directory permissions to 700');
76
+ }
77
+ catch { }
78
+ }
79
+ // Check for auth-profiles.json and secure it
80
+ const authProfiles = path.join(openclawDir, 'agents', 'main', 'agent', 'auth-profiles.json');
81
+ if (fs.existsSync(authProfiles)) {
82
+ try {
83
+ fs.chmodSync(authProfiles, 0o600);
84
+ actions.push('Secured auth-profiles.json permissions');
85
+ }
86
+ catch { }
87
+ }
88
+ // Re-read config (may have been updated by configure step)
89
+ try {
90
+ config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
91
+ }
92
+ catch { }
93
+ const afterScore = (0, detect_1.calculateSecurityScore)(config, workspacePath);
94
+ return {
95
+ beforeScore,
96
+ afterScore,
97
+ actions,
98
+ };
99
+ }
100
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,wCA8DC;AApED,uCAAyB;AACzB,2CAA6B;AAG7B,qCAAkD;AAElD,SAAgB,cAAc,CAAC,UAAkB,EAAE,aAAqB;IACtE,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,sBAAsB;IACtB,IAAI,MAAM,GAAQ,EAAE,CAAC;IACrB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,+BAAsB,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAElE,2DAA2D;IAC3D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,6CAA6C;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAC7F,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,2DAA2D;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,UAAU,GAAG,IAAA,+BAAsB,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEjE,OAAO;QACL,WAAW;QACX,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import express from 'express';
2
+ export interface ServerOptions {
3
+ port: number;
4
+ licenseInfo: {
5
+ tier: string;
6
+ email: string;
7
+ };
8
+ onShutdown?: () => void;
9
+ }
10
+ export declare function createServer(options: ServerOptions): express.Express;
11
+ export declare function startServer(options: ServerOptions): Promise<any>;
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAS9B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAgMpE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAQhE"}
package/dist/server.js ADDED
@@ -0,0 +1,227 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createServer = createServer;
40
+ exports.startServer = startServer;
41
+ const express_1 = __importDefault(require("express"));
42
+ const path = __importStar(require("path"));
43
+ const fs = __importStar(require("fs"));
44
+ const types_1 = require("./types");
45
+ const detect_1 = require("./detect");
46
+ const configure_1 = require("./configure");
47
+ const security_1 = require("./security");
48
+ const validate_keys_1 = require("./validate-keys");
49
+ function createServer(options) {
50
+ const app = (0, express_1.default)();
51
+ const { licenseInfo, onShutdown } = options;
52
+ // Middleware
53
+ app.use(express_1.default.json());
54
+ // CORS for localhost
55
+ app.use((_req, res, next) => {
56
+ res.header('Access-Control-Allow-Origin', '*');
57
+ res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
58
+ res.header('Access-Control-Allow-Headers', 'Content-Type');
59
+ if (_req.method === 'OPTIONS') {
60
+ return res.sendStatus(200);
61
+ }
62
+ next();
63
+ });
64
+ // Serve the single-page app
65
+ app.get('/', (_req, res) => {
66
+ const htmlPath = path.join(__dirname, '..', 'src', 'web', 'index.html');
67
+ // Try src first (dev), then dist-relative
68
+ if (fs.existsSync(htmlPath)) {
69
+ return res.sendFile(htmlPath);
70
+ }
71
+ const altPath = path.join(__dirname, 'web', 'index.html');
72
+ if (fs.existsSync(altPath)) {
73
+ return res.sendFile(altPath);
74
+ }
75
+ // Fallback: check relative to dist
76
+ const distPath = path.join(__dirname, '..', 'web', 'index.html');
77
+ if (fs.existsSync(distPath)) {
78
+ return res.sendFile(distPath);
79
+ }
80
+ res.status(404).send('Web UI not found');
81
+ });
82
+ // GET /api/status
83
+ app.get('/api/status', (_req, res) => {
84
+ const ocInfo = (0, detect_1.detectOpenClaw)();
85
+ const securityScore = ocInfo?.currentConfig
86
+ ? (0, detect_1.calculateSecurityScore)(ocInfo.currentConfig, ocInfo.workspacePath)
87
+ : 0;
88
+ res.json({
89
+ openclaw: ocInfo
90
+ ? {
91
+ version: ocInfo.version,
92
+ configPath: ocInfo.configPath,
93
+ workspacePath: ocInfo.workspacePath,
94
+ securityScore,
95
+ }
96
+ : null,
97
+ license: {
98
+ tier: licenseInfo.tier,
99
+ email: licenseInfo.email,
100
+ },
101
+ });
102
+ });
103
+ // GET /api/flavors
104
+ app.get('/api/flavors', (_req, res) => {
105
+ const icons = {
106
+ standard: '⚖️',
107
+ developer: '💻',
108
+ pro: '⚡',
109
+ creator: '✨',
110
+ realestate: '🏠',
111
+ };
112
+ const features = {
113
+ standard: ['Weather & web search', 'Google Workspace integration', 'Image generation', 'Voice calls', 'Memory system', 'Security hardening'],
114
+ developer: ['GitHub integration & PR automation', 'Coding agent delegation', 'Issue tracking & auto-fix', 'MCP server support', 'Skill creation', 'Full tool access'],
115
+ pro: ['Everything in Developer + Standard', 'Blog monitoring', 'Video frame extraction', '1Password integration', 'Advanced model routing', 'All 20+ skills active'],
116
+ creator: ['AI image generation', 'Text humanizer', 'Blog monitoring', 'Voice synthesis', 'Google Workspace', 'Content research tools'],
117
+ realestate: ['Financial analysis', 'Google Workspace', 'Weather integration', 'Voice calls', 'Document generation', 'Client communication'],
118
+ };
119
+ res.json({
120
+ flavors: types_1.FLAVORS.map((f) => ({
121
+ id: f.value,
122
+ name: f.name,
123
+ icon: icons[f.value] || '📦',
124
+ description: f.description,
125
+ skillCount: f.skills.length,
126
+ skills: f.skills,
127
+ features: features[f.value] || [],
128
+ })),
129
+ });
130
+ });
131
+ // POST /api/validate-key
132
+ app.post('/api/validate-key', async (req, res) => {
133
+ const { provider, key } = req.body;
134
+ if (!provider || !key) {
135
+ return res.status(400).json({ valid: false, error: 'Missing provider or key' });
136
+ }
137
+ try {
138
+ const valid = await (0, validate_keys_1.validateApiKey)(provider, key.trim());
139
+ res.json({ valid });
140
+ }
141
+ catch (err) {
142
+ res.json({ valid: false, error: err.message });
143
+ }
144
+ });
145
+ // POST /api/configure
146
+ app.post('/api/configure', async (req, res) => {
147
+ const { flavor, apiKeys } = req.body;
148
+ if (!flavor) {
149
+ return res.status(400).json({ success: false, error: 'Missing flavor' });
150
+ }
151
+ try {
152
+ const ocInfo = (0, detect_1.detectOpenClaw)();
153
+ if (!ocInfo) {
154
+ return res.status(500).json({ success: false, error: 'OpenClaw not detected' });
155
+ }
156
+ const beforeScore = (0, detect_1.calculateSecurityScore)(ocInfo.currentConfig, ocInfo.workspacePath);
157
+ // Build ApiKeyEntry array
158
+ const keys = (apiKeys || []).map((k) => ({
159
+ provider: k.provider,
160
+ key: k.key,
161
+ validated: true,
162
+ }));
163
+ // Backup
164
+ const backupPath = (0, configure_1.backupConfig)(ocInfo.configPath);
165
+ // Generate config
166
+ const newConfig = (0, configure_1.generateConfig)({
167
+ flavor,
168
+ apiKeys: keys,
169
+ existingConfig: ocInfo.currentConfig,
170
+ });
171
+ // Ensure directory exists
172
+ const configDir = path.dirname(ocInfo.configPath);
173
+ if (!fs.existsSync(configDir)) {
174
+ fs.mkdirSync(configDir, { recursive: true });
175
+ }
176
+ fs.writeFileSync(ocInfo.configPath, JSON.stringify(newConfig, null, 2));
177
+ // Security hardening
178
+ const secReport = (0, security_1.hardenSecurity)(ocInfo.configPath, ocInfo.workspacePath);
179
+ // Install workspace files
180
+ const installed = (0, configure_1.installWorkspaceFiles)(flavor, ocInfo.workspacePath);
181
+ const afterScore = (0, detect_1.calculateSecurityScore)(newConfig, ocInfo.workspacePath);
182
+ const flavorInfo = types_1.FLAVORS.find((f) => f.value === flavor) || types_1.FLAVORS[0];
183
+ const actions = [
184
+ backupPath ? `Backed up config to ${path.basename(backupPath)}` : 'No existing config to back up',
185
+ 'Wrote openclaw.json',
186
+ ...secReport.actions,
187
+ 'Configured model routing',
188
+ 'Initialized three-tier memory system',
189
+ `Activated ${flavorInfo.skills.length} skills`,
190
+ `Installed ${installed.length} workspace files`,
191
+ ];
192
+ res.json({
193
+ success: true,
194
+ report: {
195
+ beforeScore,
196
+ afterScore,
197
+ actions,
198
+ filesCreated: installed,
199
+ skillsActivated: flavorInfo.skills.length,
200
+ },
201
+ });
202
+ }
203
+ catch (err) {
204
+ res.status(500).json({ success: false, error: err.message });
205
+ }
206
+ });
207
+ // POST /api/shutdown
208
+ app.post('/api/shutdown', (_req, res) => {
209
+ res.json({ ok: true });
210
+ setTimeout(() => {
211
+ if (onShutdown)
212
+ onShutdown();
213
+ process.exit(0);
214
+ }, 500);
215
+ });
216
+ return app;
217
+ }
218
+ function startServer(options) {
219
+ return new Promise((resolve, reject) => {
220
+ const app = createServer(options);
221
+ const server = app.listen(options.port, '127.0.0.1', () => {
222
+ resolve(server);
223
+ });
224
+ server.on('error', reject);
225
+ });
226
+ }
227
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export interface LicenseInfo {
2
+ status: 'valid' | 'invalid' | 'expired' | 'revoked';
3
+ tier: string;
4
+ email: string;
5
+ }
6
+ export interface ActivationInfo {
7
+ status: 'activated' | 'already_active' | 'limit_reached';
8
+ tier: string;
9
+ activations: number;
10
+ max: number;
11
+ }
12
+ export interface OpenClawInfo {
13
+ version: string;
14
+ configPath: string;
15
+ workspacePath: string;
16
+ currentConfig: any;
17
+ }
18
+ export interface ApiKeyEntry {
19
+ provider: string;
20
+ key: string;
21
+ validated: boolean;
22
+ }
23
+ export interface ConfigOptions {
24
+ flavor: string;
25
+ apiKeys: ApiKeyEntry[];
26
+ existingConfig: any | null;
27
+ }
28
+ export interface SecurityReport {
29
+ beforeScore: number;
30
+ afterScore: number;
31
+ actions: string[];
32
+ }
33
+ export interface FlavorInfo {
34
+ name: string;
35
+ value: string;
36
+ description: string;
37
+ skills: string[];
38
+ defaultModel: string;
39
+ toolsProfile: string;
40
+ }
41
+ export declare const FLAVORS: FlavorInfo[];
42
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,GAAG,gBAAgB,GAAG,eAAe,CAAC;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,cAAc,EAAE,GAAG,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,OAAO,EAAE,UAAU,EAyC/B,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FLAVORS = void 0;
4
+ exports.FLAVORS = [
5
+ {
6
+ name: 'Standard',
7
+ value: 'standard',
8
+ description: 'Balanced setup for general use',
9
+ skills: ['weather', 'web_search', 'web_fetch', 'github', 'gog', 'nano-banana-pro', 'session-logs', 'three-tier-memory', 'healthcheck', 'tmux', 'voice-call', 'nano-pdf'],
10
+ defaultModel: 'anthropic/claude-sonnet-4-20250514',
11
+ toolsProfile: 'standard',
12
+ },
13
+ {
14
+ name: 'Developer',
15
+ value: 'developer',
16
+ description: 'Coding-focused with GitHub integration',
17
+ skills: ['github', 'coding-agent', 'gh-issues', 'tmux', 'session-logs', 'three-tier-memory', 'healthcheck', 'web_search', 'web_fetch', 'nano-pdf', 'mcporter', 'skill-creator'],
18
+ defaultModel: 'anthropic/claude-sonnet-4-20250514',
19
+ toolsProfile: 'full',
20
+ },
21
+ {
22
+ name: 'Pro',
23
+ value: 'pro',
24
+ description: 'Full feature set, all skills, advanced routing',
25
+ skills: ['github', 'coding-agent', 'gh-issues', 'gog', 'weather', 'web_search', 'web_fetch', 'nano-banana-pro', 'nano-pdf', 'session-logs', 'three-tier-memory', 'healthcheck', 'tmux', 'voice-call', 'mcporter', 'skill-creator', 'video-frames', 'blogwatcher', '1password'],
26
+ defaultModel: 'anthropic/claude-sonnet-4-20250514',
27
+ toolsProfile: 'full',
28
+ },
29
+ {
30
+ name: 'Creator',
31
+ value: 'creator',
32
+ description: 'Content creation, social media, writing',
33
+ skills: ['nano-banana-pro', 'web_search', 'web_fetch', 'nano-pdf', 'session-logs', 'three-tier-memory', 'healthcheck', 'voice-call', 'video-frames', 'blogwatcher', 'gog', 'humanizer'],
34
+ defaultModel: 'anthropic/claude-sonnet-4-20250514',
35
+ toolsProfile: 'standard',
36
+ },
37
+ {
38
+ name: 'Real Estate',
39
+ value: 'realestate',
40
+ description: 'Industry-specific for RE professionals',
41
+ skills: ['gog', 'weather', 'web_search', 'web_fetch', 'nano-banana-pro', 'nano-pdf', 'session-logs', 'three-tier-memory', 'healthcheck', 'voice-call', 'tmux', 'financial-analysis'],
42
+ defaultModel: 'anthropic/claude-sonnet-4-20250514',
43
+ toolsProfile: 'standard',
44
+ },
45
+ ];
46
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA+Ca,QAAA,OAAO,GAAiB;IACnC;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,gCAAgC;QAC7C,MAAM,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC;QACxK,YAAY,EAAE,oCAAoC;QAClD,YAAY,EAAE,UAAU;KACzB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,wCAAwC;QACrD,MAAM,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC;QAC/K,YAAY,EAAE,oCAAoC;QAClD,YAAY,EAAE,MAAM;KACrB;IACD;QACE,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,gDAAgD;QAC7D,MAAM,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC;QAC9Q,YAAY,EAAE,oCAAoC;QAClD,YAAY,EAAE,MAAM;KACrB;IACD;QACE,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,yCAAyC;QACtD,MAAM,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,CAAC;QACvL,YAAY,EAAE,oCAAoC;QAClD,YAAY,EAAE,UAAU;KACzB;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,wCAAwC;QACrD,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,oBAAoB,CAAC;QACpL,YAAY,EAAE,oCAAoC;QAClD,YAAY,EAAE,UAAU;KACzB;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function validateAnthropicKey(key: string): Promise<boolean>;
2
+ export declare function validateOpenAIKey(key: string): Promise<boolean>;
3
+ export declare function validateGoogleKey(key: string): Promise<boolean>;
4
+ export declare function validateApiKey(provider: string, key: string): Promise<boolean>;
5
+ export declare function maskKey(key: string): string;
6
+ //# sourceMappingURL=validate-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-keys.d.ts","sourceRoot":"","sources":["../src/validate-keys.ts"],"names":[],"mappings":"AAEA,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBxE;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcrE;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWrE;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWpF;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3C"}