@jagilber-org/index-server 1.19.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 +1218 -0
- package/CODE_OF_CONDUCT.md +49 -0
- package/CONTRIBUTING.md +75 -0
- package/LICENSE +21 -0
- package/README.md +523 -0
- package/SECURITY.md +50 -0
- package/dist/config/configUtils.d.ts +11 -0
- package/dist/config/configUtils.js +87 -0
- package/dist/config/dashboardConfig.d.ts +45 -0
- package/dist/config/dashboardConfig.js +63 -0
- package/dist/config/defaultValues.d.ts +61 -0
- package/dist/config/defaultValues.js +70 -0
- package/dist/config/dirConstants.d.ts +17 -0
- package/dist/config/dirConstants.js +28 -0
- package/dist/config/featureConfig.d.ts +61 -0
- package/dist/config/featureConfig.js +121 -0
- package/dist/config/runtimeConfig.d.ts +145 -0
- package/dist/config/runtimeConfig.js +334 -0
- package/dist/config/serverConfig.d.ts +90 -0
- package/dist/config/serverConfig.js +164 -0
- package/dist/dashboard/analytics/AnalyticsEngine.d.ts +142 -0
- package/dist/dashboard/analytics/AnalyticsEngine.js +373 -0
- package/dist/dashboard/analytics/BusinessIntelligence.d.ts +187 -0
- package/dist/dashboard/analytics/BusinessIntelligence.js +594 -0
- package/dist/dashboard/client/admin.html +2150 -0
- package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/chunk-SP2CHFBE.mjs +1 -0
- package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/render-T6MDALS3.mjs +27 -0
- package/dist/dashboard/client/css/admin.css +1466 -0
- package/dist/dashboard/client/js/admin.boot.js +359 -0
- package/dist/dashboard/client/js/admin.config.js +196 -0
- package/dist/dashboard/client/js/admin.embeddings.js +425 -0
- package/dist/dashboard/client/js/admin.graph.js +583 -0
- package/dist/dashboard/client/js/admin.instances.js +120 -0
- package/dist/dashboard/client/js/admin.instructions.js +552 -0
- package/dist/dashboard/client/js/admin.logs.js +113 -0
- package/dist/dashboard/client/js/admin.maintenance.js +354 -0
- package/dist/dashboard/client/js/admin.messaging.js +635 -0
- package/dist/dashboard/client/js/admin.monitor.js +181 -0
- package/dist/dashboard/client/js/admin.overview.js +221 -0
- package/dist/dashboard/client/js/admin.performance.js +61 -0
- package/dist/dashboard/client/js/admin.sessions.js +293 -0
- package/dist/dashboard/client/js/admin.sqlite.js +366 -0
- package/dist/dashboard/client/js/admin.utils.js +49 -0
- package/dist/dashboard/client/js/chart.umd.js +14 -0
- package/dist/dashboard/client/js/elk.bundled.js +6696 -0
- package/dist/dashboard/client/js/marked.umd.js +74 -0
- package/dist/dashboard/client/js/mermaid.min.js +3022 -0
- package/dist/dashboard/client/mermaid-layout-elk.esm.min.mjs +1 -0
- package/dist/dashboard/export/DataExporter.d.ts +169 -0
- package/dist/dashboard/export/DataExporter.js +737 -0
- package/dist/dashboard/export/exporters/csvExporter.d.ts +11 -0
- package/dist/dashboard/export/exporters/csvExporter.js +46 -0
- package/dist/dashboard/export/exporters/exportTypes.d.ts +89 -0
- package/dist/dashboard/export/exporters/exportTypes.js +5 -0
- package/dist/dashboard/export/exporters/jsonExporter.d.ts +7 -0
- package/dist/dashboard/export/exporters/jsonExporter.js +22 -0
- package/dist/dashboard/export/exporters/xmlExporter.d.ts +17 -0
- package/dist/dashboard/export/exporters/xmlExporter.js +175 -0
- package/dist/dashboard/integration/APIIntegration.d.ts +41 -0
- package/dist/dashboard/integration/APIIntegration.js +95 -0
- package/dist/dashboard/security/SecurityMonitor.d.ts +167 -0
- package/dist/dashboard/security/SecurityMonitor.js +559 -0
- package/dist/dashboard/server/AdminPanel.d.ts +183 -0
- package/dist/dashboard/server/AdminPanel.js +792 -0
- package/dist/dashboard/server/AdminPanelConfig.d.ts +42 -0
- package/dist/dashboard/server/AdminPanelConfig.js +80 -0
- package/dist/dashboard/server/AdminPanelState.d.ts +47 -0
- package/dist/dashboard/server/AdminPanelState.js +214 -0
- package/dist/dashboard/server/ApiRoutes.d.ts +17 -0
- package/dist/dashboard/server/ApiRoutes.js +149 -0
- package/dist/dashboard/server/DashboardServer.d.ts +49 -0
- package/dist/dashboard/server/DashboardServer.js +159 -0
- package/dist/dashboard/server/FileMetricsStorage.d.ts +49 -0
- package/dist/dashboard/server/FileMetricsStorage.js +195 -0
- package/dist/dashboard/server/HttpTransport.d.ts +23 -0
- package/dist/dashboard/server/HttpTransport.js +116 -0
- package/dist/dashboard/server/InstanceManager.d.ts +53 -0
- package/dist/dashboard/server/InstanceManager.js +284 -0
- package/dist/dashboard/server/KnowledgeStore.d.ts +35 -0
- package/dist/dashboard/server/KnowledgeStore.js +105 -0
- package/dist/dashboard/server/LeaderElection.d.ts +81 -0
- package/dist/dashboard/server/LeaderElection.js +268 -0
- package/dist/dashboard/server/MetricsCollector.d.ts +200 -0
- package/dist/dashboard/server/MetricsCollector.js +803 -0
- package/dist/dashboard/server/SessionPersistenceManager.d.ts +88 -0
- package/dist/dashboard/server/SessionPersistenceManager.js +457 -0
- package/dist/dashboard/server/ThinClient.d.ts +64 -0
- package/dist/dashboard/server/ThinClient.js +237 -0
- package/dist/dashboard/server/WebSocketManager.d.ts +161 -0
- package/dist/dashboard/server/WebSocketManager.js +463 -0
- package/dist/dashboard/server/httpLifecycle.d.ts +17 -0
- package/dist/dashboard/server/httpLifecycle.js +35 -0
- package/dist/dashboard/server/legacyDashboardHtml.d.ts +9 -0
- package/dist/dashboard/server/legacyDashboardHtml.js +618 -0
- package/dist/dashboard/server/legacyDashboardStyles.d.ts +5 -0
- package/dist/dashboard/server/legacyDashboardStyles.js +490 -0
- package/dist/dashboard/server/metricsAggregation.d.ts +252 -0
- package/dist/dashboard/server/metricsAggregation.js +206 -0
- package/dist/dashboard/server/metricsSerializer.d.ts +25 -0
- package/dist/dashboard/server/metricsSerializer.js +195 -0
- package/dist/dashboard/server/routes/admin.routes.d.ts +16 -0
- package/dist/dashboard/server/routes/admin.routes.js +596 -0
- package/dist/dashboard/server/routes/alerts.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/alerts.routes.js +93 -0
- package/dist/dashboard/server/routes/api.feedback.routes.d.ts +73 -0
- package/dist/dashboard/server/routes/api.feedback.routes.js +171 -0
- package/dist/dashboard/server/routes/api.instructions.routes.d.ts +101 -0
- package/dist/dashboard/server/routes/api.instructions.routes.js +213 -0
- package/dist/dashboard/server/routes/api.usage.routes.d.ts +57 -0
- package/dist/dashboard/server/routes/api.usage.routes.js +374 -0
- package/dist/dashboard/server/routes/embeddings.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/embeddings.routes.js +246 -0
- package/dist/dashboard/server/routes/graph.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/graph.routes.js +280 -0
- package/dist/dashboard/server/routes/index.d.ts +38 -0
- package/dist/dashboard/server/routes/index.js +194 -0
- package/dist/dashboard/server/routes/instances.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/instances.routes.js +35 -0
- package/dist/dashboard/server/routes/instructions.routes.d.ts +8 -0
- package/dist/dashboard/server/routes/instructions.routes.js +336 -0
- package/dist/dashboard/server/routes/knowledge.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/knowledge.routes.js +82 -0
- package/dist/dashboard/server/routes/logs.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/logs.routes.js +164 -0
- package/dist/dashboard/server/routes/messaging.routes.d.ts +16 -0
- package/dist/dashboard/server/routes/messaging.routes.js +293 -0
- package/dist/dashboard/server/routes/metrics.routes.d.ts +10 -0
- package/dist/dashboard/server/routes/metrics.routes.js +346 -0
- package/dist/dashboard/server/routes/scripts.routes.d.ts +9 -0
- package/dist/dashboard/server/routes/scripts.routes.js +84 -0
- package/dist/dashboard/server/routes/sqlite.routes.d.ts +9 -0
- package/dist/dashboard/server/routes/sqlite.routes.js +569 -0
- package/dist/dashboard/server/routes/status.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/status.routes.js +183 -0
- package/dist/dashboard/server/routes/synthetic.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/synthetic.routes.js +195 -0
- package/dist/dashboard/server/routes/tools.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/tools.routes.js +46 -0
- package/dist/dashboard/server/routes/usage.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/usage.routes.js +25 -0
- package/dist/dashboard/server/wsInit.d.ts +16 -0
- package/dist/dashboard/server/wsInit.js +35 -0
- package/dist/externalClientLib.d.ts +1 -0
- package/dist/externalClientLib.js +2 -0
- package/dist/minimal/index.d.ts +1 -0
- package/dist/minimal/index.js +140 -0
- package/dist/models/SessionPersistence.d.ts +115 -0
- package/dist/models/SessionPersistence.js +66 -0
- package/dist/models/instruction.d.ts +45 -0
- package/dist/models/instruction.js +2 -0
- package/dist/perf/benchmark.d.ts +1 -0
- package/dist/perf/benchmark.js +50 -0
- package/dist/portableClientWrapper.d.ts +1 -0
- package/dist/portableClientWrapper.js +2 -0
- package/dist/schemas/index.d.ts +128 -0
- package/dist/schemas/index.js +371 -0
- package/dist/scripts/runPerformanceBaseline.d.ts +1 -0
- package/dist/scripts/runPerformanceBaseline.js +17 -0
- package/dist/server/handshakeManager.d.ts +25 -0
- package/dist/server/handshakeManager.js +472 -0
- package/dist/server/index-server.d.ts +56 -0
- package/dist/server/index-server.js +822 -0
- package/dist/server/registry.d.ts +44 -0
- package/dist/server/registry.js +236 -0
- package/dist/server/sdkServer.d.ts +8 -0
- package/dist/server/sdkServer.js +299 -0
- package/dist/server/shutdownGuard.d.ts +41 -0
- package/dist/server/shutdownGuard.js +52 -0
- package/dist/server/thin-client.d.ts +22 -0
- package/dist/server/thin-client.js +111 -0
- package/dist/server/transport.d.ts +41 -0
- package/dist/server/transport.js +312 -0
- package/dist/server/transportFactory.d.ts +21 -0
- package/dist/server/transportFactory.js +429 -0
- package/dist/services/atomicFs.d.ts +22 -0
- package/dist/services/atomicFs.js +103 -0
- package/dist/services/auditLog.d.ts +38 -0
- package/dist/services/auditLog.js +142 -0
- package/dist/services/autoBackup.d.ts +14 -0
- package/dist/services/autoBackup.js +171 -0
- package/dist/services/autoSplit.d.ts +32 -0
- package/dist/services/autoSplit.js +113 -0
- package/dist/services/backupZip.d.ts +25 -0
- package/dist/services/backupZip.js +110 -0
- package/dist/services/bootstrapGating.d.ts +123 -0
- package/dist/services/bootstrapGating.js +221 -0
- package/dist/services/canonical.d.ts +23 -0
- package/dist/services/canonical.js +65 -0
- package/dist/services/categoryRules.d.ts +7 -0
- package/dist/services/categoryRules.js +37 -0
- package/dist/services/classificationService.d.ts +42 -0
- package/dist/services/classificationService.js +168 -0
- package/dist/services/embeddingService.d.ts +62 -0
- package/dist/services/embeddingService.js +259 -0
- package/dist/services/errors.d.ts +22 -0
- package/dist/services/errors.js +31 -0
- package/dist/services/featureFlags.d.ts +25 -0
- package/dist/services/featureFlags.js +89 -0
- package/dist/services/features.d.ts +13 -0
- package/dist/services/features.js +35 -0
- package/dist/services/handlers/instructions.add.d.ts +1 -0
- package/dist/services/handlers/instructions.add.js +496 -0
- package/dist/services/handlers/instructions.groom.d.ts +1 -0
- package/dist/services/handlers/instructions.groom.js +523 -0
- package/dist/services/handlers/instructions.import.d.ts +1 -0
- package/dist/services/handlers/instructions.import.js +173 -0
- package/dist/services/handlers/instructions.patch.d.ts +1 -0
- package/dist/services/handlers/instructions.patch.js +167 -0
- package/dist/services/handlers/instructions.query.d.ts +163 -0
- package/dist/services/handlers/instructions.query.js +522 -0
- package/dist/services/handlers/instructions.reload.d.ts +1 -0
- package/dist/services/handlers/instructions.reload.js +13 -0
- package/dist/services/handlers/instructions.remove.d.ts +1 -0
- package/dist/services/handlers/instructions.remove.js +118 -0
- package/dist/services/handlers/instructions.shared.d.ts +31 -0
- package/dist/services/handlers/instructions.shared.js +124 -0
- package/dist/services/handlers.activation.d.ts +1 -0
- package/dist/services/handlers.activation.js +203 -0
- package/dist/services/handlers.bootstrap.d.ts +1 -0
- package/dist/services/handlers.bootstrap.js +38 -0
- package/dist/services/handlers.dashboardConfig.d.ts +34 -0
- package/dist/services/handlers.dashboardConfig.js +108 -0
- package/dist/services/handlers.diagnostics.d.ts +1 -0
- package/dist/services/handlers.diagnostics.js +64 -0
- package/dist/services/handlers.feedback.d.ts +15 -0
- package/dist/services/handlers.feedback.js +378 -0
- package/dist/services/handlers.gates.d.ts +1 -0
- package/dist/services/handlers.gates.js +46 -0
- package/dist/services/handlers.graph.d.ts +53 -0
- package/dist/services/handlers.graph.js +231 -0
- package/dist/services/handlers.help.d.ts +1 -0
- package/dist/services/handlers.help.js +119 -0
- package/dist/services/handlers.instructionSchema.d.ts +1 -0
- package/dist/services/handlers.instructionSchema.js +227 -0
- package/dist/services/handlers.instructions.d.ts +8 -0
- package/dist/services/handlers.instructions.js +14 -0
- package/dist/services/handlers.instructionsDiagnostics.d.ts +1 -0
- package/dist/services/handlers.instructionsDiagnostics.js +14 -0
- package/dist/services/handlers.integrity.d.ts +1 -0
- package/dist/services/handlers.integrity.js +35 -0
- package/dist/services/handlers.manifest.d.ts +1 -0
- package/dist/services/handlers.manifest.js +24 -0
- package/dist/services/handlers.messaging.d.ts +12 -0
- package/dist/services/handlers.messaging.js +203 -0
- package/dist/services/handlers.metrics.d.ts +1 -0
- package/dist/services/handlers.metrics.js +43 -0
- package/dist/services/handlers.promote.d.ts +1 -0
- package/dist/services/handlers.promote.js +306 -0
- package/dist/services/handlers.prompt.d.ts +1 -0
- package/dist/services/handlers.prompt.js +7 -0
- package/dist/services/handlers.search.d.ts +69 -0
- package/dist/services/handlers.search.js +645 -0
- package/dist/services/handlers.testPrimitive.d.ts +1 -0
- package/dist/services/handlers.testPrimitive.js +5 -0
- package/dist/services/handlers.trace.d.ts +1 -0
- package/dist/services/handlers.trace.js +31 -0
- package/dist/services/handlers.usage.d.ts +1 -0
- package/dist/services/handlers.usage.js +11 -0
- package/dist/services/hotScore.d.ts +137 -0
- package/dist/services/hotScore.js +244 -0
- package/dist/services/indexContext.d.ts +117 -0
- package/dist/services/indexContext.js +968 -0
- package/dist/services/indexLoader.d.ts +44 -0
- package/dist/services/indexLoader.js +921 -0
- package/dist/services/indexRepository.d.ts +32 -0
- package/dist/services/indexRepository.js +71 -0
- package/dist/services/indexingService.d.ts +1 -0
- package/dist/services/indexingService.js +2 -0
- package/dist/services/instructions.dispatcher.d.ts +1 -0
- package/dist/services/instructions.dispatcher.js +231 -0
- package/dist/services/logPrefix.d.ts +1 -0
- package/dist/services/logPrefix.js +30 -0
- package/dist/services/logger.d.ts +52 -0
- package/dist/services/logger.js +268 -0
- package/dist/services/manifestManager.d.ts +82 -0
- package/dist/services/manifestManager.js +200 -0
- package/dist/services/messaging/agentMailbox.d.ts +60 -0
- package/dist/services/messaging/agentMailbox.js +353 -0
- package/dist/services/messaging/messagingPersistence.d.ts +20 -0
- package/dist/services/messaging/messagingPersistence.js +111 -0
- package/dist/services/messaging/messagingTypes.d.ts +150 -0
- package/dist/services/messaging/messagingTypes.js +66 -0
- package/dist/services/ownershipService.d.ts +1 -0
- package/dist/services/ownershipService.js +38 -0
- package/dist/services/performanceBaseline.d.ts +19 -0
- package/dist/services/performanceBaseline.js +210 -0
- package/dist/services/preflight.d.ts +12 -0
- package/dist/services/preflight.js +79 -0
- package/dist/services/promptReviewService.d.ts +44 -0
- package/dist/services/promptReviewService.js +101 -0
- package/dist/services/responseEnvelope.d.ts +6 -0
- package/dist/services/responseEnvelope.js +25 -0
- package/dist/services/seedBootstrap.d.ts +34 -0
- package/dist/services/seedBootstrap.js +427 -0
- package/dist/services/storage/factory.d.ts +17 -0
- package/dist/services/storage/factory.js +35 -0
- package/dist/services/storage/hashUtils.d.ts +11 -0
- package/dist/services/storage/hashUtils.js +35 -0
- package/dist/services/storage/index.d.ts +12 -0
- package/dist/services/storage/index.js +18 -0
- package/dist/services/storage/jsonFileStore.d.ts +32 -0
- package/dist/services/storage/jsonFileStore.js +241 -0
- package/dist/services/storage/migrationEngine.d.ts +35 -0
- package/dist/services/storage/migrationEngine.js +93 -0
- package/dist/services/storage/sqliteMessageStore.d.ts +53 -0
- package/dist/services/storage/sqliteMessageStore.js +146 -0
- package/dist/services/storage/sqliteSchema.d.ts +12 -0
- package/dist/services/storage/sqliteSchema.js +122 -0
- package/dist/services/storage/sqliteStore.d.ts +41 -0
- package/dist/services/storage/sqliteStore.js +339 -0
- package/dist/services/storage/sqliteUsageStore.d.ts +35 -0
- package/dist/services/storage/sqliteUsageStore.js +94 -0
- package/dist/services/storage/types.d.ts +171 -0
- package/dist/services/storage/types.js +12 -0
- package/dist/services/toolHandlers.d.ts +23 -0
- package/dist/services/toolHandlers.js +50 -0
- package/dist/services/toolRegistry.d.ts +20 -0
- package/dist/services/toolRegistry.js +490 -0
- package/dist/services/toolRegistry.zod.d.ts +10 -0
- package/dist/services/toolRegistry.zod.js +323 -0
- package/dist/services/tracing.d.ts +26 -0
- package/dist/services/tracing.js +260 -0
- package/dist/services/usageBuckets.d.ts +161 -0
- package/dist/services/usageBuckets.js +364 -0
- package/dist/services/validationService.d.ts +38 -0
- package/dist/services/validationService.js +125 -0
- package/dist/utils/BufferRing.d.ts +203 -0
- package/dist/utils/BufferRing.js +551 -0
- package/dist/utils/BufferRingExamples.d.ts +55 -0
- package/dist/utils/BufferRingExamples.js +188 -0
- package/dist/utils/envUtils.d.ts +42 -0
- package/dist/utils/envUtils.js +80 -0
- package/dist/utils/memoryMonitor.d.ts +83 -0
- package/dist/utils/memoryMonitor.js +275 -0
- package/dist/versioning/schemaVersion.d.ts +6 -0
- package/dist/versioning/schemaVersion.js +93 -0
- package/package.json +134 -0
- package/schemas/README.md +13 -0
- package/schemas/feedback-entry.schema.json +27 -0
- package/schemas/graph-export-v2.schema.json +60 -0
- package/schemas/index-server.code-schema.json +38477 -0
- package/schemas/instruction.schema.json +262 -0
- package/schemas/json-schema/SessionPersistence-persisted-admin-session.schema.json +54 -0
- package/schemas/json-schema/SessionPersistence-persisted-session-history-entry.schema.json +51 -0
- package/schemas/json-schema/SessionPersistence-persisted-web-socket-connection.schema.json +54 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-config.schema.json +110 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-data.schema.json +229 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-manifest.schema.json +109 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-metadata.schema.json +55 -0
- package/schemas/json-schema/instruction-audience-scope.schema.json +14 -0
- package/schemas/json-schema/instruction-content-type.schema.json +17 -0
- package/schemas/json-schema/instruction-instruction-entry.schema.json +206 -0
- package/schemas/json-schema/instruction-requirement-level.schema.json +16 -0
- package/schemas/manifest.json +78 -0
- package/schemas/manifest.schema.json +33 -0
- package/schemas/usage-batch.schema.json +16 -0
- package/schemas/usage-buckets.schema.json +30 -0
- package/schemas/usage-event.schema.json +17 -0
- package/scripts/copy-dashboard-assets.mjs +170 -0
- package/scripts/setup-hooks.cjs +28 -0
package/SECURITY.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported Versions
|
|
4
|
+
|
|
5
|
+
| Version | Supported |
|
|
6
|
+
|---------|--------------------|
|
|
7
|
+
| 1.x.x | ✅ Active support |
|
|
8
|
+
| < 1.0 | ❌ End of life |
|
|
9
|
+
|
|
10
|
+
## Reporting a Vulnerability
|
|
11
|
+
|
|
12
|
+
**Do NOT open public issues for security vulnerabilities.**
|
|
13
|
+
|
|
14
|
+
Please report suspected vulnerabilities privately using one of these methods:
|
|
15
|
+
|
|
16
|
+
1. **GitHub Security Advisories** (preferred) — create a new advisory on the [dev repository](https://github.com/jagilber-dev/index-server/security/advisories).
|
|
17
|
+
2. **Email** — contact the maintainer at the email listed in the repository's GitHub profile.
|
|
18
|
+
|
|
19
|
+
When reporting, include:
|
|
20
|
+
|
|
21
|
+
- Reproduction steps and environment details
|
|
22
|
+
- Impact assessment and affected versions
|
|
23
|
+
- Any relevant logs or proof-of-concept (redact sensitive data)
|
|
24
|
+
|
|
25
|
+
### Response Timeline
|
|
26
|
+
|
|
27
|
+
- **Acknowledgement**: within 48 hours of receipt
|
|
28
|
+
- **Detailed response**: within 7 business days
|
|
29
|
+
- **Fix or mitigation**: coordinated with reporter before public disclosure
|
|
30
|
+
|
|
31
|
+
## Vulnerability Disclosure
|
|
32
|
+
|
|
33
|
+
We follow responsible disclosure practices:
|
|
34
|
+
|
|
35
|
+
- Confirm the issue and assign a CVE if applicable.
|
|
36
|
+
- Prepare a fix and coordinate a release timeline with the reporter.
|
|
37
|
+
- Credit reporters who wish to be acknowledged in the advisory and changelog.
|
|
38
|
+
|
|
39
|
+
## Security Practices
|
|
40
|
+
|
|
41
|
+
- **Pre-commit hooks** scan for secrets and PII before code leaves the developer machine
|
|
42
|
+
- **Bootstrap gating** — all mutation operations require explicit bootstrap confirmation
|
|
43
|
+
- **Audit logging** — every Index mutation is logged with timestamp, action, and actor
|
|
44
|
+
- **Content scanning** — automated checks before public publishing via dual-repo workflow
|
|
45
|
+
- **Mutation controls** — `INDEX_SERVER_MUTATION` environment variable gates write operations
|
|
46
|
+
- **Auth key support** — optional `INDEX_SERVER_AUTH_KEY` for securing dashboard and API access
|
|
47
|
+
|
|
48
|
+
## Hardening Notes
|
|
49
|
+
|
|
50
|
+
This project includes enterprise hardening (see `HARDENING-DESIGN.md`). Keep auth secrets (`INDEX_SERVER_AUTH_KEY`) private. Avoid committing credentials or tokens.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type LogLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace';
|
|
2
|
+
export declare const CWD: string;
|
|
3
|
+
export declare function toAbsolute(raw: string | undefined, fallback?: string): string;
|
|
4
|
+
export declare function numberFromEnv(name: string, defaultValue: number): number;
|
|
5
|
+
export declare function optionalNumberFromEnv(name: string): number | undefined;
|
|
6
|
+
export declare function floatFromEnv(name: string, defaultValue: number): number;
|
|
7
|
+
export declare function optionalIntFromEnv(name: string): number | undefined;
|
|
8
|
+
export declare function clamp(value: number, min: number, max: number): number;
|
|
9
|
+
export declare function stringFromEnv(name: string, defaultValue: string): string;
|
|
10
|
+
export declare function parseCsvEnv(name: string): string[];
|
|
11
|
+
export declare function parseJSONMaybe<T = unknown>(src?: string): T | undefined;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CWD = void 0;
|
|
7
|
+
exports.toAbsolute = toAbsolute;
|
|
8
|
+
exports.numberFromEnv = numberFromEnv;
|
|
9
|
+
exports.optionalNumberFromEnv = optionalNumberFromEnv;
|
|
10
|
+
exports.floatFromEnv = floatFromEnv;
|
|
11
|
+
exports.optionalIntFromEnv = optionalIntFromEnv;
|
|
12
|
+
exports.clamp = clamp;
|
|
13
|
+
exports.stringFromEnv = stringFromEnv;
|
|
14
|
+
exports.parseCsvEnv = parseCsvEnv;
|
|
15
|
+
exports.parseJSONMaybe = parseJSONMaybe;
|
|
16
|
+
/**
|
|
17
|
+
* Shared low-level utilities used by config domain modules.
|
|
18
|
+
* No imports from other local config files — safe to import anywhere.
|
|
19
|
+
*/
|
|
20
|
+
const path_1 = __importDefault(require("path"));
|
|
21
|
+
exports.CWD = process.cwd();
|
|
22
|
+
function toAbsolute(raw, fallback) {
|
|
23
|
+
if (raw && raw.trim().length) {
|
|
24
|
+
return path_1.default.isAbsolute(raw) ? raw : path_1.default.resolve(exports.CWD, raw);
|
|
25
|
+
}
|
|
26
|
+
if (fallback && fallback.trim().length) {
|
|
27
|
+
return path_1.default.isAbsolute(fallback) ? fallback : path_1.default.resolve(exports.CWD, fallback);
|
|
28
|
+
}
|
|
29
|
+
return exports.CWD;
|
|
30
|
+
}
|
|
31
|
+
function numberFromEnv(name, defaultValue) {
|
|
32
|
+
const raw = process.env[name];
|
|
33
|
+
if (!raw)
|
|
34
|
+
return defaultValue;
|
|
35
|
+
const value = Number(raw);
|
|
36
|
+
return Number.isFinite(value) ? value : defaultValue;
|
|
37
|
+
}
|
|
38
|
+
function optionalNumberFromEnv(name) {
|
|
39
|
+
const raw = process.env[name];
|
|
40
|
+
if (raw === undefined)
|
|
41
|
+
return undefined;
|
|
42
|
+
const value = Number(raw);
|
|
43
|
+
return Number.isFinite(value) ? value : undefined;
|
|
44
|
+
}
|
|
45
|
+
function floatFromEnv(name, defaultValue) {
|
|
46
|
+
const raw = process.env[name];
|
|
47
|
+
if (!raw)
|
|
48
|
+
return defaultValue;
|
|
49
|
+
const value = Number.parseFloat(raw);
|
|
50
|
+
return Number.isFinite(value) ? value : defaultValue;
|
|
51
|
+
}
|
|
52
|
+
function optionalIntFromEnv(name) {
|
|
53
|
+
const raw = process.env[name];
|
|
54
|
+
if (raw === undefined)
|
|
55
|
+
return undefined;
|
|
56
|
+
const value = Number.parseInt(raw, 10);
|
|
57
|
+
return Number.isFinite(value) ? value : undefined;
|
|
58
|
+
}
|
|
59
|
+
function clamp(value, min, max) {
|
|
60
|
+
if (value < min)
|
|
61
|
+
return min;
|
|
62
|
+
if (value > max)
|
|
63
|
+
return max;
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
function stringFromEnv(name, defaultValue) {
|
|
67
|
+
const raw = process.env[name];
|
|
68
|
+
if (raw && raw.trim().length)
|
|
69
|
+
return raw;
|
|
70
|
+
return defaultValue;
|
|
71
|
+
}
|
|
72
|
+
function parseCsvEnv(name) {
|
|
73
|
+
const raw = process.env[name];
|
|
74
|
+
if (!raw)
|
|
75
|
+
return [];
|
|
76
|
+
return raw.split(/[,\s]+/).map(s => s.trim()).filter(Boolean);
|
|
77
|
+
}
|
|
78
|
+
function parseJSONMaybe(src) {
|
|
79
|
+
if (!src)
|
|
80
|
+
return undefined;
|
|
81
|
+
try {
|
|
82
|
+
return JSON.parse(src);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
interface DashboardTlsConfig {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
certPath?: string;
|
|
4
|
+
keyPath?: string;
|
|
5
|
+
caPath?: string;
|
|
6
|
+
}
|
|
7
|
+
interface DashboardHttpConfig {
|
|
8
|
+
enable: boolean;
|
|
9
|
+
port: number;
|
|
10
|
+
host: string;
|
|
11
|
+
maxPortTries: number;
|
|
12
|
+
enableHttpMetrics: boolean;
|
|
13
|
+
requestTimeoutMs: number;
|
|
14
|
+
maxConnections: number;
|
|
15
|
+
verboseLogging: boolean;
|
|
16
|
+
mutationEnabled: boolean;
|
|
17
|
+
adminApiKey?: string;
|
|
18
|
+
tls: DashboardTlsConfig;
|
|
19
|
+
}
|
|
20
|
+
interface DashboardAdminConfig {
|
|
21
|
+
maxSessionHistory: number;
|
|
22
|
+
backupsDir: string;
|
|
23
|
+
instructionsDir: string;
|
|
24
|
+
stateDir: string;
|
|
25
|
+
}
|
|
26
|
+
interface DashboardSessionPersistenceConfig {
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
persistenceDir: string;
|
|
29
|
+
backupIntegration: boolean;
|
|
30
|
+
retention: {
|
|
31
|
+
maxHistoryEntries: number;
|
|
32
|
+
maxHistoryDays: number;
|
|
33
|
+
maxConnectionHistoryDays: number;
|
|
34
|
+
};
|
|
35
|
+
persistenceIntervalMs: number;
|
|
36
|
+
deduplicationEnabled: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface DashboardConfig {
|
|
39
|
+
http: DashboardHttpConfig;
|
|
40
|
+
admin: DashboardAdminConfig;
|
|
41
|
+
sessionPersistence: DashboardSessionPersistenceConfig;
|
|
42
|
+
graphEnabled: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare function parseDashboardConfig(mutationEnabled: boolean, instructionsBaseDir: string): DashboardConfig;
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parseDashboardConfig = parseDashboardConfig;
|
|
7
|
+
/**
|
|
8
|
+
* Dashboard domain config: HTTP server, TLS, WebSocket, and session persistence settings.
|
|
9
|
+
*/
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const envUtils_1 = require("../utils/envUtils");
|
|
12
|
+
const SessionPersistence_js_1 = require("../models/SessionPersistence.js");
|
|
13
|
+
const configUtils_1 = require("./configUtils");
|
|
14
|
+
const dirConstants_1 = require("./dirConstants");
|
|
15
|
+
const defaultValues_1 = require("./defaultValues");
|
|
16
|
+
function parseDashboardConfig(mutationEnabled, instructionsBaseDir) {
|
|
17
|
+
const persistenceDefaults = SessionPersistence_js_1.DEFAULT_SESSION_PERSISTENCE_CONFIG;
|
|
18
|
+
const persistenceEnv = SessionPersistence_js_1.SESSION_PERSISTENCE_ENV_VARS;
|
|
19
|
+
const persistenceEnabled = (0, envUtils_1.parseBooleanEnv)(process.env[persistenceEnv.ENABLED], persistenceDefaults.enabled);
|
|
20
|
+
const persistenceDir = (0, configUtils_1.toAbsolute)(process.env[persistenceEnv.PERSISTENCE_DIR], persistenceDefaults.persistenceDir);
|
|
21
|
+
const persistenceInterval = (0, configUtils_1.numberFromEnv)(persistenceEnv.PERSISTENCE_INTERVAL_MS, persistenceDefaults.persistence.intervalMs);
|
|
22
|
+
const backupsDir = (0, configUtils_1.toAbsolute)(process.env.INDEX_SERVER_BACKUPS_DIR, path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.BACKUPS));
|
|
23
|
+
const stateDir = (0, configUtils_1.toAbsolute)(process.env.INDEX_SERVER_STATE_DIR, path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.DATA_STATE));
|
|
24
|
+
return {
|
|
25
|
+
http: {
|
|
26
|
+
enable: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_DASHBOARD'),
|
|
27
|
+
port: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_DASHBOARD_PORT', defaultValues_1.DEFAULT_PORTS.DASHBOARD),
|
|
28
|
+
host: (0, configUtils_1.stringFromEnv)('INDEX_SERVER_DASHBOARD_HOST', '127.0.0.1'),
|
|
29
|
+
maxPortTries: Math.max(1, (0, configUtils_1.numberFromEnv)('INDEX_SERVER_DASHBOARD_TRIES', defaultValues_1.DEFAULT_LIMITS.MAX_PORT_TRIES)),
|
|
30
|
+
enableHttpMetrics: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_HTTP_METRICS', true),
|
|
31
|
+
requestTimeoutMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_REQUEST_TIMEOUT', defaultValues_1.DEFAULT_TIMEOUTS_MS.REQUEST_TIMEOUT),
|
|
32
|
+
maxConnections: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_MAX_CONNECTIONS', defaultValues_1.DEFAULT_LIMITS.MAX_CONNECTIONS),
|
|
33
|
+
verboseLogging: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_VERBOSE_LOGGING'),
|
|
34
|
+
mutationEnabled,
|
|
35
|
+
adminApiKey: process.env.INDEX_SERVER_ADMIN_API_KEY || undefined,
|
|
36
|
+
tls: {
|
|
37
|
+
enabled: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_DASHBOARD_TLS'),
|
|
38
|
+
certPath: process.env.INDEX_SERVER_DASHBOARD_TLS_CERT || undefined,
|
|
39
|
+
keyPath: process.env.INDEX_SERVER_DASHBOARD_TLS_KEY || undefined,
|
|
40
|
+
caPath: process.env.INDEX_SERVER_DASHBOARD_TLS_CA || undefined,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
admin: {
|
|
44
|
+
maxSessionHistory: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_ADMIN_MAX_SESSION_HISTORY', defaultValues_1.DEFAULT_LIMITS.MAX_SESSION_HISTORY),
|
|
45
|
+
backupsDir,
|
|
46
|
+
instructionsDir: instructionsBaseDir,
|
|
47
|
+
stateDir,
|
|
48
|
+
},
|
|
49
|
+
sessionPersistence: {
|
|
50
|
+
enabled: persistenceEnabled,
|
|
51
|
+
persistenceDir,
|
|
52
|
+
backupIntegration: (0, envUtils_1.parseBooleanEnv)(process.env[persistenceEnv.BACKUP_INTEGRATION], persistenceDefaults.backupIntegration),
|
|
53
|
+
retention: {
|
|
54
|
+
maxHistoryEntries: (0, configUtils_1.numberFromEnv)(persistenceEnv.MAX_HISTORY_ENTRIES, persistenceDefaults.retention.maxHistoryEntries),
|
|
55
|
+
maxHistoryDays: (0, configUtils_1.numberFromEnv)(persistenceEnv.MAX_HISTORY_DAYS, persistenceDefaults.retention.maxHistoryDays),
|
|
56
|
+
maxConnectionHistoryDays: (0, configUtils_1.numberFromEnv)(persistenceEnv.MAX_CONNECTION_HISTORY_DAYS, persistenceDefaults.retention.maxConnectionHistoryDays),
|
|
57
|
+
},
|
|
58
|
+
persistenceIntervalMs: persistenceInterval,
|
|
59
|
+
deduplicationEnabled: (0, envUtils_1.parseBooleanEnv)(process.env[persistenceEnv.DEDUPLICATION_ENABLED], persistenceDefaults.deduplication.enabled),
|
|
60
|
+
},
|
|
61
|
+
graphEnabled: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_DASHBOARD_GRAPH'),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized default values for timeouts, limits, thresholds, and other
|
|
3
|
+
* numeric constants used across configuration modules.
|
|
4
|
+
* Import from here instead of hardcoding magic numbers.
|
|
5
|
+
*/
|
|
6
|
+
export declare const DEFAULT_TIMEOUTS_MS: {
|
|
7
|
+
readonly FATAL_EXIT_DELAY: 15;
|
|
8
|
+
readonly IDLE_KEEPALIVE: 30000;
|
|
9
|
+
readonly REQUEST_TIMEOUT: 30000;
|
|
10
|
+
readonly HEARTBEAT: 5000;
|
|
11
|
+
readonly STALE_THRESHOLD: 15000;
|
|
12
|
+
readonly POLL_INTERVAL: 10000;
|
|
13
|
+
readonly TOOLCALL_FLUSH: 5000;
|
|
14
|
+
readonly TOOLCALL_COMPACT: 300000;
|
|
15
|
+
readonly HEALTH_MIN_UPTIME: 1000;
|
|
16
|
+
readonly MESSAGING_SWEEP: 60000;
|
|
17
|
+
readonly AUTO_BACKUP_INTERVAL: 3600000;
|
|
18
|
+
readonly SESSION_PERSISTENCE_INTERVAL: 30000;
|
|
19
|
+
readonly AUTO_REFRESH: 300000;
|
|
20
|
+
};
|
|
21
|
+
export declare const DEFAULT_LIMITS: {
|
|
22
|
+
readonly MAX_CONNECTIONS: 100;
|
|
23
|
+
readonly MAX_PORT_TRIES: 10;
|
|
24
|
+
readonly MAX_BULK_DELETE: 5;
|
|
25
|
+
readonly MAX_FEEDBACK_ENTRIES: 1000;
|
|
26
|
+
readonly MAX_MESSAGES: 10000;
|
|
27
|
+
readonly MAX_SESSION_HISTORY: 200;
|
|
28
|
+
readonly BODY_MAX_LENGTH: 20000;
|
|
29
|
+
readonly BODY_MIN_LENGTH: 1000;
|
|
30
|
+
readonly BODY_ABS_MAX_LENGTH: 1000000;
|
|
31
|
+
readonly AUTO_BACKUP_MAX_COUNT: 10;
|
|
32
|
+
readonly TOOLCALL_CHUNK_SIZE: 250;
|
|
33
|
+
readonly LIST_CONCURRENCY: 8;
|
|
34
|
+
readonly LIST_MAX_DURATION_MS: 7000;
|
|
35
|
+
readonly ATOMIC_WRITE_RETRIES: 5;
|
|
36
|
+
readonly ATOMIC_WRITE_BACKOFF_MS: 10;
|
|
37
|
+
readonly READ_RETRIES: 3;
|
|
38
|
+
readonly READ_BACKOFF_MS: 8;
|
|
39
|
+
};
|
|
40
|
+
export declare const DEFAULT_THRESHOLDS: {
|
|
41
|
+
readonly MEMORY_THRESHOLD: 0.95;
|
|
42
|
+
readonly ERROR_RATE_THRESHOLD: 10;
|
|
43
|
+
readonly RESOURCE_CAPACITY: 720;
|
|
44
|
+
readonly RESOURCE_SAMPLE_INTERVAL_MS: 5000;
|
|
45
|
+
};
|
|
46
|
+
export declare const DEFAULT_PORTS: {
|
|
47
|
+
readonly DASHBOARD: 8787;
|
|
48
|
+
readonly LEADER: 9090;
|
|
49
|
+
readonly BOOTSTRAP_TOKEN_TTL_SEC: 900;
|
|
50
|
+
};
|
|
51
|
+
export declare const DEFAULT_GOVERNANCE: {
|
|
52
|
+
readonly HASH_CANON_VARIANTS: 1;
|
|
53
|
+
readonly HASH_CANON_VARIANTS_MAX: 8;
|
|
54
|
+
readonly HASH_IMPORT_SET_SIZE: 2;
|
|
55
|
+
readonly HASH_IMPORT_SET_SIZE_MAX: 5;
|
|
56
|
+
readonly USAGE_FLUSH_MS: 75;
|
|
57
|
+
};
|
|
58
|
+
export declare const DEFAULT_SEMANTIC: {
|
|
59
|
+
readonly MODEL: "Xenova/all-MiniLM-L6-v2";
|
|
60
|
+
readonly DEVICE: "cpu";
|
|
61
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Centralized default values for timeouts, limits, thresholds, and other
|
|
4
|
+
* numeric constants used across configuration modules.
|
|
5
|
+
* Import from here instead of hardcoding magic numbers.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.DEFAULT_SEMANTIC = exports.DEFAULT_GOVERNANCE = exports.DEFAULT_PORTS = exports.DEFAULT_THRESHOLDS = exports.DEFAULT_LIMITS = exports.DEFAULT_TIMEOUTS_MS = void 0;
|
|
9
|
+
// ── Timeouts (milliseconds) ──────────────────────────────────────────
|
|
10
|
+
exports.DEFAULT_TIMEOUTS_MS = {
|
|
11
|
+
FATAL_EXIT_DELAY: 15,
|
|
12
|
+
IDLE_KEEPALIVE: 30000,
|
|
13
|
+
REQUEST_TIMEOUT: 30000,
|
|
14
|
+
HEARTBEAT: 5000,
|
|
15
|
+
STALE_THRESHOLD: 15000,
|
|
16
|
+
POLL_INTERVAL: 10000,
|
|
17
|
+
TOOLCALL_FLUSH: 5000,
|
|
18
|
+
TOOLCALL_COMPACT: 300000,
|
|
19
|
+
HEALTH_MIN_UPTIME: 1000,
|
|
20
|
+
MESSAGING_SWEEP: 60000,
|
|
21
|
+
AUTO_BACKUP_INTERVAL: 3600000,
|
|
22
|
+
SESSION_PERSISTENCE_INTERVAL: 30000,
|
|
23
|
+
AUTO_REFRESH: 300000,
|
|
24
|
+
};
|
|
25
|
+
// ── Limits ───────────────────────────────────────────────────────────
|
|
26
|
+
exports.DEFAULT_LIMITS = {
|
|
27
|
+
MAX_CONNECTIONS: 100,
|
|
28
|
+
MAX_PORT_TRIES: 10,
|
|
29
|
+
MAX_BULK_DELETE: 5,
|
|
30
|
+
MAX_FEEDBACK_ENTRIES: 1000,
|
|
31
|
+
MAX_MESSAGES: 10000,
|
|
32
|
+
MAX_SESSION_HISTORY: 200,
|
|
33
|
+
BODY_MAX_LENGTH: 20000,
|
|
34
|
+
BODY_MIN_LENGTH: 1000,
|
|
35
|
+
BODY_ABS_MAX_LENGTH: 1000000,
|
|
36
|
+
AUTO_BACKUP_MAX_COUNT: 10,
|
|
37
|
+
TOOLCALL_CHUNK_SIZE: 250,
|
|
38
|
+
LIST_CONCURRENCY: 8,
|
|
39
|
+
LIST_MAX_DURATION_MS: 7000,
|
|
40
|
+
ATOMIC_WRITE_RETRIES: 5,
|
|
41
|
+
ATOMIC_WRITE_BACKOFF_MS: 10,
|
|
42
|
+
READ_RETRIES: 3,
|
|
43
|
+
READ_BACKOFF_MS: 8,
|
|
44
|
+
};
|
|
45
|
+
// ── Resource / health thresholds ─────────────────────────────────────
|
|
46
|
+
exports.DEFAULT_THRESHOLDS = {
|
|
47
|
+
MEMORY_THRESHOLD: 0.95,
|
|
48
|
+
ERROR_RATE_THRESHOLD: 10,
|
|
49
|
+
RESOURCE_CAPACITY: 720,
|
|
50
|
+
RESOURCE_SAMPLE_INTERVAL_MS: 5000,
|
|
51
|
+
};
|
|
52
|
+
// ── Network ──────────────────────────────────────────────────────────
|
|
53
|
+
exports.DEFAULT_PORTS = {
|
|
54
|
+
DASHBOARD: 8787,
|
|
55
|
+
LEADER: 9090,
|
|
56
|
+
BOOTSTRAP_TOKEN_TTL_SEC: 900,
|
|
57
|
+
};
|
|
58
|
+
// ── Governance ───────────────────────────────────────────────────────
|
|
59
|
+
exports.DEFAULT_GOVERNANCE = {
|
|
60
|
+
HASH_CANON_VARIANTS: 1,
|
|
61
|
+
HASH_CANON_VARIANTS_MAX: 8,
|
|
62
|
+
HASH_IMPORT_SET_SIZE: 2,
|
|
63
|
+
HASH_IMPORT_SET_SIZE_MAX: 5,
|
|
64
|
+
USAGE_FLUSH_MS: 75,
|
|
65
|
+
};
|
|
66
|
+
// ── Semantic search ──────────────────────────────────────────────────
|
|
67
|
+
exports.DEFAULT_SEMANTIC = {
|
|
68
|
+
MODEL: 'Xenova/all-MiniLM-L6-v2',
|
|
69
|
+
DEVICE: 'cpu',
|
|
70
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const DIR: {
|
|
2
|
+
readonly LOGS: "logs";
|
|
3
|
+
readonly LOGS_TRACE: string;
|
|
4
|
+
readonly LOGS_MCP_SERVER: string;
|
|
5
|
+
readonly LOGS_AUDIT: string;
|
|
6
|
+
readonly LOGS_NORMALIZATION: string;
|
|
7
|
+
readonly DATA: "data";
|
|
8
|
+
readonly DATA_MODELS: string;
|
|
9
|
+
readonly DATA_STATE: string;
|
|
10
|
+
readonly DATA_EMBEDDINGS: string;
|
|
11
|
+
readonly DATA_SQLITE: string;
|
|
12
|
+
readonly BACKUPS: "backups";
|
|
13
|
+
readonly INSTRUCTIONS: "instructions";
|
|
14
|
+
readonly METRICS: "metrics";
|
|
15
|
+
readonly FEEDBACK: "feedback";
|
|
16
|
+
readonly FLAGS: "flags.json";
|
|
17
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DIR = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Centralized directory / file path segments used across configuration modules.
|
|
9
|
+
* All values are relative — combine with CWD via `path.join(CWD, DIR.X)`.
|
|
10
|
+
*/
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
exports.DIR = {
|
|
13
|
+
LOGS: 'logs',
|
|
14
|
+
LOGS_TRACE: path_1.default.join('logs', 'trace'),
|
|
15
|
+
LOGS_MCP_SERVER: path_1.default.join('logs', 'mcp-server.log'),
|
|
16
|
+
LOGS_AUDIT: path_1.default.join('logs', 'instruction-transactions.log.jsonl'),
|
|
17
|
+
LOGS_NORMALIZATION: path_1.default.join('logs', 'index-normalization.log'),
|
|
18
|
+
DATA: 'data',
|
|
19
|
+
DATA_MODELS: path_1.default.join('data', 'models'),
|
|
20
|
+
DATA_STATE: path_1.default.join('data', 'state'),
|
|
21
|
+
DATA_EMBEDDINGS: path_1.default.join('data', 'embeddings.json'),
|
|
22
|
+
DATA_SQLITE: path_1.default.join('data', 'index.db'),
|
|
23
|
+
BACKUPS: 'backups',
|
|
24
|
+
INSTRUCTIONS: 'instructions',
|
|
25
|
+
METRICS: 'metrics',
|
|
26
|
+
FEEDBACK: 'feedback',
|
|
27
|
+
FLAGS: 'flags.json',
|
|
28
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export interface FeatureFlagsConfig {
|
|
2
|
+
file: string;
|
|
3
|
+
envNamespace: Record<string, string>;
|
|
4
|
+
indexFeatures: Set<string>;
|
|
5
|
+
}
|
|
6
|
+
export interface FeedbackConfig {
|
|
7
|
+
dir: string;
|
|
8
|
+
maxEntries: number;
|
|
9
|
+
}
|
|
10
|
+
export interface MessagingConfig {
|
|
11
|
+
dir: string;
|
|
12
|
+
maxMessages: number;
|
|
13
|
+
sweepIntervalMs: number;
|
|
14
|
+
}
|
|
15
|
+
type SemanticDevice = 'cpu' | 'cuda' | 'dml';
|
|
16
|
+
export interface SemanticConfig {
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
model: string;
|
|
19
|
+
cacheDir: string;
|
|
20
|
+
embeddingPath: string;
|
|
21
|
+
device: SemanticDevice;
|
|
22
|
+
localOnly: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface MinimalConfig {
|
|
25
|
+
debugOrdering: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface BootstrapSeedConfig {
|
|
28
|
+
autoSeed: boolean;
|
|
29
|
+
verbose: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface ValidationConfig {
|
|
32
|
+
mode: string;
|
|
33
|
+
}
|
|
34
|
+
export interface DynamicConfig {
|
|
35
|
+
dashboardConfig: Record<string, string>;
|
|
36
|
+
apiIntegration: Record<string, string>;
|
|
37
|
+
}
|
|
38
|
+
export interface GraphConfig {
|
|
39
|
+
includePrimaryEdges: boolean;
|
|
40
|
+
largeCategoryCap: number;
|
|
41
|
+
explicitIncludePrimaryEnv: boolean;
|
|
42
|
+
explicitLargeCategoryEnv: boolean;
|
|
43
|
+
signature: string;
|
|
44
|
+
}
|
|
45
|
+
export declare function parseFeatureFlagsConfig(): FeatureFlagsConfig;
|
|
46
|
+
export declare function parseFeedbackConfig(): FeedbackConfig;
|
|
47
|
+
export declare function parseMessagingConfig(): MessagingConfig;
|
|
48
|
+
export declare function parseSemanticConfig(): SemanticConfig;
|
|
49
|
+
export declare function parseMinimalConfig(): MinimalConfig;
|
|
50
|
+
export declare function parseBootstrapSeedConfig(): BootstrapSeedConfig;
|
|
51
|
+
export declare function parseValidationConfig(): ValidationConfig;
|
|
52
|
+
export declare function parseDynamicConfig(): DynamicConfig;
|
|
53
|
+
export declare function parseGraphConfig(): GraphConfig;
|
|
54
|
+
export interface StorageConfig {
|
|
55
|
+
backend: 'json' | 'sqlite';
|
|
56
|
+
sqlitePath: string;
|
|
57
|
+
sqliteWal: boolean;
|
|
58
|
+
sqliteMigrateOnStart: boolean;
|
|
59
|
+
}
|
|
60
|
+
export declare function parseStorageConfig(): StorageConfig;
|
|
61
|
+
export {};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parseFeatureFlagsConfig = parseFeatureFlagsConfig;
|
|
7
|
+
exports.parseFeedbackConfig = parseFeedbackConfig;
|
|
8
|
+
exports.parseMessagingConfig = parseMessagingConfig;
|
|
9
|
+
exports.parseSemanticConfig = parseSemanticConfig;
|
|
10
|
+
exports.parseMinimalConfig = parseMinimalConfig;
|
|
11
|
+
exports.parseBootstrapSeedConfig = parseBootstrapSeedConfig;
|
|
12
|
+
exports.parseValidationConfig = parseValidationConfig;
|
|
13
|
+
exports.parseDynamicConfig = parseDynamicConfig;
|
|
14
|
+
exports.parseGraphConfig = parseGraphConfig;
|
|
15
|
+
exports.parseStorageConfig = parseStorageConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Feature domain config: feature flags, feedback, messaging, semantic search,
|
|
18
|
+
* minimal mode, bootstrap seed, validation, dynamic config, and graph settings.
|
|
19
|
+
*/
|
|
20
|
+
const path_1 = __importDefault(require("path"));
|
|
21
|
+
const envUtils_1 = require("../utils/envUtils");
|
|
22
|
+
const configUtils_1 = require("./configUtils");
|
|
23
|
+
const dirConstants_1 = require("./dirConstants");
|
|
24
|
+
const defaultValues_1 = require("./defaultValues");
|
|
25
|
+
function parseFeatureFlagsConfig() {
|
|
26
|
+
const envNamespace = {};
|
|
27
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
28
|
+
if (key.startsWith('INDEX_SERVER_FLAG_') && typeof value === 'string') {
|
|
29
|
+
envNamespace[key.substring('INDEX_SERVER_FLAG_'.length).toLowerCase()] = value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
file: (0, configUtils_1.toAbsolute)(process.env.INDEX_SERVER_FLAGS_FILE, path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.FLAGS)),
|
|
34
|
+
envNamespace,
|
|
35
|
+
indexFeatures: new Set((0, configUtils_1.parseCsvEnv)('INDEX_SERVER_FEATURES')),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function parseFeedbackConfig() {
|
|
39
|
+
return {
|
|
40
|
+
dir: (0, configUtils_1.toAbsolute)(process.env.INDEX_SERVER_FEEDBACK_DIR, path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.FEEDBACK)),
|
|
41
|
+
maxEntries: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_FEEDBACK_MAX_ENTRIES', defaultValues_1.DEFAULT_LIMITS.MAX_FEEDBACK_ENTRIES),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function parseMessagingConfig() {
|
|
45
|
+
return {
|
|
46
|
+
dir: (0, configUtils_1.toAbsolute)(process.env.INDEX_SERVER_MESSAGING_DIR, path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.DATA)),
|
|
47
|
+
maxMessages: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_MESSAGING_MAX', defaultValues_1.DEFAULT_LIMITS.MAX_MESSAGES),
|
|
48
|
+
sweepIntervalMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_MESSAGING_SWEEP_MS', defaultValues_1.DEFAULT_TIMEOUTS_MS.MESSAGING_SWEEP),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function parseSemanticConfig() {
|
|
52
|
+
const validDevices = ['cpu', 'cuda', 'dml'];
|
|
53
|
+
const rawDevice = (process.env.INDEX_SERVER_SEMANTIC_DEVICE || 'cpu').toLowerCase();
|
|
54
|
+
const device = validDevices.includes(rawDevice) ? rawDevice : 'cpu';
|
|
55
|
+
return {
|
|
56
|
+
enabled: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_SEMANTIC_ENABLED'),
|
|
57
|
+
model: process.env.INDEX_SERVER_SEMANTIC_MODEL || defaultValues_1.DEFAULT_SEMANTIC.MODEL,
|
|
58
|
+
cacheDir: (0, configUtils_1.toAbsolute)(process.env.INDEX_SERVER_SEMANTIC_CACHE_DIR, path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.DATA_MODELS)),
|
|
59
|
+
embeddingPath: (0, configUtils_1.toAbsolute)(process.env.INDEX_SERVER_EMBEDDING_PATH, path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.DATA_EMBEDDINGS)),
|
|
60
|
+
device,
|
|
61
|
+
localOnly: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_SEMANTIC_LOCAL_ONLY', true),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function parseMinimalConfig() {
|
|
65
|
+
return {
|
|
66
|
+
debugOrdering: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_MINIMAL_DEBUG'),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function parseBootstrapSeedConfig() {
|
|
70
|
+
return {
|
|
71
|
+
autoSeed: process.env.INDEX_SERVER_AUTO_SEED === undefined ? true : process.env.INDEX_SERVER_AUTO_SEED !== '0',
|
|
72
|
+
verbose: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_SEED_VERBOSE'),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function parseValidationConfig() {
|
|
76
|
+
return {
|
|
77
|
+
mode: (process.env.INDEX_SERVER_VALIDATION_MODE || 'zod').toLowerCase(),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function parseDynamicConfig() {
|
|
81
|
+
return {
|
|
82
|
+
dashboardConfig: {},
|
|
83
|
+
apiIntegration: {},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function parseGraphConfig() {
|
|
87
|
+
const includeRaw = process.env.INDEX_SERVER_GRAPH_INCLUDE_PRIMARY_EDGES;
|
|
88
|
+
const includePrimaryEdges = includeRaw === undefined ? true : (0, envUtils_1.parseBooleanEnv)(includeRaw, true);
|
|
89
|
+
const largeRaw = process.env.INDEX_SERVER_GRAPH_LARGE_CATEGORY_CAP;
|
|
90
|
+
let largeCategoryCap = Number.POSITIVE_INFINITY;
|
|
91
|
+
let explicitLargeCategoryEnv = false;
|
|
92
|
+
if (largeRaw && largeRaw.trim().length) {
|
|
93
|
+
const parsed = Number.parseInt(largeRaw, 10);
|
|
94
|
+
if (Number.isFinite(parsed) && parsed >= 0) {
|
|
95
|
+
largeCategoryCap = parsed;
|
|
96
|
+
}
|
|
97
|
+
explicitLargeCategoryEnv = true;
|
|
98
|
+
}
|
|
99
|
+
const explicitIncludePrimaryEnv = includeRaw !== undefined;
|
|
100
|
+
const signature = `${includePrimaryEdges ? 'P1' : 'P0'}:${explicitLargeCategoryEnv ? largeCategoryCap : 'INF'}`;
|
|
101
|
+
return {
|
|
102
|
+
includePrimaryEdges,
|
|
103
|
+
largeCategoryCap,
|
|
104
|
+
explicitIncludePrimaryEnv,
|
|
105
|
+
explicitLargeCategoryEnv,
|
|
106
|
+
signature,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function parseStorageConfig() {
|
|
110
|
+
const raw = (process.env.INDEX_SERVER_STORAGE_BACKEND || 'json').toLowerCase();
|
|
111
|
+
const backend = (raw === 'sqlite' ? 'sqlite' : 'json');
|
|
112
|
+
if (backend === 'sqlite') {
|
|
113
|
+
console.warn('[config] ⚠️ EXPERIMENTAL: SQLite storage backend selected. Limited testing has been performed. Use at your own risk.');
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
backend,
|
|
117
|
+
sqlitePath: (0, configUtils_1.toAbsolute)(process.env.INDEX_SERVER_SQLITE_PATH, path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.DATA_SQLITE)),
|
|
118
|
+
sqliteWal: (0, envUtils_1.parseBooleanEnv)(process.env.INDEX_SERVER_SQLITE_WAL, true),
|
|
119
|
+
sqliteMigrateOnStart: (0, envUtils_1.parseBooleanEnv)(process.env.INDEX_SERVER_SQLITE_MIGRATE_ON_START, true),
|
|
120
|
+
};
|
|
121
|
+
}
|