@memtensor/memos-local-openclaw-plugin 1.0.4 → 1.0.5
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/telemetry.d.ts +4 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +26 -18
- package/dist/telemetry.js.map +1 -1
- package/index.ts +1 -1
- package/package.json +1 -1
- package/src/telemetry.ts +25 -18
package/dist/telemetry.d.ts
CHANGED
|
@@ -22,7 +22,10 @@ export declare class Telemetry {
|
|
|
22
22
|
private flushTimer;
|
|
23
23
|
private sessionId;
|
|
24
24
|
private firstSeenDate;
|
|
25
|
-
|
|
25
|
+
private armsEndpoint;
|
|
26
|
+
private armsPid;
|
|
27
|
+
private armsEnv;
|
|
28
|
+
constructor(config: TelemetryConfig, stateDir: string, pluginVersion: string, log: Logger, pluginDir?: string);
|
|
26
29
|
private loadOrCreateAnonymousId;
|
|
27
30
|
private loadOrCreateSessionId;
|
|
28
31
|
private touchSession;
|
package/dist/telemetry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAuCD,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IA4B7G,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,OAAO;IAmCf,OAAO,CAAC,YAAY;YAiBN,KAAK;IAoBnB,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,IAAI;IAQ/E,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAO5E,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAM7C,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM5C,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI;IAO/E,iBAAiB,IAAI,IAAI;IAIzB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAQ1D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAOnD,OAAO,CAAC,kBAAkB;IAUpB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAOhC"}
|
package/dist/telemetry.js
CHANGED
|
@@ -47,7 +47,7 @@ const fs = __importStar(require("fs"));
|
|
|
47
47
|
const path = __importStar(require("path"));
|
|
48
48
|
const os = __importStar(require("os"));
|
|
49
49
|
const uuid_1 = require("uuid");
|
|
50
|
-
function loadTelemetryCredentials() {
|
|
50
|
+
function loadTelemetryCredentials(pluginDir) {
|
|
51
51
|
if (process.env.MEMOS_ARMS_ENDPOINT) {
|
|
52
52
|
return {
|
|
53
53
|
endpoint: process.env.MEMOS_ARMS_ENDPOINT,
|
|
@@ -55,20 +55,21 @@ function loadTelemetryCredentials() {
|
|
|
55
55
|
env: process.env.MEMOS_ARMS_ENV ?? "prod",
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
const bases = pluginDir ? [pluginDir, path.join(pluginDir, "src")] : [];
|
|
59
|
+
if (typeof __dirname === "string")
|
|
60
|
+
bases.push(path.resolve(__dirname, ".."), __dirname);
|
|
61
|
+
const candidates = bases.map(b => path.join(b, "telemetry.credentials.json"));
|
|
62
|
+
for (const credPath of candidates) {
|
|
63
|
+
try {
|
|
64
|
+
const raw = fs.readFileSync(credPath, "utf-8");
|
|
65
|
+
const creds = JSON.parse(raw);
|
|
66
|
+
if (creds.endpoint)
|
|
67
|
+
return { endpoint: creds.endpoint, pid: creds.pid ?? "", env: creds.env ?? "prod" };
|
|
68
|
+
}
|
|
69
|
+
catch { }
|
|
64
70
|
}
|
|
65
|
-
catch { }
|
|
66
71
|
return { endpoint: "", pid: "", env: "prod" };
|
|
67
72
|
}
|
|
68
|
-
const _creds = loadTelemetryCredentials();
|
|
69
|
-
const ARMS_ENDPOINT = _creds.endpoint;
|
|
70
|
-
const ARMS_PID = _creds.pid;
|
|
71
|
-
const ARMS_ENV = _creds.env;
|
|
72
73
|
const FLUSH_AT = 10;
|
|
73
74
|
const FLUSH_INTERVAL_MS = 30_000;
|
|
74
75
|
const SEND_TIMEOUT_MS = 30_000;
|
|
@@ -84,16 +85,23 @@ class Telemetry {
|
|
|
84
85
|
flushTimer = null;
|
|
85
86
|
sessionId;
|
|
86
87
|
firstSeenDate;
|
|
87
|
-
|
|
88
|
+
armsEndpoint;
|
|
89
|
+
armsPid;
|
|
90
|
+
armsEnv;
|
|
91
|
+
constructor(config, stateDir, pluginVersion, log, pluginDir) {
|
|
88
92
|
this.log = log;
|
|
89
93
|
this.pluginVersion = pluginVersion;
|
|
90
94
|
this.enabled = config.enabled !== false;
|
|
91
95
|
this.distinctId = this.loadOrCreateAnonymousId(stateDir);
|
|
92
96
|
this.firstSeenDate = this.loadOrCreateFirstSeen(stateDir);
|
|
93
97
|
this.sessionId = this.loadOrCreateSessionId(stateDir);
|
|
94
|
-
|
|
98
|
+
const creds = loadTelemetryCredentials(pluginDir);
|
|
99
|
+
this.armsEndpoint = creds.endpoint;
|
|
100
|
+
this.armsPid = creds.pid;
|
|
101
|
+
this.armsEnv = creds.env;
|
|
102
|
+
if (!this.enabled || !this.armsEndpoint) {
|
|
95
103
|
this.enabled = false;
|
|
96
|
-
this.log.debug(!
|
|
104
|
+
this.log.debug(!this.armsEndpoint
|
|
97
105
|
? "Telemetry disabled (no credentials configured)"
|
|
98
106
|
: "Telemetry disabled (opt-out)");
|
|
99
107
|
return;
|
|
@@ -205,8 +213,8 @@ class Telemetry {
|
|
|
205
213
|
buildPayload(events) {
|
|
206
214
|
return {
|
|
207
215
|
app: {
|
|
208
|
-
id:
|
|
209
|
-
env:
|
|
216
|
+
id: this.armsPid,
|
|
217
|
+
env: this.armsEnv,
|
|
210
218
|
version: this.pluginVersion,
|
|
211
219
|
type: "node",
|
|
212
220
|
},
|
|
@@ -224,7 +232,7 @@ class Telemetry {
|
|
|
224
232
|
const batch = this.buffer.splice(0);
|
|
225
233
|
const payload = this.buildPayload(batch);
|
|
226
234
|
try {
|
|
227
|
-
const resp = await fetch(
|
|
235
|
+
const resp = await fetch(this.armsEndpoint, {
|
|
228
236
|
method: "POST",
|
|
229
237
|
headers: { "Content-Type": "text/plain" },
|
|
230
238
|
body: JSON.stringify(payload),
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,+BAAoC;AAOpC,SAAS,wBAAwB;
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/index.ts
CHANGED
|
@@ -225,7 +225,7 @@ const memosLocalPlugin = {
|
|
|
225
225
|
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, "package.json"), "utf-8"));
|
|
226
226
|
pluginVersion = pkg.version ?? pluginVersion;
|
|
227
227
|
} catch {}
|
|
228
|
-
const telemetry = new Telemetry(ctx.config.telemetry ?? {}, stateDir, pluginVersion, ctx.log);
|
|
228
|
+
const telemetry = new Telemetry(ctx.config.telemetry ?? {}, stateDir, pluginVersion, ctx.log, pluginDir);
|
|
229
229
|
|
|
230
230
|
// Install bundled memory-guide skill so OpenClaw loads it (write from embedded content so it works regardless of deploy layout)
|
|
231
231
|
const workspaceSkillsDir = path.join(workspaceDir, "skills");
|
package/package.json
CHANGED
package/src/telemetry.ts
CHANGED
|
@@ -18,7 +18,7 @@ export interface TelemetryConfig {
|
|
|
18
18
|
enabled?: boolean;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
function loadTelemetryCredentials(): { endpoint: string; pid: string; env: string } {
|
|
21
|
+
function loadTelemetryCredentials(pluginDir?: string): { endpoint: string; pid: string; env: string } {
|
|
22
22
|
if (process.env.MEMOS_ARMS_ENDPOINT) {
|
|
23
23
|
return {
|
|
24
24
|
endpoint: process.env.MEMOS_ARMS_ENDPOINT,
|
|
@@ -26,20 +26,19 @@ function loadTelemetryCredentials(): { endpoint: string; pid: string; env: strin
|
|
|
26
26
|
env: process.env.MEMOS_ARMS_ENV ?? "prod",
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
const bases = pluginDir ? [pluginDir, path.join(pluginDir, "src")] : [];
|
|
30
|
+
if (typeof __dirname === "string") bases.push(path.resolve(__dirname, ".."), __dirname);
|
|
31
|
+
const candidates = bases.map(b => path.join(b, "telemetry.credentials.json"));
|
|
32
|
+
for (const credPath of candidates) {
|
|
33
|
+
try {
|
|
34
|
+
const raw = fs.readFileSync(credPath, "utf-8");
|
|
35
|
+
const creds = JSON.parse(raw);
|
|
36
|
+
if (creds.endpoint) return { endpoint: creds.endpoint, pid: creds.pid ?? "", env: creds.env ?? "prod" };
|
|
37
|
+
} catch {}
|
|
38
|
+
}
|
|
35
39
|
return { endpoint: "", pid: "", env: "prod" };
|
|
36
40
|
}
|
|
37
41
|
|
|
38
|
-
const _creds = loadTelemetryCredentials();
|
|
39
|
-
const ARMS_ENDPOINT = _creds.endpoint;
|
|
40
|
-
const ARMS_PID = _creds.pid;
|
|
41
|
-
const ARMS_ENV = _creds.env;
|
|
42
|
-
|
|
43
42
|
const FLUSH_AT = 10;
|
|
44
43
|
const FLUSH_INTERVAL_MS = 30_000;
|
|
45
44
|
const SEND_TIMEOUT_MS = 30_000;
|
|
@@ -67,8 +66,11 @@ export class Telemetry {
|
|
|
67
66
|
private flushTimer: ReturnType<typeof setInterval> | null = null;
|
|
68
67
|
private sessionId: string;
|
|
69
68
|
private firstSeenDate: string;
|
|
69
|
+
private armsEndpoint: string;
|
|
70
|
+
private armsPid: string;
|
|
71
|
+
private armsEnv: string;
|
|
70
72
|
|
|
71
|
-
constructor(config: TelemetryConfig, stateDir: string, pluginVersion: string, log: Logger) {
|
|
73
|
+
constructor(config: TelemetryConfig, stateDir: string, pluginVersion: string, log: Logger, pluginDir?: string) {
|
|
72
74
|
this.log = log;
|
|
73
75
|
this.pluginVersion = pluginVersion;
|
|
74
76
|
this.enabled = config.enabled !== false;
|
|
@@ -76,10 +78,15 @@ export class Telemetry {
|
|
|
76
78
|
this.firstSeenDate = this.loadOrCreateFirstSeen(stateDir);
|
|
77
79
|
this.sessionId = this.loadOrCreateSessionId(stateDir);
|
|
78
80
|
|
|
79
|
-
|
|
81
|
+
const creds = loadTelemetryCredentials(pluginDir);
|
|
82
|
+
this.armsEndpoint = creds.endpoint;
|
|
83
|
+
this.armsPid = creds.pid;
|
|
84
|
+
this.armsEnv = creds.env;
|
|
85
|
+
|
|
86
|
+
if (!this.enabled || !this.armsEndpoint) {
|
|
80
87
|
this.enabled = false;
|
|
81
88
|
this.log.debug(
|
|
82
|
-
!
|
|
89
|
+
!this.armsEndpoint
|
|
83
90
|
? "Telemetry disabled (no credentials configured)"
|
|
84
91
|
: "Telemetry disabled (opt-out)",
|
|
85
92
|
);
|
|
@@ -192,8 +199,8 @@ export class Telemetry {
|
|
|
192
199
|
private buildPayload(events: ArmsEvent[]): Record<string, unknown> {
|
|
193
200
|
return {
|
|
194
201
|
app: {
|
|
195
|
-
id:
|
|
196
|
-
env:
|
|
202
|
+
id: this.armsPid,
|
|
203
|
+
env: this.armsEnv,
|
|
197
204
|
version: this.pluginVersion,
|
|
198
205
|
type: "node",
|
|
199
206
|
},
|
|
@@ -212,7 +219,7 @@ export class Telemetry {
|
|
|
212
219
|
const payload = this.buildPayload(batch);
|
|
213
220
|
|
|
214
221
|
try {
|
|
215
|
-
const resp = await fetch(
|
|
222
|
+
const resp = await fetch(this.armsEndpoint, {
|
|
216
223
|
method: "POST",
|
|
217
224
|
headers: { "Content-Type": "text/plain" },
|
|
218
225
|
body: JSON.stringify(payload),
|