@axonflow/openclaw 1.3.1 → 2.0.0
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/CHANGELOG.md +51 -0
- package/README.md +272 -134
- package/dist/audit.d.ts +2 -2
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +2 -2
- package/dist/audit.js.map +1 -1
- package/dist/axonflow-client.d.ts +22 -0
- package/dist/axonflow-client.d.ts.map +1 -1
- package/dist/axonflow-client.js +56 -0
- package/dist/axonflow-client.js.map +1 -1
- package/dist/cache-dir.d.ts +34 -0
- package/dist/cache-dir.d.ts.map +1 -0
- package/dist/cache-dir.js +106 -0
- package/dist/cache-dir.js.map +1 -0
- package/dist/client-ref.d.ts +19 -0
- package/dist/client-ref.d.ts.map +1 -0
- package/dist/client-ref.js +16 -0
- package/dist/client-ref.js.map +1 -0
- package/dist/community-saas-bootstrap.d.ts +58 -0
- package/dist/community-saas-bootstrap.d.ts.map +1 -0
- package/dist/community-saas-bootstrap.js +281 -0
- package/dist/community-saas-bootstrap.js.map +1 -0
- package/dist/config.d.ts +26 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +60 -30
- package/dist/config.js.map +1 -1
- package/dist/governance.d.ts +3 -2
- package/dist/governance.d.ts.map +1 -1
- package/dist/governance.js +2 -2
- package/dist/governance.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +123 -12
- package/dist/index.js.map +1 -1
- package/dist/llm-audit.d.ts +3 -3
- package/dist/llm-audit.d.ts.map +1 -1
- package/dist/llm-audit.js +3 -3
- package/dist/llm-audit.js.map +1 -1
- package/dist/message-guard.d.ts +2 -2
- package/dist/message-guard.d.ts.map +1 -1
- package/dist/message-guard.js +2 -2
- package/dist/message-guard.js.map +1 -1
- package/dist/plugin-version-check.d.ts +50 -0
- package/dist/plugin-version-check.d.ts.map +1 -0
- package/dist/plugin-version-check.js +89 -0
- package/dist/plugin-version-check.js.map +1 -0
- package/dist/telemetry-config.d.ts +7 -1
- package/dist/telemetry-config.d.ts.map +1 -1
- package/dist/telemetry-config.js +1 -2
- package/dist/telemetry-config.js.map +1 -1
- package/dist/telemetry.d.ts +37 -14
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +146 -46
- package/dist/telemetry.js.map +1 -1
- package/openclaw.plugin.json +3 -6
- package/package.json +9 -5
package/dist/telemetry.js
CHANGED
|
@@ -1,21 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Anonymous usage telemetry
|
|
2
|
+
* Anonymous usage telemetry — 7-day heartbeat (TypeScript).
|
|
3
3
|
*
|
|
4
|
-
* Sends
|
|
5
|
-
*
|
|
6
|
-
* and OpenClaw version. No PII, no tool arguments, no policy data.
|
|
4
|
+
* Sends an anonymous POST to checkpoint.getaxonflow.com on plugin
|
|
5
|
+
* initialization, at most once every 7 days per machine.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
7
|
+
* Design rules (per feedback_telemetry_heartbeat_design_rules.md):
|
|
8
|
+
* 1. Stamp-on-delivery, not stamp-on-attempt. Stamp file mtime
|
|
9
|
+
* advances ONLY after the HTTP POST returns 2xx. A transient
|
|
10
|
+
* network failure does not silence telemetry for 7 days.
|
|
11
|
+
* 2. In-flight gate via a per-process Promise. Concurrent plugin
|
|
12
|
+
* loads do not race to send duplicate pings.
|
|
13
|
+
* 3. Opt-out check FIRST, before any rate-limit or filesystem ops.
|
|
14
|
+
* AXONFLOW_TELEMETRY=off is re-evaluated every call.
|
|
15
|
+
* 4. mtime as the freshness source; stamp body holds instance_id.
|
|
16
|
+
* 5. Atomic stamp write: tmp + rename.
|
|
17
|
+
* 6. Persistent instance_id across heartbeats.
|
|
18
|
+
* 7. Defensive against future-dated stamps (clock skew → treat absent).
|
|
19
|
+
* 8. Cross-platform cache dir resolution (cache-dir.ts).
|
|
9
20
|
*
|
|
10
21
|
* Configuration resolution (opt-out flags and checkpoint URL) lives in
|
|
11
|
-
* telemetry-config.ts so this
|
|
22
|
+
* telemetry-config.ts so this module only handles the network-sending side.
|
|
12
23
|
*/
|
|
24
|
+
import * as fs from "fs";
|
|
25
|
+
import * as path from "path";
|
|
26
|
+
import { axonflowCacheDir } from "./cache-dir.js";
|
|
13
27
|
import { loadTelemetryConfig } from "./telemetry-config.js";
|
|
14
28
|
const TELEMETRY_TIMEOUT_MS = 3000;
|
|
29
|
+
const HEARTBEAT_INTERVAL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
30
|
+
const STAMP_FILE_NAME = "openclaw-plugin-telemetry-sent";
|
|
31
|
+
let inFlight = null;
|
|
15
32
|
function generateInstanceId() {
|
|
16
33
|
try {
|
|
17
|
-
if (typeof crypto !== "undefined" &&
|
|
18
|
-
typeof crypto.randomUUID === "function") {
|
|
34
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
19
35
|
return crypto.randomUUID();
|
|
20
36
|
}
|
|
21
37
|
}
|
|
@@ -28,9 +44,6 @@ function generateInstanceId() {
|
|
|
28
44
|
return v.toString(16);
|
|
29
45
|
});
|
|
30
46
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Detect the AxonFlow platform version via /health endpoint.
|
|
33
|
-
*/
|
|
34
47
|
async function detectPlatformVersion(endpoint) {
|
|
35
48
|
const controller = new AbortController();
|
|
36
49
|
const timeoutId = setTimeout(() => controller.abort(), 2000);
|
|
@@ -43,9 +56,7 @@ async function detectPlatformVersion(endpoint) {
|
|
|
43
56
|
if (!resp.ok)
|
|
44
57
|
return null;
|
|
45
58
|
const body = (await resp.json());
|
|
46
|
-
return typeof body.version === "string" && body.version
|
|
47
|
-
? body.version
|
|
48
|
-
: null;
|
|
59
|
+
return typeof body.version === "string" && body.version ? body.version : null;
|
|
49
60
|
}
|
|
50
61
|
catch {
|
|
51
62
|
clearTimeout(timeoutId);
|
|
@@ -53,63 +64,152 @@ async function detectPlatformVersion(endpoint) {
|
|
|
53
64
|
}
|
|
54
65
|
}
|
|
55
66
|
/**
|
|
56
|
-
* Send an anonymous telemetry
|
|
67
|
+
* Send an anonymous telemetry heartbeat. Concurrent calls are de-duplicated
|
|
68
|
+
* via a per-process in-flight gate; the second concurrent caller awaits the
|
|
69
|
+
* first's promise rather than firing a duplicate.
|
|
57
70
|
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
71
|
+
* Returns a promise that resolves when the heartbeat completes (success,
|
|
72
|
+
* skip, or failure). Production callers should treat as fire-and-forget;
|
|
73
|
+
* tests can await for assertions.
|
|
60
74
|
*/
|
|
61
75
|
export function sendTelemetryPing(options) {
|
|
76
|
+
if (inFlight) {
|
|
77
|
+
return inFlight;
|
|
78
|
+
}
|
|
79
|
+
inFlight = sendInner(options).finally(() => {
|
|
80
|
+
inFlight = null;
|
|
81
|
+
});
|
|
82
|
+
return inFlight;
|
|
83
|
+
}
|
|
84
|
+
async function sendInner(options) {
|
|
85
|
+
// 1. Opt-out check FIRST.
|
|
62
86
|
const config = loadTelemetryConfig();
|
|
63
87
|
if (config.optedOut) {
|
|
64
88
|
return;
|
|
65
89
|
}
|
|
66
|
-
|
|
67
|
-
|
|
90
|
+
// 2. Resolve stamp file location.
|
|
91
|
+
const cacheDir = axonflowCacheDir();
|
|
92
|
+
let stampFile = "";
|
|
93
|
+
if (cacheDir) {
|
|
94
|
+
stampFile = path.join(cacheDir, STAMP_FILE_NAME);
|
|
95
|
+
try {
|
|
96
|
+
fs.mkdirSync(cacheDir, { recursive: true, mode: 0o700 });
|
|
97
|
+
if (process.platform !== "win32") {
|
|
98
|
+
try {
|
|
99
|
+
fs.chmodSync(cacheDir, 0o700);
|
|
100
|
+
}
|
|
101
|
+
catch { /* best effort */ }
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
stampFile = ""; // continue without stamping
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const now = options.now ?? (() => new Date());
|
|
109
|
+
const nowMs = now().getTime();
|
|
110
|
+
// 3. mtime check, defensive against future-dated stamps.
|
|
111
|
+
let priorInstanceId = "";
|
|
112
|
+
if (stampFile) {
|
|
113
|
+
try {
|
|
114
|
+
const stat = fs.statSync(stampFile);
|
|
115
|
+
const stampMtime = stat.mtimeMs;
|
|
116
|
+
if (stampMtime > 0 && stampMtime <= nowMs) {
|
|
117
|
+
const age = nowMs - stampMtime;
|
|
118
|
+
if (age < HEARTBEAT_INTERVAL_MS) {
|
|
119
|
+
return; // fresh — skip
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
priorInstanceId = fs.readFileSync(stampFile, "utf8").trim();
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
priorInstanceId = "";
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// No stamp → fall through to send
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const instanceId = priorInstanceId && /^[a-f0-9-]{8,64}$/i.test(priorInstanceId)
|
|
134
|
+
? priorInstanceId
|
|
135
|
+
: generateInstanceId();
|
|
136
|
+
// 4. Detect platform version (best-effort). The harness override targets
|
|
137
|
+
// a localhost fake when AXONFLOW_HARNESS=1; production callers see no
|
|
138
|
+
// change since AXONFLOW_HARNESS is unset.
|
|
139
|
+
const probeEndpoint = process.env.AXONFLOW_HARNESS === "1" && process.env.AXONFLOW_HARNESS_AGENT_ENDPOINT
|
|
140
|
+
? process.env.AXONFLOW_HARNESS_AGENT_ENDPOINT
|
|
141
|
+
: options.endpoint;
|
|
142
|
+
let platformVersion = null;
|
|
143
|
+
try {
|
|
144
|
+
platformVersion = await detectPlatformVersion(probeEndpoint);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
platformVersion = null;
|
|
68
148
|
}
|
|
69
|
-
// Runtime metadata (platform, arch, runtime version) for the payload.
|
|
70
149
|
const proc = typeof process !== "undefined" ? process : null;
|
|
150
|
+
// Community-SaaS users are first-class for analytics; classifying them as
|
|
151
|
+
// "production" (because plugin-generated auth is present) hides them inside
|
|
152
|
+
// the self-hosted bucket. Surface them explicitly here.
|
|
153
|
+
const deploymentMode = options.mode === "community-saas"
|
|
154
|
+
? "community-saas"
|
|
155
|
+
: options.onError === "block"
|
|
156
|
+
? "production"
|
|
157
|
+
: "development";
|
|
71
158
|
const payload = {
|
|
72
159
|
sdk: "openclaw-plugin",
|
|
73
160
|
sdk_version: options.pluginVersion,
|
|
74
|
-
platform_version:
|
|
161
|
+
platform_version: platformVersion,
|
|
75
162
|
os: proc ? proc.platform : "unknown",
|
|
76
163
|
arch: proc ? proc.arch : "unknown",
|
|
77
164
|
runtime_version: proc ? proc.version.replace(/^v/, "") : "unknown",
|
|
78
|
-
deployment_mode:
|
|
165
|
+
deployment_mode: deploymentMode,
|
|
79
166
|
features: [
|
|
80
167
|
`hooks:${options.hookCount}`,
|
|
81
168
|
`high_risk_tools:${options.highRiskToolCount}`,
|
|
82
169
|
`on_error:${options.onError}`,
|
|
170
|
+
`mode:${options.mode}`,
|
|
83
171
|
],
|
|
84
|
-
instance_id:
|
|
172
|
+
instance_id: instanceId,
|
|
85
173
|
};
|
|
174
|
+
// 5. Fire the heartbeat.
|
|
175
|
+
const controller = new AbortController();
|
|
176
|
+
const timeoutId = setTimeout(() => controller.abort(), TELEMETRY_TIMEOUT_MS);
|
|
177
|
+
let delivered = false;
|
|
86
178
|
try {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
// Silent — platform version remains null
|
|
93
|
-
}
|
|
94
|
-
const controller = new AbortController();
|
|
95
|
-
const timeoutId = setTimeout(() => controller.abort(), TELEMETRY_TIMEOUT_MS);
|
|
96
|
-
try {
|
|
97
|
-
await fetch(config.checkpointUrl, {
|
|
98
|
-
method: "POST",
|
|
99
|
-
headers: { "Content-Type": "application/json" },
|
|
100
|
-
body: JSON.stringify(payload),
|
|
101
|
-
signal: controller.signal,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
finally {
|
|
105
|
-
clearTimeout(timeoutId);
|
|
106
|
-
}
|
|
107
|
-
})().catch(() => {
|
|
108
|
-
// Silent failure — telemetry should never affect plugin behavior
|
|
179
|
+
const resp = await fetch(config.checkpointUrl, {
|
|
180
|
+
method: "POST",
|
|
181
|
+
headers: { "Content-Type": "application/json" },
|
|
182
|
+
body: JSON.stringify(payload),
|
|
183
|
+
signal: controller.signal,
|
|
109
184
|
});
|
|
185
|
+
delivered = resp.ok;
|
|
110
186
|
}
|
|
111
187
|
catch {
|
|
112
|
-
|
|
188
|
+
delivered = false;
|
|
113
189
|
}
|
|
190
|
+
finally {
|
|
191
|
+
clearTimeout(timeoutId);
|
|
192
|
+
}
|
|
193
|
+
// 6. Stamp-on-delivery.
|
|
194
|
+
if (delivered && stampFile) {
|
|
195
|
+
try {
|
|
196
|
+
const tmp = `${stampFile}.tmp.${process.pid ?? "x"}`;
|
|
197
|
+
fs.writeFileSync(tmp, instanceId, { mode: 0o600 });
|
|
198
|
+
try {
|
|
199
|
+
fs.chmodSync(tmp, 0o600);
|
|
200
|
+
}
|
|
201
|
+
catch { /* best effort */ }
|
|
202
|
+
fs.renameSync(tmp, stampFile);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
// We delivered but couldn't stamp. Next plugin init retries.
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Test-only: clear the in-flight gate between tests.
|
|
211
|
+
*/
|
|
212
|
+
export function _resetTelemetryInFlightForTests() {
|
|
213
|
+
inFlight = null;
|
|
114
214
|
}
|
|
115
215
|
//# sourceMappingURL=telemetry.js.map
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/openclaw.plugin.json
CHANGED
|
@@ -52,16 +52,13 @@
|
|
|
52
52
|
"additionalProperties": false,
|
|
53
53
|
"properties": {
|
|
54
54
|
"endpoint": {
|
|
55
|
-
"type": "string"
|
|
56
|
-
"default": "http://localhost:8080"
|
|
55
|
+
"type": "string"
|
|
57
56
|
},
|
|
58
57
|
"clientId": {
|
|
59
|
-
"type": "string"
|
|
60
|
-
"default": "community"
|
|
58
|
+
"type": "string"
|
|
61
59
|
},
|
|
62
60
|
"clientSecret": {
|
|
63
|
-
"type": "string"
|
|
64
|
-
"default": "community"
|
|
61
|
+
"type": "string"
|
|
65
62
|
},
|
|
66
63
|
"highRiskTools": {
|
|
67
64
|
"type": "array",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axonflow/openclaw",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Policy enforcement, approval gates, and audit trails for OpenClaw — govern tool inputs before execution, scan outbound messages for PII/secrets, and record agent activity for review and compliance",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -62,7 +62,10 @@
|
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
64
|
"@axonflow/sdk": ">=4.3.0",
|
|
65
|
-
"openclaw": ">=
|
|
65
|
+
"openclaw": ">=2026.4.15"
|
|
66
|
+
},
|
|
67
|
+
"overrides": {
|
|
68
|
+
"openclaw": ">=2026.4.15"
|
|
66
69
|
},
|
|
67
70
|
"devDependencies": {
|
|
68
71
|
"@types/jest": "^29.5.0",
|
|
@@ -71,7 +74,8 @@
|
|
|
71
74
|
"jest": "^29.7.0",
|
|
72
75
|
"ts-jest": "^29.1.0",
|
|
73
76
|
"typescript": "^5.4.0",
|
|
74
|
-
"typescript-eslint": "^8.58.0"
|
|
77
|
+
"typescript-eslint": "^8.58.0",
|
|
78
|
+
"yaml": "^2.8.3"
|
|
75
79
|
},
|
|
76
80
|
"publishConfig": {
|
|
77
81
|
"access": "public",
|
|
@@ -88,10 +92,10 @@
|
|
|
88
92
|
],
|
|
89
93
|
"compat": {
|
|
90
94
|
"pluginApi": ">=2026.3.22",
|
|
91
|
-
"minGatewayVersion": "2026.
|
|
95
|
+
"minGatewayVersion": "2026.4.15"
|
|
92
96
|
},
|
|
93
97
|
"build": {
|
|
94
|
-
"openclawVersion": "2026.
|
|
98
|
+
"openclawVersion": "2026.4.15",
|
|
95
99
|
"pluginSdkVersion": "2026.3.22"
|
|
96
100
|
}
|
|
97
101
|
}
|