@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.
Files changed (360) hide show
  1. package/CHANGELOG.md +1218 -0
  2. package/CODE_OF_CONDUCT.md +49 -0
  3. package/CONTRIBUTING.md +75 -0
  4. package/LICENSE +21 -0
  5. package/README.md +523 -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 +45 -0
  10. package/dist/config/dashboardConfig.js +63 -0
  11. package/dist/config/defaultValues.d.ts +61 -0
  12. package/dist/config/defaultValues.js +70 -0
  13. package/dist/config/dirConstants.d.ts +17 -0
  14. package/dist/config/dirConstants.js +28 -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 +145 -0
  18. package/dist/config/runtimeConfig.js +334 -0
  19. package/dist/config/serverConfig.d.ts +90 -0
  20. package/dist/config/serverConfig.js +164 -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 +2150 -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 +1466 -0
  29. package/dist/dashboard/client/js/admin.boot.js +359 -0
  30. package/dist/dashboard/client/js/admin.config.js +196 -0
  31. package/dist/dashboard/client/js/admin.embeddings.js +425 -0
  32. package/dist/dashboard/client/js/admin.graph.js +583 -0
  33. package/dist/dashboard/client/js/admin.instances.js +120 -0
  34. package/dist/dashboard/client/js/admin.instructions.js +552 -0
  35. package/dist/dashboard/client/js/admin.logs.js +113 -0
  36. package/dist/dashboard/client/js/admin.maintenance.js +354 -0
  37. package/dist/dashboard/client/js/admin.messaging.js +635 -0
  38. package/dist/dashboard/client/js/admin.monitor.js +181 -0
  39. package/dist/dashboard/client/js/admin.overview.js +221 -0
  40. package/dist/dashboard/client/js/admin.performance.js +61 -0
  41. package/dist/dashboard/client/js/admin.sessions.js +293 -0
  42. package/dist/dashboard/client/js/admin.sqlite.js +366 -0
  43. package/dist/dashboard/client/js/admin.utils.js +49 -0
  44. package/dist/dashboard/client/js/chart.umd.js +14 -0
  45. package/dist/dashboard/client/js/elk.bundled.js +6696 -0
  46. package/dist/dashboard/client/js/marked.umd.js +74 -0
  47. package/dist/dashboard/client/js/mermaid.min.js +3022 -0
  48. package/dist/dashboard/client/mermaid-layout-elk.esm.min.mjs +1 -0
  49. package/dist/dashboard/export/DataExporter.d.ts +169 -0
  50. package/dist/dashboard/export/DataExporter.js +737 -0
  51. package/dist/dashboard/export/exporters/csvExporter.d.ts +11 -0
  52. package/dist/dashboard/export/exporters/csvExporter.js +46 -0
  53. package/dist/dashboard/export/exporters/exportTypes.d.ts +89 -0
  54. package/dist/dashboard/export/exporters/exportTypes.js +5 -0
  55. package/dist/dashboard/export/exporters/jsonExporter.d.ts +7 -0
  56. package/dist/dashboard/export/exporters/jsonExporter.js +22 -0
  57. package/dist/dashboard/export/exporters/xmlExporter.d.ts +17 -0
  58. package/dist/dashboard/export/exporters/xmlExporter.js +175 -0
  59. package/dist/dashboard/integration/APIIntegration.d.ts +41 -0
  60. package/dist/dashboard/integration/APIIntegration.js +95 -0
  61. package/dist/dashboard/security/SecurityMonitor.d.ts +167 -0
  62. package/dist/dashboard/security/SecurityMonitor.js +559 -0
  63. package/dist/dashboard/server/AdminPanel.d.ts +183 -0
  64. package/dist/dashboard/server/AdminPanel.js +792 -0
  65. package/dist/dashboard/server/AdminPanelConfig.d.ts +42 -0
  66. package/dist/dashboard/server/AdminPanelConfig.js +80 -0
  67. package/dist/dashboard/server/AdminPanelState.d.ts +47 -0
  68. package/dist/dashboard/server/AdminPanelState.js +214 -0
  69. package/dist/dashboard/server/ApiRoutes.d.ts +17 -0
  70. package/dist/dashboard/server/ApiRoutes.js +149 -0
  71. package/dist/dashboard/server/DashboardServer.d.ts +49 -0
  72. package/dist/dashboard/server/DashboardServer.js +159 -0
  73. package/dist/dashboard/server/FileMetricsStorage.d.ts +49 -0
  74. package/dist/dashboard/server/FileMetricsStorage.js +195 -0
  75. package/dist/dashboard/server/HttpTransport.d.ts +23 -0
  76. package/dist/dashboard/server/HttpTransport.js +116 -0
  77. package/dist/dashboard/server/InstanceManager.d.ts +53 -0
  78. package/dist/dashboard/server/InstanceManager.js +284 -0
  79. package/dist/dashboard/server/KnowledgeStore.d.ts +35 -0
  80. package/dist/dashboard/server/KnowledgeStore.js +105 -0
  81. package/dist/dashboard/server/LeaderElection.d.ts +81 -0
  82. package/dist/dashboard/server/LeaderElection.js +268 -0
  83. package/dist/dashboard/server/MetricsCollector.d.ts +200 -0
  84. package/dist/dashboard/server/MetricsCollector.js +803 -0
  85. package/dist/dashboard/server/SessionPersistenceManager.d.ts +88 -0
  86. package/dist/dashboard/server/SessionPersistenceManager.js +457 -0
  87. package/dist/dashboard/server/ThinClient.d.ts +64 -0
  88. package/dist/dashboard/server/ThinClient.js +237 -0
  89. package/dist/dashboard/server/WebSocketManager.d.ts +161 -0
  90. package/dist/dashboard/server/WebSocketManager.js +463 -0
  91. package/dist/dashboard/server/httpLifecycle.d.ts +17 -0
  92. package/dist/dashboard/server/httpLifecycle.js +35 -0
  93. package/dist/dashboard/server/legacyDashboardHtml.d.ts +9 -0
  94. package/dist/dashboard/server/legacyDashboardHtml.js +618 -0
  95. package/dist/dashboard/server/legacyDashboardStyles.d.ts +5 -0
  96. package/dist/dashboard/server/legacyDashboardStyles.js +490 -0
  97. package/dist/dashboard/server/metricsAggregation.d.ts +252 -0
  98. package/dist/dashboard/server/metricsAggregation.js +206 -0
  99. package/dist/dashboard/server/metricsSerializer.d.ts +25 -0
  100. package/dist/dashboard/server/metricsSerializer.js +195 -0
  101. package/dist/dashboard/server/routes/admin.routes.d.ts +16 -0
  102. package/dist/dashboard/server/routes/admin.routes.js +596 -0
  103. package/dist/dashboard/server/routes/alerts.routes.d.ts +7 -0
  104. package/dist/dashboard/server/routes/alerts.routes.js +93 -0
  105. package/dist/dashboard/server/routes/api.feedback.routes.d.ts +73 -0
  106. package/dist/dashboard/server/routes/api.feedback.routes.js +171 -0
  107. package/dist/dashboard/server/routes/api.instructions.routes.d.ts +101 -0
  108. package/dist/dashboard/server/routes/api.instructions.routes.js +213 -0
  109. package/dist/dashboard/server/routes/api.usage.routes.d.ts +57 -0
  110. package/dist/dashboard/server/routes/api.usage.routes.js +374 -0
  111. package/dist/dashboard/server/routes/embeddings.routes.d.ts +6 -0
  112. package/dist/dashboard/server/routes/embeddings.routes.js +246 -0
  113. package/dist/dashboard/server/routes/graph.routes.d.ts +6 -0
  114. package/dist/dashboard/server/routes/graph.routes.js +280 -0
  115. package/dist/dashboard/server/routes/index.d.ts +38 -0
  116. package/dist/dashboard/server/routes/index.js +194 -0
  117. package/dist/dashboard/server/routes/instances.routes.d.ts +6 -0
  118. package/dist/dashboard/server/routes/instances.routes.js +35 -0
  119. package/dist/dashboard/server/routes/instructions.routes.d.ts +8 -0
  120. package/dist/dashboard/server/routes/instructions.routes.js +336 -0
  121. package/dist/dashboard/server/routes/knowledge.routes.d.ts +6 -0
  122. package/dist/dashboard/server/routes/knowledge.routes.js +82 -0
  123. package/dist/dashboard/server/routes/logs.routes.d.ts +6 -0
  124. package/dist/dashboard/server/routes/logs.routes.js +164 -0
  125. package/dist/dashboard/server/routes/messaging.routes.d.ts +16 -0
  126. package/dist/dashboard/server/routes/messaging.routes.js +293 -0
  127. package/dist/dashboard/server/routes/metrics.routes.d.ts +10 -0
  128. package/dist/dashboard/server/routes/metrics.routes.js +346 -0
  129. package/dist/dashboard/server/routes/scripts.routes.d.ts +9 -0
  130. package/dist/dashboard/server/routes/scripts.routes.js +84 -0
  131. package/dist/dashboard/server/routes/sqlite.routes.d.ts +9 -0
  132. package/dist/dashboard/server/routes/sqlite.routes.js +569 -0
  133. package/dist/dashboard/server/routes/status.routes.d.ts +7 -0
  134. package/dist/dashboard/server/routes/status.routes.js +183 -0
  135. package/dist/dashboard/server/routes/synthetic.routes.d.ts +7 -0
  136. package/dist/dashboard/server/routes/synthetic.routes.js +195 -0
  137. package/dist/dashboard/server/routes/tools.routes.d.ts +6 -0
  138. package/dist/dashboard/server/routes/tools.routes.js +46 -0
  139. package/dist/dashboard/server/routes/usage.routes.d.ts +6 -0
  140. package/dist/dashboard/server/routes/usage.routes.js +25 -0
  141. package/dist/dashboard/server/wsInit.d.ts +16 -0
  142. package/dist/dashboard/server/wsInit.js +35 -0
  143. package/dist/externalClientLib.d.ts +1 -0
  144. package/dist/externalClientLib.js +2 -0
  145. package/dist/minimal/index.d.ts +1 -0
  146. package/dist/minimal/index.js +140 -0
  147. package/dist/models/SessionPersistence.d.ts +115 -0
  148. package/dist/models/SessionPersistence.js +66 -0
  149. package/dist/models/instruction.d.ts +45 -0
  150. package/dist/models/instruction.js +2 -0
  151. package/dist/perf/benchmark.d.ts +1 -0
  152. package/dist/perf/benchmark.js +50 -0
  153. package/dist/portableClientWrapper.d.ts +1 -0
  154. package/dist/portableClientWrapper.js +2 -0
  155. package/dist/schemas/index.d.ts +128 -0
  156. package/dist/schemas/index.js +371 -0
  157. package/dist/scripts/runPerformanceBaseline.d.ts +1 -0
  158. package/dist/scripts/runPerformanceBaseline.js +17 -0
  159. package/dist/server/handshakeManager.d.ts +25 -0
  160. package/dist/server/handshakeManager.js +472 -0
  161. package/dist/server/index-server.d.ts +56 -0
  162. package/dist/server/index-server.js +822 -0
  163. package/dist/server/registry.d.ts +44 -0
  164. package/dist/server/registry.js +236 -0
  165. package/dist/server/sdkServer.d.ts +8 -0
  166. package/dist/server/sdkServer.js +299 -0
  167. package/dist/server/shutdownGuard.d.ts +41 -0
  168. package/dist/server/shutdownGuard.js +52 -0
  169. package/dist/server/thin-client.d.ts +22 -0
  170. package/dist/server/thin-client.js +111 -0
  171. package/dist/server/transport.d.ts +41 -0
  172. package/dist/server/transport.js +312 -0
  173. package/dist/server/transportFactory.d.ts +21 -0
  174. package/dist/server/transportFactory.js +429 -0
  175. package/dist/services/atomicFs.d.ts +22 -0
  176. package/dist/services/atomicFs.js +103 -0
  177. package/dist/services/auditLog.d.ts +38 -0
  178. package/dist/services/auditLog.js +142 -0
  179. package/dist/services/autoBackup.d.ts +14 -0
  180. package/dist/services/autoBackup.js +171 -0
  181. package/dist/services/autoSplit.d.ts +32 -0
  182. package/dist/services/autoSplit.js +113 -0
  183. package/dist/services/backupZip.d.ts +25 -0
  184. package/dist/services/backupZip.js +110 -0
  185. package/dist/services/bootstrapGating.d.ts +123 -0
  186. package/dist/services/bootstrapGating.js +221 -0
  187. package/dist/services/canonical.d.ts +23 -0
  188. package/dist/services/canonical.js +65 -0
  189. package/dist/services/categoryRules.d.ts +7 -0
  190. package/dist/services/categoryRules.js +37 -0
  191. package/dist/services/classificationService.d.ts +42 -0
  192. package/dist/services/classificationService.js +168 -0
  193. package/dist/services/embeddingService.d.ts +62 -0
  194. package/dist/services/embeddingService.js +259 -0
  195. package/dist/services/errors.d.ts +22 -0
  196. package/dist/services/errors.js +31 -0
  197. package/dist/services/featureFlags.d.ts +25 -0
  198. package/dist/services/featureFlags.js +89 -0
  199. package/dist/services/features.d.ts +13 -0
  200. package/dist/services/features.js +35 -0
  201. package/dist/services/handlers/instructions.add.d.ts +1 -0
  202. package/dist/services/handlers/instructions.add.js +496 -0
  203. package/dist/services/handlers/instructions.groom.d.ts +1 -0
  204. package/dist/services/handlers/instructions.groom.js +523 -0
  205. package/dist/services/handlers/instructions.import.d.ts +1 -0
  206. package/dist/services/handlers/instructions.import.js +173 -0
  207. package/dist/services/handlers/instructions.patch.d.ts +1 -0
  208. package/dist/services/handlers/instructions.patch.js +167 -0
  209. package/dist/services/handlers/instructions.query.d.ts +163 -0
  210. package/dist/services/handlers/instructions.query.js +522 -0
  211. package/dist/services/handlers/instructions.reload.d.ts +1 -0
  212. package/dist/services/handlers/instructions.reload.js +13 -0
  213. package/dist/services/handlers/instructions.remove.d.ts +1 -0
  214. package/dist/services/handlers/instructions.remove.js +118 -0
  215. package/dist/services/handlers/instructions.shared.d.ts +31 -0
  216. package/dist/services/handlers/instructions.shared.js +124 -0
  217. package/dist/services/handlers.activation.d.ts +1 -0
  218. package/dist/services/handlers.activation.js +203 -0
  219. package/dist/services/handlers.bootstrap.d.ts +1 -0
  220. package/dist/services/handlers.bootstrap.js +38 -0
  221. package/dist/services/handlers.dashboardConfig.d.ts +34 -0
  222. package/dist/services/handlers.dashboardConfig.js +108 -0
  223. package/dist/services/handlers.diagnostics.d.ts +1 -0
  224. package/dist/services/handlers.diagnostics.js +64 -0
  225. package/dist/services/handlers.feedback.d.ts +15 -0
  226. package/dist/services/handlers.feedback.js +378 -0
  227. package/dist/services/handlers.gates.d.ts +1 -0
  228. package/dist/services/handlers.gates.js +46 -0
  229. package/dist/services/handlers.graph.d.ts +53 -0
  230. package/dist/services/handlers.graph.js +231 -0
  231. package/dist/services/handlers.help.d.ts +1 -0
  232. package/dist/services/handlers.help.js +119 -0
  233. package/dist/services/handlers.instructionSchema.d.ts +1 -0
  234. package/dist/services/handlers.instructionSchema.js +227 -0
  235. package/dist/services/handlers.instructions.d.ts +8 -0
  236. package/dist/services/handlers.instructions.js +14 -0
  237. package/dist/services/handlers.instructionsDiagnostics.d.ts +1 -0
  238. package/dist/services/handlers.instructionsDiagnostics.js +14 -0
  239. package/dist/services/handlers.integrity.d.ts +1 -0
  240. package/dist/services/handlers.integrity.js +35 -0
  241. package/dist/services/handlers.manifest.d.ts +1 -0
  242. package/dist/services/handlers.manifest.js +24 -0
  243. package/dist/services/handlers.messaging.d.ts +12 -0
  244. package/dist/services/handlers.messaging.js +203 -0
  245. package/dist/services/handlers.metrics.d.ts +1 -0
  246. package/dist/services/handlers.metrics.js +43 -0
  247. package/dist/services/handlers.promote.d.ts +1 -0
  248. package/dist/services/handlers.promote.js +306 -0
  249. package/dist/services/handlers.prompt.d.ts +1 -0
  250. package/dist/services/handlers.prompt.js +7 -0
  251. package/dist/services/handlers.search.d.ts +69 -0
  252. package/dist/services/handlers.search.js +645 -0
  253. package/dist/services/handlers.testPrimitive.d.ts +1 -0
  254. package/dist/services/handlers.testPrimitive.js +5 -0
  255. package/dist/services/handlers.trace.d.ts +1 -0
  256. package/dist/services/handlers.trace.js +31 -0
  257. package/dist/services/handlers.usage.d.ts +1 -0
  258. package/dist/services/handlers.usage.js +11 -0
  259. package/dist/services/hotScore.d.ts +137 -0
  260. package/dist/services/hotScore.js +244 -0
  261. package/dist/services/indexContext.d.ts +117 -0
  262. package/dist/services/indexContext.js +968 -0
  263. package/dist/services/indexLoader.d.ts +44 -0
  264. package/dist/services/indexLoader.js +921 -0
  265. package/dist/services/indexRepository.d.ts +32 -0
  266. package/dist/services/indexRepository.js +71 -0
  267. package/dist/services/indexingService.d.ts +1 -0
  268. package/dist/services/indexingService.js +2 -0
  269. package/dist/services/instructions.dispatcher.d.ts +1 -0
  270. package/dist/services/instructions.dispatcher.js +231 -0
  271. package/dist/services/logPrefix.d.ts +1 -0
  272. package/dist/services/logPrefix.js +30 -0
  273. package/dist/services/logger.d.ts +52 -0
  274. package/dist/services/logger.js +268 -0
  275. package/dist/services/manifestManager.d.ts +82 -0
  276. package/dist/services/manifestManager.js +200 -0
  277. package/dist/services/messaging/agentMailbox.d.ts +60 -0
  278. package/dist/services/messaging/agentMailbox.js +353 -0
  279. package/dist/services/messaging/messagingPersistence.d.ts +20 -0
  280. package/dist/services/messaging/messagingPersistence.js +111 -0
  281. package/dist/services/messaging/messagingTypes.d.ts +150 -0
  282. package/dist/services/messaging/messagingTypes.js +66 -0
  283. package/dist/services/ownershipService.d.ts +1 -0
  284. package/dist/services/ownershipService.js +38 -0
  285. package/dist/services/performanceBaseline.d.ts +19 -0
  286. package/dist/services/performanceBaseline.js +210 -0
  287. package/dist/services/preflight.d.ts +12 -0
  288. package/dist/services/preflight.js +79 -0
  289. package/dist/services/promptReviewService.d.ts +44 -0
  290. package/dist/services/promptReviewService.js +101 -0
  291. package/dist/services/responseEnvelope.d.ts +6 -0
  292. package/dist/services/responseEnvelope.js +25 -0
  293. package/dist/services/seedBootstrap.d.ts +34 -0
  294. package/dist/services/seedBootstrap.js +427 -0
  295. package/dist/services/storage/factory.d.ts +17 -0
  296. package/dist/services/storage/factory.js +35 -0
  297. package/dist/services/storage/hashUtils.d.ts +11 -0
  298. package/dist/services/storage/hashUtils.js +35 -0
  299. package/dist/services/storage/index.d.ts +12 -0
  300. package/dist/services/storage/index.js +18 -0
  301. package/dist/services/storage/jsonFileStore.d.ts +32 -0
  302. package/dist/services/storage/jsonFileStore.js +241 -0
  303. package/dist/services/storage/migrationEngine.d.ts +35 -0
  304. package/dist/services/storage/migrationEngine.js +93 -0
  305. package/dist/services/storage/sqliteMessageStore.d.ts +53 -0
  306. package/dist/services/storage/sqliteMessageStore.js +146 -0
  307. package/dist/services/storage/sqliteSchema.d.ts +12 -0
  308. package/dist/services/storage/sqliteSchema.js +122 -0
  309. package/dist/services/storage/sqliteStore.d.ts +41 -0
  310. package/dist/services/storage/sqliteStore.js +339 -0
  311. package/dist/services/storage/sqliteUsageStore.d.ts +35 -0
  312. package/dist/services/storage/sqliteUsageStore.js +94 -0
  313. package/dist/services/storage/types.d.ts +171 -0
  314. package/dist/services/storage/types.js +12 -0
  315. package/dist/services/toolHandlers.d.ts +23 -0
  316. package/dist/services/toolHandlers.js +50 -0
  317. package/dist/services/toolRegistry.d.ts +20 -0
  318. package/dist/services/toolRegistry.js +490 -0
  319. package/dist/services/toolRegistry.zod.d.ts +10 -0
  320. package/dist/services/toolRegistry.zod.js +323 -0
  321. package/dist/services/tracing.d.ts +26 -0
  322. package/dist/services/tracing.js +260 -0
  323. package/dist/services/usageBuckets.d.ts +161 -0
  324. package/dist/services/usageBuckets.js +364 -0
  325. package/dist/services/validationService.d.ts +38 -0
  326. package/dist/services/validationService.js +125 -0
  327. package/dist/utils/BufferRing.d.ts +203 -0
  328. package/dist/utils/BufferRing.js +551 -0
  329. package/dist/utils/BufferRingExamples.d.ts +55 -0
  330. package/dist/utils/BufferRingExamples.js +188 -0
  331. package/dist/utils/envUtils.d.ts +42 -0
  332. package/dist/utils/envUtils.js +80 -0
  333. package/dist/utils/memoryMonitor.d.ts +83 -0
  334. package/dist/utils/memoryMonitor.js +275 -0
  335. package/dist/versioning/schemaVersion.d.ts +6 -0
  336. package/dist/versioning/schemaVersion.js +93 -0
  337. package/package.json +134 -0
  338. package/schemas/README.md +13 -0
  339. package/schemas/feedback-entry.schema.json +27 -0
  340. package/schemas/graph-export-v2.schema.json +60 -0
  341. package/schemas/index-server.code-schema.json +38477 -0
  342. package/schemas/instruction.schema.json +262 -0
  343. package/schemas/json-schema/SessionPersistence-persisted-admin-session.schema.json +54 -0
  344. package/schemas/json-schema/SessionPersistence-persisted-session-history-entry.schema.json +51 -0
  345. package/schemas/json-schema/SessionPersistence-persisted-web-socket-connection.schema.json +54 -0
  346. package/schemas/json-schema/SessionPersistence-session-persistence-config.schema.json +110 -0
  347. package/schemas/json-schema/SessionPersistence-session-persistence-data.schema.json +229 -0
  348. package/schemas/json-schema/SessionPersistence-session-persistence-manifest.schema.json +109 -0
  349. package/schemas/json-schema/SessionPersistence-session-persistence-metadata.schema.json +55 -0
  350. package/schemas/json-schema/instruction-audience-scope.schema.json +14 -0
  351. package/schemas/json-schema/instruction-content-type.schema.json +17 -0
  352. package/schemas/json-schema/instruction-instruction-entry.schema.json +206 -0
  353. package/schemas/json-schema/instruction-requirement-level.schema.json +16 -0
  354. package/schemas/manifest.json +78 -0
  355. package/schemas/manifest.schema.json +33 -0
  356. package/schemas/usage-batch.schema.json +16 -0
  357. package/schemas/usage-buckets.schema.json +30 -0
  358. package/schemas/usage-event.schema.json +17 -0
  359. package/scripts/copy-dashboard-assets.mjs +170 -0
  360. package/scripts/setup-hooks.cjs +28 -0
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Index Server - Thin Client Entry Point
3
+ *
4
+ * **EXPERIMENTAL** — APIs, configuration, and behavior may change.
5
+ *
6
+ * Lightweight stdio-to-HTTP bridge for MCP hosts.
7
+ * Instead of loading the full index and handler registry, this process
8
+ * reads JSON-RPC frames from stdin and forwards them to the leader server
9
+ * over HTTP.
10
+ *
11
+ * Usage:
12
+ * node dist/server/thin-client.js
13
+ *
14
+ * Environment:
15
+ * INDEX_SERVER_STATE_DIR - State directory to discover leader (default: ./data/state)
16
+ * INDEX_SERVER_LEADER_URL - Explicit leader URL (e.g., http://127.0.0.1:9090/mcp)
17
+ *
18
+ * The thin client auto-discovers the leader from the lock file in INDEX_SERVER_STATE_DIR,
19
+ * or connects to INDEX_SERVER_LEADER_URL if provided. On leader failover, it re-discovers
20
+ * and reconnects automatically.
21
+ */
22
+ export {};
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ /**
3
+ * Index Server - Thin Client Entry Point
4
+ *
5
+ * **EXPERIMENTAL** — APIs, configuration, and behavior may change.
6
+ *
7
+ * Lightweight stdio-to-HTTP bridge for MCP hosts.
8
+ * Instead of loading the full index and handler registry, this process
9
+ * reads JSON-RPC frames from stdin and forwards them to the leader server
10
+ * over HTTP.
11
+ *
12
+ * Usage:
13
+ * node dist/server/thin-client.js
14
+ *
15
+ * Environment:
16
+ * INDEX_SERVER_STATE_DIR - State directory to discover leader (default: ./data/state)
17
+ * INDEX_SERVER_LEADER_URL - Explicit leader URL (e.g., http://127.0.0.1:9090/mcp)
18
+ *
19
+ * The thin client auto-discovers the leader from the lock file in INDEX_SERVER_STATE_DIR,
20
+ * or connects to INDEX_SERVER_LEADER_URL if provided. On leader failover, it re-discovers
21
+ * and reconnects automatically.
22
+ */
23
+ var __importDefault = (this && this.__importDefault) || function (mod) {
24
+ return (mod && mod.__esModule) ? mod : { "default": mod };
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ const path_1 = __importDefault(require("path"));
28
+ const ThinClient_js_1 = require("../dashboard/server/ThinClient.js");
29
+ const stateDir = process.env.INDEX_SERVER_STATE_DIR || path_1.default.join(process.cwd(), 'data', 'state');
30
+ const leaderUrl = process.env.INDEX_SERVER_LEADER_URL || undefined;
31
+ const client = new ThinClient_js_1.ThinClient({
32
+ leaderUrl,
33
+ stateDir,
34
+ maxRetries: 5,
35
+ retryDelayMs: 500,
36
+ });
37
+ process.stderr.write(`[thin-client] Starting stdio bridge (pid=${process.pid})\n`);
38
+ process.stderr.write(`[thin-client] State dir: ${stateDir}\n`);
39
+ if (leaderUrl) {
40
+ process.stderr.write(`[thin-client] Explicit leader URL: ${leaderUrl}\n`);
41
+ }
42
+ else {
43
+ const discovered = client.discoverLeader();
44
+ process.stderr.write(`[thin-client] Discovered leader: ${discovered || '(none yet — will retry on first request)'}\n`);
45
+ }
46
+ // Read JSON-RPC frames from stdin (Content-Length delimited or newline-delimited)
47
+ let buffer = '';
48
+ process.stdin.setEncoding('utf8');
49
+ process.stdin.on('data', (chunk) => {
50
+ buffer += chunk;
51
+ // Try Content-Length framing first (standard MCP protocol)
52
+ // eslint-disable-next-line no-constant-condition
53
+ while (true) {
54
+ const headerMatch = buffer.match(/^Content-Length:\s*(\d+)\r?\n\r?\n/);
55
+ if (headerMatch) {
56
+ const contentLength = parseInt(headerMatch[1], 10);
57
+ const headerEnd = headerMatch[0].length;
58
+ if (buffer.length >= headerEnd + contentLength) {
59
+ const frame = buffer.slice(headerEnd, headerEnd + contentLength);
60
+ buffer = buffer.slice(headerEnd + contentLength);
61
+ handleFrame(frame);
62
+ continue;
63
+ }
64
+ break; // Wait for more data
65
+ }
66
+ // Fallback: newline-delimited JSON
67
+ const newlineIdx = buffer.indexOf('\n');
68
+ if (newlineIdx >= 0) {
69
+ const line = buffer.slice(0, newlineIdx).trim();
70
+ buffer = buffer.slice(newlineIdx + 1);
71
+ if (line.length > 0 && line.startsWith('{')) {
72
+ handleFrame(line);
73
+ }
74
+ continue;
75
+ }
76
+ break; // Wait for more data
77
+ }
78
+ });
79
+ async function handleFrame(frame) {
80
+ try {
81
+ const response = await client.processFrame(frame);
82
+ const responseBytes = Buffer.from(response, 'utf8');
83
+ process.stdout.write(`Content-Length: ${responseBytes.length}\r\n\r\n`);
84
+ process.stdout.write(responseBytes);
85
+ }
86
+ catch (err) {
87
+ const errorResponse = JSON.stringify({
88
+ jsonrpc: '2.0',
89
+ error: { code: -32603, message: err instanceof Error ? err.message : 'Internal error' },
90
+ id: null,
91
+ });
92
+ const errorBytes = Buffer.from(errorResponse, 'utf8');
93
+ process.stdout.write(`Content-Length: ${errorBytes.length}\r\n\r\n`);
94
+ process.stdout.write(errorBytes);
95
+ }
96
+ }
97
+ process.stdin.on('end', () => {
98
+ process.stderr.write('[thin-client] stdin closed, shutting down\n');
99
+ client.stop();
100
+ process.exit(0);
101
+ });
102
+ process.on('SIGINT', () => {
103
+ process.stderr.write('[thin-client] SIGINT received, shutting down\n');
104
+ client.stop();
105
+ process.exit(0);
106
+ });
107
+ process.on('SIGTERM', () => {
108
+ process.stderr.write('[thin-client] SIGTERM received, shutting down\n');
109
+ client.stop();
110
+ process.exit(0);
111
+ });
@@ -0,0 +1,41 @@
1
+ export type Handler<TParams = unknown> = (params: TParams) => Promise<unknown> | unknown;
2
+ interface MetricRecord {
3
+ count: number;
4
+ totalMs: number;
5
+ maxMs: number;
6
+ }
7
+ /** Return the in-memory per-method metrics map (count, totalMs, maxMs).
8
+ * @returns Reference to the live metrics map keyed by method name
9
+ */
10
+ export declare function getMetrics(): Record<string, MetricRecord>;
11
+ /**
12
+ * Register a method handler in the stdio transport's handler table.
13
+ * Unlike the SDK registry, this does not add wrapping (metrics, audit, etc.).
14
+ * @param method - JSON-RPC method name
15
+ * @param handler - Handler function invoked with the parsed params
16
+ */
17
+ export declare function registerHandler<TParams = unknown>(method: string, handler: Handler<TParams>): void;
18
+ /**
19
+ * Return a sorted list of all registered method names in the stdio transport.
20
+ * @returns Array of method name strings in alphabetical order
21
+ */
22
+ export declare function listRegisteredMethods(): string[];
23
+ /**
24
+ * Look up a registered handler by method name.
25
+ * @param method - JSON-RPC method name to look up
26
+ * @returns The handler function, or `undefined` if not registered
27
+ */
28
+ export declare function getHandler(method: string): Handler | undefined;
29
+ export interface TransportOptions {
30
+ input?: NodeJS.ReadableStream;
31
+ output?: NodeJS.WritableStream;
32
+ stderr?: NodeJS.WritableStream;
33
+ env?: NodeJS.ProcessEnv;
34
+ }
35
+ /**
36
+ * Start the stdio JSON-RPC 2.0 transport, reading requests from stdin and writing responses to stdout.
37
+ * Registers built-in handlers for `initialize`, `notifications/initialized`, `shutdown`, and `exit`.
38
+ * @param opts - Optional stream overrides (input, output, stderr) and environment; defaults to process streams
39
+ */
40
+ export declare function startTransport(opts?: TransportOptions): void;
41
+ export {};
@@ -0,0 +1,312 @@
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.getMetrics = getMetrics;
7
+ exports.registerHandler = registerHandler;
8
+ exports.listRegisteredMethods = listRegisteredMethods;
9
+ exports.getHandler = getHandler;
10
+ exports.startTransport = startTransport;
11
+ /**
12
+ * MCP Transport Layer - stdio JSON-RPC 2.0 Only
13
+ *
14
+ * This module implements the primary MCP server transport over stdin/stdout.
15
+ * All MCP clients (VS Code, Claude, etc.) communicate exclusively through this stdio transport.
16
+ *
17
+ * Security: Process-isolated communication with no network exposure.
18
+ * Protocol: JSON-RPC 2.0 line-delimited over stdin/stdout streams.
19
+ *
20
+ * Note: The optional HTTP dashboard is implemented separately and is for admin use only.
21
+ */
22
+ const readline_1 = require("readline");
23
+ const validationService_1 = require("../services/validationService");
24
+ const runtimeConfig_1 = require("../config/runtimeConfig");
25
+ const fs_1 = __importDefault(require("fs"));
26
+ const path_1 = __importDefault(require("path"));
27
+ // Robust version resolution: attempt cwd + relative to compiled dist location
28
+ const versionCandidates = [
29
+ path_1.default.join(process.cwd(), 'package.json'),
30
+ path_1.default.join(__dirname, '..', '..', 'package.json')
31
+ ];
32
+ let VERSION = '0.0.0';
33
+ for (const p of versionCandidates) {
34
+ try {
35
+ if (fs_1.default.existsSync(p)) {
36
+ const raw = JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
37
+ if (raw?.version) {
38
+ VERSION = raw.version;
39
+ break;
40
+ }
41
+ }
42
+ }
43
+ catch { /* ignore */ }
44
+ }
45
+ const handlers = {
46
+ 'health_check': () => {
47
+ // Minimal fallback health; enriched version registered by handlers.metrics.ts overwrites this
48
+ let instances = [];
49
+ try {
50
+ // Dynamic require avoids circular dependency at module load time
51
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
52
+ const { getActiveInstances } = require('../dashboard/server/InstanceManager');
53
+ instances = getActiveInstances().map(i => ({ pid: i.pid, port: i.port, host: i.host, startedAt: i.startedAt, current: i.current }));
54
+ }
55
+ catch { /* fail-open */ }
56
+ return { status: 'ok', timestamp: new Date().toISOString(), version: VERSION, pid: process.pid, uptime: Math.round(process.uptime()), instances };
57
+ }
58
+ };
59
+ const metrics = {};
60
+ /** Return the in-memory per-method metrics map (count, totalMs, maxMs).
61
+ * @returns Reference to the live metrics map keyed by method name
62
+ */
63
+ function getMetrics() { return metrics; }
64
+ const handlerMeta = {};
65
+ /**
66
+ * Register a method handler in the stdio transport's handler table.
67
+ * Unlike the SDK registry, this does not add wrapping (metrics, audit, etc.).
68
+ * @param method - JSON-RPC method name
69
+ * @param handler - Handler function invoked with the parsed params
70
+ */
71
+ function registerHandler(method, handler) {
72
+ handlers[method] = handler;
73
+ handlerMeta[method] = { method };
74
+ }
75
+ /**
76
+ * Return a sorted list of all registered method names in the stdio transport.
77
+ * @returns Array of method name strings in alphabetical order
78
+ */
79
+ function listRegisteredMethods() {
80
+ return Object.keys(handlerMeta).sort();
81
+ }
82
+ /**
83
+ * Look up a registered handler by method name.
84
+ * @param method - JSON-RPC method name to look up
85
+ * @returns The handler function, or `undefined` if not registered
86
+ */
87
+ function getHandler(method) {
88
+ return handlers[method];
89
+ }
90
+ function makeError(id, code, message, data) {
91
+ return { jsonrpc: '2.0', id: id ?? null, error: { code, message, data } };
92
+ }
93
+ /**
94
+ * Start the stdio JSON-RPC 2.0 transport, reading requests from stdin and writing responses to stdout.
95
+ * Registers built-in handlers for `initialize`, `notifications/initialized`, `shutdown`, and `exit`.
96
+ * @param opts - Optional stream overrides (input, output, stderr) and environment; defaults to process streams
97
+ */
98
+ function startTransport(opts = {}) {
99
+ const runtimeConfig = (0, runtimeConfig_1.getRuntimeConfig)();
100
+ const verbose = runtimeConfig.logging.verbose;
101
+ const protocolLog = runtimeConfig.logging.protocol; // raw frames (parsed) logging
102
+ const diag = runtimeConfig.logging.diagnostics || verbose; // banner + environment snapshot
103
+ const log = (level, msg, extra) => {
104
+ if (level === 'debug' && !verbose)
105
+ return;
106
+ const ts = new Date().toISOString();
107
+ const line = `[${ts}] [${level}] ${msg}`;
108
+ try {
109
+ (opts.stderr || process.stderr).write(line + (extra ? ` ${JSON.stringify(extra)}` : '') + '\n');
110
+ }
111
+ catch { /* ignore */ }
112
+ };
113
+ if (diag) {
114
+ log('info', 'startup', {
115
+ version: VERSION,
116
+ pid: process.pid,
117
+ node: process.version,
118
+ cwd: process.cwd(),
119
+ mutationEnabled: runtimeConfig.mutationEnabled,
120
+ verbose,
121
+ protocolLog,
122
+ diagnosticsEnabled: runtimeConfig.logging.diagnostics
123
+ });
124
+ }
125
+ // Global crash / rejection safety net to aid diagnostics in host clients that only see silent exits.
126
+ // Note: process.exit() is handled by the unified shutdownGuard in index.ts (Issue #36 fix).
127
+ // This handler only logs — the guard prevents duplicate exit() races.
128
+ process.on('uncaughtException', (err) => {
129
+ log('error', 'uncaughtException', { message: err.message, stack: err.stack });
130
+ });
131
+ process.on('unhandledRejection', (reason) => {
132
+ const msg = typeof reason === 'object' && reason && 'message' in reason ? reason.message : String(reason);
133
+ log('error', 'unhandledRejection', { reason: msg });
134
+ });
135
+ // Handshake state & helpers (deterministic: initialize result flushes, then server/ready)
136
+ let initialized = false;
137
+ let readyEmitted = false;
138
+ function emitReady(reason) {
139
+ if (readyEmitted)
140
+ return;
141
+ readyEmitted = true;
142
+ try {
143
+ (opts.output || process.stdout).write(JSON.stringify({ jsonrpc: '2.0', method: 'server/ready', params: { version: VERSION, reason } }) + '\n');
144
+ (opts.output || process.stdout).write(JSON.stringify({ jsonrpc: '2.0', method: 'notifications/tools/list_changed', params: {} }) + '\n');
145
+ }
146
+ catch { /* ignore */ }
147
+ }
148
+ // Replace initialize handler with direct interception below to control write callback ordering.
149
+ registerHandler('initialize', (params) => {
150
+ // This body will be bypassed by explicit fast-path in line reader (kept for compatibility if called indirectly)
151
+ const p = params;
152
+ return {
153
+ protocolVersion: p?.protocolVersion || '2025-06-18',
154
+ serverInfo: { name: 'index', version: VERSION },
155
+ capabilities: { roots: { listChanged: true }, tools: { listChanged: true } }
156
+ };
157
+ });
158
+ // Accept notification some clients send post-initialize; respond benignly (single registration)
159
+ registerHandler('notifications/initialized', () => ({ acknowledged: true }));
160
+ registerHandler('shutdown', () => ({ shuttingDown: true }));
161
+ registerHandler('exit', () => { setTimeout(() => process.exit(0), 0); return { exiting: true }; });
162
+ // Use readline only for input parsing; do NOT set output to avoid echoing client-sent
163
+ // JSON-RPC request lines back to stdout (which confused tests expecting only server
164
+ // responses and caused false negatives when matching initialize/result frames).
165
+ const rl = (0, readline_1.createInterface)({ input: opts.input || process.stdin });
166
+ const respondFn = (obj) => {
167
+ if (protocolLog) {
168
+ const base = { id: obj.id ?? null };
169
+ if ('error' in obj)
170
+ base.error = obj.error.code;
171
+ else
172
+ base.ok = true;
173
+ log('debug', 'send', base);
174
+ }
175
+ (opts.output || process.stdout).write(JSON.stringify(obj) + '\n');
176
+ };
177
+ // NOTE: Unlike earlier versions we DO NOT emit server/ready until after initialize response.
178
+ // This matches stricter clients (and reference PowerShell server) that expect handshake ordering.
179
+ rl.on('line', (line) => {
180
+ const trimmed = line.trim();
181
+ if (!trimmed)
182
+ return;
183
+ if (trimmed === 'quit') {
184
+ process.exit(0);
185
+ }
186
+ let req;
187
+ try {
188
+ req = JSON.parse(trimmed);
189
+ if (protocolLog) {
190
+ log('debug', 'recv', { id: req.id ?? null, method: req.method });
191
+ }
192
+ }
193
+ catch (err) {
194
+ log('error', 'parse_error', { raw: trimmed.slice(0, 200) });
195
+ respondFn(makeError(null, -32700, 'Parse error'));
196
+ return;
197
+ }
198
+ if (req.jsonrpc !== '2.0' || !req.method) {
199
+ respondFn(makeError(req.id ?? null, -32600, 'Invalid Request'));
200
+ return;
201
+ }
202
+ // Fast-path initialize for deterministic ordering: respond immediately with write callback then schedule ready.
203
+ if (req.method === 'initialize') {
204
+ const p = req.params;
205
+ if (initialized) {
206
+ respondFn(makeError(req.id ?? null, -32600, 'Already initialized'));
207
+ return;
208
+ }
209
+ initialized = true;
210
+ // Reuse registered initialize handler so future shared logic (capability changes, root listing, etc.) stays centralized.
211
+ const initHandler = handlers['initialize'];
212
+ const start = Date.now();
213
+ let resultPayload;
214
+ try {
215
+ resultPayload = initHandler ? initHandler(req.params) : {
216
+ protocolVersion: p?.protocolVersion || '2025-06-18',
217
+ serverInfo: { name: 'index', version: VERSION },
218
+ capabilities: { roots: { listChanged: true }, tools: { listChanged: true } }
219
+ };
220
+ }
221
+ catch (e) {
222
+ respondFn(makeError(req.id ?? null, -32603, 'Initialize handler failure', { message: e?.message }));
223
+ return;
224
+ }
225
+ // Support promise return from handler
226
+ Promise.resolve(resultPayload).then(resolved => {
227
+ const dur = Date.now() - start;
228
+ const rec = metrics['initialize'] || (metrics['initialize'] = { count: 0, totalMs: 0, maxMs: 0 });
229
+ rec.count++;
230
+ rec.totalMs += dur;
231
+ if (dur > rec.maxMs)
232
+ rec.maxMs = dur;
233
+ const initResult = { jsonrpc: '2.0', id: req.id ?? 1, result: resolved };
234
+ try {
235
+ if (protocolLog) {
236
+ log('debug', 'respond_success', { id: req.id ?? 1, method: 'initialize' });
237
+ }
238
+ (opts.output || process.stdout).write(JSON.stringify(initResult) + '\n', () => {
239
+ // Primary ready emission via macrotask after write flush
240
+ setTimeout(() => emitReady('post-initialize'), 0);
241
+ // Microtask fallback (parity with minimal server) for extreme scheduler edge cases
242
+ queueMicrotask(() => { if (!readyEmitted)
243
+ emitReady('post-initialize-microtask'); });
244
+ });
245
+ }
246
+ catch {
247
+ respondFn(makeError(req.id ?? null, -32603, 'Failed to write initialize result'));
248
+ }
249
+ });
250
+ return;
251
+ }
252
+ const handler = handlers[req.method];
253
+ if (!handler) {
254
+ // Provide richer context for missing method to help client authors.
255
+ const available = listRegisteredMethods();
256
+ log('debug', 'method_not_found', { requested: req.method, availableCount: available.length });
257
+ respondFn(makeError(req.id ?? null, -32601, 'Method not found', { method: req.method, available }));
258
+ return;
259
+ }
260
+ // Pre-dispatch parameter validation using registry input schemas (when available)
261
+ try {
262
+ const validation = (0, validationService_1.validateParams)(req.method, req.params);
263
+ if (!validation.ok) {
264
+ respondFn(makeError(req.id ?? null, -32602, 'Invalid params', { method: req.method, errors: validation.errors }));
265
+ return;
266
+ }
267
+ }
268
+ catch (e) { /* fail-open on validator issues */ }
269
+ const start = Date.now();
270
+ Promise.resolve()
271
+ .then(() => handler(req.params))
272
+ .then(result => {
273
+ if (!initialized) {
274
+ log('debug', 'call_before_initialize', { method: req.method });
275
+ }
276
+ const dur = Date.now() - start;
277
+ const rec = metrics[req.method] || (metrics[req.method] = { count: 0, totalMs: 0, maxMs: 0 });
278
+ rec.count++;
279
+ rec.totalMs += dur;
280
+ if (dur > rec.maxMs)
281
+ rec.maxMs = dur;
282
+ if (req.id !== undefined && req.id !== null) {
283
+ try {
284
+ if (protocolLog || verbose)
285
+ log('debug', 'respond_success', { id: req.id, method: req.method });
286
+ }
287
+ catch { /* ignore */ }
288
+ respondFn({ jsonrpc: '2.0', id: req.id, result });
289
+ }
290
+ })
291
+ .catch(e => {
292
+ const dur = Date.now() - start;
293
+ const rec = metrics[req.method] || (metrics[req.method] = { count: 0, totalMs: 0, maxMs: 0 });
294
+ rec.count++;
295
+ rec.totalMs += dur;
296
+ if (dur > rec.maxMs)
297
+ rec.maxMs = dur;
298
+ const maybeErr = e;
299
+ if (maybeErr && typeof maybeErr === 'object' && Number.isSafeInteger(maybeErr.code)) {
300
+ log('error', 'handler_error', { method: req.method, message: maybeErr.message, code: maybeErr.code });
301
+ respondFn(makeError(req.id ?? null, maybeErr.code, maybeErr.message || 'Error', { method: req.method, ...(maybeErr.data || {}) }));
302
+ return;
303
+ }
304
+ const errObj = e instanceof Error ? { message: e.message, stack: e.stack } : { message: 'Unknown error', value: e };
305
+ log('error', 'handler_error', { method: req.method, ...errObj });
306
+ respondFn(makeError(req.id ?? null, -32603, 'Internal error', { method: req.method, ...errObj }));
307
+ });
308
+ });
309
+ }
310
+ if (require.main === module) {
311
+ startTransport();
312
+ }
@@ -0,0 +1,21 @@
1
+ export declare const dynamicImport: (specifier: string) => any;
2
+ /**
3
+ * Set up stdout diagnostics wrapper for backpressure monitoring.
4
+ * Enabled via INDEX_SERVER_TRACE=healthMixed.
5
+ */
6
+ export declare function setupStdoutDiagnostics(): Promise<void>;
7
+ /**
8
+ * Override the internal request dispatcher to retain error.data & emit diagnostics.
9
+ * The upstream SDK has used both `_onRequest` (camel) and `_onrequest` (lower) across versions;
10
+ * we defensively hook whichever exists and assign our wrapper to BOTH names.
11
+ */
12
+ export declare function setupDispatcherOverride(server: any): void;
13
+ /**
14
+ * Wrap transport.send to detect initialize response flush and emit ready.
15
+ */
16
+ export declare function wrapTransportSend(server: any, transport: any): void;
17
+ /**
18
+ * Explicit keepalive to avoid premature process exit before first client request.
19
+ * @param label - Optional label for diagnostic log messages (e.g. 'secondary')
20
+ */
21
+ export declare function setupKeepalive(label?: string): void;