@moltnet/guard 1.0.2 → 1.0.4
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/index.ts +65 -11
- package/package.json +1 -1
package/index.ts
CHANGED
|
@@ -9,10 +9,14 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import type { PluginAPI, PluginRegisterFn } from 'clawdbot';
|
|
12
|
+
import { randomBytes } from 'crypto';
|
|
13
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
14
|
+
import { join } from 'path';
|
|
15
|
+
import { homedir } from 'os';
|
|
12
16
|
|
|
13
17
|
interface MoltGuardConfig {
|
|
14
18
|
url: string;
|
|
15
|
-
token
|
|
19
|
+
token?: string;
|
|
16
20
|
agentName?: string;
|
|
17
21
|
logThoughts?: boolean;
|
|
18
22
|
gateHighRisk?: boolean;
|
|
@@ -35,6 +39,53 @@ const state: MoltGuardState = {
|
|
|
35
39
|
pollInterval: null,
|
|
36
40
|
};
|
|
37
41
|
|
|
42
|
+
// Generate a new token
|
|
43
|
+
function generateToken(): string {
|
|
44
|
+
return 'mg_' + randomBytes(24).toString('hex');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Auto-generate and save token if not present
|
|
48
|
+
function ensureToken(api: PluginAPI): string | null {
|
|
49
|
+
const configPath = join(homedir(), '.clawdbot', 'clawdbot.json');
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
if (!existsSync(configPath)) {
|
|
53
|
+
console.log('[moltguard] Config file not found');
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const config = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
58
|
+
const guardConfig = config.plugins?.entries?.guard?.config;
|
|
59
|
+
|
|
60
|
+
// If token exists, use it
|
|
61
|
+
if (guardConfig?.token) {
|
|
62
|
+
return guardConfig.token;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Generate new token
|
|
66
|
+
const newToken = generateToken();
|
|
67
|
+
console.log('[moltguard] Generated new token: ' + newToken);
|
|
68
|
+
|
|
69
|
+
// Ensure config structure exists
|
|
70
|
+
if (!config.plugins) config.plugins = {};
|
|
71
|
+
if (!config.plugins.entries) config.plugins.entries = {};
|
|
72
|
+
if (!config.plugins.entries.guard) config.plugins.entries.guard = { enabled: true };
|
|
73
|
+
if (!config.plugins.entries.guard.config) config.plugins.entries.guard.config = {};
|
|
74
|
+
|
|
75
|
+
// Save token
|
|
76
|
+
config.plugins.entries.guard.config.token = newToken;
|
|
77
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
78
|
+
|
|
79
|
+
console.log('[moltguard] Token saved to config');
|
|
80
|
+
console.log('[moltguard] View dashboard: https://guard.moltnet.ai/dashboard?token=' + newToken);
|
|
81
|
+
|
|
82
|
+
return newToken;
|
|
83
|
+
} catch (err) {
|
|
84
|
+
console.error('[moltguard] Failed to manage token:', err instanceof Error ? err.message : String(err));
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
38
89
|
// Risk classification for common tools
|
|
39
90
|
const TOOL_RISK: Record<string, 'low' | 'medium' | 'high' | 'critical'> = {
|
|
40
91
|
// High risk - external effects
|
|
@@ -251,20 +302,23 @@ function getToolRisk(toolName: string, params: Record<string, unknown>): 'low' |
|
|
|
251
302
|
const register: PluginRegisterFn = (api: PluginAPI) => {
|
|
252
303
|
const config = api.config.plugins?.entries?.guard?.config as MoltGuardConfig | undefined;
|
|
253
304
|
|
|
254
|
-
|
|
255
|
-
|
|
305
|
+
// Auto-generate token if not present
|
|
306
|
+
const token = config?.token || ensureToken(api);
|
|
307
|
+
|
|
308
|
+
if (!token) {
|
|
309
|
+
console.log('[moltguard] Failed to initialize token');
|
|
256
310
|
return;
|
|
257
311
|
}
|
|
258
312
|
|
|
259
313
|
const cfg: MoltGuardConfig = {
|
|
260
|
-
url: config
|
|
261
|
-
token:
|
|
262
|
-
agentName: config
|
|
263
|
-
logThoughts: config
|
|
264
|
-
gateHighRisk: config
|
|
265
|
-
gateTools: config
|
|
266
|
-
pollCommands: config
|
|
267
|
-
pollIntervalMs: config
|
|
314
|
+
url: config?.url || 'https://guard.moltnet.ai',
|
|
315
|
+
token: token,
|
|
316
|
+
agentName: config?.agentName,
|
|
317
|
+
logThoughts: config?.logThoughts ?? true,
|
|
318
|
+
gateHighRisk: config?.gateHighRisk ?? true,
|
|
319
|
+
gateTools: config?.gateTools ?? ['exec', 'message', 'write'],
|
|
320
|
+
pollCommands: config?.pollCommands ?? true,
|
|
321
|
+
pollIntervalMs: config?.pollIntervalMs ?? 5000,
|
|
268
322
|
};
|
|
269
323
|
|
|
270
324
|
const agentName = cfg.agentName || `clawdbot-${process.env.HOSTNAME || 'agent'}`;
|