@memtensor/memos-local-openclaw-plugin 1.0.4-beta.9 → 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.
Files changed (100) hide show
  1. package/.env.example +7 -0
  2. package/README.md +94 -27
  3. package/dist/capture/index.js +3 -1
  4. package/dist/capture/index.js.map +1 -1
  5. package/dist/client/connector.d.ts +5 -0
  6. package/dist/client/connector.d.ts.map +1 -1
  7. package/dist/client/connector.js +89 -8
  8. package/dist/client/connector.js.map +1 -1
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +2 -1
  11. package/dist/config.js.map +1 -1
  12. package/dist/hub/server.d.ts +2 -0
  13. package/dist/hub/server.d.ts.map +1 -1
  14. package/dist/hub/server.js +240 -35
  15. package/dist/hub/server.js.map +1 -1
  16. package/dist/hub/user-manager.d.ts +9 -0
  17. package/dist/hub/user-manager.d.ts.map +1 -1
  18. package/dist/hub/user-manager.js +26 -2
  19. package/dist/hub/user-manager.js.map +1 -1
  20. package/dist/ingest/chunker.d.ts +2 -1
  21. package/dist/ingest/chunker.d.ts.map +1 -1
  22. package/dist/ingest/chunker.js +14 -10
  23. package/dist/ingest/chunker.js.map +1 -1
  24. package/dist/ingest/providers/index.js +2 -2
  25. package/dist/ingest/providers/index.js.map +1 -1
  26. package/dist/recall/engine.d.ts.map +1 -1
  27. package/dist/recall/engine.js +22 -4
  28. package/dist/recall/engine.js.map +1 -1
  29. package/dist/shared/llm-call.d.ts.map +1 -1
  30. package/dist/shared/llm-call.js +2 -1
  31. package/dist/shared/llm-call.js.map +1 -1
  32. package/dist/sharing/types.d.ts +1 -1
  33. package/dist/sharing/types.d.ts.map +1 -1
  34. package/dist/skill/evolver.d.ts +2 -0
  35. package/dist/skill/evolver.d.ts.map +1 -1
  36. package/dist/skill/evolver.js +56 -5
  37. package/dist/skill/evolver.js.map +1 -1
  38. package/dist/skill/generator.d.ts +2 -0
  39. package/dist/skill/generator.d.ts.map +1 -1
  40. package/dist/skill/generator.js +45 -3
  41. package/dist/skill/generator.js.map +1 -1
  42. package/dist/skill/installer.d.ts +26 -0
  43. package/dist/skill/installer.d.ts.map +1 -1
  44. package/dist/skill/installer.js +80 -4
  45. package/dist/skill/installer.js.map +1 -1
  46. package/dist/skill/upgrader.d.ts +2 -0
  47. package/dist/skill/upgrader.d.ts.map +1 -1
  48. package/dist/skill/upgrader.js +139 -1
  49. package/dist/skill/upgrader.js.map +1 -1
  50. package/dist/skill/validator.d.ts +3 -0
  51. package/dist/skill/validator.d.ts.map +1 -1
  52. package/dist/skill/validator.js +75 -0
  53. package/dist/skill/validator.js.map +1 -1
  54. package/dist/storage/sqlite.d.ts +57 -0
  55. package/dist/storage/sqlite.d.ts.map +1 -1
  56. package/dist/storage/sqlite.js +290 -35
  57. package/dist/storage/sqlite.js.map +1 -1
  58. package/dist/telemetry.d.ts +4 -1
  59. package/dist/telemetry.d.ts.map +1 -1
  60. package/dist/telemetry.js +39 -12
  61. package/dist/telemetry.js.map +1 -1
  62. package/dist/types.d.ts +10 -0
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/types.js +4 -0
  65. package/dist/types.js.map +1 -1
  66. package/dist/viewer/html.d.ts.map +1 -1
  67. package/dist/viewer/html.js +564 -225
  68. package/dist/viewer/html.js.map +1 -1
  69. package/dist/viewer/server.d.ts +9 -0
  70. package/dist/viewer/server.d.ts.map +1 -1
  71. package/dist/viewer/server.js +357 -108
  72. package/dist/viewer/server.js.map +1 -1
  73. package/index.ts +412 -53
  74. package/openclaw.plugin.json +1 -1
  75. package/package.json +2 -1
  76. package/prebuilds/darwin-arm64/better_sqlite3.node +0 -0
  77. package/prebuilds/darwin-x64/better_sqlite3.node +0 -0
  78. package/prebuilds/linux-x64/better_sqlite3.node +0 -0
  79. package/prebuilds/win32-x64/better_sqlite3.node +0 -0
  80. package/src/capture/index.ts +4 -1
  81. package/src/client/connector.ts +92 -8
  82. package/src/config.ts +2 -1
  83. package/src/hub/server.ts +235 -35
  84. package/src/hub/user-manager.ts +42 -6
  85. package/src/ingest/chunker.ts +19 -13
  86. package/src/ingest/providers/index.ts +2 -2
  87. package/src/recall/engine.ts +20 -4
  88. package/src/shared/llm-call.ts +2 -1
  89. package/src/sharing/types.ts +1 -1
  90. package/src/skill/evolver.ts +58 -6
  91. package/src/skill/generator.ts +44 -5
  92. package/src/skill/installer.ts +107 -4
  93. package/src/skill/upgrader.ts +139 -1
  94. package/src/skill/validator.ts +79 -0
  95. package/src/storage/sqlite.ts +318 -40
  96. package/src/telemetry.ts +39 -14
  97. package/src/types.ts +11 -0
  98. package/src/viewer/html.ts +564 -225
  99. package/src/viewer/server.ts +333 -105
  100. package/telemetry.credentials.json +5 -0
