@moltnet/guard 1.0.3 → 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 -13
- 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,22 +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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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');
|
|
258
310
|
return;
|
|
259
311
|
}
|
|
260
312
|
|
|
261
313
|
const cfg: MoltGuardConfig = {
|
|
262
|
-
url: config
|
|
263
|
-
token:
|
|
264
|
-
agentName: config
|
|
265
|
-
logThoughts: config
|
|
266
|
-
gateHighRisk: config
|
|
267
|
-
gateTools: config
|
|
268
|
-
pollCommands: config
|
|
269
|
-
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,
|
|
270
322
|
};
|
|
271
323
|
|
|
272
324
|
const agentName = cfg.agentName || `clawdbot-${process.env.HOSTNAME || 'agent'}`;
|