maskweaver 0.7.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/assets/agents/dummy-human.md +31 -0
- package/assets/agents/dummy-template.md +57 -0
- package/assets/agents/mask-master.md +225 -0
- package/assets/masks/ai-ml/andrew-ng.yaml +207 -0
- package/assets/masks/architecture/jeff-dean.yaml +208 -0
- package/assets/masks/index.json +65 -0
- package/assets/masks/software-engineering/dan-abramov.yaml +188 -0
- package/assets/masks/software-engineering/kent-beck.yaml +191 -0
- package/assets/masks/software-engineering/linus-torvalds.yaml +152 -0
- package/assets/masks/software-engineering/martin-fowler.yaml +173 -0
- package/dist/cli/install.d.ts +11 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +299 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/context/config.d.ts +38 -0
- package/dist/context/config.d.ts.map +1 -0
- package/dist/context/config.js +55 -0
- package/dist/context/config.js.map +1 -0
- package/dist/context/feature.d.ts +49 -0
- package/dist/context/feature.d.ts.map +1 -0
- package/dist/context/feature.js +290 -0
- package/dist/context/feature.js.map +1 -0
- package/dist/context/files.d.ts +17 -0
- package/dist/context/files.d.ts.map +1 -0
- package/dist/context/files.js +50 -0
- package/dist/context/files.js.map +1 -0
- package/dist/context/index.d.ts +14 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +18 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/project.d.ts +26 -0
- package/dist/context/project.d.ts.map +1 -0
- package/dist/context/project.js +95 -0
- package/dist/context/project.js.map +1 -0
- package/dist/context/types.d.ts +72 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +14 -0
- package/dist/context/types.js.map +1 -0
- package/dist/context/utils.d.ts +22 -0
- package/dist/context/utils.d.ts.map +1 -0
- package/dist/context/utils.js +40 -0
- package/dist/context/utils.js.map +1 -0
- package/dist/core/engine/promptBuilder.d.ts +32 -0
- package/dist/core/engine/promptBuilder.d.ts.map +1 -0
- package/dist/core/engine/promptBuilder.js +117 -0
- package/dist/core/engine/promptBuilder.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/loader/MaskLoader.d.ts +47 -0
- package/dist/core/loader/MaskLoader.d.ts.map +1 -0
- package/dist/core/loader/MaskLoader.js +132 -0
- package/dist/core/loader/MaskLoader.js.map +1 -0
- package/dist/core/schema/types.d.ts +128 -0
- package/dist/core/schema/types.d.ts.map +1 -0
- package/dist/core/schema/types.js +8 -0
- package/dist/core/schema/types.js.map +1 -0
- package/dist/core/schema/validator.d.ts +290 -0
- package/dist/core/schema/validator.d.ts.map +1 -0
- package/dist/core/schema/validator.js +105 -0
- package/dist/core/schema/validator.js.map +1 -0
- package/dist/i18n/index.d.ts +33 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +57 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.json +16 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/chunking.d.ts +35 -0
- package/dist/memory/chunking.d.ts.map +1 -0
- package/dist/memory/chunking.js +168 -0
- package/dist/memory/chunking.js.map +1 -0
- package/dist/memory/core.d.ts +73 -0
- package/dist/memory/core.d.ts.map +1 -0
- package/dist/memory/core.js +186 -0
- package/dist/memory/core.js.map +1 -0
- package/dist/memory/index.d.ts +21 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +22 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/indexer.d.ts +37 -0
- package/dist/memory/indexer.d.ts.map +1 -0
- package/dist/memory/indexer.js +162 -0
- package/dist/memory/indexer.js.map +1 -0
- package/dist/memory/providers/examples.d.ts +17 -0
- package/dist/memory/providers/examples.d.ts.map +1 -0
- package/dist/memory/providers/examples.js +271 -0
- package/dist/memory/providers/examples.js.map +1 -0
- package/dist/memory/providers/factory.d.ts +49 -0
- package/dist/memory/providers/factory.d.ts.map +1 -0
- package/dist/memory/providers/factory.js +111 -0
- package/dist/memory/providers/factory.js.map +1 -0
- package/dist/memory/providers/index.d.ts +34 -0
- package/dist/memory/providers/index.d.ts.map +1 -0
- package/dist/memory/providers/index.js +35 -0
- package/dist/memory/providers/index.js.map +1 -0
- package/dist/memory/providers/ollama.d.ts +18 -0
- package/dist/memory/providers/ollama.d.ts.map +1 -0
- package/dist/memory/providers/ollama.js +68 -0
- package/dist/memory/providers/ollama.js.map +1 -0
- package/dist/memory/providers/openai.d.ts +21 -0
- package/dist/memory/providers/openai.d.ts.map +1 -0
- package/dist/memory/providers/openai.js +91 -0
- package/dist/memory/providers/openai.js.map +1 -0
- package/dist/memory/providers/openrouter.d.ts +22 -0
- package/dist/memory/providers/openrouter.d.ts.map +1 -0
- package/dist/memory/providers/openrouter.js +89 -0
- package/dist/memory/providers/openrouter.js.map +1 -0
- package/dist/memory/providers/text-only.d.ts +20 -0
- package/dist/memory/providers/text-only.d.ts.map +1 -0
- package/dist/memory/providers/text-only.js +35 -0
- package/dist/memory/providers/text-only.js.map +1 -0
- package/dist/memory/providers/types.d.ts +63 -0
- package/dist/memory/providers/types.d.ts.map +1 -0
- package/dist/memory/providers/types.js +9 -0
- package/dist/memory/providers/types.js.map +1 -0
- package/dist/memory/providers/voyage.d.ts +39 -0
- package/dist/memory/providers/voyage.d.ts.map +1 -0
- package/dist/memory/providers/voyage.js +127 -0
- package/dist/memory/providers/voyage.js.map +1 -0
- package/dist/memory/search/hybrid.d.ts +12 -0
- package/dist/memory/search/hybrid.d.ts.map +1 -0
- package/dist/memory/search/hybrid.js +59 -0
- package/dist/memory/search/hybrid.js.map +1 -0
- package/dist/memory/store/sqlite.d.ts +86 -0
- package/dist/memory/store/sqlite.d.ts.map +1 -0
- package/dist/memory/store/sqlite.js +390 -0
- package/dist/memory/store/sqlite.js.map +1 -0
- package/dist/plugin/config/index.d.ts +148 -0
- package/dist/plugin/config/index.d.ts.map +1 -0
- package/dist/plugin/config/index.js +236 -0
- package/dist/plugin/config/index.js.map +1 -0
- package/dist/plugin/index.d.ts +19 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +811 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/tools/context.d.ts +36 -0
- package/dist/plugin/tools/context.d.ts.map +1 -0
- package/dist/plugin/tools/context.js +332 -0
- package/dist/plugin/tools/context.js.map +1 -0
- package/dist/plugin/tools/maskSave.d.ts +6 -0
- package/dist/plugin/tools/maskSave.d.ts.map +1 -0
- package/dist/plugin/tools/maskSave.js +42 -0
- package/dist/plugin/tools/maskSave.js.map +1 -0
- package/dist/plugin/tools/memoryGet.d.ts +21 -0
- package/dist/plugin/tools/memoryGet.d.ts.map +1 -0
- package/dist/plugin/tools/memoryGet.js +40 -0
- package/dist/plugin/tools/memoryGet.js.map +1 -0
- package/dist/plugin/tools/memoryIndexer.d.ts +6 -0
- package/dist/plugin/tools/memoryIndexer.d.ts.map +1 -0
- package/dist/plugin/tools/memoryIndexer.js +75 -0
- package/dist/plugin/tools/memoryIndexer.js.map +1 -0
- package/dist/plugin/tools/memorySearch.d.ts +74 -0
- package/dist/plugin/tools/memorySearch.d.ts.map +1 -0
- package/dist/plugin/tools/memorySearch.js +172 -0
- package/dist/plugin/tools/memorySearch.js.map +1 -0
- package/dist/plugin/tools/memoryWrite.d.ts +11 -0
- package/dist/plugin/tools/memoryWrite.d.ts.map +1 -0
- package/dist/plugin/tools/memoryWrite.js +161 -0
- package/dist/plugin/tools/memoryWrite.js.map +1 -0
- package/dist/plugin/tools/retrospect.d.ts +6 -0
- package/dist/plugin/tools/retrospect.d.ts.map +1 -0
- package/dist/plugin/tools/retrospect.js +46 -0
- package/dist/plugin/tools/retrospect.js.map +1 -0
- package/dist/plugin/types.d.ts +34 -0
- package/dist/plugin/types.d.ts.map +1 -0
- package/dist/plugin/types.js +7 -0
- package/dist/plugin/types.js.map +1 -0
- package/dist/retrospect/index.d.ts +14 -0
- package/dist/retrospect/index.d.ts.map +1 -0
- package/dist/retrospect/index.js +13 -0
- package/dist/retrospect/index.js.map +1 -0
- package/dist/retrospect/mask-save.d.ts +31 -0
- package/dist/retrospect/mask-save.d.ts.map +1 -0
- package/dist/retrospect/mask-save.js +263 -0
- package/dist/retrospect/mask-save.js.map +1 -0
- package/dist/retrospect/retrospect.d.ts +24 -0
- package/dist/retrospect/retrospect.d.ts.map +1 -0
- package/dist/retrospect/retrospect.js +165 -0
- package/dist/retrospect/retrospect.js.map +1 -0
- package/dist/retrospect/strategies/base.d.ts +20 -0
- package/dist/retrospect/strategies/base.d.ts.map +1 -0
- package/dist/retrospect/strategies/base.js +9 -0
- package/dist/retrospect/strategies/base.js.map +1 -0
- package/dist/retrospect/strategies/deep.d.ts +18 -0
- package/dist/retrospect/strategies/deep.d.ts.map +1 -0
- package/dist/retrospect/strategies/deep.js +105 -0
- package/dist/retrospect/strategies/deep.js.map +1 -0
- package/dist/retrospect/strategies/index.d.ts +20 -0
- package/dist/retrospect/strategies/index.d.ts.map +1 -0
- package/dist/retrospect/strategies/index.js +27 -0
- package/dist/retrospect/strategies/index.js.map +1 -0
- package/dist/retrospect/strategies/quick.d.ts +18 -0
- package/dist/retrospect/strategies/quick.d.ts.map +1 -0
- package/dist/retrospect/strategies/quick.js +55 -0
- package/dist/retrospect/strategies/quick.js.map +1 -0
- package/dist/retrospect/strategies/standard.d.ts +18 -0
- package/dist/retrospect/strategies/standard.d.ts.map +1 -0
- package/dist/retrospect/strategies/standard.js +66 -0
- package/dist/retrospect/strategies/standard.js.map +1 -0
- package/dist/retrospect/types.d.ts +34 -0
- package/dist/retrospect/types.d.ts.map +1 -0
- package/dist/retrospect/types.js +9 -0
- package/dist/retrospect/types.js.map +1 -0
- package/dist/shared/config.d.ts +130 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +12 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/errors.d.ts +36 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +57 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/index.d.ts +10 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +9 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/types.d.ts +34 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +5 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/shared-context/index.d.ts +11 -0
- package/dist/shared-context/index.d.ts.map +1 -0
- package/dist/shared-context/index.js +16 -0
- package/dist/shared-context/index.js.map +1 -0
- package/dist/shared-context/logger.d.ts +10 -0
- package/dist/shared-context/logger.d.ts.map +1 -0
- package/dist/shared-context/logger.js +28 -0
- package/dist/shared-context/logger.js.map +1 -0
- package/dist/shared-context/session.d.ts +23 -0
- package/dist/shared-context/session.d.ts.map +1 -0
- package/dist/shared-context/session.js +34 -0
- package/dist/shared-context/session.js.map +1 -0
- package/dist/shared-context/squad.d.ts +30 -0
- package/dist/shared-context/squad.d.ts.map +1 -0
- package/dist/shared-context/squad.js +66 -0
- package/dist/shared-context/squad.js.map +1 -0
- package/dist/shared-context/storage.d.ts +25 -0
- package/dist/shared-context/storage.d.ts.map +1 -0
- package/dist/shared-context/storage.js +66 -0
- package/dist/shared-context/storage.js.map +1 -0
- package/dist/shared-context/types.d.ts +107 -0
- package/dist/shared-context/types.d.ts.map +1 -0
- package/dist/shared-context/types.js +18 -0
- package/dist/shared-context/types.js.map +1 -0
- package/dist/verify/budget.d.ts +45 -0
- package/dist/verify/budget.d.ts.map +1 -0
- package/dist/verify/budget.js +89 -0
- package/dist/verify/budget.js.map +1 -0
- package/dist/verify/critical-files.d.ts +22 -0
- package/dist/verify/critical-files.d.ts.map +1 -0
- package/dist/verify/critical-files.js +130 -0
- package/dist/verify/critical-files.js.map +1 -0
- package/dist/verify/escalation.d.ts +27 -0
- package/dist/verify/escalation.d.ts.map +1 -0
- package/dist/verify/escalation.js +68 -0
- package/dist/verify/escalation.js.map +1 -0
- package/dist/verify/index.d.ts +13 -0
- package/dist/verify/index.d.ts.map +1 -0
- package/dist/verify/index.js +18 -0
- package/dist/verify/index.js.map +1 -0
- package/dist/verify/prompts.d.ts +27 -0
- package/dist/verify/prompts.d.ts.map +1 -0
- package/dist/verify/prompts.js +158 -0
- package/dist/verify/prompts.js.map +1 -0
- package/dist/verify/types.d.ts +80 -0
- package/dist/verify/types.d.ts.map +1 -0
- package/dist/verify/types.js +22 -0
- package/dist/verify/types.js.map +1 -0
- package/dist/verify/verifier.d.ts +47 -0
- package/dist/verify/verifier.d.ts.map +1 -0
- package/dist/verify/verifier.js +180 -0
- package/dist/verify/verifier.js.map +1 -0
- package/masks/ai-ml/andrew-ng.yaml +207 -0
- package/masks/architecture/jeff-dean.yaml +208 -0
- package/masks/index.json +65 -0
- package/masks/orchestration/squad-operator.yaml +205 -0
- package/masks/software-engineering/dan-abramov.yaml +188 -0
- package/masks/software-engineering/kent-beck.yaml +191 -0
- package/masks/software-engineering/linus-torvalds.yaml +152 -0
- package/masks/software-engineering/martin-fowler.yaml +173 -0
- package/package.json +111 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Indexer - Process markdown files into searchable chunks
|
|
3
|
+
*
|
|
4
|
+
* Read file → Parse sections → Chunk → Hash → Embed → Store
|
|
5
|
+
*/
|
|
6
|
+
import { readFile } from 'fs/promises';
|
|
7
|
+
import { chunkText } from './chunking.js';
|
|
8
|
+
import { initDatabase, upsertChunk, deleteChunksByPath, getChunksByPath } from './store/sqlite.js';
|
|
9
|
+
import { getDbPath } from './core.js';
|
|
10
|
+
const HEADER_REGEX = /^(#{1,6})\s+(.+)$/;
|
|
11
|
+
/**
|
|
12
|
+
* Parse markdown into sections.
|
|
13
|
+
*/
|
|
14
|
+
export function parseMarkdownSections(content) {
|
|
15
|
+
const lines = content.split('\n');
|
|
16
|
+
const sections = [];
|
|
17
|
+
let currentSection = null;
|
|
18
|
+
let currentLines = [];
|
|
19
|
+
let sectionStartLine = 1;
|
|
20
|
+
for (let i = 0; i < lines.length; i++) {
|
|
21
|
+
const line = lines[i];
|
|
22
|
+
const lineNumber = i + 1;
|
|
23
|
+
const headerMatch = line.match(HEADER_REGEX);
|
|
24
|
+
if (headerMatch) {
|
|
25
|
+
// Save previous section
|
|
26
|
+
if (currentSection !== null || currentLines.length > 0) {
|
|
27
|
+
sections.push({
|
|
28
|
+
header: currentSection?.header || '',
|
|
29
|
+
content: currentLines.join('\n'),
|
|
30
|
+
level: currentSection?.level || 0,
|
|
31
|
+
startLine: sectionStartLine,
|
|
32
|
+
endLine: lineNumber - 1
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// Start new section
|
|
36
|
+
currentSection = {
|
|
37
|
+
header: headerMatch[2],
|
|
38
|
+
content: '',
|
|
39
|
+
level: headerMatch[1].length,
|
|
40
|
+
startLine: lineNumber,
|
|
41
|
+
endLine: lineNumber
|
|
42
|
+
};
|
|
43
|
+
currentLines = [line];
|
|
44
|
+
sectionStartLine = lineNumber;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
currentLines.push(line);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Save last section
|
|
51
|
+
if (currentLines.length > 0) {
|
|
52
|
+
sections.push({
|
|
53
|
+
header: currentSection?.header || '',
|
|
54
|
+
content: currentLines.join('\n'),
|
|
55
|
+
level: currentSection?.level || 0,
|
|
56
|
+
startLine: sectionStartLine,
|
|
57
|
+
endLine: lines.length
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return sections;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Classify source from file path.
|
|
64
|
+
*/
|
|
65
|
+
export function classifySource(filePath) {
|
|
66
|
+
const normalized = filePath.replace(/\\/g, '/').toLowerCase();
|
|
67
|
+
const fileName = normalized.split('/').pop() || '';
|
|
68
|
+
if (fileName === 'memory.md')
|
|
69
|
+
return 'memory';
|
|
70
|
+
if (fileName === 'masks.md')
|
|
71
|
+
return 'masks';
|
|
72
|
+
if (fileName === 'retrospect.md')
|
|
73
|
+
return 'retrospect';
|
|
74
|
+
if (fileName === 'user.md')
|
|
75
|
+
return 'user';
|
|
76
|
+
if (normalized.includes('/daily/') || normalized.includes('\\daily\\'))
|
|
77
|
+
return 'daily';
|
|
78
|
+
return 'memory';
|
|
79
|
+
}
|
|
80
|
+
// ============================================================================
|
|
81
|
+
// File Processing
|
|
82
|
+
// ============================================================================
|
|
83
|
+
/**
|
|
84
|
+
* Process markdown file into chunks.
|
|
85
|
+
*/
|
|
86
|
+
async function processFile(filePath) {
|
|
87
|
+
const content = await readFile(filePath, 'utf-8');
|
|
88
|
+
return chunkText(content, filePath);
|
|
89
|
+
}
|
|
90
|
+
// ============================================================================
|
|
91
|
+
// Indexing
|
|
92
|
+
// ============================================================================
|
|
93
|
+
/**
|
|
94
|
+
* Index a single file.
|
|
95
|
+
* Only re-embeds chunks that changed (based on hash).
|
|
96
|
+
*/
|
|
97
|
+
export async function indexFile(filePath, getEmbedding, basePath) {
|
|
98
|
+
console.log(`[Indexer] Processing: ${filePath}`);
|
|
99
|
+
// Initialize database
|
|
100
|
+
initDatabase(getDbPath(basePath));
|
|
101
|
+
// Process file
|
|
102
|
+
const chunks = await processFile(filePath);
|
|
103
|
+
console.log(`[Indexer] Generated ${chunks.length} chunks`);
|
|
104
|
+
// Get existing chunks for hash comparison
|
|
105
|
+
const existingChunks = getChunksByPath(filePath);
|
|
106
|
+
const existingHashes = new Set(existingChunks.map(c => c.hash));
|
|
107
|
+
// Process only changed chunks
|
|
108
|
+
let newCount = 0;
|
|
109
|
+
let skippedCount = 0;
|
|
110
|
+
for (const chunk of chunks) {
|
|
111
|
+
if (existingHashes.has(chunk.hash)) {
|
|
112
|
+
skippedCount++;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
// New or changed chunk - compute embedding
|
|
116
|
+
const embedding = await getEmbedding(chunk.text);
|
|
117
|
+
upsertChunk(chunk, embedding);
|
|
118
|
+
newCount++;
|
|
119
|
+
}
|
|
120
|
+
console.log(`[Indexer] Completed: ${newCount} new, ${skippedCount} unchanged`);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Reindex file (delete all chunks and reindex).
|
|
124
|
+
*/
|
|
125
|
+
export async function reindexFile(filePath, getEmbedding, basePath) {
|
|
126
|
+
console.log(`[Indexer] Reindexing: ${filePath}`);
|
|
127
|
+
initDatabase(getDbPath(basePath));
|
|
128
|
+
// Delete existing chunks
|
|
129
|
+
deleteChunksByPath(filePath);
|
|
130
|
+
// Process and index all chunks
|
|
131
|
+
const chunks = await processFile(filePath);
|
|
132
|
+
for (const chunk of chunks) {
|
|
133
|
+
const embedding = await getEmbedding(chunk.text);
|
|
134
|
+
upsertChunk(chunk, embedding);
|
|
135
|
+
}
|
|
136
|
+
console.log(`[Indexer] Reindexed ${chunks.length} chunks`);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Index all memory files in directory.
|
|
140
|
+
*/
|
|
141
|
+
export async function indexAllMemoryFiles(baseDir, getEmbedding, basePath) {
|
|
142
|
+
console.log(`[Indexer] Scanning directory: ${baseDir}`);
|
|
143
|
+
initDatabase(getDbPath(basePath || baseDir));
|
|
144
|
+
// Main memory files
|
|
145
|
+
const mainFiles = ['MEMORY.md', 'MASKS.md', 'RETROSPECT.md', 'USER.md'];
|
|
146
|
+
let totalFiles = 0;
|
|
147
|
+
for (const fileName of mainFiles) {
|
|
148
|
+
const filePath = `${baseDir}/${fileName}`;
|
|
149
|
+
try {
|
|
150
|
+
await indexFile(filePath, getEmbedding, basePath || baseDir);
|
|
151
|
+
totalFiles++;
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
// File doesn't exist or not readable
|
|
155
|
+
console.log(`[Indexer] Skipping ${fileName}: ${error}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// TODO: Scan daily directory
|
|
159
|
+
// This requires glob or fs.readdir
|
|
160
|
+
console.log(`[Indexer] Completed indexing ${totalFiles} files`);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/memory/indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Provider Usage Examples
|
|
3
|
+
*
|
|
4
|
+
* Practical examples showing how to use the provider system.
|
|
5
|
+
*/
|
|
6
|
+
declare function example1_autoSelection(): Promise<void>;
|
|
7
|
+
declare function example2_manualSelection(): Promise<void>;
|
|
8
|
+
declare function example3_codeEmbedding(): Promise<void>;
|
|
9
|
+
declare function example4_asymmetricSearch(): Promise<void>;
|
|
10
|
+
declare function example5_customPriority(): Promise<void>;
|
|
11
|
+
declare function example6_production(): Promise<void>;
|
|
12
|
+
declare function example7_batchProcessing(): Promise<void>;
|
|
13
|
+
declare function example8_errorHandling(): Promise<void>;
|
|
14
|
+
declare function example9_healthMonitoring(): Promise<void>;
|
|
15
|
+
declare function example10_testing(): Promise<void>;
|
|
16
|
+
export { example1_autoSelection, example2_manualSelection, example3_codeEmbedding, example4_asymmetricSearch, example5_customPriority, example6_production, example7_batchProcessing, example8_errorHandling, example9_healthMonitoring, example10_testing };
|
|
17
|
+
//# sourceMappingURL=examples.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../../src/memory/providers/examples.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,iBAAe,sBAAsB,kBAkBpC;AAMD,iBAAe,wBAAwB,kBAyBtC;AAMD,iBAAe,sBAAsB,kBAuBpC;AAMD,iBAAe,yBAAyB,kBAiDvC;AAMD,iBAAe,uBAAuB,kBAcrC;AAMD,iBAAe,mBAAmB,kBAmCjC;AAMD,iBAAe,wBAAwB,kBAmBtC;AAMD,iBAAe,sBAAsB,kBAepC;AAMD,iBAAe,yBAAyB,kBAsBvC;AAMD,iBAAe,iBAAiB,kBAc/B;AAmCD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EAClB,CAAC"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Provider Usage Examples
|
|
3
|
+
*
|
|
4
|
+
* Practical examples showing how to use the provider system.
|
|
5
|
+
*/
|
|
6
|
+
import { createProvider, selectBestProvider, getDefaultConfigs } from "./index.js";
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Example 1: Auto-selection (Recommended)
|
|
9
|
+
// ============================================================================
|
|
10
|
+
async function example1_autoSelection() {
|
|
11
|
+
console.log("Example 1: Auto-selection with graceful degradation\n");
|
|
12
|
+
// Let the system choose the best available provider
|
|
13
|
+
const provider = await selectBestProvider(getDefaultConfigs());
|
|
14
|
+
console.log(`✓ Selected: ${provider.name}`);
|
|
15
|
+
console.log(` Type: ${provider.type}`);
|
|
16
|
+
console.log(` Dimensions: ${provider.dimensions}\n`);
|
|
17
|
+
// Use it!
|
|
18
|
+
const embeddings = await provider.embed([
|
|
19
|
+
"Hello, world!",
|
|
20
|
+
"TypeScript is awesome"
|
|
21
|
+
]);
|
|
22
|
+
console.log(`Generated ${embeddings.length} embeddings`);
|
|
23
|
+
console.log(`Each embedding has ${embeddings[0].length} dimensions\n`);
|
|
24
|
+
}
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Example 2: Manual Provider Selection
|
|
27
|
+
// ============================================================================
|
|
28
|
+
async function example2_manualSelection() {
|
|
29
|
+
console.log("Example 2: Manual provider selection\n");
|
|
30
|
+
// For local development - privacy-first
|
|
31
|
+
const localProvider = createProvider({
|
|
32
|
+
type: "ollama",
|
|
33
|
+
model: "nomic-embed-text"
|
|
34
|
+
});
|
|
35
|
+
console.log(`Using: ${localProvider.name}`);
|
|
36
|
+
// Check health before using
|
|
37
|
+
const health = await localProvider.healthCheck();
|
|
38
|
+
if (!health.ok) {
|
|
39
|
+
console.error(`❌ ${health.reason}`);
|
|
40
|
+
if (health.hint) {
|
|
41
|
+
console.log(`💡 Hint: ${health.hint}`);
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
console.log("✓ Provider is healthy\n");
|
|
46
|
+
const embeddings = await localProvider.embed(["Test document"]);
|
|
47
|
+
console.log(`Generated embedding with ${embeddings[0].length} dimensions\n`);
|
|
48
|
+
}
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// Example 3: Code-Specialized Embedding
|
|
51
|
+
// ============================================================================
|
|
52
|
+
async function example3_codeEmbedding() {
|
|
53
|
+
console.log("Example 3: Code-specialized embedding with Voyage\n");
|
|
54
|
+
const codeProvider = createProvider({
|
|
55
|
+
type: "voyage",
|
|
56
|
+
model: "voyage-code-3",
|
|
57
|
+
dimensions: 1024,
|
|
58
|
+
apiKey: process.env.VOYAGE_API_KEY
|
|
59
|
+
});
|
|
60
|
+
// Code snippets
|
|
61
|
+
const codeSnippets = [
|
|
62
|
+
"function fibonacci(n: number): number { return n < 2 ? n : fibonacci(n-1) + fibonacci(n-2); }",
|
|
63
|
+
"const factorial = (n: number): number => n <= 1 ? 1 : n * factorial(n - 1);",
|
|
64
|
+
"class Stack<T> { private items: T[] = []; push(item: T) { this.items.push(item); } }"
|
|
65
|
+
];
|
|
66
|
+
// Use code-specific embedding
|
|
67
|
+
if (codeProvider.embedCode) {
|
|
68
|
+
const embeddings = await codeProvider.embedCode(codeSnippets);
|
|
69
|
+
console.log(`Generated ${embeddings.length} code embeddings`);
|
|
70
|
+
console.log(`Optimized for code similarity search\n`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// ============================================================================
|
|
74
|
+
// Example 4: Asymmetric Search (Query vs Document)
|
|
75
|
+
// ============================================================================
|
|
76
|
+
async function example4_asymmetricSearch() {
|
|
77
|
+
console.log("Example 4: Asymmetric search with Voyage\n");
|
|
78
|
+
const provider = createProvider({
|
|
79
|
+
type: "voyage",
|
|
80
|
+
model: "voyage-4-lite",
|
|
81
|
+
apiKey: process.env.VOYAGE_API_KEY
|
|
82
|
+
});
|
|
83
|
+
// Documents (what you're searching through)
|
|
84
|
+
const documents = [
|
|
85
|
+
"TypeScript is a strongly typed programming language that builds on JavaScript.",
|
|
86
|
+
"Python is an interpreted, high-level programming language with dynamic semantics.",
|
|
87
|
+
"Rust is a systems programming language focused on safety and performance."
|
|
88
|
+
];
|
|
89
|
+
// Query (what the user is searching for)
|
|
90
|
+
const query = "What is a type-safe language?";
|
|
91
|
+
// Embed documents
|
|
92
|
+
const docEmbeddings = await provider.embed(documents);
|
|
93
|
+
// Embed query (optimized differently)
|
|
94
|
+
let queryEmbedding;
|
|
95
|
+
if (provider.embedQuery) {
|
|
96
|
+
queryEmbedding = await provider.embedQuery(query);
|
|
97
|
+
console.log("✓ Used query-optimized embedding");
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
[queryEmbedding] = await provider.embed([query]);
|
|
101
|
+
console.log("✓ Used standard embedding");
|
|
102
|
+
}
|
|
103
|
+
// Compute cosine similarity (simplified)
|
|
104
|
+
const similarities = docEmbeddings.map((docEmb) => {
|
|
105
|
+
const dotProduct = docEmb.reduce((sum, val, i) => sum + val * queryEmbedding[i], 0);
|
|
106
|
+
const magnitude1 = Math.sqrt(docEmb.reduce((sum, val) => sum + val * val, 0));
|
|
107
|
+
const magnitude2 = Math.sqrt(queryEmbedding.reduce((sum, val) => sum + val * val, 0));
|
|
108
|
+
return dotProduct / (magnitude1 * magnitude2);
|
|
109
|
+
});
|
|
110
|
+
// Show results
|
|
111
|
+
console.log("\nSearch results:");
|
|
112
|
+
similarities
|
|
113
|
+
.map((sim, i) => ({ doc: documents[i], similarity: sim }))
|
|
114
|
+
.sort((a, b) => b.similarity - a.similarity)
|
|
115
|
+
.forEach((result, i) => {
|
|
116
|
+
console.log(`${i + 1}. [${result.similarity.toFixed(3)}] ${result.doc}`);
|
|
117
|
+
});
|
|
118
|
+
console.log();
|
|
119
|
+
}
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// Example 5: Custom Priority Order
|
|
122
|
+
// ============================================================================
|
|
123
|
+
async function example5_customPriority() {
|
|
124
|
+
console.log("Example 5: Custom priority order\n");
|
|
125
|
+
// Try local first, then cloud
|
|
126
|
+
const customConfigs = [
|
|
127
|
+
{ type: "ollama" }, // Free, local
|
|
128
|
+
{ type: "openai", dimensions: 512 }, // Cheap, small dimensions
|
|
129
|
+
{ type: "text-only" } // Ultimate fallback
|
|
130
|
+
];
|
|
131
|
+
const provider = await selectBestProvider(customConfigs);
|
|
132
|
+
console.log(`Selected: ${provider.name}`);
|
|
133
|
+
console.log(`Strategy: Try local → Try cheap cloud → Fallback\n`);
|
|
134
|
+
}
|
|
135
|
+
// ============================================================================
|
|
136
|
+
// Example 6: Production Configuration
|
|
137
|
+
// ============================================================================
|
|
138
|
+
async function example6_production() {
|
|
139
|
+
console.log("Example 6: Production-ready configuration\n");
|
|
140
|
+
// Production setup with redundancy
|
|
141
|
+
const productionConfigs = [
|
|
142
|
+
// Primary: High-quality embeddings
|
|
143
|
+
{
|
|
144
|
+
type: "openai",
|
|
145
|
+
model: "text-embedding-3-large",
|
|
146
|
+
dimensions: 3072
|
|
147
|
+
},
|
|
148
|
+
// Fallback 1: Smaller but still good
|
|
149
|
+
{
|
|
150
|
+
type: "openai",
|
|
151
|
+
model: "text-embedding-3-small",
|
|
152
|
+
dimensions: 1536
|
|
153
|
+
},
|
|
154
|
+
// Fallback 2: Alternative provider
|
|
155
|
+
{
|
|
156
|
+
type: "voyage",
|
|
157
|
+
model: "voyage-4-lite",
|
|
158
|
+
dimensions: 1024
|
|
159
|
+
},
|
|
160
|
+
// Fallback 3: Multi-provider gateway
|
|
161
|
+
{
|
|
162
|
+
type: "openrouter",
|
|
163
|
+
model: "openai/text-embedding-3-small"
|
|
164
|
+
}
|
|
165
|
+
];
|
|
166
|
+
const provider = await selectBestProvider(productionConfigs);
|
|
167
|
+
console.log(`✓ Production provider: ${provider.name}`);
|
|
168
|
+
console.log(` Dimensions: ${provider.dimensions}`);
|
|
169
|
+
console.log(` Type: ${provider.type}\n`);
|
|
170
|
+
}
|
|
171
|
+
// ============================================================================
|
|
172
|
+
// Example 7: Batch Processing
|
|
173
|
+
// ============================================================================
|
|
174
|
+
async function example7_batchProcessing() {
|
|
175
|
+
console.log("Example 7: Efficient batch processing\n");
|
|
176
|
+
const provider = await selectBestProvider(getDefaultConfigs());
|
|
177
|
+
// Efficient: Single API call
|
|
178
|
+
const startTime = Date.now();
|
|
179
|
+
const texts = Array.from({ length: 100 }, (_, i) => `Document number ${i + 1} with some content`);
|
|
180
|
+
const embeddings = await provider.embed(texts);
|
|
181
|
+
const duration = Date.now() - startTime;
|
|
182
|
+
console.log(`✓ Embedded ${embeddings.length} documents in ${duration}ms`);
|
|
183
|
+
console.log(` Average: ${(duration / embeddings.length).toFixed(2)}ms per document\n`);
|
|
184
|
+
}
|
|
185
|
+
// ============================================================================
|
|
186
|
+
// Example 8: Error Handling
|
|
187
|
+
// ============================================================================
|
|
188
|
+
async function example8_errorHandling() {
|
|
189
|
+
console.log("Example 8: Proper error handling\n");
|
|
190
|
+
try {
|
|
191
|
+
// Invalid configuration
|
|
192
|
+
const provider = createProvider({
|
|
193
|
+
type: "openai",
|
|
194
|
+
dimensions: 999 // Invalid dimension!
|
|
195
|
+
});
|
|
196
|
+
await provider.embed(["test"]);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.error("❌ Caught error:", error instanceof Error ? error.message : error);
|
|
200
|
+
console.log("✓ Errors are clear and actionable\n");
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// ============================================================================
|
|
204
|
+
// Example 9: Health Monitoring
|
|
205
|
+
// ============================================================================
|
|
206
|
+
async function example9_healthMonitoring() {
|
|
207
|
+
console.log("Example 9: Health monitoring\n");
|
|
208
|
+
const providers = [
|
|
209
|
+
createProvider({ type: "ollama" }),
|
|
210
|
+
createProvider({ type: "text-only" })
|
|
211
|
+
];
|
|
212
|
+
for (const provider of providers) {
|
|
213
|
+
const health = await provider.healthCheck();
|
|
214
|
+
console.log(`${provider.name}:`);
|
|
215
|
+
console.log(` Status: ${health.ok ? "✓ Healthy" : "✗ Unhealthy"}`);
|
|
216
|
+
if (health.reason) {
|
|
217
|
+
console.log(` Reason: ${health.reason}`);
|
|
218
|
+
}
|
|
219
|
+
if (health.hint) {
|
|
220
|
+
console.log(` Hint: ${health.hint}`);
|
|
221
|
+
}
|
|
222
|
+
console.log();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// ============================================================================
|
|
226
|
+
// Example 10: Testing Setup
|
|
227
|
+
// ============================================================================
|
|
228
|
+
async function example10_testing() {
|
|
229
|
+
console.log("Example 10: Testing setup\n");
|
|
230
|
+
// Use text-only provider for fast tests
|
|
231
|
+
const testProvider = createProvider({ type: "text-only" });
|
|
232
|
+
console.log("Test provider setup:");
|
|
233
|
+
console.log(` Name: ${testProvider.name}`);
|
|
234
|
+
console.log(` No API calls: ✓`);
|
|
235
|
+
console.log(` Always available: ✓`);
|
|
236
|
+
console.log(` Fast: ✓`);
|
|
237
|
+
const embeddings = await testProvider.embed(["test1", "test2", "test3"]);
|
|
238
|
+
console.log(` Generated ${embeddings.length} mock embeddings\n`);
|
|
239
|
+
}
|
|
240
|
+
// ============================================================================
|
|
241
|
+
// Run Examples
|
|
242
|
+
// ============================================================================
|
|
243
|
+
async function runExamples() {
|
|
244
|
+
const examples = [
|
|
245
|
+
example1_autoSelection,
|
|
246
|
+
example2_manualSelection,
|
|
247
|
+
example3_codeEmbedding,
|
|
248
|
+
example4_asymmetricSearch,
|
|
249
|
+
example5_customPriority,
|
|
250
|
+
example6_production,
|
|
251
|
+
example7_batchProcessing,
|
|
252
|
+
example8_errorHandling,
|
|
253
|
+
example9_healthMonitoring,
|
|
254
|
+
example10_testing
|
|
255
|
+
];
|
|
256
|
+
for (const example of examples) {
|
|
257
|
+
try {
|
|
258
|
+
await example();
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
console.error(`Error in ${example.name}:`, error);
|
|
262
|
+
}
|
|
263
|
+
console.log("─".repeat(80) + "\n");
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Run if executed directly
|
|
267
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
268
|
+
runExamples().catch(console.error);
|
|
269
|
+
}
|
|
270
|
+
export { example1_autoSelection, example2_manualSelection, example3_codeEmbedding, example4_asymmetricSearch, example5_customPriority, example6_production, example7_batchProcessing, example8_errorHandling, example9_healthMonitoring, example10_testing };
|
|
271
|
+
//# sourceMappingURL=examples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examples.js","sourceRoot":"","sources":["../../../src/memory/providers/examples.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Factory with Graceful Degradation
|
|
3
|
+
*
|
|
4
|
+
* "Make the right things easy and the wrong things hard."
|
|
5
|
+
*
|
|
6
|
+
* This factory implements:
|
|
7
|
+
* 1. Strategy Pattern - swappable providers
|
|
8
|
+
* 2. Factory Pattern - centralized creation
|
|
9
|
+
* 3. Graceful Degradation - automatic fallback to working providers
|
|
10
|
+
*/
|
|
11
|
+
import type { IEmbeddingProvider, ProviderConfig } from "./types.js";
|
|
12
|
+
/**
|
|
13
|
+
* Create a provider from configuration
|
|
14
|
+
*
|
|
15
|
+
* @throws Error if provider type is invalid or required credentials are missing
|
|
16
|
+
*/
|
|
17
|
+
export declare function createProvider(config: ProviderConfig): IEmbeddingProvider;
|
|
18
|
+
/**
|
|
19
|
+
* Select the best working provider from a list
|
|
20
|
+
*
|
|
21
|
+
* Implements graceful degradation:
|
|
22
|
+
* - Tries each provider in order
|
|
23
|
+
* - Returns first healthy provider
|
|
24
|
+
* - Falls back to text-only if all fail
|
|
25
|
+
*
|
|
26
|
+
* @param configs - Array of provider configurations in priority order
|
|
27
|
+
* @returns The first healthy provider or text-only fallback
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const provider = await selectBestProvider([
|
|
32
|
+
* { type: "voyage", model: "voyage-code-3" },
|
|
33
|
+
* { type: "ollama" },
|
|
34
|
+
* { type: "openai" }
|
|
35
|
+
* ]);
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function selectBestProvider(configs: ProviderConfig[]): Promise<IEmbeddingProvider>;
|
|
39
|
+
/**
|
|
40
|
+
* Get default provider configurations
|
|
41
|
+
*
|
|
42
|
+
* Priority order:
|
|
43
|
+
* 1. Voyage (code-specialized)
|
|
44
|
+
* 2. Ollama (local, free)
|
|
45
|
+
* 3. OpenAI (reliable)
|
|
46
|
+
* 4. OpenRouter (fallback)
|
|
47
|
+
*/
|
|
48
|
+
export declare function getDefaultConfigs(): ProviderConfig[];
|
|
49
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/memory/providers/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAOrE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAoBzE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EAAE,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAqC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,EAAE,CAqBpD"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Factory with Graceful Degradation
|
|
3
|
+
*
|
|
4
|
+
* "Make the right things easy and the wrong things hard."
|
|
5
|
+
*
|
|
6
|
+
* This factory implements:
|
|
7
|
+
* 1. Strategy Pattern - swappable providers
|
|
8
|
+
* 2. Factory Pattern - centralized creation
|
|
9
|
+
* 3. Graceful Degradation - automatic fallback to working providers
|
|
10
|
+
*/
|
|
11
|
+
import { OllamaProvider } from "./ollama.js";
|
|
12
|
+
import { OpenAIProvider } from "./openai.js";
|
|
13
|
+
import { VoyageProvider } from "./voyage.js";
|
|
14
|
+
import { OpenRouterProvider } from "./openrouter.js";
|
|
15
|
+
import { TextOnlyProvider } from "./text-only.js";
|
|
16
|
+
/**
|
|
17
|
+
* Create a provider from configuration
|
|
18
|
+
*
|
|
19
|
+
* @throws Error if provider type is invalid or required credentials are missing
|
|
20
|
+
*/
|
|
21
|
+
export function createProvider(config) {
|
|
22
|
+
switch (config.type) {
|
|
23
|
+
case "ollama":
|
|
24
|
+
return new OllamaProvider(config);
|
|
25
|
+
case "openai":
|
|
26
|
+
return new OpenAIProvider(config);
|
|
27
|
+
case "voyage":
|
|
28
|
+
return new VoyageProvider(config);
|
|
29
|
+
case "openrouter":
|
|
30
|
+
return new OpenRouterProvider(config);
|
|
31
|
+
case "text-only":
|
|
32
|
+
return new TextOnlyProvider(config);
|
|
33
|
+
default:
|
|
34
|
+
throw new Error(`Unknown provider type: ${config.type}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Select the best working provider from a list
|
|
39
|
+
*
|
|
40
|
+
* Implements graceful degradation:
|
|
41
|
+
* - Tries each provider in order
|
|
42
|
+
* - Returns first healthy provider
|
|
43
|
+
* - Falls back to text-only if all fail
|
|
44
|
+
*
|
|
45
|
+
* @param configs - Array of provider configurations in priority order
|
|
46
|
+
* @returns The first healthy provider or text-only fallback
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const provider = await selectBestProvider([
|
|
51
|
+
* { type: "voyage", model: "voyage-code-3" },
|
|
52
|
+
* { type: "ollama" },
|
|
53
|
+
* { type: "openai" }
|
|
54
|
+
* ]);
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export async function selectBestProvider(configs) {
|
|
58
|
+
const results = [];
|
|
59
|
+
// Try each provider
|
|
60
|
+
for (const config of configs) {
|
|
61
|
+
try {
|
|
62
|
+
const provider = createProvider(config);
|
|
63
|
+
const health = await provider.healthCheck();
|
|
64
|
+
results.push({ provider, health });
|
|
65
|
+
if (health.ok) {
|
|
66
|
+
console.log(`✓ Selected provider: ${provider.name}`);
|
|
67
|
+
return provider;
|
|
68
|
+
}
|
|
69
|
+
console.warn(`✗ ${provider.name} unavailable: ${health.reason}${health.hint ? `\n Hint: ${health.hint}` : ""}`);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.warn(`✗ Failed to initialize ${config.type}:`, error instanceof Error ? error.message : error);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Fallback to text-only
|
|
76
|
+
console.warn("⚠️ All embedding providers failed. Falling back to text-only mode.");
|
|
77
|
+
console.warn(" Semantic search will be limited to keyword matching.");
|
|
78
|
+
return new TextOnlyProvider({ type: "text-only" });
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get default provider configurations
|
|
82
|
+
*
|
|
83
|
+
* Priority order:
|
|
84
|
+
* 1. Voyage (code-specialized)
|
|
85
|
+
* 2. Ollama (local, free)
|
|
86
|
+
* 3. OpenAI (reliable)
|
|
87
|
+
* 4. OpenRouter (fallback)
|
|
88
|
+
*/
|
|
89
|
+
export function getDefaultConfigs() {
|
|
90
|
+
return [
|
|
91
|
+
{
|
|
92
|
+
type: "voyage",
|
|
93
|
+
model: "voyage-code-3",
|
|
94
|
+
dimensions: 1024
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: "ollama",
|
|
98
|
+
model: "nomic-embed-text"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
type: "openai",
|
|
102
|
+
model: "text-embedding-3-small",
|
|
103
|
+
dimensions: 1536
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
type: "openrouter",
|
|
107
|
+
model: "openai/text-embedding-3-small"
|
|
108
|
+
}
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/memory/providers/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAEpC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAEpC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAEpC,KAAK,YAAY;YACf,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAExC,KAAK,WAAW;YACd,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEtC;YACE,MAAM,IAAI,KAAK,CAAC,0BAA2B,MAAyB,CAAC,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAyB;IAEzB,MAAM,OAAO,GAGR,EAAE,CAAC;IAER,oBAAoB;IACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YAE5C,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAEnC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrD,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,OAAO,CAAC,IAAI,CACV,KAAK,QAAQ,CAAC,IAAI,iBAAiB,MAAM,CAAC,MAAM,GAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAC7C,EAAE,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CACV,0BAA0B,MAAM,CAAC,IAAI,GAAG,EACxC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IACpF,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IAExE,OAAO,IAAI,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,eAAe;YACtB,UAAU,EAAE,IAAI;SACjB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,kBAAkB;SAC1B;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,wBAAwB;YAC/B,UAAU,EAAE,IAAI;SACjB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,+BAA+B;SACvC;KACF,CAAC;AACJ,CAAC"}
|