package/src/telemetry.ts CHANGED
@@ -18,14 +18,26 @@ export interface TelemetryConfig {
18
18
  enabled?: boolean;
19
19
  }
20
20
 
21
- const ARMS_ENDPOINT =
22
- "https://proj-xtrace-e218d9316b328f196a3c640cc7ca84-cn-hangzhou.cn-hangzhou.log.aliyuncs.com" +
23
- "/rum/web/v2" +
24
- "?workspace=default-cms-1026429231103299-cn-hangzhou" +
25
- "&service_id=a3u72ukxmr@066657d42a13a9a9f337f";
26
-
27
- const ARMS_PID = "a3u72ukxmr@066657d42a13a9a9f337f";
28
- const ARMS_ENV = "prod";
21
+ function loadTelemetryCredentials(pluginDir?: string): { endpoint: string; pid: string; env: string } {
22
+ if (process.env.MEMOS_ARMS_ENDPOINT) {
23
+ return {
24
+ endpoint: process.env.MEMOS_ARMS_ENDPOINT,
25
+ pid: process.env.MEMOS_ARMS_PID ?? "",
26
+ env: process.env.MEMOS_ARMS_ENV ?? "prod",
27
+ };
28
+ }
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
+ }
39
+ return { endpoint: "", pid: "", env: "prod" };
40
+ }
29
41
 
30
42
  const FLUSH_AT = 10;
31
43
  const FLUSH_INTERVAL_MS = 30_000;
@@ -54,8 +66,11 @@ export class Telemetry {
54
66
  private flushTimer: ReturnType<typeof setInterval> | null = null;
55
67
  private sessionId: string;
56
68
  private firstSeenDate: string;
69
+ private armsEndpoint: string;
70
+ private armsPid: string;
71
+ private armsEnv: string;
57
72
 
58
- constructor(config: TelemetryConfig, stateDir: string, pluginVersion: string, log: Logger) {
73
+ constructor(config: TelemetryConfig, stateDir: string, pluginVersion: string, log: Logger, pluginDir?: string) {
59
74
  this.log = log;
60
75
  this.pluginVersion = pluginVersion;
61
76
  this.enabled = config.enabled !== false;
@@ -63,8 +78,18 @@ export class Telemetry {
63
78
  this.firstSeenDate = this.loadOrCreateFirstSeen(stateDir);
64
79
  this.sessionId = this.loadOrCreateSessionId(stateDir);
65
80
 
66
- if (!this.enabled) {
67
- this.log.debug("Telemetry disabled (opt-out via TELEMETRY_ENABLED=false)");
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) {
87
+ this.enabled = false;
88
+ this.log.debug(
89
+ !this.armsEndpoint
90
+ ? "Telemetry disabled (no credentials configured)"
91
+ : "Telemetry disabled (opt-out)",
92
+ );
68
93
  return;
69
94
  }
70
95
 
@@ -174,8 +199,8 @@ export class Telemetry {
174
199
  private buildPayload(events: ArmsEvent[]): Record<string, unknown> {
175
200
  return {
176
201
  app: {
177
- id: ARMS_PID,
178
- env: ARMS_ENV,
202
+ id: this.armsPid,
203
+ env: this.armsEnv,
179
204
  version: this.pluginVersion,
180
205
  type: "node",
181
206
  },
@@ -194,7 +219,7 @@ export class Telemetry {
194
219
  const payload = this.buildPayload(batch);
195
220
 
196
221
  try {
197
- const resp = await fetch(ARMS_ENDPOINT, {
222
+ const resp = await fetch(this.armsEndpoint, {
198
223
  method: "POST",
199
224
  headers: { "Content-Type": "text/plain" },
200
225
  body: JSON.stringify(payload),
package/src/types.ts CHANGED
@@ -66,6 +66,8 @@ export interface ChunkRef {
66
66
 
67
67
  // ─── Search / Recall ───
68
68
 
69
+ export type SearchHitOrigin = "local" | "local-shared" | "hub-memory" | "hub-remote";
70
+
69
71
  export interface SearchHit {
70
72
  summary: string;
71
73
  original_excerpt: string;
@@ -74,6 +76,7 @@ export interface SearchHit {
74
76
  taskId: string | null;
75
77
  skillId: string | null;
76
78
  owner?: string;
79
+ origin?: SearchHitOrigin;
77
80
  source: {
78
81
  ts: number;
79
82
  role: Role;
@@ -249,6 +252,10 @@ export interface SkillEvolutionConfig {
249
252
  minConfidence?: number;
250
253
  maxSkillLines?: number;
251
254
  autoInstall?: boolean;
255
+ autoRecallSkills?: boolean;
256
+ autoRecallSkillLimit?: number;
257
+ preferUpgradeExisting?: boolean;
258
+ redactSensitiveInSkill?: boolean;
252
259
  /** Optional independent LLM config for skill evaluation/validation. Falls back to main summarizer if not set. */
253
260
  summarizer?: SummarizerConfig;
254
261
  }
@@ -344,6 +351,10 @@ export const DEFAULTS = {
344
351
  skillMinConfidence: 0.7,
345
352
  skillMaxLines: 400,
346
353
  skillAutoInstall: false,
354
+ skillAutoRecall: true,
355
+ skillAutoRecallLimit: 2,
356
+ skillPreferUpgrade: true,
357
+ skillRedactSensitive: true,
347
358
  } as const;
348
359
 
349
360
  // ─── Plugin Hooks (OpenClaw integration) ───