@jagilber-org/index-server 1.22.1 → 1.26.4

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 (190) hide show
  1. package/CHANGELOG.md +91 -2
  2. package/CODE_OF_CONDUCT.md +2 -0
  3. package/CONTRIBUTING.md +32 -2
  4. package/README.md +82 -19
  5. package/SECURITY.md +17 -5
  6. package/dist/config/dashboardConfig.d.ts +3 -0
  7. package/dist/config/dashboardConfig.js +3 -0
  8. package/dist/config/defaultValues.d.ts +1 -1
  9. package/dist/config/defaultValues.js +1 -1
  10. package/dist/config/featureConfig.d.ts +2 -0
  11. package/dist/config/featureConfig.js +6 -1
  12. package/dist/config/runtimeConfig.d.ts +1 -1
  13. package/dist/config/runtimeConfig.js +8 -9
  14. package/dist/dashboard/client/admin.html +170 -53
  15. package/dist/dashboard/client/css/admin.css +132 -0
  16. package/dist/dashboard/client/js/admin.auth.js +25 -11
  17. package/dist/dashboard/client/js/admin.config.js +1 -1
  18. package/dist/dashboard/client/js/admin.feedback.js +328 -0
  19. package/dist/dashboard/client/js/admin.graph.js +120 -18
  20. package/dist/dashboard/client/js/admin.instructions.js +27 -13
  21. package/dist/dashboard/client/js/admin.logs.js +1 -5
  22. package/dist/dashboard/client/js/admin.maintenance.js +53 -8
  23. package/dist/dashboard/client/js/admin.messaging.js +1 -4
  24. package/dist/dashboard/client/js/admin.overview.js +5 -1
  25. package/dist/dashboard/client/js/admin.sessions.js +1 -1
  26. package/dist/dashboard/client/js/admin.utils.js +43 -1
  27. package/dist/dashboard/client/js/mermaid.min.js +813 -537
  28. package/dist/dashboard/export/DataExporter.js +2 -1
  29. package/dist/dashboard/server/AdminPanel.d.ts +3 -0
  30. package/dist/dashboard/server/AdminPanel.js +132 -35
  31. package/dist/dashboard/server/ApiRoutes.js +40 -9
  32. package/dist/dashboard/server/DashboardServer.js +1 -1
  33. package/dist/dashboard/server/FileMetricsStorage.d.ts +19 -0
  34. package/dist/dashboard/server/FileMetricsStorage.js +52 -5
  35. package/dist/dashboard/server/HttpTransport.js +6 -0
  36. package/dist/dashboard/server/InstanceManager.js +7 -2
  37. package/dist/dashboard/server/KnowledgeStore.js +7 -2
  38. package/dist/dashboard/server/MetricsCollector.d.ts +16 -0
  39. package/dist/dashboard/server/MetricsCollector.js +113 -17
  40. package/dist/dashboard/server/legacyDashboardHtml.js +7 -2
  41. package/dist/dashboard/server/middleware/ensureLoadedMiddleware.d.ts +1 -1
  42. package/dist/dashboard/server/middleware/ensureLoadedMiddleware.js +8 -3
  43. package/dist/dashboard/server/routes/admin.feedback.routes.d.ts +15 -0
  44. package/dist/dashboard/server/routes/admin.feedback.routes.js +188 -0
  45. package/dist/dashboard/server/routes/admin.routes.js +35 -27
  46. package/dist/dashboard/server/routes/alerts.routes.js +4 -3
  47. package/dist/dashboard/server/routes/api.feedback.routes.js +2 -1
  48. package/dist/dashboard/server/routes/api.usage.routes.js +8 -7
  49. package/dist/dashboard/server/routes/embeddings.routes.d.ts +2 -1
  50. package/dist/dashboard/server/routes/embeddings.routes.js +18 -9
  51. package/dist/dashboard/server/routes/graph.routes.js +10 -13
  52. package/dist/dashboard/server/routes/index.d.ts +1 -0
  53. package/dist/dashboard/server/routes/index.js +74 -39
  54. package/dist/dashboard/server/routes/instances.routes.js +2 -1
  55. package/dist/dashboard/server/routes/instructions.routes.js +46 -27
  56. package/dist/dashboard/server/routes/knowledge.routes.js +4 -3
  57. package/dist/dashboard/server/routes/logs.routes.js +5 -4
  58. package/dist/dashboard/server/routes/messaging.routes.js +15 -14
  59. package/dist/dashboard/server/routes/metrics.routes.js +14 -13
  60. package/dist/dashboard/server/routes/scripts.routes.js +6 -3
  61. package/dist/dashboard/server/routes/status.routes.js +5 -4
  62. package/dist/dashboard/server/routes/synthetic.routes.js +3 -2
  63. package/dist/dashboard/server/routes/usage.routes.js +2 -1
  64. package/dist/dashboard/server/utils/escapeHtml.d.ts +1 -0
  65. package/dist/dashboard/server/utils/escapeHtml.js +11 -0
  66. package/dist/dashboard/server/utils/pathContainment.d.ts +1 -0
  67. package/dist/dashboard/server/utils/pathContainment.js +15 -0
  68. package/dist/dashboard/server/wsInit.js +2 -2
  69. package/dist/lib/mcpStdioLogging.d.ts +165 -0
  70. package/dist/lib/mcpStdioLogging.js +287 -0
  71. package/dist/schemas/index.d.ts +37 -2
  72. package/dist/schemas/index.js +27 -3
  73. package/dist/server/backgroundServicesStartup.d.ts +7 -1
  74. package/dist/server/backgroundServicesStartup.js +25 -8
  75. package/dist/server/certInit.d.ts +97 -0
  76. package/dist/server/certInit.js +359 -0
  77. package/dist/server/certInit.types.d.ts +92 -0
  78. package/dist/server/certInit.types.js +34 -0
  79. package/dist/server/handshake/fallbackFrames.d.ts +31 -0
  80. package/dist/server/handshake/fallbackFrames.js +38 -0
  81. package/dist/server/handshake/initializeDetector.d.ts +31 -0
  82. package/dist/server/handshake/initializeDetector.js +88 -0
  83. package/dist/server/handshake/protocol.d.ts +15 -0
  84. package/dist/server/handshake/protocol.js +37 -0
  85. package/dist/server/handshake/readyEmitter.d.ts +6 -0
  86. package/dist/server/handshake/readyEmitter.js +88 -0
  87. package/dist/server/handshake/safetyFallbacks.d.ts +1 -0
  88. package/dist/server/handshake/safetyFallbacks.js +134 -0
  89. package/dist/server/handshake/stdinSniffer.d.ts +1 -0
  90. package/dist/server/handshake/stdinSniffer.js +260 -0
  91. package/dist/server/handshake/tracing.d.ts +16 -0
  92. package/dist/server/handshake/tracing.js +95 -0
  93. package/dist/server/handshakeManager.d.ts +23 -23
  94. package/dist/server/handshakeManager.js +36 -466
  95. package/dist/server/index-server.d.ts +23 -0
  96. package/dist/server/index-server.js +194 -9
  97. package/dist/server/mcpReadOnlySurfaces.d.ts +44 -0
  98. package/dist/server/mcpReadOnlySurfaces.js +297 -0
  99. package/dist/server/sdkServer.js +69 -7
  100. package/dist/server/transport.d.ts +5 -6
  101. package/dist/server/transport.js +46 -64
  102. package/dist/server/transportFactory.d.ts +3 -9
  103. package/dist/server/transportFactory.js +18 -380
  104. package/dist/services/atomicFs.d.ts +3 -0
  105. package/dist/services/atomicFs.js +171 -13
  106. package/dist/services/auditLog.d.ts +17 -2
  107. package/dist/services/auditLog.js +75 -14
  108. package/dist/services/bootstrapGating.js +1 -1
  109. package/dist/services/categoryRules.d.ts +10 -0
  110. package/dist/services/categoryRules.js +17 -0
  111. package/dist/services/classificationService.js +7 -5
  112. package/dist/services/embeddingService.d.ts +27 -11
  113. package/dist/services/embeddingService.js +51 -14
  114. package/dist/services/feedbackStorage.d.ts +39 -0
  115. package/dist/services/feedbackStorage.js +88 -0
  116. package/dist/services/handlers/instructions.add.js +429 -317
  117. package/dist/services/handlers/instructions.groom.js +128 -31
  118. package/dist/services/handlers/instructions.import.js +56 -23
  119. package/dist/services/handlers/instructions.patch.js +43 -32
  120. package/dist/services/handlers/instructions.query.js +20 -29
  121. package/dist/services/handlers/instructions.shared.d.ts +54 -0
  122. package/dist/services/handlers/instructions.shared.js +126 -1
  123. package/dist/services/handlers.activation.js +83 -81
  124. package/dist/services/handlers.dashboardConfig.d.ts +2 -2
  125. package/dist/services/handlers.dashboardConfig.js +1 -2
  126. package/dist/services/handlers.diagnostics.js +75 -54
  127. package/dist/services/handlers.feedback.d.ts +4 -11
  128. package/dist/services/handlers.feedback.js +11 -333
  129. package/dist/services/handlers.gates.js +69 -37
  130. package/dist/services/handlers.graph.js +2 -2
  131. package/dist/services/handlers.help.js +2 -2
  132. package/dist/services/handlers.instructionSchema.js +4 -2
  133. package/dist/services/handlers.integrity.js +42 -22
  134. package/dist/services/handlers.messaging.js +1 -1
  135. package/dist/services/handlers.metrics.js +51 -6
  136. package/dist/services/handlers.prompt.js +10 -2
  137. package/dist/services/handlers.search.js +94 -44
  138. package/dist/services/handlers.trace.js +1 -1
  139. package/dist/services/handlers.usage.js +38 -7
  140. package/dist/services/indexContext.d.ts +21 -1
  141. package/dist/services/indexContext.js +263 -78
  142. package/dist/services/indexLoader.d.ts +1 -0
  143. package/dist/services/indexLoader.js +28 -8
  144. package/dist/services/instructionRecordValidation.d.ts +39 -0
  145. package/dist/services/instructionRecordValidation.js +388 -0
  146. package/dist/services/instructions.dispatcher.js +4 -4
  147. package/dist/services/loaderSchemaValidator.d.ts +15 -0
  148. package/dist/services/loaderSchemaValidator.js +69 -0
  149. package/dist/services/logger.js +11 -2
  150. package/dist/services/mcpLogBridge.d.ts +49 -0
  151. package/dist/services/mcpLogBridge.js +83 -0
  152. package/dist/services/ownershipService.js +18 -8
  153. package/dist/services/performanceBaseline.js +23 -22
  154. package/dist/services/promptReviewService.d.ts +3 -1
  155. package/dist/services/promptReviewService.js +41 -13
  156. package/dist/services/regexSafety.d.ts +6 -0
  157. package/dist/services/regexSafety.js +46 -0
  158. package/dist/services/seedBootstrap.js +1 -1
  159. package/dist/services/storage/factory.d.ts +14 -1
  160. package/dist/services/storage/factory.js +61 -1
  161. package/dist/services/storage/jsonEmbeddingStore.d.ts +15 -0
  162. package/dist/services/storage/jsonEmbeddingStore.js +83 -0
  163. package/dist/services/storage/jsonFileStore.d.ts +3 -1
  164. package/dist/services/storage/jsonFileStore.js +8 -6
  165. package/dist/services/storage/migrationEngine.d.ts +13 -0
  166. package/dist/services/storage/migrationEngine.js +31 -0
  167. package/dist/services/storage/sqliteEmbeddingStore.d.ts +30 -0
  168. package/dist/services/storage/sqliteEmbeddingStore.js +222 -0
  169. package/dist/services/storage/sqliteStore.d.ts +3 -1
  170. package/dist/services/storage/sqliteStore.js +2 -2
  171. package/dist/services/storage/types.d.ts +48 -1
  172. package/dist/services/toolRegistry.js +77 -67
  173. package/dist/services/toolRegistry.zod.js +89 -86
  174. package/dist/services/tracing.js +5 -4
  175. package/dist/utils/envUtils.d.ts +4 -0
  176. package/dist/utils/envUtils.js +7 -0
  177. package/dist/utils/memoryMonitor.js +11 -10
  178. package/package.json +12 -4
  179. package/schemas/instruction.schema.json +38 -1
  180. package/scripts/copy-dashboard-assets.mjs +1 -1
  181. package/scripts/dist/README.md +1 -1
  182. package/scripts/generate-certs.mjs +201 -0
  183. package/scripts/setup-wizard.mjs +781 -0
  184. package/server.json +20 -0
  185. package/dist/externalClientLib.d.ts +0 -1
  186. package/dist/externalClientLib.js +0 -2
  187. package/dist/portableClientWrapper.d.ts +0 -1
  188. package/dist/portableClientWrapper.js +0 -2
  189. package/dist/services/indexingService.d.ts +0 -1
  190. 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
