@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
|
@@ -27,18 +27,54 @@
|
|
|
27
27
|
if (meta) meta.textContent = 'No backups available';
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
const warningBackups = backups.filter(function(b){ return b.warnings && b.warnings.length > 0; });
|
|
31
|
+
sel.innerHTML = backups.map(function(b) {
|
|
32
|
+
var warnTag = (b.warnings && b.warnings.length > 0) ? ' ⚠️' : '';
|
|
33
|
+
var label = b.id + ' • ' + b.instructionCount + ' files • ' + (b.schemaVersion || 'schema?') + ' • ' + new Date(b.createdAt).toLocaleString() + warnTag;
|
|
34
|
+
return '<option value="' + b.id + '">' + label + '</option>';
|
|
33
35
|
}).join('');
|
|
34
|
-
if (meta)
|
|
36
|
+
if (meta) {
|
|
37
|
+
var metaText = backups.length + ' backup(s)';
|
|
38
|
+
if (warningBackups.length > 0) {
|
|
39
|
+
metaText += ' — ⚠️ ' + warningBackups.length + ' with warnings';
|
|
40
|
+
}
|
|
41
|
+
meta.innerHTML = metaText;
|
|
42
|
+
}
|
|
43
|
+
if (data.hasWarnings) {
|
|
44
|
+
showBackupWarningBanner(warningBackups);
|
|
45
|
+
} else {
|
|
46
|
+
clearBackupWarningBanner();
|
|
47
|
+
}
|
|
35
48
|
} catch (err) {
|
|
36
49
|
console.warn('loadBackups error', err);
|
|
37
|
-
|
|
50
|
+
var sel = document.getElementById('backup-select');
|
|
38
51
|
if (sel) sel.innerHTML = '<option value="">(error loading)</option>';
|
|
52
|
+
showBackupWarningBanner([{ id: 'load-error', warnings: ['Failed to load backup list: ' + (err.message || err)] }]);
|
|
39
53
|
}
|
|
40
54
|
}
|
|
41
55
|
|
|
56
|
+
function showBackupWarningBanner(backupsWithWarnings) {
|
|
57
|
+
var container = document.getElementById('backup-restore-area');
|
|
58
|
+
if (!container) return;
|
|
59
|
+
clearBackupWarningBanner();
|
|
60
|
+
if (!backupsWithWarnings || backupsWithWarnings.length === 0) return;
|
|
61
|
+
var banner = document.createElement('div');
|
|
62
|
+
banner.id = 'backup-warning-banner';
|
|
63
|
+
banner.setAttribute('role', 'alert');
|
|
64
|
+
banner.style.cssText = 'background:#ff983022;border:1px solid #ff983066;border-radius:6px;padding:8px 12px;margin-top:8px;font-size:12px;color:#ff9830;';
|
|
65
|
+
var lines = ['<strong>⚠️ Backup warnings:</strong>'];
|
|
66
|
+
backupsWithWarnings.forEach(function(b) {
|
|
67
|
+
(b.warnings || []).forEach(function(w) { lines.push('• ' + w); });
|
|
68
|
+
});
|
|
69
|
+
banner.innerHTML = lines.join('<br>');
|
|
70
|
+
container.parentNode.insertBefore(banner, container.nextSibling);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function clearBackupWarningBanner() {
|
|
74
|
+
var existing = document.getElementById('backup-warning-banner');
|
|
75
|
+
if (existing) existing.remove();
|
|
76
|
+
}
|
|
77
|
+
|
|
42
78
|
async function restoreSelectedBackup() {
|
|
43
79
|
try {
|
|
44
80
|
const sel = document.getElementById('backup-select');
|
|
@@ -68,7 +104,7 @@
|
|
|
68
104
|
const data = await response.json();
|
|
69
105
|
|
|
70
106
|
if (data.success) {
|
|
71
|
-
if (typeof displayMaintenanceStatus === 'function') displayMaintenanceStatus(data.maintenance);
|
|
107
|
+
if (typeof displayMaintenanceStatus === 'function') displayMaintenanceStatus(data.maintenance); // lgtm[js/unneeded-defensive-code] — global may load asynchronously across dashboard panels
|
|
72
108
|
} else {
|
|
73
109
|
if (typeof showError === 'function') showError('Failed to load maintenance status');
|
|
74
110
|
}
|
|
@@ -221,9 +257,18 @@
|
|
|
221
257
|
try {
|
|
222
258
|
const res = await adminAuth.adminFetch('/api/admin/maintenance/backups/prune', { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({ retain })});
|
|
223
259
|
const data = await res.json();
|
|
224
|
-
if(data.success){
|
|
260
|
+
if(data.success){
|
|
261
|
+
var msg = data.message || 'Pruned';
|
|
262
|
+
if (data.errors && data.errors.length > 0) {
|
|
263
|
+
msg += '\n⚠️ ' + data.errors.length + ' error(s):\n' + data.errors.join('\n');
|
|
264
|
+
if (typeof showError === 'function') showError(msg);
|
|
265
|
+
} else {
|
|
266
|
+
if (typeof showSuccess === 'function') showSuccess(msg);
|
|
267
|
+
}
|
|
268
|
+
loadMaintenanceStatus(); loadBackups();
|
|
269
|
+
}
|
|
225
270
|
else { if (typeof showError === 'function') showError(data.error || 'Prune failed'); }
|
|
226
|
-
} catch(e){ if (typeof showError === 'function') showError('Prune failed'); }
|
|
271
|
+
} catch(e){ if (typeof showError === 'function') showError('Prune failed: ' + (e.message || e)); }
|
|
227
272
|
}
|
|
228
273
|
|
|
229
274
|
function filterBackupRows(){
|
|
@@ -566,10 +566,7 @@
|
|
|
566
566
|
|
|
567
567
|
// ── Helpers ─────────────────────────────────────────────────────────────
|
|
568
568
|
|
|
569
|
-
|
|
570
|
-
if (!str) return '';
|
|
571
|
-
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
572
|
-
}
|
|
569
|
+
const esc = window.adminUtils.escapeHtml;
|
|
573
570
|
|
|
574
571
|
function extractTitle(body) {
|
|
575
572
|
if (!body) return '';
|
|
@@ -23,7 +23,11 @@
|
|
|
23
23
|
try { displayMaintenanceInfo(maintenanceData.maintenance); } catch(e){ console.warn('displayMaintenanceInfo failed:', e); }
|
|
24
24
|
}
|
|
25
25
|
if(healthData && (healthData.success || ['ok','healthy','degraded'].includes(healthData.status))){
|
|
26
|
-
|
|
26
|
+
// /api/system/health wraps the actual payload under .data; older
|
|
27
|
+
// shapes use .systemHealth or .maintenance.systemHealth. Unwrap so
|
|
28
|
+
// displaySystemHealth sees status/uptime/checks at the top level
|
|
29
|
+
// instead of receiving the wrapper and degrading to 'unknown'.
|
|
30
|
+
displaySystemHealth(healthData.systemHealth || healthData.maintenance?.systemHealth || healthData.data || healthData);
|
|
27
31
|
}
|
|
28
32
|
} catch(err){
|
|
29
33
|
console.error('Error loading overview data:', err);
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
if (connEl) connEl.innerHTML = '<div class="error-message">Error loading active connections</div>';
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
try { if (typeof loadSessionHistory === 'function') loadSessionHistory(parseInt(document.getElementById('session-history-limit')?.value || '50', 10)); } catch {}
|
|
150
|
+
try { if (typeof loadSessionHistory === 'function') loadSessionHistory(parseInt(document.getElementById('session-history-limit')?.value || '50', 10)); } catch {} // lgtm[js/unneeded-defensive-code] — global may load asynchronously across dashboard panels
|
|
151
151
|
window.__lastSessionsCount = sessionsCount;
|
|
152
152
|
window.__lastConnectionsCount = connectionsCount;
|
|
153
153
|
updateSessionsNavBadge();
|
|
@@ -39,11 +39,53 @@
|
|
|
39
39
|
setTimeout(()=> d.remove(), 5000);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Show a rate-limit notification banner with countdown timer.
|
|
44
|
+
* Accessible: uses role="alert" and aria-live for screen readers.
|
|
45
|
+
*/
|
|
46
|
+
function showRateLimitBanner(retryAfterSeconds, tier) {
|
|
47
|
+
clearRateLimitBanner();
|
|
48
|
+
var container = document.querySelector('.admin-container');
|
|
49
|
+
if (!container) return;
|
|
50
|
+
var banner = document.createElement('div');
|
|
51
|
+
banner.id = 'rate-limit-banner';
|
|
52
|
+
banner.setAttribute('role', 'alert');
|
|
53
|
+
banner.setAttribute('aria-live', 'assertive');
|
|
54
|
+
banner.style.cssText = 'background:#f2495c22;border:1px solid #f2495c66;border-radius:6px;padding:10px 16px;margin:8px 0;font-size:13px;color:#f2495c;display:flex;align-items:center;gap:8px;';
|
|
55
|
+
var tierLabel = (tier === 'mutation') ? 'Mutation rate limit' : 'Rate limit';
|
|
56
|
+
var seconds = Math.max(1, Math.round(retryAfterSeconds));
|
|
57
|
+
banner.innerHTML = '<span style="font-size:18px;" aria-hidden="true">🚦</span>'
|
|
58
|
+
+ '<span><strong>' + tierLabel + ' exceeded.</strong> Retry in <span id="rl-countdown">' + seconds + '</span> second(s).</span>';
|
|
59
|
+
container.insertBefore(banner, container.firstChild.nextSibling);
|
|
60
|
+
|
|
61
|
+
var countdownEl = document.getElementById('rl-countdown');
|
|
62
|
+
var interval = setInterval(function() {
|
|
63
|
+
seconds--;
|
|
64
|
+
if (countdownEl) countdownEl.textContent = String(Math.max(0, seconds));
|
|
65
|
+
if (seconds <= 0) {
|
|
66
|
+
clearInterval(interval);
|
|
67
|
+
clearRateLimitBanner();
|
|
68
|
+
}
|
|
69
|
+
}, 1000);
|
|
70
|
+
banner._rlInterval = interval;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function clearRateLimitBanner() {
|
|
74
|
+
var existing = document.getElementById('rate-limit-banner');
|
|
75
|
+
if (existing) {
|
|
76
|
+
if (existing._rlInterval) clearInterval(existing._rlInterval);
|
|
77
|
+
existing.remove();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
42
81
|
// Expose minimal API
|
|
43
82
|
window.adminUtils = Object.assign(window.adminUtils || {}, {
|
|
44
83
|
escapeHtml,
|
|
45
84
|
formatBytes,
|
|
46
85
|
showError,
|
|
47
|
-
showSuccess
|
|
86
|
+
showSuccess,
|
|
87
|
+
showRateLimitBanner,
|
|
88
|
+
clearRateLimitBanner
|
|
48
89
|
});
|
|
90
|
+
if (!window.escapeHtml) window.escapeHtml = escapeHtml;
|
|
49
91
|
})(window);
|