@ubundi/openclaw-cortex 1.0.0 → 1.1.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 (76) hide show
  1. package/README.md +17 -4
  2. package/dist/adapters/cortex/client.d.ts +7 -1
  3. package/dist/adapters/cortex/client.d.ts.map +1 -1
  4. package/dist/adapters/cortex/client.js +4 -2
  5. package/dist/adapters/cortex/client.js.map +1 -1
  6. package/dist/features/capture/handler.d.ts +2 -1
  7. package/dist/features/capture/handler.d.ts.map +1 -1
  8. package/dist/features/capture/handler.js +50 -6
  9. package/dist/features/capture/handler.js.map +1 -1
  10. package/dist/features/recall/handler.d.ts +2 -1
  11. package/dist/features/recall/handler.d.ts.map +1 -1
  12. package/dist/features/recall/handler.js +12 -2
  13. package/dist/features/recall/handler.js.map +1 -1
  14. package/dist/features/sync/daily-logs-sync.d.ts +3 -1
  15. package/dist/features/sync/daily-logs-sync.d.ts.map +1 -1
  16. package/dist/features/sync/daily-logs-sync.js +13 -1
  17. package/dist/features/sync/daily-logs-sync.js.map +1 -1
  18. package/dist/features/sync/memory-md-sync.d.ts +3 -1
  19. package/dist/features/sync/memory-md-sync.d.ts.map +1 -1
  20. package/dist/features/sync/memory-md-sync.js +13 -1
  21. package/dist/features/sync/memory-md-sync.js.map +1 -1
  22. package/dist/features/sync/transcripts-sync.d.ts +3 -1
  23. package/dist/features/sync/transcripts-sync.d.ts.map +1 -1
  24. package/dist/features/sync/transcripts-sync.js +14 -1
  25. package/dist/features/sync/transcripts-sync.js.map +1 -1
  26. package/dist/features/sync/watcher.d.ts +3 -1
  27. package/dist/features/sync/watcher.d.ts.map +1 -1
  28. package/dist/features/sync/watcher.js +6 -4
  29. package/dist/features/sync/watcher.js.map +1 -1
  30. package/dist/internal/audit/audit-logger.d.ts +28 -0
  31. package/dist/internal/audit/audit-logger.d.ts.map +1 -0
  32. package/dist/internal/audit/audit-logger.js +61 -0
  33. package/dist/internal/audit/audit-logger.js.map +1 -0
  34. package/dist/internal/identity/api-key.js +1 -1
  35. package/dist/plugin/config/schema.d.ts +15 -0
  36. package/dist/plugin/config/schema.d.ts.map +1 -1
  37. package/dist/plugin/config/schema.js +4 -1
  38. package/dist/plugin/config/schema.js.map +1 -1
  39. package/dist/plugin/index.d.ts +6 -0
  40. package/dist/plugin/index.d.ts.map +1 -1
  41. package/dist/plugin/index.js +121 -12
  42. package/dist/plugin/index.js.map +1 -1
  43. package/openclaw.plugin.json +30 -1
  44. package/package.json +1 -1
  45. package/dist/core/config/schema.d.ts +0 -61
  46. package/dist/core/config/schema.d.ts.map +0 -1
  47. package/dist/core/config/schema.js +0 -39
  48. package/dist/core/config/schema.js.map +0 -1
  49. package/dist/core/plugin.d.ts +0 -61
  50. package/dist/core/plugin.d.ts.map +0 -1
  51. package/dist/core/plugin.js +0 -147
  52. package/dist/core/plugin.js.map +0 -1
  53. package/dist/cortex/client.d.ts +0 -142
  54. package/dist/cortex/client.d.ts.map +0 -1
  55. package/dist/cortex/client.js +0 -145
  56. package/dist/cortex/client.js.map +0 -1
  57. package/dist/features/reflect/service.d.ts +0 -19
  58. package/dist/features/reflect/service.d.ts.map +0 -1
  59. package/dist/features/reflect/service.js +0 -38
  60. package/dist/features/reflect/service.js.map +0 -1
  61. package/dist/shared/fs/safe-path.d.ts +0 -8
  62. package/dist/shared/fs/safe-path.d.ts.map +0 -1
  63. package/dist/shared/fs/safe-path.js +0 -32
  64. package/dist/shared/fs/safe-path.js.map +0 -1
  65. package/dist/shared/metrics/latency-metrics.d.ts +0 -19
  66. package/dist/shared/metrics/latency-metrics.d.ts.map +0 -1
  67. package/dist/shared/metrics/latency-metrics.js +0 -45
  68. package/dist/shared/metrics/latency-metrics.js.map +0 -1
  69. package/dist/shared/queue/retry-queue.d.ts +0 -31
  70. package/dist/shared/queue/retry-queue.d.ts.map +0 -1
  71. package/dist/shared/queue/retry-queue.js +0 -115
  72. package/dist/shared/queue/retry-queue.js.map +0 -1
  73. package/dist/shared/transcript/cleaner.d.ts +0 -24
  74. package/dist/shared/transcript/cleaner.d.ts.map +0 -1
  75. package/dist/shared/transcript/cleaner.js +0 -96
  76. package/dist/shared/transcript/cleaner.js.map +0 -1
