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.
- package/dist/analytics/CrossProjectAnalytics.d.ts +128 -0
- package/dist/analytics/CrossProjectAnalytics.d.ts.map +1 -0
- package/dist/analytics/CrossProjectAnalytics.js +431 -0
- package/dist/analytics/CrossProjectAnalytics.js.map +1 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +2 -0
- package/dist/analytics/index.js.map +1 -1
- package/dist/cache/EmbeddingCache.d.ts +6 -4
- package/dist/cache/EmbeddingCache.d.ts.map +1 -1
- package/dist/cache/EmbeddingCache.js +28 -17
- package/dist/cache/EmbeddingCache.js.map +1 -1
- package/dist/cli/index.js +247 -141
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui.d.ts +134 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +311 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/dashboard/tokens.d.ts +228 -0
- package/dist/dashboard/tokens.d.ts.map +1 -0
- package/dist/dashboard/tokens.js +450 -0
- package/dist/dashboard/tokens.js.map +1 -0
- package/dist/dashboard/ui.d.ts +3 -0
- package/dist/dashboard/ui.d.ts.map +1 -1
- package/dist/dashboard/ui.js +95 -61
- package/dist/dashboard/ui.js.map +1 -1
- package/dist/db/cloud.d.ts +11 -0
- package/dist/db/cloud.d.ts.map +1 -1
- package/dist/db/cloud.js +49 -1
- package/dist/db/cloud.js.map +1 -1
- package/dist/db/migrations.d.ts +1 -0
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +109 -0
- package/dist/db/migrations.js.map +1 -1
- package/dist/experts/ExpertVotePersistence.d.ts +86 -0
- package/dist/experts/ExpertVotePersistence.d.ts.map +1 -0
- package/dist/experts/ExpertVotePersistence.js +234 -0
- package/dist/experts/ExpertVotePersistence.js.map +1 -0
- package/dist/experts/index.d.ts +1 -0
- package/dist/experts/index.d.ts.map +1 -1
- package/dist/experts/index.js +2 -0
- package/dist/experts/index.js.map +1 -1
- package/dist/hooks/cloud-post-tool-use.d.ts +5 -0
- package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -1
- package/dist/hooks/cloud-post-tool-use.js +43 -10
- package/dist/hooks/cloud-post-tool-use.js.map +1 -1
- package/dist/hooks/cloud-session-start.d.ts.map +1 -1
- package/dist/hooks/cloud-session-start.js +64 -0
- package/dist/hooks/cloud-session-start.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/session-end.d.ts +67 -0
- package/dist/hooks/session-end.d.ts.map +1 -0
- package/dist/hooks/session-end.js +268 -0
- package/dist/hooks/session-end.js.map +1 -0
- package/dist/hooks/startup-verify.d.ts +31 -0
- package/dist/hooks/startup-verify.d.ts.map +1 -0
- package/dist/hooks/startup-verify.js +360 -0
- package/dist/hooks/startup-verify.js.map +1 -0
- package/dist/mcp/schemas.d.ts +2 -2
- package/dist/performance/Debouncer.d.ts +57 -0
- package/dist/performance/Debouncer.d.ts.map +1 -1
- package/dist/performance/Debouncer.js +149 -0
- package/dist/performance/Debouncer.js.map +1 -1
- package/dist/performance/index.d.ts +1 -1
- package/dist/performance/index.d.ts.map +1 -1
- package/dist/performance/index.js +3 -1
- package/dist/performance/index.js.map +1 -1
- package/dist/plugins/PluginManager.d.ts +160 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +417 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +7 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/schema/expert-types.d.ts +2 -2
- package/dist/services/AuditLog.d.ts +205 -0
- package/dist/services/AuditLog.d.ts.map +1 -0
- package/dist/services/AuditLog.js +352 -0
- package/dist/services/AuditLog.js.map +1 -0
- package/dist/services/FeedbackCollector.d.ts +71 -0
- package/dist/services/FeedbackCollector.d.ts.map +1 -0
- package/dist/services/FeedbackCollector.js +236 -0
- package/dist/services/FeedbackCollector.js.map +1 -0
- package/dist/services/GitIntegration.d.ts +140 -0
- package/dist/services/GitIntegration.d.ts.map +1 -0
- package/dist/services/GitIntegration.js +423 -0
- package/dist/services/GitIntegration.js.map +1 -0
- package/dist/services/HookVerifier.d.ts +95 -0
- package/dist/services/HookVerifier.d.ts.map +1 -0
- package/dist/services/HookVerifier.js +493 -0
- package/dist/services/HookVerifier.js.map +1 -0
- package/dist/services/MemoryVersioning.d.ts +108 -0
- package/dist/services/MemoryVersioning.d.ts.map +1 -0
- package/dist/services/MemoryVersioning.js +281 -0
- package/dist/services/MemoryVersioning.js.map +1 -0
- package/dist/services/context-injector.d.ts +8 -0
- package/dist/services/context-injector.d.ts.map +1 -1
- package/dist/services/context-injector.js +19 -2
- package/dist/services/context-injector.js.map +1 -1
- package/dist/services/index.d.ts +6 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +8 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/memory-router.d.ts +8 -0
- package/dist/services/memory-router.d.ts.map +1 -1
- package/dist/services/memory-router.js +19 -2
- package/dist/services/memory-router.js.map +1 -1
- package/dist/services/pattern-tracker.d.ts +63 -0
- package/dist/services/pattern-tracker.d.ts.map +1 -1
- package/dist/services/pattern-tracker.js +180 -2
- package/dist/services/pattern-tracker.js.map +1 -1
- package/dist/services/semantic-search.d.ts +4 -0
- package/dist/services/semantic-search.d.ts.map +1 -1
- package/dist/services/semantic-search.js +53 -13
- package/dist/services/semantic-search.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- 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 @@
|
|
|
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" | "
|
|
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" | "
|
|
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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"}
|