cmp-standards 2.8.0 → 2.9.1

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 (124) hide show
  1. package/dist/analytics/CrossProjectAnalytics.d.ts +128 -0
  2. package/dist/analytics/CrossProjectAnalytics.d.ts.map +1 -0
  3. package/dist/analytics/CrossProjectAnalytics.js +431 -0
  4. package/dist/analytics/CrossProjectAnalytics.js.map +1 -0
  5. package/dist/analytics/index.d.ts +1 -0
  6. package/dist/analytics/index.d.ts.map +1 -1
  7. package/dist/analytics/index.js +2 -0
  8. package/dist/analytics/index.js.map +1 -1
  9. package/dist/cache/EmbeddingCache.d.ts +6 -4
  10. package/dist/cache/EmbeddingCache.d.ts.map +1 -1
  11. package/dist/cache/EmbeddingCache.js +28 -17
  12. package/dist/cache/EmbeddingCache.js.map +1 -1
  13. package/dist/cli/index.js +247 -141
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/ui.d.ts +134 -0
  16. package/dist/cli/ui.d.ts.map +1 -0
  17. package/dist/cli/ui.js +311 -0
  18. package/dist/cli/ui.js.map +1 -0
  19. package/dist/dashboard/tokens.d.ts +228 -0
  20. package/dist/dashboard/tokens.d.ts.map +1 -0
  21. package/dist/dashboard/tokens.js +450 -0
  22. package/dist/dashboard/tokens.js.map +1 -0
  23. package/dist/dashboard/ui.d.ts +3 -0
  24. package/dist/dashboard/ui.d.ts.map +1 -1
  25. package/dist/dashboard/ui.js +95 -61
  26. package/dist/dashboard/ui.js.map +1 -1
  27. package/dist/db/cloud.d.ts +11 -0
  28. package/dist/db/cloud.d.ts.map +1 -1
  29. package/dist/db/cloud.js +49 -1
  30. package/dist/db/cloud.js.map +1 -1
  31. package/dist/db/migrations.d.ts +1 -0
  32. package/dist/db/migrations.d.ts.map +1 -1
  33. package/dist/db/migrations.js +109 -0
  34. package/dist/db/migrations.js.map +1 -1
  35. package/dist/experts/ExpertVotePersistence.d.ts +86 -0
  36. package/dist/experts/ExpertVotePersistence.d.ts.map +1 -0
  37. package/dist/experts/ExpertVotePersistence.js +234 -0
  38. package/dist/experts/ExpertVotePersistence.js.map +1 -0
  39. package/dist/experts/index.d.ts +1 -0
  40. package/dist/experts/index.d.ts.map +1 -1
  41. package/dist/experts/index.js +2 -0
  42. package/dist/experts/index.js.map +1 -1
  43. package/dist/hooks/cloud-post-tool-use.d.ts +5 -0
  44. package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -1
  45. package/dist/hooks/cloud-post-tool-use.js +43 -10
  46. package/dist/hooks/cloud-post-tool-use.js.map +1 -1
  47. package/dist/hooks/cloud-session-start.d.ts.map +1 -1
  48. package/dist/hooks/cloud-session-start.js +64 -0
  49. package/dist/hooks/cloud-session-start.js.map +1 -1
  50. package/dist/hooks/index.d.ts +2 -0
  51. package/dist/hooks/index.d.ts.map +1 -1
  52. package/dist/hooks/index.js +4 -0
  53. package/dist/hooks/index.js.map +1 -1
  54. package/dist/hooks/session-end.d.ts +67 -0
  55. package/dist/hooks/session-end.d.ts.map +1 -0
  56. package/dist/hooks/session-end.js +268 -0
  57. package/dist/hooks/session-end.js.map +1 -0
  58. package/dist/hooks/startup-verify.d.ts +31 -0
  59. package/dist/hooks/startup-verify.d.ts.map +1 -0
  60. package/dist/hooks/startup-verify.js +360 -0
  61. package/dist/hooks/startup-verify.js.map +1 -0
  62. package/dist/mcp/schemas.d.ts +2 -2
  63. package/dist/performance/Debouncer.d.ts +57 -0
  64. package/dist/performance/Debouncer.d.ts.map +1 -1
  65. package/dist/performance/Debouncer.js +149 -0
  66. package/dist/performance/Debouncer.js.map +1 -1
  67. package/dist/performance/index.d.ts +1 -1
  68. package/dist/performance/index.d.ts.map +1 -1
  69. package/dist/performance/index.js +3 -1
  70. package/dist/performance/index.js.map +1 -1
  71. package/dist/plugins/PluginManager.d.ts +160 -0
  72. package/dist/plugins/PluginManager.d.ts.map +1 -0
  73. package/dist/plugins/PluginManager.js +417 -0
  74. package/dist/plugins/PluginManager.js.map +1 -0
  75. package/dist/plugins/index.d.ts +7 -0
  76. package/dist/plugins/index.d.ts.map +1 -0
  77. package/dist/plugins/index.js +7 -0
  78. package/dist/plugins/index.js.map +1 -0
  79. package/dist/schema/expert-types.d.ts +2 -2
  80. package/dist/services/AuditLog.d.ts +205 -0
  81. package/dist/services/AuditLog.d.ts.map +1 -0
  82. package/dist/services/AuditLog.js +352 -0
  83. package/dist/services/AuditLog.js.map +1 -0
  84. package/dist/services/FeedbackCollector.d.ts +71 -0
  85. package/dist/services/FeedbackCollector.d.ts.map +1 -0
  86. package/dist/services/FeedbackCollector.js +236 -0
  87. package/dist/services/FeedbackCollector.js.map +1 -0
  88. package/dist/services/GitIntegration.d.ts +140 -0
  89. package/dist/services/GitIntegration.d.ts.map +1 -0
  90. package/dist/services/GitIntegration.js +423 -0
  91. package/dist/services/GitIntegration.js.map +1 -0
  92. package/dist/services/HookVerifier.d.ts +95 -0
  93. package/dist/services/HookVerifier.d.ts.map +1 -0
  94. package/dist/services/HookVerifier.js +493 -0
  95. package/dist/services/HookVerifier.js.map +1 -0
  96. package/dist/services/MemoryVersioning.d.ts +108 -0
  97. package/dist/services/MemoryVersioning.d.ts.map +1 -0
  98. package/dist/services/MemoryVersioning.js +281 -0
  99. package/dist/services/MemoryVersioning.js.map +1 -0
  100. package/dist/services/context-injector.d.ts +8 -0
  101. package/dist/services/context-injector.d.ts.map +1 -1
  102. package/dist/services/context-injector.js +19 -2
  103. package/dist/services/context-injector.js.map +1 -1
  104. package/dist/services/index.d.ts +6 -1
  105. package/dist/services/index.d.ts.map +1 -1
  106. package/dist/services/index.js +8 -1
  107. package/dist/services/index.js.map +1 -1
  108. package/dist/services/memory-router.d.ts +8 -0
  109. package/dist/services/memory-router.d.ts.map +1 -1
  110. package/dist/services/memory-router.js +19 -2
  111. package/dist/services/memory-router.js.map +1 -1
  112. package/dist/services/pattern-tracker.d.ts +63 -0
  113. package/dist/services/pattern-tracker.d.ts.map +1 -1
  114. package/dist/services/pattern-tracker.js +180 -2
  115. package/dist/services/pattern-tracker.js.map +1 -1
  116. package/dist/services/semantic-search.d.ts +4 -0
  117. package/dist/services/semantic-search.d.ts.map +1 -1
  118. package/dist/services/semantic-search.js +53 -13
  119. package/dist/services/semantic-search.js.map +1 -1
  120. package/dist/types/index.d.ts +1 -0
  121. package/dist/types/index.d.ts.map +1 -1
  122. package/dist/types/index.js +1 -0
  123. package/dist/types/index.js.map +1 -1
  124. package/package.json +4 -1
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Plugin System Exports
3
+ *
4
+ * @version 2.9.0
5
+ */
6
+ export { PluginManager, getPluginManager, resetPluginManager, createPlugin, createPluginFactory, type Plugin, type PluginContext, type PluginMetadata, type PluginFactory, type PluginConfig, type PluginStatus, } from './PluginManager.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Plugin System Exports
3
+ *
4
+ * @version 2.9.0
5
+ */
6
+ export { PluginManager, getPluginManager, resetPluginManager, createPlugin, createPluginFactory, } from './PluginManager.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,GAOpB,MAAM,oBAAoB,CAAA"}
@@ -246,7 +246,7 @@ export declare const PatternStatContentSchema: z.ZodObject<{
246
246
  autoImproveTriggered: boolean;
247
247
  occurrenceCount: number;
248
248
  avgSeverity: number;
249
- trend: "increasing" | "decreasing" | "stable";
249
+ trend: "increasing" | "stable" | "decreasing";
250
250
  isPersistent: boolean;
251
251
  description?: string | undefined;
252
252
  firstSeen?: string | undefined;
@@ -263,7 +263,7 @@ export declare const PatternStatContentSchema: z.ZodObject<{
263
263
  autoImproveTriggered?: boolean | undefined;
264
264
  occurrenceCount?: number | undefined;
265
265
  avgSeverity?: number | undefined;
266
- trend?: "increasing" | "decreasing" | "stable" | undefined;
266
+ trend?: "increasing" | "stable" | "decreasing" | undefined;
267
267
  isPersistent?: boolean | undefined;
268
268
  eslintRuleId?: string | undefined;
269
269
  effectivenessScore?: number | undefined;
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Audit Log Service
3
+ *
4
+ * Tracks all CRUD operations on memories and items for:
5
+ * - Compliance and accountability
6
+ * - Change history tracking
7
+ * - Debugging and troubleshooting
8
+ * - Analytics and usage patterns
9
+ *
10
+ * @version 2.9.0
11
+ */
12
+ import type { DevSystem, DevType } from '../types/index.js';
13
+ export type AuditAction = 'create' | 'read' | 'update' | 'delete' | 'search' | 'feedback' | 'export' | 'import' | 'archive' | 'restore';
14
+ export type AuditActor = 'user' | 'claude' | 'system' | 'api' | 'scheduler' | 'migration';
15
+ export interface AuditEntry {
16
+ id: string;
17
+ timestamp: string;
18
+ system: DevSystem;
19
+ action: AuditAction;
20
+ actor: AuditActor;
21
+ actorId?: string;
22
+ itemType?: DevType;
23
+ itemId?: string;
24
+ itemTitle?: string;
25
+ details?: Record<string, unknown>;
26
+ changes?: {
27
+ before?: Record<string, unknown>;
28
+ after?: Record<string, unknown>;
29
+ };
30
+ metadata?: {
31
+ sessionId?: string;
32
+ requestId?: string;
33
+ duration?: number;
34
+ ip?: string;
35
+ userAgent?: string;
36
+ };
37
+ }
38
+ export interface AuditQueryOptions {
39
+ system?: DevSystem;
40
+ action?: AuditAction;
41
+ actor?: AuditActor;
42
+ itemType?: DevType;
43
+ itemId?: string;
44
+ startDate?: Date;
45
+ endDate?: Date;
46
+ limit?: number;
47
+ offset?: number;
48
+ }
49
+ export interface AuditStats {
50
+ totalEntries: number;
51
+ byAction: Record<AuditAction, number>;
52
+ byActor: Record<AuditActor, number>;
53
+ byItemType: Record<string, number>;
54
+ recentActivity: {
55
+ last24h: number;
56
+ last7d: number;
57
+ last30d: number;
58
+ };
59
+ }
60
+ export declare class AuditLogService {
61
+ private entries;
62
+ private maxEntries;
63
+ private system;
64
+ private flushCallback?;
65
+ private flushInterval;
66
+ private flushTimer?;
67
+ private pendingFlush;
68
+ constructor(options: {
69
+ system: DevSystem;
70
+ maxEntries?: number;
71
+ flushCallback?: (entries: AuditEntry[]) => Promise<void>;
72
+ flushInterval?: number;
73
+ });
74
+ /**
75
+ * Log an audit entry
76
+ */
77
+ log(entry: Omit<AuditEntry, 'id' | 'timestamp' | 'system'>): AuditEntry;
78
+ /**
79
+ * Log a create action
80
+ */
81
+ logCreate(options: {
82
+ actor: AuditActor;
83
+ actorId?: string;
84
+ itemType: DevType;
85
+ itemId: string;
86
+ itemTitle?: string;
87
+ details?: Record<string, unknown>;
88
+ metadata?: AuditEntry['metadata'];
89
+ }): AuditEntry;
90
+ /**
91
+ * Log a read/access action
92
+ */
93
+ logRead(options: {
94
+ actor: AuditActor;
95
+ actorId?: string;
96
+ itemType: DevType;
97
+ itemId: string;
98
+ metadata?: AuditEntry['metadata'];
99
+ }): AuditEntry;
100
+ /**
101
+ * Log an update action with before/after changes
102
+ */
103
+ logUpdate(options: {
104
+ actor: AuditActor;
105
+ actorId?: string;
106
+ itemType: DevType;
107
+ itemId: string;
108
+ itemTitle?: string;
109
+ before: Record<string, unknown>;
110
+ after: Record<string, unknown>;
111
+ metadata?: AuditEntry['metadata'];
112
+ }): AuditEntry;
113
+ /**
114
+ * Log a delete action
115
+ */
116
+ logDelete(options: {
117
+ actor: AuditActor;
118
+ actorId?: string;
119
+ itemType: DevType;
120
+ itemId: string;
121
+ itemTitle?: string;
122
+ details?: Record<string, unknown>;
123
+ metadata?: AuditEntry['metadata'];
124
+ }): AuditEntry;
125
+ /**
126
+ * Log a search action
127
+ */
128
+ logSearch(options: {
129
+ actor: AuditActor;
130
+ actorId?: string;
131
+ details: {
132
+ query: string;
133
+ resultCount: number;
134
+ filters?: Record<string, unknown>;
135
+ };
136
+ metadata?: AuditEntry['metadata'];
137
+ }): AuditEntry;
138
+ /**
139
+ * Log feedback action
140
+ */
141
+ logFeedback(options: {
142
+ actor: AuditActor;
143
+ actorId?: string;
144
+ itemId: string;
145
+ details: {
146
+ helpful: boolean;
147
+ comment?: string;
148
+ };
149
+ metadata?: AuditEntry['metadata'];
150
+ }): AuditEntry;
151
+ /**
152
+ * Query audit log entries
153
+ */
154
+ query(options?: AuditQueryOptions): AuditEntry[];
155
+ /**
156
+ * Get history for a specific item
157
+ */
158
+ getItemHistory(itemId: string): AuditEntry[];
159
+ /**
160
+ * Get statistics
161
+ */
162
+ getStats(): AuditStats;
163
+ /**
164
+ * Export entries to JSON
165
+ */
166
+ export(options?: AuditQueryOptions): string;
167
+ /**
168
+ * Import entries from JSON
169
+ */
170
+ import(json: string): number;
171
+ /**
172
+ * Clear all entries
173
+ */
174
+ clear(): void;
175
+ /**
176
+ * Get total entry count
177
+ */
178
+ count(): number;
179
+ /**
180
+ * Flush pending entries to persistent storage
181
+ */
182
+ flush(): Promise<number>;
183
+ /**
184
+ * Stop the service and flush remaining entries
185
+ */
186
+ stop(): Promise<void>;
187
+ private startFlushTimer;
188
+ private validateEntry;
189
+ }
190
+ export declare function getAuditLog(system?: DevSystem): AuditLogService;
191
+ export declare function resetAuditLog(): void;
192
+ /**
193
+ * Create a new audit log service with custom options
194
+ */
195
+ export declare function createAuditLog(options: {
196
+ system: DevSystem;
197
+ maxEntries?: number;
198
+ flushCallback?: (entries: AuditEntry[]) => Promise<void>;
199
+ flushInterval?: number;
200
+ }): AuditLogService;
201
+ /**
202
+ * Decorator function to automatically log method calls
203
+ */
204
+ export declare function audited(action: AuditAction, actor?: AuditActor): <T extends (...args: unknown[]) => unknown>(_target: unknown, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
205
+ //# sourceMappingURL=AuditLog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditLog.d.ts","sourceRoot":"","sources":["../../src/services/AuditLog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Audit Log Service
3
+ *
4
+ * Tracks all CRUD operations on memories and items for:
5
+ * - Compliance and accountability
6
+ * - Change history tracking
7
+ * - Debugging and troubleshooting
8
+ * - Analytics and usage patterns
9
+ *
10
+ * @version 2.9.0
11
+ */
12
+ import { ulid } from 'ulid';
13
+ // =============================================================================
14
+ // Audit Log Service
15
+ // =============================================================================
16
+ export class AuditLogService {
17
+ entries = [];
18
+ maxEntries;
19
+ system;
20
+ flushCallback;
21
+ flushInterval;
22
+ flushTimer;
23
+ pendingFlush = [];
24
+ constructor(options) {
25
+ this.system = options.system;
26
+ this.maxEntries = options.maxEntries ?? 10000;
27
+ this.flushCallback = options.flushCallback;
28
+ this.flushInterval = options.flushInterval ?? 60000; // 1 minute default
29
+ if (this.flushCallback) {
30
+ this.startFlushTimer();
31
+ }
32
+ }
33
+ /**
34
+ * Log an audit entry
35
+ */
36
+ log(entry) {
37
+ const fullEntry = {
38
+ id: ulid(),
39
+ timestamp: new Date().toISOString(),
40
+ system: this.system,
41
+ ...entry,
42
+ };
43
+ this.entries.push(fullEntry);
44
+ this.pendingFlush.push(fullEntry);
45
+ // Trim if over max
46
+ if (this.entries.length > this.maxEntries) {
47
+ this.entries = this.entries.slice(-this.maxEntries);
48
+ }
49
+ return fullEntry;
50
+ }
51
+ /**
52
+ * Log a create action
53
+ */
54
+ logCreate(options) {
55
+ return this.log({
56
+ action: 'create',
57
+ ...options,
58
+ });
59
+ }
60
+ /**
61
+ * Log a read/access action
62
+ */
63
+ logRead(options) {
64
+ return this.log({
65
+ action: 'read',
66
+ ...options,
67
+ });
68
+ }
69
+ /**
70
+ * Log an update action with before/after changes
71
+ */
72
+ logUpdate(options) {
73
+ return this.log({
74
+ action: 'update',
75
+ actor: options.actor,
76
+ actorId: options.actorId,
77
+ itemType: options.itemType,
78
+ itemId: options.itemId,
79
+ itemTitle: options.itemTitle,
80
+ changes: {
81
+ before: options.before,
82
+ after: options.after,
83
+ },
84
+ metadata: options.metadata,
85
+ });
86
+ }
87
+ /**
88
+ * Log a delete action
89
+ */
90
+ logDelete(options) {
91
+ return this.log({
92
+ action: 'delete',
93
+ ...options,
94
+ });
95
+ }
96
+ /**
97
+ * Log a search action
98
+ */
99
+ logSearch(options) {
100
+ return this.log({
101
+ action: 'search',
102
+ ...options,
103
+ });
104
+ }
105
+ /**
106
+ * Log feedback action
107
+ */
108
+ logFeedback(options) {
109
+ return this.log({
110
+ action: 'feedback',
111
+ itemType: 'memory',
112
+ ...options,
113
+ });
114
+ }
115
+ /**
116
+ * Query audit log entries
117
+ */
118
+ query(options = {}) {
119
+ let results = this.entries;
120
+ if (options.system) {
121
+ results = results.filter(e => e.system === options.system);
122
+ }
123
+ if (options.action) {
124
+ results = results.filter(e => e.action === options.action);
125
+ }
126
+ if (options.actor) {
127
+ results = results.filter(e => e.actor === options.actor);
128
+ }
129
+ if (options.itemType) {
130
+ results = results.filter(e => e.itemType === options.itemType);
131
+ }
132
+ if (options.itemId) {
133
+ results = results.filter(e => e.itemId === options.itemId);
134
+ }
135
+ if (options.startDate) {
136
+ results = results.filter(e => new Date(e.timestamp) >= options.startDate);
137
+ }
138
+ if (options.endDate) {
139
+ results = results.filter(e => new Date(e.timestamp) <= options.endDate);
140
+ }
141
+ // Sort by timestamp descending (most recent first)
142
+ results.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
143
+ // Apply pagination
144
+ const offset = options.offset ?? 0;
145
+ const limit = options.limit ?? 100;
146
+ return results.slice(offset, offset + limit);
147
+ }
148
+ /**
149
+ * Get history for a specific item
150
+ */
151
+ getItemHistory(itemId) {
152
+ return this.entries
153
+ .filter(e => e.itemId === itemId)
154
+ .sort((a, b) => a.timestamp.localeCompare(b.timestamp));
155
+ }
156
+ /**
157
+ * Get statistics
158
+ */
159
+ getStats() {
160
+ const now = new Date();
161
+ const last24h = new Date(now.getTime() - 24 * 60 * 60 * 1000);
162
+ const last7d = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
163
+ const last30d = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
164
+ const byAction = {};
165
+ const byActor = {};
166
+ const byItemType = {};
167
+ let recentLast24h = 0;
168
+ let recentLast7d = 0;
169
+ let recentLast30d = 0;
170
+ for (const entry of this.entries) {
171
+ // Count by action
172
+ byAction[entry.action] = (byAction[entry.action] ?? 0) + 1;
173
+ // Count by actor
174
+ byActor[entry.actor] = (byActor[entry.actor] ?? 0) + 1;
175
+ // Count by item type
176
+ if (entry.itemType) {
177
+ byItemType[entry.itemType] = (byItemType[entry.itemType] ?? 0) + 1;
178
+ }
179
+ // Count recent activity
180
+ const entryDate = new Date(entry.timestamp);
181
+ if (entryDate >= last24h)
182
+ recentLast24h++;
183
+ if (entryDate >= last7d)
184
+ recentLast7d++;
185
+ if (entryDate >= last30d)
186
+ recentLast30d++;
187
+ }
188
+ return {
189
+ totalEntries: this.entries.length,
190
+ byAction: byAction,
191
+ byActor: byActor,
192
+ byItemType,
193
+ recentActivity: {
194
+ last24h: recentLast24h,
195
+ last7d: recentLast7d,
196
+ last30d: recentLast30d,
197
+ },
198
+ };
199
+ }
200
+ /**
201
+ * Export entries to JSON
202
+ */
203
+ export(options) {
204
+ const entries = this.query(options);
205
+ return JSON.stringify(entries, null, 2);
206
+ }
207
+ /**
208
+ * Import entries from JSON
209
+ */
210
+ import(json) {
211
+ try {
212
+ const entries = JSON.parse(json);
213
+ let imported = 0;
214
+ for (const entry of entries) {
215
+ if (this.validateEntry(entry)) {
216
+ this.entries.push(entry);
217
+ imported++;
218
+ }
219
+ }
220
+ // Trim if over max
221
+ if (this.entries.length > this.maxEntries) {
222
+ this.entries = this.entries.slice(-this.maxEntries);
223
+ }
224
+ return imported;
225
+ }
226
+ catch {
227
+ return 0;
228
+ }
229
+ }
230
+ /**
231
+ * Clear all entries
232
+ */
233
+ clear() {
234
+ this.entries = [];
235
+ this.pendingFlush = [];
236
+ }
237
+ /**
238
+ * Get total entry count
239
+ */
240
+ count() {
241
+ return this.entries.length;
242
+ }
243
+ /**
244
+ * Flush pending entries to persistent storage
245
+ */
246
+ async flush() {
247
+ if (!this.flushCallback || this.pendingFlush.length === 0) {
248
+ return 0;
249
+ }
250
+ const toFlush = [...this.pendingFlush];
251
+ this.pendingFlush = [];
252
+ try {
253
+ await this.flushCallback(toFlush);
254
+ return toFlush.length;
255
+ }
256
+ catch (error) {
257
+ // Re-add failed entries to pending
258
+ this.pendingFlush.unshift(...toFlush);
259
+ throw error;
260
+ }
261
+ }
262
+ /**
263
+ * Stop the service and flush remaining entries
264
+ */
265
+ async stop() {
266
+ if (this.flushTimer) {
267
+ clearInterval(this.flushTimer);
268
+ this.flushTimer = undefined;
269
+ }
270
+ await this.flush();
271
+ }
272
+ startFlushTimer() {
273
+ this.flushTimer = setInterval(() => {
274
+ this.flush().catch(err => {
275
+ console.error('[AuditLog] Flush failed:', err);
276
+ });
277
+ }, this.flushInterval);
278
+ }
279
+ validateEntry(entry) {
280
+ if (!entry || typeof entry !== 'object')
281
+ return false;
282
+ const e = entry;
283
+ return (typeof e.id === 'string' &&
284
+ typeof e.timestamp === 'string' &&
285
+ typeof e.action === 'string' &&
286
+ typeof e.actor === 'string');
287
+ }
288
+ }
289
+ // =============================================================================
290
+ // Singleton Instance
291
+ // =============================================================================
292
+ let instance = null;
293
+ export function getAuditLog(system = 'ECOSYSTEM') {
294
+ if (!instance) {
295
+ instance = new AuditLogService({
296
+ system,
297
+ });
298
+ }
299
+ return instance;
300
+ }
301
+ export function resetAuditLog() {
302
+ if (instance) {
303
+ instance.stop().catch(() => { });
304
+ instance = null;
305
+ }
306
+ }
307
+ /**
308
+ * Create a new audit log service with custom options
309
+ */
310
+ export function createAuditLog(options) {
311
+ return new AuditLogService(options);
312
+ }
313
+ // =============================================================================
314
+ // Convenience Decorators/Wrappers
315
+ // =============================================================================
316
+ /**
317
+ * Decorator function to automatically log method calls
318
+ */
319
+ export function audited(action, actor = 'system') {
320
+ return function (_target, propertyKey, descriptor) {
321
+ const originalMethod = descriptor.value;
322
+ descriptor.value = function (...args) {
323
+ const startTime = Date.now();
324
+ const result = originalMethod.apply(this, args);
325
+ // Handle both sync and async methods
326
+ if (result instanceof Promise) {
327
+ return result.then(res => {
328
+ getAuditLog().log({
329
+ action,
330
+ actor,
331
+ details: {
332
+ method: propertyKey,
333
+ duration: Date.now() - startTime,
334
+ },
335
+ });
336
+ return res;
337
+ });
338
+ }
339
+ getAuditLog().log({
340
+ action,
341
+ actor,
342
+ details: {
343
+ method: propertyKey,
344
+ duration: Date.now() - startTime,
345
+ },
346
+ });
347
+ return result;
348
+ };
349
+ return descriptor;
350
+ };
351
+ }
352
+ //# sourceMappingURL=AuditLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditLog.js","sourceRoot":"","sources":["../../src/services/AuditLog.ts"],"names":[],"mappings":"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"}