cccmemory 1.8.0
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/LICENSE +21 -0
- package/README.md +349 -0
- package/dist/ConversationMemory.d.ts +231 -0
- package/dist/ConversationMemory.d.ts.map +1 -0
- package/dist/ConversationMemory.js +357 -0
- package/dist/ConversationMemory.js.map +1 -0
- package/dist/cache/QueryCache.d.ts +215 -0
- package/dist/cache/QueryCache.d.ts.map +1 -0
- package/dist/cache/QueryCache.js +294 -0
- package/dist/cache/QueryCache.js.map +1 -0
- package/dist/cli/commands.d.ts +9 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +954 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/help.d.ts +16 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +361 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +30 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +111 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/context/ContextInjector.d.ts +38 -0
- package/dist/context/ContextInjector.d.ts.map +1 -0
- package/dist/context/ContextInjector.js +235 -0
- package/dist/context/ContextInjector.js.map +1 -0
- package/dist/documentation/CodeAnalyzer.d.ts +29 -0
- package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
- package/dist/documentation/CodeAnalyzer.js +122 -0
- package/dist/documentation/CodeAnalyzer.js.map +1 -0
- package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
- package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
- package/dist/documentation/ConversationAnalyzer.js +157 -0
- package/dist/documentation/ConversationAnalyzer.js.map +1 -0
- package/dist/documentation/CrossReferencer.d.ts +67 -0
- package/dist/documentation/CrossReferencer.d.ts.map +1 -0
- package/dist/documentation/CrossReferencer.js +247 -0
- package/dist/documentation/CrossReferencer.js.map +1 -0
- package/dist/documentation/DocumentationGenerator.d.ts +22 -0
- package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
- package/dist/documentation/DocumentationGenerator.js +57 -0
- package/dist/documentation/DocumentationGenerator.js.map +1 -0
- package/dist/documentation/MarkdownFormatter.d.ts +26 -0
- package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
- package/dist/documentation/MarkdownFormatter.js +301 -0
- package/dist/documentation/MarkdownFormatter.js.map +1 -0
- package/dist/documentation/types.d.ts +176 -0
- package/dist/documentation/types.d.ts.map +1 -0
- package/dist/documentation/types.js +5 -0
- package/dist/documentation/types.js.map +1 -0
- package/dist/embeddings/ConfigManager.d.ts +46 -0
- package/dist/embeddings/ConfigManager.d.ts.map +1 -0
- package/dist/embeddings/ConfigManager.js +177 -0
- package/dist/embeddings/ConfigManager.js.map +1 -0
- package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
- package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingConfig.js +132 -0
- package/dist/embeddings/EmbeddingConfig.js.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts +51 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.js +157 -0
- package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
- package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
- package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingProvider.js +6 -0
- package/dist/embeddings/EmbeddingProvider.js.map +1 -0
- package/dist/embeddings/ModelRegistry.d.ts +48 -0
- package/dist/embeddings/ModelRegistry.d.ts.map +1 -0
- package/dist/embeddings/ModelRegistry.js +170 -0
- package/dist/embeddings/ModelRegistry.js.map +1 -0
- package/dist/embeddings/VectorStore.d.ts +114 -0
- package/dist/embeddings/VectorStore.d.ts.map +1 -0
- package/dist/embeddings/VectorStore.js +393 -0
- package/dist/embeddings/VectorStore.js.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js +125 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js +129 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js +115 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
- package/dist/handoff/SessionHandoffStore.d.ts +80 -0
- package/dist/handoff/SessionHandoffStore.d.ts.map +1 -0
- package/dist/handoff/SessionHandoffStore.js +314 -0
- package/dist/handoff/SessionHandoffStore.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +115 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +27 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +157 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/memory/WorkingMemoryStore.d.ts +83 -0
- package/dist/memory/WorkingMemoryStore.d.ts.map +1 -0
- package/dist/memory/WorkingMemoryStore.js +318 -0
- package/dist/memory/WorkingMemoryStore.js.map +1 -0
- package/dist/memory/types.d.ts +192 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +8 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/parsers/CodexConversationParser.d.ts +51 -0
- package/dist/parsers/CodexConversationParser.d.ts.map +1 -0
- package/dist/parsers/CodexConversationParser.js +301 -0
- package/dist/parsers/CodexConversationParser.js.map +1 -0
- package/dist/parsers/ConversationParser.d.ts +286 -0
- package/dist/parsers/ConversationParser.d.ts.map +1 -0
- package/dist/parsers/ConversationParser.js +795 -0
- package/dist/parsers/ConversationParser.js.map +1 -0
- package/dist/parsers/DecisionExtractor.d.ts +144 -0
- package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
- package/dist/parsers/DecisionExtractor.js +434 -0
- package/dist/parsers/DecisionExtractor.js.map +1 -0
- package/dist/parsers/GitIntegrator.d.ts +156 -0
- package/dist/parsers/GitIntegrator.d.ts.map +1 -0
- package/dist/parsers/GitIntegrator.js +348 -0
- package/dist/parsers/GitIntegrator.js.map +1 -0
- package/dist/parsers/MistakeExtractor.d.ts +151 -0
- package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
- package/dist/parsers/MistakeExtractor.js +460 -0
- package/dist/parsers/MistakeExtractor.js.map +1 -0
- package/dist/parsers/RequirementsExtractor.d.ts +166 -0
- package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
- package/dist/parsers/RequirementsExtractor.js +338 -0
- package/dist/parsers/RequirementsExtractor.js.map +1 -0
- package/dist/realtime/ConversationWatcher.d.ts +87 -0
- package/dist/realtime/ConversationWatcher.d.ts.map +1 -0
- package/dist/realtime/ConversationWatcher.js +204 -0
- package/dist/realtime/ConversationWatcher.js.map +1 -0
- package/dist/realtime/IncrementalParser.d.ts +83 -0
- package/dist/realtime/IncrementalParser.d.ts.map +1 -0
- package/dist/realtime/IncrementalParser.js +232 -0
- package/dist/realtime/IncrementalParser.js.map +1 -0
- package/dist/realtime/LiveExtractor.d.ts +72 -0
- package/dist/realtime/LiveExtractor.d.ts.map +1 -0
- package/dist/realtime/LiveExtractor.js +288 -0
- package/dist/realtime/LiveExtractor.js.map +1 -0
- package/dist/search/SemanticSearch.d.ts +121 -0
- package/dist/search/SemanticSearch.d.ts.map +1 -0
- package/dist/search/SemanticSearch.js +823 -0
- package/dist/search/SemanticSearch.js.map +1 -0
- package/dist/storage/BackupManager.d.ts +58 -0
- package/dist/storage/BackupManager.d.ts.map +1 -0
- package/dist/storage/BackupManager.js +223 -0
- package/dist/storage/BackupManager.js.map +1 -0
- package/dist/storage/ConversationStorage.d.ts +341 -0
- package/dist/storage/ConversationStorage.d.ts.map +1 -0
- package/dist/storage/ConversationStorage.js +792 -0
- package/dist/storage/ConversationStorage.js.map +1 -0
- package/dist/storage/DeletionService.d.ts +70 -0
- package/dist/storage/DeletionService.d.ts.map +1 -0
- package/dist/storage/DeletionService.js +253 -0
- package/dist/storage/DeletionService.js.map +1 -0
- package/dist/storage/GlobalIndex.d.ts +133 -0
- package/dist/storage/GlobalIndex.d.ts.map +1 -0
- package/dist/storage/GlobalIndex.js +310 -0
- package/dist/storage/GlobalIndex.js.map +1 -0
- package/dist/storage/SQLiteManager.d.ts +114 -0
- package/dist/storage/SQLiteManager.d.ts.map +1 -0
- package/dist/storage/SQLiteManager.js +636 -0
- package/dist/storage/SQLiteManager.js.map +1 -0
- package/dist/storage/migrations.d.ts +54 -0
- package/dist/storage/migrations.d.ts.map +1 -0
- package/dist/storage/migrations.js +285 -0
- package/dist/storage/migrations.js.map +1 -0
- package/dist/storage/schema.sql +436 -0
- package/dist/tools/ToolDefinitions.d.ts +946 -0
- package/dist/tools/ToolDefinitions.d.ts.map +1 -0
- package/dist/tools/ToolDefinitions.js +937 -0
- package/dist/tools/ToolDefinitions.js.map +1 -0
- package/dist/tools/ToolHandlers.d.ts +791 -0
- package/dist/tools/ToolHandlers.d.ts.map +1 -0
- package/dist/tools/ToolHandlers.js +3262 -0
- package/dist/tools/ToolHandlers.js.map +1 -0
- package/dist/types/ToolTypes.d.ts +824 -0
- package/dist/types/ToolTypes.d.ts.map +1 -0
- package/dist/types/ToolTypes.js +6 -0
- package/dist/types/ToolTypes.js.map +1 -0
- package/dist/utils/Logger.d.ts +70 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +131 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/McpConfig.d.ts +54 -0
- package/dist/utils/McpConfig.d.ts.map +1 -0
- package/dist/utils/McpConfig.js +136 -0
- package/dist/utils/McpConfig.js.map +1 -0
- package/dist/utils/ProjectMigration.d.ts +82 -0
- package/dist/utils/ProjectMigration.d.ts.map +1 -0
- package/dist/utils/ProjectMigration.js +416 -0
- package/dist/utils/ProjectMigration.js.map +1 -0
- package/dist/utils/constants.d.ts +75 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +105 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/safeJson.d.ts +37 -0
- package/dist/utils/safeJson.d.ts.map +1 -0
- package/dist/utils/safeJson.js +48 -0
- package/dist/utils/safeJson.js.map +1 -0
- package/dist/utils/sanitization.d.ts +45 -0
- package/dist/utils/sanitization.d.ts.map +1 -0
- package/dist/utils/sanitization.js +153 -0
- package/dist/utils/sanitization.js.map +1 -0
- package/dist/utils/worktree.d.ts +15 -0
- package/dist/utils/worktree.d.ts.map +1 -0
- package/dist/utils/worktree.js +86 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +98 -0
- package/scripts/changelog-check.sh +62 -0
- package/scripts/check-node.js +17 -0
- package/scripts/dev-config.js +56 -0
- package/scripts/postinstall.js +117 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Manager for CLI
|
|
3
|
+
* Handles reading and writing embedding configuration
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
6
|
+
import { join } from "path";
|
|
7
|
+
import { homedir } from "os";
|
|
8
|
+
import { ConfigLoader } from "./EmbeddingConfig.js";
|
|
9
|
+
export class ConfigManager {
|
|
10
|
+
static CONFIG_FILENAME = ".claude-memory-config.json";
|
|
11
|
+
/**
|
|
12
|
+
* Get current effective configuration (after all precedence rules)
|
|
13
|
+
*/
|
|
14
|
+
static getCurrentConfig() {
|
|
15
|
+
return ConfigLoader.load();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get configuration sources breakdown
|
|
19
|
+
*/
|
|
20
|
+
static getConfigSources() {
|
|
21
|
+
const homeConfigPath = join(homedir(), this.CONFIG_FILENAME);
|
|
22
|
+
const projectConfigPath = join(process.cwd(), this.CONFIG_FILENAME);
|
|
23
|
+
const homeConfig = existsSync(homeConfigPath)
|
|
24
|
+
? this.loadConfigFile(homeConfigPath)?.embedding || null
|
|
25
|
+
: null;
|
|
26
|
+
const projectConfig = existsSync(projectConfigPath)
|
|
27
|
+
? this.loadConfigFile(projectConfigPath)?.embedding || null
|
|
28
|
+
: null;
|
|
29
|
+
const envConfig = {};
|
|
30
|
+
if (process.env.EMBEDDING_PROVIDER) {
|
|
31
|
+
envConfig.provider = process.env.EMBEDDING_PROVIDER;
|
|
32
|
+
}
|
|
33
|
+
if (process.env.EMBEDDING_MODEL) {
|
|
34
|
+
envConfig.model = process.env.EMBEDDING_MODEL;
|
|
35
|
+
}
|
|
36
|
+
if (process.env.EMBEDDING_DIMENSIONS) {
|
|
37
|
+
envConfig.dimensions = parseInt(process.env.EMBEDDING_DIMENSIONS, 10);
|
|
38
|
+
}
|
|
39
|
+
if (process.env.EMBEDDING_BASE_URL) {
|
|
40
|
+
envConfig.baseUrl = process.env.EMBEDDING_BASE_URL;
|
|
41
|
+
}
|
|
42
|
+
if (process.env.OPENAI_API_KEY) {
|
|
43
|
+
envConfig.apiKey = process.env.OPENAI_API_KEY;
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
home: homeConfig,
|
|
47
|
+
project: projectConfig,
|
|
48
|
+
env: envConfig,
|
|
49
|
+
effective: ConfigLoader.load(),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get a specific config value
|
|
54
|
+
*/
|
|
55
|
+
static getConfigValue(key) {
|
|
56
|
+
const config = this.getCurrentConfig();
|
|
57
|
+
switch (key) {
|
|
58
|
+
case "provider":
|
|
59
|
+
return config.provider;
|
|
60
|
+
case "model":
|
|
61
|
+
return config.model;
|
|
62
|
+
case "dimensions":
|
|
63
|
+
return config.dimensions;
|
|
64
|
+
case "baseUrl":
|
|
65
|
+
case "base_url":
|
|
66
|
+
return config.baseUrl;
|
|
67
|
+
case "apiKey":
|
|
68
|
+
case "api_key":
|
|
69
|
+
return config.apiKey;
|
|
70
|
+
default:
|
|
71
|
+
throw new Error(`Unknown config key: ${key}. Valid keys: provider, model, dimensions, baseUrl, apiKey`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Set a config value (writes to home config file)
|
|
76
|
+
*/
|
|
77
|
+
static setConfigValue(key, value) {
|
|
78
|
+
const homeConfigPath = join(homedir(), this.CONFIG_FILENAME);
|
|
79
|
+
// Load existing config or create new one
|
|
80
|
+
let config = { embedding: {} };
|
|
81
|
+
if (existsSync(homeConfigPath)) {
|
|
82
|
+
const existing = this.loadConfigFile(homeConfigPath);
|
|
83
|
+
if (existing && existing.embedding) {
|
|
84
|
+
config = { embedding: existing.embedding };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Ensure embedding object exists
|
|
88
|
+
if (!config.embedding) {
|
|
89
|
+
config.embedding = {};
|
|
90
|
+
}
|
|
91
|
+
// Set the value with type conversion
|
|
92
|
+
switch (key) {
|
|
93
|
+
case "provider":
|
|
94
|
+
if (!["ollama", "transformers", "openai"].includes(value)) {
|
|
95
|
+
throw new Error(`Invalid provider: ${value}. Must be 'ollama', 'transformers', or 'openai'`);
|
|
96
|
+
}
|
|
97
|
+
config.embedding.provider = value;
|
|
98
|
+
break;
|
|
99
|
+
case "model":
|
|
100
|
+
if (!value || value.trim() === "") {
|
|
101
|
+
throw new Error("Model name cannot be empty");
|
|
102
|
+
}
|
|
103
|
+
config.embedding.model = value;
|
|
104
|
+
break;
|
|
105
|
+
case "dimensions": {
|
|
106
|
+
const dims = parseInt(value, 10);
|
|
107
|
+
if (isNaN(dims) || dims < 1 || dims > 10000) {
|
|
108
|
+
throw new Error("Dimensions must be a number between 1 and 10000");
|
|
109
|
+
}
|
|
110
|
+
config.embedding.dimensions = dims;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
case "baseUrl":
|
|
114
|
+
case "base_url":
|
|
115
|
+
config.embedding.baseUrl = value;
|
|
116
|
+
break;
|
|
117
|
+
case "apiKey":
|
|
118
|
+
case "api_key":
|
|
119
|
+
config.embedding.apiKey = value;
|
|
120
|
+
break;
|
|
121
|
+
default:
|
|
122
|
+
throw new Error(`Unknown config key: ${key}. Valid keys: provider, model, dimensions, baseUrl, apiKey`);
|
|
123
|
+
}
|
|
124
|
+
// Write config file
|
|
125
|
+
try {
|
|
126
|
+
writeFileSync(homeConfigPath, JSON.stringify(config, null, 2), "utf-8");
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
throw new Error(`Failed to write config file: ${error.message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get config file path (home directory)
|
|
134
|
+
*/
|
|
135
|
+
static getConfigPath() {
|
|
136
|
+
return join(homedir(), this.CONFIG_FILENAME);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Check if config file exists
|
|
140
|
+
*/
|
|
141
|
+
static configExists() {
|
|
142
|
+
return existsSync(this.getConfigPath());
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Load config file
|
|
146
|
+
*/
|
|
147
|
+
static loadConfigFile(path) {
|
|
148
|
+
try {
|
|
149
|
+
const content = readFileSync(path, "utf-8");
|
|
150
|
+
return JSON.parse(content);
|
|
151
|
+
}
|
|
152
|
+
catch (_error) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get known model dimensions for common models
|
|
158
|
+
*/
|
|
159
|
+
static getKnownModelDimensions(model) {
|
|
160
|
+
const knownDimensions = {
|
|
161
|
+
// Ollama models
|
|
162
|
+
"mxbai-embed-large": 1024,
|
|
163
|
+
"nomic-embed-text": 768,
|
|
164
|
+
"all-minilm": 384,
|
|
165
|
+
"snowflake-arctic-embed": 1024,
|
|
166
|
+
// OpenAI models
|
|
167
|
+
"text-embedding-3-small": 1536,
|
|
168
|
+
"text-embedding-3-large": 3072,
|
|
169
|
+
"text-embedding-ada-002": 1536,
|
|
170
|
+
// Transformers models
|
|
171
|
+
"Xenova/all-MiniLM-L6-v2": 384,
|
|
172
|
+
"Xenova/all-mpnet-base-v2": 768,
|
|
173
|
+
};
|
|
174
|
+
return knownDimensions[model] || null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=ConfigManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/embeddings/ConfigManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,YAAY,EAA0C,MAAM,sBAAsB,CAAC;AAE5F,MAAM,OAAO,aAAa;IAChB,MAAM,CAAU,eAAe,GAAG,4BAA4B,CAAC;IAEvE;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB;QAMrB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAEpE,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,IAAI,IAAI;YACxD,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,aAAa,GAAG,UAAU,CAAC,iBAAiB,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,SAAS,IAAI,IAAI;YAC3D,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,SAAS,GAA6B,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACnC,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAA2C,CAAC;QAC/E,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAChC,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACrC,SAAS,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACnC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACrD,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAC/B,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAChD,CAAC;QAED,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,aAAa;YACtB,GAAG,EAAE,SAAS;YACd,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE;SAC/B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,GAAW;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEvC,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,UAAU;gBACb,OAAO,MAAM,CAAC,QAAQ,CAAC;YACzB,KAAK,OAAO;gBACV,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,KAAK,YAAY;gBACf,OAAO,MAAM,CAAC,UAAU,CAAC;YAC3B,KAAK,SAAS,CAAC;YACf,KAAK,UAAU;gBACb,OAAO,MAAM,CAAC,OAAO,CAAC;YACxB,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,OAAO,MAAM,CAAC,MAAM,CAAC;YACvB;gBACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,4DAA4D,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,GAAW,EAAE,KAAa;QAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAE7D,yCAAyC;QACzC,IAAI,MAAM,GAA4C,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QACxE,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACnC,MAAM,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;QACxB,CAAC;QAED,qCAAqC;QACrC,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,UAAU;gBACb,IAAI,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1D,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,iDAAiD,CAAC,CAAC;gBAC/F,CAAC;gBACD,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,KAA8B,CAAC;gBAC3D,MAAM;YAER,KAAK,OAAO;gBACV,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBAClC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAChD,CAAC;gBACD,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC/B,MAAM;YAER,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;oBAC5C,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACrE,CAAC;gBACD,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;gBACnC,MAAM;YACR,CAAC;YAED,KAAK,SAAS,CAAC;YACf,KAAK,UAAU;gBACb,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;gBACjC,MAAM;YAER,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;gBAChC,MAAM;YAER;gBACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,4DAA4D,CAAC,CAAC;QAC5G,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC;YACH,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gCAAiC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa;QAClB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY;QACjB,OAAO,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,cAAc,CAAC,IAAY;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,KAAa;QAC1C,MAAM,eAAe,GAA2B;YAC9C,gBAAgB;YAChB,mBAAmB,EAAE,IAAI;YACzB,kBAAkB,EAAE,GAAG;YACvB,YAAY,EAAE,GAAG;YACjB,wBAAwB,EAAE,IAAI;YAE9B,gBAAgB;YAChB,wBAAwB,EAAE,IAAI;YAC9B,wBAAwB,EAAE,IAAI;YAC9B,wBAAwB,EAAE,IAAI;YAE9B,sBAAsB;YACtB,yBAAyB,EAAE,GAAG;YAC9B,0BAA0B,EAAE,GAAG;SAChC,CAAC;QAEF,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Configuration Management
|
|
3
|
+
* Loads config from file and environment variables (env vars take precedence)
|
|
4
|
+
*/
|
|
5
|
+
export type EmbeddingProviderType = "ollama" | "transformers" | "openai";
|
|
6
|
+
export interface EmbeddingConfig {
|
|
7
|
+
provider: EmbeddingProviderType;
|
|
8
|
+
model: string;
|
|
9
|
+
dimensions?: number;
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class ConfigLoader {
|
|
14
|
+
private static readonly CONFIG_FILENAME;
|
|
15
|
+
/**
|
|
16
|
+
* Load configuration with precedence: env vars > project config > home config > defaults
|
|
17
|
+
*/
|
|
18
|
+
static load(): EmbeddingConfig;
|
|
19
|
+
/**
|
|
20
|
+
* Load and parse config file
|
|
21
|
+
*/
|
|
22
|
+
private static loadConfigFile;
|
|
23
|
+
/**
|
|
24
|
+
* Apply provider-specific defaults
|
|
25
|
+
*/
|
|
26
|
+
private static applyProviderDefaults;
|
|
27
|
+
/**
|
|
28
|
+
* Validate configuration
|
|
29
|
+
*/
|
|
30
|
+
static validate(config: EmbeddingConfig): {
|
|
31
|
+
valid: boolean;
|
|
32
|
+
errors: string[];
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Get example config for documentation
|
|
36
|
+
*/
|
|
37
|
+
static getExampleConfig(): string;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=EmbeddingConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingConfig.d.ts","sourceRoot":"","sources":["../../src/embeddings/EmbeddingConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,cAAc,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAEvE;;OAEG;IACH,MAAM,CAAC,IAAI,IAAI,eAAe;IAqD9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAU7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IA6BpC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IA2B9E;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM;CAalC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Configuration Management
|
|
3
|
+
* Loads config from file and environment variables (env vars take precedence)
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, existsSync } from "fs";
|
|
6
|
+
import { join } from "path";
|
|
7
|
+
import { homedir } from "os";
|
|
8
|
+
export class ConfigLoader {
|
|
9
|
+
static CONFIG_FILENAME = ".claude-memory-config.json";
|
|
10
|
+
/**
|
|
11
|
+
* Load configuration with precedence: env vars > project config > home config > defaults
|
|
12
|
+
*/
|
|
13
|
+
static load() {
|
|
14
|
+
// Start with defaults
|
|
15
|
+
let config = {
|
|
16
|
+
provider: "transformers",
|
|
17
|
+
model: "Xenova/all-MiniLM-L6-v2",
|
|
18
|
+
dimensions: 384,
|
|
19
|
+
};
|
|
20
|
+
// Try loading from home directory config
|
|
21
|
+
const homeConfigPath = join(homedir(), this.CONFIG_FILENAME);
|
|
22
|
+
if (existsSync(homeConfigPath)) {
|
|
23
|
+
const homeConfig = this.loadConfigFile(homeConfigPath);
|
|
24
|
+
if (homeConfig?.embedding) {
|
|
25
|
+
config = { ...config, ...homeConfig.embedding };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Try loading from project config (overrides home config)
|
|
29
|
+
const projectConfigPath = join(process.cwd(), this.CONFIG_FILENAME);
|
|
30
|
+
if (existsSync(projectConfigPath)) {
|
|
31
|
+
const projectConfig = this.loadConfigFile(projectConfigPath);
|
|
32
|
+
if (projectConfig?.embedding) {
|
|
33
|
+
config = { ...config, ...projectConfig.embedding };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Environment variables override everything
|
|
37
|
+
if (process.env.EMBEDDING_PROVIDER) {
|
|
38
|
+
config.provider = process.env.EMBEDDING_PROVIDER;
|
|
39
|
+
}
|
|
40
|
+
if (process.env.EMBEDDING_MODEL) {
|
|
41
|
+
config.model = process.env.EMBEDDING_MODEL;
|
|
42
|
+
}
|
|
43
|
+
if (process.env.EMBEDDING_DIMENSIONS) {
|
|
44
|
+
config.dimensions = parseInt(process.env.EMBEDDING_DIMENSIONS, 10);
|
|
45
|
+
}
|
|
46
|
+
if (process.env.EMBEDDING_BASE_URL) {
|
|
47
|
+
config.baseUrl = process.env.EMBEDDING_BASE_URL;
|
|
48
|
+
}
|
|
49
|
+
if (process.env.OPENAI_API_KEY) {
|
|
50
|
+
config.apiKey = process.env.OPENAI_API_KEY;
|
|
51
|
+
}
|
|
52
|
+
// Set provider-specific defaults
|
|
53
|
+
config = this.applyProviderDefaults(config);
|
|
54
|
+
return config;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Load and parse config file
|
|
58
|
+
*/
|
|
59
|
+
static loadConfigFile(path) {
|
|
60
|
+
try {
|
|
61
|
+
const content = readFileSync(path, "utf-8");
|
|
62
|
+
return JSON.parse(content);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error(`Warning: Could not load config file ${path}:`, error);
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Apply provider-specific defaults
|
|
71
|
+
*/
|
|
72
|
+
static applyProviderDefaults(config) {
|
|
73
|
+
switch (config.provider) {
|
|
74
|
+
case "ollama":
|
|
75
|
+
return {
|
|
76
|
+
...config,
|
|
77
|
+
baseUrl: config.baseUrl || "http://localhost:11434",
|
|
78
|
+
model: config.model || "mxbai-embed-large",
|
|
79
|
+
dimensions: config.dimensions || 1024, // mxbai-embed-large default
|
|
80
|
+
};
|
|
81
|
+
case "openai":
|
|
82
|
+
return {
|
|
83
|
+
...config,
|
|
84
|
+
model: config.model || "text-embedding-3-small",
|
|
85
|
+
dimensions: config.dimensions || 1536, // text-embedding-3-small default
|
|
86
|
+
};
|
|
87
|
+
case "transformers":
|
|
88
|
+
return {
|
|
89
|
+
...config,
|
|
90
|
+
model: config.model || "Xenova/all-MiniLM-L6-v2",
|
|
91
|
+
dimensions: config.dimensions || 384,
|
|
92
|
+
};
|
|
93
|
+
default:
|
|
94
|
+
return config;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Validate configuration
|
|
99
|
+
*/
|
|
100
|
+
static validate(config) {
|
|
101
|
+
const errors = [];
|
|
102
|
+
if (!["ollama", "transformers", "openai"].includes(config.provider)) {
|
|
103
|
+
errors.push(`Invalid provider: ${config.provider}. Must be 'ollama', 'transformers', or 'openai'`);
|
|
104
|
+
}
|
|
105
|
+
if (!config.model || config.model.trim() === "") {
|
|
106
|
+
errors.push("Model name is required");
|
|
107
|
+
}
|
|
108
|
+
if (config.provider === "openai" && !config.apiKey) {
|
|
109
|
+
errors.push("OpenAI provider requires OPENAI_API_KEY environment variable or apiKey in config");
|
|
110
|
+
}
|
|
111
|
+
if (config.dimensions && (config.dimensions < 1 || config.dimensions > 10000)) {
|
|
112
|
+
errors.push("Dimensions must be between 1 and 10000");
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
valid: errors.length === 0,
|
|
116
|
+
errors,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get example config for documentation
|
|
121
|
+
*/
|
|
122
|
+
static getExampleConfig() {
|
|
123
|
+
return JSON.stringify({
|
|
124
|
+
embedding: {
|
|
125
|
+
provider: "ollama",
|
|
126
|
+
model: "nomic-embed-text",
|
|
127
|
+
baseUrl: "http://localhost:11434",
|
|
128
|
+
},
|
|
129
|
+
}, null, 2);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=EmbeddingConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingConfig.js","sourceRoot":"","sources":["../../src/embeddings/EmbeddingConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAY7B,MAAM,OAAO,YAAY;IACf,MAAM,CAAU,eAAe,GAAG,4BAA4B,CAAC;IAEvE;;OAEG;IACH,MAAM,CAAC,IAAI;QACT,sBAAsB;QACtB,IAAI,MAAM,GAAoB;YAC5B,QAAQ,EAAE,cAAc;YACxB,KAAK,EAAE,yBAAyB;YAChC,UAAU,EAAE,GAAG;SAChB,CAAC;QAEF,yCAAyC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7D,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACvD,IAAI,UAAU,EAAE,SAAS,EAAE,CAAC;gBAC1B,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;YAClD,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACpE,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAClC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC7D,IAAI,aAAa,EAAE,SAAS,EAAE,CAAC;gBAC7B,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;YACrD,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACnC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAA2C,CAAC;QAC5E,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC7C,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACrC,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACnC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAClD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC7C,CAAC;QAED,iCAAiC;QACjC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,cAAc,CAAC,IAAY;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,qBAAqB,CAAC,MAAuB;QAC1D,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxB,KAAK,QAAQ;gBACX,OAAO;oBACL,GAAG,MAAM;oBACT,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,wBAAwB;oBACnD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,mBAAmB;oBAC1C,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,4BAA4B;iBACpE,CAAC;YAEJ,KAAK,QAAQ;gBACX,OAAO;oBACL,GAAG,MAAM;oBACT,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,wBAAwB;oBAC/C,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,iCAAiC;iBACzE,CAAC;YAEJ,KAAK,cAAc;gBACjB,OAAO;oBACL,GAAG,MAAM;oBACT,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,yBAAyB;oBAChD,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,GAAG;iBACrC,CAAC;YAEJ;gBACE,OAAO,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAuB;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,IAAI,CACT,qBAAqB,MAAM,CAAC,QAAQ,iDAAiD,CACtF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC;YAC9E,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,SAAS,EAAE;gBACT,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,kBAAkB;gBACzB,OAAO,EAAE,wBAAwB;aAClC;SACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Generator Factory
|
|
3
|
+
* Creates appropriate embedding provider based on configuration
|
|
4
|
+
*/
|
|
5
|
+
import type { EmbeddingProvider } from "./EmbeddingProvider.js";
|
|
6
|
+
/**
|
|
7
|
+
* Factory class for creating embedding providers
|
|
8
|
+
*/
|
|
9
|
+
export declare class EmbeddingGenerator {
|
|
10
|
+
private static instance;
|
|
11
|
+
private static initializationPromise;
|
|
12
|
+
/**
|
|
13
|
+
* Get or create embedding provider based on configuration
|
|
14
|
+
* Uses promise-based mutex to prevent concurrent initialization race condition
|
|
15
|
+
*/
|
|
16
|
+
static getProvider(): Promise<EmbeddingProvider>;
|
|
17
|
+
/**
|
|
18
|
+
* Internal initialization logic (called once via mutex)
|
|
19
|
+
*/
|
|
20
|
+
private static initializeProvider;
|
|
21
|
+
/**
|
|
22
|
+
* Create specific provider instance
|
|
23
|
+
*/
|
|
24
|
+
private static createProvider;
|
|
25
|
+
/**
|
|
26
|
+
* Auto-detect best available provider
|
|
27
|
+
* Tries in order: Transformers.js (bundled, reliable) → Ollama (fast if running)
|
|
28
|
+
*/
|
|
29
|
+
private static autoDetectProvider;
|
|
30
|
+
/**
|
|
31
|
+
* Reset singleton (useful for testing)
|
|
32
|
+
*/
|
|
33
|
+
static reset(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Get current provider info (if initialized)
|
|
36
|
+
*/
|
|
37
|
+
static getInfo(): {
|
|
38
|
+
provider: string;
|
|
39
|
+
model: string;
|
|
40
|
+
available: boolean;
|
|
41
|
+
} | null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Legacy API compatibility - returns provider instance
|
|
45
|
+
*/
|
|
46
|
+
export declare function getEmbeddingGenerator(): Promise<EmbeddingProvider>;
|
|
47
|
+
/**
|
|
48
|
+
* Legacy API compatibility - resets singleton
|
|
49
|
+
*/
|
|
50
|
+
export declare function resetEmbeddingGenerator(): void;
|
|
51
|
+
//# sourceMappingURL=EmbeddingGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingGenerator.d.ts","sourceRoot":"","sources":["../../src/embeddings/EmbeddingGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAMhE;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkC;IACzD,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA2C;IAE/E;;;OAGG;WACU,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAwBtD;;OAEG;mBACkB,kBAAkB;IA2CvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IA2B7B;;;OAGG;mBACkB,kBAAkB;IA6BvC;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;IAKpB;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;CAYjF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAExE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Generator Factory
|
|
3
|
+
* Creates appropriate embedding provider based on configuration
|
|
4
|
+
*/
|
|
5
|
+
import { ConfigLoader } from "./EmbeddingConfig.js";
|
|
6
|
+
import { OllamaEmbeddings } from "./providers/OllamaEmbeddings.js";
|
|
7
|
+
import { OpenAIEmbeddings } from "./providers/OpenAIEmbeddings.js";
|
|
8
|
+
import { TransformersEmbeddings } from "./providers/TransformersEmbeddings.js";
|
|
9
|
+
/**
|
|
10
|
+
* Factory class for creating embedding providers
|
|
11
|
+
*/
|
|
12
|
+
export class EmbeddingGenerator {
|
|
13
|
+
static instance = null;
|
|
14
|
+
static initializationPromise = null;
|
|
15
|
+
/**
|
|
16
|
+
* Get or create embedding provider based on configuration
|
|
17
|
+
* Uses promise-based mutex to prevent concurrent initialization race condition
|
|
18
|
+
*/
|
|
19
|
+
static async getProvider() {
|
|
20
|
+
// Fast path: already initialized
|
|
21
|
+
if (this.instance) {
|
|
22
|
+
return this.instance;
|
|
23
|
+
}
|
|
24
|
+
// If initialization is in progress, wait for it
|
|
25
|
+
if (this.initializationPromise) {
|
|
26
|
+
return this.initializationPromise;
|
|
27
|
+
}
|
|
28
|
+
// Start initialization with mutex
|
|
29
|
+
this.initializationPromise = this.initializeProvider();
|
|
30
|
+
try {
|
|
31
|
+
const provider = await this.initializationPromise;
|
|
32
|
+
return provider;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
// Reset on failure so next call can retry
|
|
36
|
+
this.initializationPromise = null;
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Internal initialization logic (called once via mutex)
|
|
42
|
+
*/
|
|
43
|
+
static async initializeProvider() {
|
|
44
|
+
// Double-check after acquiring mutex
|
|
45
|
+
if (this.instance) {
|
|
46
|
+
return this.instance;
|
|
47
|
+
}
|
|
48
|
+
// Load configuration
|
|
49
|
+
const config = ConfigLoader.load();
|
|
50
|
+
// Validate configuration
|
|
51
|
+
const validation = ConfigLoader.validate(config);
|
|
52
|
+
if (!validation.valid) {
|
|
53
|
+
console.error("⚠️ Invalid embedding configuration:");
|
|
54
|
+
validation.errors.forEach((error) => console.error(` - ${error}`));
|
|
55
|
+
console.error(" Falling back to auto-detection...");
|
|
56
|
+
}
|
|
57
|
+
// Try to create provider based on config (or auto-detect)
|
|
58
|
+
let provider;
|
|
59
|
+
if (validation.valid) {
|
|
60
|
+
console.error(`Attempting to use ${config.provider} embeddings...`);
|
|
61
|
+
provider = this.createProvider(config.provider, config);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Auto-detect: try providers in order of preference
|
|
65
|
+
console.error("Auto-detecting available embedding provider...");
|
|
66
|
+
provider = await this.autoDetectProvider();
|
|
67
|
+
}
|
|
68
|
+
// Initialize the provider
|
|
69
|
+
await provider.initialize();
|
|
70
|
+
// If provider is not available, try fallback
|
|
71
|
+
if (!provider.isAvailable()) {
|
|
72
|
+
console.error(`⚠️ ${config.provider} provider not available, trying fallback...`);
|
|
73
|
+
provider = await this.autoDetectProvider();
|
|
74
|
+
await provider.initialize();
|
|
75
|
+
}
|
|
76
|
+
this.instance = provider;
|
|
77
|
+
return provider;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create specific provider instance
|
|
81
|
+
*/
|
|
82
|
+
static createProvider(type, config) {
|
|
83
|
+
switch (type) {
|
|
84
|
+
case "ollama":
|
|
85
|
+
return new OllamaEmbeddings(config.baseUrl || "http://localhost:11434", config.model, config.dimensions);
|
|
86
|
+
case "openai":
|
|
87
|
+
return new OpenAIEmbeddings(config.apiKey || "", config.model, config.dimensions);
|
|
88
|
+
case "transformers":
|
|
89
|
+
return new TransformersEmbeddings(config.model, config.dimensions);
|
|
90
|
+
default:
|
|
91
|
+
throw new Error(`Unknown provider type: ${type}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Auto-detect best available provider
|
|
96
|
+
* Tries in order: Transformers.js (bundled, reliable) → Ollama (fast if running)
|
|
97
|
+
*/
|
|
98
|
+
static async autoDetectProvider() {
|
|
99
|
+
// Try Transformers.js first (bundled dependency, always works offline)
|
|
100
|
+
const transformers = new TransformersEmbeddings();
|
|
101
|
+
await transformers.initialize();
|
|
102
|
+
if (transformers.isAvailable()) {
|
|
103
|
+
console.error("✓ Auto-detected: Using Transformers.js embeddings");
|
|
104
|
+
return transformers;
|
|
105
|
+
}
|
|
106
|
+
// Try Ollama as fallback (requires Ollama to be running)
|
|
107
|
+
const ollama = new OllamaEmbeddings();
|
|
108
|
+
await ollama.initialize();
|
|
109
|
+
if (ollama.isAvailable()) {
|
|
110
|
+
console.error("✓ Auto-detected: Using Ollama embeddings");
|
|
111
|
+
return ollama;
|
|
112
|
+
}
|
|
113
|
+
// No provider available - return transformers as placeholder
|
|
114
|
+
// It will fail gracefully when used, falling back to FTS
|
|
115
|
+
console.error("⚠️ No embedding provider available");
|
|
116
|
+
console.error(" Options:");
|
|
117
|
+
console.error(" 1. Ensure @xenova/transformers is properly installed");
|
|
118
|
+
console.error(" 2. Install Ollama: https://ollama.com");
|
|
119
|
+
console.error(" 3. Configure OpenAI: Set OPENAI_API_KEY environment variable");
|
|
120
|
+
console.error(" Falling back to full-text search only.");
|
|
121
|
+
return transformers; // Return uninitialized provider (will fail gracefully)
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Reset singleton (useful for testing)
|
|
125
|
+
*/
|
|
126
|
+
static reset() {
|
|
127
|
+
this.instance = null;
|
|
128
|
+
this.initializationPromise = null;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get current provider info (if initialized)
|
|
132
|
+
*/
|
|
133
|
+
static getInfo() {
|
|
134
|
+
if (!this.instance) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
const info = this.instance.getModelInfo();
|
|
138
|
+
return {
|
|
139
|
+
provider: info.provider,
|
|
140
|
+
model: info.model,
|
|
141
|
+
available: info.available,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Legacy API compatibility - returns provider instance
|
|
147
|
+
*/
|
|
148
|
+
export async function getEmbeddingGenerator() {
|
|
149
|
+
return EmbeddingGenerator.getProvider();
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Legacy API compatibility - resets singleton
|
|
153
|
+
*/
|
|
154
|
+
export function resetEmbeddingGenerator() {
|
|
155
|
+
EmbeddingGenerator.reset();
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=EmbeddingGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingGenerator.js","sourceRoot":"","sources":["../../src/embeddings/EmbeddingGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Provider Interface
|
|
3
|
+
* Defines the contract for all embedding implementations
|
|
4
|
+
*/
|
|
5
|
+
export interface ModelInfo {
|
|
6
|
+
provider: string;
|
|
7
|
+
model: string;
|
|
8
|
+
dimensions: number;
|
|
9
|
+
available: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface EmbeddingProvider {
|
|
12
|
+
/**
|
|
13
|
+
* Initialize the embedding provider
|
|
14
|
+
* Should handle graceful failure if provider unavailable
|
|
15
|
+
*/
|
|
16
|
+
initialize(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Check if embeddings are available
|
|
19
|
+
*/
|
|
20
|
+
isAvailable(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Generate embedding for a single text
|
|
23
|
+
*/
|
|
24
|
+
embed(text: string): Promise<Float32Array>;
|
|
25
|
+
/**
|
|
26
|
+
* Generate embeddings for multiple texts (batched for efficiency)
|
|
27
|
+
*/
|
|
28
|
+
embedBatch(texts: string[], batchSize?: number): Promise<Float32Array[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Get information about the model being used
|
|
31
|
+
*/
|
|
32
|
+
getModelInfo(): ModelInfo;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=EmbeddingProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingProvider.d.ts","sourceRoot":"","sources":["../../src/embeddings/EmbeddingProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC;IAEvB;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAE3C;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEzE;;OAEG;IACH,YAAY,IAAI,SAAS,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingProvider.js","sourceRoot":"","sources":["../../src/embeddings/EmbeddingProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|