@goplus/agentguard 1.1.8 → 1.1.10
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 +31 -12
- package/dist/cli.js +518 -54
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/feed/cron.d.ts +32 -2
- package/dist/feed/cron.d.ts.map +1 -1
- package/dist/feed/cron.js +398 -30
- package/dist/feed/cron.js.map +1 -1
- package/dist/feed/selfcheck.d.ts +10 -1
- package/dist/feed/selfcheck.d.ts.map +1 -1
- package/dist/feed/selfcheck.js +220 -37
- package/dist/feed/selfcheck.js.map +1 -1
- package/dist/feed/types.d.ts +1 -1
- package/dist/feed/types.d.ts.map +1 -1
- package/dist/installers.d.ts +1 -1
- package/dist/installers.d.ts.map +1 -1
- package/dist/installers.js +57 -0
- package/dist/installers.js.map +1 -1
- package/dist/postinstall.js +9 -0
- package/dist/postinstall.js.map +1 -1
- package/dist/runtime/types.d.ts +1 -1
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/tests/cli-checkup.test.d.ts +2 -0
- package/dist/tests/cli-checkup.test.d.ts.map +1 -0
- package/dist/tests/cli-checkup.test.js +63 -0
- package/dist/tests/cli-checkup.test.js.map +1 -0
- package/dist/tests/cli-init.test.d.ts +2 -0
- package/dist/tests/cli-init.test.d.ts.map +1 -0
- package/dist/tests/cli-init.test.js +40 -0
- package/dist/tests/cli-init.test.js.map +1 -0
- package/dist/tests/cli-policy.test.js +47 -0
- package/dist/tests/cli-policy.test.js.map +1 -1
- package/dist/tests/cli-subscribe.test.d.ts +2 -0
- package/dist/tests/cli-subscribe.test.d.ts.map +1 -0
- package/dist/tests/cli-subscribe.test.js +123 -0
- package/dist/tests/cli-subscribe.test.js.map +1 -0
- package/dist/tests/feed-cron.test.js +266 -13
- package/dist/tests/feed-cron.test.js.map +1 -1
- package/dist/tests/feed-selfcheck.test.js +65 -3
- package/dist/tests/feed-selfcheck.test.js.map +1 -1
- package/dist/tests/feed-state.test.d.ts +2 -0
- package/dist/tests/feed-state.test.d.ts.map +1 -0
- package/dist/tests/feed-state.test.js +40 -0
- package/dist/tests/feed-state.test.js.map +1 -0
- package/dist/tests/installer.test.js +13 -0
- package/dist/tests/installer.test.js.map +1 -1
- package/dist/tests/postinstall.test.d.ts +2 -0
- package/dist/tests/postinstall.test.d.ts.map +1 -0
- package/dist/tests/postinstall.test.js +27 -0
- package/dist/tests/postinstall.test.js.map +1 -0
- package/package.json +2 -1
- package/skills/agentguard/SKILL.md +37 -9
package/dist/feed/cron.js
CHANGED
|
@@ -3,43 +3,90 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.validateCronExpression = validateCronExpression;
|
|
7
|
+
exports.localTimeZone = localTimeZone;
|
|
8
|
+
exports.installThreatFeedCron = installThreatFeedCron;
|
|
7
9
|
exports.installOpenClawThreatFeedCron = installOpenClawThreatFeedCron;
|
|
8
10
|
exports.extractOpenClawCronJobs = extractOpenClawCronJobs;
|
|
9
11
|
exports.openClawGatewayRequest = openClawGatewayRequest;
|
|
10
12
|
const node_http_1 = __importDefault(require("node:http"));
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
const node_child_process_1 = require("node:child_process");
|
|
14
|
+
const promises_1 = require("node:fs/promises");
|
|
15
|
+
const node_os_1 = require("node:os");
|
|
16
|
+
const node_path_1 = require("node:path");
|
|
17
|
+
function validateCronExpression(value) {
|
|
18
|
+
const expr = value.trim();
|
|
19
|
+
const fields = expr.split(/\s+/);
|
|
20
|
+
if (fields.length !== 5) {
|
|
21
|
+
throw new Error('Invalid --cron. Use a standard five-field cron expression, for example "0 * * * *".');
|
|
14
22
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
throw new Error('Invalid --interval-minutes. Use an integer between 1 and 59.');
|
|
23
|
+
if (fields.some((field) => field.length === 0)) {
|
|
24
|
+
throw new Error('Invalid --cron. Use a standard five-field cron expression, for example "0 * * * *".');
|
|
18
25
|
}
|
|
19
|
-
return
|
|
26
|
+
return fields.join(' ');
|
|
27
|
+
}
|
|
28
|
+
function localTimeZone() {
|
|
29
|
+
return Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';
|
|
30
|
+
}
|
|
31
|
+
async function installThreatFeedCron(options, adapters = {}) {
|
|
32
|
+
const backend = options.backend ?? 'auto';
|
|
33
|
+
if (backend === 'auto' && !options.agentHost) {
|
|
34
|
+
throw new Error('Cron target auto requires a saved agent host. Run `agentguard init --agent <claude-code|codex|openclaw|hermes|qclaw>` first, or pass `--cron-target openclaw`, `--cron-target qclaw`, `--cron-target hermes`, or `--cron-target system`.');
|
|
35
|
+
}
|
|
36
|
+
if (backend === 'system' || (backend === 'auto' && options.agentHost !== 'openclaw' && options.agentHost !== 'qclaw' && options.agentHost !== 'hermes')) {
|
|
37
|
+
return installSystemThreatFeedCron(options, adapters.runCommand);
|
|
38
|
+
}
|
|
39
|
+
if (backend === 'hermes' || (backend === 'auto' && options.agentHost === 'hermes')) {
|
|
40
|
+
return installHermesNativeThreatFeedCron(options, adapters.runCommand);
|
|
41
|
+
}
|
|
42
|
+
if (backend === 'openclaw' || (backend === 'auto' && options.agentHost === 'openclaw')) {
|
|
43
|
+
let nativeError = null;
|
|
44
|
+
try {
|
|
45
|
+
const result = await installOpenClawNativeThreatFeedCron(options, adapters.runCommand);
|
|
46
|
+
result.backend = 'openclaw';
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
nativeError = err;
|
|
51
|
+
if (!(nativeError instanceof CronBackendUnavailableError)) {
|
|
52
|
+
throw nativeError;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const result = await installOpenClawThreatFeedCron(options, adapters.gateway);
|
|
57
|
+
result.backend = 'openclaw-gateway';
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
catch (gatewayError) {
|
|
61
|
+
throw new Error(`Could not install OpenClaw cron. Native openclaw command failed: ${nativeError.message}. ` +
|
|
62
|
+
`Gateway fallback failed: ${gatewayError.message}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (backend === 'qclaw' || (backend === 'auto' && options.agentHost === 'qclaw')) {
|
|
66
|
+
const result = await installOpenClawThreatFeedCron(options, qclawGatewayOptions(adapters.gateway));
|
|
67
|
+
result.backend = 'qclaw-gateway';
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
throw new Error('Invalid cron target. Use auto, openclaw, qclaw, hermes, or system.');
|
|
20
71
|
}
|
|
21
72
|
async function installOpenClawThreatFeedCron(options, gateway = {}) {
|
|
22
|
-
const schedule =
|
|
73
|
+
const schedule = validateCronExpression(options.cronExpression);
|
|
74
|
+
const timezone = options.timezone ?? localTimeZone();
|
|
75
|
+
const command = threatFeedCommand(options.quiet);
|
|
23
76
|
const existing = await findOpenClawCronJobsByName(options.name, gateway);
|
|
24
77
|
if (existing.length > 0 && !options.force) {
|
|
25
78
|
return {
|
|
26
79
|
name: options.name,
|
|
27
80
|
schedule,
|
|
81
|
+
timezone,
|
|
28
82
|
created: false,
|
|
83
|
+
backend: 'openclaw-gateway',
|
|
84
|
+
command,
|
|
29
85
|
};
|
|
30
86
|
}
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
'',
|
|
35
|
-
'Rules:',
|
|
36
|
-
'- If the JSON field `hardFailures` is greater than 0, output a short error summary and do not send a threat-match notification.',
|
|
37
|
-
'- If the JSON field `shouldNotify` is true, send `notification.body` exactly as-is using the current session notification context.',
|
|
38
|
-
'- If `shouldNotify` is false, output "skipped" and finish without sending any message.',
|
|
39
|
-
'- If the command fails or the JSON cannot be parsed, output a short error summary and do not send a threat-match notification.',
|
|
40
|
-
'',
|
|
41
|
-
'Follow these rules exactly.',
|
|
42
|
-
].join('\n');
|
|
87
|
+
const mode = options.quiet ? 'quiet' : 'manual';
|
|
88
|
+
const description = `AgentGuard Cloud threat feed subscription (${schedule})`;
|
|
89
|
+
const message = openClawCronMessage(options.quiet);
|
|
43
90
|
if (existing.length > 0) {
|
|
44
91
|
await removeOpenClawCronJobs(existing, gateway);
|
|
45
92
|
}
|
|
@@ -49,14 +96,19 @@ async function installOpenClawThreatFeedCron(options, gateway = {}) {
|
|
|
49
96
|
description,
|
|
50
97
|
enabled: true,
|
|
51
98
|
schedule: {
|
|
52
|
-
kind: '
|
|
53
|
-
|
|
99
|
+
kind: 'cron',
|
|
100
|
+
expr: schedule,
|
|
101
|
+
tz: timezone,
|
|
54
102
|
},
|
|
55
103
|
sessionTarget: 'isolated',
|
|
56
104
|
payload: {
|
|
57
105
|
kind: 'agentTurn',
|
|
58
106
|
message,
|
|
59
107
|
timeoutSeconds: 300,
|
|
108
|
+
agentguard: {
|
|
109
|
+
mode,
|
|
110
|
+
command,
|
|
111
|
+
},
|
|
60
112
|
},
|
|
61
113
|
delivery: {
|
|
62
114
|
mode: 'none',
|
|
@@ -66,13 +118,328 @@ async function installOpenClawThreatFeedCron(options, gateway = {}) {
|
|
|
66
118
|
return {
|
|
67
119
|
name: options.name,
|
|
68
120
|
schedule,
|
|
121
|
+
timezone,
|
|
69
122
|
created: true,
|
|
123
|
+
backend: 'openclaw-gateway',
|
|
124
|
+
command,
|
|
70
125
|
};
|
|
71
126
|
}
|
|
72
127
|
async function findOpenClawCronJobsByName(name, gateway) {
|
|
73
|
-
const listed = await openClawGatewayRequest('cron.list', {}, gateway)
|
|
128
|
+
const listed = await openClawGatewayRequest('cron.list', {}, gateway);
|
|
74
129
|
return extractOpenClawCronJobs(listed).filter((job) => job.name === name);
|
|
75
130
|
}
|
|
131
|
+
async function installOpenClawNativeThreatFeedCron(options, runCommand = execCommand) {
|
|
132
|
+
const schedule = validateCronExpression(options.cronExpression);
|
|
133
|
+
const timezone = options.timezone ?? localTimeZone();
|
|
134
|
+
const command = threatFeedCommand(options.quiet);
|
|
135
|
+
const message = openClawCronMessage(options.quiet);
|
|
136
|
+
let existing;
|
|
137
|
+
try {
|
|
138
|
+
existing = await runCommand('openclaw', ['cron', 'list']);
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
throw new CronBackendUnavailableError(`Could not list native OpenClaw cron jobs. Is OpenClaw installed and available on PATH? ${err.message}`);
|
|
142
|
+
}
|
|
143
|
+
if (nativeCronListHasExactName(existing.stdout, options.name) && !options.force) {
|
|
144
|
+
return {
|
|
145
|
+
name: options.name,
|
|
146
|
+
schedule,
|
|
147
|
+
timezone,
|
|
148
|
+
created: false,
|
|
149
|
+
backend: 'openclaw',
|
|
150
|
+
command,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const args = [
|
|
154
|
+
'cron',
|
|
155
|
+
'add',
|
|
156
|
+
'--name',
|
|
157
|
+
options.name,
|
|
158
|
+
'--description',
|
|
159
|
+
`AgentGuard Cloud threat feed subscription (${schedule})`,
|
|
160
|
+
'--cron',
|
|
161
|
+
schedule,
|
|
162
|
+
'--tz',
|
|
163
|
+
timezone,
|
|
164
|
+
'--session',
|
|
165
|
+
'isolated',
|
|
166
|
+
'--message',
|
|
167
|
+
message,
|
|
168
|
+
'--timeout-seconds',
|
|
169
|
+
'300',
|
|
170
|
+
'--thinking',
|
|
171
|
+
'off',
|
|
172
|
+
];
|
|
173
|
+
if (options.force)
|
|
174
|
+
args.push('--force');
|
|
175
|
+
await runCommand('openclaw', args);
|
|
176
|
+
return {
|
|
177
|
+
name: options.name,
|
|
178
|
+
schedule,
|
|
179
|
+
timezone,
|
|
180
|
+
created: true,
|
|
181
|
+
backend: 'openclaw',
|
|
182
|
+
command,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
class CronBackendUnavailableError extends Error {
|
|
186
|
+
constructor(message) {
|
|
187
|
+
super(message);
|
|
188
|
+
this.name = 'CronBackendUnavailableError';
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function nativeCronListHasExactName(stdout, name) {
|
|
192
|
+
const jsonJobs = extractOpenClawCronJobs(parseJsonOrNull(stdout));
|
|
193
|
+
if (jsonJobs.some((job) => job.name === name))
|
|
194
|
+
return true;
|
|
195
|
+
return stdout
|
|
196
|
+
.split(/\r?\n/)
|
|
197
|
+
.map((line) => line.trim())
|
|
198
|
+
.filter(Boolean)
|
|
199
|
+
.some((line) => nativeCronListLineHasExactName(line, name));
|
|
200
|
+
}
|
|
201
|
+
function nativeCronListLineHasExactName(line, name) {
|
|
202
|
+
const quoted = line.match(/(["'])(.*?)\1/);
|
|
203
|
+
if (quoted?.[2] === name)
|
|
204
|
+
return true;
|
|
205
|
+
const cells = line.split(/\s{2,}|\t+/).map((cell) => cell.trim()).filter(Boolean);
|
|
206
|
+
return cells.includes(name);
|
|
207
|
+
}
|
|
208
|
+
function parseJsonOrNull(value) {
|
|
209
|
+
try {
|
|
210
|
+
return JSON.parse(value);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async function installHermesNativeThreatFeedCron(options, runCommand = execCommand) {
|
|
217
|
+
const schedule = validateCronExpression(options.cronExpression);
|
|
218
|
+
const timezone = options.timezone ?? localTimeZone();
|
|
219
|
+
const command = threatFeedCommand(options.quiet);
|
|
220
|
+
let existing;
|
|
221
|
+
try {
|
|
222
|
+
existing = await runCommand('hermes', ['cron', 'list']);
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
throw new Error(`Could not list Hermes cron jobs. Is Hermes installed and available on PATH? ${err.message}`);
|
|
226
|
+
}
|
|
227
|
+
if (existing.stdout.includes(options.name) && !options.force) {
|
|
228
|
+
return {
|
|
229
|
+
name: options.name,
|
|
230
|
+
schedule,
|
|
231
|
+
timezone,
|
|
232
|
+
created: false,
|
|
233
|
+
backend: 'hermes',
|
|
234
|
+
command,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
if (existing.stdout.includes(options.name) && options.force) {
|
|
238
|
+
await runCommand('hermes', ['cron', 'remove', options.name]);
|
|
239
|
+
}
|
|
240
|
+
const script = await writeHermesThreatFeedScript(options);
|
|
241
|
+
await runCommand('hermes', [
|
|
242
|
+
'cron',
|
|
243
|
+
'create',
|
|
244
|
+
schedule,
|
|
245
|
+
'--name',
|
|
246
|
+
options.name,
|
|
247
|
+
'--deliver',
|
|
248
|
+
'local',
|
|
249
|
+
'--script',
|
|
250
|
+
script,
|
|
251
|
+
'--no-agent',
|
|
252
|
+
]);
|
|
253
|
+
return {
|
|
254
|
+
name: options.name,
|
|
255
|
+
schedule,
|
|
256
|
+
timezone,
|
|
257
|
+
created: true,
|
|
258
|
+
backend: 'hermes',
|
|
259
|
+
command,
|
|
260
|
+
script,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
async function installSystemThreatFeedCron(options, runCommand = execCommand) {
|
|
264
|
+
const schedule = validateCronExpression(options.cronExpression);
|
|
265
|
+
const timezone = options.timezone ?? localTimeZone();
|
|
266
|
+
const command = threatFeedCommand(options.quiet);
|
|
267
|
+
const home = validateCronFilesystemPath(options.agentGuardHome ?? (0, node_path_1.join)((0, node_os_1.homedir)(), '.agentguard'), 'AGENTGUARD_HOME');
|
|
268
|
+
const jobId = sanitizeCronJobId(options.name);
|
|
269
|
+
const begin = `# AgentGuard begin ${jobId}`;
|
|
270
|
+
const end = `# AgentGuard end ${jobId}`;
|
|
271
|
+
const script = await writeSystemThreatFeedScript({
|
|
272
|
+
name: options.name,
|
|
273
|
+
quiet: options.quiet,
|
|
274
|
+
agentGuardHome: home,
|
|
275
|
+
});
|
|
276
|
+
const logPath = validateCronFilesystemPath((0, node_path_1.join)(home, 'feed-cron.log'), 'system cron log path');
|
|
277
|
+
const line = `${schedule} ${shellQuote(script)} >> ${shellQuote(logPath)} 2>&1`;
|
|
278
|
+
const existing = await runCommand('crontab', ['-l']).then((result) => result.stdout, () => '');
|
|
279
|
+
const hasExisting = existing.includes(begin);
|
|
280
|
+
if (hasExisting && !options.force) {
|
|
281
|
+
return {
|
|
282
|
+
name: options.name,
|
|
283
|
+
schedule,
|
|
284
|
+
timezone,
|
|
285
|
+
created: false,
|
|
286
|
+
backend: 'system',
|
|
287
|
+
command,
|
|
288
|
+
script,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
const withoutExisting = removeAgentGuardCronBlock(existing, jobId).trimEnd();
|
|
292
|
+
const next = `${withoutExisting}${withoutExisting ? '\n' : ''}${begin}\n${line}\n${end}\n`;
|
|
293
|
+
await runCommand('crontab', ['-'], next);
|
|
294
|
+
return {
|
|
295
|
+
name: options.name,
|
|
296
|
+
schedule,
|
|
297
|
+
timezone,
|
|
298
|
+
created: true,
|
|
299
|
+
backend: 'system',
|
|
300
|
+
command,
|
|
301
|
+
script,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
function threatFeedCommand(quiet) {
|
|
305
|
+
return `agentguard subscribe${quiet ? ' --quiet' : ''} --json --cron-run`;
|
|
306
|
+
}
|
|
307
|
+
function qclawGatewayOptions(gateway = {}) {
|
|
308
|
+
return {
|
|
309
|
+
...gateway,
|
|
310
|
+
port: gateway.port ?? 28789,
|
|
311
|
+
label: gateway.label ?? 'QClaw Gateway',
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
async function writeHermesThreatFeedScript(options) {
|
|
315
|
+
const hermesHome = (options.hermesHome ?? process.env.HERMES_HOME?.trim()) || (0, node_path_1.join)((0, node_os_1.homedir)(), '.hermes');
|
|
316
|
+
const scriptsDir = (0, node_path_1.join)(hermesHome, 'scripts');
|
|
317
|
+
await (0, promises_1.mkdir)(scriptsDir, { recursive: true });
|
|
318
|
+
const scriptName = `${sanitizeHermesScriptName(options.name)}.sh`;
|
|
319
|
+
const scriptPath = (0, node_path_1.join)(scriptsDir, scriptName);
|
|
320
|
+
const lines = [
|
|
321
|
+
'#!/usr/bin/env bash',
|
|
322
|
+
'set -euo pipefail',
|
|
323
|
+
`export AGENTGUARD_HOME=${shellQuote(options.agentGuardHome ?? (0, node_path_1.join)((0, node_os_1.homedir)(), '.agentguard'))}`,
|
|
324
|
+
process.env.PATH ? `export PATH=${shellQuote(process.env.PATH)}` : '',
|
|
325
|
+
`exec ${threatFeedCommand(options.quiet)}`,
|
|
326
|
+
'',
|
|
327
|
+
].filter(Boolean);
|
|
328
|
+
await (0, promises_1.writeFile)(scriptPath, lines.join('\n'), { mode: 0o700 });
|
|
329
|
+
await (0, promises_1.chmod)(scriptPath, 0o700).catch(() => undefined);
|
|
330
|
+
return scriptName;
|
|
331
|
+
}
|
|
332
|
+
async function writeSystemThreatFeedScript(options) {
|
|
333
|
+
const scriptsDir = (0, node_path_1.join)(options.agentGuardHome, 'scripts');
|
|
334
|
+
await (0, promises_1.mkdir)(scriptsDir, { recursive: true });
|
|
335
|
+
const scriptPath = validateCronFilesystemPath((0, node_path_1.join)(scriptsDir, `${sanitizeCronJobId(options.name)}.sh`), 'system cron script path');
|
|
336
|
+
const lines = [
|
|
337
|
+
'#!/usr/bin/env bash',
|
|
338
|
+
'set -euo pipefail',
|
|
339
|
+
`export AGENTGUARD_HOME=${shellQuote(options.agentGuardHome)}`,
|
|
340
|
+
process.env.PATH ? `export PATH=${shellQuote(process.env.PATH)}` : '',
|
|
341
|
+
`exec ${threatFeedCommand(options.quiet)}`,
|
|
342
|
+
'',
|
|
343
|
+
].filter(Boolean);
|
|
344
|
+
await (0, promises_1.writeFile)(scriptPath, lines.join('\n'), { mode: 0o700 });
|
|
345
|
+
await (0, promises_1.chmod)(scriptPath, 0o700).catch(() => undefined);
|
|
346
|
+
return scriptPath;
|
|
347
|
+
}
|
|
348
|
+
function validateCronFilesystemPath(value, label) {
|
|
349
|
+
if (!(0, node_path_1.isAbsolute)(value)) {
|
|
350
|
+
throw new Error(`${label} must be an absolute path for system cron installation.`);
|
|
351
|
+
}
|
|
352
|
+
if (/[\0\r\n'"]/.test(value)) {
|
|
353
|
+
throw new Error(`${label} must not contain quotes or newlines for system cron installation.`);
|
|
354
|
+
}
|
|
355
|
+
return value;
|
|
356
|
+
}
|
|
357
|
+
function sanitizeCronJobId(value) {
|
|
358
|
+
const normalized = value.trim().replace(/[^A-Za-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '');
|
|
359
|
+
return normalized || 'agentguard-threat-feed';
|
|
360
|
+
}
|
|
361
|
+
function sanitizeHermesScriptName(value) {
|
|
362
|
+
const normalized = value.trim().replace(/[^A-Za-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '');
|
|
363
|
+
return normalized ? `agentguard-${normalized}` : 'agentguard-threat-feed';
|
|
364
|
+
}
|
|
365
|
+
function shellQuote(value) {
|
|
366
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
367
|
+
}
|
|
368
|
+
function openClawCronMessage(quiet) {
|
|
369
|
+
const mode = quiet ? 'quiet' : 'manual';
|
|
370
|
+
const command = threatFeedCommand(quiet);
|
|
371
|
+
return [
|
|
372
|
+
`Mode: ${mode}.`,
|
|
373
|
+
`Command: \`${command}\`.`,
|
|
374
|
+
`Run exactly the command above.`,
|
|
375
|
+
'',
|
|
376
|
+
'Rules:',
|
|
377
|
+
'- If the JSON field `hardFailures` is greater than 0, output a short error summary and do not send a notification.',
|
|
378
|
+
'- If the JSON field `shouldNotify` is true, send `notification.body` exactly as-is using the current session notification context.',
|
|
379
|
+
'- If `shouldNotify` is false, output "skipped" and finish without sending any message.',
|
|
380
|
+
'- If the command fails or the JSON cannot be parsed, output a short error summary and do not send a notification.',
|
|
381
|
+
'',
|
|
382
|
+
'Follow these rules exactly.',
|
|
383
|
+
].join('\n');
|
|
384
|
+
}
|
|
385
|
+
function removeAgentGuardCronBlock(value, name) {
|
|
386
|
+
const begin = `# AgentGuard begin ${name}`;
|
|
387
|
+
const end = `# AgentGuard end ${name}`;
|
|
388
|
+
const lines = value.split(/\r?\n/);
|
|
389
|
+
const kept = [];
|
|
390
|
+
let skipping = false;
|
|
391
|
+
for (const line of lines) {
|
|
392
|
+
if (line.trim() === begin) {
|
|
393
|
+
skipping = true;
|
|
394
|
+
continue;
|
|
395
|
+
}
|
|
396
|
+
if (line.trim() === end) {
|
|
397
|
+
skipping = false;
|
|
398
|
+
continue;
|
|
399
|
+
}
|
|
400
|
+
if (!skipping)
|
|
401
|
+
kept.push(line);
|
|
402
|
+
}
|
|
403
|
+
return kept.join('\n');
|
|
404
|
+
}
|
|
405
|
+
function execCommand(command, args, input) {
|
|
406
|
+
return new Promise((resolve, reject) => {
|
|
407
|
+
const child = (0, node_child_process_1.spawn)(command, args, { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
408
|
+
let settled = false;
|
|
409
|
+
const finish = (fn) => {
|
|
410
|
+
if (settled)
|
|
411
|
+
return;
|
|
412
|
+
settled = true;
|
|
413
|
+
clearTimeout(timeout);
|
|
414
|
+
fn();
|
|
415
|
+
};
|
|
416
|
+
const timeout = setTimeout(() => {
|
|
417
|
+
child.kill('SIGTERM');
|
|
418
|
+
finish(() => reject(new Error(`${command} ${args.join(' ')} timed out after 10000ms`)));
|
|
419
|
+
}, 10000);
|
|
420
|
+
let stdout = '';
|
|
421
|
+
let stderr = '';
|
|
422
|
+
child.stdout.on('data', (chunk) => {
|
|
423
|
+
stdout += chunk.toString();
|
|
424
|
+
});
|
|
425
|
+
child.stderr.on('data', (chunk) => {
|
|
426
|
+
stderr += chunk.toString();
|
|
427
|
+
});
|
|
428
|
+
child.on('error', (err) => {
|
|
429
|
+
finish(() => reject(err));
|
|
430
|
+
});
|
|
431
|
+
child.on('close', (code) => {
|
|
432
|
+
if (code === 0) {
|
|
433
|
+
finish(() => resolve({ stdout, stderr }));
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
finish(() => reject(new Error(`${command} ${args.join(' ')} failed with exit code ${code}: ${stderr || stdout}`.trim())));
|
|
437
|
+
});
|
|
438
|
+
if (input)
|
|
439
|
+
child.stdin.write(input);
|
|
440
|
+
child.stdin.end();
|
|
441
|
+
});
|
|
442
|
+
}
|
|
76
443
|
async function removeOpenClawCronJobs(jobs, gateway) {
|
|
77
444
|
for (const job of jobs) {
|
|
78
445
|
if (!job.id)
|
|
@@ -105,6 +472,7 @@ function openClawGatewayRequest(method, params, options = {}) {
|
|
|
105
472
|
});
|
|
106
473
|
const host = options.host ?? '127.0.0.1';
|
|
107
474
|
const port = options.port ?? 18789;
|
|
475
|
+
const label = options.label ?? 'OpenClaw Gateway';
|
|
108
476
|
const timeoutMs = options.timeoutMs ?? 5000;
|
|
109
477
|
return new Promise((resolve, reject) => {
|
|
110
478
|
let settled = false;
|
|
@@ -133,7 +501,7 @@ function openClawGatewayRequest(method, params, options = {}) {
|
|
|
133
501
|
let data = '';
|
|
134
502
|
res.setEncoding('utf8');
|
|
135
503
|
res.on('error', (err) => {
|
|
136
|
-
fail(new Error(
|
|
504
|
+
fail(new Error(`${label} ${method} response failed: ${err.message}`));
|
|
137
505
|
});
|
|
138
506
|
res.on('data', (chunk) => {
|
|
139
507
|
data += chunk;
|
|
@@ -144,25 +512,25 @@ function openClawGatewayRequest(method, params, options = {}) {
|
|
|
144
512
|
parsed = data ? JSON.parse(data) : null;
|
|
145
513
|
}
|
|
146
514
|
catch {
|
|
147
|
-
fail(new Error(
|
|
515
|
+
fail(new Error(`${label} returned non-JSON response: ${data}`));
|
|
148
516
|
return;
|
|
149
517
|
}
|
|
150
518
|
if (parsed?.error) {
|
|
151
|
-
fail(new Error(
|
|
519
|
+
fail(new Error(`${label} ${method} failed: ${parsed.error.message ?? JSON.stringify(parsed.error)}`));
|
|
152
520
|
return;
|
|
153
521
|
}
|
|
154
522
|
if (res.statusCode && res.statusCode >= 400) {
|
|
155
|
-
fail(new Error(
|
|
523
|
+
fail(new Error(`${label} ${method} failed with HTTP ${res.statusCode}`));
|
|
156
524
|
return;
|
|
157
525
|
}
|
|
158
526
|
succeed(parsed?.result ?? parsed);
|
|
159
527
|
});
|
|
160
528
|
});
|
|
161
529
|
req.on('error', (err) => {
|
|
162
|
-
fail(new Error(`Could not reach
|
|
530
|
+
fail(new Error(`Could not reach ${label} at ${host}:${port}: ${err.message}`));
|
|
163
531
|
});
|
|
164
532
|
req.setTimeout(timeoutMs, () => {
|
|
165
|
-
const err = new Error(
|
|
533
|
+
const err = new Error(`${label} ${method} request timed out after ${timeoutMs}ms`);
|
|
166
534
|
fail(err);
|
|
167
535
|
req.destroy(err);
|
|
168
536
|
});
|
package/dist/feed/cron.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/feed/cron.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/feed/cron.ts"],"names":[],"mappings":"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"}
|
package/dist/feed/selfcheck.d.ts
CHANGED
|
@@ -16,10 +16,19 @@ import type { Advisory, SelfCheckResult } from './types.js';
|
|
|
16
16
|
* conventions, but inspection of those is config-aware and lives elsewhere.
|
|
17
17
|
*/
|
|
18
18
|
export declare const DEFAULT_SKILL_ROOTS: string[];
|
|
19
|
+
export declare const DEFAULT_PLUGIN_ROOTS: string[];
|
|
20
|
+
export declare const DEFAULT_MCP_CONFIG_PATHS: string[];
|
|
21
|
+
export declare const DEFAULT_SUPPLY_CHAIN_PATHS: string[];
|
|
22
|
+
export declare const DEFAULT_URL_SCAN_PATHS: string[];
|
|
19
23
|
export interface RunSelfCheckOptions {
|
|
20
24
|
/** Override the default per-ecosystem search roots. */
|
|
21
25
|
skillRoots?: string[];
|
|
22
|
-
|
|
26
|
+
pluginRoots?: string[];
|
|
27
|
+
mcpConfigPaths?: string[];
|
|
28
|
+
supplyChainPaths?: string[];
|
|
29
|
+
urlScanPaths?: string[];
|
|
30
|
+
promptInjectionRoots?: string[];
|
|
31
|
+
/** Cap on local artifacts checked per advisory. */
|
|
23
32
|
maxArtifacts?: number;
|
|
24
33
|
}
|
|
25
34
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selfcheck.d.ts","sourceRoot":"","sources":["../../src/feed/selfcheck.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"selfcheck.d.ts","sourceRoot":"","sources":["../../src/feed/selfcheck.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EACV,QAAQ,EAIR,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,UAK/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,UAKhC,CAAC;AAEF,eAAO,MAAM,wBAAwB,UAOpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,UAatC,CAAC;AAEF,eAAO,MAAM,sBAAsB,UAOlC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AASD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,eAAe,CAAC,CA+B1B;AA8PD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBpE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAOjE"}
|