@congzhen/changewayguard 6.8.12
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/LICENSE +21 -0
- package/README.md +270 -0
- package/dashboard-dist/api/104.index.js +1420 -0
- package/dashboard-dist/api/104.index.js.map +1 -0
- package/dashboard-dist/api/113.index.js +496 -0
- package/dashboard-dist/api/113.index.js.map +1 -0
- package/dashboard-dist/api/18.index.js +67 -0
- package/dashboard-dist/api/18.index.js.map +1 -0
- package/dashboard-dist/api/217.index.js +44 -0
- package/dashboard-dist/api/217.index.js.map +1 -0
- package/dashboard-dist/api/222.index.js +90 -0
- package/dashboard-dist/api/222.index.js.map +1 -0
- package/dashboard-dist/api/25.index.js +3562 -0
- package/dashboard-dist/api/25.index.js.map +1 -0
- package/dashboard-dist/api/280.index.js +206 -0
- package/dashboard-dist/api/280.index.js.map +1 -0
- package/dashboard-dist/api/369.index.js +115 -0
- package/dashboard-dist/api/369.index.js.map +1 -0
- package/dashboard-dist/api/377.index.js +1176 -0
- package/dashboard-dist/api/377.index.js.map +1 -0
- package/dashboard-dist/api/411.index.js +4250 -0
- package/dashboard-dist/api/411.index.js.map +1 -0
- package/dashboard-dist/api/424.index.js +135 -0
- package/dashboard-dist/api/424.index.js.map +1 -0
- package/dashboard-dist/api/573.index.js +806 -0
- package/dashboard-dist/api/573.index.js.map +1 -0
- package/dashboard-dist/api/598.index.js +328 -0
- package/dashboard-dist/api/598.index.js.map +1 -0
- package/dashboard-dist/api/62.index.js +4151 -0
- package/dashboard-dist/api/62.index.js.map +1 -0
- package/dashboard-dist/api/67.index.js +23383 -0
- package/dashboard-dist/api/67.index.js.map +1 -0
- package/dashboard-dist/api/678.index.js +2734 -0
- package/dashboard-dist/api/678.index.js.map +1 -0
- package/dashboard-dist/api/698.index.js +1896 -0
- package/dashboard-dist/api/698.index.js.map +1 -0
- package/dashboard-dist/api/720.index.js +98 -0
- package/dashboard-dist/api/720.index.js.map +1 -0
- package/dashboard-dist/api/830.index.js +95 -0
- package/dashboard-dist/api/830.index.js.map +1 -0
- package/dashboard-dist/api/831.index.js +99 -0
- package/dashboard-dist/api/831.index.js.map +1 -0
- package/dashboard-dist/api/84.index.js +64 -0
- package/dashboard-dist/api/84.index.js.map +1 -0
- package/dashboard-dist/api/900.index.js +65 -0
- package/dashboard-dist/api/900.index.js.map +1 -0
- package/dashboard-dist/api/917.index.js +88 -0
- package/dashboard-dist/api/917.index.js.map +1 -0
- package/dashboard-dist/api/948.index.js +64 -0
- package/dashboard-dist/api/948.index.js.map +1 -0
- package/dashboard-dist/api/953.index.js +67 -0
- package/dashboard-dist/api/953.index.js.map +1 -0
- package/dashboard-dist/api/975.index.js +374 -0
- package/dashboard-dist/api/975.index.js.map +1 -0
- package/dashboard-dist/api/drizzle/sqlite/0000_short_captain_stacy.sql +70 -0
- package/dashboard-dist/api/drizzle/sqlite/0001_closed_magus.sql +10 -0
- package/dashboard-dist/api/drizzle/sqlite/0002_agent_capability_observation.sql +38 -0
- package/dashboard-dist/api/drizzle/sqlite/0003_auth_magic_link.sql +28 -0
- package/dashboard-dist/api/drizzle/sqlite/0004_static_scan_fields.sql +8 -0
- package/dashboard-dist/api/drizzle/sqlite/0005_gateway_activity.sql +24 -0
- package/dashboard-dist/api/drizzle/sqlite/0006_sour_marauders.sql +41 -0
- package/dashboard-dist/api/drizzle/sqlite/meta/0000_snapshot.json +460 -0
- package/dashboard-dist/api/drizzle/sqlite/meta/0001_snapshot.json +536 -0
- package/dashboard-dist/api/drizzle/sqlite/meta/0006_snapshot.json +1249 -0
- package/dashboard-dist/api/drizzle/sqlite/meta/_journal.json +55 -0
- package/dashboard-dist/api/index.js +27340 -0
- package/dashboard-dist/api/index.js.map +1 -0
- package/dashboard-dist/api/package.json +16 -0
- package/dashboard-dist/api/sourcemap-register.cjs +1 -0
- package/dashboard-dist/web/assets/index-CqWIeBTD.js +158 -0
- package/dashboard-dist/web/assets/index-Dw7--9q4.css +1 -0
- package/dashboard-dist/web/changeway-logo.png +0 -0
- package/dashboard-dist/web/favicon.svg +29 -0
- package/dashboard-dist/web/index.html +14 -0
- package/dashboard-dist/web/logo.svg +16 -0
- package/dist/agent/auth.d.ts +37 -0
- package/dist/agent/auth.d.ts.map +1 -0
- package/dist/agent/auth.js +151 -0
- package/dist/agent/auth.js.map +1 -0
- package/dist/agent/behavior-detector.d.ts +150 -0
- package/dist/agent/behavior-detector.d.ts.map +1 -0
- package/dist/agent/behavior-detector.js +573 -0
- package/dist/agent/behavior-detector.js.map +1 -0
- package/dist/agent/business-reporter.d.ts +114 -0
- package/dist/agent/business-reporter.d.ts.map +1 -0
- package/dist/agent/business-reporter.js +359 -0
- package/dist/agent/business-reporter.js.map +1 -0
- package/dist/agent/config-sync.d.ts +70 -0
- package/dist/agent/config-sync.d.ts.map +1 -0
- package/dist/agent/config-sync.js +133 -0
- package/dist/agent/config-sync.js.map +1 -0
- package/dist/agent/config.d.ts +97 -0
- package/dist/agent/config.d.ts.map +1 -0
- package/dist/agent/config.js +359 -0
- package/dist/agent/config.js.map +1 -0
- package/dist/agent/content-injection-scanner.d.ts +35 -0
- package/dist/agent/content-injection-scanner.d.ts.map +1 -0
- package/dist/agent/content-injection-scanner.js +270 -0
- package/dist/agent/content-injection-scanner.js.map +1 -0
- package/dist/agent/engine-log-writer.d.ts +6 -0
- package/dist/agent/engine-log-writer.d.ts.map +1 -0
- package/dist/agent/engine-log-writer.js +18 -0
- package/dist/agent/engine-log-writer.js.map +1 -0
- package/dist/agent/env.d.ts +19 -0
- package/dist/agent/env.d.ts.map +1 -0
- package/dist/agent/env.js +43 -0
- package/dist/agent/env.js.map +1 -0
- package/dist/agent/event-reporter.d.ts +87 -0
- package/dist/agent/event-reporter.d.ts.map +1 -0
- package/dist/agent/event-reporter.js +315 -0
- package/dist/agent/event-reporter.js.map +1 -0
- package/dist/agent/file-watcher.d.ts +50 -0
- package/dist/agent/file-watcher.d.ts.map +1 -0
- package/dist/agent/file-watcher.js +135 -0
- package/dist/agent/file-watcher.js.map +1 -0
- package/dist/agent/fs-utils.d.ts +22 -0
- package/dist/agent/fs-utils.d.ts.map +1 -0
- package/dist/agent/fs-utils.js +41 -0
- package/dist/agent/fs-utils.js.map +1 -0
- package/dist/agent/gateway-manager.d.ts +59 -0
- package/dist/agent/gateway-manager.d.ts.map +1 -0
- package/dist/agent/gateway-manager.js +583 -0
- package/dist/agent/gateway-manager.js.map +1 -0
- package/dist/agent/hook-types.d.ts +276 -0
- package/dist/agent/hook-types.d.ts.map +1 -0
- package/dist/agent/hook-types.js +51 -0
- package/dist/agent/hook-types.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +8 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/prompt-gate.d.ts +13 -0
- package/dist/agent/prompt-gate.d.ts.map +1 -0
- package/dist/agent/prompt-gate.js +28 -0
- package/dist/agent/prompt-gate.js.map +1 -0
- package/dist/agent/prompt-input.d.ts +9 -0
- package/dist/agent/prompt-input.d.ts.map +1 -0
- package/dist/agent/prompt-input.js +158 -0
- package/dist/agent/prompt-input.js.map +1 -0
- package/dist/agent/prompt-output.d.ts +4 -0
- package/dist/agent/prompt-output.d.ts.map +1 -0
- package/dist/agent/prompt-output.js +19 -0
- package/dist/agent/prompt-output.js.map +1 -0
- package/dist/agent/runner.d.ts +23 -0
- package/dist/agent/runner.d.ts.map +1 -0
- package/dist/agent/runner.js +154 -0
- package/dist/agent/runner.js.map +1 -0
- package/dist/agent/sanitizer.d.ts +10 -0
- package/dist/agent/sanitizer.d.ts.map +1 -0
- package/dist/agent/sanitizer.js +175 -0
- package/dist/agent/sanitizer.js.map +1 -0
- package/dist/agent/scan-activity.d.ts +18 -0
- package/dist/agent/scan-activity.d.ts.map +1 -0
- package/dist/agent/scan-activity.js +32 -0
- package/dist/agent/scan-activity.js.map +1 -0
- package/dist/agent/types.d.ts +177 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +5 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agent/workspace-scanner.d.ts +35 -0
- package/dist/agent/workspace-scanner.d.ts.map +1 -0
- package/dist/agent/workspace-scanner.js +137 -0
- package/dist/agent/workspace-scanner.js.map +1 -0
- package/dist/dashboard-launcher.d.ts +52 -0
- package/dist/dashboard-launcher.d.ts.map +1 -0
- package/dist/dashboard-launcher.js +363 -0
- package/dist/dashboard-launcher.js.map +1 -0
- package/dist/gateway/activity.d.ts +52 -0
- package/dist/gateway/activity.d.ts.map +1 -0
- package/dist/gateway/activity.js +111 -0
- package/dist/gateway/activity.js.map +1 -0
- package/dist/gateway/config.d.ts +50 -0
- package/dist/gateway/config.d.ts.map +1 -0
- package/dist/gateway/config.js +200 -0
- package/dist/gateway/config.js.map +1 -0
- package/dist/gateway/gateway/activity.d.ts +52 -0
- package/dist/gateway/gateway/activity.d.ts.map +1 -0
- package/dist/gateway/gateway/activity.js +111 -0
- package/dist/gateway/gateway/activity.js.map +1 -0
- package/dist/gateway/gateway/config.d.ts +50 -0
- package/dist/gateway/gateway/config.d.ts.map +1 -0
- package/dist/gateway/gateway/config.js +200 -0
- package/dist/gateway/gateway/config.js.map +1 -0
- package/dist/gateway/gateway/handlers/anthropic.d.ts +12 -0
- package/dist/gateway/gateway/handlers/anthropic.d.ts.map +1 -0
- package/dist/gateway/gateway/handlers/anthropic.js +254 -0
- package/dist/gateway/gateway/handlers/anthropic.js.map +1 -0
- package/dist/gateway/gateway/handlers/gemini.d.ts +12 -0
- package/dist/gateway/gateway/handlers/gemini.d.ts.map +1 -0
- package/dist/gateway/gateway/handlers/gemini.js +101 -0
- package/dist/gateway/gateway/handlers/gemini.js.map +1 -0
- package/dist/gateway/gateway/handlers/models.d.ts +4 -0
- package/dist/gateway/gateway/handlers/models.d.ts.map +1 -0
- package/dist/gateway/gateway/handlers/models.js +36 -0
- package/dist/gateway/gateway/handlers/models.js.map +1 -0
- package/dist/gateway/gateway/handlers/openai.d.ts +16 -0
- package/dist/gateway/gateway/handlers/openai.d.ts.map +1 -0
- package/dist/gateway/gateway/handlers/openai.js +254 -0
- package/dist/gateway/gateway/handlers/openai.js.map +1 -0
- package/dist/gateway/gateway/index.d.ts +27 -0
- package/dist/gateway/gateway/index.d.ts.map +1 -0
- package/dist/gateway/gateway/index.js +293 -0
- package/dist/gateway/gateway/index.js.map +1 -0
- package/dist/gateway/gateway/mapping-store.d.ts +38 -0
- package/dist/gateway/gateway/mapping-store.d.ts.map +1 -0
- package/dist/gateway/gateway/mapping-store.js +74 -0
- package/dist/gateway/gateway/mapping-store.js.map +1 -0
- package/dist/gateway/gateway/restorer.d.ts +63 -0
- package/dist/gateway/gateway/restorer.d.ts.map +1 -0
- package/dist/gateway/gateway/restorer.js +284 -0
- package/dist/gateway/gateway/restorer.js.map +1 -0
- package/dist/gateway/gateway/sanitizer.d.ts +17 -0
- package/dist/gateway/gateway/sanitizer.d.ts.map +1 -0
- package/dist/gateway/gateway/sanitizer.js +228 -0
- package/dist/gateway/gateway/sanitizer.js.map +1 -0
- package/dist/gateway/gateway/types.d.ts +53 -0
- package/dist/gateway/gateway/types.d.ts.map +1 -0
- package/dist/gateway/gateway/types.js +5 -0
- package/dist/gateway/gateway/types.js.map +1 -0
- package/dist/gateway/handlers/anthropic.d.ts +12 -0
- package/dist/gateway/handlers/anthropic.d.ts.map +1 -0
- package/dist/gateway/handlers/anthropic.js +254 -0
- package/dist/gateway/handlers/anthropic.js.map +1 -0
- package/dist/gateway/handlers/gemini.d.ts +12 -0
- package/dist/gateway/handlers/gemini.d.ts.map +1 -0
- package/dist/gateway/handlers/gemini.js +101 -0
- package/dist/gateway/handlers/gemini.js.map +1 -0
- package/dist/gateway/handlers/models.d.ts +4 -0
- package/dist/gateway/handlers/models.d.ts.map +1 -0
- package/dist/gateway/handlers/models.js +36 -0
- package/dist/gateway/handlers/models.js.map +1 -0
- package/dist/gateway/handlers/openai.d.ts +16 -0
- package/dist/gateway/handlers/openai.d.ts.map +1 -0
- package/dist/gateway/handlers/openai.js +254 -0
- package/dist/gateway/handlers/openai.js.map +1 -0
- package/dist/gateway/index.d.ts +27 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +293 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/mapping-store.d.ts +38 -0
- package/dist/gateway/mapping-store.d.ts.map +1 -0
- package/dist/gateway/mapping-store.js +74 -0
- package/dist/gateway/mapping-store.js.map +1 -0
- package/dist/gateway/restorer.d.ts +63 -0
- package/dist/gateway/restorer.d.ts.map +1 -0
- package/dist/gateway/restorer.js +284 -0
- package/dist/gateway/restorer.js.map +1 -0
- package/dist/gateway/sanitizer.d.ts +17 -0
- package/dist/gateway/sanitizer.d.ts.map +1 -0
- package/dist/gateway/sanitizer.js +228 -0
- package/dist/gateway/sanitizer.js.map +1 -0
- package/dist/gateway/types.d.ts +53 -0
- package/dist/gateway/types.d.ts.map +1 -0
- package/dist/gateway/types.js +5 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2084 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +5 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +5 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/store.d.ts +82 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +194 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/platform-client/index.d.ts +63 -0
- package/dist/platform-client/index.d.ts.map +1 -0
- package/dist/platform-client/index.js +294 -0
- package/dist/platform-client/index.js.map +1 -0
- package/dist/platform-client/types.d.ts +109 -0
- package/dist/platform-client/types.d.ts.map +1 -0
- package/dist/platform-client/types.js +3 -0
- package/dist/platform-client/types.js.map +1 -0
- package/gateway/activity.d.ts +52 -0
- package/gateway/activity.d.ts.map +1 -0
- package/gateway/activity.js +111 -0
- package/gateway/activity.js.map +1 -0
- package/gateway/config.d.ts +50 -0
- package/gateway/config.d.ts.map +1 -0
- package/gateway/config.js +200 -0
- package/gateway/config.js.map +1 -0
- package/gateway/handlers/anthropic.d.ts +12 -0
- package/gateway/handlers/anthropic.d.ts.map +1 -0
- package/gateway/handlers/anthropic.js +254 -0
- package/gateway/handlers/anthropic.js.map +1 -0
- package/gateway/handlers/gemini.d.ts +12 -0
- package/gateway/handlers/gemini.d.ts.map +1 -0
- package/gateway/handlers/gemini.js +101 -0
- package/gateway/handlers/gemini.js.map +1 -0
- package/gateway/handlers/models.d.ts +4 -0
- package/gateway/handlers/models.d.ts.map +1 -0
- package/gateway/handlers/models.js +36 -0
- package/gateway/handlers/models.js.map +1 -0
- package/gateway/handlers/openai.d.ts +16 -0
- package/gateway/handlers/openai.d.ts.map +1 -0
- package/gateway/handlers/openai.js +254 -0
- package/gateway/handlers/openai.js.map +1 -0
- package/gateway/index.d.ts +27 -0
- package/gateway/index.d.ts.map +1 -0
- package/gateway/index.js +293 -0
- package/gateway/index.js.map +1 -0
- package/gateway/mapping-store.d.ts +38 -0
- package/gateway/mapping-store.d.ts.map +1 -0
- package/gateway/mapping-store.js +74 -0
- package/gateway/mapping-store.js.map +1 -0
- package/gateway/restorer.d.ts +63 -0
- package/gateway/restorer.d.ts.map +1 -0
- package/gateway/restorer.js +284 -0
- package/gateway/restorer.js.map +1 -0
- package/gateway/sanitizer.d.ts +17 -0
- package/gateway/sanitizer.d.ts.map +1 -0
- package/gateway/sanitizer.js +228 -0
- package/gateway/sanitizer.js.map +1 -0
- package/gateway/types.d.ts +53 -0
- package/gateway/types.d.ts.map +1 -0
- package/gateway/types.js +5 -0
- package/gateway/types.js.map +1 -0
- package/openclaw.plugin.json +86 -0
- package/package.json +74 -0
- package/samples/Untitled +1 -0
- package/samples/clean-email.txt +20 -0
- package/samples/test-document.md +53 -0
- package/samples/test-email-popup.txt +44 -0
- package/samples/test-email.txt +32 -0
- package/samples/test-webpage.html +51 -0
- package/scripts/enterprise-enroll.sh +89 -0
- package/scripts/enterprise-unenroll.sh +75 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConfigSync - Periodically pulls team-level configuration from Core.
|
|
3
|
+
*
|
|
4
|
+
* Only active when the agent's account is on the "business" plan.
|
|
5
|
+
* Pulls policies and gateway config every 5 minutes from
|
|
6
|
+
* GET /api/v1/business/config and applies them locally.
|
|
7
|
+
*/
|
|
8
|
+
import { buildSignedAuthHeadersForUrl, withChangewayOpenPrefix } from "./auth.js";
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// Constants
|
|
11
|
+
// =============================================================================
|
|
12
|
+
/** Poll interval in ms (5 minutes) */
|
|
13
|
+
const POLL_INTERVAL_MS = 5 * 60_000;
|
|
14
|
+
/** Timeout for Core API calls */
|
|
15
|
+
const API_TIMEOUT_MS = 5_000;
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// ConfigSync Class
|
|
18
|
+
// =============================================================================
|
|
19
|
+
export class ConfigSync {
|
|
20
|
+
enabled = false;
|
|
21
|
+
options;
|
|
22
|
+
log;
|
|
23
|
+
credentials = null;
|
|
24
|
+
pollInterval = null;
|
|
25
|
+
/** Last fetched config (for change detection) */
|
|
26
|
+
lastConfigHash = "";
|
|
27
|
+
/** Last successfully fetched config */
|
|
28
|
+
currentConfig = null;
|
|
29
|
+
constructor(options, log) {
|
|
30
|
+
this.options = options;
|
|
31
|
+
this.log = log;
|
|
32
|
+
}
|
|
33
|
+
// ─── Lifecycle ───────────────────────────────────────────────────
|
|
34
|
+
/**
|
|
35
|
+
* Initialize config sync. Only enables if plan is "business".
|
|
36
|
+
*/
|
|
37
|
+
async initialize(plan) {
|
|
38
|
+
if (plan !== "business") {
|
|
39
|
+
this.log.debug?.(`ConfigSync: plan is "${plan}", not enabling`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.enabled = true;
|
|
43
|
+
// Pull immediately on startup
|
|
44
|
+
await this.pull();
|
|
45
|
+
// Start periodic polling
|
|
46
|
+
this.startPolling();
|
|
47
|
+
this.log.info("ConfigSync: enabled, polling every 5 minutes");
|
|
48
|
+
}
|
|
49
|
+
/** Set Core credentials */
|
|
50
|
+
setCredentials(credentials) {
|
|
51
|
+
this.credentials = credentials;
|
|
52
|
+
}
|
|
53
|
+
/** Get current config (may be null if not yet fetched) */
|
|
54
|
+
getConfig() {
|
|
55
|
+
return this.currentConfig;
|
|
56
|
+
}
|
|
57
|
+
/** Whether sync is active */
|
|
58
|
+
isEnabled() {
|
|
59
|
+
return this.enabled;
|
|
60
|
+
}
|
|
61
|
+
/** Stop polling */
|
|
62
|
+
stop() {
|
|
63
|
+
if (this.pollInterval) {
|
|
64
|
+
clearInterval(this.pollInterval);
|
|
65
|
+
this.pollInterval = null;
|
|
66
|
+
}
|
|
67
|
+
this.enabled = false;
|
|
68
|
+
}
|
|
69
|
+
// ─── Polling ───────────────────────────────────────────────────
|
|
70
|
+
startPolling() {
|
|
71
|
+
if (this.pollInterval)
|
|
72
|
+
return;
|
|
73
|
+
this.pollInterval = setInterval(() => {
|
|
74
|
+
this.pull().catch((err) => {
|
|
75
|
+
this.log.debug?.(`ConfigSync: poll error: ${err}`);
|
|
76
|
+
});
|
|
77
|
+
}, POLL_INTERVAL_MS);
|
|
78
|
+
this.pollInterval.unref();
|
|
79
|
+
}
|
|
80
|
+
/** Pull config from Core */
|
|
81
|
+
async pull() {
|
|
82
|
+
if (!this.enabled || !this.credentials)
|
|
83
|
+
return null;
|
|
84
|
+
const controller = new AbortController();
|
|
85
|
+
const timer = setTimeout(() => controller.abort(), API_TIMEOUT_MS);
|
|
86
|
+
try {
|
|
87
|
+
const url = withChangewayOpenPrefix(`${this.options.coreUrl}/api/v1/business/config`);
|
|
88
|
+
const response = await fetch(url, {
|
|
89
|
+
headers: buildSignedAuthHeadersForUrl({
|
|
90
|
+
method: "GET",
|
|
91
|
+
url,
|
|
92
|
+
}),
|
|
93
|
+
signal: controller.signal,
|
|
94
|
+
});
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
this.log.debug?.(`ConfigSync: pull failed with ${response.status}`);
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const json = (await response.json());
|
|
100
|
+
if (!json.success || !json.data) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
const config = json.data;
|
|
104
|
+
// Check if config changed (simple JSON hash)
|
|
105
|
+
const hash = JSON.stringify(config);
|
|
106
|
+
if (hash !== this.lastConfigHash) {
|
|
107
|
+
this.lastConfigHash = hash;
|
|
108
|
+
this.currentConfig = config;
|
|
109
|
+
// Notify callback
|
|
110
|
+
if (this.options.onUpdate) {
|
|
111
|
+
try {
|
|
112
|
+
this.options.onUpdate(config);
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
this.log.error(`ConfigSync: onUpdate callback error: ${err}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
this.log.debug?.(`ConfigSync: config updated (${config.policies.length} policies)`);
|
|
119
|
+
}
|
|
120
|
+
return config;
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
if (err.name !== "AbortError") {
|
|
124
|
+
this.log.debug?.(`ConfigSync: pull error: ${err}`);
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
clearTimeout(timer);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=config-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-sync.js","sourceRoot":"","sources":["../../agent/config-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenGuardrails plugin configuration and credential management
|
|
3
|
+
*/
|
|
4
|
+
import type { OpenClawGuardConfig } from "./types.js";
|
|
5
|
+
export declare const DEFAULT_CORE_URL: string;
|
|
6
|
+
export type CoreCredentials = {
|
|
7
|
+
apiKey: string;
|
|
8
|
+
agentId: string;
|
|
9
|
+
claimUrl: string;
|
|
10
|
+
verificationCode: string;
|
|
11
|
+
email?: string;
|
|
12
|
+
/** The Core URL these credentials were issued by */
|
|
13
|
+
coreUrl?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Load credentials from disk.
|
|
17
|
+
* If the credentials were issued by a different Core URL, returns null
|
|
18
|
+
* (credentials from production won't work in dev and vice versa).
|
|
19
|
+
*
|
|
20
|
+
* @param configuredCoreUrl - The Core URL from plugin config (openclaw.json).
|
|
21
|
+
* When provided, credentials are validated against this URL instead of DEFAULT_CORE_URL.
|
|
22
|
+
*/
|
|
23
|
+
export declare function loadCoreCredentials(configuredCoreUrl?: string): CoreCredentials | null;
|
|
24
|
+
export declare function saveCoreCredentials(creds: CoreCredentials, coreUrl?: string): void;
|
|
25
|
+
export declare function deleteCoreCredentials(): boolean;
|
|
26
|
+
/** @deprecated Use loadCoreCredentials().apiKey instead */
|
|
27
|
+
export declare function loadApiKey(): string | null;
|
|
28
|
+
export type RegisterResult = {
|
|
29
|
+
credentials: CoreCredentials;
|
|
30
|
+
activateUrl: string;
|
|
31
|
+
loginUrl: string;
|
|
32
|
+
};
|
|
33
|
+
export declare function registerWithCore(name: string, description: string, coreUrl?: string): Promise<RegisterResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Polls Core `/api/v1/account` to learn the agent's verified email.
|
|
36
|
+
* Returns `{ email, status }` if the agent is active, null otherwise.
|
|
37
|
+
*/
|
|
38
|
+
export declare function pollAccountEmail(_apiKey: string, coreUrl?: string): Promise<{
|
|
39
|
+
email: string;
|
|
40
|
+
status: string;
|
|
41
|
+
} | null>;
|
|
42
|
+
export type ResolvedGuardConfig = Required<Omit<OpenClawGuardConfig, "plan">> & Pick<OpenClawGuardConfig, "plan">;
|
|
43
|
+
export declare const DEFAULT_CONFIG: ResolvedGuardConfig;
|
|
44
|
+
export type AgentProfile = {
|
|
45
|
+
emoji: string;
|
|
46
|
+
creature: string;
|
|
47
|
+
vibe: string;
|
|
48
|
+
model: string;
|
|
49
|
+
provider: string;
|
|
50
|
+
ownerName: string;
|
|
51
|
+
skills: {
|
|
52
|
+
name: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
}[];
|
|
55
|
+
plugins: {
|
|
56
|
+
name: string;
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
}[];
|
|
59
|
+
hooks: {
|
|
60
|
+
name: string;
|
|
61
|
+
enabled: boolean;
|
|
62
|
+
}[];
|
|
63
|
+
connectedSystems: string[];
|
|
64
|
+
channels: string[];
|
|
65
|
+
sessionCount: number;
|
|
66
|
+
lastActive: string | null;
|
|
67
|
+
workspaceFiles: {
|
|
68
|
+
soul: string;
|
|
69
|
+
identity: string;
|
|
70
|
+
user: string;
|
|
71
|
+
agents: string;
|
|
72
|
+
tools: string;
|
|
73
|
+
heartbeat: string;
|
|
74
|
+
};
|
|
75
|
+
bootstrapExists: boolean;
|
|
76
|
+
cronJobs: Array<{
|
|
77
|
+
id?: string;
|
|
78
|
+
schedule?: string;
|
|
79
|
+
task?: string;
|
|
80
|
+
enabled?: boolean;
|
|
81
|
+
}>;
|
|
82
|
+
};
|
|
83
|
+
/** @deprecated use readAgentProfile() */
|
|
84
|
+
export type AgentInfo = AgentProfile;
|
|
85
|
+
/**
|
|
86
|
+
* Reads the full OpenClaw workspace profile from ~/.openclaw/ to report to the dashboard.
|
|
87
|
+
* All fields degrade gracefully — missing files produce empty strings/arrays.
|
|
88
|
+
*/
|
|
89
|
+
export declare function readAgentProfile(): AgentProfile;
|
|
90
|
+
/** @deprecated use readAgentProfile() */
|
|
91
|
+
export declare function readAgentInfo(): AgentProfile;
|
|
92
|
+
/**
|
|
93
|
+
* Returns file paths that should be watched for changes to trigger a profile re-upload.
|
|
94
|
+
*/
|
|
95
|
+
export declare function getProfileWatchPaths(openclawDir?: string): string[];
|
|
96
|
+
export declare function resolveConfig(config?: Partial<OpenClawGuardConfig>): ResolvedGuardConfig;
|
|
97
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../agent/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenGuardrails plugin configuration and credential management
|
|
3
|
+
*/
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { existsSync, mkdirSync, writeFileSync, unlinkSync, readdirSync } from "node:fs";
|
|
7
|
+
import { defaultCoreUrl, envApiKey } from "./env.js";
|
|
8
|
+
import { buildSignedAuthHeadersForUrl, withChangewayOpenPrefix } from "./auth.js";
|
|
9
|
+
import { loadTextSync, loadTextSafe, loadJsonSafe } from "./fs-utils.js";
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Constants
|
|
12
|
+
// =============================================================================
|
|
13
|
+
export const DEFAULT_CORE_URL = defaultCoreUrl;
|
|
14
|
+
const LEGACY_OFFICIAL_CORE_URL = "https://www.openguardrails.com/core";
|
|
15
|
+
const CREDENTIALS_DIR = path.join(os.homedir(), ".openclaw/credentials/changewayguard");
|
|
16
|
+
const CREDENTIALS_FILE = path.join(CREDENTIALS_DIR, "credentials.json");
|
|
17
|
+
/**
|
|
18
|
+
* Load credentials from disk.
|
|
19
|
+
* If the credentials were issued by a different Core URL, returns null
|
|
20
|
+
* (credentials from production won't work in dev and vice versa).
|
|
21
|
+
*
|
|
22
|
+
* @param configuredCoreUrl - The Core URL from plugin config (openclaw.json).
|
|
23
|
+
* When provided, credentials are validated against this URL instead of DEFAULT_CORE_URL.
|
|
24
|
+
*/
|
|
25
|
+
export function loadCoreCredentials(configuredCoreUrl) {
|
|
26
|
+
try {
|
|
27
|
+
if (!existsSync(CREDENTIALS_FILE))
|
|
28
|
+
return null;
|
|
29
|
+
const data = JSON.parse(loadTextSync(CREDENTIALS_FILE));
|
|
30
|
+
if (typeof data.apiKey === "string" && typeof data.agentId === "string") {
|
|
31
|
+
const creds = data;
|
|
32
|
+
const expectedUrl = configuredCoreUrl ?? DEFAULT_CORE_URL;
|
|
33
|
+
// Check if credentials match current environment
|
|
34
|
+
if (creds.coreUrl && creds.coreUrl !== expectedUrl) {
|
|
35
|
+
// Credentials from a different Core instance - don't use them
|
|
36
|
+
// Credentials from a different Core instance - skip
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return creds;
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function saveCoreCredentials(creds, coreUrl) {
|
|
48
|
+
if (!existsSync(CREDENTIALS_DIR)) {
|
|
49
|
+
mkdirSync(CREDENTIALS_DIR, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
// Save the Core URL with credentials so we know which instance issued them
|
|
52
|
+
const toSave = { ...creds, coreUrl: coreUrl ?? DEFAULT_CORE_URL };
|
|
53
|
+
writeFileSync(CREDENTIALS_FILE, JSON.stringify(toSave, null, 2), "utf-8");
|
|
54
|
+
}
|
|
55
|
+
export function deleteCoreCredentials() {
|
|
56
|
+
try {
|
|
57
|
+
if (existsSync(CREDENTIALS_FILE)) {
|
|
58
|
+
unlinkSync(CREDENTIALS_FILE);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** @deprecated Use loadCoreCredentials().apiKey instead */
|
|
68
|
+
export function loadApiKey() {
|
|
69
|
+
return loadCoreCredentials()?.apiKey ?? null;
|
|
70
|
+
}
|
|
71
|
+
export async function registerWithCore(name, description, coreUrl = DEFAULT_CORE_URL) {
|
|
72
|
+
const url = coreUrl.replace(/\/+$/, "");
|
|
73
|
+
const registerUrl = withChangewayOpenPrefix(`${url}/api/v1/agents/register`);
|
|
74
|
+
const registerBody = { name, description };
|
|
75
|
+
const response = await fetch(registerUrl, {
|
|
76
|
+
method: "POST",
|
|
77
|
+
headers: {
|
|
78
|
+
"Content-Type": "application/json",
|
|
79
|
+
...buildSignedAuthHeadersForUrl({
|
|
80
|
+
method: "POST",
|
|
81
|
+
url: registerUrl,
|
|
82
|
+
body: registerBody,
|
|
83
|
+
authorization: null,
|
|
84
|
+
}),
|
|
85
|
+
},
|
|
86
|
+
body: JSON.stringify(registerBody),
|
|
87
|
+
});
|
|
88
|
+
if (!response.ok) {
|
|
89
|
+
const text = await response.text().catch(() => "");
|
|
90
|
+
throw new Error(`Registration failed: ${response.status} ${response.statusText}${text ? ` — ${text}` : ""}`);
|
|
91
|
+
}
|
|
92
|
+
const json = (await response.json());
|
|
93
|
+
if (!json.success || !json.agent) {
|
|
94
|
+
throw new Error(`Registration error: ${json.error ?? "unknown"}`);
|
|
95
|
+
}
|
|
96
|
+
const creds = {
|
|
97
|
+
apiKey: json.agent.api_key,
|
|
98
|
+
agentId: json.agent.id,
|
|
99
|
+
claimUrl: json.activate_url ?? "",
|
|
100
|
+
verificationCode: "", // No longer used
|
|
101
|
+
coreUrl: url,
|
|
102
|
+
};
|
|
103
|
+
saveCoreCredentials(creds, url);
|
|
104
|
+
return {
|
|
105
|
+
credentials: creds,
|
|
106
|
+
activateUrl: json.activate_url ?? "",
|
|
107
|
+
loginUrl: json.login_url ?? `${url}/login`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// =============================================================================
|
|
111
|
+
// Account Email Polling
|
|
112
|
+
// =============================================================================
|
|
113
|
+
/**
|
|
114
|
+
* Polls Core `/api/v1/account` to learn the agent's verified email.
|
|
115
|
+
* Returns `{ email, status }` if the agent is active, null otherwise.
|
|
116
|
+
*/
|
|
117
|
+
export async function pollAccountEmail(_apiKey, coreUrl = DEFAULT_CORE_URL) {
|
|
118
|
+
try {
|
|
119
|
+
const url = coreUrl.replace(/\/+$/, "");
|
|
120
|
+
const accountUrl = withChangewayOpenPrefix(`${url}/api/v1/account`);
|
|
121
|
+
const res = await fetch(accountUrl, {
|
|
122
|
+
headers: buildSignedAuthHeadersForUrl({
|
|
123
|
+
method: "GET",
|
|
124
|
+
url: accountUrl,
|
|
125
|
+
}),
|
|
126
|
+
});
|
|
127
|
+
if (!res.ok)
|
|
128
|
+
return null;
|
|
129
|
+
const data = (await res.json());
|
|
130
|
+
if (data.success && data.email && data.status === "active") {
|
|
131
|
+
return { email: data.email, status: data.status };
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export const DEFAULT_CONFIG = {
|
|
140
|
+
enabled: true,
|
|
141
|
+
blockOnRisk: true,
|
|
142
|
+
apiKey: envApiKey,
|
|
143
|
+
timeoutMs: 60000,
|
|
144
|
+
coreUrl: DEFAULT_CORE_URL,
|
|
145
|
+
agentName: "OpenClaw Agent",
|
|
146
|
+
};
|
|
147
|
+
// =============================================================================
|
|
148
|
+
// Configuration Helpers
|
|
149
|
+
// =============================================================================
|
|
150
|
+
function normalizeIdentityValue(value) {
|
|
151
|
+
return value
|
|
152
|
+
.replace(/\s+/g, " ")
|
|
153
|
+
.trim()
|
|
154
|
+
.replace(/^[`*_~\s]+/, "")
|
|
155
|
+
.replace(/[`*_~\s]+$/, "")
|
|
156
|
+
.replace(/^\((.*)\)$/, "$1")
|
|
157
|
+
.trim();
|
|
158
|
+
}
|
|
159
|
+
function isIdentityTemplatePlaceholder(value) {
|
|
160
|
+
const lower = value.toLowerCase();
|
|
161
|
+
return /(pick something|your signature|fill this in|make it yours|workspace-relative|something weirder|ghost in the machine|how do you come across)/i.test(lower);
|
|
162
|
+
}
|
|
163
|
+
function parseIdentityField(content, field) {
|
|
164
|
+
const prefix = `- **${field}:**`;
|
|
165
|
+
const lines = content.split("\n");
|
|
166
|
+
for (let i = 0; i < lines.length; i++) {
|
|
167
|
+
const trimmed = lines[i].trim();
|
|
168
|
+
if (trimmed.startsWith(prefix)) {
|
|
169
|
+
const inline = normalizeIdentityValue(trimmed.slice(prefix.length).trim());
|
|
170
|
+
if (inline && !isIdentityTemplatePlaceholder(inline))
|
|
171
|
+
return inline;
|
|
172
|
+
// value on next line
|
|
173
|
+
const next = normalizeIdentityValue(lines[i + 1]?.trim() ?? "");
|
|
174
|
+
if (next && !next.startsWith("-") && !next.startsWith("#") && !isIdentityTemplatePlaceholder(next)) {
|
|
175
|
+
return next;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return "";
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Reads the agent's name from ~/.openclaw/workspace/IDENTITY.md.
|
|
183
|
+
*/
|
|
184
|
+
function readIdentityName() {
|
|
185
|
+
try {
|
|
186
|
+
const identityPath = path.join(os.homedir(), ".openclaw/workspace/IDENTITY.md");
|
|
187
|
+
const content = loadTextSync(identityPath);
|
|
188
|
+
const name = parseIdentityField(content, "Name");
|
|
189
|
+
return name || null;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Reads the full OpenClaw workspace profile from ~/.openclaw/ to report to the dashboard.
|
|
197
|
+
* All fields degrade gracefully — missing files produce empty strings/arrays.
|
|
198
|
+
*/
|
|
199
|
+
export function readAgentProfile() {
|
|
200
|
+
const openclawDir = path.join(os.homedir(), ".openclaw");
|
|
201
|
+
const result = {
|
|
202
|
+
emoji: "", creature: "", vibe: "", model: "", provider: "", ownerName: "",
|
|
203
|
+
skills: [], plugins: [], hooks: [], connectedSystems: [], channels: [],
|
|
204
|
+
sessionCount: 0, lastActive: null,
|
|
205
|
+
workspaceFiles: { soul: "", identity: "", user: "", agents: "", tools: "", heartbeat: "" },
|
|
206
|
+
bootstrapExists: false,
|
|
207
|
+
cronJobs: [],
|
|
208
|
+
};
|
|
209
|
+
// ── openclaw.json ──────────────────────────────────────────
|
|
210
|
+
const config = loadJsonSafe(path.join(openclawDir, "openclaw.json"));
|
|
211
|
+
let workspacePath = path.join(openclawDir, "workspace");
|
|
212
|
+
if (config) {
|
|
213
|
+
const agentsConfig = config.agents;
|
|
214
|
+
const defaultModel = agentsConfig?.defaults?.model?.primary ?? "";
|
|
215
|
+
if (defaultModel.includes("/")) {
|
|
216
|
+
const [provider, model] = defaultModel.split("/", 2);
|
|
217
|
+
result.provider = provider ?? "";
|
|
218
|
+
result.model = model ?? "";
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
result.model = defaultModel;
|
|
222
|
+
}
|
|
223
|
+
if (agentsConfig?.defaults?.workspace) {
|
|
224
|
+
workspacePath = agentsConfig.defaults.workspace;
|
|
225
|
+
}
|
|
226
|
+
const pluginsConfig = config.plugins;
|
|
227
|
+
if (pluginsConfig?.entries) {
|
|
228
|
+
for (const [name, entry] of Object.entries(pluginsConfig.entries)) {
|
|
229
|
+
result.plugins.push({ name, enabled: entry?.enabled !== false });
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const hooksConfig = config.hooks;
|
|
233
|
+
if (hooksConfig?.internal?.entries) {
|
|
234
|
+
for (const [name, entry] of Object.entries(hooksConfig.internal.entries)) {
|
|
235
|
+
result.hooks.push({ name, enabled: entry?.enabled !== false });
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// ── Workspace files ─────────────────────────────────────────
|
|
240
|
+
const identityContent = loadTextSafe(path.join(workspacePath, "IDENTITY.md"));
|
|
241
|
+
result.workspaceFiles.identity = identityContent;
|
|
242
|
+
result.workspaceFiles.soul = loadTextSafe(path.join(workspacePath, "SOUL.md"));
|
|
243
|
+
result.workspaceFiles.user = loadTextSafe(path.join(workspacePath, "USER.md"));
|
|
244
|
+
result.workspaceFiles.agents = loadTextSafe(path.join(workspacePath, "AGENTS.md"));
|
|
245
|
+
result.workspaceFiles.tools = loadTextSafe(path.join(workspacePath, "TOOLS.md"));
|
|
246
|
+
result.workspaceFiles.heartbeat = loadTextSafe(path.join(workspacePath, "HEARTBEAT.md"));
|
|
247
|
+
result.bootstrapExists = existsSync(path.join(workspacePath, "BOOTSTRAP.md"));
|
|
248
|
+
// ── Identity fields ─────────────────────────────────────────
|
|
249
|
+
if (identityContent) {
|
|
250
|
+
result.emoji = parseIdentityField(identityContent, "Emoji");
|
|
251
|
+
result.creature = parseIdentityField(identityContent, "Creature");
|
|
252
|
+
result.vibe = parseIdentityField(identityContent, "Vibe");
|
|
253
|
+
}
|
|
254
|
+
if (result.workspaceFiles.user) {
|
|
255
|
+
result.ownerName = parseIdentityField(result.workspaceFiles.user, "Name")
|
|
256
|
+
|| parseIdentityField(result.workspaceFiles.user, "name");
|
|
257
|
+
}
|
|
258
|
+
// ── Skills ──────────────────────────────────────────────────
|
|
259
|
+
try {
|
|
260
|
+
const skillsDir = path.join(workspacePath, "skills");
|
|
261
|
+
if (existsSync(skillsDir)) {
|
|
262
|
+
result.skills = readdirSync(skillsDir, { withFileTypes: true })
|
|
263
|
+
.filter((d) => d.isDirectory())
|
|
264
|
+
.map((d) => {
|
|
265
|
+
const meta = loadJsonSafe(path.join(skillsDir, d.name, "_meta.json"));
|
|
266
|
+
return { name: d.name, description: meta?.description };
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
catch { /* ignore */ }
|
|
271
|
+
// ── Connected systems (credential names) ────────────────────
|
|
272
|
+
try {
|
|
273
|
+
const credsDir = path.join(openclawDir, "credentials");
|
|
274
|
+
if (existsSync(credsDir)) {
|
|
275
|
+
result.connectedSystems = readdirSync(credsDir)
|
|
276
|
+
.filter((f) => f.endsWith(".json"))
|
|
277
|
+
.map((f) => f.slice(0, -5));
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
catch { /* ignore */ }
|
|
281
|
+
// ── Sessions (count, lastActive, channels) ──────────────────
|
|
282
|
+
try {
|
|
283
|
+
const agentsDir = path.join(openclawDir, "agents");
|
|
284
|
+
if (existsSync(agentsDir)) {
|
|
285
|
+
for (const dir of readdirSync(agentsDir, { withFileTypes: true })) {
|
|
286
|
+
if (!dir.isDirectory())
|
|
287
|
+
continue;
|
|
288
|
+
const sessionsData = loadJsonSafe(path.join(agentsDir, dir.name, "sessions", "sessions.json"));
|
|
289
|
+
if (!sessionsData)
|
|
290
|
+
continue;
|
|
291
|
+
for (const session of Object.values(sessionsData)) {
|
|
292
|
+
result.sessionCount++;
|
|
293
|
+
if (typeof session.updatedAt === "number") {
|
|
294
|
+
const iso = new Date(session.updatedAt).toISOString();
|
|
295
|
+
if (!result.lastActive || iso > result.lastActive)
|
|
296
|
+
result.lastActive = iso;
|
|
297
|
+
}
|
|
298
|
+
if (typeof session.lastChannel === "string" && !result.channels.includes(session.lastChannel)) {
|
|
299
|
+
result.channels.push(session.lastChannel);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch { /* ignore */ }
|
|
306
|
+
// ── Cron jobs ────────────────────────────────────────────────
|
|
307
|
+
try {
|
|
308
|
+
const raw = loadTextSafe(path.join(openclawDir, "cron", "jobs.json"));
|
|
309
|
+
if (raw) {
|
|
310
|
+
const parsed = JSON.parse(raw);
|
|
311
|
+
result.cronJobs = Array.isArray(parsed) ? parsed : (parsed?.jobs ?? []);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
catch { /* ignore */ }
|
|
315
|
+
return result;
|
|
316
|
+
}
|
|
317
|
+
/** @deprecated use readAgentProfile() */
|
|
318
|
+
export function readAgentInfo() {
|
|
319
|
+
return readAgentProfile();
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Returns file paths that should be watched for changes to trigger a profile re-upload.
|
|
323
|
+
*/
|
|
324
|
+
export function getProfileWatchPaths(openclawDir) {
|
|
325
|
+
const dir = openclawDir ?? path.join(os.homedir(), ".openclaw");
|
|
326
|
+
const config = loadJsonSafe(path.join(dir, "openclaw.json"));
|
|
327
|
+
const agentsConfig = config?.agents;
|
|
328
|
+
const workspace = agentsConfig?.defaults?.workspace ?? path.join(dir, "workspace");
|
|
329
|
+
return [
|
|
330
|
+
path.join(dir, "openclaw.json"),
|
|
331
|
+
path.join(workspace, "IDENTITY.md"),
|
|
332
|
+
path.join(workspace, "SOUL.md"),
|
|
333
|
+
path.join(workspace, "USER.md"),
|
|
334
|
+
path.join(workspace, "AGENTS.md"),
|
|
335
|
+
path.join(workspace, "TOOLS.md"),
|
|
336
|
+
path.join(workspace, "HEARTBEAT.md"),
|
|
337
|
+
path.join(dir, "cron", "jobs.json"),
|
|
338
|
+
path.join(workspace, "skills"),
|
|
339
|
+
];
|
|
340
|
+
}
|
|
341
|
+
export function resolveConfig(config) {
|
|
342
|
+
const plan = config?.plan;
|
|
343
|
+
const normalizedCoreUrl = (config?.coreUrl ?? DEFAULT_CONFIG.coreUrl).replace(/\/+$/, "");
|
|
344
|
+
// Backward-compat migration: if user still has the old official default URL in config,
|
|
345
|
+
// transparently switch to the new default endpoint.
|
|
346
|
+
const resolvedCoreUrl = normalizedCoreUrl === LEGACY_OFFICIAL_CORE_URL
|
|
347
|
+
? DEFAULT_CORE_URL
|
|
348
|
+
: normalizedCoreUrl;
|
|
349
|
+
return {
|
|
350
|
+
enabled: config?.enabled ?? DEFAULT_CONFIG.enabled,
|
|
351
|
+
blockOnRisk: config?.blockOnRisk ?? DEFAULT_CONFIG.blockOnRisk,
|
|
352
|
+
apiKey: config?.apiKey ?? DEFAULT_CONFIG.apiKey,
|
|
353
|
+
timeoutMs: config?.timeoutMs ?? DEFAULT_CONFIG.timeoutMs,
|
|
354
|
+
coreUrl: resolvedCoreUrl,
|
|
355
|
+
agentName: config?.agentName ?? readIdentityName() ?? DEFAULT_CONFIG.agentName,
|
|
356
|
+
plan,
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../agent/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-based prompt injection scanner.
|
|
3
|
+
*
|
|
4
|
+
* Pure/sync regex scanner — no network, no dependencies.
|
|
5
|
+
* Scans tool result text (file contents, web fetches) for injection patterns.
|
|
6
|
+
*
|
|
7
|
+
* Two-tier design:
|
|
8
|
+
* HIGH confidence — a single match triggers detection
|
|
9
|
+
* MEDIUM confidence — requires 2+ distinct categories to trigger
|
|
10
|
+
*/
|
|
11
|
+
import type { DetectionFinding } from "./types.js";
|
|
12
|
+
export type InjectionCategory = "INSTRUCTION_OVERRIDE" | "MODE_SWITCHING" | "FAKE_SYSTEM_MESSAGE" | "CONCEALMENT_DIRECTIVE" | "COMMAND_EXECUTION" | "TASK_HIJACKING" | "ROLE_ASSUMPTION" | "DATA_EXFILTRATION";
|
|
13
|
+
export type InjectionMatch = {
|
|
14
|
+
pattern: string;
|
|
15
|
+
category: InjectionCategory;
|
|
16
|
+
confidence: "high" | "medium";
|
|
17
|
+
matchedText: string;
|
|
18
|
+
};
|
|
19
|
+
export type InjectionScanResult = {
|
|
20
|
+
detected: boolean;
|
|
21
|
+
matches: InjectionMatch[];
|
|
22
|
+
distinctCategories: InjectionCategory[];
|
|
23
|
+
summary: string;
|
|
24
|
+
findings: DetectionFinding[];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Replace all injection matches in `text` with `__REDACTED_BY_CHANGEWAYGUARD_DUE_TO_{riskType}__`.
|
|
28
|
+
* Returns the redacted text and structured findings.
|
|
29
|
+
*/
|
|
30
|
+
export declare function redactContent(text: string): {
|
|
31
|
+
redacted: string;
|
|
32
|
+
findings: DetectionFinding[];
|
|
33
|
+
};
|
|
34
|
+
export declare function scanForInjection(text: string): InjectionScanResult;
|
|
35
|
+
//# sourceMappingURL=content-injection-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-injection-scanner.d.ts","sourceRoot":"","sources":["../../agent/content-injection-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAgC,MAAM,YAAY,CAAC;AAMjF,MAAM,MAAM,iBAAiB,GACzB,sBAAsB,GACtB,gBAAgB,GAChB,qBAAqB,GACrB,uBAAuB,GACvB,mBAAmB,GACnB,gBAAgB,GAChB,iBAAiB,GACjB,mBAAmB,CAAC;AAExB,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B,CAAC;AAsNF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAwB9F;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAoDlE"}
|