@miller-tech/uap 1.5.5 → 1.5.7
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/.tsbuildinfo +1 -1
- package/dist/benchmarks/benchmark.d.ts +53 -53
- package/dist/bin/cli.js +6 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/llama-server-optimize.js +0 -0
- package/dist/bin/policy.js +0 -0
- package/dist/bin/tool-calls.js +0 -0
- package/dist/cli/dashboard.d.ts +1 -0
- package/dist/cli/dashboard.d.ts.map +1 -1
- package/dist/cli/dashboard.js.map +1 -1
- package/dist/coordination/droid-validator.d.ts +1 -1
- package/dist/memory/active-context.d.ts +65 -0
- package/dist/memory/active-context.d.ts.map +1 -0
- package/dist/memory/active-context.js +126 -0
- package/dist/memory/active-context.js.map +1 -0
- package/dist/memory/dedup-detector.d.ts +57 -0
- package/dist/memory/dedup-detector.d.ts.map +1 -0
- package/dist/memory/dedup-detector.js +107 -0
- package/dist/memory/dedup-detector.js.map +1 -0
- package/dist/memory/dedup-memory.d.ts +89 -0
- package/dist/memory/dedup-memory.d.ts.map +1 -0
- package/dist/memory/dedup-memory.js +173 -0
- package/dist/memory/dedup-memory.js.map +1 -0
- package/dist/memory/merge-claude-md.d.ts +45 -0
- package/dist/memory/merge-claude-md.d.ts.map +1 -0
- package/dist/memory/merge-claude-md.js +118 -0
- package/dist/memory/merge-claude-md.js.map +1 -0
- package/dist/memory/patterns.d.ts +37 -0
- package/dist/memory/patterns.d.ts.map +1 -0
- package/dist/memory/patterns.js +81 -0
- package/dist/memory/patterns.js.map +1 -0
- package/dist/memory/semantic-edge-graph.d.ts +86 -0
- package/dist/memory/semantic-edge-graph.d.ts.map +1 -0
- package/dist/memory/semantic-edge-graph.js +168 -0
- package/dist/memory/semantic-edge-graph.js.map +1 -0
- package/dist/memory/semantic-retrieval.d.ts +70 -0
- package/dist/memory/semantic-retrieval.d.ts.map +1 -0
- package/dist/memory/semantic-retrieval.js +112 -0
- package/dist/memory/semantic-retrieval.js.map +1 -0
- package/dist/memory/smart-consolidator.d.ts +53 -0
- package/dist/memory/smart-consolidator.d.ts.map +1 -0
- package/dist/memory/smart-consolidator.js +144 -0
- package/dist/memory/smart-consolidator.js.map +1 -0
- package/dist/memory/view-memory.d.ts +80 -0
- package/dist/memory/view-memory.d.ts.map +1 -0
- package/dist/memory/view-memory.js +130 -0
- package/dist/memory/view-memory.js.map +1 -0
- package/dist/memory/wrapped-memory.d.ts +77 -0
- package/dist/memory/wrapped-memory.d.ts.map +1 -0
- package/dist/memory/wrapped-memory.js +127 -0
- package/dist/memory/wrapped-memory.js.map +1 -0
- package/dist/models/types.d.ts +57 -57
- package/dist/policies/schemas/policy.d.ts +18 -18
- package/dist/tasks/types.d.ts +23 -23
- package/dist/types/config.d.ts +416 -416
- package/dist/types/coordination.d.ts +22 -22
- package/dist/uap-droids-strict.d.ts +1 -1
- package/dist/utils/adaptive-cache.d.ts +67 -0
- package/dist/utils/adaptive-cache.d.ts.map +1 -0
- package/dist/utils/adaptive-cache.js +149 -0
- package/dist/utils/adaptive-cache.js.map +1 -0
- package/dist/utils/performance-monitor.d.ts +52 -0
- package/dist/utils/performance-monitor.d.ts.map +1 -0
- package/dist/utils/performance-monitor.js +103 -0
- package/dist/utils/performance-monitor.js.map +1 -0
- package/package.json +1 -1
|
@@ -115,23 +115,23 @@ export declare const AgentRegistryEntrySchema: z.ZodObject<{
|
|
|
115
115
|
lastHeartbeat: z.ZodString;
|
|
116
116
|
capabilities: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
117
117
|
}, "strip", z.ZodTypeAny, {
|
|
118
|
-
status: "active" | "idle" | "completed" | "failed";
|
|
119
118
|
name: string;
|
|
120
119
|
id: string;
|
|
120
|
+
status: "failed" | "active" | "idle" | "completed";
|
|
121
121
|
sessionId: string;
|
|
122
122
|
startedAt: string;
|
|
123
123
|
lastHeartbeat: string;
|
|
124
|
-
capabilities?: string[] | undefined;
|
|
125
124
|
currentTask?: string | undefined;
|
|
125
|
+
capabilities?: string[] | undefined;
|
|
126
126
|
}, {
|
|
127
|
-
status: "active" | "idle" | "completed" | "failed";
|
|
128
127
|
name: string;
|
|
129
128
|
id: string;
|
|
129
|
+
status: "failed" | "active" | "idle" | "completed";
|
|
130
130
|
sessionId: string;
|
|
131
131
|
startedAt: string;
|
|
132
132
|
lastHeartbeat: string;
|
|
133
|
-
capabilities?: string[] | undefined;
|
|
134
133
|
currentTask?: string | undefined;
|
|
134
|
+
capabilities?: string[] | undefined;
|
|
135
135
|
}>;
|
|
136
136
|
export declare const MessagePayloadSchema: z.ZodObject<{
|
|
137
137
|
action: z.ZodString;
|
|
@@ -139,12 +139,12 @@ export declare const MessagePayloadSchema: z.ZodObject<{
|
|
|
139
139
|
data: z.ZodOptional<z.ZodUnknown>;
|
|
140
140
|
}, "strip", z.ZodTypeAny, {
|
|
141
141
|
action: string;
|
|
142
|
-
resource?: string | undefined;
|
|
143
142
|
data?: unknown;
|
|
143
|
+
resource?: string | undefined;
|
|
144
144
|
}, {
|
|
145
145
|
action: string;
|
|
146
|
-
resource?: string | undefined;
|
|
147
146
|
data?: unknown;
|
|
147
|
+
resource?: string | undefined;
|
|
148
148
|
}>;
|
|
149
149
|
export declare const AgentMessageSchema: z.ZodObject<{
|
|
150
150
|
id: z.ZodNumber;
|
|
@@ -158,42 +158,42 @@ export declare const AgentMessageSchema: z.ZodObject<{
|
|
|
158
158
|
data: z.ZodOptional<z.ZodUnknown>;
|
|
159
159
|
}, "strip", z.ZodTypeAny, {
|
|
160
160
|
action: string;
|
|
161
|
-
resource?: string | undefined;
|
|
162
161
|
data?: unknown;
|
|
162
|
+
resource?: string | undefined;
|
|
163
163
|
}, {
|
|
164
164
|
action: string;
|
|
165
|
-
resource?: string | undefined;
|
|
166
165
|
data?: unknown;
|
|
166
|
+
resource?: string | undefined;
|
|
167
167
|
}>;
|
|
168
168
|
priority: z.ZodDefault<z.ZodNumber>;
|
|
169
169
|
createdAt: z.ZodString;
|
|
170
170
|
readAt: z.ZodOptional<z.ZodString>;
|
|
171
171
|
expiresAt: z.ZodOptional<z.ZodString>;
|
|
172
172
|
}, "strip", z.ZodTypeAny, {
|
|
173
|
-
type: "request" | "response" | "notification" | "claim" | "release";
|
|
174
173
|
id: number;
|
|
174
|
+
type: "release" | "claim" | "notification" | "request" | "response";
|
|
175
|
+
createdAt: string;
|
|
175
176
|
priority: number;
|
|
176
|
-
channel: "deploy" | "
|
|
177
|
+
channel: "deploy" | "coordination" | "broadcast" | "review" | "direct";
|
|
177
178
|
payload: {
|
|
178
179
|
action: string;
|
|
179
|
-
resource?: string | undefined;
|
|
180
180
|
data?: unknown;
|
|
181
|
+
resource?: string | undefined;
|
|
181
182
|
};
|
|
182
|
-
createdAt: string;
|
|
183
183
|
fromAgent?: string | undefined;
|
|
184
184
|
toAgent?: string | undefined;
|
|
185
185
|
readAt?: string | undefined;
|
|
186
186
|
expiresAt?: string | undefined;
|
|
187
187
|
}, {
|
|
188
|
-
type: "request" | "response" | "notification" | "claim" | "release";
|
|
189
188
|
id: number;
|
|
190
|
-
|
|
189
|
+
type: "release" | "claim" | "notification" | "request" | "response";
|
|
190
|
+
createdAt: string;
|
|
191
|
+
channel: "deploy" | "coordination" | "broadcast" | "review" | "direct";
|
|
191
192
|
payload: {
|
|
192
193
|
action: string;
|
|
193
|
-
resource?: string | undefined;
|
|
194
194
|
data?: unknown;
|
|
195
|
+
resource?: string | undefined;
|
|
195
196
|
};
|
|
196
|
-
createdAt: string;
|
|
197
197
|
priority?: number | undefined;
|
|
198
198
|
fromAgent?: string | undefined;
|
|
199
199
|
toAgent?: string | undefined;
|
|
@@ -213,28 +213,28 @@ export declare const DeployActionSchema: z.ZodObject<{
|
|
|
213
213
|
priority: z.ZodDefault<z.ZodNumber>;
|
|
214
214
|
dependencies: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
215
215
|
}, "strip", z.ZodTypeAny, {
|
|
216
|
-
status: "completed" | "failed" | "pending" | "batched" | "executing";
|
|
217
216
|
id: number;
|
|
217
|
+
status: "failed" | "completed" | "pending" | "batched" | "executing";
|
|
218
218
|
priority: number;
|
|
219
219
|
agentId: string;
|
|
220
|
-
actionType: "
|
|
220
|
+
actionType: "deploy" | "push" | "commit" | "merge" | "workflow";
|
|
221
221
|
target: string;
|
|
222
222
|
queuedAt: string;
|
|
223
223
|
payload?: Record<any, any> | undefined;
|
|
224
|
+
dependencies?: string[] | undefined;
|
|
224
225
|
batchId?: string | undefined;
|
|
225
226
|
executeAfter?: string | undefined;
|
|
226
|
-
dependencies?: string[] | undefined;
|
|
227
227
|
}, {
|
|
228
|
-
status: "completed" | "failed" | "pending" | "batched" | "executing";
|
|
229
228
|
id: number;
|
|
229
|
+
status: "failed" | "completed" | "pending" | "batched" | "executing";
|
|
230
230
|
agentId: string;
|
|
231
|
-
actionType: "
|
|
231
|
+
actionType: "deploy" | "push" | "commit" | "merge" | "workflow";
|
|
232
232
|
target: string;
|
|
233
233
|
queuedAt: string;
|
|
234
234
|
priority?: number | undefined;
|
|
235
235
|
payload?: Record<any, any> | undefined;
|
|
236
|
+
dependencies?: string[] | undefined;
|
|
236
237
|
batchId?: string | undefined;
|
|
237
238
|
executeAfter?: string | undefined;
|
|
238
|
-
dependencies?: string[] | undefined;
|
|
239
239
|
}>;
|
|
240
240
|
//# sourceMappingURL=coordination.d.ts.map
|
|
@@ -29,12 +29,12 @@ export declare const DROID_SCHEMA: z.ZodObject<{
|
|
|
29
29
|
}, {
|
|
30
30
|
name: string;
|
|
31
31
|
description: string;
|
|
32
|
-
model?: "inherit" | "dedicated" | undefined;
|
|
33
32
|
coordination?: {
|
|
34
33
|
channels?: string[] | undefined;
|
|
35
34
|
claims?: ("exclusive" | "shared")[] | undefined;
|
|
36
35
|
batches_deploy?: boolean | undefined;
|
|
37
36
|
} | undefined;
|
|
37
|
+
model?: "inherit" | "dedicated" | undefined;
|
|
38
38
|
}>;
|
|
39
39
|
interface DroidMeta {
|
|
40
40
|
name: string;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptive cache with usage-based TTL and priority eviction
|
|
3
|
+
*/
|
|
4
|
+
export interface CacheEntry<V> {
|
|
5
|
+
value: V;
|
|
6
|
+
lastAccessed: Date;
|
|
7
|
+
lastModified: Date;
|
|
8
|
+
usageCount: number;
|
|
9
|
+
priority: number;
|
|
10
|
+
}
|
|
11
|
+
export interface AdaptiveCacheOptions {
|
|
12
|
+
maxEntries: number;
|
|
13
|
+
defaultTTL?: number;
|
|
14
|
+
hotThreshold?: number;
|
|
15
|
+
coldEvictionRatio?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class AdaptiveCache<K, V> {
|
|
18
|
+
private cache;
|
|
19
|
+
private options;
|
|
20
|
+
private evictionInterval;
|
|
21
|
+
constructor(options: AdaptiveCacheOptions);
|
|
22
|
+
/**
|
|
23
|
+
* Get value from cache with adaptive TTL
|
|
24
|
+
*/
|
|
25
|
+
get(key: K): V | null;
|
|
26
|
+
/**
|
|
27
|
+
* Set value in cache
|
|
28
|
+
*/
|
|
29
|
+
set(key: K, value: V, priority?: number): void;
|
|
30
|
+
/**
|
|
31
|
+
* Delete value from cache
|
|
32
|
+
*/
|
|
33
|
+
delete(key: K): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Clear all entries
|
|
36
|
+
*/
|
|
37
|
+
clear(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get cache size
|
|
40
|
+
*/
|
|
41
|
+
get size(): number;
|
|
42
|
+
/**
|
|
43
|
+
* Calculate adaptive TTL based on usage patterns
|
|
44
|
+
*/
|
|
45
|
+
private getAdaptiveTTL;
|
|
46
|
+
/**
|
|
47
|
+
* Evict entries based on priority and access patterns
|
|
48
|
+
*/
|
|
49
|
+
private evict;
|
|
50
|
+
/**
|
|
51
|
+
* Start periodic eviction
|
|
52
|
+
*/
|
|
53
|
+
private startEviction;
|
|
54
|
+
/**
|
|
55
|
+
* Stop eviction interval
|
|
56
|
+
*/
|
|
57
|
+
stop(): void;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a cache instance with common defaults for pattern matching
|
|
61
|
+
*/
|
|
62
|
+
export declare function createPatternCache(maxEntries?: number): AdaptiveCache<string, any>;
|
|
63
|
+
/**
|
|
64
|
+
* Create a cache instance for short-term query results
|
|
65
|
+
*/
|
|
66
|
+
export declare function createQueryCache(maxEntries?: number): AdaptiveCache<string, any>;
|
|
67
|
+
//# sourceMappingURL=adaptive-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-cache.d.ts","sourceRoot":"","sources":["../../src/utils/adaptive-cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,YAAY,EAAE,IAAI,CAAC;IACnB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,aAAa,CAAC,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,gBAAgB,CAA+B;gBAE3C,OAAO,EAAE,oBAAoB;IAmBzC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI;IAoBrB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,GAAE,MAAU,GAAG,IAAI;IAejD;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,KAAK;IAgCb;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,IAAI,IAAI,IAAI;CAMb;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,GAAE,MAAY,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAOvF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,GAAE,MAAW,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAOpF"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
export class AdaptiveCache {
|
|
2
|
+
cache;
|
|
3
|
+
options;
|
|
4
|
+
evictionInterval = null;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
const { maxEntries, defaultTTL = 300000, // 5 minutes
|
|
7
|
+
hotThreshold = 10, coldEvictionRatio = 0.5, } = options;
|
|
8
|
+
this.options = {
|
|
9
|
+
maxEntries,
|
|
10
|
+
defaultTTL,
|
|
11
|
+
hotThreshold,
|
|
12
|
+
coldEvictionRatio,
|
|
13
|
+
};
|
|
14
|
+
this.cache = new Map();
|
|
15
|
+
this.startEviction();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get value from cache with adaptive TTL
|
|
19
|
+
*/
|
|
20
|
+
get(key) {
|
|
21
|
+
const entry = this.cache.get(key);
|
|
22
|
+
if (!entry)
|
|
23
|
+
return null;
|
|
24
|
+
// Check if expired
|
|
25
|
+
const age = Date.now() - entry.lastModified.getTime();
|
|
26
|
+
const ttl = this.getAdaptiveTTL(entry);
|
|
27
|
+
if (age > ttl) {
|
|
28
|
+
this.cache.delete(key);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
// Update access metadata
|
|
32
|
+
entry.lastAccessed = new Date();
|
|
33
|
+
entry.usageCount++;
|
|
34
|
+
return entry.value;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Set value in cache
|
|
38
|
+
*/
|
|
39
|
+
set(key, value, priority = 1) {
|
|
40
|
+
// Evict if at capacity
|
|
41
|
+
if (this.cache.size >= this.options.maxEntries) {
|
|
42
|
+
this.evict();
|
|
43
|
+
}
|
|
44
|
+
this.cache.set(key, {
|
|
45
|
+
value,
|
|
46
|
+
lastAccessed: new Date(),
|
|
47
|
+
lastModified: new Date(),
|
|
48
|
+
usageCount: 0,
|
|
49
|
+
priority,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Delete value from cache
|
|
54
|
+
*/
|
|
55
|
+
delete(key) {
|
|
56
|
+
return this.cache.delete(key);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Clear all entries
|
|
60
|
+
*/
|
|
61
|
+
clear() {
|
|
62
|
+
this.cache.clear();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get cache size
|
|
66
|
+
*/
|
|
67
|
+
get size() {
|
|
68
|
+
return this.cache.size;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Calculate adaptive TTL based on usage patterns
|
|
72
|
+
*/
|
|
73
|
+
getAdaptiveTTL(entry) {
|
|
74
|
+
if (entry.usageCount >= this.options.hotThreshold) {
|
|
75
|
+
return this.options.defaultTTL * 12; // 1 hour for hot entries
|
|
76
|
+
}
|
|
77
|
+
if (entry.usageCount >= this.options.hotThreshold / 2) {
|
|
78
|
+
return this.options.defaultTTL * 3; // 15 minutes for warm entries
|
|
79
|
+
}
|
|
80
|
+
return this.options.defaultTTL; // 5 minutes default
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Evict entries based on priority and access patterns
|
|
84
|
+
*/
|
|
85
|
+
evict() {
|
|
86
|
+
const entries = [...this.cache.entries()];
|
|
87
|
+
if (entries.length === 0)
|
|
88
|
+
return;
|
|
89
|
+
// Separate hot vs cold entries
|
|
90
|
+
const coldEntries = entries.filter(([_, entry]) => entry.usageCount < this.options.hotThreshold / 2);
|
|
91
|
+
// hotEntries unused - kept for future expansion
|
|
92
|
+
// Evict cold first
|
|
93
|
+
if (coldEntries.length > Math.floor(this.options.maxEntries * this.options.coldEvictionRatio)) {
|
|
94
|
+
// Sort by last access time
|
|
95
|
+
coldEntries.sort((a, b) => a[1].lastAccessed.getTime() - b[1].lastAccessed.getTime());
|
|
96
|
+
const toRemove = Math.floor(coldEntries.length / 2);
|
|
97
|
+
for (let i = 0; i < toRemove; i++) {
|
|
98
|
+
this.cache.delete(coldEntries[i][0]);
|
|
99
|
+
}
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// If not enough cold entries, evict LRU from all
|
|
103
|
+
entries.sort((a, b) => a[1].lastAccessed.getTime() - b[1].lastAccessed.getTime());
|
|
104
|
+
const toRemove = Math.ceil(entries.length * 0.3);
|
|
105
|
+
for (let i = 0; i < toRemove; i++) {
|
|
106
|
+
this.cache.delete(entries[i][0]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Start periodic eviction
|
|
111
|
+
*/
|
|
112
|
+
startEviction() {
|
|
113
|
+
this.evictionInterval = setInterval(() => {
|
|
114
|
+
this.evict();
|
|
115
|
+
}, 60000); // Run every minute
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Stop eviction interval
|
|
119
|
+
*/
|
|
120
|
+
stop() {
|
|
121
|
+
if (this.evictionInterval) {
|
|
122
|
+
clearInterval(this.evictionInterval);
|
|
123
|
+
this.evictionInterval = null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Create a cache instance with common defaults for pattern matching
|
|
129
|
+
*/
|
|
130
|
+
export function createPatternCache(maxEntries = 100) {
|
|
131
|
+
return new AdaptiveCache({
|
|
132
|
+
maxEntries,
|
|
133
|
+
defaultTTL: 300000, // 5 minutes
|
|
134
|
+
hotThreshold: 10,
|
|
135
|
+
coldEvictionRatio: 0.5,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Create a cache instance for short-term query results
|
|
140
|
+
*/
|
|
141
|
+
export function createQueryCache(maxEntries = 50) {
|
|
142
|
+
return new AdaptiveCache({
|
|
143
|
+
maxEntries,
|
|
144
|
+
defaultTTL: 60000, // 1 minute
|
|
145
|
+
hotThreshold: 5,
|
|
146
|
+
coldEvictionRatio: 0.7,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=adaptive-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-cache.js","sourceRoot":"","sources":["../../src/utils/adaptive-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance monitoring utilities for measuring and analyzing operation metrics
|
|
3
|
+
*/
|
|
4
|
+
export interface PerformanceMetrics {
|
|
5
|
+
avg: number;
|
|
6
|
+
p50: number;
|
|
7
|
+
p95: number;
|
|
8
|
+
p99: number;
|
|
9
|
+
min: number;
|
|
10
|
+
max: number;
|
|
11
|
+
count: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Monitor performance of operations with percentile tracking
|
|
15
|
+
*/
|
|
16
|
+
export declare class PerformanceMonitor {
|
|
17
|
+
private metrics;
|
|
18
|
+
private readonly maxSamples;
|
|
19
|
+
constructor(options?: {
|
|
20
|
+
maxSamples?: number;
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* Measure and record duration of an async operation
|
|
24
|
+
*/
|
|
25
|
+
measure<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
26
|
+
/**
|
|
27
|
+
* Record a metric directly
|
|
28
|
+
*/
|
|
29
|
+
record(metric: string, duration: number): void;
|
|
30
|
+
/**
|
|
31
|
+
* Get statistics for a metric
|
|
32
|
+
*/
|
|
33
|
+
getStats(metric: string): PerformanceMetrics | null;
|
|
34
|
+
/**
|
|
35
|
+
* Get all metric names
|
|
36
|
+
*/
|
|
37
|
+
getMetrics(): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Clear all metrics
|
|
40
|
+
*/
|
|
41
|
+
clear(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Export metrics as JSON
|
|
44
|
+
*/
|
|
45
|
+
exportMetrics(): Record<string, PerformanceMetrics>;
|
|
46
|
+
}
|
|
47
|
+
export declare function getPerformanceMonitor(): PerformanceMonitor;
|
|
48
|
+
/**
|
|
49
|
+
* Helper to wrap any function with performance monitoring
|
|
50
|
+
*/
|
|
51
|
+
export declare function monitorFunction<T extends (...args: unknown[]) => Promise<unknown>>(fn: T, name?: string): T;
|
|
52
|
+
//# sourceMappingURL=performance-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-monitor.d.ts","sourceRoot":"","sources":["../../src/utils/performance-monitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAI7C;;OAEG;IACG,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAUhE;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa9C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAkBnD;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC;CAYpD;AAOD,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EAChF,EAAE,EAAE,CAAC,EACL,IAAI,CAAC,EAAE,MAAM,GACZ,CAAC,CAOH"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance monitoring utilities for measuring and analyzing operation metrics
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Monitor performance of operations with percentile tracking
|
|
6
|
+
*/
|
|
7
|
+
export class PerformanceMonitor {
|
|
8
|
+
metrics = new Map();
|
|
9
|
+
maxSamples;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.maxSamples = options?.maxSamples ?? 1000;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Measure and record duration of an async operation
|
|
15
|
+
*/
|
|
16
|
+
async measure(name, fn) {
|
|
17
|
+
const start = performance.now();
|
|
18
|
+
try {
|
|
19
|
+
return await fn();
|
|
20
|
+
}
|
|
21
|
+
finally {
|
|
22
|
+
const duration = performance.now() - start;
|
|
23
|
+
this.record(name, duration);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Record a metric directly
|
|
28
|
+
*/
|
|
29
|
+
record(metric, duration) {
|
|
30
|
+
const entries = this.metrics.get(metric) || [];
|
|
31
|
+
entries.push(duration);
|
|
32
|
+
// Keep last N samples
|
|
33
|
+
if (entries.length > this.maxSamples) {
|
|
34
|
+
entries.shift();
|
|
35
|
+
}
|
|
36
|
+
this.metrics.set(metric, entries);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get statistics for a metric
|
|
40
|
+
*/
|
|
41
|
+
getStats(metric) {
|
|
42
|
+
const entries = this.metrics.get(metric);
|
|
43
|
+
if (!entries || entries.length === 0)
|
|
44
|
+
return null;
|
|
45
|
+
const sorted = [...entries].sort((a, b) => a - b);
|
|
46
|
+
const count = sorted.length;
|
|
47
|
+
return {
|
|
48
|
+
avg: sorted.reduce((a, b) => a + b, 0) / count,
|
|
49
|
+
p50: sorted[Math.floor(count * 0.5)] ?? 0,
|
|
50
|
+
p95: sorted[Math.floor(count * 0.95)] ?? 0,
|
|
51
|
+
p99: sorted[Math.floor(count * 0.99)] ?? 0,
|
|
52
|
+
min: sorted[0] ?? 0,
|
|
53
|
+
max: sorted[count - 1] ?? 0,
|
|
54
|
+
count,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get all metric names
|
|
59
|
+
*/
|
|
60
|
+
getMetrics() {
|
|
61
|
+
return [...this.metrics.keys()];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Clear all metrics
|
|
65
|
+
*/
|
|
66
|
+
clear() {
|
|
67
|
+
this.metrics.clear();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Export metrics as JSON
|
|
71
|
+
*/
|
|
72
|
+
exportMetrics() {
|
|
73
|
+
const result = {};
|
|
74
|
+
for (const metric of this.metrics.keys()) {
|
|
75
|
+
const stats = this.getStats(metric);
|
|
76
|
+
if (stats) {
|
|
77
|
+
result[metric] = stats;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Global performance monitor instance
|
|
85
|
+
*/
|
|
86
|
+
let globalMonitor = null;
|
|
87
|
+
export function getPerformanceMonitor() {
|
|
88
|
+
if (!globalMonitor) {
|
|
89
|
+
globalMonitor = new PerformanceMonitor();
|
|
90
|
+
}
|
|
91
|
+
return globalMonitor;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Helper to wrap any function with performance monitoring
|
|
95
|
+
*/
|
|
96
|
+
export function monitorFunction(fn, name) {
|
|
97
|
+
const monitor = getPerformanceMonitor();
|
|
98
|
+
const metricName = (name ?? fn.name) || 'anonymous';
|
|
99
|
+
return (async (...args) => {
|
|
100
|
+
return monitor.measure(metricName, async () => await fn(...args));
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=performance-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-monitor.js","sourceRoot":"","sources":["../../src/utils/performance-monitor.ts"],"names":[],"mappings":"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"}
|