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/license.js
ADDED
|
@@ -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":"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"}
|
|
@@ -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"}
|
package/dist/security.js
ADDED
|
@@ -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"}
|
package/dist/server.d.ts
ADDED
|
@@ -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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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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"}
|