@jagilber-org/index-server 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/CHANGELOG.md +1354 -0
  2. package/CODE_OF_CONDUCT.md +49 -0
  3. package/CONTRIBUTING.md +99 -0
  4. package/LICENSE +21 -0
  5. package/README.md +228 -0
  6. package/SECURITY.md +50 -0
  7. package/dist/config/configUtils.d.ts +11 -0
  8. package/dist/config/configUtils.js +87 -0
  9. package/dist/config/dashboardConfig.d.ts +46 -0
  10. package/dist/config/dashboardConfig.js +67 -0
  11. package/dist/config/defaultValues.d.ts +63 -0
  12. package/dist/config/defaultValues.js +72 -0
  13. package/dist/config/dirConstants.d.ts +18 -0
  14. package/dist/config/dirConstants.js +29 -0
  15. package/dist/config/featureConfig.d.ts +61 -0
  16. package/dist/config/featureConfig.js +121 -0
  17. package/dist/config/runtimeConfig.d.ts +151 -0
  18. package/dist/config/runtimeConfig.js +380 -0
  19. package/dist/config/serverConfig.d.ts +90 -0
  20. package/dist/config/serverConfig.js +167 -0
  21. package/dist/dashboard/analytics/AnalyticsEngine.d.ts +142 -0
  22. package/dist/dashboard/analytics/AnalyticsEngine.js +373 -0
  23. package/dist/dashboard/analytics/BusinessIntelligence.d.ts +187 -0
  24. package/dist/dashboard/analytics/BusinessIntelligence.js +594 -0
  25. package/dist/dashboard/client/admin.html +2175 -0
  26. package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/chunk-SP2CHFBE.mjs +1 -0
  27. package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/render-T6MDALS3.mjs +27 -0
  28. package/dist/dashboard/client/css/admin.css +1587 -0
  29. package/dist/dashboard/client/js/admin.auth.js +179 -0
  30. package/dist/dashboard/client/js/admin.boot.js +359 -0
  31. package/dist/dashboard/client/js/admin.config.js +196 -0
  32. package/dist/dashboard/client/js/admin.embeddings.js +426 -0
  33. package/dist/dashboard/client/js/admin.graph.js +615 -0
  34. package/dist/dashboard/client/js/admin.instances.js +120 -0
  35. package/dist/dashboard/client/js/admin.instructions.js +579 -0
  36. package/dist/dashboard/client/js/admin.logs.js +113 -0
  37. package/dist/dashboard/client/js/admin.maintenance.js +393 -0
  38. package/dist/dashboard/client/js/admin.messaging.js +636 -0
  39. package/dist/dashboard/client/js/admin.monitor.js +184 -0
  40. package/dist/dashboard/client/js/admin.overview.js +221 -0
  41. package/dist/dashboard/client/js/admin.performance.js +61 -0
  42. package/dist/dashboard/client/js/admin.sessions.js +292 -0
  43. package/dist/dashboard/client/js/admin.sqlite.js +373 -0
  44. package/dist/dashboard/client/js/admin.utils.js +49 -0
  45. package/dist/dashboard/client/js/chart.umd.js +14 -0
  46. package/dist/dashboard/client/js/elk.bundled.js +6696 -0
  47. package/dist/dashboard/client/js/marked.umd.js +74 -0
  48. package/dist/dashboard/client/js/mermaid.min.js +3022 -0
  49. package/dist/dashboard/client/mermaid-layout-elk.esm.min.mjs +1 -0
  50. package/dist/dashboard/export/DataExporter.d.ts +169 -0
  51. package/dist/dashboard/export/DataExporter.js +737 -0
  52. package/dist/dashboard/export/exporters/csvExporter.d.ts +11 -0
  53. package/dist/dashboard/export/exporters/csvExporter.js +47 -0
  54. package/dist/dashboard/export/exporters/exportTypes.d.ts +89 -0
  55. package/dist/dashboard/export/exporters/exportTypes.js +5 -0
  56. package/dist/dashboard/export/exporters/jsonExporter.d.ts +7 -0
  57. package/dist/dashboard/export/exporters/jsonExporter.js +23 -0
  58. package/dist/dashboard/export/exporters/xmlExporter.d.ts +17 -0
  59. package/dist/dashboard/export/exporters/xmlExporter.js +176 -0
  60. package/dist/dashboard/integration/APIIntegration.d.ts +41 -0
  61. package/dist/dashboard/integration/APIIntegration.js +95 -0
  62. package/dist/dashboard/security/SecurityMonitor.d.ts +167 -0
  63. package/dist/dashboard/security/SecurityMonitor.js +560 -0
  64. package/dist/dashboard/server/AdminPanel.d.ts +195 -0
  65. package/dist/dashboard/server/AdminPanel.js +861 -0
  66. package/dist/dashboard/server/AdminPanelConfig.d.ts +42 -0
  67. package/dist/dashboard/server/AdminPanelConfig.js +80 -0
  68. package/dist/dashboard/server/AdminPanelState.d.ts +47 -0
  69. package/dist/dashboard/server/AdminPanelState.js +215 -0
  70. package/dist/dashboard/server/ApiRoutes.d.ts +17 -0
  71. package/dist/dashboard/server/ApiRoutes.js +184 -0
  72. package/dist/dashboard/server/DashboardServer.d.ts +49 -0
  73. package/dist/dashboard/server/DashboardServer.js +160 -0
  74. package/dist/dashboard/server/FileMetricsStorage.d.ts +49 -0
  75. package/dist/dashboard/server/FileMetricsStorage.js +196 -0
  76. package/dist/dashboard/server/HttpTransport.d.ts +23 -0
  77. package/dist/dashboard/server/HttpTransport.js +116 -0
  78. package/dist/dashboard/server/InstanceManager.d.ts +53 -0
  79. package/dist/dashboard/server/InstanceManager.js +295 -0
  80. package/dist/dashboard/server/KnowledgeStore.d.ts +35 -0
  81. package/dist/dashboard/server/KnowledgeStore.js +105 -0
  82. package/dist/dashboard/server/LeaderElection.d.ts +81 -0
  83. package/dist/dashboard/server/LeaderElection.js +268 -0
  84. package/dist/dashboard/server/MetricsCollector.d.ts +200 -0
  85. package/dist/dashboard/server/MetricsCollector.js +810 -0
  86. package/dist/dashboard/server/SessionPersistenceManager.d.ts +88 -0
  87. package/dist/dashboard/server/SessionPersistenceManager.js +458 -0
  88. package/dist/dashboard/server/ThinClient.d.ts +64 -0
  89. package/dist/dashboard/server/ThinClient.js +237 -0
  90. package/dist/dashboard/server/WebSocketManager.d.ts +161 -0
  91. package/dist/dashboard/server/WebSocketManager.js +448 -0
  92. package/dist/dashboard/server/httpLifecycle.d.ts +17 -0
  93. package/dist/dashboard/server/httpLifecycle.js +35 -0
  94. package/dist/dashboard/server/legacyDashboardHtml.d.ts +9 -0
  95. package/dist/dashboard/server/legacyDashboardHtml.js +618 -0
  96. package/dist/dashboard/server/legacyDashboardStyles.d.ts +5 -0
  97. package/dist/dashboard/server/legacyDashboardStyles.js +490 -0
  98. package/dist/dashboard/server/metricsAggregation.d.ts +252 -0
  99. package/dist/dashboard/server/metricsAggregation.js +210 -0
  100. package/dist/dashboard/server/metricsSerializer.d.ts +25 -0
  101. package/dist/dashboard/server/metricsSerializer.js +195 -0
  102. package/dist/dashboard/server/middleware/ensureLoadedMiddleware.d.ts +25 -0
  103. package/dist/dashboard/server/middleware/ensureLoadedMiddleware.js +24 -0
  104. package/dist/dashboard/server/routes/admin.routes.d.ts +16 -0
  105. package/dist/dashboard/server/routes/admin.routes.js +574 -0
  106. package/dist/dashboard/server/routes/adminAuth.d.ts +4 -0
  107. package/dist/dashboard/server/routes/adminAuth.js +46 -0
  108. package/dist/dashboard/server/routes/alerts.routes.d.ts +7 -0
  109. package/dist/dashboard/server/routes/alerts.routes.js +91 -0
  110. package/dist/dashboard/server/routes/api.feedback.routes.d.ts +73 -0
  111. package/dist/dashboard/server/routes/api.feedback.routes.js +171 -0
  112. package/dist/dashboard/server/routes/api.instructions.routes.d.ts +101 -0
  113. package/dist/dashboard/server/routes/api.instructions.routes.js +213 -0
  114. package/dist/dashboard/server/routes/api.usage.routes.d.ts +57 -0
  115. package/dist/dashboard/server/routes/api.usage.routes.js +374 -0
  116. package/dist/dashboard/server/routes/embeddings.routes.d.ts +6 -0
  117. package/dist/dashboard/server/routes/embeddings.routes.js +246 -0
  118. package/dist/dashboard/server/routes/graph.routes.d.ts +6 -0
  119. package/dist/dashboard/server/routes/graph.routes.js +279 -0
  120. package/dist/dashboard/server/routes/index.d.ts +39 -0
  121. package/dist/dashboard/server/routes/index.js +229 -0
  122. package/dist/dashboard/server/routes/instances.routes.d.ts +6 -0
  123. package/dist/dashboard/server/routes/instances.routes.js +35 -0
  124. package/dist/dashboard/server/routes/instructions.routes.d.ts +8 -0
  125. package/dist/dashboard/server/routes/instructions.routes.js +268 -0
  126. package/dist/dashboard/server/routes/knowledge.routes.d.ts +6 -0
  127. package/dist/dashboard/server/routes/knowledge.routes.js +80 -0
  128. package/dist/dashboard/server/routes/logs.routes.d.ts +6 -0
  129. package/dist/dashboard/server/routes/logs.routes.js +166 -0
  130. package/dist/dashboard/server/routes/messaging.routes.d.ts +16 -0
  131. package/dist/dashboard/server/routes/messaging.routes.js +307 -0
  132. package/dist/dashboard/server/routes/metrics.routes.d.ts +10 -0
  133. package/dist/dashboard/server/routes/metrics.routes.js +335 -0
  134. package/dist/dashboard/server/routes/scripts.routes.d.ts +9 -0
  135. package/dist/dashboard/server/routes/scripts.routes.js +84 -0
  136. package/dist/dashboard/server/routes/sqlite.routes.d.ts +9 -0
  137. package/dist/dashboard/server/routes/sqlite.routes.js +570 -0
  138. package/dist/dashboard/server/routes/status.routes.d.ts +7 -0
  139. package/dist/dashboard/server/routes/status.routes.js +179 -0
  140. package/dist/dashboard/server/routes/synthetic.routes.d.ts +7 -0
  141. package/dist/dashboard/server/routes/synthetic.routes.js +197 -0
  142. package/dist/dashboard/server/routes/tools.routes.d.ts +6 -0
  143. package/dist/dashboard/server/routes/tools.routes.js +47 -0
  144. package/dist/dashboard/server/routes/usage.routes.d.ts +6 -0
  145. package/dist/dashboard/server/routes/usage.routes.js +26 -0
  146. package/dist/dashboard/server/wsInit.d.ts +16 -0
  147. package/dist/dashboard/server/wsInit.js +35 -0
  148. package/dist/externalClientLib.d.ts +1 -0
  149. package/dist/externalClientLib.js +2 -0
  150. package/dist/minimal/index.d.ts +1 -0
  151. package/dist/minimal/index.js +140 -0
  152. package/dist/models/SessionPersistence.d.ts +115 -0
  153. package/dist/models/SessionPersistence.js +66 -0
  154. package/dist/models/instruction.d.ts +46 -0
  155. package/dist/models/instruction.js +2 -0
  156. package/dist/perf/benchmark.d.ts +1 -0
  157. package/dist/perf/benchmark.js +50 -0
  158. package/dist/portableClientWrapper.d.ts +1 -0
  159. package/dist/portableClientWrapper.js +2 -0
  160. package/dist/schemas/index.d.ts +132 -0
  161. package/dist/schemas/index.js +372 -0
  162. package/dist/scripts/runPerformanceBaseline.d.ts +1 -0
  163. package/dist/scripts/runPerformanceBaseline.js +17 -0
  164. package/dist/server/backgroundServicesStartup.d.ts +3 -0
  165. package/dist/server/backgroundServicesStartup.js +51 -0
  166. package/dist/server/handshakeManager.d.ts +25 -0
  167. package/dist/server/handshakeManager.js +470 -0
  168. package/dist/server/index-server.d.ts +38 -0
  169. package/dist/server/index-server.js +620 -0
  170. package/dist/server/multiInstanceStartup.d.ts +6 -0
  171. package/dist/server/multiInstanceStartup.js +132 -0
  172. package/dist/server/registry.d.ts +44 -0
  173. package/dist/server/registry.js +236 -0
  174. package/dist/server/sdkServer.d.ts +8 -0
  175. package/dist/server/sdkServer.js +299 -0
  176. package/dist/server/shutdownGuard.d.ts +41 -0
  177. package/dist/server/shutdownGuard.js +52 -0
  178. package/dist/server/startupDiagnostics.d.ts +2 -0
  179. package/dist/server/startupDiagnostics.js +33 -0
  180. package/dist/server/thin-client.d.ts +22 -0
  181. package/dist/server/thin-client.js +111 -0
  182. package/dist/server/transport.d.ts +41 -0
  183. package/dist/server/transport.js +312 -0
  184. package/dist/server/transportFactory.d.ts +21 -0
  185. package/dist/server/transportFactory.js +429 -0
  186. package/dist/services/atomicFs.d.ts +22 -0
  187. package/dist/services/atomicFs.js +103 -0
  188. package/dist/services/auditLog.d.ts +38 -0
  189. package/dist/services/auditLog.js +142 -0
  190. package/dist/services/autoBackup.d.ts +14 -0
  191. package/dist/services/autoBackup.js +171 -0
  192. package/dist/services/autoSplit.d.ts +32 -0
  193. package/dist/services/autoSplit.js +113 -0
  194. package/dist/services/backupZip.d.ts +25 -0
  195. package/dist/services/backupZip.js +112 -0
  196. package/dist/services/bootstrapGating.d.ts +123 -0
  197. package/dist/services/bootstrapGating.js +221 -0
  198. package/dist/services/canonical.d.ts +23 -0
  199. package/dist/services/canonical.js +65 -0
  200. package/dist/services/categoryRules.d.ts +7 -0
  201. package/dist/services/categoryRules.js +37 -0
  202. package/dist/services/classificationService.d.ts +42 -0
  203. package/dist/services/classificationService.js +168 -0
  204. package/dist/services/embeddingService.d.ts +62 -0
  205. package/dist/services/embeddingService.js +264 -0
  206. package/dist/services/errors.d.ts +22 -0
  207. package/dist/services/errors.js +31 -0
  208. package/dist/services/featureFlags.d.ts +25 -0
  209. package/dist/services/featureFlags.js +89 -0
  210. package/dist/services/features.d.ts +13 -0
  211. package/dist/services/features.js +35 -0
  212. package/dist/services/handlers/instructions.add.d.ts +1 -0
  213. package/dist/services/handlers/instructions.add.js +510 -0
  214. package/dist/services/handlers/instructions.groom.d.ts +1 -0
  215. package/dist/services/handlers/instructions.groom.js +575 -0
  216. package/dist/services/handlers/instructions.import.d.ts +1 -0
  217. package/dist/services/handlers/instructions.import.js +205 -0
  218. package/dist/services/handlers/instructions.patch.d.ts +1 -0
  219. package/dist/services/handlers/instructions.patch.js +121 -0
  220. package/dist/services/handlers/instructions.query.d.ts +159 -0
  221. package/dist/services/handlers/instructions.query.js +469 -0
  222. package/dist/services/handlers/instructions.reload.d.ts +1 -0
  223. package/dist/services/handlers/instructions.reload.js +13 -0
  224. package/dist/services/handlers/instructions.remove.d.ts +1 -0
  225. package/dist/services/handlers/instructions.remove.js +122 -0
  226. package/dist/services/handlers/instructions.shared.d.ts +32 -0
  227. package/dist/services/handlers/instructions.shared.js +91 -0
  228. package/dist/services/handlers.activation.d.ts +1 -0
  229. package/dist/services/handlers.activation.js +203 -0
  230. package/dist/services/handlers.bootstrap.d.ts +1 -0
  231. package/dist/services/handlers.bootstrap.js +38 -0
  232. package/dist/services/handlers.dashboardConfig.d.ts +34 -0
  233. package/dist/services/handlers.dashboardConfig.js +110 -0
  234. package/dist/services/handlers.diagnostics.d.ts +1 -0
  235. package/dist/services/handlers.diagnostics.js +64 -0
  236. package/dist/services/handlers.feedback.d.ts +15 -0
  237. package/dist/services/handlers.feedback.js +389 -0
  238. package/dist/services/handlers.gates.d.ts +1 -0
  239. package/dist/services/handlers.gates.js +47 -0
  240. package/dist/services/handlers.graph.d.ts +53 -0
  241. package/dist/services/handlers.graph.js +231 -0
  242. package/dist/services/handlers.help.d.ts +1 -0
  243. package/dist/services/handlers.help.js +119 -0
  244. package/dist/services/handlers.instructionSchema.d.ts +1 -0
  245. package/dist/services/handlers.instructionSchema.js +227 -0
  246. package/dist/services/handlers.instructions.d.ts +8 -0
  247. package/dist/services/handlers.instructions.js +14 -0
  248. package/dist/services/handlers.instructionsDiagnostics.d.ts +1 -0
  249. package/dist/services/handlers.instructionsDiagnostics.js +14 -0
  250. package/dist/services/handlers.integrity.d.ts +1 -0
  251. package/dist/services/handlers.integrity.js +35 -0
  252. package/dist/services/handlers.manifest.d.ts +1 -0
  253. package/dist/services/handlers.manifest.js +24 -0
  254. package/dist/services/handlers.messaging.d.ts +12 -0
  255. package/dist/services/handlers.messaging.js +203 -0
  256. package/dist/services/handlers.metrics.d.ts +1 -0
  257. package/dist/services/handlers.metrics.js +43 -0
  258. package/dist/services/handlers.promote.d.ts +1 -0
  259. package/dist/services/handlers.promote.js +326 -0
  260. package/dist/services/handlers.prompt.d.ts +1 -0
  261. package/dist/services/handlers.prompt.js +7 -0
  262. package/dist/services/handlers.search.d.ts +69 -0
  263. package/dist/services/handlers.search.js +669 -0
  264. package/dist/services/handlers.testPrimitive.d.ts +1 -0
  265. package/dist/services/handlers.testPrimitive.js +5 -0
  266. package/dist/services/handlers.trace.d.ts +1 -0
  267. package/dist/services/handlers.trace.js +35 -0
  268. package/dist/services/handlers.usage.d.ts +1 -0
  269. package/dist/services/handlers.usage.js +11 -0
  270. package/dist/services/hotScore.d.ts +137 -0
  271. package/dist/services/hotScore.js +244 -0
  272. package/dist/services/indexContext.d.ts +117 -0
  273. package/dist/services/indexContext.js +989 -0
  274. package/dist/services/indexLoader.d.ts +44 -0
  275. package/dist/services/indexLoader.js +920 -0
  276. package/dist/services/indexRepository.d.ts +32 -0
  277. package/dist/services/indexRepository.js +71 -0
  278. package/dist/services/indexingService.d.ts +1 -0
  279. package/dist/services/indexingService.js +2 -0
  280. package/dist/services/instructions.dispatcher.d.ts +1 -0
  281. package/dist/services/instructions.dispatcher.js +231 -0
  282. package/dist/services/logPrefix.d.ts +1 -0
  283. package/dist/services/logPrefix.js +30 -0
  284. package/dist/services/logger.d.ts +52 -0
  285. package/dist/services/logger.js +268 -0
  286. package/dist/services/manifestManager.d.ts +82 -0
  287. package/dist/services/manifestManager.js +200 -0
  288. package/dist/services/messaging/agentMailbox.d.ts +60 -0
  289. package/dist/services/messaging/agentMailbox.js +353 -0
  290. package/dist/services/messaging/messagingPersistence.d.ts +20 -0
  291. package/dist/services/messaging/messagingPersistence.js +111 -0
  292. package/dist/services/messaging/messagingTypes.d.ts +150 -0
  293. package/dist/services/messaging/messagingTypes.js +66 -0
  294. package/dist/services/ownershipService.d.ts +1 -0
  295. package/dist/services/ownershipService.js +36 -0
  296. package/dist/services/performanceBaseline.d.ts +19 -0
  297. package/dist/services/performanceBaseline.js +210 -0
  298. package/dist/services/preflight.d.ts +12 -0
  299. package/dist/services/preflight.js +79 -0
  300. package/dist/services/promptReviewService.d.ts +44 -0
  301. package/dist/services/promptReviewService.js +101 -0
  302. package/dist/services/responseEnvelope.d.ts +6 -0
  303. package/dist/services/responseEnvelope.js +25 -0
  304. package/dist/services/seedBootstrap.d.ts +34 -0
  305. package/dist/services/seedBootstrap.js +259 -0
  306. package/dist/services/storage/factory.d.ts +17 -0
  307. package/dist/services/storage/factory.js +35 -0
  308. package/dist/services/storage/hashUtils.d.ts +11 -0
  309. package/dist/services/storage/hashUtils.js +35 -0
  310. package/dist/services/storage/index.d.ts +12 -0
  311. package/dist/services/storage/index.js +18 -0
  312. package/dist/services/storage/jsonFileStore.d.ts +32 -0
  313. package/dist/services/storage/jsonFileStore.js +241 -0
  314. package/dist/services/storage/migrationEngine.d.ts +35 -0
  315. package/dist/services/storage/migrationEngine.js +93 -0
  316. package/dist/services/storage/sqliteMessageStore.d.ts +53 -0
  317. package/dist/services/storage/sqliteMessageStore.js +146 -0
  318. package/dist/services/storage/sqliteSchema.d.ts +12 -0
  319. package/dist/services/storage/sqliteSchema.js +123 -0
  320. package/dist/services/storage/sqliteStore.d.ts +42 -0
  321. package/dist/services/storage/sqliteStore.js +361 -0
  322. package/dist/services/storage/sqliteUsageStore.d.ts +35 -0
  323. package/dist/services/storage/sqliteUsageStore.js +94 -0
  324. package/dist/services/storage/types.d.ts +171 -0
  325. package/dist/services/storage/types.js +12 -0
  326. package/dist/services/toolHandlers.d.ts +23 -0
  327. package/dist/services/toolHandlers.js +50 -0
  328. package/dist/services/toolRegistry.d.ts +20 -0
  329. package/dist/services/toolRegistry.js +490 -0
  330. package/dist/services/toolRegistry.zod.d.ts +10 -0
  331. package/dist/services/toolRegistry.zod.js +325 -0
  332. package/dist/services/tracing.d.ts +26 -0
  333. package/dist/services/tracing.js +260 -0
  334. package/dist/services/usageBuckets.d.ts +161 -0
  335. package/dist/services/usageBuckets.js +364 -0
  336. package/dist/services/validationService.d.ts +38 -0
  337. package/dist/services/validationService.js +125 -0
  338. package/dist/utils/BufferRing.d.ts +203 -0
  339. package/dist/utils/BufferRing.js +551 -0
  340. package/dist/utils/BufferRingExamples.d.ts +55 -0
  341. package/dist/utils/BufferRingExamples.js +188 -0
  342. package/dist/utils/envUtils.d.ts +42 -0
  343. package/dist/utils/envUtils.js +80 -0
  344. package/dist/utils/memoryMonitor.d.ts +83 -0
  345. package/dist/utils/memoryMonitor.js +275 -0
  346. package/dist/versioning/schemaVersion.d.ts +6 -0
  347. package/dist/versioning/schemaVersion.js +94 -0
  348. package/package.json +139 -0
  349. package/schemas/README.md +13 -0
  350. package/schemas/feedback-entry.schema.json +27 -0
  351. package/schemas/graph-export-v2.schema.json +60 -0
  352. package/schemas/index-server.code-schema.json +40670 -0
  353. package/schemas/instruction.schema.json +262 -0
  354. package/schemas/json-schema/SessionPersistence-persisted-admin-session.schema.json +54 -0
  355. package/schemas/json-schema/SessionPersistence-persisted-session-history-entry.schema.json +51 -0
  356. package/schemas/json-schema/SessionPersistence-persisted-web-socket-connection.schema.json +54 -0
  357. package/schemas/json-schema/SessionPersistence-session-persistence-config.schema.json +110 -0
  358. package/schemas/json-schema/SessionPersistence-session-persistence-data.schema.json +229 -0
  359. package/schemas/json-schema/SessionPersistence-session-persistence-manifest.schema.json +109 -0
  360. package/schemas/json-schema/SessionPersistence-session-persistence-metadata.schema.json +55 -0
  361. package/schemas/json-schema/instruction-audience-scope.schema.json +14 -0
  362. package/schemas/json-schema/instruction-content-type.schema.json +17 -0
  363. package/schemas/json-schema/instruction-instruction-entry.schema.json +210 -0
  364. package/schemas/json-schema/instruction-requirement-level.schema.json +16 -0
  365. package/schemas/manifest.json +78 -0
  366. package/schemas/manifest.schema.json +33 -0
  367. package/schemas/usage-batch.schema.json +16 -0
  368. package/schemas/usage-buckets.schema.json +30 -0
  369. package/schemas/usage-event.schema.json +17 -0
  370. package/scripts/copy-dashboard-assets.mjs +170 -0
  371. package/scripts/dist/README.md +15 -0
  372. package/scripts/setup-hooks.cjs +28 -0
