cmp-standards 2.6.0 → 2.8.0-alpha
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/README.md +633 -633
- package/dist/cache/EmbeddingCache.d.ts +109 -0
- package/dist/cache/EmbeddingCache.d.ts.map +1 -0
- package/dist/cache/EmbeddingCache.js +239 -0
- package/dist/cache/EmbeddingCache.js.map +1 -0
- package/dist/cache/index.d.ts +6 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +6 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/db/turso-client.js +11 -11
- package/dist/eslint/rules/no-async-useeffect.js +6 -6
- package/dist/events/EventBus.d.ts +87 -0
- package/dist/events/EventBus.d.ts.map +1 -0
- package/dist/events/EventBus.js +200 -0
- package/dist/events/EventBus.js.map +1 -0
- package/dist/events/index.d.ts +7 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +9 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +989 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +136 -0
- package/dist/events/types.js.map +1 -0
- package/dist/experts/ConsensusEngine.d.ts +57 -0
- package/dist/experts/ConsensusEngine.d.ts.map +1 -0
- package/dist/experts/ConsensusEngine.js +146 -0
- package/dist/experts/ConsensusEngine.js.map +1 -0
- package/dist/experts/ExpertPanelService.d.ts +84 -0
- package/dist/experts/ExpertPanelService.d.ts.map +1 -0
- package/dist/experts/ExpertPanelService.js +204 -0
- package/dist/experts/ExpertPanelService.js.map +1 -0
- package/dist/experts/ExpertRouter.d.ts +68 -0
- package/dist/experts/ExpertRouter.d.ts.map +1 -0
- package/dist/experts/ExpertRouter.js +374 -0
- package/dist/experts/ExpertRouter.js.map +1 -0
- package/dist/experts/VoteCollector.d.ts +58 -0
- package/dist/experts/VoteCollector.d.ts.map +1 -0
- package/dist/experts/VoteCollector.js +146 -0
- package/dist/experts/VoteCollector.js.map +1 -0
- package/dist/experts/index.d.ts +9 -0
- package/dist/experts/index.d.ts.map +1 -0
- package/dist/experts/index.js +13 -0
- package/dist/experts/index.js.map +1 -0
- package/dist/hooks/cloud-pre-tool-use.js +20 -20
- package/dist/hooks/expert-review.d.ts +74 -0
- package/dist/hooks/expert-review.d.ts.map +1 -0
- package/dist/hooks/expert-review.js +220 -0
- package/dist/hooks/expert-review.js.map +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/performance/Debouncer.d.ts +91 -0
- package/dist/performance/Debouncer.d.ts.map +1 -0
- package/dist/performance/Debouncer.js +198 -0
- package/dist/performance/Debouncer.js.map +1 -0
- package/dist/performance/MemoryDecay.d.ts +82 -0
- package/dist/performance/MemoryDecay.d.ts.map +1 -0
- package/dist/performance/MemoryDecay.js +153 -0
- package/dist/performance/MemoryDecay.js.map +1 -0
- package/dist/performance/index.d.ts +7 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +9 -0
- package/dist/performance/index.js.map +1 -0
- package/dist/schema/expert-types.d.ts +395 -0
- package/dist/schema/expert-types.d.ts.map +1 -0
- package/dist/schema/expert-types.js +250 -0
- package/dist/schema/expert-types.js.map +1 -0
- package/dist/schema/plans.d.ts +16 -16
- package/dist/schema/tracking.d.ts +90 -90
- package/dist/services/ContextGenerator.js +7 -7
- package/dist/services/ProjectScaffold.js +76 -76
- package/dist/services/context-injector.d.ts +6 -0
- package/dist/services/context-injector.d.ts.map +1 -1
- package/dist/services/context-injector.js +43 -3
- package/dist/services/context-injector.js.map +1 -1
- package/dist/services/memory-router.d.ts +25 -1
- package/dist/services/memory-router.d.ts.map +1 -1
- package/dist/services/memory-router.js +176 -32
- package/dist/services/memory-router.js.map +1 -1
- package/dist/services/pattern-tracker.d.ts +5 -1
- package/dist/services/pattern-tracker.d.ts.map +1 -1
- package/dist/services/pattern-tracker.js +114 -36
- package/dist/services/pattern-tracker.js.map +1 -1
- package/dist/services/semantic-search.js +2 -2
- package/dist/types/index.d.ts +329 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +186 -9
- package/dist/types/index.js.map +1 -1
- package/package.json +105 -100
- package/standards/README.md +50 -50
- package/standards/experts/expert-routing.md +215 -215
- package/standards/general/code-quality.md +86 -86
- package/standards/general/memory-usage.md +205 -205
- package/standards/general/sync-workflow.md +235 -235
- package/standards/general/workflow.md +82 -82
- package/standards/hooks/mandatory-tracking.md +446 -446
- package/standards/infrastructure/cloud-database.md +287 -287
- package/standards/mcp/server-design.md +243 -243
- package/standards/mcp/tool-patterns.md +354 -354
- package/standards/skills/skill-structure.md +286 -286
- package/standards/skills/workflow-design.md +323 -323
- package/standards/tools/tool-design.md +297 -297
- package/templates/agents/architecture-expert.md +61 -61
- package/templates/agents/database-expert.md +62 -62
- package/templates/agents/documentation-expert.md +57 -57
- package/templates/agents/memory-expert.md +88 -88
- package/templates/agents/performance-expert.md +61 -61
- package/templates/agents/security-expert.md +59 -59
- package/templates/agents/ux-expert.md +63 -63
- package/templates/agents/worker.md +75 -75
- package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
- package/templates/claude-settings.json +72 -72
- package/templates/commands/experts.md +138 -138
- package/templates/hooks/README.md +158 -158
- package/templates/hooks/project.config.json.template +77 -77
- package/templates/hooks/settings.local.json.template +57 -57
- package/templates/memory-config.json +56 -56
- package/templates/memory-config.schema.json +212 -212
- package/templates/settings.json +58 -58
- package/templates/skills/continue.md +205 -205
- package/templates/workflows/business-improvement.md +264 -264
- package/templates/workflows/expert-review.md +153 -153
- package/templates/workflows/internal-app.md +245 -245
- package/templates/workflows/sync-docs.md +187 -187
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file EmbeddingCache - LRU cache for embeddings in cmp-standards v2.8
|
|
3
|
+
* @description High-performance caching layer to reduce embedding API calls
|
|
4
|
+
*
|
|
5
|
+
* Performance targets:
|
|
6
|
+
* - Cache hit: <10ms (vs 200-500ms API call)
|
|
7
|
+
* - Memory efficient with LRU eviction
|
|
8
|
+
* - Thread-safe for concurrent access
|
|
9
|
+
*/
|
|
10
|
+
export interface CacheEntry {
|
|
11
|
+
/** The embedding vector */
|
|
12
|
+
vector: number[];
|
|
13
|
+
/** Expiration timestamp */
|
|
14
|
+
expires: number;
|
|
15
|
+
/** Number of times this entry was accessed */
|
|
16
|
+
hits: number;
|
|
17
|
+
/** When this entry was created */
|
|
18
|
+
createdAt: number;
|
|
19
|
+
/** Last access timestamp */
|
|
20
|
+
lastAccessedAt: number;
|
|
21
|
+
/** Original text (for debugging) */
|
|
22
|
+
textHash: string;
|
|
23
|
+
}
|
|
24
|
+
export interface EmbeddingCacheConfig {
|
|
25
|
+
/** Maximum number of entries in cache */
|
|
26
|
+
maxSize: number;
|
|
27
|
+
/** Time-to-live in milliseconds (default: 24 hours) */
|
|
28
|
+
ttl: number;
|
|
29
|
+
/** Enable debug logging */
|
|
30
|
+
debug: boolean;
|
|
31
|
+
/** Minimum text length to cache (skip very short texts) */
|
|
32
|
+
minTextLength: number;
|
|
33
|
+
}
|
|
34
|
+
export interface CacheStats {
|
|
35
|
+
/** Total number of entries */
|
|
36
|
+
size: number;
|
|
37
|
+
/** Cache hit count */
|
|
38
|
+
hits: number;
|
|
39
|
+
/** Cache miss count */
|
|
40
|
+
misses: number;
|
|
41
|
+
/** Hit rate (0-1) */
|
|
42
|
+
hitRate: number;
|
|
43
|
+
/** Total memory estimate in bytes */
|
|
44
|
+
memoryEstimate: number;
|
|
45
|
+
/** Average entry age in ms */
|
|
46
|
+
avgAge: number;
|
|
47
|
+
}
|
|
48
|
+
export declare class EmbeddingCache {
|
|
49
|
+
private cache;
|
|
50
|
+
private config;
|
|
51
|
+
private stats;
|
|
52
|
+
constructor(config?: Partial<EmbeddingCacheConfig>);
|
|
53
|
+
/**
|
|
54
|
+
* Generate a hash key for the text
|
|
55
|
+
*/
|
|
56
|
+
private hash;
|
|
57
|
+
/**
|
|
58
|
+
* Get embedding from cache if available and not expired
|
|
59
|
+
*/
|
|
60
|
+
get(text: string): number[] | null;
|
|
61
|
+
/**
|
|
62
|
+
* Store embedding in cache
|
|
63
|
+
*/
|
|
64
|
+
set(text: string, vector: number[]): void;
|
|
65
|
+
/**
|
|
66
|
+
* Check if text is cached (without updating access stats)
|
|
67
|
+
*/
|
|
68
|
+
has(text: string): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Evict the least recently used entry
|
|
71
|
+
*/
|
|
72
|
+
private evictLRU;
|
|
73
|
+
/**
|
|
74
|
+
* Remove expired entries
|
|
75
|
+
*/
|
|
76
|
+
cleanup(): number;
|
|
77
|
+
/**
|
|
78
|
+
* Get cache statistics
|
|
79
|
+
*/
|
|
80
|
+
getStats(): CacheStats;
|
|
81
|
+
/**
|
|
82
|
+
* Clear all entries
|
|
83
|
+
*/
|
|
84
|
+
clear(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Get current size
|
|
87
|
+
*/
|
|
88
|
+
get size(): number;
|
|
89
|
+
/**
|
|
90
|
+
* Get all cached keys (for debugging)
|
|
91
|
+
*/
|
|
92
|
+
keys(): string[];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get or create the global EmbeddingCache instance
|
|
96
|
+
*/
|
|
97
|
+
export declare function getEmbeddingCache(config?: Partial<EmbeddingCacheConfig>): EmbeddingCache;
|
|
98
|
+
/**
|
|
99
|
+
* Reset the global cache (useful for testing)
|
|
100
|
+
*/
|
|
101
|
+
export declare function resetEmbeddingCache(): void;
|
|
102
|
+
export type EmbeddingProvider = (text: string) => Promise<number[]>;
|
|
103
|
+
/**
|
|
104
|
+
* Create a cached version of an embedding function
|
|
105
|
+
* @param provider The underlying embedding provider
|
|
106
|
+
* @param config Cache configuration
|
|
107
|
+
*/
|
|
108
|
+
export declare function createCachedEmbedding(provider: EmbeddingProvider, config?: Partial<EmbeddingCacheConfig>): EmbeddingProvider;
|
|
109
|
+
//# sourceMappingURL=EmbeddingCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingCache.d.ts","sourceRoot":"","sources":["../../src/cache/EmbeddingCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf;AAiBD,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAAyB;gBAE1B,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAItD;;OAEG;IACH,OAAO,CAAC,IAAI;IAIZ;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAsClC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IA6BzC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAiB1B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;OAEG;IACH,OAAO,IAAI,MAAM;IAkBjB;;OAEG;IACH,QAAQ,IAAI,UAAU;IAuBtB;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;CAGjB;AAQD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,cAAc,CAKxF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAMD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;AAEnE;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACrC,iBAAiB,CAkBnB"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file EmbeddingCache - LRU cache for embeddings in cmp-standards v2.8
|
|
3
|
+
* @description High-performance caching layer to reduce embedding API calls
|
|
4
|
+
*
|
|
5
|
+
* Performance targets:
|
|
6
|
+
* - Cache hit: <10ms (vs 200-500ms API call)
|
|
7
|
+
* - Memory efficient with LRU eviction
|
|
8
|
+
* - Thread-safe for concurrent access
|
|
9
|
+
*/
|
|
10
|
+
import { createHash } from 'crypto';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// Configuration
|
|
13
|
+
// =============================================================================
|
|
14
|
+
const DEFAULT_CONFIG = {
|
|
15
|
+
maxSize: 1000,
|
|
16
|
+
ttl: 24 * 60 * 60 * 1000, // 24 hours
|
|
17
|
+
debug: false,
|
|
18
|
+
minTextLength: 10,
|
|
19
|
+
};
|
|
20
|
+
// =============================================================================
|
|
21
|
+
// EmbeddingCache Implementation
|
|
22
|
+
// =============================================================================
|
|
23
|
+
export class EmbeddingCache {
|
|
24
|
+
cache = new Map();
|
|
25
|
+
config;
|
|
26
|
+
stats = { hits: 0, misses: 0 };
|
|
27
|
+
constructor(config = {}) {
|
|
28
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Generate a hash key for the text
|
|
32
|
+
*/
|
|
33
|
+
hash(text) {
|
|
34
|
+
return createHash('md5').update(text.trim().toLowerCase()).digest('hex');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get embedding from cache if available and not expired
|
|
38
|
+
*/
|
|
39
|
+
get(text) {
|
|
40
|
+
if (text.length < this.config.minTextLength) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const key = this.hash(text);
|
|
44
|
+
const entry = this.cache.get(key);
|
|
45
|
+
if (!entry) {
|
|
46
|
+
this.stats.misses++;
|
|
47
|
+
if (this.config.debug) {
|
|
48
|
+
console.log(`[EmbeddingCache] MISS: ${key.substring(0, 8)}...`);
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
// Check expiration
|
|
53
|
+
if (Date.now() > entry.expires) {
|
|
54
|
+
this.cache.delete(key);
|
|
55
|
+
this.stats.misses++;
|
|
56
|
+
if (this.config.debug) {
|
|
57
|
+
console.log(`[EmbeddingCache] EXPIRED: ${key.substring(0, 8)}...`);
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
// Update access stats
|
|
62
|
+
entry.hits++;
|
|
63
|
+
entry.lastAccessedAt = Date.now();
|
|
64
|
+
this.stats.hits++;
|
|
65
|
+
if (this.config.debug) {
|
|
66
|
+
console.log(`[EmbeddingCache] HIT: ${key.substring(0, 8)}... (${entry.hits} hits)`);
|
|
67
|
+
}
|
|
68
|
+
return entry.vector;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Store embedding in cache
|
|
72
|
+
*/
|
|
73
|
+
set(text, vector) {
|
|
74
|
+
if (text.length < this.config.minTextLength) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Evict if at capacity
|
|
78
|
+
if (this.cache.size >= this.config.maxSize) {
|
|
79
|
+
this.evictLRU();
|
|
80
|
+
}
|
|
81
|
+
const key = this.hash(text);
|
|
82
|
+
const now = Date.now();
|
|
83
|
+
const entry = {
|
|
84
|
+
vector,
|
|
85
|
+
expires: now + this.config.ttl,
|
|
86
|
+
hits: 0,
|
|
87
|
+
createdAt: now,
|
|
88
|
+
lastAccessedAt: now,
|
|
89
|
+
textHash: key,
|
|
90
|
+
};
|
|
91
|
+
this.cache.set(key, entry);
|
|
92
|
+
if (this.config.debug) {
|
|
93
|
+
console.log(`[EmbeddingCache] SET: ${key.substring(0, 8)}... (size: ${this.cache.size})`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if text is cached (without updating access stats)
|
|
98
|
+
*/
|
|
99
|
+
has(text) {
|
|
100
|
+
if (text.length < this.config.minTextLength) {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
const key = this.hash(text);
|
|
104
|
+
const entry = this.cache.get(key);
|
|
105
|
+
if (!entry)
|
|
106
|
+
return false;
|
|
107
|
+
if (Date.now() > entry.expires) {
|
|
108
|
+
this.cache.delete(key);
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Evict the least recently used entry
|
|
115
|
+
*/
|
|
116
|
+
evictLRU() {
|
|
117
|
+
let oldestKey = '';
|
|
118
|
+
let oldestAccess = Infinity;
|
|
119
|
+
for (const [key, entry] of this.cache) {
|
|
120
|
+
// Combine last access time with hit count for eviction decision
|
|
121
|
+
// Lower score = more likely to evict
|
|
122
|
+
const score = entry.lastAccessedAt + (entry.hits * 1000);
|
|
123
|
+
if (score < oldestAccess) {
|
|
124
|
+
oldestAccess = score;
|
|
125
|
+
oldestKey = key;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (oldestKey) {
|
|
129
|
+
this.cache.delete(oldestKey);
|
|
130
|
+
if (this.config.debug) {
|
|
131
|
+
console.log(`[EmbeddingCache] EVICT: ${oldestKey.substring(0, 8)}...`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Remove expired entries
|
|
137
|
+
*/
|
|
138
|
+
cleanup() {
|
|
139
|
+
const now = Date.now();
|
|
140
|
+
let removed = 0;
|
|
141
|
+
for (const [key, entry] of this.cache) {
|
|
142
|
+
if (now > entry.expires) {
|
|
143
|
+
this.cache.delete(key);
|
|
144
|
+
removed++;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (this.config.debug && removed > 0) {
|
|
148
|
+
console.log(`[EmbeddingCache] CLEANUP: Removed ${removed} expired entries`);
|
|
149
|
+
}
|
|
150
|
+
return removed;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get cache statistics
|
|
154
|
+
*/
|
|
155
|
+
getStats() {
|
|
156
|
+
const now = Date.now();
|
|
157
|
+
let totalAge = 0;
|
|
158
|
+
let memoryEstimate = 0;
|
|
159
|
+
for (const entry of this.cache.values()) {
|
|
160
|
+
totalAge += now - entry.createdAt;
|
|
161
|
+
// Estimate: 4 bytes per float * vector length + overhead
|
|
162
|
+
memoryEstimate += entry.vector.length * 4 + 100;
|
|
163
|
+
}
|
|
164
|
+
const totalRequests = this.stats.hits + this.stats.misses;
|
|
165
|
+
return {
|
|
166
|
+
size: this.cache.size,
|
|
167
|
+
hits: this.stats.hits,
|
|
168
|
+
misses: this.stats.misses,
|
|
169
|
+
hitRate: totalRequests > 0 ? this.stats.hits / totalRequests : 0,
|
|
170
|
+
memoryEstimate,
|
|
171
|
+
avgAge: this.cache.size > 0 ? totalAge / this.cache.size : 0,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Clear all entries
|
|
176
|
+
*/
|
|
177
|
+
clear() {
|
|
178
|
+
this.cache.clear();
|
|
179
|
+
this.stats = { hits: 0, misses: 0 };
|
|
180
|
+
if (this.config.debug) {
|
|
181
|
+
console.log('[EmbeddingCache] CLEARED');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get current size
|
|
186
|
+
*/
|
|
187
|
+
get size() {
|
|
188
|
+
return this.cache.size;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get all cached keys (for debugging)
|
|
192
|
+
*/
|
|
193
|
+
keys() {
|
|
194
|
+
return Array.from(this.cache.keys());
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// =============================================================================
|
|
198
|
+
// Singleton Instance
|
|
199
|
+
// =============================================================================
|
|
200
|
+
let globalCache = null;
|
|
201
|
+
/**
|
|
202
|
+
* Get or create the global EmbeddingCache instance
|
|
203
|
+
*/
|
|
204
|
+
export function getEmbeddingCache(config) {
|
|
205
|
+
if (!globalCache) {
|
|
206
|
+
globalCache = new EmbeddingCache(config);
|
|
207
|
+
}
|
|
208
|
+
return globalCache;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Reset the global cache (useful for testing)
|
|
212
|
+
*/
|
|
213
|
+
export function resetEmbeddingCache() {
|
|
214
|
+
if (globalCache) {
|
|
215
|
+
globalCache.clear();
|
|
216
|
+
}
|
|
217
|
+
globalCache = null;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Create a cached version of an embedding function
|
|
221
|
+
* @param provider The underlying embedding provider
|
|
222
|
+
* @param config Cache configuration
|
|
223
|
+
*/
|
|
224
|
+
export function createCachedEmbedding(provider, config) {
|
|
225
|
+
const cache = getEmbeddingCache(config);
|
|
226
|
+
return async (text) => {
|
|
227
|
+
// Try cache first
|
|
228
|
+
const cached = cache.get(text);
|
|
229
|
+
if (cached) {
|
|
230
|
+
return cached;
|
|
231
|
+
}
|
|
232
|
+
// Call provider
|
|
233
|
+
const vector = await provider(text);
|
|
234
|
+
// Cache result
|
|
235
|
+
cache.set(text, vector);
|
|
236
|
+
return vector;
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=EmbeddingCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingCache.js","sourceRoot":"","sources":["../../src/cache/EmbeddingCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Cache Module - cmp-standards v2.8
|
|
3
|
+
* @description High-performance caching for embeddings and other expensive operations
|
|
4
|
+
*/
|
|
5
|
+
export { EmbeddingCache, EmbeddingCacheConfig, CacheEntry, CacheStats, getEmbeddingCache, resetEmbeddingCache, createCachedEmbedding, EmbeddingProvider, } from './EmbeddingCache.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Cache Module - cmp-standards v2.8
|
|
3
|
+
* @description High-performance caching for embeddings and other expensive operations
|
|
4
|
+
*/
|
|
5
|
+
export { EmbeddingCache, getEmbeddingCache, resetEmbeddingCache, createCachedEmbedding, } from './EmbeddingCache.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EAId,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,GAEtB,MAAM,qBAAqB,CAAA"}
|
package/dist/db/turso-client.js
CHANGED
|
@@ -60,16 +60,16 @@ export async function setupTursoSchema() {
|
|
|
60
60
|
try {
|
|
61
61
|
const db = getTurso();
|
|
62
62
|
// Tabla principal de items (similar a DEV_Items en MySQL)
|
|
63
|
-
await db.execute(`
|
|
64
|
-
CREATE TABLE IF NOT EXISTS items (
|
|
65
|
-
id TEXT PRIMARY KEY,
|
|
66
|
-
type TEXT NOT NULL,
|
|
67
|
-
status TEXT NOT NULL DEFAULT 'pending',
|
|
68
|
-
system TEXT NOT NULL,
|
|
69
|
-
content TEXT NOT NULL,
|
|
70
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
71
|
-
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
72
|
-
)
|
|
63
|
+
await db.execute(`
|
|
64
|
+
CREATE TABLE IF NOT EXISTS items (
|
|
65
|
+
id TEXT PRIMARY KEY,
|
|
66
|
+
type TEXT NOT NULL,
|
|
67
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
68
|
+
system TEXT NOT NULL,
|
|
69
|
+
content TEXT NOT NULL,
|
|
70
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
71
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
72
|
+
)
|
|
73
73
|
`);
|
|
74
74
|
// Índices para queries comunes
|
|
75
75
|
await db.execute(`CREATE INDEX IF NOT EXISTS idx_items_type ON items(type)`);
|
|
@@ -95,7 +95,7 @@ export async function create(type, system, content, status = 'pending') {
|
|
|
95
95
|
const id = ulid();
|
|
96
96
|
const now = new Date().toISOString();
|
|
97
97
|
await db.execute({
|
|
98
|
-
sql: `INSERT INTO items (id, type, status, system, content, created_at, updated_at)
|
|
98
|
+
sql: `INSERT INTO items (id, type, status, system, content, created_at, updated_at)
|
|
99
99
|
VALUES (?, ?, ?, ?, ?, ?, ?)`,
|
|
100
100
|
args: [id, type, status, system, JSON.stringify(content), now, now]
|
|
101
101
|
});
|
|
@@ -14,12 +14,12 @@ const rule = {
|
|
|
14
14
|
},
|
|
15
15
|
messages: {
|
|
16
16
|
noAsyncUseEffect: 'useEffect callback cannot be async. Create an inner async function and call it.',
|
|
17
|
-
suggestion: `
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
const fetchData = async () => {
|
|
20
|
-
// your async code
|
|
21
|
-
};
|
|
22
|
-
fetchData();
|
|
17
|
+
suggestion: `
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const fetchData = async () => {
|
|
20
|
+
// your async code
|
|
21
|
+
};
|
|
22
|
+
fetchData();
|
|
23
23
|
}, []);`,
|
|
24
24
|
},
|
|
25
25
|
schema: [],
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file EventBus - In-memory event bus for cmp-standards v2.8
|
|
3
|
+
* @description Decoupled event-driven architecture for expert panel orchestration
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Type-safe event publishing and subscribing
|
|
7
|
+
* - Parallel handler execution with Promise.allSettled
|
|
8
|
+
* - Event history for debugging
|
|
9
|
+
* - Handler timeout protection
|
|
10
|
+
* - Correlation ID tracking for request tracing
|
|
11
|
+
*/
|
|
12
|
+
import { Event, EventType, EventHandler } from './types.js';
|
|
13
|
+
export interface EventBusConfig {
|
|
14
|
+
/** Maximum events to keep in history */
|
|
15
|
+
historyLimit: number;
|
|
16
|
+
/** Handler execution timeout in ms */
|
|
17
|
+
handlerTimeout: number;
|
|
18
|
+
/** Enable debug logging */
|
|
19
|
+
debug: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class EventBus {
|
|
22
|
+
private handlers;
|
|
23
|
+
private history;
|
|
24
|
+
private config;
|
|
25
|
+
constructor(config?: Partial<EventBusConfig>);
|
|
26
|
+
/**
|
|
27
|
+
* Subscribe to an event type
|
|
28
|
+
* @returns Unsubscribe function
|
|
29
|
+
*/
|
|
30
|
+
subscribe<T extends EventType>(eventType: T, handler: EventHandler<Extract<Event, {
|
|
31
|
+
type: T;
|
|
32
|
+
}>>): () => void;
|
|
33
|
+
/**
|
|
34
|
+
* Publish an event to all subscribers
|
|
35
|
+
* Handlers are executed in parallel with timeout protection
|
|
36
|
+
*/
|
|
37
|
+
publish<T extends Event>(event: T): Promise<{
|
|
38
|
+
success: boolean;
|
|
39
|
+
handlerResults: PromiseSettledResult<void>[];
|
|
40
|
+
duration: number;
|
|
41
|
+
}>;
|
|
42
|
+
/**
|
|
43
|
+
* Publish and wait for all handlers, throwing on any failure
|
|
44
|
+
*/
|
|
45
|
+
publishStrict<T extends Event>(event: T): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Execute handler with timeout protection
|
|
48
|
+
*/
|
|
49
|
+
private executeWithTimeout;
|
|
50
|
+
/**
|
|
51
|
+
* Add event to history with limit enforcement
|
|
52
|
+
*/
|
|
53
|
+
private addToHistory;
|
|
54
|
+
/**
|
|
55
|
+
* Get event history, optionally filtered by type
|
|
56
|
+
*/
|
|
57
|
+
getHistory(type?: EventType): Event[];
|
|
58
|
+
/**
|
|
59
|
+
* Get events by correlation ID (for request tracing)
|
|
60
|
+
*/
|
|
61
|
+
getByCorrelationId(correlationId: string): Event[];
|
|
62
|
+
/**
|
|
63
|
+
* Clear all handlers and history
|
|
64
|
+
*/
|
|
65
|
+
clear(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Get handler count for a specific event type
|
|
68
|
+
*/
|
|
69
|
+
getHandlerCount(type: EventType): number;
|
|
70
|
+
/**
|
|
71
|
+
* Check if there are any handlers for an event type
|
|
72
|
+
*/
|
|
73
|
+
hasHandlers(type: EventType): boolean;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get or create the global EventBus instance
|
|
77
|
+
*/
|
|
78
|
+
export declare function getEventBus(config?: Partial<EventBusConfig>): EventBus;
|
|
79
|
+
/**
|
|
80
|
+
* Reset the global EventBus (useful for testing)
|
|
81
|
+
*/
|
|
82
|
+
export declare function resetEventBus(): void;
|
|
83
|
+
/**
|
|
84
|
+
* Create and publish an event in one call
|
|
85
|
+
*/
|
|
86
|
+
export declare function emitEvent(eventData: Omit<Event, 'metadata'>, source: string, correlationId?: string): Promise<void>;
|
|
87
|
+
//# sourceMappingURL=EventBus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventBus.d.ts","sourceRoot":"","sources":["../../src/events/EventBus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,KAAK,EACL,SAAS,EACT,YAAY,EAGb,MAAM,YAAY,CAAA;AAMnB,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAA;IACtB,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAA;CACf;AAYD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAIhD;;;OAGG;IACH,SAAS,CAAC,CAAC,SAAS,SAAS,EAC3B,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,GACjD,MAAM,IAAI;IAyBb;;;OAGG;IACG,OAAO,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;QAChD,OAAO,EAAE,OAAO,CAAA;QAChB,cAAc,EAAE,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAA;QAC5C,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAC;IA+CF;;OAEG;IACG,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D;;OAEG;YACW,kBAAkB;IAqBhC;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,EAAE;IAKrC;;OAEG;IACH,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,KAAK,EAAE;IAMlD;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAIxC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;CAGtC;AAQD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,QAAQ,CAKtE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAMD;;GAEG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAClC,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAQf"}
|