@goplus/agentguard 1.1.18 → 1.1.20
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/dist/adapters/engine.d.ts.map +1 -1
- package/dist/adapters/engine.js +10 -0
- package/dist/adapters/engine.js.map +1 -1
- package/dist/cli.js +176 -33
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/feed/cron.d.ts +17 -0
- package/dist/feed/cron.d.ts.map +1 -1
- package/dist/feed/cron.js +197 -18
- package/dist/feed/cron.js.map +1 -1
- package/dist/installers.d.ts.map +1 -1
- package/dist/installers.js +76 -1
- package/dist/installers.js.map +1 -1
- package/dist/runtime/protect.d.ts.map +1 -1
- package/dist/runtime/protect.js +6 -0
- package/dist/runtime/protect.js.map +1 -1
- package/dist/runtime/self-command.d.ts +2 -0
- package/dist/runtime/self-command.d.ts.map +1 -0
- package/dist/runtime/self-command.js +73 -0
- package/dist/runtime/self-command.js.map +1 -0
- package/dist/tests/cli-connect.test.js +118 -1
- package/dist/tests/cli-connect.test.js.map +1 -1
- package/dist/tests/cli-init.test.js +113 -0
- package/dist/tests/cli-init.test.js.map +1 -1
- package/dist/tests/cli-subscribe.test.js +71 -0
- package/dist/tests/cli-subscribe.test.js.map +1 -1
- package/dist/tests/feed-cron.test.js +236 -0
- package/dist/tests/feed-cron.test.js.map +1 -1
- package/dist/tests/installer.test.js +69 -0
- package/dist/tests/installer.test.js.map +1 -1
- package/dist/tests/runtime-cloud.test.js +83 -0
- package/dist/tests/runtime-cloud.test.js.map +1 -1
- package/package.json +1 -1
- package/skills/agentguard/SKILL.md +10 -4
package/dist/config.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export interface AgentGuardConfig {
|
|
|
11
11
|
agentRegisterUrl?: string;
|
|
12
12
|
agentRegisteredAt?: string;
|
|
13
13
|
connectedAt?: string;
|
|
14
|
+
threatFeedCronName?: string;
|
|
15
|
+
threatFeedCronInstalledAt?: string;
|
|
14
16
|
policyCachePath: string;
|
|
15
17
|
auditPath: string;
|
|
16
18
|
eventSpoolPath: string;
|
|
@@ -39,6 +41,7 @@ export declare function connectAgentJwt(options: {
|
|
|
39
41
|
cloudUrl?: string;
|
|
40
42
|
}): AgentGuardConfig;
|
|
41
43
|
export declare function clearAgentJwt(config?: AgentGuardConfig): AgentGuardConfig;
|
|
44
|
+
export declare function clearAgentRegisterUrl(config?: AgentGuardConfig): AgentGuardConfig;
|
|
42
45
|
export declare function disconnectCloud(): AgentGuardConfig;
|
|
43
46
|
export declare function maskApiKey(apiKey?: string): string;
|
|
44
47
|
export declare function validateApiKey(apiKey: string): void;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5F,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;IAC5C,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,kBAAkB,IAAI,eAAe,CASpD;AAED,wBAAgB,aAAa,IAAI,gBAAgB,CAUhD;AAED,wBAAgB,oBAAoB,IAAI,eAAe,CAKtD;AAED,wBAAgB,YAAY,IAAI,gBAAgB,CAQ/C;AAED,wBAAgB,UAAU,IAAI,gBAAgB,CAoB7C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAKzD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,gBAAgB,CAe7F;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5F,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;IAC5C,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,kBAAkB,IAAI,eAAe,CASpD;AAED,wBAAgB,aAAa,IAAI,gBAAgB,CAUhD;AAED,wBAAgB,oBAAoB,IAAI,eAAe,CAKtD;AAED,wBAAgB,YAAY,IAAI,gBAAgB,CAQ/C;AAED,wBAAgB,UAAU,IAAI,gBAAgB,CAoB7C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAKzD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,gBAAgB,CAe7F;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,gBAAgB,CAsBnB;AAED,wBAAgB,aAAa,CAAC,MAAM,GAAE,gBAAiC,GAAG,gBAAgB,CAQzF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,gBAAiC,GAAG,gBAAgB,CAKjG;AAED,wBAAgB,eAAe,IAAI,gBAAgB,CAelD;AAED,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAInD;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAevD"}
|
package/dist/config.js
CHANGED
|
@@ -9,6 +9,7 @@ exports.saveConfig = saveConfig;
|
|
|
9
9
|
exports.connectCloud = connectCloud;
|
|
10
10
|
exports.connectAgentJwt = connectAgentJwt;
|
|
11
11
|
exports.clearAgentJwt = clearAgentJwt;
|
|
12
|
+
exports.clearAgentRegisterUrl = clearAgentRegisterUrl;
|
|
12
13
|
exports.disconnectCloud = disconnectCloud;
|
|
13
14
|
exports.maskApiKey = maskApiKey;
|
|
14
15
|
exports.validateApiKey = validateApiKey;
|
|
@@ -117,6 +118,7 @@ function connectAgentJwt(options) {
|
|
|
117
118
|
agentRegisteredAt: new Date().toISOString(),
|
|
118
119
|
connectedAt: new Date().toISOString(),
|
|
119
120
|
};
|
|
121
|
+
delete next.apiKey;
|
|
120
122
|
saveConfig(next);
|
|
121
123
|
return next;
|
|
122
124
|
}
|
|
@@ -129,6 +131,12 @@ function clearAgentJwt(config = ensureConfig()) {
|
|
|
129
131
|
saveConfig(next);
|
|
130
132
|
return next;
|
|
131
133
|
}
|
|
134
|
+
function clearAgentRegisterUrl(config = ensureConfig()) {
|
|
135
|
+
const next = { ...config };
|
|
136
|
+
delete next.agentRegisterUrl;
|
|
137
|
+
saveConfig(next);
|
|
138
|
+
return next;
|
|
139
|
+
}
|
|
132
140
|
function disconnectCloud() {
|
|
133
141
|
const current = ensureConfig();
|
|
134
142
|
const next = { ...current };
|
|
@@ -138,6 +146,8 @@ function disconnectCloud() {
|
|
|
138
146
|
delete next.agentRegisterUrl;
|
|
139
147
|
delete next.agentRegisteredAt;
|
|
140
148
|
delete next.connectedAt;
|
|
149
|
+
delete next.threatFeedCronName;
|
|
150
|
+
delete next.threatFeedCronInstalledAt;
|
|
141
151
|
(0, node_fs_1.rmSync)(current.eventSpoolPath, { force: true });
|
|
142
152
|
(0, node_fs_1.rmSync)(current.policyCachePath, { force: true });
|
|
143
153
|
saveConfig(next);
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/feed/cron.d.ts
CHANGED
|
@@ -10,10 +10,17 @@ export interface OpenClawCronInstallResult {
|
|
|
10
10
|
command?: string;
|
|
11
11
|
script?: string;
|
|
12
12
|
}
|
|
13
|
+
export interface ThreatFeedCronRemovalResult {
|
|
14
|
+
name: string;
|
|
15
|
+
backend: ResolvedCronBackend;
|
|
16
|
+
removed: boolean;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
13
19
|
export interface OpenClawGatewayOptions {
|
|
14
20
|
host?: string;
|
|
15
21
|
port?: number;
|
|
16
22
|
url?: string;
|
|
23
|
+
token?: string;
|
|
17
24
|
label?: string;
|
|
18
25
|
timeoutMs?: number;
|
|
19
26
|
runCommand?: CommandRunner;
|
|
@@ -44,6 +51,16 @@ export declare function installThreatFeedCron(options: {
|
|
|
44
51
|
gateway?: OpenClawGatewayOptions;
|
|
45
52
|
runCommand?: CommandRunner;
|
|
46
53
|
}): Promise<OpenClawCronInstallResult>;
|
|
54
|
+
export declare function removeThreatFeedCron(options: {
|
|
55
|
+
name: string;
|
|
56
|
+
backend?: CronBackend | 'all';
|
|
57
|
+
agentHost?: CronAgentHost;
|
|
58
|
+
agentGuardHome?: string;
|
|
59
|
+
hermesHome?: string;
|
|
60
|
+
}, adapters?: {
|
|
61
|
+
gateway?: OpenClawGatewayOptions;
|
|
62
|
+
runCommand?: CommandRunner;
|
|
63
|
+
}): Promise<ThreatFeedCronRemovalResult[]>;
|
|
47
64
|
export declare function installOpenClawThreatFeedCron(options: {
|
|
48
65
|
name: string;
|
|
49
66
|
cronExpression: string;
|
package/dist/feed/cron.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/feed/cron.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC9E,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,kBAAkB,GAAG,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC1G,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtF,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAExG,UAAU,eAAe;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAkBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU5D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,EACD,QAAQ,GAAE;IACR,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,UAAU,CAAC,EAAE,aAAa,CAAC;CACvB,GACL,OAAO,CAAC,yBAAyB,CAAC,CAwDpC;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,yBAAyB,CAAC,CAsDpC;
|
|
1
|
+
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/feed/cron.ts"],"names":[],"mappings":"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"}
|
package/dist/feed/cron.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.validateCronExpression = validateCronExpression;
|
|
7
7
|
exports.localTimeZone = localTimeZone;
|
|
8
8
|
exports.installThreatFeedCron = installThreatFeedCron;
|
|
9
|
+
exports.removeThreatFeedCron = removeThreatFeedCron;
|
|
9
10
|
exports.installOpenClawThreatFeedCron = installOpenClawThreatFeedCron;
|
|
10
11
|
exports.extractOpenClawCronJobs = extractOpenClawCronJobs;
|
|
11
12
|
exports.openClawGatewayRequest = openClawGatewayRequest;
|
|
@@ -85,6 +86,53 @@ async function installThreatFeedCron(options, adapters = {}) {
|
|
|
85
86
|
}
|
|
86
87
|
throw new Error('Invalid cron target. Use auto, openclaw, qclaw, hermes, or system.');
|
|
87
88
|
}
|
|
89
|
+
async function removeThreatFeedCron(options, adapters = {}) {
|
|
90
|
+
const backend = options.backend ?? 'auto';
|
|
91
|
+
if (backend === 'all') {
|
|
92
|
+
return removeThreatFeedCronFromBackends(options, ['system', 'hermes', 'openclaw', 'openclaw-gateway', 'qclaw-gateway'], adapters);
|
|
93
|
+
}
|
|
94
|
+
if (backend === 'system') {
|
|
95
|
+
return [await removeSystemThreatFeedCron(options, adapters.runCommand)];
|
|
96
|
+
}
|
|
97
|
+
if (backend === 'hermes') {
|
|
98
|
+
return [await removeHermesThreatFeedCron(options, adapters.runCommand)];
|
|
99
|
+
}
|
|
100
|
+
if (backend === 'openclaw') {
|
|
101
|
+
return removeThreatFeedCronFromBackends(options, ['openclaw', 'openclaw-gateway'], adapters);
|
|
102
|
+
}
|
|
103
|
+
if (backend === 'qclaw') {
|
|
104
|
+
return [await removeGatewayThreatFeedCron(options, qclawGatewayOptions(adapters.gateway), 'qclaw-gateway')];
|
|
105
|
+
}
|
|
106
|
+
const targets = ['system'];
|
|
107
|
+
if (options.agentHost === 'hermes')
|
|
108
|
+
targets.push('hermes');
|
|
109
|
+
if (options.agentHost === 'openclaw')
|
|
110
|
+
targets.push('openclaw', 'openclaw-gateway');
|
|
111
|
+
if (options.agentHost === 'qclaw')
|
|
112
|
+
targets.push('qclaw-gateway');
|
|
113
|
+
return removeThreatFeedCronFromBackends(options, targets, adapters);
|
|
114
|
+
}
|
|
115
|
+
async function removeThreatFeedCronFromBackends(options, backends, adapters) {
|
|
116
|
+
const results = [];
|
|
117
|
+
for (const backend of backends) {
|
|
118
|
+
if (backend === 'system') {
|
|
119
|
+
results.push(await removeSystemThreatFeedCron(options, adapters.runCommand));
|
|
120
|
+
}
|
|
121
|
+
else if (backend === 'hermes') {
|
|
122
|
+
results.push(await removeHermesThreatFeedCron(options, adapters.runCommand));
|
|
123
|
+
}
|
|
124
|
+
else if (backend === 'openclaw') {
|
|
125
|
+
results.push(await removeOpenClawNativeThreatFeedCron(options, adapters.runCommand));
|
|
126
|
+
}
|
|
127
|
+
else if (backend === 'openclaw-gateway') {
|
|
128
|
+
results.push(await removeGatewayThreatFeedCron(options, adapters.gateway, 'openclaw-gateway'));
|
|
129
|
+
}
|
|
130
|
+
else if (backend === 'qclaw-gateway') {
|
|
131
|
+
results.push(await removeGatewayThreatFeedCron(options, qclawGatewayOptions(adapters.gateway), 'qclaw-gateway'));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return results;
|
|
135
|
+
}
|
|
88
136
|
async function installOpenClawThreatFeedCron(options, gateway = {}) {
|
|
89
137
|
const schedule = validateCronExpression(options.cronExpression);
|
|
90
138
|
const timezone = options.timezone ?? localTimeZone();
|
|
@@ -198,7 +246,8 @@ async function installOpenClawNativeThreatFeedCron(options, runCommand = execCom
|
|
|
198
246
|
catch (err) {
|
|
199
247
|
throw new CronBackendUnavailableError(`Could not list native OpenClaw cron jobs. Is OpenClaw installed and available on PATH? ${err.message}`);
|
|
200
248
|
}
|
|
201
|
-
|
|
249
|
+
const existingJobs = nativeCronListJobsByName(existing.stdout, options.name);
|
|
250
|
+
if (existingJobs.length > 0 && !options.force) {
|
|
202
251
|
return {
|
|
203
252
|
name: options.name,
|
|
204
253
|
schedule,
|
|
@@ -208,6 +257,11 @@ async function installOpenClawNativeThreatFeedCron(options, runCommand = execCom
|
|
|
208
257
|
command,
|
|
209
258
|
};
|
|
210
259
|
}
|
|
260
|
+
if (existingJobs.length > 0) {
|
|
261
|
+
for (const job of existingJobs) {
|
|
262
|
+
await runCommand('openclaw', ['cron', 'remove', job.id ?? job.name ?? options.name]);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
211
265
|
const args = [
|
|
212
266
|
'cron',
|
|
213
267
|
'add',
|
|
@@ -229,8 +283,6 @@ async function installOpenClawNativeThreatFeedCron(options, runCommand = execCom
|
|
|
229
283
|
'--thinking',
|
|
230
284
|
'off',
|
|
231
285
|
];
|
|
232
|
-
if (options.force)
|
|
233
|
-
args.push('--force');
|
|
234
286
|
await runCommand('openclaw', args);
|
|
235
287
|
return {
|
|
236
288
|
name: options.name,
|
|
@@ -248,21 +300,34 @@ class CronBackendUnavailableError extends Error {
|
|
|
248
300
|
}
|
|
249
301
|
}
|
|
250
302
|
function nativeCronListHasExactName(stdout, name) {
|
|
303
|
+
return nativeCronListJobsByName(stdout, name).length > 0;
|
|
304
|
+
}
|
|
305
|
+
function nativeCronListJobsByName(stdout, name) {
|
|
251
306
|
const jsonJobs = extractOpenClawCronJobs(parseJsonOrNull(stdout));
|
|
252
|
-
|
|
253
|
-
|
|
307
|
+
const exactJsonJobs = jsonJobs.filter((job) => job.name === name);
|
|
308
|
+
if (exactJsonJobs.length > 0)
|
|
309
|
+
return exactJsonJobs;
|
|
254
310
|
return stdout
|
|
255
311
|
.split(/\r?\n/)
|
|
256
312
|
.map((line) => line.trim())
|
|
257
313
|
.filter(Boolean)
|
|
258
|
-
.
|
|
314
|
+
.filter((line) => nativeCronListLineHasExactName(line, name))
|
|
315
|
+
.map((line) => ({ id: nativeCronListLineId(line), name }));
|
|
259
316
|
}
|
|
260
317
|
function nativeCronListLineHasExactName(line, name) {
|
|
261
318
|
const quoted = line.match(/(["'])(.*?)\1/);
|
|
262
319
|
if (quoted?.[2] === name)
|
|
263
320
|
return true;
|
|
264
321
|
const cells = line.split(/\s{2,}|\t+/).map((cell) => cell.trim()).filter(Boolean);
|
|
265
|
-
|
|
322
|
+
if (cells.includes(name))
|
|
323
|
+
return true;
|
|
324
|
+
return new RegExp(`(^|\\s)${escapeRegExp(name)}(\\s|$)`).test(line);
|
|
325
|
+
}
|
|
326
|
+
function nativeCronListLineId(line) {
|
|
327
|
+
return line.match(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/i)?.[0];
|
|
328
|
+
}
|
|
329
|
+
function escapeRegExp(value) {
|
|
330
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
266
331
|
}
|
|
267
332
|
function parseJsonOrNull(value) {
|
|
268
333
|
try {
|
|
@@ -360,6 +425,67 @@ async function installSystemThreatFeedCron(options, runCommand = execCommand) {
|
|
|
360
425
|
script,
|
|
361
426
|
};
|
|
362
427
|
}
|
|
428
|
+
async function removeSystemThreatFeedCron(options, runCommand = execCommand) {
|
|
429
|
+
const home = validateCronFilesystemPath(options.agentGuardHome ?? (0, node_path_1.join)((0, node_os_1.homedir)(), '.agentguard'), 'AGENTGUARD_HOME');
|
|
430
|
+
const jobId = sanitizeCronJobId(options.name);
|
|
431
|
+
try {
|
|
432
|
+
const existing = await runCommand('crontab', ['-l']).then((result) => result.stdout, () => '');
|
|
433
|
+
const next = removeAgentGuardCronBlock(existing, jobId).trimEnd();
|
|
434
|
+
if (next === existing.trimEnd()) {
|
|
435
|
+
return { name: options.name, backend: 'system', removed: false };
|
|
436
|
+
}
|
|
437
|
+
await runCommand('crontab', ['-'], next ? `${next}\n` : '');
|
|
438
|
+
await (0, promises_1.rm)((0, node_path_1.join)(home, 'scripts', `${jobId}.sh`), { force: true }).catch(() => undefined);
|
|
439
|
+
return { name: options.name, backend: 'system', removed: true };
|
|
440
|
+
}
|
|
441
|
+
catch (err) {
|
|
442
|
+
return { name: options.name, backend: 'system', removed: false, error: err.message };
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
async function removeHermesThreatFeedCron(options, runCommand = execCommand) {
|
|
446
|
+
try {
|
|
447
|
+
const existing = await runCommand('hermes', ['cron', 'list']);
|
|
448
|
+
if (!existing.stdout.includes(options.name)) {
|
|
449
|
+
return { name: options.name, backend: 'hermes', removed: false };
|
|
450
|
+
}
|
|
451
|
+
await runCommand('hermes', ['cron', 'remove', options.name]);
|
|
452
|
+
const hermesHome = (options.hermesHome ?? process.env.HERMES_HOME?.trim()) || (0, node_path_1.join)((0, node_os_1.homedir)(), '.hermes');
|
|
453
|
+
await (0, promises_1.rm)((0, node_path_1.join)(hermesHome, 'scripts', `${sanitizeHermesScriptName(options.name)}.sh`), { force: true }).catch(() => undefined);
|
|
454
|
+
return { name: options.name, backend: 'hermes', removed: true };
|
|
455
|
+
}
|
|
456
|
+
catch (err) {
|
|
457
|
+
return { name: options.name, backend: 'hermes', removed: false, error: err.message };
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
async function removeOpenClawNativeThreatFeedCron(options, runCommand = execCommand) {
|
|
461
|
+
try {
|
|
462
|
+
const existing = await runCommand('openclaw', ['cron', 'list']);
|
|
463
|
+
const jobs = nativeCronListJobsByName(existing.stdout, options.name);
|
|
464
|
+
if (jobs.length === 0) {
|
|
465
|
+
return { name: options.name, backend: 'openclaw', removed: false };
|
|
466
|
+
}
|
|
467
|
+
for (const job of jobs) {
|
|
468
|
+
await runCommand('openclaw', ['cron', 'remove', job.id ?? job.name ?? options.name]);
|
|
469
|
+
}
|
|
470
|
+
return { name: options.name, backend: 'openclaw', removed: true };
|
|
471
|
+
}
|
|
472
|
+
catch (err) {
|
|
473
|
+
return { name: options.name, backend: 'openclaw', removed: false, error: err.message };
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
async function removeGatewayThreatFeedCron(options, gateway = {}, backend = 'openclaw-gateway') {
|
|
477
|
+
try {
|
|
478
|
+
const jobs = await findOpenClawCronJobsByName(options.name, gateway);
|
|
479
|
+
if (jobs.length === 0) {
|
|
480
|
+
return { name: options.name, backend, removed: false };
|
|
481
|
+
}
|
|
482
|
+
await removeOpenClawCronJobs(jobs, gateway);
|
|
483
|
+
return { name: options.name, backend, removed: jobs.some((job) => Boolean(job.id)) };
|
|
484
|
+
}
|
|
485
|
+
catch (err) {
|
|
486
|
+
return { name: options.name, backend, removed: false, error: err.message };
|
|
487
|
+
}
|
|
488
|
+
}
|
|
363
489
|
function threatFeedCommand(quiet, options = {}) {
|
|
364
490
|
const modeFlag = options.notifyRun ? '--cron-notify-run' : '--json --cron-run';
|
|
365
491
|
return `agentguard subscribe${quiet ? ' --quiet' : ''} ${modeFlag}`;
|
|
@@ -562,6 +688,7 @@ function openClawGatewayRequest(method, params, options = {}) {
|
|
|
562
688
|
const port = options.port ?? 18789;
|
|
563
689
|
const label = options.label ?? 'OpenClaw Gateway';
|
|
564
690
|
const timeoutMs = options.timeoutMs ?? 5000;
|
|
691
|
+
const token = options.token ?? resolveOpenClawGatewayToken();
|
|
565
692
|
if (shouldUseOpenClawGatewayCli(options)) {
|
|
566
693
|
return openClawGatewayCliRequest({
|
|
567
694
|
method,
|
|
@@ -569,9 +696,9 @@ function openClawGatewayRequest(method, params, options = {}) {
|
|
|
569
696
|
label,
|
|
570
697
|
timeoutMs,
|
|
571
698
|
runCommand: options.runCommand ?? execCommand,
|
|
572
|
-
}).catch(() => openClawGatewayNetworkRequest({ host, port, method, params, label, timeoutMs, url: options.url }));
|
|
699
|
+
}).catch(() => openClawGatewayNetworkRequest({ host, port, method, params, label, timeoutMs, url: options.url, token }));
|
|
573
700
|
}
|
|
574
|
-
return openClawGatewayNetworkRequest({ host, port, method, params, label, timeoutMs, url: options.url });
|
|
701
|
+
return openClawGatewayNetworkRequest({ host, port, method, params, label, timeoutMs, url: options.url, token });
|
|
575
702
|
}
|
|
576
703
|
function openClawGatewayNetworkRequest(options) {
|
|
577
704
|
if (options.url) {
|
|
@@ -581,6 +708,7 @@ function openClawGatewayNetworkRequest(options) {
|
|
|
581
708
|
params: options.params,
|
|
582
709
|
label: options.label,
|
|
583
710
|
timeoutMs: options.timeoutMs,
|
|
711
|
+
token: options.token,
|
|
584
712
|
});
|
|
585
713
|
}
|
|
586
714
|
return openClawGatewayHttpRequest({
|
|
@@ -590,6 +718,7 @@ function openClawGatewayNetworkRequest(options) {
|
|
|
590
718
|
params: options.params,
|
|
591
719
|
label: options.label,
|
|
592
720
|
timeoutMs: options.timeoutMs,
|
|
721
|
+
token: options.token,
|
|
593
722
|
}).catch((err) => {
|
|
594
723
|
if (err instanceof GatewayHttpFallbackError) {
|
|
595
724
|
return openClawGatewayWebSocketRequest({
|
|
@@ -598,6 +727,7 @@ function openClawGatewayNetworkRequest(options) {
|
|
|
598
727
|
params: options.params,
|
|
599
728
|
label: options.label,
|
|
600
729
|
timeoutMs: options.timeoutMs,
|
|
730
|
+
token: options.token,
|
|
601
731
|
});
|
|
602
732
|
}
|
|
603
733
|
throw err;
|
|
@@ -637,6 +767,13 @@ function openClawGatewayHttpRequest(options) {
|
|
|
637
767
|
params: legacyGatewayParams(options.method, options.params),
|
|
638
768
|
id: 1,
|
|
639
769
|
});
|
|
770
|
+
const headers = {
|
|
771
|
+
'Content-Type': 'application/json',
|
|
772
|
+
'Content-Length': Buffer.byteLength(payload),
|
|
773
|
+
};
|
|
774
|
+
if (options.token) {
|
|
775
|
+
headers.Authorization = `Bearer ${options.token}`;
|
|
776
|
+
}
|
|
640
777
|
return new Promise((resolve, reject) => {
|
|
641
778
|
let settled = false;
|
|
642
779
|
const fail = (err) => {
|
|
@@ -656,10 +793,7 @@ function openClawGatewayHttpRequest(options) {
|
|
|
656
793
|
port: options.port,
|
|
657
794
|
path: '/',
|
|
658
795
|
method: 'POST',
|
|
659
|
-
headers
|
|
660
|
-
'Content-Type': 'application/json',
|
|
661
|
-
'Content-Length': Buffer.byteLength(payload),
|
|
662
|
-
},
|
|
796
|
+
headers,
|
|
663
797
|
}, (res) => {
|
|
664
798
|
let data = '';
|
|
665
799
|
res.setEncoding('utf8');
|
|
@@ -706,6 +840,41 @@ function legacyGatewayParams(method, params) {
|
|
|
706
840
|
return [params];
|
|
707
841
|
return params;
|
|
708
842
|
}
|
|
843
|
+
function resolveOpenClawGatewayToken() {
|
|
844
|
+
const agentGuardOverride = process.env.AGENTGUARD_OPENCLAW_GATEWAY_TOKEN?.trim();
|
|
845
|
+
if (agentGuardOverride)
|
|
846
|
+
return agentGuardOverride;
|
|
847
|
+
const openClawOverride = process.env.OPENCLAW_GATEWAY_TOKEN?.trim();
|
|
848
|
+
if (openClawOverride)
|
|
849
|
+
return openClawOverride;
|
|
850
|
+
return readOpenClawGatewayConfigToken();
|
|
851
|
+
}
|
|
852
|
+
function readOpenClawGatewayConfigToken() {
|
|
853
|
+
const configPath = resolveOpenClawConfigPath();
|
|
854
|
+
try {
|
|
855
|
+
const raw = (0, node_fs_1.readFileSync)(configPath, 'utf8').trim();
|
|
856
|
+
if (!raw)
|
|
857
|
+
return undefined;
|
|
858
|
+
const config = JSON.parse(raw);
|
|
859
|
+
const gateway = config.gateway;
|
|
860
|
+
if (!gateway || typeof gateway !== 'object' || Array.isArray(gateway))
|
|
861
|
+
return undefined;
|
|
862
|
+
const auth = gateway.auth;
|
|
863
|
+
if (!auth || typeof auth !== 'object' || Array.isArray(auth))
|
|
864
|
+
return undefined;
|
|
865
|
+
const token = auth.token;
|
|
866
|
+
return typeof token === 'string' && token.trim() ? token.trim() : undefined;
|
|
867
|
+
}
|
|
868
|
+
catch {
|
|
869
|
+
return undefined;
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
function resolveOpenClawConfigPath() {
|
|
873
|
+
const override = process.env.OPENCLAW_CONFIG_PATH?.trim();
|
|
874
|
+
if (override)
|
|
875
|
+
return resolveOpenClawUserPath(override);
|
|
876
|
+
return (0, node_path_1.join)(resolveOpenClawStateDir(), 'openclaw.json');
|
|
877
|
+
}
|
|
709
878
|
function openClawGatewayWebSocketRequest(options) {
|
|
710
879
|
const endpoint = parseGatewayWebSocketUrl(options.url, options.label);
|
|
711
880
|
return new Promise((resolve, reject) => {
|
|
@@ -823,7 +992,7 @@ function openClawGatewayWebSocketRequest(options) {
|
|
|
823
992
|
type: 'req',
|
|
824
993
|
id: connectRequestId,
|
|
825
994
|
method: 'connect',
|
|
826
|
-
params: openClawConnectParams(nonce),
|
|
995
|
+
params: openClawConnectParams(nonce, options.token),
|
|
827
996
|
})));
|
|
828
997
|
return;
|
|
829
998
|
}
|
|
@@ -975,7 +1144,7 @@ function encodeWebSocketFrame(text, opcode = 0x1) {
|
|
|
975
1144
|
}
|
|
976
1145
|
return Buffer.concat([header, mask, masked]);
|
|
977
1146
|
}
|
|
978
|
-
function openClawConnectParams(connectNonce) {
|
|
1147
|
+
function openClawConnectParams(connectNonce, token) {
|
|
979
1148
|
return {
|
|
980
1149
|
minProtocol: OPENCLAW_GATEWAY_MIN_PROTOCOL,
|
|
981
1150
|
maxProtocol: OPENCLAW_GATEWAY_MAX_PROTOCOL,
|
|
@@ -995,7 +1164,8 @@ function openClawConnectParams(connectNonce) {
|
|
|
995
1164
|
'operator.pairing',
|
|
996
1165
|
'operator.talk.secrets',
|
|
997
1166
|
],
|
|
998
|
-
...(
|
|
1167
|
+
...(token ? { auth: { token } } : {}),
|
|
1168
|
+
...(buildOpenClawGatewayDeviceAuth(connectNonce, token) ?? {}),
|
|
999
1169
|
};
|
|
1000
1170
|
}
|
|
1001
1171
|
function gatewayFrameErrorMessage(frame) {
|
|
@@ -1010,7 +1180,7 @@ function extractOpenClawConnectNonce(frame) {
|
|
|
1010
1180
|
const nonce = payload.nonce;
|
|
1011
1181
|
return typeof nonce === 'string' && nonce.trim() ? nonce : undefined;
|
|
1012
1182
|
}
|
|
1013
|
-
function buildOpenClawGatewayDeviceAuth(connectNonce) {
|
|
1183
|
+
function buildOpenClawGatewayDeviceAuth(connectNonce, token) {
|
|
1014
1184
|
if (!connectNonce?.trim())
|
|
1015
1185
|
return undefined;
|
|
1016
1186
|
const identity = loadOpenClawDeviceIdentity();
|
|
@@ -1034,6 +1204,7 @@ function buildOpenClawGatewayDeviceAuth(connectNonce) {
|
|
|
1034
1204
|
signedAtMs,
|
|
1035
1205
|
nonce: connectNonce,
|
|
1036
1206
|
platform: process.platform,
|
|
1207
|
+
token,
|
|
1037
1208
|
});
|
|
1038
1209
|
return {
|
|
1039
1210
|
device: {
|
|
@@ -1082,7 +1253,7 @@ function resolveOpenClawDeviceIdentityPath() {
|
|
|
1082
1253
|
function resolveOpenClawStateDir() {
|
|
1083
1254
|
const override = process.env.OPENCLAW_STATE_DIR?.trim();
|
|
1084
1255
|
if (override)
|
|
1085
|
-
return override;
|
|
1256
|
+
return resolveOpenClawUserPath(override);
|
|
1086
1257
|
const current = (0, node_path_1.join)((0, node_os_1.homedir)(), OPENCLAW_STATE_DIRNAME);
|
|
1087
1258
|
if ((0, node_fs_1.existsSync)(current))
|
|
1088
1259
|
return current;
|
|
@@ -1091,6 +1262,14 @@ function resolveOpenClawStateDir() {
|
|
|
1091
1262
|
return legacy;
|
|
1092
1263
|
return current;
|
|
1093
1264
|
}
|
|
1265
|
+
function resolveOpenClawUserPath(path) {
|
|
1266
|
+
if (path === '~')
|
|
1267
|
+
return (0, node_os_1.homedir)();
|
|
1268
|
+
if (path.startsWith('~/') || path.startsWith('~\\')) {
|
|
1269
|
+
return (0, node_path_1.join)((0, node_os_1.homedir)(), path.slice(2));
|
|
1270
|
+
}
|
|
1271
|
+
return (0, node_path_1.isAbsolute)(path) ? path : (0, node_path_1.join)(process.cwd(), path);
|
|
1272
|
+
}
|
|
1094
1273
|
function normalizeOpenClawDeviceIdentity(value) {
|
|
1095
1274
|
if (!value || typeof value !== 'object')
|
|
1096
1275
|
return null;
|