@axonflow/openclaw 1.3.2 → 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.
Files changed (56) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +56 -6
  3. package/dist/audit.d.ts +2 -2
  4. package/dist/audit.d.ts.map +1 -1
  5. package/dist/audit.js +2 -2
  6. package/dist/audit.js.map +1 -1
  7. package/dist/axonflow-client.d.ts +22 -0
  8. package/dist/axonflow-client.d.ts.map +1 -1
  9. package/dist/axonflow-client.js +56 -0
  10. package/dist/axonflow-client.js.map +1 -1
  11. package/dist/cache-dir.d.ts +34 -0
  12. package/dist/cache-dir.d.ts.map +1 -0
  13. package/dist/cache-dir.js +106 -0
  14. package/dist/cache-dir.js.map +1 -0
  15. package/dist/client-ref.d.ts +19 -0
  16. package/dist/client-ref.d.ts.map +1 -0
  17. package/dist/client-ref.js +16 -0
  18. package/dist/client-ref.js.map +1 -0
  19. package/dist/community-saas-bootstrap.d.ts +58 -0
  20. package/dist/community-saas-bootstrap.d.ts.map +1 -0
  21. package/dist/community-saas-bootstrap.js +281 -0
  22. package/dist/community-saas-bootstrap.js.map +1 -0
  23. package/dist/config.d.ts +26 -1
  24. package/dist/config.d.ts.map +1 -1
  25. package/dist/config.js +60 -30
  26. package/dist/config.js.map +1 -1
  27. package/dist/governance.d.ts +3 -2
  28. package/dist/governance.d.ts.map +1 -1
  29. package/dist/governance.js +2 -2
  30. package/dist/governance.js.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +123 -12
  34. package/dist/index.js.map +1 -1
  35. package/dist/llm-audit.d.ts +3 -3
  36. package/dist/llm-audit.d.ts.map +1 -1
  37. package/dist/llm-audit.js +3 -3
  38. package/dist/llm-audit.js.map +1 -1
  39. package/dist/message-guard.d.ts +2 -2
  40. package/dist/message-guard.d.ts.map +1 -1
  41. package/dist/message-guard.js +2 -2
  42. package/dist/message-guard.js.map +1 -1
  43. package/dist/plugin-version-check.d.ts +50 -0
  44. package/dist/plugin-version-check.d.ts.map +1 -0
  45. package/dist/plugin-version-check.js +89 -0
  46. package/dist/plugin-version-check.js.map +1 -0
  47. package/dist/telemetry-config.d.ts +5 -3
  48. package/dist/telemetry-config.d.ts.map +1 -1
  49. package/dist/telemetry-config.js +1 -15
  50. package/dist/telemetry-config.js.map +1 -1
  51. package/dist/telemetry.d.ts +37 -17
  52. package/dist/telemetry.d.ts.map +1 -1
  53. package/dist/telemetry.js +146 -49
  54. package/dist/telemetry.js.map +1 -1
  55. package/openclaw.plugin.json +3 -6
  56. package/package.json +9 -5
package/dist/telemetry.js CHANGED
@@ -1,24 +1,37 @@
1
1
  /**
2
- * Anonymous usage telemetry for the OpenClaw plugin.
2
+ * Anonymous usage telemetry 7-day heartbeat (TypeScript).
3
3
  *
4
- * Sends a single fire-and-forget ping on plugin initialization to
5
- * checkpoint.getaxonflow.com. Collects SDK version, platform info,
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
- * Opt out: AXONFLOW_TELEMETRY=off (canonical)
9
- * Also honored for backward compatibility: DO_NOT_TRACK=1 (deprecated — removed
10
- * after 2026-05-05 in the next major release; a one-time warning emits when
11
- * it's the active opt-out so operators can migrate).
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).
12
20
  *
13
21
  * Configuration resolution (opt-out flags and checkpoint URL) lives in
14
- * telemetry-config.ts so this file only handles the network-sending side.
22
+ * telemetry-config.ts so this module only handles the network-sending side.
15
23
  */
24
+ import * as fs from "fs";
25
+ import * as path from "path";
26
+ import { axonflowCacheDir } from "./cache-dir.js";
16
27
  import { loadTelemetryConfig } from "./telemetry-config.js";