@@ -0,0 +1,380 @@
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.VALID_PROFILES = void 0;
7
+ exports.loadRuntimeConfig = loadRuntimeConfig;
8
+ exports.getRuntimeConfig = getRuntimeConfig;
9
+ exports.reloadRuntimeConfig = reloadRuntimeConfig;
10
+ /**
11
+ * Unified runtime configuration loader — thin aggregate.
12
+ *
13
+ * All configuration is driven by INDEX_SERVER_ prefixed env vars.
14
+ * See docs/configuration.md for the full reference.
15
+ *
16
+ * Domain modules handle parsing for their respective areas:
17
+ * - serverConfig.ts : MCP server, bootstrap, transport, logging, metrics, tracing
18
+ * - dashboardConfig.ts : HTTP server, TLS, WebSocket, persistence
19
+ * - featureConfig.ts : feature flags, feedback, messaging, semantic, graph, storage
20
+ */
21
+ const fs_1 = __importDefault(require("fs"));
22
+ const path_1 = __importDefault(require("path"));
23
+ const envUtils_1 = require("../utils/envUtils");
24
+ const configUtils_1 = require("./configUtils");
25
+ const dirConstants_1 = require("./dirConstants");
26
+ const defaultValues_1 = require("./defaultValues");
27
+ const serverConfig_1 = require("./serverConfig");
28
+ const dashboardConfig_1 = require("./dashboardConfig");
29
+ const featureConfig_1 = require("./featureConfig");
30
+ function parseTiming() {
31
+ const map = {};
32
+ const timingSrc = process.env.INDEX_SERVER_TIMING_JSON;
33
+ if (timingSrc) {
34
+ let obj;
35
+ if (timingSrc.startsWith('{'))
36
+ obj = (0, configUtils_1.parseJSONMaybe)(timingSrc);
37
+ else if (fs_1.default.existsSync(timingSrc))
38
+ obj = (0, configUtils_1.parseJSONMaybe)(fs_1.default.readFileSync(timingSrc, 'utf8'));
39
+ if (obj && typeof obj === 'object') {
40
+ for (const [k, v] of Object.entries(obj)) {
41
+ if (typeof v === 'number' && Number.isFinite(v))
42
+ map[k] = v;
43
+ }
44
+ }
45
+ }
46
+ return map;
47
+ }
48
+ function deriveIndexMode() {
49
+ const explicit = process.env.INDEX_SERVER_CACHE_MODE;
50
+ if (explicit)
51
+ return explicit;
52
+ const memo = process.env.INDEX_SERVER_MEMOIZE === '1';
53
+ const hash = process.env.INDEX_SERVER_MEMOIZE_HASH === '1';
54
+ const reload = process.env.INDEX_SERVER_ALWAYS_RELOAD === '1';
55
+ if (reload && memo && hash)
56
+ return 'reload+memo';
57
+ if (reload && memo)
58
+ return 'reload+memo';
59
+ if (reload)
60
+ return 'reload';
61
+ if (memo && hash)
62
+ return 'memoize+hash';
63
+ if (memo)
64
+ return 'memoize';
65
+ return 'normal';
66
+ }
67
+ function parseTrace() {
68
+ const set = new Set();
69
+ const raw = process.env.INDEX_SERVER_TRACE;
70
+ if (raw) {
71
+ raw.split(',').map(s => s.trim()).filter(Boolean).forEach(v => set.add(v));
72
+ }
73
+ return set;
74
+ }
75
+ function parseInitFeatures() {
76
+ const set = new Set();
77
+ const raw = process.env.INDEX_SERVER_INIT_FEATURES;
78
+ if (raw) {
79
+ raw.split(',').map(s => s.trim()).filter(Boolean).forEach(v => set.add(v));
80
+ }
81
+ return set;
82
+ }
83
+ function parseLogLevel(traceSet) {
84
+ const raw = process.env.INDEX_SERVER_LOG_LEVEL?.toLowerCase();
85
+ const valid = ['error', 'warn', 'info', 'debug', 'trace'];
86
+ if (raw && valid.includes(raw))
87
+ return raw;
88
+ if (traceSet.has('verbose'))
89
+ return 'trace';
90
+ if ((0, envUtils_1.isDebugOrVerbose)())
91
+ return 'debug';
92
+ return 'info';
93
+ }
94
+ function parseBufferRing() {
95
+ let append;
96
+ let preload = false;
97
+ const appendRaw = process.env.INDEX_SERVER_BUFFER_RING_APPEND;
98
+ const preloadRaw = process.env.INDEX_SERVER_BUFFER_RING_PRELOAD;
99
+ if (appendRaw === '0')
100
+ append = false;
101
+ else if (appendRaw === '1')
102
+ append = true;
103
+ if (preloadRaw === '1')
104
+ preload = true;
105
+ return { append: append ?? true, preload };
106
+ }
107
+ function parseMutation() {
108
+ if (process.env.INDEX_SERVER_MUTATION) {
109
+ if (process.env.INDEX_SERVER_MUTATION === '1' || process.env.INDEX_SERVER_MUTATION === 'true')
110
+ return true;
111
+ return false;
112
+ }
113
+ return false;
114
+ }
115
+ function parseCoverage() {
116
+ const fast = process.env.INDEX_SERVER_COVERAGE_FAST === '1' || process.env.INDEX_SERVER_TEST_MODE === 'coverage-fast';
117
+ const hardMinRaw = process.env.INDEX_SERVER_COVERAGE_HARD_MIN;
118
+ const targetRaw = process.env.INDEX_SERVER_COVERAGE_TARGET;
119
+ const hardMin = hardMinRaw ? Number(hardMinRaw) : undefined;
120
+ const target = targetRaw ? Number(targetRaw) : undefined;
121
+ const strictMode = (0, envUtils_1.parseBooleanEnv)(process.env.INDEX_SERVER_COVERAGE_STRICT, process.env.INDEX_SERVER_TEST_MODE === 'coverage-strict');
122
+ return { hardMin, target, fastMode: fast, strictMode };
123
+ }
124
+ function resolveInstructionsAuditLog() {
125
+ const defaultPath = (0, configUtils_1.toAbsolute)(path_1.default.join(dirConstants_1.DIR.LOGS_AUDIT));
126
+ const raw = process.env.INDEX_SERVER_AUDIT_LOG;
127
+ if (raw === undefined || raw.trim().length === 0) {
128
+ return { enabled: true, file: defaultPath, rawValue: undefined, usesDefault: true };
129
+ }
130
+ const trimmed = raw.trim();
131
+ if ((0, envUtils_1.isFalsyExtended)(trimmed)) {
132
+ return { enabled: false, rawValue: raw, usesDefault: false };
133
+ }
134
+ const defaultRequested = trimmed === '1' || envUtils_1.TRUTHY_OR_DEFAULT.includes(trimmed.toLowerCase());
135
+ return {
136
+ enabled: true,
137
+ file: defaultRequested ? defaultPath : (0, configUtils_1.toAbsolute)(trimmed),
138
+ rawValue: raw,
139
+ usesDefault: defaultRequested || trimmed.length === 0,
140
+ };
141
+ }
142
+ function resolveInstructionsDir() {
143
+ const raw = process.env.INDEX_SERVER_DIR;
144
+ const fallback = path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.INSTRUCTIONS);
145
+ return (0, configUtils_1.toAbsolute)(raw, fallback);
146
+ }
147
+ function parseIndexConfig() {
148
+ const baseDir = resolveInstructionsDir();
149
+ const normalizationRaw = process.env.INDEX_SERVER_NORMALIZATION_LOG;
150
+ let normalizationLog;
151
+ if (normalizationRaw) {
152
+ if ((0, envUtils_1.isFalsy)(normalizationRaw))
153
+ normalizationLog = false;
154
+ else if ((0, envUtils_1.isTruthy)(normalizationRaw))
155
+ normalizationLog = (0, configUtils_1.toAbsolute)(path_1.default.join(dirConstants_1.DIR.LOGS_NORMALIZATION));
156
+ else
157
+ normalizationLog = (0, configUtils_1.toAbsolute)(normalizationRaw);
158
+ }
159
+ const memoizeRaw = process.env.INDEX_SERVER_MEMOIZE;
160
+ const attempts = (0, configUtils_1.numberFromEnv)('INDEX_SERVER_READ_RETRIES', defaultValues_1.DEFAULT_LIMITS.READ_RETRIES);
161
+ const backoffMs = (0, configUtils_1.numberFromEnv)('INDEX_SERVER_READ_BACKOFF_MS', defaultValues_1.DEFAULT_LIMITS.READ_BACKOFF_MS);
162
+ const usageFlushMs = (0, configUtils_1.numberFromEnv)('INDEX_SERVER_USAGE_FLUSH_MS', defaultValues_1.DEFAULT_GOVERNANCE.USAGE_FLUSH_MS);
163
+ const hashHardeningEnabled = (0, envUtils_1.parseBooleanEnv)(process.env.INDEX_SERVER_GOV_HASH_HARDENING, true);
164
+ const canonVariantsRaw = (0, configUtils_1.optionalIntFromEnv)('INDEX_SERVER_GOV_HASH_CANON_VARIANTS');
165
+ const importSetSizeRaw = (0, configUtils_1.optionalIntFromEnv)('INDEX_SERVER_GOV_HASH_IMPORT_SET_SIZE');
166
+ const hashCanonVariants = (0, configUtils_1.clamp)(canonVariantsRaw ?? defaultValues_1.DEFAULT_GOVERNANCE.HASH_CANON_VARIANTS, 1, defaultValues_1.DEFAULT_GOVERNANCE.HASH_CANON_VARIANTS_MAX);
167
+ const hashImportSetSize = (0, configUtils_1.clamp)(importSetSizeRaw ?? defaultValues_1.DEFAULT_GOVERNANCE.HASH_IMPORT_SET_SIZE, 2, defaultValues_1.DEFAULT_GOVERNANCE.HASH_IMPORT_SET_SIZE_MAX);
168
+ const maxFiles = (0, configUtils_1.optionalIntFromEnv)('INDEX_SERVER_MAX_FILES');
169
+ const loadWarningThreshold = (0, configUtils_1.optionalIntFromEnv)('INDEX_SERVER_LOAD_WARN_MS');
170
+ const bodyWarnLength = (0, configUtils_1.clamp)((0, configUtils_1.numberFromEnv)('INDEX_SERVER_BODY_WARN_LENGTH', defaultValues_1.DEFAULT_LIMITS.BODY_WARN_LENGTH), defaultValues_1.DEFAULT_LIMITS.BODY_MIN_LENGTH, defaultValues_1.DEFAULT_LIMITS.BODY_MAX_LENGTH);
171
+ const bodyMaxLength = defaultValues_1.DEFAULT_LIMITS.BODY_MAX_LENGTH;
172
+ // Warn about removed legacy env var
173
+ if (process.env.INDEX_SERVER_BODY_MAX_LENGTH !== undefined) {
174
+ console.warn('[runtimeConfig] INDEX_SERVER_BODY_MAX_LENGTH is no longer recognized. Use INDEX_SERVER_BODY_WARN_LENGTH instead (default: 100000).');
175
+ }
176
+ return {
177
+ mode: deriveIndexMode(),
178
+ baseDir,
179
+ reloadAlways: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_ALWAYS_RELOAD'),
180
+ memoize: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_MEMOIZE'),
181
+ memoizeDisabledExplicitly: memoizeRaw !== undefined ? (0, envUtils_1.isFalsy)(memoizeRaw) : false,
182
+ memoizeHash: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_MEMOIZE_HASH'),
183
+ normalizationLog,
184
+ fileTrace: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_FILE_TRACE'),
185
+ eventSilent: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_EVENT_SILENT'),
186
+ readRetries: { attempts, backoffMs },
187
+ usageFlushMs,
188
+ disableUsageClamp: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_DISABLE_USAGE_CLAMP'),
189
+ govHash: {
190
+ trailingNewline: (0, envUtils_1.getBooleanEnv)('GOV_HASH_TRAILING_NEWLINE'),
191
+ hashHardeningEnabled,
192
+ hashCanonVariants,
193
+ hashImportSetSize,
194
+ },
195
+ maxFiles,
196
+ loadWarningThreshold,
197
+ bodyWarnLength,
198
+ bodyMaxLength,
199
+ autoSplitOversized: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_AUTO_SPLIT_OVERSIZED'),
200
+ autoUsageTrack: (0, envUtils_1.parseBooleanEnv)(process.env.INDEX_SERVER_AUTO_USAGE_TRACK, true),
201
+ };
202
+ }
203
+ function parseInstructionsConfig(_mutationEnabled) {
204
+ const auditLog = resolveInstructionsAuditLog();
205
+ const workspaceId = process.env.INDEX_SERVER_WORKSPACE;
206
+ const manifestWriteRaw = process.env.INDEX_SERVER_MANIFEST_WRITE;
207
+ const manifestWriteEnabled = manifestWriteRaw === undefined ? true : !(0, envUtils_1.isFalsy)(manifestWriteRaw);
208
+ const forceFullList = (0, envUtils_1.getBooleanEnv)('FULL_LIST_GET') || (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_STRESS_MODE');
209
+ const sampleOverride = (0, configUtils_1.optionalIntFromEnv)('LIST_GET_SAMPLE_SIZE');
210
+ const effectiveSampleSize = sampleOverride;
211
+ const sampleSeed = (0, configUtils_1.optionalIntFromEnv)('LIST_GET_SAMPLE_SEED');
212
+ const concurrency = (0, configUtils_1.clamp)((0, configUtils_1.optionalIntFromEnv)('LIST_GET_CONCURRENCY') ?? 8, 1, 64);
213
+ const maxDurationMs = Math.max(500, (0, configUtils_1.optionalIntFromEnv)('LIST_GET_MAX_DURATION_MS') ?? 7000);
214
+ return {
215
+ workspaceId: workspaceId && workspaceId.trim().length ? workspaceId : undefined,
216
+ agentId: process.env.INDEX_SERVER_AGENT_ID || undefined,
217
+ canonicalDisable: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_CANONICAL_DISABLE'),
218
+ strictVisibility: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_TEST_STRICT_VISIBILITY'),
219
+ strictCreate: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_STRICT_CREATE'),
220
+ strictRemove: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_STRICT_REMOVE'),
221
+ requireCategory: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_REQUIRE_CATEGORY'),
222
+ traceQueryDiag: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_TRACE_QUERY_DIAG'),
223
+ manifest: {
224
+ writeEnabled: manifestWriteEnabled,
225
+ fastload: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_MANIFEST_FASTLOAD'),
226
+ },
227
+ ciContext: {
228
+ inCI: !!process.env.CI,
229
+ githubActions: !!process.env.GITHUB_ACTIONS,
230
+ tfBuild: !!process.env.TF_BUILD,
231
+ },
232
+ auditLog,
233
+ listValidation: {
234
+ forceFullScan: forceFullList,
235
+ allowSampling: !forceFullList,
236
+ effectiveSampleSize,
237
+ sampleSeed,
238
+ concurrency,
239
+ maxDurationMs,
240
+ },
241
+ };
242
+ }
243
+ function parseMutationConfig(mutationEnabled) {
244
+ // Auto-backup defaults to true when mutation is enabled (protects against accidental data loss).
245
+ const autoBackupDefault = mutationEnabled;
246
+ return {
247
+ enabled: mutationEnabled,
248
+ dispatcherTiming: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_ADD_TIMING'),
249
+ maxBulkDelete: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_MAX_BULK_DELETE', defaultValues_1.DEFAULT_LIMITS.MAX_BULK_DELETE),
250
+ backupBeforeBulkDelete: process.env.INDEX_SERVER_BACKUP_BEFORE_BULK_DELETE === undefined ? true : (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_BACKUP_BEFORE_BULK_DELETE'),
251
+ autoBackupEnabled: process.env.INDEX_SERVER_AUTO_BACKUP === undefined ? autoBackupDefault : (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_AUTO_BACKUP'),
252
+ autoBackupIntervalMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_AUTO_BACKUP_INTERVAL_MS', defaultValues_1.DEFAULT_TIMEOUTS_MS.AUTO_BACKUP_INTERVAL),
253
+ autoBackupMaxCount: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_AUTO_BACKUP_MAX_COUNT', defaultValues_1.DEFAULT_LIMITS.AUTO_BACKUP_MAX_COUNT),
254
+ };
255
+ }
256
+ /** Valid profile names supported by the wizard and runtime. */
257
+ exports.VALID_PROFILES = ['default', 'enhanced', 'experimental'];
258
+ /**
259
+ * Apply profile-aware environment defaults.
260
+ * Called early in loadRuntimeConfig, sets env vars only when not already set.
261
+ * This ensures the wizard's profile choice flows through to all downstream parsers.
262
+ */
263
+ function applyProfileDefaults(profile) {
264
+ const setDefault = (key, value) => {
265
+ if (process.env[key] === undefined)
266
+ process.env[key] = value;
267
+ };
268
+ // All profiles enable dashboard by default
269
+ setDefault('INDEX_SERVER_DASHBOARD', '1');
270
+ if (profile === 'enhanced') {
271
+ setDefault('INDEX_SERVER_SEMANTIC_ENABLED', '1');
272
+ setDefault('INDEX_SERVER_SEMANTIC_LOCAL_ONLY', '0');
273
+ setDefault('INDEX_SERVER_LOG_FILE', '1');
274
+ setDefault('INDEX_SERVER_MUTATION', '1');
275
+ setDefault('INDEX_SERVER_DASHBOARD_TLS', '1');
276
+ setDefault('INDEX_SERVER_METRICS_FILE_STORAGE', '1');
277
+ setDefault('INDEX_SERVER_FEATURES', 'usage');
278
+ }
279
+ else if (profile === 'experimental') {
280
+ setDefault('INDEX_SERVER_SEMANTIC_ENABLED', '1');
281
+ setDefault('INDEX_SERVER_SEMANTIC_LOCAL_ONLY', '0');
282
+ setDefault('INDEX_SERVER_LOG_FILE', '1');
283
+ setDefault('INDEX_SERVER_MUTATION', '1');
284
+ setDefault('INDEX_SERVER_DASHBOARD_TLS', '1');
285
+ setDefault('INDEX_SERVER_METRICS_FILE_STORAGE', '1');
286
+ setDefault('INDEX_SERVER_FEATURES', 'usage');
287
+ setDefault('INDEX_SERVER_STORAGE_BACKEND', 'sqlite');
288
+ setDefault('INDEX_SERVER_LOG_LEVEL', 'debug');
289
+ }
290
+ }
291
+ /**
292
+ * Parse all environment variables and construct a fresh {@link RuntimeConfig} object.
293
+ * Prefer {@link getRuntimeConfig} for normal use — this function always re-parses.
294
+ * @returns Fully resolved runtime configuration object
295
+ */
296
+ function loadRuntimeConfig() {
297
+ const rawProfile = (process.env.INDEX_SERVER_PROFILE || 'default').toLowerCase();
298
+ const profile = exports.VALID_PROFILES.includes(rawProfile) ? rawProfile : 'default';
299
+ applyProfileDefaults(profile);
300
+ const testMode = process.env.INDEX_SERVER_TEST_MODE;
301
+ const rawTiming = parseTiming();
302
+ const trace = parseTrace();
303
+ const initFeatures = parseInitFeatures();
304
+ const logLevel = parseLogLevel(trace);
305
+ const mutationEnabled = parseMutation();
306
+ const index = parseIndexConfig();
307
+ const dashboard = (0, dashboardConfig_1.parseDashboardConfig)(mutationEnabled, index.baseDir);
308
+ const server = (0, serverConfig_1.parseServerConfig)();
309
+ const logging = (0, serverConfig_1.parseLoggingConfig)(logLevel);
310
+ const metrics = (0, serverConfig_1.parseMetricsConfig)();
311
+ const instructions = parseInstructionsConfig(mutationEnabled);
312
+ const tracing = (0, serverConfig_1.parseTracingConfig)(trace, logLevel);
313
+ const mutation = parseMutationConfig(mutationEnabled);
314
+ const featureFlags = (0, featureConfig_1.parseFeatureFlagsConfig)();
315
+ const feedback = (0, featureConfig_1.parseFeedbackConfig)();
316
+ const messaging = (0, featureConfig_1.parseMessagingConfig)();
317
+ const semantic = (0, featureConfig_1.parseSemanticConfig)();
318
+ const minimal = (0, featureConfig_1.parseMinimalConfig)();
319
+ const bootstrapSeed = (0, featureConfig_1.parseBootstrapSeedConfig)();
320
+ const atomicFs = (0, serverConfig_1.parseAtomicFsConfig)();
321
+ const preflight = (0, serverConfig_1.parsePreflightConfig)();
322
+ const validation = (0, featureConfig_1.parseValidationConfig)();
323
+ const dynamic = (0, featureConfig_1.parseDynamicConfig)();
324
+ const graph = (0, featureConfig_1.parseGraphConfig)();
325
+ const storage = (0, featureConfig_1.parseStorageConfig)();
326
+ return {
327
+ profile,
328
+ testMode,
329
+ index,
330
+ mutationEnabled: mutation.enabled,
331
+ logLevel,
332
+ trace,
333
+ initFeatures,
334
+ bufferRing: parseBufferRing(),
335
+ timing: (key, fallback) => rawTiming[key] ?? fallback,
336
+ rawTiming,
337
+ coverage: parseCoverage(),
338
+ dashboard,
339
+ server,
340
+ logging,
341
+ metrics,
342
+ instructions,
343
+ tracing,
344
+ mutation,
345
+ featureFlags,
346
+ feedback,
347
+ messaging,
348
+ semantic,
349
+ minimal,
350
+ bootstrapSeed,
351
+ atomicFs,
352
+ preflight,
353
+ validation,
354
+ dynamic,
355
+ graph,
356
+ storage,
357
+ };
358
+ }
359
+ let _cached;
360
+ /**
361
+ * Return the cached singleton {@link RuntimeConfig}, loading it on first call.
362
+ * @returns The application-wide runtime configuration
363
+ */
364
+ function getRuntimeConfig() {
365
+ if (!_cached)
366
+ _cached = loadRuntimeConfig();
367
+ return _cached;
368
+ }
369
+ /**
370
+ * Force a reload of the runtime configuration by discarding the cache and re-parsing all env vars.
371
+ * @returns The freshly loaded runtime configuration
372
+ */
373
+ function reloadRuntimeConfig() {
374
+ _cached = loadRuntimeConfig();
375
+ return _cached;
376
+ }
377
+ if (require.main === module) {
378
+ // eslint-disable-next-line no-console
379
+ console.log(JSON.stringify(getRuntimeConfig(), null, 2));
380
+ }
@@ -0,0 +1,90 @@
1
+ import { LogLevel } from './configUtils';
2
+ export type { LogLevel };
3
+ interface ServerBootstrapConfig {
4
+ autoconfirm: boolean;
5
+ tokenTtlSec: number;
6
+ referenceMode: boolean;
7
+ }
8
+ interface ServerindexPollingConfig {
9
+ enabled: boolean;
10
+ proactive: boolean;
11
+ intervalMs: number;
12
+ }
13
+ export interface ServerConfig {
14
+ disableEarlyStdinBuffer: boolean;
15
+ fatalExitDelayMs: number;
16
+ idleKeepaliveMs: number;
17
+ sharedSentinel?: string;
18
+ bootstrap: ServerBootstrapConfig;
19
+ indexPolling: ServerindexPollingConfig;
20
+ multicoreTrace: boolean;
21
+ /** Multi-instance mode: standalone (default), leader, follower, auto [EXPERIMENTAL] */
22
+ instanceMode: 'standalone' | 'leader' | 'follower' | 'auto';
23
+ /** HTTP port for leader's MCP transport (thin clients connect here) */
24
+ leaderPort: number;
25
+ /** Leader heartbeat interval (ms) */
26
+ heartbeatIntervalMs: number;
27
+ /** Stale leader threshold (ms) — follower promotes after this */
28
+ staleThresholdMs: number;
29
+ }
30
+ export interface LoggingConfig {
31
+ level: LogLevel;
32
+ verbose: boolean;
33
+ json: boolean;
34
+ sync: boolean;
35
+ diagnostics: boolean;
36
+ protocol: boolean;
37
+ file?: string;
38
+ rawFileValue?: string;
39
+ sentinelRequested: boolean;
40
+ }
41
+ interface MetricsToolcallConfig {
42
+ chunkSize: number;
43
+ flushMs: number;
44
+ compactMs: number;
45
+ appendLogEnabled: boolean;
46
+ }
47
+ interface MetricsHealthConfig {
48
+ memoryThreshold: number;
49
+ errorRateThreshold: number;
50
+ minUptimeMs: number;
51
+ }
52
+ export interface MetricsConfig {
53
+ dir: string;
54
+ resourceCapacity: number;
55
+ sampleIntervalMs: number;
56
+ toolcall: MetricsToolcallConfig;
57
+ health: MetricsHealthConfig;
58
+ fileStorage: boolean;
59
+ }
60
+ export interface AtomicFsConfig {
61
+ retries: number;
62
+ backoffMs: number;
63
+ }
64
+ export interface PreflightConfig {
65
+ modules: string[];
66
+ strict: boolean;
67
+ }
68
+ interface TracingBufferConfig {
69
+ file?: string;
70
+ sizeBytes: number;
71
+ dumpOnExit: boolean;
72
+ }
73
+ export interface TracingConfig {
74
+ level: LogLevel | 'verbose';
75
+ categories: Set<string>;
76
+ buffer: TracingBufferConfig;
77
+ file?: string;
78
+ persist: boolean;
79
+ dir: string;
80
+ fsync: boolean;
81
+ maxFileSizeBytes: number;
82
+ sessionId?: string;
83
+ callsite: boolean;
84
+ }
85
+ export declare function parseServerConfig(): ServerConfig;
86
+ export declare function parseLoggingConfig(level: LogLevel): LoggingConfig;
87
+ export declare function parseMetricsConfig(): MetricsConfig;
88
+ export declare function parseAtomicFsConfig(): AtomicFsConfig;
89
+ export declare function parsePreflightConfig(): PreflightConfig;
90
+ export declare function parseTracingConfig(traceSet: Set<string>, fallbackLevel: LogLevel): TracingConfig;
@@ -0,0 +1,167 @@
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.parseServerConfig = parseServerConfig;
7
+ exports.parseLoggingConfig = parseLoggingConfig;
8
+ exports.parseMetricsConfig = parseMetricsConfig;
9
+ exports.parseAtomicFsConfig = parseAtomicFsConfig;
10
+ exports.parsePreflightConfig = parsePreflightConfig;
11
+ exports.parseTracingConfig = parseTracingConfig;
12
+ /**
13
+ * Server domain config: MCP server, bootstrap, transport, protocol, logging,
14
+ * metrics, tracing, atomicFs, and preflight settings.
15
+ */
16
+ const path_1 = __importDefault(require("path"));
17
+ const envUtils_1 = require("../utils/envUtils");
18
+ const configUtils_1 = require("./configUtils");
19
+ const dirConstants_1 = require("./dirConstants");
20
+ const defaultValues_1 = require("./defaultValues");
21
+ function isDevMode() {
22
+ return process.env.NODE_ENV === 'development' || process.argv.some(a => a === '--watch' || a.includes('--watch'));
23
+ }
24
+ function parseServerConfig() {
25
+ const sharedSentinel = process.env.INDEX_SERVER_SHARED_SERVER_SENTINEL;
26
+ const rawMode = (process.env.INDEX_SERVER_MODE || 'standalone').trim().toLowerCase();
27
+ const validModes = ['standalone', 'leader', 'follower', 'auto'];
28
+ const instanceMode = validModes.includes(rawMode)
29
+ ? rawMode
30
+ : 'standalone';
31
+ return {
32
+ disableEarlyStdinBuffer: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_DISABLE_EARLY_STDIN_BUFFER'),
33
+ fatalExitDelayMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_FATAL_EXIT_DELAY_MS', defaultValues_1.DEFAULT_TIMEOUTS_MS.FATAL_EXIT_DELAY),
34
+ idleKeepaliveMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_IDLE_KEEPALIVE_MS', defaultValues_1.DEFAULT_TIMEOUTS_MS.IDLE_KEEPALIVE),
35
+ sharedSentinel: sharedSentinel && sharedSentinel.trim().length ? sharedSentinel : undefined,
36
+ bootstrap: {
37
+ autoconfirm: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_BOOTSTRAP_AUTOCONFIRM'),
38
+ tokenTtlSec: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_BOOTSTRAP_TOKEN_TTL_SEC', defaultValues_1.DEFAULT_PORTS.BOOTSTRAP_TOKEN_TTL_SEC),
39
+ referenceMode: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_REFERENCE_MODE'),
40
+ },
41
+ indexPolling: {
42
+ enabled: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_ENABLE_INDEX_SERVER_POLLER'),
43
+ proactive: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_POLL_PROACTIVE'),
44
+ intervalMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_POLL_MS', defaultValues_1.DEFAULT_TIMEOUTS_MS.POLL_INTERVAL),
45
+ },
46
+ multicoreTrace: (0, envUtils_1.getBooleanEnv)('MULTICLIENT_TRACE'),
47
+ instanceMode,
48
+ leaderPort: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_LEADER_PORT', isDevMode() ? defaultValues_1.DEFAULT_PORTS.LEADER_DEV : defaultValues_1.DEFAULT_PORTS.LEADER),
49
+ heartbeatIntervalMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_HEARTBEAT_MS', defaultValues_1.DEFAULT_TIMEOUTS_MS.HEARTBEAT),
50
+ staleThresholdMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_STALE_THRESHOLD_MS', defaultValues_1.DEFAULT_TIMEOUTS_MS.STALE_THRESHOLD),
51
+ };
52
+ }
53
+ function resolveLogFile() {
54
+ const raw = process.env.INDEX_SERVER_LOG_FILE;
55
+ if (!raw)
56
+ return { raw: undefined, sentinelRequested: false };
57
+ const normalized = raw.trim().toLowerCase();
58
+ const isSentinel = raw === '1' || ['true', 'yes', 'on'].includes(normalized);
59
+ if (isSentinel) {
60
+ return {
61
+ file: (0, configUtils_1.toAbsolute)(path_1.default.join(dirConstants_1.DIR.LOGS_MCP_SERVER)),
62
+ raw,
63
+ sentinelRequested: true,
64
+ };
65
+ }
66
+ return { file: (0, configUtils_1.toAbsolute)(raw), raw, sentinelRequested: false };
67
+ }
68
+ function parseLoggingConfig(level) {
69
+ const fileInfo = resolveLogFile();
70
+ return {
71
+ level,
72
+ verbose: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_VERBOSE_LOGGING') || (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_DEBUG'),
73
+ json: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_LOG_JSON'),
74
+ sync: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_LOG_SYNC'),
75
+ diagnostics: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_LOG_DIAG'),
76
+ protocol: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_LOG_PROTOCOL'),
77
+ file: fileInfo.file,
78
+ rawFileValue: fileInfo.raw,
79
+ sentinelRequested: fileInfo.sentinelRequested,
80
+ };
81
+ }
82
+ function parseMetricsConfig() {
83
+ return {
84
+ dir: (0, configUtils_1.toAbsolute)(process.env.INDEX_SERVER_METRICS_DIR, path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.METRICS)),
85
+ resourceCapacity: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_RESOURCE_CAPACITY', defaultValues_1.DEFAULT_THRESHOLDS.RESOURCE_CAPACITY),
86
+ sampleIntervalMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_RESOURCE_SAMPLE_INTERVAL_MS', defaultValues_1.DEFAULT_THRESHOLDS.RESOURCE_SAMPLE_INTERVAL_MS),
87
+ toolcall: {
88
+ chunkSize: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_TOOLCALL_CHUNK_SIZE', defaultValues_1.DEFAULT_LIMITS.TOOLCALL_CHUNK_SIZE),
89
+ flushMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_TOOLCALL_FLUSH_MS', defaultValues_1.DEFAULT_TIMEOUTS_MS.TOOLCALL_FLUSH),
90
+ compactMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_TOOLCALL_COMPACT_MS', defaultValues_1.DEFAULT_TIMEOUTS_MS.TOOLCALL_COMPACT),
91
+ appendLogEnabled: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_TOOLCALL_APPEND_LOG'),
92
+ },
93
+ health: {
94
+ memoryThreshold: (0, configUtils_1.floatFromEnv)('INDEX_SERVER_HEALTH_MEMORY_THRESHOLD', defaultValues_1.DEFAULT_THRESHOLDS.MEMORY_THRESHOLD),
95
+ errorRateThreshold: (0, configUtils_1.floatFromEnv)('INDEX_SERVER_HEALTH_ERROR_THRESHOLD', defaultValues_1.DEFAULT_THRESHOLDS.ERROR_RATE_THRESHOLD),
96
+ minUptimeMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_HEALTH_MIN_UPTIME', defaultValues_1.DEFAULT_TIMEOUTS_MS.HEALTH_MIN_UPTIME),
97
+ },
98
+ fileStorage: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_METRICS_FILE_STORAGE'),
99
+ };
100
+ }
101
+ function parseAtomicFsConfig() {
102
+ return {
103
+ retries: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_ATOMIC_WRITE_RETRIES', defaultValues_1.DEFAULT_LIMITS.ATOMIC_WRITE_RETRIES),
104
+ backoffMs: (0, configUtils_1.numberFromEnv)('INDEX_SERVER_ATOMIC_WRITE_BACKOFF_MS', defaultValues_1.DEFAULT_LIMITS.ATOMIC_WRITE_BACKOFF_MS),
105
+ };
106
+ }
107
+ function parsePreflightConfig() {
108
+ const modules = (0, configUtils_1.parseCsvEnv)('INDEX_SERVER_PREFLIGHT_MODULES');
109
+ return {
110
+ modules: modules.length ? modules : ['mime-db', 'ajv', 'ajv-formats'],
111
+ strict: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_PREFLIGHT_STRICT'),
112
+ };
113
+ }
114
+ function resolveTraceLevel(traceSet, fallbackLevel) {
115
+ const raw = process.env.INDEX_SERVER_TRACE_LEVEL?.toLowerCase();
116
+ switch (raw) {
117
+ case 'verbose': return 'verbose';
118
+ case 'trace':
119
+ case 'files':
120
+ case 'perf':
121
+ return 'trace';
122
+ case 'debug':
123
+ case 'core':
124
+ return 'debug';
125
+ case 'warn':
126
+ return 'warn';
127
+ case 'error':
128
+ return 'error';
129
+ default:
130
+ if (traceSet.has('verbose'))
131
+ return 'verbose';
132
+ if (traceSet.size > 0)
133
+ return 'trace';
134
+ return fallbackLevel;
135
+ }
136
+ }
137
+ function resolveTracingBuffer() {
138
+ const rawFile = process.env.INDEX_SERVER_TRACE_BUFFER_FILE;
139
+ const trimmed = rawFile?.trim();
140
+ const file = trimmed && trimmed.length ? (0, configUtils_1.toAbsolute)(trimmed) : undefined;
141
+ const sizeBytes = (0, configUtils_1.optionalNumberFromEnv)('INDEX_SERVER_TRACE_BUFFER_SIZE') ?? 0;
142
+ const dumpOnExit = (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_TRACE_BUFFER_DUMP_ON_EXIT');
143
+ return { file, sizeBytes, dumpOnExit };
144
+ }
145
+ function parseTracingConfig(traceSet, fallbackLevel) {
146
+ const categories = new Set((0, configUtils_1.parseCsvEnv)('INDEX_SERVER_TRACE_CATEGORIES'));
147
+ const buffer = resolveTracingBuffer();
148
+ const filePath = (() => {
149
+ const raw = process.env.INDEX_SERVER_TRACE_FILE;
150
+ if (!raw)
151
+ return undefined;
152
+ const trimmed = raw.trim();
153
+ return trimmed.length ? (0, configUtils_1.toAbsolute)(trimmed) : undefined;
154
+ })();
155
+ return {
156
+ level: resolveTraceLevel(traceSet, fallbackLevel),
157
+ categories,
158
+ buffer,
159
+ file: filePath,
160
+ persist: (0, envUtils_1.parseBooleanEnv)(process.env.INDEX_SERVER_TRACE_PERSIST, !!filePath),
161
+ dir: (0, configUtils_1.toAbsolute)(process.env.INDEX_SERVER_TRACE_DIR, path_1.default.join(configUtils_1.CWD, dirConstants_1.DIR.LOGS_TRACE)),
162
+ fsync: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_TRACE_FSYNC'),
163
+ maxFileSizeBytes: (0, configUtils_1.optionalIntFromEnv)('INDEX_SERVER_TRACE_MAX_FILE_SIZE') ?? 0,
164
+ sessionId: process.env.INDEX_SERVER_TRACE_SESSION || undefined,
165
+ callsite: (0, envUtils_1.getBooleanEnv)('INDEX_SERVER_TRACE_CALLSITE'),
166
+ };
167
+ }