@ruvector/ruvllm 0.2.4 → 2.4.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.
Files changed (100) hide show
  1. package/README.md +413 -293
  2. package/bin/cli.js +619 -2
  3. package/dist/cjs/benchmarks/embedding-benchmark.d.ts +102 -0
  4. package/dist/cjs/benchmarks/embedding-benchmark.d.ts.map +1 -0
  5. package/dist/cjs/benchmarks/embedding-benchmark.js +436 -0
  6. package/dist/cjs/benchmarks/index.d.ts +34 -0
  7. package/dist/cjs/benchmarks/index.d.ts.map +1 -0
  8. package/dist/cjs/benchmarks/index.js +132 -0
  9. package/dist/cjs/benchmarks/model-comparison.d.ts +71 -0
  10. package/dist/cjs/benchmarks/model-comparison.d.ts.map +1 -0
  11. package/dist/cjs/benchmarks/model-comparison.js +476 -0
  12. package/dist/cjs/benchmarks/routing-benchmark.d.ts +70 -0
  13. package/dist/cjs/benchmarks/routing-benchmark.d.ts.map +1 -0
  14. package/dist/cjs/benchmarks/routing-benchmark.js +289 -0
  15. package/dist/cjs/contrastive.d.ts +229 -0
  16. package/dist/cjs/contrastive.d.ts.map +1 -0
  17. package/dist/cjs/contrastive.js +589 -0
  18. package/dist/cjs/engine.d.ts +3 -0
  19. package/dist/cjs/engine.d.ts.map +1 -1
  20. package/dist/cjs/engine.js +26 -6
  21. package/dist/cjs/index.d.ts +4 -0
  22. package/dist/cjs/index.d.ts.map +1 -1
  23. package/dist/cjs/index.js +9 -1
  24. package/dist/cjs/models.d.ts +129 -0
  25. package/dist/cjs/models.d.ts.map +1 -0
  26. package/dist/cjs/models.js +323 -0
  27. package/dist/cjs/native.d.ts +3 -3
  28. package/dist/cjs/native.d.ts.map +1 -1
  29. package/dist/cjs/native.js +1 -1
  30. package/dist/cjs/rlm/controller.d.ts +245 -0
  31. package/dist/cjs/rlm/controller.d.ts.map +1 -0
  32. package/dist/cjs/rlm/controller.js +554 -0
  33. package/dist/cjs/rlm/index.d.ts +62 -0
  34. package/dist/cjs/rlm/index.d.ts.map +1 -0
  35. package/dist/cjs/rlm/index.js +97 -0
  36. package/dist/cjs/rlm/training.d.ts +333 -0
  37. package/dist/cjs/rlm/training.d.ts.map +1 -0
  38. package/dist/cjs/rlm/training.js +680 -0
  39. package/dist/cjs/rlm/types.d.ts +189 -0
  40. package/dist/cjs/rlm/types.d.ts.map +1 -0
  41. package/dist/cjs/rlm/types.js +10 -0
  42. package/dist/esm/benchmarks/embedding-benchmark.d.ts +102 -0
  43. package/dist/esm/benchmarks/embedding-benchmark.d.ts.map +1 -0
  44. package/dist/esm/benchmarks/embedding-benchmark.js +427 -0
  45. package/dist/esm/benchmarks/index.d.ts +34 -0
  46. package/dist/esm/benchmarks/index.d.ts.map +1 -0
  47. package/dist/esm/benchmarks/index.js +110 -0
  48. package/dist/esm/benchmarks/model-comparison.d.ts +71 -0
  49. package/dist/esm/benchmarks/model-comparison.d.ts.map +1 -0
  50. package/dist/esm/benchmarks/model-comparison.js +434 -0
  51. package/dist/esm/benchmarks/routing-benchmark.d.ts +70 -0
  52. package/dist/esm/benchmarks/routing-benchmark.d.ts.map +1 -0
  53. package/dist/esm/benchmarks/routing-benchmark.js +283 -0
  54. package/dist/esm/contrastive.d.ts +229 -0
  55. package/dist/esm/contrastive.d.ts.map +1 -0
  56. package/dist/esm/contrastive.js +578 -0
  57. package/dist/esm/engine.d.ts +3 -0
  58. package/dist/esm/engine.d.ts.map +1 -1
  59. package/dist/esm/engine.js +26 -6
  60. package/dist/esm/index.d.ts +4 -0
  61. package/dist/esm/index.d.ts.map +1 -1
  62. package/dist/esm/index.js +9 -1
  63. package/dist/esm/models.d.ts +129 -0
  64. package/dist/esm/models.d.ts.map +1 -0
  65. package/dist/esm/models.js +282 -0
  66. package/dist/esm/native.d.ts +3 -3
  67. package/dist/esm/native.d.ts.map +1 -1
  68. package/dist/esm/native.js +1 -1
  69. package/dist/esm/rlm/controller.d.ts +245 -0
  70. package/dist/esm/rlm/controller.d.ts.map +1 -0
  71. package/dist/esm/rlm/controller.js +550 -0
  72. package/dist/esm/rlm/index.d.ts +62 -0
  73. package/dist/esm/rlm/index.d.ts.map +1 -0
  74. package/dist/esm/rlm/index.js +71 -0
  75. package/dist/esm/rlm/training.d.ts +333 -0
  76. package/dist/esm/rlm/training.d.ts.map +1 -0
  77. package/dist/esm/rlm/training.js +672 -0
  78. package/dist/esm/rlm/types.d.ts +189 -0
  79. package/dist/esm/rlm/types.d.ts.map +1 -0
  80. package/dist/esm/rlm/types.js +9 -0
  81. package/package.json +13 -8
  82. package/scripts/ensemble-model-compare.js +287 -0
  83. package/scripts/huggingface/README.md +537 -0
  84. package/scripts/huggingface/publish.sh +112 -0
  85. package/scripts/hybrid-model-compare.js +373 -0
  86. package/scripts/improved-model-compare.js +288 -0
  87. package/scripts/optimized-model-compare.js +364 -0
  88. package/scripts/real-model-compare.js +280 -0
  89. package/scripts/training/agentic-flow-capabilities.json +329 -0
  90. package/scripts/training/claude-code-synth.js +505 -0
  91. package/scripts/training/claude-flow-capabilities.json +1322 -0
  92. package/scripts/training/claude-hard-negatives.js +222 -0
  93. package/scripts/training/contrastive-finetune.js +517 -0
  94. package/scripts/training/ecosystem-triplets.jsonl +1467 -0
  95. package/scripts/training/generate-ecosystem-triplets.js +1324 -0
  96. package/scripts/training/rlm-dataset.js +671 -0
  97. package/scripts/training/routing-dataset.js +634 -0
  98. package/scripts/training/ruvector-capabilities.json +798 -0
  99. package/scripts/training/validate-ecosystem.js +381 -0
  100. package/scripts/training/validation-results.json +23 -0