- console.error('[API] Get admin config error:', error);
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
- console.error('[Admin] Failed to get flags snapshot:', error);
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
- console.warn('[API] feature flag update failed:', e instanceof Error ? e.message : e);
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
- console.error('[API] Update admin config error:', error);
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
- console.error('[API] Get admin sessions error:', error);
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
- console.error('[API] Get active connections error:', error);
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
- console.error('[API] Create admin session error:', error);
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
- console.error('[API] Terminate admin session error:', error);
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
- console.error('[API] Get maintenance info error:', error);
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
- console.error('[API] Set maintenance mode error:', error);
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
- console.error('[Admin] Normalize failed:', err);
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
- console.error('[API] Perform backup error:', error);
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
- res.json({ success: true, backups, count: backups.length, timestamp: Date.now() });
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
- console.error('[API] List backups error:', error);
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
- console.error('[API] Restore backup error:', error);
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
- console.error('[API] Delete backup error:', error);
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
- res.json({ success: true, message: result.message, pruned: result.pruned, timestamp: Date.now() });
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
- console.error('[API] Prune backups error:', error);
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
- res.json(result.bundle);
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
- console.error('[API] Export backup error:', error);
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
- console.error('[API] Import backup error:', error);
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
- console.error('[API] Get admin stats error:', error);
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
- console.error('[API] Get session history error:', error);
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
- console.error('[API] Restart server error:', error);
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
- console.error('[API] Clear caches error:', error);
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
- console.error('[API] Clear metrics error:', error);
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
- console.error('[API] Active alerts error:', error);
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
- console.error('[API] Resolve alert error:', error);
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
- console.error('[API] Generate alert error:', error);
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
- console.error('Webhook execution error:', error);
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
- console.error('Request transform error:', error);
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
- console.error('Response transform error:', error);
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
- console.warn('Response validation failed for endpoint:', endpointId);
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
- console.warn('OAuth2 authentication not fully implemented');
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
- console.error('Field mapping transform error:', error);
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
- console.error('API monitoring callback error:', error);
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
- console.error('Queued request execution error:', error);
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
- export declare function createEmbeddingsRoutes(embeddingPathOverride?: string): Router;
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
- const embeddingPath = embeddingPathOverride ?? (0, runtimeConfig_js_1.getRuntimeConfig)().semantic.embeddingPath ?? '';
156
- if (!embeddingPath || !node_fs_1.default.existsSync(embeddingPath)) {
157
- return res.status(404).json({
158
- success: false,
159
- error: 'Embeddings file not found',
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
- // eslint-disable-next-line no-console
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
- // eslint-disable-next-line no-console
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:_-]+)\[[^\]]*\]/; // lgtm[js/bad-tag-filter] — IDs escaped with regex special char replacement
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
- console.warn('[graph/mermaid][filter-failed]', filterErr);
149
+ (0, logger_js_1.logWarn)('[graph/mermaid][filter-failed]', filterErr);
151
150
  }
152
151
  }
153
152
  try {
154
- // eslint-disable-next-line no-console
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
- // eslint-disable-next-line no-console
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
- console.error('[graph/categories] Error:', err);
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
- console.error('[graph/instructions] Error:', err);
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
- console.error('[graph/relations] Error:', err);
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;