17
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;
18
32
  function generateInstanceId() {
19
33
  try {
20
- if (typeof crypto !== "undefined" &&
21
- typeof crypto.randomUUID === "function") {
34
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
22
35
  return crypto.randomUUID();
23
36
  }
24
37
  }
@@ -31,9 +44,6 @@ function generateInstanceId() {
31
44
  return v.toString(16);
32
45
  });
33
46
  }
34
- /**
35
- * Detect the AxonFlow platform version via /health endpoint.
36
- */
37
47
  async function detectPlatformVersion(endpoint) {
38
48
  const controller = new AbortController();
39
49
  const timeoutId = setTimeout(() => controller.abort(), 2000);
@@ -46,9 +56,7 @@ async function detectPlatformVersion(endpoint) {
46
56
  if (!resp.ok)
47
57
  return null;
48
58
  const body = (await resp.json());
49
- return typeof body.version === "string" && body.version
50
- ? body.version
51
- : null;
59
+ return typeof body.version === "string" && body.version ? body.version : null;
52
60
  }
53
61
  catch {
54
62
  clearTimeout(timeoutId);
@@ -56,63 +64,152 @@ async function detectPlatformVersion(endpoint) {
56
64
  }
57
65
  }
58
66
  /**
59
- * Send an anonymous telemetry ping on plugin initialization.
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.
60
70
  *
61
- * Fire-and-forget: errors are silently swallowed, 3-second timeout
62
- * prevents blocking. Never affects plugin behavior.
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.
63
74
  */
64
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.
65
86
  const config = loadTelemetryConfig();
66
87
  if (config.optedOut) {
67
88
  return;
68
89
  }
69
- if (typeof console !== "undefined") {
70
- console.log("[AxonFlow] Anonymous telemetry enabled for local and self-hosted use. Opt out: AXONFLOW_TELEMETRY=off | https://docs.getaxonflow.com/docs/telemetry");
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;
71
148
  }
72
- // Runtime metadata (platform, arch, runtime version) for the payload.
73
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";
74
158
  const payload = {
75
159
  sdk: "openclaw-plugin",
76
160
  sdk_version: options.pluginVersion,
77
- platform_version: null,
161
+ platform_version: platformVersion,
78
162
  os: proc ? proc.platform : "unknown",
79
163
  arch: proc ? proc.arch : "unknown",
80
164
  runtime_version: proc ? proc.version.replace(/^v/, "") : "unknown",
81
- deployment_mode: options.onError === "block" ? "production" : "development",
165
+ deployment_mode: deploymentMode,
82
166
  features: [
83
167
  `hooks:${options.hookCount}`,
84
168
  `high_risk_tools:${options.highRiskToolCount}`,
85
169
  `on_error:${options.onError}`,
170
+ `mode:${options.mode}`,
86
171
  ],
87
- instance_id: generateInstanceId(),
172
+ instance_id: instanceId,
88
173
  };
174
+ // 5. Fire the heartbeat.
175
+ const controller = new AbortController();
176
+ const timeoutId = setTimeout(() => controller.abort(), TELEMETRY_TIMEOUT_MS);
177
+ let delivered = false;
89
178
  try {
90
- void (async () => {
91
- try {
92
- payload.platform_version = await detectPlatformVersion(options.endpoint);
93
- }
94
- catch {
95
- // Silent — platform version remains null
96
- }
97
- const controller = new AbortController();
98
- const timeoutId = setTimeout(() => controller.abort(), TELEMETRY_TIMEOUT_MS);
99
- try {
100
- await fetch(config.checkpointUrl, {
101
- method: "POST",
102
- headers: { "Content-Type": "application/json" },
103
- body: JSON.stringify(payload),
104
- signal: controller.signal,
105
- });
106
- }
107
- finally {
108
- clearTimeout(timeoutId);
109
- }
110
- })().catch(() => {
111
- // 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,
112
184
  });
185
+ delivered = resp.ok;
113
186
  }
114
187
  catch {
115
- // Silent failure
188
+ delivered = false;
116
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;
117
214
  }
118
215
  //# sourceMappingURL=telemetry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
@@ -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": "1.3.2",
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": ">=1.0.0"
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.3.22"
95
+ "minGatewayVersion": "2026.4.15"
92
96
  },
93
97
  "build": {
94
- "openclawVersion": "2026.3.22",
98
+ "openclawVersion": "2026.4.15",
95
99
  "pluginSdkVersion": "2026.3.22"
96
100
  }
97
101
  }