@jagilber-org/index-server 1.22.0 → 1.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +87 -2
- package/CODE_OF_CONDUCT.md +2 -0
- package/CONTRIBUTING.md +32 -2
- package/README.md +83 -20
- package/SECURITY.md +17 -5
- package/dist/config/dashboardConfig.d.ts +3 -0
- package/dist/config/dashboardConfig.js +3 -0
- package/dist/config/defaultValues.d.ts +1 -1
- package/dist/config/defaultValues.js +1 -1
- package/dist/config/featureConfig.d.ts +2 -0
- package/dist/config/featureConfig.js +6 -1
- package/dist/config/runtimeConfig.d.ts +1 -1
- package/dist/config/runtimeConfig.js +8 -9
- package/dist/dashboard/client/admin.html +173 -54
- package/dist/dashboard/client/css/admin.css +151 -0
- package/dist/dashboard/client/js/admin.auth.js +25 -11
- package/dist/dashboard/client/js/admin.config.js +1 -1
- package/dist/dashboard/client/js/admin.feedback.js +328 -0
- package/dist/dashboard/client/js/admin.graph.js +120 -18
- package/dist/dashboard/client/js/admin.instructions.js +27 -13
- package/dist/dashboard/client/js/admin.logs.js +1 -5
- package/dist/dashboard/client/js/admin.maintenance.js +53 -8
- package/dist/dashboard/client/js/admin.messaging.js +1 -4
- package/dist/dashboard/client/js/admin.overview.js +5 -1
- package/dist/dashboard/client/js/admin.sessions.js +1 -1
- package/dist/dashboard/client/js/admin.utils.js +43 -1
- package/dist/dashboard/client/js/mermaid.min.js +813 -537
- package/dist/dashboard/export/DataExporter.js +2 -1
- package/dist/dashboard/server/AdminPanel.d.ts +3 -0
- package/dist/dashboard/server/AdminPanel.js +132 -35
- package/dist/dashboard/server/ApiRoutes.js +40 -9
- package/dist/dashboard/server/DashboardServer.js +1 -1
- package/dist/dashboard/server/FileMetricsStorage.d.ts +19 -0
- package/dist/dashboard/server/FileMetricsStorage.js +52 -5
- package/dist/dashboard/server/HttpTransport.js +6 -0
- package/dist/dashboard/server/InstanceManager.js +7 -2
- package/dist/dashboard/server/KnowledgeStore.js +7 -2
- package/dist/dashboard/server/MetricsCollector.d.ts +16 -0
- package/dist/dashboard/server/MetricsCollector.js +113 -17
- package/dist/dashboard/server/legacyDashboardHtml.js +7 -2
- package/dist/dashboard/server/middleware/ensureLoadedMiddleware.d.ts +1 -1
- package/dist/dashboard/server/middleware/ensureLoadedMiddleware.js +8 -3
- package/dist/dashboard/server/routes/admin.feedback.routes.d.ts +15 -0
- package/dist/dashboard/server/routes/admin.feedback.routes.js +188 -0
- package/dist/dashboard/server/routes/admin.routes.js +35 -27
- package/dist/dashboard/server/routes/alerts.routes.js +4 -3
- package/dist/dashboard/server/routes/api.feedback.routes.js +2 -1
- package/dist/dashboard/server/routes/api.usage.routes.js +8 -7
- package/dist/dashboard/server/routes/embeddings.routes.d.ts +2 -1
- package/dist/dashboard/server/routes/embeddings.routes.js +18 -9
- package/dist/dashboard/server/routes/graph.routes.js +10 -13
- package/dist/dashboard/server/routes/index.d.ts +1 -0
- package/dist/dashboard/server/routes/index.js +74 -39
- package/dist/dashboard/server/routes/instances.routes.js +2 -1
- package/dist/dashboard/server/routes/instructions.routes.js +46 -27
- package/dist/dashboard/server/routes/knowledge.routes.js +4 -3
- package/dist/dashboard/server/routes/logs.routes.js +5 -4
- package/dist/dashboard/server/routes/messaging.routes.js +15 -14
- package/dist/dashboard/server/routes/metrics.routes.js +14 -13
- package/dist/dashboard/server/routes/scripts.routes.js +6 -3
- package/dist/dashboard/server/routes/status.routes.js +25 -6
- package/dist/dashboard/server/routes/synthetic.routes.js +3 -2
- package/dist/dashboard/server/routes/usage.routes.js +2 -1
- package/dist/dashboard/server/utils/escapeHtml.d.ts +1 -0
- package/dist/dashboard/server/utils/escapeHtml.js +11 -0
- package/dist/dashboard/server/utils/pathContainment.d.ts +1 -0
- package/dist/dashboard/server/utils/pathContainment.js +15 -0
- package/dist/dashboard/server/wsInit.js +2 -2
- package/dist/lib/mcpStdioLogging.d.ts +165 -0
- package/dist/lib/mcpStdioLogging.js +287 -0
- package/dist/schemas/index.d.ts +37 -2
- package/dist/schemas/index.js +27 -3
- package/dist/server/backgroundServicesStartup.d.ts +7 -1
- package/dist/server/backgroundServicesStartup.js +25 -8
- package/dist/server/certInit.d.ts +97 -0
- package/dist/server/certInit.js +359 -0
- package/dist/server/certInit.types.d.ts +92 -0
- package/dist/server/certInit.types.js +34 -0
- package/dist/server/handshake/fallbackFrames.d.ts +31 -0
- package/dist/server/handshake/fallbackFrames.js +38 -0
- package/dist/server/handshake/initializeDetector.d.ts +31 -0
- package/dist/server/handshake/initializeDetector.js +88 -0
- package/dist/server/handshake/protocol.d.ts +15 -0
- package/dist/server/handshake/protocol.js +37 -0
- package/dist/server/handshake/readyEmitter.d.ts +6 -0
- package/dist/server/handshake/readyEmitter.js +88 -0
- package/dist/server/handshake/safetyFallbacks.d.ts +1 -0
- package/dist/server/handshake/safetyFallbacks.js +134 -0
- package/dist/server/handshake/stdinSniffer.d.ts +1 -0
- package/dist/server/handshake/stdinSniffer.js +260 -0
- package/dist/server/handshake/tracing.d.ts +16 -0
- package/dist/server/handshake/tracing.js +95 -0
- package/dist/server/handshakeManager.d.ts +23 -23
- package/dist/server/handshakeManager.js +36 -466
- package/dist/server/index-server.d.ts +23 -0
- package/dist/server/index-server.js +194 -9
- package/dist/server/mcpReadOnlySurfaces.d.ts +44 -0
- package/dist/server/mcpReadOnlySurfaces.js +297 -0
- package/dist/server/sdkServer.js +69 -7
- package/dist/server/transport.d.ts +5 -6
- package/dist/server/transport.js +46 -64
- package/dist/server/transportFactory.d.ts +3 -9
- package/dist/server/transportFactory.js +18 -380
- package/dist/services/atomicFs.d.ts +3 -0
- package/dist/services/atomicFs.js +171 -13
- package/dist/services/auditLog.d.ts +17 -2
- package/dist/services/auditLog.js +75 -14
- package/dist/services/bootstrapGating.js +1 -1
- package/dist/services/categoryRules.d.ts +10 -0
- package/dist/services/categoryRules.js +17 -0
- package/dist/services/classificationService.js +7 -5
- package/dist/services/embeddingService.d.ts +27 -11
- package/dist/services/embeddingService.js +51 -14
- package/dist/services/feedbackStorage.d.ts +39 -0
- package/dist/services/feedbackStorage.js +88 -0
- package/dist/services/handlers/instructions.add.js +429 -317
- package/dist/services/handlers/instructions.groom.js +128 -31
- package/dist/services/handlers/instructions.import.js +56 -23
- package/dist/services/handlers/instructions.patch.js +43 -32
- package/dist/services/handlers/instructions.query.js +20 -29
- package/dist/services/handlers/instructions.shared.d.ts +54 -0
- package/dist/services/handlers/instructions.shared.js +126 -1
- package/dist/services/handlers.activation.js +83 -81
- package/dist/services/handlers.dashboardConfig.d.ts +2 -2
- package/dist/services/handlers.dashboardConfig.js +1 -2
- package/dist/services/handlers.diagnostics.js +75 -54
- package/dist/services/handlers.feedback.d.ts +4 -11
- package/dist/services/handlers.feedback.js +11 -333
- package/dist/services/handlers.gates.js +69 -37
- package/dist/services/handlers.graph.js +2 -2
- package/dist/services/handlers.help.js +2 -2
- package/dist/services/handlers.instructionSchema.js +4 -2
- package/dist/services/handlers.integrity.js +42 -22
- package/dist/services/handlers.messaging.js +1 -1
- package/dist/services/handlers.metrics.js +51 -6
- package/dist/services/handlers.prompt.js +10 -2
- package/dist/services/handlers.search.js +94 -44
- package/dist/services/handlers.trace.js +1 -1
- package/dist/services/handlers.usage.js +38 -7
- package/dist/services/indexContext.d.ts +21 -1
- package/dist/services/indexContext.js +267 -82
- package/dist/services/indexLoader.d.ts +1 -0
- package/dist/services/indexLoader.js +28 -8
- package/dist/services/instructionRecordValidation.d.ts +39 -0
- package/dist/services/instructionRecordValidation.js +388 -0
- package/dist/services/instructions.dispatcher.js +4 -4
- package/dist/services/loaderSchemaValidator.d.ts +15 -0
- package/dist/services/loaderSchemaValidator.js +69 -0
- package/dist/services/logger.js +11 -2
- package/dist/services/mcpLogBridge.d.ts +49 -0
- package/dist/services/mcpLogBridge.js +83 -0
- package/dist/services/ownershipService.js +18 -8
- package/dist/services/performanceBaseline.js +23 -22
- package/dist/services/promptReviewService.d.ts +3 -1
- package/dist/services/promptReviewService.js +41 -13
- package/dist/services/regexSafety.d.ts +6 -0
- package/dist/services/regexSafety.js +46 -0
- package/dist/services/seedBootstrap.js +4 -4
- package/dist/services/storage/factory.d.ts +14 -1
- package/dist/services/storage/factory.js +61 -1
- package/dist/services/storage/jsonEmbeddingStore.d.ts +15 -0
- package/dist/services/storage/jsonEmbeddingStore.js +83 -0
- package/dist/services/storage/jsonFileStore.d.ts +3 -1
- package/dist/services/storage/jsonFileStore.js +8 -6
- package/dist/services/storage/migrationEngine.d.ts +13 -0
- package/dist/services/storage/migrationEngine.js +31 -0
- package/dist/services/storage/sqliteEmbeddingStore.d.ts +30 -0
- package/dist/services/storage/sqliteEmbeddingStore.js +222 -0
- package/dist/services/storage/sqliteStore.d.ts +3 -1
- package/dist/services/storage/sqliteStore.js +2 -2
- package/dist/services/storage/types.d.ts +48 -1
- package/dist/services/toolRegistry.js +77 -67
- package/dist/services/toolRegistry.zod.js +89 -86
- package/dist/services/tracing.js +5 -4
- package/dist/utils/envUtils.d.ts +4 -0
- package/dist/utils/envUtils.js +7 -0
- package/dist/utils/memoryMonitor.js +11 -10
- package/package.json +11 -4
- package/schemas/instruction.schema.json +38 -1
- package/scripts/copy-dashboard-assets.mjs +1 -1
- package/scripts/dist/README.md +1 -1
- package/scripts/setup-wizard.mjs +781 -0
- package/server.json +1 -0
- package/dist/externalClientLib.d.ts +0 -1
- package/dist/externalClientLib.js +0 -2
- package/dist/portableClientWrapper.d.ts +0 -1
- package/dist/portableClientWrapper.js +0 -2
- package/dist/services/indexingService.d.ts +0 -1
- package/dist/services/indexingService.js +0 -2
|
@@ -25,6 +25,7 @@ const featureFlags_js_1 = require("../../../services/featureFlags.js");
|
|
|
25
25
|
const handlers_dashboardConfig_js_1 = require("../../../services/handlers.dashboardConfig.js");
|
|
26
26
|
const registry_js_1 = require("../../../server/registry.js");
|
|
27
27
|
const adminAuth_js_1 = require("./adminAuth.js");
|
|
28
|
+
const logger_js_1 = require("../../../services/logger.js");
|
|
28
29
|
function createAdminRoutes(metricsCollector) {
|
|
29
30
|
const router = (0, express_1.Router)();
|
|
30
31
|
const adminPanel = (0, AdminPanel_js_1.getAdminPanel)();
|
|
@@ -56,7 +57,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
56
57
|
});
|
|
57
58
|
}
|
|
58
59
|
catch (error) {
|
|
59
|
-
|
|
60
|
+
(0, logger_js_1.logError)('[API] Get admin config error:', error);
|
|
60
61
|
res.status(500).json({
|
|
61
62
|
success: false,
|
|
62
63
|
error: 'Failed to get admin configuration',
|
|
@@ -79,7 +80,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
79
80
|
res.json({ success: true, featureFlags, allFlags, total: allFlags.length, timestamp: Date.now() });
|
|
80
81
|
}
|
|
81
82
|
catch (error) {
|
|
82
|
-
|
|
83
|
+
(0, logger_js_1.logError)('[Admin] Failed to get flags snapshot:', error);
|
|
83
84
|
res.status(500).json({ success: false, error: 'Failed to get flags snapshot' });
|
|
84
85
|
}
|
|
85
86
|
});
|
|
@@ -96,7 +97,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
96
97
|
(0, featureFlags_js_1.updateFlags)(updates.featureFlags);
|
|
97
98
|
}
|
|
98
99
|
catch (e) {
|
|
99
|
-
|
|
100
|
+
(0, logger_js_1.logWarn)('[API] feature flag update failed:', e instanceof Error ? e.message : e);
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
103
|
if (result.success) {
|
|
@@ -115,7 +116,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
115
116
|
}
|
|
116
117
|
}
|
|
117
118
|
catch (error) {
|
|
118
|
-
|
|
119
|
+
(0, logger_js_1.logError)('[API] Update admin config error:', error);
|
|
119
120
|
res.status(500).json({
|
|
120
121
|
success: false,
|
|
121
122
|
error: 'Failed to update admin configuration',
|
|
@@ -136,7 +137,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
136
137
|
});
|
|
137
138
|
}
|
|
138
139
|
catch (error) {
|
|
139
|
-
|
|
140
|
+
(0, logger_js_1.logError)('[API] Get admin sessions error:', error);
|
|
140
141
|
res.status(500).json({
|
|
141
142
|
success: false,
|
|
142
143
|
error: 'Failed to get admin sessions',
|
|
@@ -158,7 +159,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
158
159
|
});
|
|
159
160
|
}
|
|
160
161
|
catch (error) {
|
|
161
|
-
|
|
162
|
+
(0, logger_js_1.logError)('[API] Get active connections error:', error);
|
|
162
163
|
res.status(500).json({ success: false, error: 'Failed to get active connections' });
|
|
163
164
|
}
|
|
164
165
|
});
|
|
@@ -179,7 +180,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
179
180
|
});
|
|
180
181
|
}
|
|
181
182
|
catch (error) {
|
|
182
|
-
|
|
183
|
+
(0, logger_js_1.logError)('[API] Create admin session error:', error);
|
|
183
184
|
res.status(500).json({
|
|
184
185
|
success: false,
|
|
185
186
|
error: 'Failed to create admin session',
|
|
@@ -209,7 +210,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
209
210
|
}
|
|
210
211
|
}
|
|
211
212
|
catch (error) {
|
|
212
|
-
|
|
213
|
+
(0, logger_js_1.logError)('[API] Terminate admin session error:', error);
|
|
213
214
|
res.status(500).json({
|
|
214
215
|
success: false,
|
|
215
216
|
error: 'Failed to terminate admin session',
|
|
@@ -229,7 +230,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
229
230
|
});
|
|
230
231
|
}
|
|
231
232
|
catch (error) {
|
|
232
|
-
|
|
233
|
+
(0, logger_js_1.logError)('[API] Get maintenance info error:', error);
|
|
233
234
|
res.status(500).json({
|
|
234
235
|
success: false,
|
|
235
236
|
error: 'Failed to get maintenance information',
|
|
@@ -259,7 +260,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
259
260
|
}
|
|
260
261
|
}
|
|
261
262
|
catch (error) {
|
|
262
|
-
|
|
263
|
+
(0, logger_js_1.logError)('[API] Set maintenance mode error:', error);
|
|
263
264
|
res.status(500).json({
|
|
264
265
|
success: false,
|
|
265
266
|
error: 'Failed to set maintenance mode',
|
|
@@ -284,7 +285,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
284
285
|
res.json({ success: true, durationMs, dryRun: !!dryRun, forceCanonical: !!forceCanonical, summary });
|
|
285
286
|
}
|
|
286
287
|
catch (err) {
|
|
287
|
-
|
|
288
|
+
(0, logger_js_1.logError)('[Admin] Normalize failed:', err);
|
|
288
289
|
res.status(500).json({ success: false, error: 'normalize_failed' });
|
|
289
290
|
}
|
|
290
291
|
});
|
|
@@ -311,7 +312,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
311
312
|
}
|
|
312
313
|
}
|
|
313
314
|
catch (error) {
|
|
314
|
-
|
|
315
|
+
(0, logger_js_1.logError)('[API] Perform backup error:', error);
|
|
315
316
|
res.status(500).json({
|
|
316
317
|
success: false,
|
|
317
318
|
error: 'Failed to perform backup',
|
|
@@ -324,10 +325,11 @@ function createAdminRoutes(metricsCollector) {
|
|
|
324
325
|
router.get('/admin/maintenance/backups', (_req, res) => {
|
|
325
326
|
try {
|
|
326
327
|
const backups = adminPanel.listBackups();
|
|
327
|
-
|
|
328
|
+
const hasWarnings = backups.some(b => b.warnings && b.warnings.length > 0);
|
|
329
|
+
res.json({ success: true, backups, count: backups.length, hasWarnings, timestamp: Date.now() });
|
|
328
330
|
}
|
|
329
331
|
catch (error) {
|
|
330
|
-
|
|
332
|
+
(0, logger_js_1.logError)('[API] List backups error:', error);
|
|
331
333
|
res.status(500).json({ success: false, error: 'Failed to list backups' });
|
|
332
334
|
}
|
|
333
335
|
});
|
|
@@ -347,7 +349,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
347
349
|
}
|
|
348
350
|
}
|
|
349
351
|
catch (error) {
|
|
350
|
-
|
|
352
|
+
(0, logger_js_1.logError)('[API] Restore backup error:', error);
|
|
351
353
|
res.status(500).json({ success: false, error: 'Failed to restore backup' });
|
|
352
354
|
}
|
|
353
355
|
});
|
|
@@ -366,7 +368,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
366
368
|
}
|
|
367
369
|
}
|
|
368
370
|
catch (error) {
|
|
369
|
-
|
|
371
|
+
(0, logger_js_1.logError)('[API] Delete backup error:', error);
|
|
370
372
|
res.status(500).json({ success: false, error: 'Failed to delete backup' });
|
|
371
373
|
}
|
|
372
374
|
});
|
|
@@ -378,14 +380,17 @@ function createAdminRoutes(metricsCollector) {
|
|
|
378
380
|
const retain = typeof req.body?.retain === 'number' ? req.body.retain : 10;
|
|
379
381
|
const result = adminPanel.pruneBackups(retain);
|
|
380
382
|
if (result.success) {
|
|
381
|
-
|
|
383
|
+
const response = { success: true, message: result.message, pruned: result.pruned, timestamp: Date.now() };
|
|
384
|
+
if (result.errors && result.errors.length > 0)
|
|
385
|
+
response.errors = result.errors;
|
|
386
|
+
res.json(response);
|
|
382
387
|
}
|
|
383
388
|
else {
|
|
384
389
|
res.status(400).json({ success: false, error: result.message, timestamp: Date.now() });
|
|
385
390
|
}
|
|
386
391
|
}
|
|
387
392
|
catch (error) {
|
|
388
|
-
|
|
393
|
+
(0, logger_js_1.logError)('[API] Prune backups error:', error);
|
|
389
394
|
res.status(500).json({ success: false, error: 'Failed to prune backups' });
|
|
390
395
|
}
|
|
391
396
|
});
|
|
@@ -403,17 +408,20 @@ function createAdminRoutes(metricsCollector) {
|
|
|
403
408
|
stream.pipe(res);
|
|
404
409
|
}
|
|
405
410
|
else if (result.success && result.bundle) {
|
|
406
|
-
// Legacy directory backup — serve as JSON
|
|
411
|
+
// Legacy directory backup — serve as JSON (include warnings if present)
|
|
407
412
|
res.setHeader('Content-Type', 'application/json');
|
|
408
413
|
res.setHeader('Content-Disposition', `attachment; filename="${id}.json"`);
|
|
409
|
-
|
|
414
|
+
const body = { ...result.bundle };
|
|
415
|
+
if (result.warnings && result.warnings.length > 0)
|
|
416
|
+
body._warnings = result.warnings;
|
|
417
|
+
res.json(body);
|
|
410
418
|
}
|
|
411
419
|
else {
|
|
412
420
|
res.status(400).json({ success: false, error: result.message, timestamp: Date.now() });
|
|
413
421
|
}
|
|
414
422
|
}
|
|
415
423
|
catch (error) {
|
|
416
|
-
|
|
424
|
+
(0, logger_js_1.logError)('[API] Export backup error:', error);
|
|
417
425
|
res.status(500).json({ success: false, error: 'Failed to export backup' });
|
|
418
426
|
}
|
|
419
427
|
});
|
|
@@ -444,7 +452,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
444
452
|
}
|
|
445
453
|
}
|
|
446
454
|
catch (error) {
|
|
447
|
-
|
|
455
|
+
(0, logger_js_1.logError)('[API] Import backup error:', error);
|
|
448
456
|
res.status(500).json({ success: false, error: 'Failed to import backup' });
|
|
449
457
|
}
|
|
450
458
|
});
|
|
@@ -461,7 +469,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
461
469
|
});
|
|
462
470
|
}
|
|
463
471
|
catch (error) {
|
|
464
|
-
|
|
472
|
+
(0, logger_js_1.logError)('[API] Get admin stats error:', error);
|
|
465
473
|
res.status(500).json({
|
|
466
474
|
success: false,
|
|
467
475
|
error: 'Failed to get admin statistics',
|
|
@@ -484,7 +492,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
484
492
|
});
|
|
485
493
|
}
|
|
486
494
|
catch (error) {
|
|
487
|
-
|
|
495
|
+
(0, logger_js_1.logError)('[API] Get session history error:', error);
|
|
488
496
|
res.status(500).json({
|
|
489
497
|
success: false,
|
|
490
498
|
error: 'Failed to get session history',
|
|
@@ -514,7 +522,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
514
522
|
}
|
|
515
523
|
}
|
|
516
524
|
catch (error) {
|
|
517
|
-
|
|
525
|
+
(0, logger_js_1.logError)('[API] Restart server error:', error);
|
|
518
526
|
res.status(500).json({
|
|
519
527
|
success: false,
|
|
520
528
|
error: 'Failed to restart server',
|
|
@@ -544,7 +552,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
544
552
|
}
|
|
545
553
|
}
|
|
546
554
|
catch (error) {
|
|
547
|
-
|
|
555
|
+
(0, logger_js_1.logError)('[API] Clear caches error:', error);
|
|
548
556
|
res.status(500).json({
|
|
549
557
|
success: false,
|
|
550
558
|
error: 'Failed to clear caches',
|
|
@@ -564,7 +572,7 @@ function createAdminRoutes(metricsCollector) {
|
|
|
564
572
|
});
|
|
565
573
|
}
|
|
566
574
|
catch (error) {
|
|
567
|
-
|
|
575
|
+
(0, logger_js_1.logError)('[API] Clear metrics error:', error);
|
|
568
576
|
res.status(500).json({
|
|
569
577
|
error: 'Failed to clear metrics',
|
|
570
578
|
});
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.createAlertsRoutes = createAlertsRoutes;
|
|
8
8
|
const express_1 = require("express");
|
|
9
9
|
const adminAuth_js_1 = require("./adminAuth.js");
|
|
10
|
+
const logger_js_1 = require("../../../services/logger.js");
|
|
10
11
|
function createAlertsRoutes(metricsCollector) {
|
|
11
12
|
const router = (0, express_1.Router)();
|
|
12
13
|
/**
|
|
@@ -23,7 +24,7 @@ function createAlertsRoutes(metricsCollector) {
|
|
|
23
24
|
});
|
|
24
25
|
}
|
|
25
26
|
catch (error) {
|
|
26
|
-
|
|
27
|
+
(0, logger_js_1.logError)('[API] Active alerts error:', error);
|
|
27
28
|
res.status(500).json({
|
|
28
29
|
error: 'Failed to get active alerts',
|
|
29
30
|
});
|
|
@@ -52,7 +53,7 @@ function createAlertsRoutes(metricsCollector) {
|
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
catch (error) {
|
|
55
|
-
|
|
56
|
+
(0, logger_js_1.logError)('[API] Resolve alert error:', error);
|
|
56
57
|
res.status(500).json({
|
|
57
58
|
error: 'Failed to resolve alert',
|
|
58
59
|
});
|
|
@@ -81,7 +82,7 @@ function createAlertsRoutes(metricsCollector) {
|
|
|
81
82
|
});
|
|
82
83
|
}
|
|
83
84
|
catch (error) {
|
|
84
|
-
|
|
85
|
+
(0, logger_js_1.logError)('[API] Generate alert error:', error);
|
|
85
86
|
res.status(500).json({
|
|
86
87
|
error: 'Failed to generate alert',
|
|
87
88
|
});
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.FeedbackManager = void 0;
|
|
11
|
+
const logger_js_1 = require("../../../services/logger.js");
|
|
11
12
|
// ── FeedbackManager ──────────────────────────────────────────────────────────────────
|
|
12
13
|
class FeedbackManager {
|
|
13
14
|
usageMgr;
|
|
@@ -102,7 +103,7 @@ class FeedbackManager {
|
|
|
102
103
|
return response.status >= 200 && response.status < 300;
|
|
103
104
|
}
|
|
104
105
|
catch (error) {
|
|
105
|
-
|
|
106
|
+
(0, logger_js_1.logError)('Webhook execution error:', error);
|
|
106
107
|
return false;
|
|
107
108
|
}
|
|
108
109
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.UsageManager = void 0;
|
|
10
|
+
const logger_js_1 = require("../../../services/logger.js");
|
|
10
11
|
// ── UsageManager ─────────────────────────────────────────────────────────────────────
|
|
11
12
|
class UsageManager {
|
|
12
13
|
endpointMgr;
|
|
@@ -38,7 +39,7 @@ class UsageManager {
|
|
|
38
39
|
request.body = this.applySafeTransform(data, endpoint.dataMapping.requestTransform);
|
|
39
40
|
}
|
|
40
41
|
catch (error) {
|
|
41
|
-
|
|
42
|
+
(0, logger_js_1.logError)('Request transform error:', error);
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
if (endpoint.validation.validateRequest && endpoint.validation.requestSchema) {
|
|
@@ -56,7 +57,7 @@ class UsageManager {
|
|
|
56
57
|
response.body = this.applySafeTransform(response.body, endpoint.dataMapping.responseTransform);
|
|
57
58
|
}
|
|
58
59
|
catch (error) {
|
|
59
|
-
|
|
60
|
+
(0, logger_js_1.logError)('Response transform error:', error);
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
if (endpoint.dataMapping.fieldMappings.length > 0) {
|
|
@@ -65,7 +66,7 @@ class UsageManager {
|
|
|
65
66
|
if (endpoint.validation.validateResponse && endpoint.validation.responseSchema) {
|
|
66
67
|
const valid = this.validateData(response.body, endpoint.validation.responseSchema);
|
|
67
68
|
if (!valid && endpoint.validation.strictMode) {
|
|
68
|
-
|
|
69
|
+
(0, logger_js_1.logWarn)('Response validation failed for endpoint:', endpointId);
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
if (endpoint.monitoring.logResponses) {
|
|
@@ -208,7 +209,7 @@ class UsageManager {
|
|
|
208
209
|
break;
|
|
209
210
|
}
|
|
210
211
|
case 'oauth2':
|
|
211
|
-
|
|
212
|
+
(0, logger_js_1.logWarn)('OAuth2 authentication not fully implemented');
|
|
212
213
|
break;
|
|
213
214
|
case 'custom': {
|
|
214
215
|
const customHeaders = auth.config.headers;
|
|
@@ -293,7 +294,7 @@ class UsageManager {
|
|
|
293
294
|
targetValue = this.applySafeFieldTransform(sourceValue, mapping.transform);
|
|
294
295
|
}
|
|
295
296
|
catch (error) {
|
|
296
|
-
|
|
297
|
+
(0, logger_js_1.logError)('Field mapping transform error:', error);
|
|
297
298
|
}
|
|
298
299
|
}
|
|
299
300
|
this.setNestedValue(result, mapping.target, targetValue);
|
|
@@ -340,7 +341,7 @@ class UsageManager {
|
|
|
340
341
|
callback(event);
|
|
341
342
|
}
|
|
342
343
|
catch (error) {
|
|
343
|
-
|
|
344
|
+
(0, logger_js_1.logError)('API monitoring callback error:', error);
|
|
344
345
|
}
|
|
345
346
|
});
|
|
346
347
|
}
|
|
@@ -361,7 +362,7 @@ class UsageManager {
|
|
|
361
362
|
headers: request.headers,
|
|
362
363
|
timeout: request.timeout
|
|
363
364
|
}).catch(error => {
|
|
364
|
-
|
|
365
|
+
(0, logger_js_1.logError)('Queued request execution error:', error);
|
|
365
366
|
});
|
|
366
367
|
}
|
|
367
368
|
}
|
|
@@ -3,4 +3,5 @@
|
|
|
3
3
|
* Route: GET /embeddings/projection — PCA-project embeddings to 2D for visualization.
|
|
4
4
|
*/
|
|
5
5
|
import { Router } from 'express';
|
|
6
|
-
|
|
6
|
+
import type { IEmbeddingStore } from '../../../services/storage/types.js';
|
|
7
|
+
export declare function createEmbeddingsRoutes(embeddingPathOverride?: string, embeddingStore?: IEmbeddingStore): Router;
|
|
@@ -148,19 +148,28 @@ function computeStats(ids, vectors, topK = 10) {
|
|
|
148
148
|
// ---------------------------------------------------------------------------
|
|
149
149
|
// Route factory
|
|
150
150
|
// ---------------------------------------------------------------------------
|
|
151
|
-
function createEmbeddingsRoutes(embeddingPathOverride) {
|
|
151
|
+
function createEmbeddingsRoutes(embeddingPathOverride, embeddingStore) {
|
|
152
152
|
const router = (0, express_1.Router)();
|
|
153
153
|
router.get('/embeddings/projection', (_req, res) => {
|
|
154
154
|
try {
|
|
155
|
-
|
|
156
|
-
if (
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
155
|
+
let data;
|
|
156
|
+
if (embeddingStore) {
|
|
157
|
+
// Use IEmbeddingStore abstraction (works with both JSON and SQLite)
|
|
158
|
+
const loaded = embeddingStore.load();
|
|
159
|
+
if (!loaded) {
|
|
160
|
+
return res.status(404).json({ success: false, error: 'No embeddings data in store' });
|
|
161
|
+
}
|
|
162
|
+
data = { indexHash: loaded.indexHash, modelName: loaded.modelName ?? 'unknown', embeddings: loaded.embeddings };
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
// Fallback: read directly from JSON file
|
|
166
|
+
const embeddingPath = embeddingPathOverride ?? (0, runtimeConfig_js_1.getRuntimeConfig)().semantic.embeddingPath ?? '';
|
|
167
|
+
if (!embeddingPath || !node_fs_1.default.existsSync(embeddingPath)) {
|
|
168
|
+
return res.status(404).json({ success: false, error: 'Embeddings file not found' });
|
|
169
|
+
}
|
|
170
|
+
const raw = node_fs_1.default.readFileSync(embeddingPath, 'utf-8');
|
|
171
|
+
data = JSON.parse(raw);
|
|
161
172
|
}
|
|
162
|
-
const raw = node_fs_1.default.readFileSync(embeddingPath, 'utf-8');
|
|
163
|
-
const data = JSON.parse(raw);
|
|
164
173
|
const ids = Object.keys(data.embeddings);
|
|
165
174
|
const vectors = ids.map(id => data.embeddings[id]);
|
|
166
175
|
if (ids.length === 0) {
|
|
@@ -8,6 +8,7 @@ exports.createGraphRoutes = createGraphRoutes;
|
|
|
8
8
|
const express_1 = require("express");
|
|
9
9
|
const handlers_graph_js_1 = require("../../../services/handlers.graph.js");
|
|
10
10
|
const runtimeConfig_js_1 = require("../../../config/runtimeConfig.js");
|
|
11
|
+
const logger_js_1 = require("../../../services/logger.js");
|
|
11
12
|
function createGraphRoutes() {
|
|
12
13
|
const router = (0, express_1.Router)();
|
|
13
14
|
/**
|
|
@@ -24,8 +25,7 @@ function createGraphRoutes() {
|
|
|
24
25
|
const includeEdgeTypes = edgeTypes ? edgeTypes.split(',').filter(Boolean) : undefined;
|
|
25
26
|
const t0 = Date.now();
|
|
26
27
|
try {
|
|
27
|
-
//
|
|
28
|
-
console.debug('[graph/mermaid][start]', `enrich=${enrich}`, `categories=${categories}`, `usage=${usage}`, `edgeTypes=${edgeTypes || ''}`, `selCats=${selectedCategories || ''}`, `selIds=${selectedIds || ''}`); // lgtm[js/log-injection] — query params for debugging
|
|
28
|
+
(0, logger_js_1.logDebug)('[graph/mermaid][start]', { enrich, categories, usage, edgeTypes: edgeTypes || '', selCats: selectedCategories || '', selIds: selectedIds || '' }); // lgtm[js/log-injection] — query params for debugging
|
|
29
29
|
}
|
|
30
30
|
catch { /* ignore diag logging errors */ }
|
|
31
31
|
const graph = (0, handlers_graph_js_1.buildGraph)({
|
|
@@ -125,13 +125,12 @@ function createGraphRoutes() {
|
|
|
125
125
|
parts.push(...filtered);
|
|
126
126
|
mermaidSource = parts.join('\n');
|
|
127
127
|
if ((0, runtimeConfig_js_1.getRuntimeConfig)().logging.verbose) {
|
|
128
|
-
|
|
129
|
-
console.debug('[graph/mermaid][filter:new]', { selectedIds: idFilter.length, selectedCategories: catFilter.length, kept: keepIds.size, totalLines: lines.length, emittedLines: parts.length });
|
|
128
|
+
(0, logger_js_1.logDebug)('[graph/mermaid][filter:new]', { selectedIds: idFilter.length, selectedCategories: catFilter.length, kept: keepIds.size, totalLines: lines.length, emittedLines: parts.length });
|
|
130
129
|
}
|
|
131
130
|
keptIdsSize = keepIds.size;
|
|
132
131
|
scoped = true;
|
|
133
132
|
try {
|
|
134
|
-
const nodeLineRegex = /^(\s*)([A-Za-z0-9:_-]+)\[[^\]]*\]/;
|
|
133
|
+
const nodeLineRegex = /^(\s*)([A-Za-z0-9:_-]+)\[[^\]]*\]/;
|
|
135
134
|
const edgeLineRegex = /-->|===|~~>|\|-/;
|
|
136
135
|
let n = 0, eCnt = 0;
|
|
137
136
|
for (const ln of filtered) {
|
|
@@ -147,12 +146,11 @@ function createGraphRoutes() {
|
|
|
147
146
|
}
|
|
148
147
|
}
|
|
149
148
|
catch (filterErr) {
|
|
150
|
-
|
|
149
|
+
(0, logger_js_1.logWarn)('[graph/mermaid][filter-failed]', filterErr);
|
|
151
150
|
}
|
|
152
151
|
}
|
|
153
152
|
try {
|
|
154
|
-
|
|
155
|
-
console.debug('[graph/mermaid][ok]', { ms: Date.now() - t0, nodes: graph.meta?.nodeCount, edges: graph.meta?.edgeCount, bytes: mermaidSource.length });
|
|
153
|
+
(0, logger_js_1.logDebug)('[graph/mermaid][ok]', { ms: Date.now() - t0, nodes: graph.meta?.nodeCount, edges: graph.meta?.edgeCount, bytes: mermaidSource.length });
|
|
156
154
|
}
|
|
157
155
|
catch { /* ignore diag logging errors */ }
|
|
158
156
|
let metaOut = graph.meta;
|
|
@@ -175,8 +173,7 @@ function createGraphRoutes() {
|
|
|
175
173
|
catch (err) {
|
|
176
174
|
const e = err;
|
|
177
175
|
try {
|
|
178
|
-
|
|
179
|
-
console.warn('[graph/mermaid][error]', e.message);
|
|
176
|
+
(0, logger_js_1.logWarn)('[graph/mermaid][error]', e.message);
|
|
180
177
|
}
|
|
181
178
|
catch { /* ignore diag logging errors */ }
|
|
182
179
|
res.status(500).json({ success: false, error: 'Failed to generate mermaid graph' });
|
|
@@ -200,7 +197,7 @@ function createGraphRoutes() {
|
|
|
200
197
|
res.json({ success: true, categories, total: categories.length, timestamp: Date.now() });
|
|
201
198
|
}
|
|
202
199
|
catch (err) {
|
|
203
|
-
|
|
200
|
+
(0, logger_js_1.logError)('[graph/categories] Error:', err);
|
|
204
201
|
res.status(500).json({ success: false, error: 'Failed to get categories' });
|
|
205
202
|
}
|
|
206
203
|
});
|
|
@@ -225,7 +222,7 @@ function createGraphRoutes() {
|
|
|
225
222
|
res.json({ success: true, instructions: flat, count: flat.length, filtered: !!filterCats.length, timestamp: Date.now() });
|
|
226
223
|
}
|
|
227
224
|
catch (err) {
|
|
228
|
-
|
|
225
|
+
(0, logger_js_1.logError)('[graph/instructions] Error:', err);
|
|
229
226
|
res.status(500).json({ success: false, error: 'Failed to get instructions' });
|
|
230
227
|
}
|
|
231
228
|
});
|
|
@@ -271,7 +268,7 @@ function createGraphRoutes() {
|
|
|
271
268
|
res.json({ success: true, nodes: finalNodes, edges, categories, expanded: expand ? expandedCount : 0, timestamp: Date.now() });
|
|
272
269
|
}
|
|
273
270
|
catch (err) {
|
|
274
|
-
|
|
271
|
+
(0, logger_js_1.logError)('[graph/relations] Error:', err);
|
|
275
272
|
res.status(500).json({ success: false, error: 'Failed to get relations' });
|
|
276
273
|
}
|
|
277
274
|
});
|
|
@@ -19,6 +19,7 @@ export { createUsageRoutes } from './usage.routes.js';
|
|
|
19
19
|
export { createScriptsRoutes } from './scripts.routes.js';
|
|
20
20
|
export { createMessagingRoutes } from './messaging.routes.js';
|
|
21
21
|
export { createSqliteRoutes } from './sqlite.routes.js';
|
|
22
|
+
export { createAdminFeedbackRoutes } from './admin.feedback.routes.js';
|
|
22
23
|
export interface DashboardRoutesContext {
|
|
23
24
|
metricsCollector: MetricsCollector;
|
|
24
25
|
enableWebSockets: boolean;
|