@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,237 @@
1
+ "use strict";
2
+ /**
3
+ * ThinClient - Stdio-to-HTTP bridge for MCP clients.
4
+ *
5
+ * **EXPERIMENTAL** — APIs, configuration, and behavior may change.
6
+ *
7
+ * A lightweight process that MCP hosts (VS Code, Claude) spawn via stdio.
8
+ * Instead of loading the full index, it forwards JSON-RPC frames to
9
+ * the leader server's HTTP endpoint.
10
+ *
11
+ * Flow: MCP Host --stdio--> ThinClient --HTTP--> Leader Server
12
+ *
13
+ * Features:
14
+ * - Reads JSON-RPC frames from stdin, POSTs to leader
15
+ * - Writes responses to stdout
16
+ * - Auto-discovers leader from instance state files
17
+ * - Reconnects on leader failover
18
+ */
19
+ var __importDefault = (this && this.__importDefault) || function (mod) {
20
+ return (mod && mod.__esModule) ? mod : { "default": mod };
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.ThinClient = void 0;
24
+ const fs_1 = __importDefault(require("fs"));
25
+ const path_1 = __importDefault(require("path"));
26
+ const http_1 = __importDefault(require("http"));
27
+ const DEFAULT_MAX_RETRIES = 5;
28
+ const DEFAULT_RETRY_DELAY = 500;
29
+ const LOCK_FILE = 'leader.lock';
30
+ class ThinClient {
31
+ leaderUrl;
32
+ stateDir;
33
+ maxRetries;
34
+ retryDelayMs;
35
+ _connected = false;
36
+ _stopped = false;
37
+ healthTimer = null;
38
+ constructor(options = {}) {
39
+ this.leaderUrl = options.leaderUrl ?? null;
40
+ this.stateDir = options.stateDir ?? null;
41
+ this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;
42
+ this.retryDelayMs = options.retryDelayMs ?? DEFAULT_RETRY_DELAY;
43
+ }
44
+ get connected() { return this._connected; }
45
+ /**
46
+ * Discover the leader URL from the state directory.
47
+ */
48
+ discoverLeader() {
49
+ if (!this.stateDir)
50
+ return null;
51
+ const lockPath = path_1.default.join(this.stateDir, LOCK_FILE);
52
+ try {
53
+ if (!fs_1.default.existsSync(lockPath))
54
+ return null;
55
+ const raw = fs_1.default.readFileSync(lockPath, 'utf8');
56
+ const entry = JSON.parse(raw);
57
+ if (entry.host && entry.port) {
58
+ return `http://${entry.host}:${entry.port}/mcp`;
59
+ }
60
+ }
61
+ catch {
62
+ // Can't read lock file
63
+ }
64
+ return null;
65
+ }
66
+ /**
67
+ * Resolve the leader URL (explicit or discovered).
68
+ * Re-discovers if the cached URL might be stale (leader changed port/host).
69
+ */
70
+ resolveLeaderUrl() {
71
+ if (this.leaderUrl && this.stateDir) {
72
+ // Validate cached URL still matches current leader.lock
73
+ const freshUrl = this.discoverLeader();
74
+ if (freshUrl && freshUrl !== this.leaderUrl) {
75
+ this.leaderUrl = freshUrl;
76
+ this._connected = false;
77
+ }
78
+ }
79
+ else if (!this.leaderUrl) {
80
+ const discovered = this.discoverLeader();
81
+ if (discovered) {
82
+ this.leaderUrl = discovered;
83
+ }
84
+ }
85
+ return this.leaderUrl;
86
+ }
87
+ /**
88
+ * Send a JSON-RPC request to the leader and return the response.
89
+ */
90
+ async sendRpc(method, params = {}, id = 1) {
91
+ const url = this.resolveLeaderUrl();
92
+ if (!url) {
93
+ throw new Error('No leader URL available');
94
+ }
95
+ let lastError = null;
96
+ for (let attempt = 0; attempt < this.maxRetries; attempt++) {
97
+ try {
98
+ const response = await this.httpPost(`${url}/rpc`, {
99
+ jsonrpc: '2.0',
100
+ method,
101
+ params,
102
+ id,
103
+ });
104
+ this._connected = true;
105
+ return response;
106
+ }
107
+ catch (err) {
108
+ lastError = err instanceof Error ? err : new Error(String(err));
109
+ this._connected = false;
110
+ // On failure, try re-discovering leader (may have failed over)
111
+ if (this.stateDir && attempt < this.maxRetries - 1) {
112
+ this.leaderUrl = null; // Force re-discovery
113
+ await this.sleep(this.retryDelayMs * Math.pow(2, attempt));
114
+ }
115
+ }
116
+ }
117
+ throw lastError ?? new Error('Failed to connect to leader');
118
+ }
119
+ /**
120
+ * Check if the leader is healthy.
121
+ */
122
+ async checkHealth() {
123
+ const url = this.resolveLeaderUrl();
124
+ if (!url)
125
+ return false;
126
+ try {
127
+ const response = await this.httpGet(`${url}/health`);
128
+ return response?.status === 'ok';
129
+ }
130
+ catch {
131
+ return false;
132
+ }
133
+ }
134
+ /**
135
+ * Process a raw JSON-RPC frame (as received from stdin).
136
+ */
137
+ async processFrame(frame) {
138
+ let parsed;
139
+ try {
140
+ parsed = JSON.parse(frame);
141
+ }
142
+ catch {
143
+ return JSON.stringify({
144
+ jsonrpc: '2.0',
145
+ error: { code: -32700, message: 'Parse error' },
146
+ id: null,
147
+ });
148
+ }
149
+ try {
150
+ const result = await this.sendRpc(parsed.method, parsed.params, parsed.id);
151
+ return JSON.stringify(result);
152
+ }
153
+ catch (err) {
154
+ return JSON.stringify({
155
+ jsonrpc: '2.0',
156
+ error: { code: -32603, message: err instanceof Error ? err.message : 'Internal error' },
157
+ id: parsed.id ?? null,
158
+ });
159
+ }
160
+ }
161
+ stop() {
162
+ this._stopped = true;
163
+ this._connected = false;
164
+ if (this.healthTimer) {
165
+ clearInterval(this.healthTimer);
166
+ this.healthTimer = null;
167
+ }
168
+ }
169
+ async httpPost(url, body) {
170
+ const bodyStr = JSON.stringify(body);
171
+ return new Promise((resolve, reject) => {
172
+ const urlObj = new URL(url);
173
+ const req = http_1.default.request({
174
+ hostname: urlObj.hostname,
175
+ port: parseInt(urlObj.port),
176
+ path: urlObj.pathname,
177
+ method: 'POST',
178
+ headers: {
179
+ 'Content-Type': 'application/json',
180
+ 'Content-Length': Buffer.byteLength(bodyStr),
181
+ },
182
+ timeout: 10000,
183
+ }, (res) => {
184
+ let data = '';
185
+ res.on('data', (chunk) => { data += chunk; });
186
+ res.on('end', () => {
187
+ try {
188
+ resolve(JSON.parse(data));
189
+ }
190
+ catch {
191
+ reject(new Error(`Invalid JSON response: ${data.slice(0, 100)}`));
192
+ }
193
+ });
194
+ });
195
+ req.on('error', reject);
196
+ req.on('timeout', () => {
197
+ req.destroy();
198
+ reject(new Error('Request timeout'));
199
+ });
200
+ req.write(bodyStr);
201
+ req.end();
202
+ });
203
+ }
204
+ async httpGet(url) {
205
+ return new Promise((resolve, reject) => {
206
+ const urlObj = new URL(url);
207
+ const req = http_1.default.request({
208
+ hostname: urlObj.hostname,
209
+ port: parseInt(urlObj.port),
210
+ path: urlObj.pathname,
211
+ method: 'GET',
212
+ timeout: 5000,
213
+ }, (res) => {
214
+ let data = '';
215
+ res.on('data', (chunk) => { data += chunk; });
216
+ res.on('end', () => {
217
+ try {
218
+ resolve(JSON.parse(data));
219
+ }
220
+ catch {
221
+ reject(new Error(`Invalid JSON response`));
222
+ }
223
+ });
224
+ });
225
+ req.on('error', reject);
226
+ req.on('timeout', () => {
227
+ req.destroy();
228
+ reject(new Error('Request timeout'));
229
+ });
230
+ req.end();
231
+ });
232
+ }
233
+ sleep(ms) {
234
+ return new Promise(resolve => setTimeout(resolve, ms));
235
+ }
236
+ }
237
+ exports.ThinClient = ThinClient;
@@ -0,0 +1,161 @@
1
+ /**
2
+ * WebSocketManager - Phase 1 Dashboard Foundation
3
+ *
4
+ * Manages WebSocket connections for real-time dashboard updates.
5
+ * Provides bidirectional communication between dashboard clients and server.
6
+ */
7
+ import { WebSocket } from 'ws';
8
+ import { Server as HttpServer } from 'http';
9
+ import { MetricsSnapshot } from './MetricsCollector.js';
10
+ export interface DashboardMessage {
11
+ type: string;
12
+ timestamp: number;
13
+ data?: unknown;
14
+ }
15
+ export interface MetricsUpdateMessage extends DashboardMessage {
16
+ type: 'metrics_update';
17
+ data: MetricsSnapshot;
18
+ }
19
+ export interface ToolCallMessage extends DashboardMessage {
20
+ type: 'tool_call';
21
+ data: {
22
+ toolName: string;
23
+ success: boolean;
24
+ responseTime: number;
25
+ clientId?: string;
26
+ errorType?: string;
27
+ };
28
+ }
29
+ export interface ClientConnectMessage extends DashboardMessage {
30
+ type: 'client_connect';
31
+ data: {
32
+ clientId: string;
33
+ timestamp: number;
34
+ };
35
+ }
36
+ export interface ClientDisconnectMessage extends DashboardMessage {
37
+ type: 'client_disconnect';
38
+ data: {
39
+ clientId: string;
40
+ timestamp: number;
41
+ duration: number;
42
+ };
43
+ }
44
+ export interface ErrorMessage extends DashboardMessage {
45
+ type: 'error';
46
+ data: {
47
+ message: string;
48
+ stack?: string;
49
+ severity: 'low' | 'medium' | 'high' | 'critical';
50
+ };
51
+ }
52
+ export interface GenericMessage extends DashboardMessage {
53
+ type: 'welcome' | 'pong' | 'subscribed';
54
+ data?: unknown;
55
+ }
56
+ export interface MessagingEventMessage extends DashboardMessage {
57
+ type: 'message_received' | 'message_purged';
58
+ data?: {
59
+ messageId?: string;
60
+ channel?: string;
61
+ count?: number;
62
+ };
63
+ }
64
+ export interface SyntheticTraceMessage extends DashboardMessage {
65
+ type: 'synthetic_trace';
66
+ data: {
67
+ runId: string;
68
+ seq: number;
69
+ total?: number;
70
+ method: string;
71
+ success: boolean;
72
+ durationMs: number;
73
+ started: number;
74
+ ended: number;
75
+ error?: string;
76
+ skipped?: boolean;
77
+ };
78
+ }
79
+ export type DashboardEventMessage = MetricsUpdateMessage | ToolCallMessage | ClientConnectMessage | ClientDisconnectMessage | ErrorMessage | GenericMessage | SyntheticTraceMessage | MessagingEventMessage;
80
+ interface ExtendedWebSocket extends WebSocket {
81
+ isAlive?: boolean;
82
+ clientId?: string;
83
+ connectedAt?: number;
84
+ lastActivity?: number;
85
+ ipAddress?: string;
86
+ userAgent?: string;
87
+ }
88
+ export interface WebSocketManagerOptions {
89
+ path?: string;
90
+ maxConnections?: number;
91
+ pingInterval?: number;
92
+ pongTimeout?: number;
93
+ }
94
+ export declare class WebSocketManager {
95
+ private wss;
96
+ private clients;
97
+ private options;
98
+ private pingTimer?;
99
+ private persistenceManager;
100
+ constructor(options?: WebSocketManagerOptions);
101
+ /**
102
+ * Initialize WebSocket server
103
+ */
104
+ initialize(server: HttpServer): void;
105
+ /**
106
+ * Broadcast message to all connected clients
107
+ */
108
+ broadcast(message: DashboardEventMessage): void;
109
+ /**
110
+ * Send message to specific client
111
+ */
112
+ sendToClient(client: ExtendedWebSocket, message: DashboardEventMessage): void;
113
+ /**
114
+ * Get connected client count
115
+ */
116
+ getClientCount(): number;
117
+ /**
118
+ * Get all connected clients
119
+ */
120
+ getClients(): ExtendedWebSocket[];
121
+ /**
122
+ * Close all connections and cleanup
123
+ */
124
+ close(): void;
125
+ private handleConnection;
126
+ private handleClientMessage;
127
+ private sendError;
128
+ private startHeartbeat;
129
+ /** Generate a UUID using crypto.randomUUID if available */
130
+ private safeGenerateClientId;
131
+ /** Send current metrics snapshot to a specific client */
132
+ private sendCurrentMetrics;
133
+ /** Broadcast fresh metrics snapshot to all clients */
134
+ private broadcastMetricsSnapshot;
135
+ /**
136
+ * Return lightweight summaries of active websocket connections with real IDs and durations.
137
+ * Exposed via /api/admin/connections for dashboard consumption.
138
+ */
139
+ getActiveConnectionSummaries(): {
140
+ id: string;
141
+ connectedAt: number;
142
+ durationMs: number;
143
+ }[];
144
+ /**
145
+ * Persist current WebSocket connection state to disk
146
+ */
147
+ private persistConnectionState;
148
+ /**
149
+ * Update connection activity timestamp
150
+ */
151
+ updateConnectionActivity(clientId: string): boolean;
152
+ }
153
+ /**
154
+ * Get or create the global WebSocket manager instance
155
+ */
156
+ export declare function getWebSocketManager(): WebSocketManager;
157
+ /**
158
+ * Set a custom WebSocket manager instance (useful for testing)
159
+ */
160
+ export declare function setWebSocketManager(manager: WebSocketManager | null): void;
161
+ export {};