@@ -0,0 +1,282 @@
1
+ /**
2
+ * RuvLTRA Model Registry and Downloader
3
+ *
4
+ * Automatically downloads GGUF models from HuggingFace Hub.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { ModelDownloader, RUVLTRA_MODELS } from '@ruvector/ruvllm';
9
+ *
10
+ * // Download the Claude Code optimized model
11
+ * const downloader = new ModelDownloader();
12
+ * const modelPath = await downloader.download('claude-code');
13
+ *
14
+ * // Or download all models
15
+ * await downloader.downloadAll();
16
+ * ```
17
+ */
18
+ import { createWriteStream, existsSync, mkdirSync, statSync, unlinkSync, renameSync } from 'fs';
19
+ import { join } from 'path';
20
+ import { homedir } from 'os';
21
+ /** HuggingFace repository */
22
+ const HF_REPO = 'ruv/ruvltra';
23
+ const HF_BASE_URL = `https://huggingface.co/${HF_REPO}/resolve/main`;
24
+ /** Available RuvLTRA models */
25
+ export const RUVLTRA_MODELS = {
26
+ 'claude-code': {
27
+ id: 'claude-code',
28
+ name: 'RuvLTRA Claude Code',
29
+ filename: 'ruvltra-claude-code-0.5b-q4_k_m.gguf',
30
+ sizeBytes: 398000000,
31
+ size: '398 MB',
32
+ parameters: '0.5B',
33
+ useCase: 'Claude Code workflows, agentic coding',
34
+ quantization: 'Q4_K_M',
35
+ contextLength: 4096,
36
+ url: `${HF_BASE_URL}/ruvltra-claude-code-0.5b-q4_k_m.gguf`,
37
+ },
38
+ 'small': {
39
+ id: 'small',
40
+ name: 'RuvLTRA Small',
41
+ filename: 'ruvltra-small-0.5b-q4_k_m.gguf',
42
+ sizeBytes: 398000000,
43
+ size: '398 MB',
44
+ parameters: '0.5B',
45
+ useCase: 'Edge devices, IoT, resource-constrained environments',
46
+ quantization: 'Q4_K_M',
47
+ contextLength: 4096,
48
+ url: `${HF_BASE_URL}/ruvltra-small-0.5b-q4_k_m.gguf`,
49
+ },
50
+ 'medium': {
51
+ id: 'medium',
52
+ name: 'RuvLTRA Medium',
53
+ filename: 'ruvltra-medium-1.1b-q4_k_m.gguf',
54
+ sizeBytes: 669000000,
55
+ size: '669 MB',
56
+ parameters: '1.1B',
57
+ useCase: 'General purpose, balanced performance',
58
+ quantization: 'Q4_K_M',
59
+ contextLength: 8192,
60
+ url: `${HF_BASE_URL}/ruvltra-medium-1.1b-q4_k_m.gguf`,
61
+ },
62
+ };
63
+ /** Model aliases for convenience */
64
+ export const MODEL_ALIASES = {
65
+ 'cc': 'claude-code',
66
+ 'claudecode': 'claude-code',
67
+ 'claude': 'claude-code',
68
+ 's': 'small',
69
+ 'sm': 'small',
70
+ 'm': 'medium',
71
+ 'med': 'medium',
72
+ 'default': 'claude-code',
73
+ };
74
+ /**
75
+ * Get the default models directory
76
+ */
77
+ export function getDefaultModelsDir() {
78
+ return join(homedir(), '.ruvllm', 'models');
79
+ }
80
+ /**
81
+ * Resolve model ID from alias or direct ID
82
+ */
83
+ export function resolveModelId(modelIdOrAlias) {
84
+ const normalized = modelIdOrAlias.toLowerCase().trim();
85
+ // Direct match
86
+ if (RUVLTRA_MODELS[normalized]) {
87
+ return normalized;
88
+ }
89
+ // Alias match
90
+ if (MODEL_ALIASES[normalized]) {
91
+ return MODEL_ALIASES[normalized];
92
+ }
93
+ return null;
94
+ }
95
+ /**
96
+ * Get model info by ID or alias
97
+ */
98
+ export function getModelInfo(modelIdOrAlias) {
99
+ const id = resolveModelId(modelIdOrAlias);
100
+ return id ? RUVLTRA_MODELS[id] : null;
101
+ }
102
+ /**
103
+ * List all available models
104
+ */
105
+ export function listModels() {
106
+ return Object.values(RUVLTRA_MODELS);
107
+ }
108
+ /**
109
+ * Model downloader for RuvLTRA GGUF models
110
+ */
111
+ export class ModelDownloader {
112
+ constructor(modelsDir) {
113
+ this.modelsDir = modelsDir || getDefaultModelsDir();
114
+ }
115
+ /**
116
+ * Get the path where a model would be saved
117
+ */
118
+ getModelPath(modelIdOrAlias) {
119
+ const model = getModelInfo(modelIdOrAlias);
120
+ if (!model)
121
+ return null;
122
+ return join(this.modelsDir, model.filename);
123
+ }
124
+ /**
125
+ * Check if a model is already downloaded
126
+ */
127
+ isDownloaded(modelIdOrAlias) {
128
+ const path = this.getModelPath(modelIdOrAlias);
129
+ if (!path)
130
+ return false;
131
+ if (!existsSync(path))
132
+ return false;
133
+ // Verify size matches expected
134
+ const model = getModelInfo(modelIdOrAlias);
135
+ if (!model)
136
+ return false;
137
+ const stats = statSync(path);
138
+ // Allow 5% variance for size check
139
+ const minSize = model.sizeBytes * 0.95;
140
+ return stats.size >= minSize;
141
+ }
142
+ /**
143
+ * Get download status for all models
144
+ */
145
+ getStatus() {
146
+ return listModels().map(model => ({
147
+ model,
148
+ downloaded: this.isDownloaded(model.id),
149
+ path: this.getModelPath(model.id),
150
+ }));
151
+ }
152
+ /**
153
+ * Download a model from HuggingFace
154
+ */
155
+ async download(modelIdOrAlias, options = {}) {
156
+ const model = getModelInfo(modelIdOrAlias);
157
+ if (!model) {
158
+ const available = listModels().map(m => m.id).join(', ');
159
+ throw new Error(`Unknown model: ${modelIdOrAlias}. Available models: ${available}`);
160
+ }
161
+ const destDir = options.modelsDir || this.modelsDir;
162
+ const destPath = join(destDir, model.filename);
163
+ // Check if already downloaded
164
+ if (!options.force && this.isDownloaded(model.id)) {
165
+ return destPath;
166
+ }
167
+ // Ensure directory exists
168
+ if (!existsSync(destDir)) {
169
+ mkdirSync(destDir, { recursive: true });
170
+ }
171
+ // Download with progress tracking
172
+ const tempPath = `${destPath}.tmp`;
173
+ let startTime = Date.now();
174
+ let lastProgressTime = startTime;
175
+ let lastDownloaded = 0;
176
+ try {
177
+ // Use dynamic import for node-fetch if native fetch not available
178
+ const fetchFn = globalThis.fetch || (await import('node:https')).default;
179
+ const response = await fetch(model.url, {
180
+ headers: {
181
+ 'User-Agent': 'RuvLLM/2.3.0',
182
+ },
183
+ });
184
+ if (!response.ok) {
185
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
186
+ }
187
+ const contentLength = parseInt(response.headers.get('content-length') || String(model.sizeBytes));
188
+ // Create write stream
189
+ const fileStream = createWriteStream(tempPath);
190
+ let downloaded = 0;
191
+ // Stream with progress
192
+ const reader = response.body?.getReader();
193
+ if (!reader) {
194
+ throw new Error('Response body is not readable');
195
+ }
196
+ while (true) {
197
+ const { done, value } = await reader.read();
198
+ if (done)
199
+ break;
200
+ downloaded += value.length;
201
+ fileStream.write(value);
202
+ // Report progress
203
+ if (options.onProgress) {
204
+ const now = Date.now();
205
+ const elapsed = (now - lastProgressTime) / 1000;
206
+ const bytesThisInterval = downloaded - lastDownloaded;
207
+ const speedBps = elapsed > 0 ? bytesThisInterval / elapsed : 0;
208
+ const remaining = contentLength - downloaded;
209
+ const etaSeconds = speedBps > 0 ? remaining / speedBps : 0;
210
+ options.onProgress({
211
+ modelId: model.id,
212
+ downloaded,
213
+ total: contentLength,
214
+ percent: Math.round((downloaded / contentLength) * 100),
215
+ speedBps,
216
+ etaSeconds,
217
+ });
218
+ lastProgressTime = now;
219
+ lastDownloaded = downloaded;
220
+ }
221
+ }
222
+ fileStream.end();
223
+ // Wait for file to be fully written
224
+ await new Promise((resolve, reject) => {
225
+ fileStream.on('finish', resolve);
226
+ fileStream.on('error', reject);
227
+ });
228
+ // Move temp file to final destination
229
+ if (existsSync(destPath)) {
230
+ unlinkSync(destPath);
231
+ }
232
+ renameSync(tempPath, destPath);
233
+ return destPath;
234
+ }
235
+ catch (error) {
236
+ // Clean up temp file on error
237
+ if (existsSync(tempPath)) {
238
+ try {
239
+ unlinkSync(tempPath);
240
+ }
241
+ catch { }
242
+ }
243
+ throw error;
244
+ }
245
+ }
246
+ /**
247
+ * Download all available models
248
+ */
249
+ async downloadAll(options = {}) {
250
+ const paths = [];
251
+ for (const model of listModels()) {
252
+ const path = await this.download(model.id, options);
253
+ paths.push(path);
254
+ }
255
+ return paths;
256
+ }
257
+ /**
258
+ * Delete a downloaded model
259
+ */
260
+ delete(modelIdOrAlias) {
261
+ const path = this.getModelPath(modelIdOrAlias);
262
+ if (!path || !existsSync(path)) {
263
+ return false;
264
+ }
265
+ unlinkSync(path);
266
+ return true;
267
+ }
268
+ /**
269
+ * Delete all downloaded models
270
+ */
271
+ deleteAll() {
272
+ let count = 0;
273
+ for (const model of listModels()) {
274
+ if (this.delete(model.id)) {
275
+ count++;
276
+ }
277
+ }
278
+ return count;
279
+ }
280
+ }
281
+ export default ModelDownloader;
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxJQUFJLEVBQVcsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQTJEN0IsNkJBQTZCO0FBQzdCLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUM5QixNQUFNLFdBQVcsR0FBRywwQkFBMEIsT0FBTyxlQUFlLENBQUM7QUFFckUsK0JBQStCO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBOEI7SUFDdkQsYUFBYSxFQUFFO1FBQ2IsRUFBRSxFQUFFLGFBQWE7UUFDakIsSUFBSSxFQUFFLHFCQUFxQjtRQUMzQixRQUFRLEVBQUUsc0NBQXNDO1FBQ2hELFNBQVMsRUFBRSxTQUFXO1FBQ3RCLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFLE1BQU07UUFDbEIsT0FBTyxFQUFFLHVDQUF1QztRQUNoRCxZQUFZLEVBQUUsUUFBUTtRQUN0QixhQUFhLEVBQUUsSUFBSTtRQUNuQixHQUFHLEVBQUUsR0FBRyxXQUFXLHVDQUF1QztLQUMzRDtJQUNELE9BQU8sRUFBRTtRQUNQLEVBQUUsRUFBRSxPQUFPO1FBQ1gsSUFBSSxFQUFFLGVBQWU7UUFDckIsUUFBUSxFQUFFLGdDQUFnQztRQUMxQyxTQUFTLEVBQUUsU0FBVztRQUN0QixJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE9BQU8sRUFBRSxzREFBc0Q7UUFDL0QsWUFBWSxFQUFFLFFBQVE7UUFDdEIsYUFBYSxFQUFFLElBQUk7UUFDbkIsR0FB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LE1BQU0sS0FBSyxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBc0I7UUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUztRQUNQLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEtBQUssTUFBTSxLQUFLLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLEtBQUssRUFBRSxDQUFDO1lBQ1YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQUVELGVBQWUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSdXZMVFJBIE1vZGVsIFJlZ2lzdHJ5IGFuZCBEb3dubG9hZGVyXG4gKlxuICogQXV0b21hdGljYWxseSBkb3dubG9hZHMgR0dVRiBtb2RlbHMgZnJvbSBIdWdnaW5nRmFjZSBIdWIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IE1vZGVsRG93bmxvYWRlciwgUlVWTFRSQV9NT0RFTFMgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcbiAqXG4gKiAvLyBEb3dubG9hZCB0aGUgQ2xhdWRlIENvZGUgb3B0aW1pemVkIG1vZGVsXG4gKiBjb25zdCBkb3dubG9hZGVyID0gbmV3IE1vZGVsRG93bmxvYWRlcigpO1xuICogY29uc3QgbW9kZWxQYXRoID0gYXdhaXQgZG93bmxvYWRlci5kb3dubG9hZCgnY2xhdWRlLWNvZGUnKTtcbiAqXG4gKiAvLyBPciBkb3dubG9hZCBhbGwgbW9kZWxzXG4gKiBhd2FpdCBkb3dubG9hZGVyLmRvd25sb2FkQWxsKCk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSwgZXhpc3RzU3luYywgbWtkaXJTeW5jLCBzdGF0U3luYywgdW5saW5rU3luYywgcmVuYW1lU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4sIGRpcm5hbWUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBwaXBlbGluZSB9IGZyb20gJ3N0cmVhbS9wcm9taXNlcyc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcblxuLyoqIE1vZGVsIGluZm9ybWF0aW9uIGZyb20gSHVnZ2luZ0ZhY2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxJbmZvIHtcbiAgLyoqIE1vZGVsIGlkZW50aWZpZXIgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBNb2RlbCBmaWxlbmFtZSBvbiBIdWdnaW5nRmFjZSAqL1xuICBmaWxlbmFtZTogc3RyaW5nO1xuICAvKiogTW9kZWwgc2l6ZSBpbiBieXRlcyAqL1xuICBzaXplQnl0ZXM6IG51bWJlcjtcbiAgLyoqIE1vZGVsIHNpemUgKGh1bWFuIHJlYWRhYmxlKSAqL1xuICBzaXplOiBzdHJpbmc7XG4gIC8qKiBQYXJhbWV0ZXIgY291bnQgKi9cbiAgcGFyYW1ldGVyczogc3RyaW5nO1xuICAvKiogVXNlIGNhc2UgZGVzY3JpcHRpb24gKi9cbiAgdXNlQ2FzZTogc3RyaW5nO1xuICAvKiogUXVhbnRpemF0aW9uIHR5cGUgKi9cbiAgcXVhbnRpemF0aW9uOiBzdHJpbmc7XG4gIC8qKiBDb250ZXh0IHdpbmRvdyBzaXplICovXG4gIGNvbnRleHRMZW5ndGg6IG51bWJlcjtcbiAgLyoqIEh1Z2dpbmdGYWNlIGRvd25sb2FkIFVSTCAqL1xuICB1cmw6IHN0cmluZztcbn1cblxuLyoqIERvd25sb2FkIHByb2dyZXNzIGNhbGxiYWNrICovXG5leHBvcnQgdHlwZSBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBEb3dubG9hZFByb2dyZXNzKSA9PiB2b2lkO1xuXG4vKiogRG93bmxvYWQgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG93bmxvYWRQcm9ncmVzcyB7XG4gIC8qKiBNb2RlbCBiZWluZyBkb3dubG9hZGVkICovXG4gIG1vZGVsSWQ6IHN0cmluZztcbiAgLyoqIEJ5dGVzIGRvd25sb2FkZWQgc28gZmFyICovXG4gIGRvd25sb2FkZWQ6IG51bWJlcjtcbiAgLyoqIFRvdGFsIGJ5dGVzIHRvIGRvd25sb2FkICovXG4gIHRvdGFsOiBudW1iZXI7XG4gIC8qKiBEb3dubG9hZCBwZXJjZW50YWdlICgwLTEwMCkgKi9cbiAgcGVyY2VudDogbnVtYmVyO1xuICAvKiogRG93bmxvYWQgc3BlZWQgaW4gYnl0ZXMgcGVyIHNlY29uZCAqL1xuICBzcGVlZEJwczogbnVtYmVyO1xuICAvKiogRXN0aW1hdGVkIHRpbWUgcmVtYWluaW5nIGluIHNlY29uZHMgKi9cbiAgZXRhU2Vjb25kczogbnVtYmVyO1xufVxuXG4vKiogRG93bmxvYWQgb3B0aW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBEb3dubG9hZE9wdGlvbnMge1xuICAvKiogRGlyZWN0b3J5IHRvIHNhdmUgbW9kZWxzIChkZWZhdWx0OiB+Ly5ydXZsbG0vbW9kZWxzKSAqL1xuICBtb2RlbHNEaXI/OiBzdHJpbmc7XG4gIC8qKiBGb3JjZSByZS1kb3dubG9hZCBldmVuIGlmIGZpbGUgZXhpc3RzICovXG4gIGZvcmNlPzogYm9vbGVhbjtcbiAgLyoqIFByb2dyZXNzIGNhbGxiYWNrICovXG4gIG9uUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAvKiogVmVyaWZ5IGZpbGUgaW50ZWdyaXR5IGFmdGVyIGRvd25sb2FkICovXG4gIHZlcmlmeT86IGJvb2xlYW47XG59XG5cbi8qKiBIdWdnaW5nRmFjZSByZXBvc2l0b3J5ICovXG5jb25zdCBIRl9SRVBPID0gJ3J1di9ydXZsdHJhJztcbmNvbnN0IEhGX0JBU0VfVVJMID0gYGh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vJHtIRl9SRVBPfS9yZXNvbHZlL21haW5gO1xuXG4vKiogQXZhaWxhYmxlIFJ1dkxUUkEgbW9kZWxzICovXG5leHBvcnQgY29uc3QgUlVWTFRSQV9NT0RFTFM6IFJlY29yZDxzdHJpbmcsIE1vZGVsSW5mbz4gPSB7XG4gICdjbGF1ZGUtY29kZSc6IHtcbiAgICBpZDogJ2NsYXVkZS1jb2RlJyxcbiAgICBuYW1lOiAnUnV2TFRSQSBDbGF1ZGUgQ29kZScsXG4gICAgZmlsZW5hbWU6ICdydXZsdHJhLWNsYXVkZS1jb2RlLTAuNWItcTRfa19tLmdndWYnLFxuICAgIHNpemVCeXRlczogMzk4XzAwMF8wMDAsXG4gICAgc2l6ZTogJzM5OCBNQicsXG4gICAgcGFyYW1ldGVyczogJzAuNUInLFxuICAgIHVzZUNhc2U6ICdDbGF1ZGUgQ29kZSB3b3JrZmxvd3MsIGFnZW50aWMgY29kaW5nJyxcbiAgICBxdWFudGl6YXRpb246ICdRNF9LX00nLFxuICAgIGNvbnRleHRMZW5ndGg6IDQwOTYsXG4gICAgdXJsOiBgJHtIRl9CQVNFX1VSTH0vcnV2bHRyYS1jbGF1ZGUtY29kZS0wLjViLXE0X2tfbS5nZ3VmYCxcbiAgfSxcbiAgJ3NtYWxsJzoge1xuICAgIGlkOiAnc21hbGwnLFxuICAgIG5hbWU6ICdSdXZMVFJBIFNtYWxsJyxcbiAgICBmaWxlbmFtZTogJ3J1dmx0cmEtc21hbGwtMC41Yi1xNF9rX20uZ2d1ZicsXG4gICAgc2l6ZUJ5dGVzOiAzOThfMDAwXzAwMCxcbiAgICBzaXplOiAnMzk4IE1CJyxcbiAgICBwYXJhbWV0ZXJzOiAnMC41QicsXG4gICAgdXNlQ2FzZTogJ0VkZ2UgZGV2aWNlcywgSW9ULCByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMnLFxuICAgIHF1YW50aXphdGlvbjogJ1E0X0tfTScsXG4gICAgY29udGV4dExlbmd0aDogNDA5NixcbiAgICB1cmw6IGAke0hGX0JBU0VfVVJMfS9ydXZsdHJhLXNtYWxsLTAuNWItcTRfa19tLmdndWZgLFxuICB9LFxuICAnbWVkaXVtJzoge1xuICAgIGlkOiAnbWVkaXVtJyxcbiAgICBuYW1lOiAnUnV2TFRSQSBNZWRpdW0nLFxuICAgIGZpbGVuYW1lOiAncnV2bHRyYS1tZWRpdW0tMS4xYi1xNF9rX20uZ2d1ZicsXG4gICAgc2l6ZUJ5dGVzOiA2NjlfMDAwXzAwMCxcbiAgICBzaXplOiAnNjY5IE1CJyxcbiAgICBwYXJhbWV0ZXJzOiAnMS4xQicsXG4gICAgdXNlQ2FzZTogJ0dlbmVyYWwgcHVycG9zZSwgYmFsYW5jZWQgcGVyZm9ybWFuY2UnLFxuICAgIHF1YW50aXphdGlvbjogJ1E0X0tfTScsXG4gICAgY29udGV4dExlbmd0aDogODE5MixcbiAgICB1cmw6IGAke0hGX0JBU0VfVVJMfS9ydXZsdHJhLW1lZGl1bS0xLjFiLXE0X2tfbS5nZ3VmYCxcbiAgfSxcbn07XG5cbi8qKiBNb2RlbCBhbGlhc2VzIGZvciBjb252ZW5pZW5jZSAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX0FMSUFTRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdjYyc6ICdjbGF1ZGUtY29kZScsXG4gICdjbGF1ZGVjb2RlJzogJ2NsYXVkZS1jb2RlJyxcbiAgJ2NsYXVkZSc6ICdjbGF1ZGUtY29kZScsXG4gICdzJzogJ3NtYWxsJyxcbiAgJ3NtJzogJ3NtYWxsJyxcbiAgJ20nOiAnbWVkaXVtJyxcbiAgJ21lZCc6ICdtZWRpdW0nLFxuICAnZGVmYXVsdCc6ICdjbGF1ZGUtY29kZScsXG59O1xuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBtb2RlbHMgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0TW9kZWxzRGlyKCk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVkaXIoKSwgJy5ydXZsbG0nLCAnbW9kZWxzJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBtb2RlbCBJRCBmcm9tIGFsaWFzIG9yIGRpcmVjdCBJRFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsSWQobW9kZWxJZE9yQWxpYXM6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBub3JtYWxpemVkID0gbW9kZWxJZE9yQWxpYXMudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgLy8gRGlyZWN0IG1hdGNoXG4gIGlmIChSVVZMVFJBX01PREVMU1tub3JtYWxpemVkXSkge1xuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgLy8gQWxpYXMgbWF0Y2hcbiAgaWYgKE1PREVMX0FMSUFTRVNbbm9ybWFsaXplZF0pIHtcbiAgICByZXR1cm4gTU9ERUxfQUxJQVNFU1tub3JtYWxpemVkXTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdldCBtb2RlbCBpbmZvIGJ5IElEIG9yIGFsaWFzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbEluZm8obW9kZWxJZE9yQWxpYXM6IHN0cmluZyk6IE1vZGVsSW5mbyB8IG51bGwge1xuICBjb25zdCBpZCA9IHJlc29sdmVNb2RlbElkKG1vZGVsSWRPckFsaWFzKTtcbiAgcmV0dXJuIGlkID8gUlVWTFRSQV9NT0RFTFNbaWRdIDogbnVsbDtcbn1cblxuLyoqXG4gKiBMaXN0IGFsbCBhdmFpbGFibGUgbW9kZWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0TW9kZWxzKCk6IE1vZGVsSW5mb1tdIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoUlVWTFRSQV9NT0RFTFMpO1xufVxuXG4vKipcbiAqIE1vZGVsIGRvd25sb2FkZXIgZm9yIFJ1dkxUUkEgR0dVRiBtb2RlbHNcbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGVsRG93bmxvYWRlciB7XG4gIHByaXZhdGUgbW9kZWxzRGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobW9kZWxzRGlyPzogc3RyaW5nKSB7XG4gICAgdGhpcy5tb2RlbHNEaXIgPSBtb2RlbHNEaXIgfHwgZ2V0RGVmYXVsdE1vZGVsc0RpcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcGF0aCB3aGVyZSBhIG1vZGVsIHdvdWxkIGJlIHNhdmVkXG4gICAqL1xuICBnZXRNb2RlbFBhdGgobW9kZWxJZE9yQWxpYXM6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IG1vZGVsID0gZ2V0TW9kZWxJbmZvKG1vZGVsSWRPckFsaWFzKTtcbiAgICBpZiAoIW1vZGVsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gam9pbih0aGlzLm1vZGVsc0RpciwgbW9kZWwuZmlsZW5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbW9kZWwgaXMgYWxyZWFkeSBkb3dubG9hZGVkXG4gICAqL1xuICBpc0Rvd25sb2FkZWQobW9kZWxJZE9yQWxpYXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldE1vZGVsUGF0aChtb2RlbElkT3JBbGlhcyk7XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoIWV4aXN0c1N5bmMocGF0aCkpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFZlcmlmeSBzaXplIG1hdGNoZXMgZXhwZWN0ZWRcbiAgICBjb25zdCBtb2RlbCA9IGdldE1vZGVsSW5mbyhtb2RlbElkT3JBbGlhcyk7XG4gICAgaWYgKCFtb2RlbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdHMgPSBzdGF0U3luYyhwYXRoKTtcbiAgICAvLyBBbGxvdyA1JSB2YXJpYW5jZSBmb3Igc2l6ZSBjaGVja1xuICAgIGNvbnN0IG1pblNpemUgPSBtb2RlbC5zaXplQnl0ZXMgKiAwLjk1O1xuICAgIHJldHVybiBzdGF0cy5zaXplID49IG1pblNpemU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRvd25sb2FkIHN0YXR1cyBmb3IgYWxsIG1vZGVsc1xuICAgKi9cbiAgZ2V0U3RhdHVzKCk6IHsgbW9kZWw6IE1vZGVsSW5mbzsgZG93bmxvYWRlZDogYm9vbGVhbjsgcGF0aDogc3RyaW5nIH1bXSB7XG4gICAgcmV0dXJuIGxpc3RNb2RlbHMoKS5tYXAobW9kZWwgPT4gKHtcbiAgICAgIG1vZGVsLFxuICAgICAgZG93bmxvYWRlZDogdGhpcy5pc0Rvd25sb2FkZWQobW9kZWwuaWQpLFxuICAgICAgcGF0aDogdGhpcy5nZXRNb2RlbFBhdGgobW9kZWwuaWQpISxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWQgYSBtb2RlbCBmcm9tIEh1Z2dpbmdGYWNlXG4gICAqL1xuICBhc3luYyBkb3dubG9hZChcbiAgICBtb2RlbElkT3JBbGlhczogc3RyaW5nLFxuICAgIG9wdGlvbnM6IERvd25sb2FkT3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbW9kZWwgPSBnZXRNb2RlbEluZm8obW9kZWxJZE9yQWxpYXMpO1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IGxpc3RNb2RlbHMoKS5tYXAobSA9PiBtLmlkKS5qb2luKCcsICcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5rbm93biBtb2RlbDogJHttb2RlbElkT3JBbGlhc30uIEF2YWlsYWJsZSBtb2RlbHM6ICR7YXZhaWxhYmxlfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVzdERpciA9IG9wdGlvbnMubW9kZWxzRGlyIHx8IHRoaXMubW9kZWxzRGlyO1xuICAgIGNvbnN0IGRlc3RQYXRoID0gam9pbihkZXN0RGlyLCBtb2RlbC5maWxlbmFtZSk7XG5cbiAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRvd25sb2FkZWRcbiAgICBpZiAoIW9wdGlvbnMuZm9yY2UgJiYgdGhpcy5pc0Rvd25sb2FkZWQobW9kZWwuaWQpKSB7XG4gICAgICByZXR1cm4gZGVzdFBhdGg7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBpZiAoIWV4aXN0c1N5bmMoZGVzdERpcikpIHtcbiAgICAgIG1rZGlyU3luYyhkZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBEb3dubG9hZCB3aXRoIHByb2dyZXNzIHRyYWNraW5nXG4gICAgY29uc3QgdGVtcFBhdGggPSBgJHtkZXN0UGF0aH0udG1wYDtcbiAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgbGFzdFByb2dyZXNzVGltZSA9IHN0YXJ0VGltZTtcbiAgICBsZXQgbGFzdERvd25sb2FkZWQgPSAwO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBkeW5hbWljIGltcG9ydCBmb3Igbm9kZS1mZXRjaCBpZiBuYXRpdmUgZmV0Y2ggbm90IGF2YWlsYWJsZVxuICAgICAgY29uc3QgZmV0Y2hGbiA9IGdsb2JhbFRoaXMuZmV0Y2ggfHwgKGF3YWl0IGltcG9ydCgnbm9kZTpodHRwcycpKS5kZWZhdWx0O1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1vZGVsLnVybCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ1VzZXItQWdlbnQnOiAnUnV2TExNLzIuMy4wJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IHBhcnNlSW50KFxuICAgICAgICByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSB8fCBTdHJpbmcobW9kZWwuc2l6ZUJ5dGVzKVxuICAgICAgKTtcblxuICAgICAgLy8gQ3JlYXRlIHdyaXRlIHN0cmVhbVxuICAgICAgY29uc3QgZmlsZVN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKHRlbXBQYXRoKTtcbiAgICAgIGxldCBkb3dubG9hZGVkID0gMDtcblxuICAgICAgLy8gU3RyZWFtIHdpdGggcHJvZ3Jlc3NcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpO1xuICAgICAgaWYgKCFyZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNwb25zZSBib2R5IGlzIG5vdCByZWFkYWJsZScpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICBpZiAoZG9uZSkgYnJlYWs7XG5cbiAgICAgICAgZG93bmxvYWRlZCArPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIGZpbGVTdHJlYW0ud3JpdGUodmFsdWUpO1xuXG4gICAgICAgIC8vIFJlcG9ydCBwcm9ncmVzc1xuICAgICAgICBpZiAob3B0aW9ucy5vblByb2dyZXNzKSB7XG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkID0gKG5vdyAtIGxhc3RQcm9ncmVzc1RpbWUpIC8gMTAwMDtcbiAgICAgICAgICBjb25zdCBieXRlc1RoaXNJbnRlcnZhbCA9IGRvd25sb2FkZWQgLSBsYXN0RG93bmxvYWRlZDtcbiAgICAgICAgICBjb25zdCBzcGVlZEJwcyA9IGVsYXBzZWQgPiAwID8gYnl0ZXNUaGlzSW50ZXJ2YWwgLyBlbGFwc2VkIDogMDtcbiAgICAgICAgICBjb25zdCByZW1haW5pbmcgPSBjb250ZW50TGVuZ3RoIC0gZG93bmxvYWRlZDtcbiAgICAgICAgICBjb25zdCBldGFTZWNvbmRzID0gc3BlZWRCcHMgPiAwID8gcmVtYWluaW5nIC8gc3BlZWRCcHMgOiAwO1xuXG4gICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHtcbiAgICAgICAgICAgIG1vZGVsSWQ6IG1vZGVsLmlkLFxuICAgICAgICAgICAgZG93bmxvYWRlZCxcbiAgICAgICAgICAgIHRvdGFsOiBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgICAgcGVyY2VudDogTWF0aC5yb3VuZCgoZG93bmxvYWRlZCAvIGNvbnRlbnRMZW5ndGgpICogMTAwKSxcbiAgICAgICAgICAgIHNwZWVkQnBzLFxuICAgICAgICAgICAgZXRhU2Vjb25kcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxhc3RQcm9ncmVzc1RpbWUgPSBub3c7XG4gICAgICAgICAgbGFzdERvd25sb2FkZWQgPSBkb3dubG9hZGVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZpbGVTdHJlYW0uZW5kKCk7XG5cbiAgICAgIC8vIFdhaXQgZm9yIGZpbGUgdG8gYmUgZnVsbHkgd3JpdHRlblxuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBmaWxlU3RyZWFtLm9uKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICAgICAgZmlsZVN0cmVhbS5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1vdmUgdGVtcCBmaWxlIHRvIGZpbmFsIGRlc3RpbmF0aW9uXG4gICAgICBpZiAoZXhpc3RzU3luYyhkZXN0UGF0aCkpIHtcbiAgICAgICAgdW5saW5rU3luYyhkZXN0UGF0aCk7XG4gICAgICB9XG4gICAgICByZW5hbWVTeW5jKHRlbXBQYXRoLCBkZXN0UGF0aCk7XG5cbiAgICAgIHJldHVybiBkZXN0UGF0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ2xlYW4gdXAgdGVtcCBmaWxlIG9uIGVycm9yXG4gICAgICBpZiAoZXhpc3RzU3luYyh0ZW1wUGF0aCkpIHtcbiAgICAgICAgdHJ5IHsgdW5saW5rU3luYyh0ZW1wUGF0aCk7IH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZCBhbGwgYXZhaWxhYmxlIG1vZGVsc1xuICAgKi9cbiAgYXN5bmMgZG93bmxvYWRBbGwob3B0aW9uczogRG93bmxvYWRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgcGF0aHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiBsaXN0TW9kZWxzKCkpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBhd2FpdCB0aGlzLmRvd25sb2FkKG1vZGVsLmlkLCBvcHRpb25zKTtcbiAgICAgIHBhdGhzLnB1c2gocGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBwYXRocztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSBkb3dubG9hZGVkIG1vZGVsXG4gICAqL1xuICBkZWxldGUobW9kZWxJZE9yQWxpYXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldE1vZGVsUGF0aChtb2RlbElkT3JBbGlhcyk7XG4gICAgaWYgKCFwYXRoIHx8ICFleGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHVubGlua1N5bmMocGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGFsbCBkb3dubG9hZGVkIG1vZGVsc1xuICAgKi9cbiAgZGVsZXRlQWxsKCk6IG51bWJlciB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIGxpc3RNb2RlbHMoKSkge1xuICAgICAgaWYgKHRoaXMuZGVsZXRlKG1vZGVsLmlkKSkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kZWxEb3dubG9hZGVyO1xuIl19
@@ -64,10 +64,10 @@ interface NativeMemoryResult {
64
64
  interface NativeStats {
65
65
  total_queries: number;
66
66
  memory_nodes: number;
67
- training_steps: number;
67
+ patterns_learned: number;
68
68
  avg_latency_ms: number;
69
- total_insertions: number;
70
- total_searches: number;
69
+ cache_hit_rate: number;
70
+ router_accuracy: number;
71
71
  }
72
72
  interface NativeSimdOps {
73
73
  dotProduct(a: number[], b: number[]): number;
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/native.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/native.ts"],"names":[],"mappings":"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"}
@@ -69,4 +69,4 @@ export function hasSimdSupport() {
69
69
  const mod = loadNativeModule();
70
70
  return mod?.hasSimdSupport() ?? false;
71
71
  }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixnQ0FBZ0M7QUFDaEMsSUFBSSxZQUFZLEdBQXdCLElBQUksQ0FBQztBQThGN0Msa0NBQWtDO0FBQ2xDLE1BQU0saUJBQWlCLEdBQTJCO0lBQ2hELFlBQVksRUFBRSw2QkFBNkI7SUFDM0MsY0FBYyxFQUFFLCtCQUErQjtJQUMvQyxXQUFXLEVBQUUsZ0NBQWdDO0lBQzdDLGFBQWEsRUFBRSxrQ0FBa0M7SUFDakQsV0FBVyxFQUFFLGlDQUFpQztDQUMvQyxDQUFDO0FBRUYsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMxQixPQUFPLEdBQUcsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLGdCQUFnQjtJQUN2QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsMkNBQTJDO1FBQzNDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxNQUFNLFFBQVEsR0FBRztRQUNmLG9DQUFvQztRQUNwQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzFCLGdEQUFnRDtRQUNoRCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELDJDQUEyQztRQUMzQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDcEQsQ0FBQztJQUVGLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsT0FBTyxFQUFxQixDQUFDO1lBQ3pDLG9FQUFvRTtZQUNwRSxZQUFZLEdBQUc7Z0JBQ2IsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFlBQWE7Z0JBQ25ELGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYztnQkFDbEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO2dCQUNwQixjQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWM7YUFDbkMsQ0FBQztZQUNGLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCwyQkFBMkI7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsMENBQTBDO0FBQzFDLE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU8sZ0JBQWdCLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU87SUFDckIsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUMvQixPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFDdEMsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjO0lBQzVCLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDL0IsT0FBTyxHQUFHLEVBQUUsY0FBYyxFQUFFLElBQUksS0FBSyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5hdGl2ZSBiaW5kaW5ncyBsb2FkZXIgZm9yIFJ1dkxMTVxuICpcbiAqIEF1dG9tYXRpY2FsbHkgbG9hZHMgdGhlIGNvcnJlY3QgbmF0aXZlIGJpbmFyeSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKi9cblxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuXG4vLyBUcnkgdG8gbG9hZCB0aGUgbmF0aXZlIG1vZHVsZVxubGV0IG5hdGl2ZU1vZHVsZTogTmF0aXZlUnV2TExNIHwgbnVsbCA9IG51bGw7XG5cbmludGVyZmFjZSBOYXRpdmVSdXZMTE0ge1xuICAvLyBOYXRpdmUgZXhwb3J0cyBSdXZMbG1FbmdpbmUgKGNhbWVsQ2FzZSksIHdlIG5vcm1hbGl6ZSB0byBSdXZMTE1FbmdpbmVcbiAgUnV2TExNRW5naW5lOiBuZXcgKGNvbmZpZz86IE5hdGl2ZUNvbmZpZykgPT4gTmF0aXZlRW5naW5lO1xuICBTaW1kT3BlcmF0aW9uczogbmV3ICgpID0+IE5hdGl2ZVNpbWRPcHM7XG4gIHZlcnNpb246ICgpID0+IHN0cmluZztcbiAgaGFzU2ltZFN1cHBvcnQ6ICgpID0+IGJvb2xlYW47XG59XG5cbi8vIFJhdyBuYXRpdmUgbW9kdWxlIGludGVyZmFjZSAoYWN0dWFsIGV4cG9ydCBuYW1lcylcbmludGVyZmFjZSBSYXdOYXRpdmVNb2R1bGUge1xuICBSdXZMbG1FbmdpbmU/OiBuZXcgKGNvbmZpZz86IE5hdGl2ZUNvbmZpZykgPT4gTmF0aXZlRW5naW5lO1xuICBSdXZMTE1FbmdpbmU/OiBuZXcgKGNvbmZpZz86IE5hdGl2ZUNvbmZpZykgPT4gTmF0aXZlRW5naW5lO1xuICBTaW1kT3BlcmF0aW9uczogbmV3ICgpID0+IE5hdGl2ZVNpbWRPcHM7XG4gIHZlcnNpb246ICgpID0+IHN0cmluZztcbiAgaGFzU2ltZFN1cHBvcnQ6ICgpID0+IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBOYXRpdmVDb25maWcge1xuICBlbWJlZGRpbmdfZGltPzogbnVtYmVyO1xuICByb3V0ZXJfaGlkZGVuX2RpbT86IG51bWJlcjtcbiAgaG5zd19tPzogbnVtYmVyO1xuICBobnN3X2VmX2NvbnN0cnVjdGlvbj86IG51bWJlcjtcbiAgaG5zd19lZl9zZWFyY2g/OiBudW1iZXI7XG4gIGxlYXJuaW5nX2VuYWJsZWQ/OiBib29sZWFuO1xuICBxdWFsaXR5X3RocmVzaG9sZD86IG51bWJlcjtcbiAgZXdjX2xhbWJkYT86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZUVuZ2luZSB7XG4gIHF1ZXJ5KHRleHQ6IHN0cmluZywgY29uZmlnPzogTmF0aXZlR2VuQ29uZmlnKTogTmF0aXZlUXVlcnlSZXNwb25zZTtcbiAgZ2VuZXJhdGUocHJvbXB0OiBzdHJpbmcsIGNvbmZpZz86IE5hdGl2ZUdlbkNvbmZpZyk6IHN0cmluZztcbiAgcm91dGUodGV4dDogc3RyaW5nKTogTmF0aXZlUm91dGluZ0RlY2lzaW9uO1xuICBzZWFyY2hNZW1vcnkodGV4dDogc3RyaW5nLCBrPzogbnVtYmVyKTogTmF0aXZlTWVtb3J5UmVzdWx0W107XG4gIGFkZE1lbW9yeShjb250ZW50OiBzdHJpbmcsIG1ldGFkYXRhPzogc3RyaW5nKTogbnVtYmVyO1xuICBmZWVkYmFjayhyZXF1ZXN0SWQ6IHN0cmluZywgcmF0aW5nOiBudW1iZXIsIGNvcnJlY3Rpb24/OiBzdHJpbmcpOiBib29sZWFuO1xuICBzdGF0cygpOiBOYXRpdmVTdGF0cztcbiAgZm9yY2VMZWFybigpOiBzdHJpbmc7XG4gIGVtYmVkKHRleHQ6IHN0cmluZyk6IG51bWJlcltdO1xuICBzaW1pbGFyaXR5KHRleHQxOiBzdHJpbmcsIHRleHQyOiBzdHJpbmcpOiBudW1iZXI7XG4gIGhhc1NpbWQoKTogYm9vbGVhbjtcbiAgc2ltZENhcGFiaWxpdGllcygpOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZUdlbkNvbmZpZyB7XG4gIG1heF90b2tlbnM/OiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICB0b3BfcD86IG51bWJlcjtcbiAgdG9wX2s/OiBudW1iZXI7XG4gIHJlcGV0aXRpb25fcGVuYWx0eT86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZVF1ZXJ5UmVzcG9uc2Uge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgbW9kZWw6IHN0cmluZztcbiAgY29udGV4dF9zaXplOiBudW1iZXI7XG4gIGxhdGVuY3lfbXM6IG51bWJlcjtcbiAgcmVxdWVzdF9pZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgTmF0aXZlUm91dGluZ0RlY2lzaW9uIHtcbiAgbW9kZWw6IHN0cmluZztcbiAgY29udGV4dF9zaXplOiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlOiBudW1iZXI7XG4gIHRvcF9wOiBudW1iZXI7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZU1lbW9yeVJlc3VsdCB7XG4gIGlkOiBudW1iZXI7XG4gIHNjb3JlOiBudW1iZXI7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgbWV0YWRhdGE6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZVN0YXRzIHtcbiAgdG90YWxfcXVlcmllczogbnVtYmVyO1xuICBtZW1vcnlfbm9kZXM6IG51bWJlcjtcbiAgdHJhaW5pbmdfc3RlcHM6IG51bWJlcjtcbiAgYXZnX2xhdGVuY3lfbXM6IG51bWJlcjtcbiAgdG90YWxfaW5zZXJ0aW9uczogbnVtYmVyO1xuICB0b3RhbF9zZWFyY2hlczogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgTmF0aXZlU2ltZE9wcyB7XG4gIGRvdFByb2R1Y3QoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyO1xuICBjb3NpbmVTaW1pbGFyaXR5KGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSk6IG51bWJlcjtcbiAgbDJEaXN0YW5jZShhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pOiBudW1iZXI7XG4gIG1hdHZlYyhtYXRyaXg6IG51bWJlcltdW10sIHZlY3RvcjogbnVtYmVyW10pOiBudW1iZXJbXTtcbiAgc29mdG1heChpbnB1dDogbnVtYmVyW10pOiBudW1iZXJbXTtcbn1cblxuLy8gUGxhdGZvcm0tc3BlY2lmaWMgcGFja2FnZSBuYW1lc1xuY29uc3QgUExBVEZPUk1fUEFDS0FHRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdkYXJ3aW4teDY0JzogJ0BydXZlY3Rvci9ydXZsbG0tZGFyd2luLXg2NCcsXG4gICdkYXJ3aW4tYXJtNjQnOiAnQHJ1dmVjdG9yL3J1dmxsbS1kYXJ3aW4tYXJtNjQnLFxuICAnbGludXgteDY0JzogJ0BydXZlY3Rvci9ydXZsbG0tbGludXgteDY0LWdudScsXG4gICdsaW51eC1hcm02NCc6ICdAcnV2ZWN0b3IvcnV2bGxtLWxpbnV4LWFybTY0LWdudScsXG4gICd3aW4zMi14NjQnOiAnQHJ1dmVjdG9yL3J1dmxsbS13aW4zMi14NjQtbXN2YycsXG59O1xuXG5mdW5jdGlvbiBnZXRQbGF0Zm9ybUtleSgpOiBzdHJpbmcge1xuICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm07XG4gIGNvbnN0IGFyY2ggPSBwcm9jZXNzLmFyY2g7XG4gIHJldHVybiBgJHtwbGF0Zm9ybX0tJHthcmNofWA7XG59XG5cbmZ1bmN0aW9uIGxvYWROYXRpdmVNb2R1bGUoKTogTmF0aXZlUnV2TExNIHwgbnVsbCB7XG4gIGlmIChuYXRpdmVNb2R1bGUpIHtcbiAgICByZXR1cm4gbmF0aXZlTW9kdWxlO1xuICB9XG5cbiAgY29uc3QgcGxhdGZvcm1LZXkgPSBnZXRQbGF0Zm9ybUtleSgpO1xuICBjb25zdCBwYWNrYWdlTmFtZSA9IFBMQVRGT1JNX1BBQ0tBR0VTW3BsYXRmb3JtS2V5XTtcblxuICBpZiAoIXBhY2thZ2VOYW1lKSB7XG4gICAgLy8gU2lsZW50bHkgZmFpbCAtIEpTIGZhbGxiYWNrIHdpbGwgYmUgdXNlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gVHJ5IGxvYWRpbmcgZnJvbSBvcHRpb25hbCBkZXBlbmRlbmNpZXNcbiAgY29uc3QgYXR0ZW1wdHMgPSBbXG4gICAgLy8gVHJ5IHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBwYWNrYWdlXG4gICAgKCkgPT4gcmVxdWlyZShwYWNrYWdlTmFtZSksXG4gICAgLy8gVHJ5IGxvYWRpbmcgZnJvbSBsb2NhbCAubm9kZSBmaWxlIChDSlMgYnVpbGQpXG4gICAgKCkgPT4gcmVxdWlyZShqb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ3J1dmxsbS5ub2RlJykpLFxuICAgIC8vIFRyeSBsb2FkaW5nIGZyb20gbG9jYWwgLm5vZGUgZmlsZSAocm9vdClcbiAgICAoKSA9PiByZXF1aXJlKGpvaW4oX19kaXJuYW1lLCAnLi4nLCAncnV2bGxtLm5vZGUnKSksXG4gIF07XG5cbiAgZm9yIChjb25zdCBhdHRlbXB0IG9mIGF0dGVtcHRzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IGF0dGVtcHQoKSBhcyBSYXdOYXRpdmVNb2R1bGU7XG4gICAgICAvLyBOb3JtYWxpemU6IG5hdGl2ZSBleHBvcnRzIFJ1dkxsbUVuZ2luZSwgd2UgZXhwb3NlIGFzIFJ1dkxMTUVuZ2luZVxuICAgICAgbmF0aXZlTW9kdWxlID0ge1xuICAgICAgICBSdXZMTE1FbmdpbmU6IHJhdy5SdXZMTE1FbmdpbmUgPz8gcmF3LlJ1dkxsbUVuZ2luZSEsXG4gICAgICAgIFNpbWRPcGVyYXRpb25zOiByYXcuU2ltZE9wZXJhdGlvbnMsXG4gICAgICAgIHZlcnNpb246IHJhdy52ZXJzaW9uLFxuICAgICAgICBoYXNTaW1kU3VwcG9ydDogcmF3Lmhhc1NpbWRTdXBwb3J0LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBuYXRpdmVNb2R1bGU7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDb250aW51ZSB0byBuZXh0IGF0dGVtcHRcbiAgICB9XG4gIH1cblxuICAvLyBTaWxlbnRseSBmYWxsIGJhY2sgdG8gSlMgaW1wbGVtZW50YXRpb25cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEV4cG9ydCBmdW5jdGlvbnMgdG8gZ2V0IG5hdGl2ZSBiaW5kaW5nc1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hdGl2ZU1vZHVsZSgpOiBOYXRpdmVSdXZMTE0gfCBudWxsIHtcbiAgcmV0dXJuIGxvYWROYXRpdmVNb2R1bGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb24oKTogc3RyaW5nIHtcbiAgY29uc3QgbW9kID0gbG9hZE5hdGl2ZU1vZHVsZSgpO1xuICByZXR1cm4gbW9kPy52ZXJzaW9uKCkgPz8gJzAuMS4wLWpzJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1NpbWRTdXBwb3J0KCk6IGJvb2xlYW4ge1xuICBjb25zdCBtb2QgPSBsb2FkTmF0aXZlTW9kdWxlKCk7XG4gIHJldHVybiBtb2Q/Lmhhc1NpbWRTdXBwb3J0KCkgPz8gZmFsc2U7XG59XG5cbi8vIEV4cG9ydCB0eXBlcyBmb3IgaW50ZXJuYWwgdXNlXG5leHBvcnQgdHlwZSB7XG4gIE5hdGl2ZVJ1dkxMTSxcbiAgTmF0aXZlQ29uZmlnLFxuICBOYXRpdmVFbmdpbmUsXG4gIE5hdGl2ZUdlbkNvbmZpZyxcbiAgTmF0aXZlUXVlcnlSZXNwb25zZSxcbiAgTmF0aXZlUm91dGluZ0RlY2lzaW9uLFxuICBOYXRpdmVNZW1vcnlSZXN1bHQsXG4gIE5hdGl2ZVN0YXRzLFxuICBOYXRpdmVTaW1kT3BzLFxufTtcbiJdfQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixnQ0FBZ0M7QUFDaEMsSUFBSSxZQUFZLEdBQXdCLElBQUksQ0FBQztBQThGN0Msa0NBQWtDO0FBQ2xDLE1BQU0saUJBQWlCLEdBQTJCO0lBQ2hELFlBQVksRUFBRSw2QkFBNkI7SUFDM0MsY0FBYyxFQUFFLCtCQUErQjtJQUMvQyxXQUFXLEVBQUUsZ0NBQWdDO0lBQzdDLGFBQWEsRUFBRSxrQ0FBa0M7SUFDakQsV0FBVyxFQUFFLGlDQUFpQztDQUMvQyxDQUFDO0FBRUYsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMxQixPQUFPLEdBQUcsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLGdCQUFnQjtJQUN2QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsMkNBQTJDO1FBQzNDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxNQUFNLFFBQVEsR0FBRztRQUNmLG9DQUFvQztRQUNwQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzFCLGdEQUFnRDtRQUNoRCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELDJDQUEyQztRQUMzQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDcEQsQ0FBQztJQUVGLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsT0FBTyxFQUFxQixDQUFDO1lBQ3pDLG9FQUFvRTtZQUNwRSxZQUFZLEdBQUc7Z0JBQ2IsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFlBQWE7Z0JBQ25ELGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYztnQkFDbEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO2dCQUNwQixjQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWM7YUFDbkMsQ0FBQztZQUNGLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCwyQkFBMkI7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsMENBQTBDO0FBQzFDLE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU8sZ0JBQWdCLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU87SUFDckIsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUMvQixPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFDdEMsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjO0lBQzVCLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDL0IsT0FBTyxHQUFHLEVBQUUsY0FBYyxFQUFFLElBQUksS0FBSyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5hdGl2ZSBiaW5kaW5ncyBsb2FkZXIgZm9yIFJ1dkxMTVxuICpcbiAqIEF1dG9tYXRpY2FsbHkgbG9hZHMgdGhlIGNvcnJlY3QgbmF0aXZlIGJpbmFyeSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKi9cblxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuXG4vLyBUcnkgdG8gbG9hZCB0aGUgbmF0aXZlIG1vZHVsZVxubGV0IG5hdGl2ZU1vZHVsZTogTmF0aXZlUnV2TExNIHwgbnVsbCA9IG51bGw7XG5cbmludGVyZmFjZSBOYXRpdmVSdXZMTE0ge1xuICAvLyBOYXRpdmUgZXhwb3J0cyBSdXZMbG1FbmdpbmUgKGNhbWVsQ2FzZSksIHdlIG5vcm1hbGl6ZSB0byBSdXZMTE1FbmdpbmVcbiAgUnV2TExNRW5naW5lOiBuZXcgKGNvbmZpZz86IE5hdGl2ZUNvbmZpZykgPT4gTmF0aXZlRW5naW5lO1xuICBTaW1kT3BlcmF0aW9uczogbmV3ICgpID0+IE5hdGl2ZVNpbWRPcHM7XG4gIHZlcnNpb246ICgpID0+IHN0cmluZztcbiAgaGFzU2ltZFN1cHBvcnQ6ICgpID0+IGJvb2xlYW47XG59XG5cbi8vIFJhdyBuYXRpdmUgbW9kdWxlIGludGVyZmFjZSAoYWN0dWFsIGV4cG9ydCBuYW1lcylcbmludGVyZmFjZSBSYXdOYXRpdmVNb2R1bGUge1xuICBSdXZMbG1FbmdpbmU/OiBuZXcgKGNvbmZpZz86IE5hdGl2ZUNvbmZpZykgPT4gTmF0aXZlRW5naW5lO1xuICBSdXZMTE1FbmdpbmU/OiBuZXcgKGNvbmZpZz86IE5hdGl2ZUNvbmZpZykgPT4gTmF0aXZlRW5naW5lO1xuICBTaW1kT3BlcmF0aW9uczogbmV3ICgpID0+IE5hdGl2ZVNpbWRPcHM7XG4gIHZlcnNpb246ICgpID0+IHN0cmluZztcbiAgaGFzU2ltZFN1cHBvcnQ6ICgpID0+IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBOYXRpdmVDb25maWcge1xuICBlbWJlZGRpbmdfZGltPzogbnVtYmVyO1xuICByb3V0ZXJfaGlkZGVuX2RpbT86IG51bWJlcjtcbiAgaG5zd19tPzogbnVtYmVyO1xuICBobnN3X2VmX2NvbnN0cnVjdGlvbj86IG51bWJlcjtcbiAgaG5zd19lZl9zZWFyY2g/OiBudW1iZXI7XG4gIGxlYXJuaW5nX2VuYWJsZWQ/OiBib29sZWFuO1xuICBxdWFsaXR5X3RocmVzaG9sZD86IG51bWJlcjtcbiAgZXdjX2xhbWJkYT86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZUVuZ2luZSB7XG4gIHF1ZXJ5KHRleHQ6IHN0cmluZywgY29uZmlnPzogTmF0aXZlR2VuQ29uZmlnKTogTmF0aXZlUXVlcnlSZXNwb25zZTtcbiAgZ2VuZXJhdGUocHJvbXB0OiBzdHJpbmcsIGNvbmZpZz86IE5hdGl2ZUdlbkNvbmZpZyk6IHN0cmluZztcbiAgcm91dGUodGV4dDogc3RyaW5nKTogTmF0aXZlUm91dGluZ0RlY2lzaW9uO1xuICBzZWFyY2hNZW1vcnkodGV4dDogc3RyaW5nLCBrPzogbnVtYmVyKTogTmF0aXZlTWVtb3J5UmVzdWx0W107XG4gIGFkZE1lbW9yeShjb250ZW50OiBzdHJpbmcsIG1ldGFkYXRhPzogc3RyaW5nKTogbnVtYmVyO1xuICBmZWVkYmFjayhyZXF1ZXN0SWQ6IHN0cmluZywgcmF0aW5nOiBudW1iZXIsIGNvcnJlY3Rpb24/OiBzdHJpbmcpOiBib29sZWFuO1xuICBzdGF0cygpOiBOYXRpdmVTdGF0cztcbiAgZm9yY2VMZWFybigpOiBzdHJpbmc7XG4gIGVtYmVkKHRleHQ6IHN0cmluZyk6IG51bWJlcltdO1xuICBzaW1pbGFyaXR5KHRleHQxOiBzdHJpbmcsIHRleHQyOiBzdHJpbmcpOiBudW1iZXI7XG4gIGhhc1NpbWQoKTogYm9vbGVhbjtcbiAgc2ltZENhcGFiaWxpdGllcygpOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZUdlbkNvbmZpZyB7XG4gIG1heF90b2tlbnM/OiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICB0b3BfcD86IG51bWJlcjtcbiAgdG9wX2s/OiBudW1iZXI7XG4gIHJlcGV0aXRpb25fcGVuYWx0eT86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZVF1ZXJ5UmVzcG9uc2Uge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgbW9kZWw6IHN0cmluZztcbiAgY29udGV4dF9zaXplOiBudW1iZXI7XG4gIGxhdGVuY3lfbXM6IG51bWJlcjtcbiAgcmVxdWVzdF9pZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgTmF0aXZlUm91dGluZ0RlY2lzaW9uIHtcbiAgbW9kZWw6IHN0cmluZztcbiAgY29udGV4dF9zaXplOiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlOiBudW1iZXI7XG4gIHRvcF9wOiBudW1iZXI7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZU1lbW9yeVJlc3VsdCB7XG4gIGlkOiBudW1iZXI7XG4gIHNjb3JlOiBudW1iZXI7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgbWV0YWRhdGE6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZVN0YXRzIHtcbiAgdG90YWxfcXVlcmllczogbnVtYmVyO1xuICBtZW1vcnlfbm9kZXM6IG51bWJlcjtcbiAgcGF0dGVybnNfbGVhcm5lZDogbnVtYmVyO1xuICBhdmdfbGF0ZW5jeV9tczogbnVtYmVyO1xuICBjYWNoZV9oaXRfcmF0ZTogbnVtYmVyO1xuICByb3V0ZXJfYWNjdXJhY3k6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZVNpbWRPcHMge1xuICBkb3RQcm9kdWN0KGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSk6IG51bWJlcjtcbiAgY29zaW5lU2ltaWxhcml0eShhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pOiBudW1iZXI7XG4gIGwyRGlzdGFuY2UoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyO1xuICBtYXR2ZWMobWF0cml4OiBudW1iZXJbXVtdLCB2ZWN0b3I6IG51bWJlcltdKTogbnVtYmVyW107XG4gIHNvZnRtYXgoaW5wdXQ6IG51bWJlcltdKTogbnVtYmVyW107XG59XG5cbi8vIFBsYXRmb3JtLXNwZWNpZmljIHBhY2thZ2UgbmFtZXNcbmNvbnN0IFBMQVRGT1JNX1BBQ0tBR0VTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnZGFyd2luLXg2NCc6ICdAcnV2ZWN0b3IvcnV2bGxtLWRhcndpbi14NjQnLFxuICAnZGFyd2luLWFybTY0JzogJ0BydXZlY3Rvci9ydXZsbG0tZGFyd2luLWFybTY0JyxcbiAgJ2xpbnV4LXg2NCc6ICdAcnV2ZWN0b3IvcnV2bGxtLWxpbnV4LXg2NC1nbnUnLFxuICAnbGludXgtYXJtNjQnOiAnQHJ1dmVjdG9yL3J1dmxsbS1saW51eC1hcm02NC1nbnUnLFxuICAnd2luMzIteDY0JzogJ0BydXZlY3Rvci9ydXZsbG0td2luMzIteDY0LW1zdmMnLFxufTtcblxuZnVuY3Rpb24gZ2V0UGxhdGZvcm1LZXkoKTogc3RyaW5nIHtcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtO1xuICBjb25zdCBhcmNoID0gcHJvY2Vzcy5hcmNoO1xuICByZXR1cm4gYCR7cGxhdGZvcm19LSR7YXJjaH1gO1xufVxuXG5mdW5jdGlvbiBsb2FkTmF0aXZlTW9kdWxlKCk6IE5hdGl2ZVJ1dkxMTSB8IG51bGwge1xuICBpZiAobmF0aXZlTW9kdWxlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZU1vZHVsZTtcbiAgfVxuXG4gIGNvbnN0IHBsYXRmb3JtS2V5ID0gZ2V0UGxhdGZvcm1LZXkoKTtcbiAgY29uc3QgcGFja2FnZU5hbWUgPSBQTEFURk9STV9QQUNLQUdFU1twbGF0Zm9ybUtleV07XG5cbiAgaWYgKCFwYWNrYWdlTmFtZSkge1xuICAgIC8vIFNpbGVudGx5IGZhaWwgLSBKUyBmYWxsYmFjayB3aWxsIGJlIHVzZWRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFRyeSBsb2FkaW5nIGZyb20gb3B0aW9uYWwgZGVwZW5kZW5jaWVzXG4gIGNvbnN0IGF0dGVtcHRzID0gW1xuICAgIC8vIFRyeSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgcGFja2FnZVxuICAgICgpID0+IHJlcXVpcmUocGFja2FnZU5hbWUpLFxuICAgIC8vIFRyeSBsb2FkaW5nIGZyb20gbG9jYWwgLm5vZGUgZmlsZSAoQ0pTIGJ1aWxkKVxuICAgICgpID0+IHJlcXVpcmUoam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdydXZsbG0ubm9kZScpKSxcbiAgICAvLyBUcnkgbG9hZGluZyBmcm9tIGxvY2FsIC5ub2RlIGZpbGUgKHJvb3QpXG4gICAgKCkgPT4gcmVxdWlyZShqb2luKF9fZGlybmFtZSwgJy4uJywgJ3J1dmxsbS5ub2RlJykpLFxuICBdO1xuXG4gIGZvciAoY29uc3QgYXR0ZW1wdCBvZiBhdHRlbXB0cykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXcgPSBhdHRlbXB0KCkgYXMgUmF3TmF0aXZlTW9kdWxlO1xuICAgICAgLy8gTm9ybWFsaXplOiBuYXRpdmUgZXhwb3J0cyBSdXZMbG1FbmdpbmUsIHdlIGV4cG9zZSBhcyBSdXZMTE1FbmdpbmVcbiAgICAgIG5hdGl2ZU1vZHVsZSA9IHtcbiAgICAgICAgUnV2TExNRW5naW5lOiByYXcuUnV2TExNRW5naW5lID8/IHJhdy5SdXZMbG1FbmdpbmUhLFxuICAgICAgICBTaW1kT3BlcmF0aW9uczogcmF3LlNpbWRPcGVyYXRpb25zLFxuICAgICAgICB2ZXJzaW9uOiByYXcudmVyc2lvbixcbiAgICAgICAgaGFzU2ltZFN1cHBvcnQ6IHJhdy5oYXNTaW1kU3VwcG9ydCxcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmF0aXZlTW9kdWxlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQ29udGludWUgdG8gbmV4dCBhdHRlbXB0XG4gICAgfVxuICB9XG5cbiAgLy8gU2lsZW50bHkgZmFsbCBiYWNrIHRvIEpTIGltcGxlbWVudGF0aW9uXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBFeHBvcnQgZnVuY3Rpb25zIHRvIGdldCBuYXRpdmUgYmluZGluZ3NcbmV4cG9ydCBmdW5jdGlvbiBnZXROYXRpdmVNb2R1bGUoKTogTmF0aXZlUnV2TExNIHwgbnVsbCB7XG4gIHJldHVybiBsb2FkTmF0aXZlTW9kdWxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gIGNvbnN0IG1vZCA9IGxvYWROYXRpdmVNb2R1bGUoKTtcbiAgcmV0dXJuIG1vZD8udmVyc2lvbigpID8/ICcwLjEuMC1qcyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTaW1kU3VwcG9ydCgpOiBib29sZWFuIHtcbiAgY29uc3QgbW9kID0gbG9hZE5hdGl2ZU1vZHVsZSgpO1xuICByZXR1cm4gbW9kPy5oYXNTaW1kU3VwcG9ydCgpID8/IGZhbHNlO1xufVxuXG4vLyBFeHBvcnQgdHlwZXMgZm9yIGludGVybmFsIHVzZVxuZXhwb3J0IHR5cGUge1xuICBOYXRpdmVSdXZMTE0sXG4gIE5hdGl2ZUNvbmZpZyxcbiAgTmF0aXZlRW5naW5lLFxuICBOYXRpdmVHZW5Db25maWcsXG4gIE5hdGl2ZVF1ZXJ5UmVzcG9uc2UsXG4gIE5hdGl2ZVJvdXRpbmdEZWNpc2lvbixcbiAgTmF0aXZlTWVtb3J5UmVzdWx0LFxuICBOYXRpdmVTdGF0cyxcbiAgTmF0aXZlU2ltZE9wcyxcbn07XG4iXX0=
@@ -0,0 +1,245 @@
1
+ /**
2
+ * RLM Controller - Recursive Retrieval Language Model
3
+ *
4
+ * Implements a recursive retrieval-augmented generation system that:
5
+ * 1. Breaks down complex queries into sub-queries
6
+ * 2. Retrieves relevant memory spans for each query
7
+ * 3. Synthesizes coherent answers from retrieved context
8
+ * 4. Optionally reflects on and refines answers
9
+ *
10
+ * @example Basic Usage
11
+ * ```typescript
12
+ * import { RlmController } from '@ruvector/ruvllm';
13
+ *
14
+ * const rlm = new RlmController({
15
+ * maxDepth: 3,
16
+ * retrievalTopK: 10,
17
+ * enableCache: true,
18
+ * });
19
+ *
20
+ * // Add knowledge to memory
21
+ * await rlm.addMemory('Machine learning is a subset of AI that enables systems to learn from data.');
22
+ * await rlm.addMemory('Deep learning uses neural networks with many layers.');
23
+ *
24
+ * // Query with recursive retrieval
25
+ * const answer = await rlm.query('Explain the relationship between ML and deep learning');
26
+ * console.log(answer.text);
27
+ * console.log('Sources:', answer.sources.length);
28
+ * console.log('Confidence:', answer.confidence);
29
+ * ```
30
+ *
31
+ * @example Streaming
32
+ * ```typescript
33
+ * const rlm = new RlmController();
34
+ *
35
+ * for await (const event of rlm.queryStream('What is AI?')) {
36
+ * if (event.type === 'token') {
37
+ * process.stdout.write(event.text);
38
+ * } else {
39
+ * console.log('\n\nDone! Quality:', event.answer.qualityScore);
40
+ * }
41
+ * }
42
+ * ```
43
+ *
44
+ * @example With Reflection
45
+ * ```typescript
46
+ * const rlm = new RlmController({
47
+ * enableReflection: true,
48
+ * maxReflectionIterations: 2,
49
+ * minQualityScore: 0.8,
50
+ * });
51
+ *
52
+ * const answer = await rlm.query('Complex multi-part question...');
53
+ * // Answer will be iteratively refined until quality >= 0.8
54
+ * ```
55
+ */
56
+ import { RlmConfig, RlmAnswer, MemorySpan, StreamToken } from './types';
57
+ import { RuvLLM } from '../engine';
58
+ /**
59
+ * RlmController - Recursive Retrieval Language Model Controller
60
+ *
61
+ * Orchestrates retrieval-augmented generation with recursive sub-query
62
+ * decomposition, memory search, and optional self-reflection.
63
+ */
64
+ export declare class RlmController {
65
+ private config;
66
+ private cache;
67
+ private engine;
68
+ private memoryIdCounter;
69
+ /**
70
+ * Create a new RLM controller
71
+ *
72
+ * @param config - Configuration options
73
+ * @param engine - Optional RuvLLM engine instance (creates new if not provided)
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * // With default config
78
+ * const rlm = new RlmController();
79
+ *
80
+ * // With custom config
81
+ * const rlm = new RlmController({
82
+ * maxDepth: 5,
83
+ * enableReflection: true,
84
+ * });
85
+ *
86
+ * // With existing engine
87
+ * const engine = new RuvLLM({ learningEnabled: true });
88
+ * const rlm = new RlmController({}, engine);
89
+ * ```
90
+ */
91
+ constructor(config?: RlmConfig, engine?: RuvLLM);
92
+ /**
93
+ * Query the RLM with recursive retrieval
94
+ *
95
+ * @param input - The query string
96
+ * @returns Promise resolving to the answer with sources and metadata
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * const answer = await rlm.query('What is the capital of France?');
101
+ * console.log(answer.text); // "The capital of France is Paris..."
102
+ * console.log(answer.confidence); // 0.95
103
+ * console.log(answer.sources); // [{ id: '...', text: '...', similarityScore: 0.92 }]
104
+ * ```
105
+ */
106
+ query(input: string): Promise<RlmAnswer>;
107
+ /**
108
+ * Query with streaming response
109
+ *
110
+ * @param input - The query string
111
+ * @yields StreamToken events (either partial tokens or final answer)
112
+ *
113
+ * @example
114
+ * ```typescript
115
+ * for await (const event of rlm.queryStream('Explain quantum computing')) {
116
+ * if (event.type === 'token') {
117
+ * // Partial token received
118
+ * process.stdout.write(event.text);
119
+ * } else {
120
+ * // Generation complete
121
+ * console.log('\n\nSources:', event.answer.sources.length);
122
+ * }
123
+ * }
124
+ * ```
125
+ */
126
+ queryStream(input: string): AsyncGenerator<StreamToken>;
127
+ /**
128
+ * Add content to memory for retrieval
129
+ *
130
+ * @param text - The text content to store
131
+ * @param metadata - Optional metadata to associate with the memory
132
+ * @returns Promise resolving to the memory span ID
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * const id1 = await rlm.addMemory(
137
+ * 'TypeScript is a typed superset of JavaScript.',
138
+ * { source: 'documentation', category: 'programming' }
139
+ * );
140
+ *
141
+ * const id2 = await rlm.addMemory(
142
+ * 'React is a JavaScript library for building UIs.'
143
+ * );
144
+ * ```
145
+ */
146
+ addMemory(text: string, metadata?: Record<string, unknown>): Promise<string>;
147
+ /**
148
+ * Search memory for relevant spans
149
+ *
150
+ * @param query - The search query
151
+ * @param topK - Number of results to return (default: config.retrievalTopK)
152
+ * @returns Promise resolving to array of memory spans
153
+ *
154
+ * @example
155
+ * ```typescript
156
+ * const spans = await rlm.searchMemory('JavaScript frameworks', 5);
157
+ * for (const span of spans) {
158
+ * console.log(`[${span.similarityScore.toFixed(2)}] ${span.text}`);
159
+ * }
160
+ * ```
161
+ */
162
+ searchMemory(query: string, topK?: number): Promise<MemorySpan[]>;
163
+ /**
164
+ * Clear the response cache
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * rlm.clearCache();
169
+ * console.log('Cache cleared');
170
+ * ```
171
+ */
172
+ clearCache(): void;
173
+ /**
174
+ * Get current cache statistics
175
+ *
176
+ * @returns Object with cache size and hit rate info
177
+ */
178
+ getCacheStats(): {
179
+ size: number;
180
+ entries: number;
181
+ };
182
+ /**
183
+ * Update configuration at runtime
184
+ *
185
+ * @param config - Partial configuration to merge
186
+ */
187
+ updateConfig(config: Partial<RlmConfig>): void;
188
+ /**
189
+ * Get current configuration
190
+ */
191
+ getConfig(): Required<RlmConfig>;
192
+ /**
193
+ * Generate sub-queries for complex questions
194
+ */
195
+ private generateSubQueries;
196
+ /**
197
+ * Decompose a complex query into simpler parts
198
+ */
199
+ private decomposeQuery;
200
+ /**
201
+ * Build context string from sources and sub-queries
202
+ */
203
+ private buildContext;
204
+ /**
205
+ * Build the full prompt with context
206
+ */
207
+ private buildPrompt;
208
+ /**
209
+ * Get generation config based on RLM settings
210
+ */
211
+ private getGenerationConfig;
212
+ /**
213
+ * Estimate token usage
214
+ */
215
+ private estimateTokenUsage;
216
+ /**
217
+ * Calculate quality score based on sources and confidence
218
+ */
219
+ private calculateQualityScore;
220
+ /**
221
+ * Apply self-reflection to improve answer
222
+ */
223
+ private applyReflection;
224
+ /**
225
+ * Get cached answer if valid
226
+ */
227
+ private getCached;
228
+ /**
229
+ * Set cache entry
230
+ */
231
+ private setCache;
232
+ /**
233
+ * Simple hash function for cache keys
234
+ */
235
+ private hashQuery;
236
+ /**
237
+ * Prune expired cache entries
238
+ */
239
+ private pruneCache;
240
+ /**
241
+ * Utility delay function for streaming simulation
242
+ */
243
+ private delay;
244
+ }
245
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/rlm/controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,OAAO,EACL,SAAS,EACT,SAAS,EACT,UAAU,EAGV,WAAW,EAGZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAkBnC;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAS;IAEhC;;;;;;;;;;;;;;;;;;;;;OAqBG;gBACS,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM;IAO/C;;;;;;;;;;;;;OAaG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAsD9C;;;;;;;;;;;;;;;;;;OAkBG;IACI,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC;IA2D9D;;;;;;;;;;;;;;;;;;OAkBG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAMlF;;;;;;;;;;;;;;OAcG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAavE;;;;;;;;OAQG;IACH,UAAU,IAAI,IAAI;IAIlB;;;;OAIG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAOlD;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IAI9C;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC;IAQhC;;OAEG;YACW,kBAAkB;IAkChC;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAuBpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;YACW,eAAe;IA0D7B;;OAEG;IACH,OAAO,CAAC,SAAS;IAiBjB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAchB;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,UAAU;IA0BlB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}