agentic-qe 2.8.0 → 2.8.2
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/CHANGELOG.md +148 -0
- package/README.md +1 -1
- package/dist/agents/BaseAgent.d.ts +329 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +657 -0
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/cli/commands/supabase/index.d.ts +20 -0
- package/dist/cli/commands/supabase/index.d.ts.map +1 -0
- package/dist/cli/commands/supabase/index.js +632 -0
- package/dist/cli/commands/supabase/index.js.map +1 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.d.ts +135 -0
- package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.js +301 -0
- package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.js.map +1 -0
- package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts +78 -6
- package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts.map +1 -1
- package/dist/code-intelligence/embeddings/NomicEmbedder.js +162 -21
- package/dist/code-intelligence/embeddings/NomicEmbedder.js.map +1 -1
- package/dist/code-intelligence/embeddings/backends/MemoryBackend.d.ts +59 -0
- package/dist/code-intelligence/embeddings/backends/MemoryBackend.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/backends/MemoryBackend.js +173 -0
- package/dist/code-intelligence/embeddings/backends/MemoryBackend.js.map +1 -0
- package/dist/code-intelligence/embeddings/backends/RedisBackend.d.ts +50 -0
- package/dist/code-intelligence/embeddings/backends/RedisBackend.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/backends/RedisBackend.js +279 -0
- package/dist/code-intelligence/embeddings/backends/RedisBackend.js.map +1 -0
- package/dist/code-intelligence/embeddings/backends/SQLiteBackend.d.ts +64 -0
- package/dist/code-intelligence/embeddings/backends/SQLiteBackend.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/backends/SQLiteBackend.js +314 -0
- package/dist/code-intelligence/embeddings/backends/SQLiteBackend.js.map +1 -0
- package/dist/code-intelligence/embeddings/backends/index.d.ts +16 -0
- package/dist/code-intelligence/embeddings/backends/index.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/backends/index.js +28 -0
- package/dist/code-intelligence/embeddings/backends/index.js.map +1 -0
- package/dist/code-intelligence/embeddings/backends/types.d.ts +177 -0
- package/dist/code-intelligence/embeddings/backends/types.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/backends/types.js +30 -0
- package/dist/code-intelligence/embeddings/backends/types.js.map +1 -0
- package/dist/code-intelligence/embeddings/index.d.ts +7 -0
- package/dist/code-intelligence/embeddings/index.d.ts.map +1 -1
- package/dist/code-intelligence/embeddings/index.js +16 -1
- package/dist/code-intelligence/embeddings/index.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/infrastructure/index.d.ts +15 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +44 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/network/AgentRateLimiter.d.ts +59 -0
- package/dist/infrastructure/network/AgentRateLimiter.d.ts.map +1 -0
- package/dist/infrastructure/network/AgentRateLimiter.js +186 -0
- package/dist/infrastructure/network/AgentRateLimiter.js.map +1 -0
- package/dist/infrastructure/network/AuditLogger.d.ts +102 -0
- package/dist/infrastructure/network/AuditLogger.d.ts.map +1 -0
- package/dist/infrastructure/network/AuditLogger.js +284 -0
- package/dist/infrastructure/network/AuditLogger.js.map +1 -0
- package/dist/infrastructure/network/DomainWhitelist.d.ts +111 -0
- package/dist/infrastructure/network/DomainWhitelist.d.ts.map +1 -0
- package/dist/infrastructure/network/DomainWhitelist.js +216 -0
- package/dist/infrastructure/network/DomainWhitelist.js.map +1 -0
- package/dist/infrastructure/network/NetworkPolicyManager.d.ts +97 -0
- package/dist/infrastructure/network/NetworkPolicyManager.d.ts.map +1 -0
- package/dist/infrastructure/network/NetworkPolicyManager.js +309 -0
- package/dist/infrastructure/network/NetworkPolicyManager.js.map +1 -0
- package/dist/infrastructure/network/index.d.ts +19 -0
- package/dist/infrastructure/network/index.d.ts.map +1 -0
- package/dist/infrastructure/network/index.js +46 -0
- package/dist/infrastructure/network/index.js.map +1 -0
- package/dist/infrastructure/network/policies/default-policies.d.ts +78 -0
- package/dist/infrastructure/network/policies/default-policies.d.ts.map +1 -0
- package/dist/infrastructure/network/policies/default-policies.js +312 -0
- package/dist/infrastructure/network/policies/default-policies.js.map +1 -0
- package/dist/infrastructure/network/types.d.ts +214 -0
- package/dist/infrastructure/network/types.d.ts.map +1 -0
- package/dist/infrastructure/network/types.js +25 -0
- package/dist/infrastructure/network/types.js.map +1 -0
- package/dist/infrastructure/sandbox/ResourceMonitor.d.ts +124 -0
- package/dist/infrastructure/sandbox/ResourceMonitor.d.ts.map +1 -0
- package/dist/infrastructure/sandbox/ResourceMonitor.js +305 -0
- package/dist/infrastructure/sandbox/ResourceMonitor.js.map +1 -0
- package/dist/infrastructure/sandbox/SandboxManager.d.ts +122 -0
- package/dist/infrastructure/sandbox/SandboxManager.d.ts.map +1 -0
- package/dist/infrastructure/sandbox/SandboxManager.js +527 -0
- package/dist/infrastructure/sandbox/SandboxManager.js.map +1 -0
- package/dist/infrastructure/sandbox/index.d.ts +18 -0
- package/dist/infrastructure/sandbox/index.d.ts.map +1 -0
- package/dist/infrastructure/sandbox/index.js +38 -0
- package/dist/infrastructure/sandbox/index.js.map +1 -0
- package/dist/infrastructure/sandbox/profiles/agent-profiles.d.ts +53 -0
- package/dist/infrastructure/sandbox/profiles/agent-profiles.d.ts.map +1 -0
- package/dist/infrastructure/sandbox/profiles/agent-profiles.js +433 -0
- package/dist/infrastructure/sandbox/profiles/agent-profiles.js.map +1 -0
- package/dist/infrastructure/sandbox/types.d.ts +227 -0
- package/dist/infrastructure/sandbox/types.d.ts.map +1 -0
- package/dist/infrastructure/sandbox/types.js +63 -0
- package/dist/infrastructure/sandbox/types.js.map +1 -0
- package/dist/mcp/handlers/NewDomainToolsHandler.d.ts +8 -8
- package/dist/mcp/handlers/NewDomainToolsHandler.d.ts.map +1 -1
- package/dist/mcp/handlers/NewDomainToolsHandler.js.map +1 -1
- package/dist/mcp/handlers/ruvector/RuVectorHandler.d.ts +54 -0
- package/dist/mcp/handlers/ruvector/RuVectorHandler.d.ts.map +1 -0
- package/dist/mcp/handlers/ruvector/RuVectorHandler.js +325 -0
- package/dist/mcp/handlers/ruvector/RuVectorHandler.js.map +1 -0
- package/dist/mcp/handlers/ruvector/index.d.ts +5 -0
- package/dist/mcp/handlers/ruvector/index.d.ts.map +1 -0
- package/dist/mcp/handlers/ruvector/index.js +9 -0
- package/dist/mcp/handlers/ruvector/index.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +100 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/nervous-system/adapters/BTSPAdapter.d.ts +342 -0
- package/dist/nervous-system/adapters/BTSPAdapter.d.ts.map +1 -0
- package/dist/nervous-system/adapters/BTSPAdapter.js +494 -0
- package/dist/nervous-system/adapters/BTSPAdapter.js.map +1 -0
- package/dist/nervous-system/adapters/CircadianController.d.ts +560 -0
- package/dist/nervous-system/adapters/CircadianController.d.ts.map +1 -0
- package/dist/nervous-system/adapters/CircadianController.js +882 -0
- package/dist/nervous-system/adapters/CircadianController.js.map +1 -0
- package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.d.ts +337 -0
- package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.d.ts.map +1 -0
- package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.js +532 -0
- package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.js.map +1 -0
- package/dist/nervous-system/adapters/HdcMemoryAdapter.d.ts +444 -0
- package/dist/nervous-system/adapters/HdcMemoryAdapter.d.ts.map +1 -0
- package/dist/nervous-system/adapters/HdcMemoryAdapter.js +715 -0
- package/dist/nervous-system/adapters/HdcMemoryAdapter.js.map +1 -0
- package/dist/nervous-system/adapters/ReflexLayer.d.ts +231 -0
- package/dist/nervous-system/adapters/ReflexLayer.d.ts.map +1 -0
- package/dist/nervous-system/adapters/ReflexLayer.js +309 -0
- package/dist/nervous-system/adapters/ReflexLayer.js.map +1 -0
- package/dist/nervous-system/index.d.ts +25 -0
- package/dist/nervous-system/index.d.ts.map +1 -0
- package/dist/nervous-system/index.js +80 -0
- package/dist/nervous-system/index.js.map +1 -0
- package/dist/nervous-system/integration/BTSPLearningEngine.d.ts +266 -0
- package/dist/nervous-system/integration/BTSPLearningEngine.d.ts.map +1 -0
- package/dist/nervous-system/integration/BTSPLearningEngine.js +587 -0
- package/dist/nervous-system/integration/BTSPLearningEngine.js.map +1 -0
- package/dist/nervous-system/integration/CircadianAgent.d.ts +389 -0
- package/dist/nervous-system/integration/CircadianAgent.d.ts.map +1 -0
- package/dist/nervous-system/integration/CircadianAgent.js +696 -0
- package/dist/nervous-system/integration/CircadianAgent.js.map +1 -0
- package/dist/nervous-system/integration/HybridPatternStore.d.ts +244 -0
- package/dist/nervous-system/integration/HybridPatternStore.d.ts.map +1 -0
- package/dist/nervous-system/integration/HybridPatternStore.js +622 -0
- package/dist/nervous-system/integration/HybridPatternStore.js.map +1 -0
- package/dist/nervous-system/integration/NervousSystemEnhancement.d.ts +459 -0
- package/dist/nervous-system/integration/NervousSystemEnhancement.d.ts.map +1 -0
- package/dist/nervous-system/integration/NervousSystemEnhancement.js +921 -0
- package/dist/nervous-system/integration/NervousSystemEnhancement.js.map +1 -0
- package/dist/nervous-system/integration/WorkspaceAgent.d.ts +398 -0
- package/dist/nervous-system/integration/WorkspaceAgent.d.ts.map +1 -0
- package/dist/nervous-system/integration/WorkspaceAgent.js +722 -0
- package/dist/nervous-system/integration/WorkspaceAgent.js.map +1 -0
- package/dist/nervous-system/integration/index.d.ts +22 -0
- package/dist/nervous-system/integration/index.d.ts.map +1 -0
- package/dist/nervous-system/integration/index.js +44 -0
- package/dist/nervous-system/integration/index.js.map +1 -0
- package/dist/nervous-system/persistence/BTSPSerializer.d.ts +96 -0
- package/dist/nervous-system/persistence/BTSPSerializer.d.ts.map +1 -0
- package/dist/nervous-system/persistence/BTSPSerializer.js +223 -0
- package/dist/nervous-system/persistence/BTSPSerializer.js.map +1 -0
- package/dist/nervous-system/persistence/CircadianSerializer.d.ts +90 -0
- package/dist/nervous-system/persistence/CircadianSerializer.d.ts.map +1 -0
- package/dist/nervous-system/persistence/CircadianSerializer.js +239 -0
- package/dist/nervous-system/persistence/CircadianSerializer.js.map +1 -0
- package/dist/nervous-system/persistence/HdcSerializer.d.ts +100 -0
- package/dist/nervous-system/persistence/HdcSerializer.d.ts.map +1 -0
- package/dist/nervous-system/persistence/HdcSerializer.js +259 -0
- package/dist/nervous-system/persistence/HdcSerializer.js.map +1 -0
- package/dist/nervous-system/persistence/INervousSystemStore.d.ts +208 -0
- package/dist/nervous-system/persistence/INervousSystemStore.d.ts.map +1 -0
- package/dist/nervous-system/persistence/INervousSystemStore.js +11 -0
- package/dist/nervous-system/persistence/INervousSystemStore.js.map +1 -0
- package/dist/nervous-system/persistence/NervousSystemPersistenceManager.d.ts +187 -0
- package/dist/nervous-system/persistence/NervousSystemPersistenceManager.d.ts.map +1 -0
- package/dist/nervous-system/persistence/NervousSystemPersistenceManager.js +411 -0
- package/dist/nervous-system/persistence/NervousSystemPersistenceManager.js.map +1 -0
- package/dist/nervous-system/persistence/SQLiteNervousSystemStore.d.ts +98 -0
- package/dist/nervous-system/persistence/SQLiteNervousSystemStore.d.ts.map +1 -0
- package/dist/nervous-system/persistence/SQLiteNervousSystemStore.js +510 -0
- package/dist/nervous-system/persistence/SQLiteNervousSystemStore.js.map +1 -0
- package/dist/nervous-system/persistence/index.d.ts +22 -0
- package/dist/nervous-system/persistence/index.d.ts.map +1 -0
- package/dist/nervous-system/persistence/index.js +45 -0
- package/dist/nervous-system/persistence/index.js.map +1 -0
- package/dist/nervous-system/wasm-loader.d.ts +52 -0
- package/dist/nervous-system/wasm-loader.d.ts.map +1 -0
- package/dist/nervous-system/wasm-loader.js +188 -0
- package/dist/nervous-system/wasm-loader.js.map +1 -0
- package/dist/persistence/HybridPersistenceProvider.d.ts +184 -0
- package/dist/persistence/HybridPersistenceProvider.d.ts.map +1 -0
- package/dist/persistence/HybridPersistenceProvider.js +1086 -0
- package/dist/persistence/HybridPersistenceProvider.js.map +1 -0
- package/dist/persistence/IPersistenceProvider.d.ts +657 -0
- package/dist/persistence/IPersistenceProvider.d.ts.map +1 -0
- package/dist/persistence/IPersistenceProvider.js +11 -0
- package/dist/persistence/IPersistenceProvider.js.map +1 -0
- package/dist/persistence/SupabaseConfig.d.ts +176 -0
- package/dist/persistence/SupabaseConfig.d.ts.map +1 -0
- package/dist/persistence/SupabaseConfig.js +277 -0
- package/dist/persistence/SupabaseConfig.js.map +1 -0
- package/dist/persistence/SupabasePersistenceProvider.d.ts +143 -0
- package/dist/persistence/SupabasePersistenceProvider.d.ts.map +1 -0
- package/dist/persistence/SupabasePersistenceProvider.js +959 -0
- package/dist/persistence/SupabasePersistenceProvider.js.map +1 -0
- package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.d.ts +213 -0
- package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.d.ts.map +1 -0
- package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.js +468 -0
- package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.js.map +1 -0
- package/dist/persistence/adapters/MemorySyncAdapter.d.ts +115 -0
- package/dist/persistence/adapters/MemorySyncAdapter.d.ts.map +1 -0
- package/dist/persistence/adapters/MemorySyncAdapter.js +291 -0
- package/dist/persistence/adapters/MemorySyncAdapter.js.map +1 -0
- package/dist/persistence/adapters/index.d.ts +11 -0
- package/dist/persistence/adapters/index.d.ts.map +1 -0
- package/dist/persistence/adapters/index.js +20 -0
- package/dist/persistence/adapters/index.js.map +1 -0
- package/dist/persistence/index.d.ts +14 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +36 -1
- package/dist/persistence/index.js.map +1 -1
- package/package.json +7 -1
|
@@ -9,31 +9,137 @@
|
|
|
9
9
|
* - Embedding caching with content hashing
|
|
10
10
|
* - Progress tracking for large batches
|
|
11
11
|
* - Error handling and retries
|
|
12
|
+
* - Pluggable storage backends (SP-2 - Issue #146)
|
|
12
13
|
*/
|
|
13
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
15
|
exports.NomicEmbedder = void 0;
|
|
15
16
|
const OllamaClient_1 = require("./OllamaClient");
|
|
16
17
|
const EmbeddingCache_1 = require("./EmbeddingCache");
|
|
18
|
+
const EmbeddingCacheFactory_js_1 = require("./EmbeddingCacheFactory.js");
|
|
17
19
|
const types_1 = require("./types");
|
|
18
20
|
class NomicEmbedder {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Create a NomicEmbedder instance
|
|
23
|
+
*
|
|
24
|
+
* @example Basic usage (backward compatible):
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const embedder = new NomicEmbedder();
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @example With configuration object:
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const embedder = new NomicEmbedder({
|
|
32
|
+
* ollamaBaseUrl: 'http://localhost:11434',
|
|
33
|
+
* cacheBackend: 'sqlite',
|
|
34
|
+
* cacheConfig: { sqlite: { dbPath: './data/embeddings.db' } }
|
|
35
|
+
* });
|
|
36
|
+
* await embedder.initializeCache();
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @example Legacy constructor (deprecated but supported):
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const embedder = new NomicEmbedder('http://localhost:11434', 5000, 50);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
constructor(configOrUrl, maxCacheSize, batchSize = types_1.EMBEDDING_CONFIG.BATCH_SIZE) {
|
|
45
|
+
this.cacheInitialized = false;
|
|
46
|
+
// Handle both legacy and new constructor signatures
|
|
47
|
+
if (typeof configOrUrl === 'string' || configOrUrl === undefined) {
|
|
48
|
+
// Legacy constructor: (ollamaBaseUrl?, maxCacheSize?, batchSize?)
|
|
49
|
+
this.client = new OllamaClient_1.OllamaClient(configOrUrl);
|
|
50
|
+
this.cache = new EmbeddingCache_1.EmbeddingCache(maxCacheSize);
|
|
51
|
+
this.batchSize = batchSize;
|
|
52
|
+
this.cacheInitialized = true; // Simple cache is immediately ready
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// New constructor with config object
|
|
56
|
+
const config = configOrUrl;
|
|
57
|
+
this.client = new OllamaClient_1.OllamaClient(config.ollamaBaseUrl);
|
|
58
|
+
this.batchSize = config.batchSize ?? types_1.EMBEDDING_CONFIG.BATCH_SIZE;
|
|
59
|
+
if (config.cache) {
|
|
60
|
+
// Use pre-configured cache
|
|
61
|
+
this.cache = config.cache;
|
|
62
|
+
if (config.cache instanceof EmbeddingCacheFactory_js_1.EnhancedEmbeddingCache) {
|
|
63
|
+
this.enhancedCache = config.cache;
|
|
64
|
+
}
|
|
65
|
+
this.cacheInitialized = true;
|
|
66
|
+
}
|
|
67
|
+
else if (config.cacheBackend && config.cacheBackend !== 'memory') {
|
|
68
|
+
// Create enhanced cache with specified backend
|
|
69
|
+
this.enhancedCache = (0, EmbeddingCacheFactory_js_1.createEmbeddingCache)({
|
|
70
|
+
backend: config.cacheBackend,
|
|
71
|
+
maxSize: config.maxCacheSize ?? config.cacheConfig?.maxSize,
|
|
72
|
+
...config.cacheConfig,
|
|
73
|
+
});
|
|
74
|
+
this.cache = this.enhancedCache;
|
|
75
|
+
// Enhanced cache needs initialization
|
|
76
|
+
this.cacheInitialized = false;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Default: Simple in-memory cache (backward compatible)
|
|
80
|
+
this.cache = new EmbeddingCache_1.EmbeddingCache(config.maxCacheSize);
|
|
81
|
+
this.cacheInitialized = true;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Initialize the cache backend (required for Redis/SQLite)
|
|
87
|
+
* No-op for simple in-memory cache
|
|
88
|
+
*/
|
|
89
|
+
async initializeCache() {
|
|
90
|
+
if (this.cacheInitialized) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (this.enhancedCache) {
|
|
94
|
+
await this.enhancedCache.initialize();
|
|
95
|
+
}
|
|
96
|
+
this.cacheInitialized = true;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Close the cache backend and release resources
|
|
100
|
+
*/
|
|
101
|
+
async closeCache() {
|
|
102
|
+
if (this.enhancedCache) {
|
|
103
|
+
await this.enhancedCache.close();
|
|
104
|
+
}
|
|
105
|
+
this.cacheInitialized = false;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if using enhanced cache with pluggable backend
|
|
109
|
+
*/
|
|
110
|
+
isUsingEnhancedCache() {
|
|
111
|
+
return this.enhancedCache !== undefined;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get the cache backend type
|
|
115
|
+
*/
|
|
116
|
+
getCacheBackendType() {
|
|
117
|
+
if (this.enhancedCache) {
|
|
118
|
+
return this.enhancedCache.getBackendName();
|
|
119
|
+
}
|
|
120
|
+
return 'memory';
|
|
23
121
|
}
|
|
24
122
|
/**
|
|
25
123
|
* Generate embedding for a single text string
|
|
26
124
|
*/
|
|
27
125
|
async embed(text) {
|
|
28
|
-
//
|
|
29
|
-
|
|
126
|
+
// Ensure cache is initialized
|
|
127
|
+
if (!this.cacheInitialized) {
|
|
128
|
+
await this.initializeCache();
|
|
129
|
+
}
|
|
130
|
+
// Check cache first (handle both sync and async)
|
|
131
|
+
const cachedResult = this.cache.get(text, types_1.EMBEDDING_CONFIG.MODEL);
|
|
132
|
+
const cached = cachedResult instanceof Promise ? await cachedResult : cachedResult;
|
|
30
133
|
if (cached) {
|
|
31
134
|
return cached;
|
|
32
135
|
}
|
|
33
136
|
// Generate new embedding
|
|
34
137
|
const embedding = await this.client.generateEmbedding(text);
|
|
35
|
-
// Cache result
|
|
36
|
-
this.cache.set(text, types_1.EMBEDDING_CONFIG.MODEL, embedding);
|
|
138
|
+
// Cache result (handle both sync and async)
|
|
139
|
+
const setResult = this.cache.set(text, types_1.EMBEDDING_CONFIG.MODEL, embedding);
|
|
140
|
+
if (setResult instanceof Promise) {
|
|
141
|
+
await setResult;
|
|
142
|
+
}
|
|
37
143
|
return embedding;
|
|
38
144
|
}
|
|
39
145
|
/**
|
|
@@ -70,6 +176,10 @@ class NomicEmbedder {
|
|
|
70
176
|
* Generate embeddings for multiple code chunks with batching
|
|
71
177
|
*/
|
|
72
178
|
async embedBatch(chunks, progressCallback) {
|
|
179
|
+
// Ensure cache is initialized
|
|
180
|
+
if (!this.cacheInitialized) {
|
|
181
|
+
await this.initializeCache();
|
|
182
|
+
}
|
|
73
183
|
const startTime = Date.now();
|
|
74
184
|
const results = [];
|
|
75
185
|
let cachedHits = 0;
|
|
@@ -127,8 +237,9 @@ class NomicEmbedder {
|
|
|
127
237
|
const promises = chunks.map(async (chunk) => {
|
|
128
238
|
const formattedText = this.formatForEmbedding(chunk);
|
|
129
239
|
const chunkStartTime = Date.now();
|
|
130
|
-
// Check cache
|
|
131
|
-
const
|
|
240
|
+
// Check cache (handle both sync and async)
|
|
241
|
+
const cacheResult = this.cache.get(formattedText, types_1.EMBEDDING_CONFIG.MODEL);
|
|
242
|
+
const cachedEmbedding = cacheResult instanceof Promise ? await cacheResult : cacheResult;
|
|
132
243
|
if (cachedEmbedding) {
|
|
133
244
|
return {
|
|
134
245
|
chunkId: chunk.id,
|
|
@@ -141,8 +252,11 @@ class NomicEmbedder {
|
|
|
141
252
|
// Generate new embedding
|
|
142
253
|
try {
|
|
143
254
|
const embedding = await this.client.generateEmbedding(formattedText);
|
|
144
|
-
// Cache the result
|
|
145
|
-
this.cache.set(formattedText, types_1.EMBEDDING_CONFIG.MODEL, embedding);
|
|
255
|
+
// Cache the result (handle both sync and async)
|
|
256
|
+
const setResult = this.cache.set(formattedText, types_1.EMBEDDING_CONFIG.MODEL, embedding);
|
|
257
|
+
if (setResult instanceof Promise) {
|
|
258
|
+
await setResult;
|
|
259
|
+
}
|
|
146
260
|
return {
|
|
147
261
|
chunkId: chunk.id,
|
|
148
262
|
embedding,
|
|
@@ -162,20 +276,38 @@ class NomicEmbedder {
|
|
|
162
276
|
/**
|
|
163
277
|
* Clear the embedding cache
|
|
164
278
|
*/
|
|
165
|
-
clearCache() {
|
|
166
|
-
this.cache.clear();
|
|
279
|
+
async clearCache() {
|
|
280
|
+
const result = this.cache.clear();
|
|
281
|
+
if (result instanceof Promise) {
|
|
282
|
+
await result;
|
|
283
|
+
}
|
|
167
284
|
}
|
|
168
285
|
/**
|
|
169
286
|
* Get cache statistics
|
|
170
287
|
*/
|
|
171
|
-
getCacheStats() {
|
|
172
|
-
|
|
288
|
+
async getCacheStats() {
|
|
289
|
+
const result = this.cache.getStats();
|
|
290
|
+
if (result instanceof Promise) {
|
|
291
|
+
return await result;
|
|
292
|
+
}
|
|
293
|
+
return result;
|
|
173
294
|
}
|
|
174
295
|
/**
|
|
175
296
|
* Get cache memory usage estimate
|
|
297
|
+
* Note: Only available for simple in-memory cache
|
|
176
298
|
*/
|
|
177
299
|
getCacheMemoryUsage() {
|
|
178
|
-
|
|
300
|
+
// Only simple EmbeddingCache has this method
|
|
301
|
+
if (this.cache instanceof EmbeddingCache_1.EmbeddingCache) {
|
|
302
|
+
return this.cache.getMemoryUsageEstimate();
|
|
303
|
+
}
|
|
304
|
+
// For enhanced cache, estimate based on stats
|
|
305
|
+
const stats = this.cache.getStats?.();
|
|
306
|
+
if (stats && typeof stats === 'object' && 'size' in stats) {
|
|
307
|
+
// Rough estimate: 768 floats * 8 bytes + 100 bytes overhead per entry
|
|
308
|
+
return stats.size * (768 * 8 + 100);
|
|
309
|
+
}
|
|
310
|
+
return 0;
|
|
179
311
|
}
|
|
180
312
|
/**
|
|
181
313
|
* Verify Ollama connection and model availability
|
|
@@ -191,9 +323,18 @@ class NomicEmbedder {
|
|
|
191
323
|
}
|
|
192
324
|
/**
|
|
193
325
|
* Evict old cache entries
|
|
326
|
+
* Note: For enhanced cache with Redis/SQLite, TTL-based expiration is automatic
|
|
194
327
|
*/
|
|
195
|
-
evictOldCacheEntries(ageMs) {
|
|
196
|
-
|
|
328
|
+
async evictOldCacheEntries(ageMs) {
|
|
329
|
+
// Simple EmbeddingCache has evictOlderThan
|
|
330
|
+
if (this.cache instanceof EmbeddingCache_1.EmbeddingCache) {
|
|
331
|
+
return this.cache.evictOlderThan(ageMs);
|
|
332
|
+
}
|
|
333
|
+
// Enhanced cache uses prune method
|
|
334
|
+
if (this.enhancedCache) {
|
|
335
|
+
return this.enhancedCache.prune();
|
|
336
|
+
}
|
|
337
|
+
return 0;
|
|
197
338
|
}
|
|
198
339
|
/**
|
|
199
340
|
* Warmup cache with common code patterns
|
|
@@ -210,8 +351,8 @@ class NomicEmbedder {
|
|
|
210
351
|
/**
|
|
211
352
|
* Estimate total time for embedding batch
|
|
212
353
|
*/
|
|
213
|
-
estimateBatchTime(chunkCount, assumedTimePerEmbeddingMs = 100) {
|
|
214
|
-
const cacheStats = this.getCacheStats();
|
|
354
|
+
async estimateBatchTime(chunkCount, assumedTimePerEmbeddingMs = 100) {
|
|
355
|
+
const cacheStats = await this.getCacheStats();
|
|
215
356
|
const expectedCacheHitRate = cacheStats.hitRate || 0;
|
|
216
357
|
const expectedCacheMisses = chunkCount * (1 - expectedCacheHitRate);
|
|
217
358
|
return expectedCacheMisses * assumedTimePerEmbeddingMs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NomicEmbedder.js","sourceRoot":"","sources":["../../../src/code-intelligence/embeddings/NomicEmbedder.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"NomicEmbedder.js","sourceRoot":"","sources":["../../../src/code-intelligence/embeddings/NomicEmbedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Storage Backend for Embedding Cache
|
|
3
|
+
*
|
|
4
|
+
* In-memory storage with LRU eviction. Best for single-process
|
|
5
|
+
* applications with moderate cache sizes.
|
|
6
|
+
*
|
|
7
|
+
* @module code-intelligence/embeddings/backends/MemoryBackend
|
|
8
|
+
* @see Issue #146 - Security Hardening: SP-2 Dedicated Embedding Cache
|
|
9
|
+
*/
|
|
10
|
+
import type { EmbeddingCacheEntry } from '../types.js';
|
|
11
|
+
import type { EmbeddingStorageBackend, MemoryBackendConfig, BackendStats } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Memory-based embedding storage backend
|
|
14
|
+
*
|
|
15
|
+
* Features:
|
|
16
|
+
* - LRU eviction when maxSize is reached
|
|
17
|
+
* - O(1) get/set operations
|
|
18
|
+
* - Automatic TTL-based expiration
|
|
19
|
+
*/
|
|
20
|
+
export declare class MemoryStorageBackend implements EmbeddingStorageBackend {
|
|
21
|
+
readonly name = "memory";
|
|
22
|
+
readonly type: "memory";
|
|
23
|
+
private cache;
|
|
24
|
+
private config;
|
|
25
|
+
private initialized;
|
|
26
|
+
constructor(config?: MemoryBackendConfig);
|
|
27
|
+
initialize(): Promise<void>;
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
isHealthy(): Promise<boolean>;
|
|
30
|
+
get(key: string): Promise<EmbeddingCacheEntry | null>;
|
|
31
|
+
set(key: string, entry: EmbeddingCacheEntry): Promise<void>;
|
|
32
|
+
has(key: string): Promise<boolean>;
|
|
33
|
+
delete(key: string): Promise<boolean>;
|
|
34
|
+
clear(): Promise<void>;
|
|
35
|
+
size(): Promise<number>;
|
|
36
|
+
keys(): AsyncIterable<string>;
|
|
37
|
+
pruneExpired(maxAgeMs: number): Promise<number>;
|
|
38
|
+
/**
|
|
39
|
+
* Get backend statistics
|
|
40
|
+
*/
|
|
41
|
+
getStats(): BackendStats;
|
|
42
|
+
/**
|
|
43
|
+
* Get all entries (for export/migration)
|
|
44
|
+
*/
|
|
45
|
+
exportAll(): Promise<Array<{
|
|
46
|
+
key: string;
|
|
47
|
+
entry: EmbeddingCacheEntry;
|
|
48
|
+
}>>;
|
|
49
|
+
/**
|
|
50
|
+
* Import entries (for migration)
|
|
51
|
+
*/
|
|
52
|
+
importAll(entries: Array<{
|
|
53
|
+
key: string;
|
|
54
|
+
entry: EmbeddingCacheEntry;
|
|
55
|
+
}>): Promise<number>;
|
|
56
|
+
private isExpired;
|
|
57
|
+
private log;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=MemoryBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryBackend.d.ts","sourceRoot":"","sources":["../../../../src/code-intelligence/embeddings/backends/MemoryBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB;;;;;;;GAOG;AACH,qBAAa,oBAAqB,YAAW,uBAAuB;IAClE,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAElC,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,GAAE,mBAAwB;IAWtC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAI7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAsBrD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAItB,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC;IAM9B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBrD;;OAEG;IACH,QAAQ,IAAI,YAAY;IAexB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,mBAAmB,CAAA;KAAE,CAAC,CAAC;IAY9E;;OAEG;IACG,SAAS,CACb,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,mBAAmB,CAAA;KAAE,CAAC,GAC1D,OAAO,CAAC,MAAM,CAAC;IAkBlB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,GAAG;CAKZ"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Memory Storage Backend for Embedding Cache
|
|
4
|
+
*
|
|
5
|
+
* In-memory storage with LRU eviction. Best for single-process
|
|
6
|
+
* applications with moderate cache sizes.
|
|
7
|
+
*
|
|
8
|
+
* @module code-intelligence/embeddings/backends/MemoryBackend
|
|
9
|
+
* @see Issue #146 - Security Hardening: SP-2 Dedicated Embedding Cache
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.MemoryStorageBackend = void 0;
|
|
13
|
+
const types_js_1 = require("./types.js");
|
|
14
|
+
/**
|
|
15
|
+
* Memory-based embedding storage backend
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - LRU eviction when maxSize is reached
|
|
19
|
+
* - O(1) get/set operations
|
|
20
|
+
* - Automatic TTL-based expiration
|
|
21
|
+
*/
|
|
22
|
+
class MemoryStorageBackend {
|
|
23
|
+
constructor(config = {}) {
|
|
24
|
+
this.name = 'memory';
|
|
25
|
+
this.type = 'memory';
|
|
26
|
+
this.initialized = false;
|
|
27
|
+
this.config = {
|
|
28
|
+
maxSize: config.maxSize ?? types_js_1.DEFAULT_MAX_SIZE,
|
|
29
|
+
defaultTtlMs: config.defaultTtlMs ?? types_js_1.DEFAULT_TTL_MS,
|
|
30
|
+
debug: config.debug ?? false,
|
|
31
|
+
enableLru: config.enableLru ?? true,
|
|
32
|
+
};
|
|
33
|
+
this.cache = new Map();
|
|
34
|
+
}
|
|
35
|
+
async initialize() {
|
|
36
|
+
this.initialized = true;
|
|
37
|
+
this.log('Memory backend initialized');
|
|
38
|
+
}
|
|
39
|
+
async close() {
|
|
40
|
+
this.cache.clear();
|
|
41
|
+
this.initialized = false;
|
|
42
|
+
this.log('Memory backend closed');
|
|
43
|
+
}
|
|
44
|
+
async isHealthy() {
|
|
45
|
+
return this.initialized;
|
|
46
|
+
}
|
|
47
|
+
async get(key) {
|
|
48
|
+
const entry = this.cache.get(key);
|
|
49
|
+
if (!entry) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
// Check if expired
|
|
53
|
+
if (this.isExpired(entry)) {
|
|
54
|
+
this.cache.delete(key);
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
// LRU: Move to end
|
|
58
|
+
if (this.config.enableLru) {
|
|
59
|
+
this.cache.delete(key);
|
|
60
|
+
this.cache.set(key, entry);
|
|
61
|
+
}
|
|
62
|
+
return entry;
|
|
63
|
+
}
|
|
64
|
+
async set(key, entry) {
|
|
65
|
+
// Evict oldest if at capacity
|
|
66
|
+
if (this.cache.size >= this.config.maxSize && !this.cache.has(key)) {
|
|
67
|
+
const firstKey = this.cache.keys().next().value;
|
|
68
|
+
if (firstKey) {
|
|
69
|
+
this.cache.delete(firstKey);
|
|
70
|
+
this.log(`Evicted oldest entry: ${firstKey.substring(0, 16)}...`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
this.cache.set(key, entry);
|
|
74
|
+
}
|
|
75
|
+
async has(key) {
|
|
76
|
+
const entry = this.cache.get(key);
|
|
77
|
+
if (!entry)
|
|
78
|
+
return false;
|
|
79
|
+
if (this.isExpired(entry)) {
|
|
80
|
+
this.cache.delete(key);
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
async delete(key) {
|
|
86
|
+
return this.cache.delete(key);
|
|
87
|
+
}
|
|
88
|
+
async clear() {
|
|
89
|
+
this.cache.clear();
|
|
90
|
+
this.log('Cache cleared');
|
|
91
|
+
}
|
|
92
|
+
async size() {
|
|
93
|
+
return this.cache.size;
|
|
94
|
+
}
|
|
95
|
+
async *keys() {
|
|
96
|
+
for (const key of this.cache.keys()) {
|
|
97
|
+
yield key;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async pruneExpired(maxAgeMs) {
|
|
101
|
+
const now = Date.now();
|
|
102
|
+
const threshold = now - maxAgeMs;
|
|
103
|
+
let pruned = 0;
|
|
104
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
105
|
+
if (entry.timestamp < threshold) {
|
|
106
|
+
this.cache.delete(key);
|
|
107
|
+
pruned++;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (pruned > 0) {
|
|
111
|
+
this.log(`Pruned ${pruned} expired entries`);
|
|
112
|
+
}
|
|
113
|
+
return pruned;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get backend statistics
|
|
117
|
+
*/
|
|
118
|
+
getStats() {
|
|
119
|
+
return {
|
|
120
|
+
name: this.name,
|
|
121
|
+
type: this.type,
|
|
122
|
+
size: this.cache.size,
|
|
123
|
+
memoryUsageBytes: this.cache.size * types_js_1.BYTES_PER_ENTRY,
|
|
124
|
+
healthy: this.initialized,
|
|
125
|
+
lastHealthCheck: new Date(),
|
|
126
|
+
metrics: {
|
|
127
|
+
maxSize: this.config.maxSize,
|
|
128
|
+
utilization: (this.cache.size / this.config.maxSize) * 100,
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get all entries (for export/migration)
|
|
134
|
+
*/
|
|
135
|
+
async exportAll() {
|
|
136
|
+
const entries = [];
|
|
137
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
138
|
+
if (!this.isExpired(entry)) {
|
|
139
|
+
entries.push({ key, entry });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return entries;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Import entries (for migration)
|
|
146
|
+
*/
|
|
147
|
+
async importAll(entries) {
|
|
148
|
+
let imported = 0;
|
|
149
|
+
for (const { key, entry } of entries) {
|
|
150
|
+
if (!this.isExpired(entry) && this.cache.size < this.config.maxSize) {
|
|
151
|
+
this.cache.set(key, entry);
|
|
152
|
+
imported++;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
this.log(`Imported ${imported} entries`);
|
|
156
|
+
return imported;
|
|
157
|
+
}
|
|
158
|
+
// ============================================
|
|
159
|
+
// Private Methods
|
|
160
|
+
// ============================================
|
|
161
|
+
isExpired(entry) {
|
|
162
|
+
if (this.config.defaultTtlMs === 0)
|
|
163
|
+
return false;
|
|
164
|
+
return Date.now() - entry.timestamp > this.config.defaultTtlMs;
|
|
165
|
+
}
|
|
166
|
+
log(message) {
|
|
167
|
+
if (this.config.debug) {
|
|
168
|
+
console.log(`[MemoryBackend] ${message}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.MemoryStorageBackend = MemoryStorageBackend;
|
|
173
|
+
//# sourceMappingURL=MemoryBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryBackend.js","sourceRoot":"","sources":["../../../../src/code-intelligence/embeddings/backends/MemoryBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis Storage Backend for Embedding Cache
|
|
3
|
+
*
|
|
4
|
+
* Distributed caching with automatic TTL expiration.
|
|
5
|
+
* Best for multi-process/multi-server deployments.
|
|
6
|
+
*
|
|
7
|
+
* @module code-intelligence/embeddings/backends/RedisBackend
|
|
8
|
+
* @see Issue #146 - Security Hardening: SP-2 Dedicated Embedding Cache
|
|
9
|
+
*/
|
|
10
|
+
import type { EmbeddingCacheEntry } from '../types.js';
|
|
11
|
+
import type { EmbeddingStorageBackend, RedisBackendConfig, BackendStats } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Redis-based embedding storage backend
|
|
14
|
+
*
|
|
15
|
+
* Features:
|
|
16
|
+
* - Distributed caching across processes
|
|
17
|
+
* - Automatic TTL expiration via Redis SETEX
|
|
18
|
+
* - Connection pooling via ioredis
|
|
19
|
+
* - Graceful degradation on connection failure
|
|
20
|
+
*/
|
|
21
|
+
export declare class RedisStorageBackend implements EmbeddingStorageBackend {
|
|
22
|
+
readonly name = "redis";
|
|
23
|
+
readonly type: "redis";
|
|
24
|
+
private client;
|
|
25
|
+
private config;
|
|
26
|
+
private initialized;
|
|
27
|
+
private healthy;
|
|
28
|
+
constructor(config: RedisBackendConfig);
|
|
29
|
+
initialize(): Promise<void>;
|
|
30
|
+
close(): Promise<void>;
|
|
31
|
+
isHealthy(): Promise<boolean>;
|
|
32
|
+
get(key: string): Promise<EmbeddingCacheEntry | null>;
|
|
33
|
+
set(key: string, entry: EmbeddingCacheEntry): Promise<void>;
|
|
34
|
+
has(key: string): Promise<boolean>;
|
|
35
|
+
delete(key: string): Promise<boolean>;
|
|
36
|
+
clear(): Promise<void>;
|
|
37
|
+
size(): Promise<number>;
|
|
38
|
+
keys(): AsyncIterable<string>;
|
|
39
|
+
pruneExpired(_maxAgeMs: number): Promise<number>;
|
|
40
|
+
/**
|
|
41
|
+
* Get backend statistics
|
|
42
|
+
*/
|
|
43
|
+
getStats(): Promise<BackendStats>;
|
|
44
|
+
private prefixKey;
|
|
45
|
+
private serialize;
|
|
46
|
+
private deserialize;
|
|
47
|
+
private ensureClient;
|
|
48
|
+
private log;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=RedisBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisBackend.d.ts","sourceRoot":"","sources":["../../../../src/code-intelligence/embeddings/backends/RedisBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,EACb,MAAM,YAAY,CAAC;AAgBpB;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,YAAW,uBAAuB;IACjE,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,OAAO,CAAkB;gBAErB,MAAM,EAAE,kBAAkB;IAiBhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAa7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAcrD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWlC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCtB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IA0BtB,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC;IAuB9B,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAqBvC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,GAAG;CAKZ"}
|