@@ -8,14 +8,16 @@ export class TranscriptsSync {
8
8
  retryQueue;
9
9
  allowedRoot;
10
10
  getUserId;
11
+ auditLogger;
11
12
  offsets = new Map();
12
- constructor(client, sessionPrefix, logger, retryQueue, allowedRoot, getUserId) {
13
+ constructor(client, sessionPrefix, logger, retryQueue, allowedRoot, getUserId, auditLogger) {
13
14
  this.client = client;
14
15
  this.sessionPrefix = sessionPrefix;
15
16
  this.logger = logger;
16
17
  this.retryQueue = retryQueue;
17
18
  this.allowedRoot = allowedRoot;
18
19
  this.getUserId = getUserId;
20
+ this.auditLogger = auditLogger;
19
21
  }
20
22
  async onFileChange(filePath, filename) {
21
23
  try {
@@ -42,6 +44,17 @@ export class TranscriptsSync {
42
44
  const sessionName = filename.replace(/\.jsonl$/, "");
43
45
  const sessionId = `${this.sessionPrefix}:session:${sessionName}`;
44
46
  const referenceDate = new Date().toISOString().slice(0, 10);
47
+ if (this.auditLogger) {
48
+ void this.auditLogger.log({
49
+ feature: "file-sync-transcripts",
50
+ method: "POST",
51
+ endpoint: "/v1/remember",
52
+ payload: messages.map((m) => `${m.role}: ${m.content}`).join("\n\n"),
53
+ sessionId,
54
+ userId: this.getUserId?.(),
55
+ messageCount: messages.length,
56
+ });
57
+ }
45
58
  const doRemember = () => {
46
59
  // Re-evaluate userId at call time so retries use the resolved value
47
60
  const userId = this.getUserId?.();
@@ -1 +1 @@
1
- {"version":3,"file":"transcripts-sync.js","sourceRoot":"","sources":["../../../src/features/sync/transcripts-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transcripts-sync.js","sourceRoot":"","sources":["../../../src/features/sync/transcripts-sync.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { CortexClient } from "../../adapters/cortex/client.js";
2
2
  import type { RetryQueue } from "../../internal/queue/retry-queue.js";
3
+ import type { AuditLogger } from "../../internal/audit/audit-logger.js";
3
4
  type Logger = {
4
5
  debug?(...args: unknown[]): void;
5
6
  info(...args: unknown[]): void;
@@ -17,12 +18,13 @@ export declare class FileSyncWatcher {
17
18
  private retryQueue?;
18
19
  private options;
19
20
  private getUserId?;
21
+ private auditLogger?;
20
22
  private watchers;
21
23
  private memoryMdSync;
22
24
  private dailyLogsSync;
23
25
  private transcriptsSync;
24
26
  private started;
25
- constructor(workspaceDir: string, client: CortexClient, sessionPrefix: string, logger: Logger, retryQueue?: RetryQueue | undefined, options?: FileSyncOptions, getUserId?: (() => string | undefined) | undefined);
27
+ constructor(workspaceDir: string, client: CortexClient, sessionPrefix: string, logger: Logger, retryQueue?: RetryQueue | undefined, options?: FileSyncOptions, getUserId?: (() => string | undefined) | undefined, auditLogger?: AuditLogger | undefined);
26
28
  start(): void;
27
29
  stop(): void;
28
30
  private watchPath;
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/features/sync/watcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAKtE,KAAK,MAAM,GAAG;IACZ,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,eAAe;IAQxB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,SAAS,CAAC;IAbpB,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,OAAO,CAAS;gBAGd,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,UAAU,YAAA,EACvB,OAAO,GAAE,eAAoB,EAC7B,SAAS,CAAC,GAAE,MAAM,MAAM,GAAG,SAAS,aAAA;IAG9C,KAAK,IAAI,IAAI;IA2Eb,IAAI,IAAI,IAAI;IAiBZ,OAAO,CAAC,SAAS;CAelB"}
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/features/sync/watcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAKxE,KAAK,MAAM,GAAG;IACZ,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,eAAe;IAQxB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,SAAS,CAAC;IAClB,OAAO,CAAC,WAAW,CAAC;IAdtB,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,OAAO,CAAS;gBAGd,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,UAAU,YAAA,EACvB,OAAO,GAAE,eAAoB,EAC7B,SAAS,CAAC,GAAE,MAAM,MAAM,GAAG,SAAS,aAAA,EACpC,WAAW,CAAC,EAAE,WAAW,YAAA;IAGnC,KAAK,IAAI,IAAI;IA8Eb,IAAI,IAAI,IAAI;IAiBZ,OAAO,CAAC,SAAS;CAelB"}
@@ -11,12 +11,13 @@ export class FileSyncWatcher {
11
11
  retryQueue;
12
12
  options;
13
13
  getUserId;
14
+ auditLogger;
14
15
  watchers = [];
15
16
  memoryMdSync = null;
16
17
  dailyLogsSync = null;
17
18
  transcriptsSync = null;
18
19
  started = false;
19
- constructor(workspaceDir, client, sessionPrefix, logger, retryQueue, options = {}, getUserId) {
20
+ constructor(workspaceDir, client, sessionPrefix, logger, retryQueue, options = {}, getUserId, auditLogger) {
20
21
  this.workspaceDir = workspaceDir;
21
22
  this.client = client;
22
23
  this.sessionPrefix = sessionPrefix;
@@ -24,6 +25,7 @@ export class FileSyncWatcher {
24
25
  this.retryQueue = retryQueue;
25
26
  this.options = options;
26
27
  this.getUserId = getUserId;
28
+ this.auditLogger = auditLogger;
27
29
  }
28
30
  start() {
29
31
  if (this.started) {
@@ -34,8 +36,8 @@ export class FileSyncWatcher {
34
36
  const memoryMdPath = join(this.workspaceDir, "MEMORY.md");
35
37
  const memoryDir = join(this.workspaceDir, "memory");
36
38
  const sessionsDir = join(this.workspaceDir, "sessions");
37
- this.memoryMdSync = new MemoryMdSync(memoryMdPath, this.client, `${this.sessionPrefix}:memory-md`, this.logger, this.retryQueue, this.workspaceDir, this.getUserId);
38
- this.dailyLogsSync = new DailyLogsSync(this.client, this.sessionPrefix, this.logger, this.retryQueue, memoryDir, this.getUserId);
39
+ this.memoryMdSync = new MemoryMdSync(memoryMdPath, this.client, `${this.sessionPrefix}:memory-md`, this.logger, this.retryQueue, this.workspaceDir, this.getUserId, this.auditLogger);
40
+ this.dailyLogsSync = new DailyLogsSync(this.client, this.sessionPrefix, this.logger, this.retryQueue, memoryDir, this.getUserId, this.auditLogger);
39
41
  this.watchPath(memoryMdPath, () => {
40
42
  this.memoryMdSync?.onFileChange();
41
43
  }, "File sync: watching MEMORY.md", "File sync: MEMORY.md not found, skipping");
@@ -47,7 +49,7 @@ export class FileSyncWatcher {
47
49
  }, "File sync: watching memory/*.md", "File sync: memory/ directory not found, skipping", { recursive: true });
48
50
  // Watch sessions/*.jsonl (transcripts)
49
51
  if (this.options.transcripts !== false) {
50
- this.transcriptsSync = new TranscriptsSync(this.client, this.sessionPrefix, this.logger, this.retryQueue, sessionsDir, this.getUserId);
52
+ this.transcriptsSync = new TranscriptsSync(this.client, this.sessionPrefix, this.logger, this.retryQueue, sessionsDir, this.getUserId, this.auditLogger);
51
53
  this.watchPath(sessionsDir, (_event, filename) => {
52
54
  if (typeof filename !== "string" || !filename.endsWith(".jsonl"))
53
55
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/features/sync/watcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/features/sync/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAaxD,MAAM,OAAO,eAAe;IAQhB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAdF,QAAQ,GAAgB,EAAE,CAAC;IAC3B,YAAY,GAAwB,IAAI,CAAC;IACzC,aAAa,GAAyB,IAAI,CAAC;IAC3C,eAAe,GAA2B,IAAI,CAAC;IAC/C,OAAO,GAAG,KAAK,CAAC;IAExB,YACU,YAAoB,EACpB,MAAoB,EACpB,aAAqB,EACrB,MAAc,EACd,UAAuB,EACvB,UAA2B,EAAE,EAC7B,SAAoC,EACpC,WAAyB;QAPzB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,WAAM,GAAN,MAAM,CAAc;QACpB,kBAAa,GAAb,aAAa,CAAQ;QACrB,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAa;QACvB,YAAO,GAAP,OAAO,CAAsB;QAC7B,cAAS,GAAT,SAAS,CAA2B;QACpC,gBAAW,GAAX,WAAW,CAAc;IAChC,CAAC;IAEJ,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,2DAA2D,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAExD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAClC,YAAY,EACZ,IAAI,CAAC,MAAM,EACX,GAAG,IAAI,CAAC,aAAa,YAAY,EACjC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,CACjB,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CACpC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,SAAS,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,CACjB,CAAC;QAEF,IAAI,CAAC,SAAS,CACZ,YAAY,EACZ,GAAG,EAAE;YACH,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC;QACpC,CAAC,EACD,+BAA+B,EAC/B,0CAA0C,CAC3C,CAAC;QAEF,IAAI,CAAC,SAAS,CACZ,SAAS,EACT,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YACnB,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO;YACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC,EACD,iCAAiC,EACjC,kDAAkD,EAClD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;QAEF,uCAAuC;QACvC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CACxC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,WAAW,EACX,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,CACjB,CAAC;YACF,IAAI,CAAC,SAAS,CACZ,WAAW,EACX,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;gBACnB,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAAE,OAAO;gBACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBAC7C,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACzD,CAAC,EACD,sCAAsC,EACtC,oDAAoD,EACpD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACxC,CAAC;IAEO,SAAS,CACf,IAAY,EACZ,OAAkE,EAClE,cAAsB,EACtB,WAAmB,EACnB,OAA6B;QAE7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ type Logger = {
2
+ debug?(...args: unknown[]): void;
3
+ info(...args: unknown[]): void;
4
+ warn(...args: unknown[]): void;
5
+ error(...args: unknown[]): void;
6
+ };
7
+ export interface AuditEntry {
8
+ feature: string;
9
+ method: string;
10
+ endpoint: string;
11
+ payload: string;
12
+ sessionId?: string;
13
+ userId?: string;
14
+ messageCount?: number;
15
+ }
16
+ export declare class AuditLogger {
17
+ private readonly logger;
18
+ private readonly auditDir;
19
+ private readonly payloadsDir;
20
+ private readonly indexPath;
21
+ private counter;
22
+ private initialized;
23
+ constructor(workspaceDir: string, logger: Logger);
24
+ log(entry: AuditEntry): Promise<void>;
25
+ private rotateIfNeeded;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=audit-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../../src/internal/audit/audit-logger.ts"],"names":[],"mappings":"AAGA,KAAK,MAAM,GAAG;IACZ,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,qBAAa,WAAW;IASpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IARzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,WAAW,CAAS;gBAG1B,YAAY,EAAE,MAAM,EACH,MAAM,EAAE,MAAM;IAO3B,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAoC7B,cAAc;CAW7B"}
@@ -0,0 +1,61 @@
1
+ import { mkdir, appendFile, writeFile, stat, rename } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ const MAX_INDEX_BYTES = 5 * 1024 * 1024; // 5MB
4
+ export class AuditLogger {
5
+ logger;
6
+ auditDir;
7
+ payloadsDir;
8
+ indexPath;
9
+ counter = 0;
10
+ initialized = false;
11
+ constructor(workspaceDir, logger) {
12
+ this.logger = logger;
13
+ this.auditDir = join(workspaceDir, ".cortex", "audit");
14
+ this.payloadsDir = join(this.auditDir, "payloads");
15
+ this.indexPath = join(this.auditDir, "index.jsonl");
16
+ }
17
+ async log(entry) {
18
+ try {
19
+ if (!this.initialized) {
20
+ await mkdir(this.payloadsDir, { recursive: true });
21
+ this.initialized = true;
22
+ }
23
+ const ts = new Date().toISOString();
24
+ const seq = String(++this.counter).padStart(3, "0");
25
+ const payloadFilename = `${ts.replace(/[:.]/g, "")}-${seq}.txt`;
26
+ const payloadPath = join(this.payloadsDir, payloadFilename);
27
+ await writeFile(payloadPath, entry.payload, { encoding: "utf-8", mode: 0o600 });
28
+ const indexLine = {
29
+ ts,
30
+ feature: entry.feature,
31
+ method: entry.method,
32
+ endpoint: entry.endpoint,
33
+ bytes: Buffer.byteLength(entry.payload, "utf-8"),
34
+ sessionId: entry.sessionId,
35
+ userId: entry.userId,
36
+ payloadFile: payloadFilename,
37
+ };
38
+ if (entry.messageCount !== undefined) {
39
+ indexLine.msgs = entry.messageCount;
40
+ }
41
+ await appendFile(this.indexPath, JSON.stringify(indexLine) + "\n", "utf-8");
42
+ await this.rotateIfNeeded();
43
+ }
44
+ catch (err) {
45
+ this.logger.warn(`Cortex audit log write failed: ${String(err)}`);
46
+ }
47
+ }
48
+ async rotateIfNeeded() {
49
+ try {
50
+ const stats = await stat(this.indexPath);
51
+ if (stats.size > MAX_INDEX_BYTES) {
52
+ const rotatedPath = join(this.auditDir, `index.${Date.now()}.jsonl`);
53
+ await rename(this.indexPath, rotatedPath);
54
+ }
55
+ }
56
+ catch {
57
+ // File may not exist yet or stat failed — ignore
58
+ }
59
+ }
60
+ }
61
+ //# sourceMappingURL=audit-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../../../src/internal/audit/audit-logger.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@
3
3
  * In source this is a placeholder; the dist file contains the real value.
4
4
  * Never commit a real key here.
5
5
  */
6
- export const BAKED_API_KEY = "__OPENCLAW_API_KEY__";
6
+ export const BAKED_API_KEY = "95134e1c-7c62-42d2-8672-c1ebee09553e";
7
7
  //# sourceMappingURL=api-key.js.map
@@ -6,8 +6,11 @@ export declare const CortexConfigSchema: z.ZodObject<{
6
6
  autoCapture: z.ZodDefault<z.ZodBoolean>;
7
7
  recallLimit: z.ZodDefault<z.ZodNumber>;
8
8
  recallTimeoutMs: z.ZodDefault<z.ZodNumber>;
9
+ toolTimeoutMs: z.ZodDefault<z.ZodNumber>;
9
10
  fileSync: z.ZodDefault<z.ZodBoolean>;
10
11
  transcriptSync: z.ZodDefault<z.ZodBoolean>;
12
+ captureMaxPayloadBytes: z.ZodDefault<z.ZodNumber>;
13
+ auditLog: z.ZodDefault<z.ZodBoolean>;
11
14
  namespace: z.ZodDefault<z.ZodString>;
12
15
  }, "strip", z.ZodTypeAny, {
13
16
  baseUrl: string;
@@ -15,8 +18,11 @@ export declare const CortexConfigSchema: z.ZodObject<{
15
18
  autoCapture: boolean;
16
19
  recallLimit: number;
17
20
  recallTimeoutMs: number;
21
+ toolTimeoutMs: number;
18
22
  fileSync: boolean;
19
23
  transcriptSync: boolean;
24
+ captureMaxPayloadBytes: number;
25
+ auditLog: boolean;
20
26
  namespace: string;
21
27
  userId?: string | undefined;
22
28
  }, {
@@ -26,8 +32,11 @@ export declare const CortexConfigSchema: z.ZodObject<{
26
32
  autoCapture?: boolean | undefined;
27
33
  recallLimit?: number | undefined;
28
34
  recallTimeoutMs?: number | undefined;
35
+ toolTimeoutMs?: number | undefined;
29
36
  fileSync?: boolean | undefined;
30
37
  transcriptSync?: boolean | undefined;
38
+ captureMaxPayloadBytes?: number | undefined;
39
+ auditLog?: boolean | undefined;
31
40
  namespace?: string | undefined;
32
41
  }>;
33
42
  export type CortexConfig = z.infer<typeof CortexConfigSchema>;
@@ -43,8 +52,11 @@ export declare const configSchema: {
43
52
  autoCapture?: boolean | undefined;
44
53
  recallLimit?: number | undefined;
45
54
  recallTimeoutMs?: number | undefined;
55
+ toolTimeoutMs?: number | undefined;
46
56
  fileSync?: boolean | undefined;
47
57
  transcriptSync?: boolean | undefined;
58
+ captureMaxPayloadBytes?: number | undefined;
59
+ auditLog?: boolean | undefined;
48
60
  namespace?: string | undefined;
49
61
  }, {
50
62
  baseUrl: string;
@@ -52,8 +64,11 @@ export declare const configSchema: {
52
64
  autoCapture: boolean;
53
65
  recallLimit: number;
54
66
  recallTimeoutMs: number;
67
+ toolTimeoutMs: number;
55
68
  fileSync: boolean;
56
69
  transcriptSync: boolean;
70
+ captureMaxPayloadBytes: number;
71
+ auditLog: boolean;
57
72
  namespace: string;
58
73
  userId?: string | undefined;
59
74
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/plugin/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwBxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,YAAY;qBACN,OAAO;;;;;;;;;;;;;;;;;;;;;CAGzB,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/plugin/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwBxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,YAAY;qBACN,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGzB,CAAC"}
@@ -22,9 +22,12 @@ export const CortexConfigSchema = z.object({
22
22
  autoRecall: z.boolean().default(true),
23
23
  autoCapture: z.boolean().default(true),
24
24
  recallLimit: z.number().int().min(1).max(50).default(10),
25
- recallTimeoutMs: z.number().int().min(100).max(10000).default(2000),
25
+ recallTimeoutMs: z.number().int().min(100).max(30000).default(10000),
26
+ toolTimeoutMs: z.number().int().min(1000).max(30000).default(10000),
26
27
  fileSync: z.boolean().default(true),
27
28
  transcriptSync: z.boolean().default(true),
29
+ captureMaxPayloadBytes: z.number().int().min(1024).max(1_048_576).default(262_144),
30
+ auditLog: z.boolean().default(false),
28
31
  namespace: z.string().min(1).default("openclaw"),
29
32
  });
30
33
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/plugin/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,QAAQ,GAAG,CAAC;KACf,MAAM,EAAE;KACR,GAAG,CAAC,6BAA6B,CAAC;KAClC,MAAM,CACL,CAAC,GAAG,EAAE,EAAE;IACN,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC9C,wDAAwD;IACxD,IACE,MAAM,CAAC,QAAQ,KAAK,OAAO;QAC3B,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,EACpE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,EACD,EAAE,OAAO,EAAE,0DAA0D,EAAE,CACxE,CAAC;AAEJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,QAAQ,CAAC,OAAO,CACvB,6DAA6D,CAC9D;IACD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACxD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACnE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;CACjD,CAAC,CAAC;AAIH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,CAAC,KAAc;QACtB,OAAO,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/plugin/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,QAAQ,GAAG,CAAC;KACf,MAAM,EAAE;KACR,GAAG,CAAC,6BAA6B,CAAC;KAClC,MAAM,CACL,CAAC,GAAG,EAAE,EAAE;IACN,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC9C,wDAAwD;IACxD,IACE,MAAM,CAAC,QAAQ,KAAK,OAAO;QAC3B,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,EACpE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,EACD,EAAE,OAAO,EAAE,0DAA0D,EAAE,CACxE,CAAC;AAEJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,QAAQ,CAAC,OAAO,CACvB,6DAA6D,CAC9D;IACD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACxD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACpE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACnE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAClF,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;CACjD,CAAC,CAAC;AAIH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,CAAC,KAAc;QACtB,OAAO,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC"}
@@ -82,8 +82,11 @@ declare const plugin: {
82
82
  autoCapture?: boolean | undefined;
83
83
  recallLimit?: number | undefined;
84
84
  recallTimeoutMs?: number | undefined;
85
+ toolTimeoutMs?: number | undefined;
85
86
  fileSync?: boolean | undefined;
86
87
  transcriptSync?: boolean | undefined;
88
+ captureMaxPayloadBytes?: number | undefined;
89
+ auditLog?: boolean | undefined;
87
90
  namespace?: string | undefined;
88
91
  }, {
89
92
  baseUrl: string;
@@ -91,8 +94,11 @@ declare const plugin: {
91
94
  autoCapture: boolean;
92
95
  recallLimit: number;
93
96
  recallTimeoutMs: number;
97
+ toolTimeoutMs: number;
94
98
  fileSync: boolean;
95
99
  transcriptSync: boolean;
100
+ captureMaxPayloadBytes: number;
101
+ auditLog: boolean;
96
102
  namespace: string;
97
103
  userId?: string | undefined;
98
104
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAI3D;AAeD,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAChE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC,CAAC;CACJ;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,UAAU,SAAS;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,EAAE;QACN,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;KACjC,CAAC;IAEF,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAE5F,YAAY,CAAC,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAChC,QAAQ,EAAE,YAAY,GACrB,IAAI,CAAC;IACR,eAAe,CAAC,OAAO,EAAE;QACvB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;QACjD,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;KACjD,GAAG,IAAI,CAAC;IAET,YAAY,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAElF,eAAe,CAAC,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAEtD,qBAAqB,CAAC,CACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,KAAK,IAAI,GACxE,IAAI,CAAC;CACT;AA0ED,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBASI,SAAS;CAmbxB,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -11,6 +11,7 @@ import { LatencyMetrics } from "../internal/metrics/latency-metrics.js";
11
11
  import { loadOrCreateUserId } from "../internal/identity/user-id.js";
12
12
  import { BAKED_API_KEY } from "../internal/identity/api-key.js";
13
13
  import { formatMemories } from "../features/recall/formatter.js";
14
+ import { AuditLogger } from "../internal/audit/audit-logger.js";
14
15
  export function deriveTier(totalSessions) {
15
16
  if (totalSessions >= 30)
16
17
  return 3;
@@ -69,12 +70,12 @@ async function bootstrapClient(client, logger, knowledgeState, userId) {
69
70
  * falling back to the legacy api.on() for older OpenClaw runtimes.
70
71
  */
71
72
  function registerHookCompat(api, hookName, handler, metadata) {
72
- if (api.registerHook) {
73
- api.registerHook(hookName, handler, metadata);
74
- }
75
- else if (api.on) {
73
+ if (api.on) {
76
74
  api.on(hookName, handler);
77
75
  }
76
+ else if (api.registerHook) {
77
+ api.registerHook(hookName, handler, metadata);
78
+ }
78
79
  else {
79
80
  api.logger.warn(`Cortex: cannot register hook "${hookName}" — no registerHook or on method available`);
80
81
  }
@@ -104,11 +105,24 @@ const plugin = {
104
105
  maturity: "unknown",
105
106
  lastChecked: 0,
106
107
  };
108
+ // Session ID for this plugin lifecycle — groups tool-saved memories into
109
+ // a single Cortex SESSION node so total_sessions increments properly.
110
+ const sessionId = randomUUID();
107
111
  // Whether the user explicitly set a namespace vs. relying on default
108
112
  const userSetNamespace = raw.namespace != null;
109
113
  let namespace = config.namespace;
110
114
  let started = false;
111
115
  let watcher = null;
116
+ // Audit logger is created lazily in start(ctx) when workspaceDir is available,
117
+ // or on-demand via the /audit command. The proxy always exists so handlers can
118
+ // start logging without a restart when toggled on at runtime.
119
+ let auditLoggerInner;
120
+ let workspaceDirResolved;
121
+ const auditLoggerProxy = {
122
+ log(entry) {
123
+ return auditLoggerInner?.log(entry) ?? Promise.resolve();
124
+ },
125
+ };
112
126
  // userId: use explicit config value if provided, otherwise load/create a
113
127
  // stable UUID persisted at ~/.openclaw/cortex-user-id. Bootstrap is chained
114
128
  // off the same promise so it always runs with a resolved userId. The capture
@@ -130,16 +144,30 @@ const plugin = {
130
144
  api.logger.info(`Cortex user ID (from config): ${userId}`);
131
145
  }
132
146
  api.logger.info(`Cortex plugin registered (namespace=${namespace})`);
147
+ // First-run data disclosure — log what features are active so users know
148
+ // what data will be sent to the Cortex API.
149
+ const activeFeatures = [];
150
+ if (config.autoRecall)
151
+ activeFeatures.push("auto-recall (sends prompts)");
152
+ if (config.autoCapture)
153
+ activeFeatures.push("auto-capture (sends conversation transcripts)");
154
+ if (config.fileSync)
155
+ activeFeatures.push("file-sync (sends MEMORY.md and daily log changes)");
156
+ if (config.transcriptSync)
157
+ activeFeatures.push("transcript-sync (sends session transcripts)");
158
+ if (activeFeatures.length > 0) {
159
+ api.logger.info(`Cortex data features active: ${activeFeatures.join(", ")}. All data sent over HTTPS to ${config.baseUrl}. See README for details.`);
160
+ }
133
161
  // Async health check + knowledge probe — chained after userId resolves
134
162
  void userIdReady.then(() => bootstrapClient(client, api.logger, knowledgeState, userId));
135
163
  // --- Hooks ---
136
164
  // Auto-Recall: inject relevant memories before every agent turn
137
- registerHookCompat(api, "before_agent_start", createRecallHandler(client, config, api.logger, recallMetrics, knowledgeState, () => userId), {
165
+ registerHookCompat(api, "before_agent_start", createRecallHandler(client, config, api.logger, recallMetrics, knowledgeState, () => userId, auditLoggerProxy), {
138
166
  name: "openclaw-cortex.recall",
139
167
  description: "Inject relevant Cortex memories before agent turn",
140
168
  });
141
169
  // Auto-Capture: extract facts after agent responses
142
- registerHookCompat(api, "agent_end", createCaptureHandler(client, config, api.logger, retryQueue, knowledgeState, () => userId, userIdReady), {
170
+ registerHookCompat(api, "agent_end", createCaptureHandler(client, config, api.logger, retryQueue, knowledgeState, () => userId, userIdReady, sessionId, auditLoggerProxy), {
143
171
  name: "openclaw-cortex.capture",
144
172
  description: "Extract and store facts from conversation after agent turn",
145
173
  });
@@ -169,8 +197,15 @@ const plugin = {
169
197
  api.logger.info(`Cortex tool: cortex_search_memory called (query="${query.slice(0, 80)}", limit=${limit})`);
170
198
  if (userIdReady)
171
199
  await userIdReady;
200
+ void auditLoggerProxy.log({
201
+ feature: "tool-search-memory",
202
+ method: "POST",
203
+ endpoint: "/v1/recall",
204
+ payload: query,
205
+ userId,
206
+ });
172
207
  try {
173
- const response = await client.recall(query, config.recallTimeoutMs, {
208
+ const response = await client.recall(query, config.toolTimeoutMs, {
174
209
  limit,
175
210
  userId: userId,
176
211
  queryType: "combined",
@@ -210,16 +245,37 @@ const plugin = {
210
245
  api.logger.info(`Cortex tool: cortex_save_memory called (text="${text.slice(0, 80)}")`);
211
246
  if (userIdReady)
212
247
  await userIdReady;
248
+ void auditLoggerProxy.log({
249
+ feature: "tool-save-memory",
250
+ method: "POST",
251
+ endpoint: "/v1/remember",
252
+ payload: text,
253
+ sessionId,
254
+ userId,
255
+ });
213
256
  try {
214
- const res = await client.remember(text, undefined, undefined, undefined, userId);
257
+ const res = await client.remember(text, sessionId, undefined, new Date().toISOString(), userId);
215
258
  if (knowledgeState && res.memories_created > 0) {
216
259
  knowledgeState.hasMemories = true;
217
260
  }
218
261
  api.logger.info(`Cortex tool: cortex_save_memory created ${res.memories_created} memories, entities: ${res.entities_found.join(", ") || "none"}`);
262
+ const parts = [`Saved ${res.memories_created} memory/memories.`];
263
+ if (res.entities_found.length)
264
+ parts.push(`Entities: ${res.entities_found.join(", ")}.`);
265
+ if (res.facts.length)
266
+ parts.push(`Facts: ${res.facts.join("; ")}.`);
267
+ if (res.emotions.length)
268
+ parts.push(`Emotions: ${res.emotions.join(", ")}.`);
269
+ if (res.values.length)
270
+ parts.push(`Values: ${res.values.join(", ")}.`);
271
+ if (res.beliefs.length)
272
+ parts.push(`Beliefs: ${res.beliefs.join("; ")}.`);
273
+ if (res.insights.length)
274
+ parts.push(`Insights: ${res.insights.join("; ")}.`);
219
275
  return {
220
276
  content: [{
221
277
  type: "text",
222
- text: `Saved ${res.memories_created} memory/memories. Entities found: ${res.entities_found.join(", ") || "none"}.`,
278
+ text: parts.join(" "),
223
279
  }],
224
280
  };
225
281
  }
@@ -263,8 +319,15 @@ const plugin = {
263
319
  }
264
320
  }
265
321
  // With args — search memories
322
+ void auditLoggerProxy.log({
323
+ feature: "command-memories",
324
+ method: "POST",
325
+ endpoint: "/v1/recall",
326
+ payload: query,
327
+ userId,
328
+ });
266
329
  try {
267
- const response = await client.recall(query, config.recallTimeoutMs, {
330
+ const response = await client.recall(query, config.toolTimeoutMs, {
268
331
  limit: config.recallLimit,
269
332
  userId,
270
333
  queryType: "combined",
@@ -280,7 +343,46 @@ const plugin = {
280
343
  }
281
344
  },
282
345
  });
283
- api.logger.info("Cortex command registered: /memories");
346
+ api.registerCommand({
347
+ name: "audit",
348
+ description: "Toggle or check Cortex audit log (records all data sent to Cortex)",
349
+ acceptsArgs: true,
350
+ handler: (ctx) => {
351
+ const arg = ctx.args?.trim().toLowerCase();
352
+ if (arg === "on") {
353
+ if (!workspaceDirResolved) {
354
+ return { text: "Cannot enable audit log — no workspace directory available." };
355
+ }
356
+ if (auditLoggerInner) {
357
+ return { text: `Audit log is already on.\nLog path: ${workspaceDirResolved}/.cortex/audit/` };
358
+ }
359
+ auditLoggerInner = new AuditLogger(workspaceDirResolved, api.logger);
360
+ api.logger.info(`Cortex audit log enabled via command: ${workspaceDirResolved}/.cortex/audit/`);
361
+ return { text: `Audit log enabled.\nLog path: ${workspaceDirResolved}/.cortex/audit/` };
362
+ }
363
+ if (arg === "off") {
364
+ if (!auditLoggerInner) {
365
+ return { text: "Audit log is already off." };
366
+ }
367
+ auditLoggerInner = undefined;
368
+ api.logger.info("Cortex audit log disabled via command");
369
+ return { text: "Audit log disabled. Existing log files are preserved." };
370
+ }
371
+ // No args — show status
372
+ const status = auditLoggerInner ? "on" : "off";
373
+ const lines = [
374
+ `**Cortex Audit Log**`,
375
+ `- Status: ${status}`,
376
+ `- Config default: ${config.auditLog ? "on" : "off"}`,
377
+ ];
378
+ if (workspaceDirResolved) {
379
+ lines.push(`- Log path: ${workspaceDirResolved}/.cortex/audit/`);
380
+ }
381
+ lines.push("", "Usage: `/audit on` · `/audit off`");
382
+ return { text: lines.join("\n") };
383
+ },
384
+ });
385
+ api.logger.info("Cortex commands registered: /memories, /audit");
284
386
  }
285
387
  // --- Gateway RPC ---
286
388
  if (api.registerGatewayMethod) {
@@ -319,6 +421,13 @@ const plugin = {
319
421
  }
320
422
  started = true;
321
423
  retryQueue.start();
424
+ // Capture workspaceDir for runtime audit toggle via /audit command
425
+ workspaceDirResolved = ctx.workspaceDir;
426
+ // Initialize audit logger if enabled via config
427
+ if (config.auditLog && ctx.workspaceDir) {
428
+ auditLoggerInner = new AuditLogger(ctx.workspaceDir, api.logger);
429
+ api.logger.info(`Cortex audit log enabled: ${ctx.workspaceDir}/.cortex/audit/`);
430
+ }
322
431
  // Derive workspace-scoped namespace when user didn't set one explicitly
323
432
  if (!userSetNamespace && ctx.workspaceDir) {
324
433
  namespace = deriveNamespace(ctx.workspaceDir);
@@ -331,7 +440,7 @@ const plugin = {
331
440
  api.logger.warn("Cortex file sync: no workspaceDir, skipping");
332
441
  }
333
442
  else {
334
- const newWatcher = new FileSyncWatcher(workspaceDir, client, namespace, api.logger, retryQueue, { transcripts: config.transcriptSync }, () => userId);
443
+ const newWatcher = new FileSyncWatcher(workspaceDir, client, namespace, api.logger, retryQueue, { transcripts: config.transcriptSync }, () => userId, auditLoggerProxy);
335
444
  newWatcher.start();
336
445
  watcher = newWatcher;
337
446
  api.logger.info("Cortex file sync started");