@miller-tech/uap 1.5.5 → 1.5.6
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/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/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/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 +5 -3
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@miller-tech/uap",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.6",
|
|
4
4
|
"description": "Autonomous AI agent memory system with CLAUDE.md protocol enforcement",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -34,9 +34,11 @@
|
|
|
34
34
|
"version:patch": "bash scripts/version-bump.sh patch",
|
|
35
35
|
"version:minor": "bash scripts/version-bump.sh minor",
|
|
36
36
|
"version:major": "bash scripts/version-bump.sh major",
|
|
37
|
+
"install:hooks": "bash scripts/hooks/install-hooks.sh",
|
|
38
|
+
"verify:tests": "bash scripts/verify-test-count.sh",
|
|
37
39
|
"update-uap": "bash scripts/update-uap-compliance.sh",
|
|
38
|
-
"verify-uap": "bash scripts/verify-compliance.sh",
|
|
39
|
-
"check-claude": "bash scripts/verify-compliance.sh"
|
|
40
|
+
"verify-uap": "bash scripts/maintenance/verify-compliance.sh",
|
|
41
|
+
"check-claude": "bash scripts/maintenance/verify-compliance.sh"
|
|
40
42
|
},
|
|
41
43
|
"keywords": [
|
|
42
44
|
"claude",
|