@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,551 @@
1
+ "use strict";
2
+ /**
3
+ * Configurable Buffer Ring - Generic circular buffer implementation
4
+ *
5
+ * Provides a high-performance, memory-efficient circular buffer with configurable
6
+ * size limits, overflow strategies, and optional persistence support.
7
+ *
8
+ * Features:
9
+ * - Configurable capacity with automatic overflow handling
10
+ * - Multiple overflow strategies (drop-oldest, drop-newest, resize)
11
+ * - Optional persistence to disk with atomic writes
12
+ * - Type-safe generic implementation
13
+ * - Memory usage tracking and cleanup
14
+ * - Event notifications for buffer state changes
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.BufferRingFactory = exports.BufferRing = exports.OverflowStrategy = void 0;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const crypto = __importStar(require("crypto"));
54
+ const events_1 = require("events");
55
+ const logger_1 = require("../services/logger");
56
+ const runtimeConfig_1 = require("../config/runtimeConfig");
57
+ /**
58
+ * Buffer overflow strategies
59
+ */
60
+ var OverflowStrategy;
61
+ (function (OverflowStrategy) {
62
+ /** Drop the oldest entries when buffer is full (default) */
63
+ OverflowStrategy["DROP_OLDEST"] = "drop-oldest";
64
+ /** Drop the newest entry when buffer is full */
65
+ OverflowStrategy["DROP_NEWEST"] = "drop-newest";
66
+ /** Resize the buffer to accommodate new entries */
67
+ OverflowStrategy["RESIZE"] = "resize";
68
+ /** Throw an error when buffer is full */
69
+ OverflowStrategy["ERROR"] = "error";
70
+ })(OverflowStrategy || (exports.OverflowStrategy = OverflowStrategy = {}));
71
+ /**
72
+ * Generic configurable buffer ring implementation
73
+ */
74
+ class BufferRing extends events_1.EventEmitter {
75
+ buffer = [];
76
+ writeIndex = 0;
77
+ isFull = false;
78
+ config;
79
+ stats;
80
+ /** Sequence counter for append mode records */
81
+ appendSeq = 0;
82
+ /** Track whether append mode file has been lazily loaded */
83
+ appendLoaded = false;
84
+ constructor(config = {}) {
85
+ super();
86
+ this.config = {
87
+ capacity: 1000,
88
+ overflowStrategy: OverflowStrategy.DROP_OLDEST,
89
+ autoPersist: false,
90
+ maxPersistEntries: 0,
91
+ enableIntegrityCheck: true,
92
+ appendMode: true,
93
+ ...config
94
+ };
95
+ // Environment override via config: allow disable or enable explicitly
96
+ const bufferRingCfg = (0, runtimeConfig_1.getRuntimeConfig)().bufferRing;
97
+ this.config.appendMode = bufferRingCfg.append;
98
+ this.stats = {
99
+ count: 0,
100
+ capacity: this.config.capacity,
101
+ totalAdded: 0,
102
+ totalDropped: 0,
103
+ resizeCount: 0,
104
+ memoryUsage: 0,
105
+ lastModified: new Date(),
106
+ utilization: 0
107
+ };
108
+ // Load from persistence if configured
109
+ if (this.config.persistPath) {
110
+ if (this.config.appendMode) {
111
+ // Lazy load for append mode occurs on first access; optionally preload if config set
112
+ if (bufferRingCfg.preload) {
113
+ try {
114
+ this.loadFromAppendSync();
115
+ }
116
+ catch (error) {
117
+ const err = error instanceof Error ? error : new Error('Unknown append preload error');
118
+ this.emit('error', err, 'load');
119
+ (0, logger_1.logError)(`[BufferRing] Failed (append) to load from ${this.config.persistPath}`, err);
120
+ }
121
+ }
122
+ }
123
+ else {
124
+ this.loadFromDisk().catch(error => {
125
+ this.emit('error', error, 'load');
126
+ (0, logger_1.logError)(`[BufferRing] Failed to load from ${this.config.persistPath}`, error);
127
+ });
128
+ }
129
+ }
130
+ }
131
+ /**
132
+ * Add an entry to the buffer
133
+ */
134
+ add(entry) {
135
+ try {
136
+ const serializedEntry = this.config.serializer ? this.config.serializer(entry) : entry;
137
+ let dropped;
138
+ if (this.isFull) {
139
+ switch (this.config.overflowStrategy) {
140
+ case OverflowStrategy.DROP_OLDEST:
141
+ dropped = this.buffer[this.writeIndex];
142
+ this.buffer[this.writeIndex] = serializedEntry;
143
+ this.writeIndex = (this.writeIndex + 1) % this.config.capacity;
144
+ this.stats.totalDropped++;
145
+ if (dropped !== undefined) {
146
+ this.emit('entry-dropped', dropped, 'overflow');
147
+ }
148
+ break;
149
+ case OverflowStrategy.DROP_NEWEST:
150
+ this.emit('entry-dropped', serializedEntry, 'overflow');
151
+ this.stats.totalDropped++;
152
+ return false;
153
+ case OverflowStrategy.RESIZE:
154
+ this.resize(this.config.capacity * 2);
155
+ this.buffer[this.writeIndex] = serializedEntry;
156
+ this.writeIndex++;
157
+ this.stats.count++;
158
+ break;
159
+ case OverflowStrategy.ERROR:
160
+ throw new Error(`Buffer overflow: capacity ${this.config.capacity} exceeded`);
161
+ }
162
+ }
163
+ else {
164
+ this.buffer[this.writeIndex] = serializedEntry;
165
+ this.writeIndex++;
166
+ this.stats.count++;
167
+ if (this.writeIndex >= this.config.capacity) {
168
+ this.isFull = true;
169
+ this.writeIndex = 0;
170
+ this.emit('buffer-full', this.config.capacity);
171
+ }
172
+ }
173
+ this.stats.totalAdded++;
174
+ this.stats.lastModified = new Date();
175
+ this.updateStats();
176
+ this.emit('entry-added', serializedEntry, this.writeIndex - 1);
177
+ // Auto-persist if enabled
178
+ if (this.config.autoPersist && this.config.persistPath) {
179
+ if (this.config.appendMode) {
180
+ try {
181
+ this.appendToDisk(serializedEntry);
182
+ }
183
+ catch (err) {
184
+ this.emit('error', err, 'auto-append');
185
+ }
186
+ }
187
+ else {
188
+ this.saveToDisk().catch(error => {
189
+ this.emit('error', error, 'auto-persist');
190
+ });
191
+ }
192
+ }
193
+ return true;
194
+ }
195
+ catch (error) {
196
+ this.emit('error', error, 'add');
197
+ return false;
198
+ }
199
+ }
200
+ /**
201
+ * Get all entries in chronological order (oldest first)
202
+ */
203
+ getAll() {
204
+ // Lazy load append file on first read if in append mode
205
+ if (this.config.appendMode && this.config.persistPath && !this.appendLoaded) {
206
+ try {
207
+ this.loadFromAppendSync();
208
+ }
209
+ catch (err) {
210
+ this.emit('error', err, 'load-append');
211
+ }
212
+ }
213
+ if (!this.isFull) {
214
+ return this.buffer.slice(0, this.writeIndex).map(this.deserializeEntry.bind(this));
215
+ }
216
+ // Buffer is full, need to reorder from oldest to newest
217
+ const oldest = this.buffer.slice(this.writeIndex).map(this.deserializeEntry.bind(this));
218
+ const newest = this.buffer.slice(0, this.writeIndex).map(this.deserializeEntry.bind(this));
219
+ return [...oldest, ...newest];
220
+ }
221
+ /**
222
+ * Get the last N entries (newest first)
223
+ */
224
+ getLast(n) {
225
+ const all = this.getAll();
226
+ return all.slice(-n).reverse();
227
+ }
228
+ /**
229
+ * Get the first N entries (oldest first)
230
+ */
231
+ getFirst(n) {
232
+ const all = this.getAll();
233
+ return all.slice(0, n);
234
+ }
235
+ /**
236
+ * Get entries within a range
237
+ */
238
+ getRange(start, end) {
239
+ const all = this.getAll();
240
+ return all.slice(start, end);
241
+ }
242
+ /**
243
+ * Filter entries based on predicate
244
+ */
245
+ filter(predicate) {
246
+ return this.getAll().filter(predicate);
247
+ }
248
+ /**
249
+ * Find first entry matching predicate
250
+ */
251
+ find(predicate) {
252
+ return this.getAll().find(predicate);
253
+ }
254
+ /**
255
+ * Clear all entries
256
+ */
257
+ clear() {
258
+ const droppedCount = this.stats.count;
259
+ this.buffer.forEach(entry => {
260
+ if (entry !== undefined) {
261
+ this.emit('entry-dropped', entry, 'clear');
262
+ }
263
+ });
264
+ this.buffer = [];
265
+ this.writeIndex = 0;
266
+ this.isFull = false;
267
+ this.stats.count = 0;
268
+ this.stats.totalDropped += droppedCount;
269
+ this.stats.lastModified = new Date();
270
+ this.updateStats();
271
+ (0, logger_1.logInfo)(`[BufferRing] Cleared ${droppedCount} entries`);
272
+ }
273
+ /**
274
+ * Resize the buffer capacity
275
+ */
276
+ resize(newCapacity) {
277
+ if (newCapacity <= 0) {
278
+ throw new Error('Buffer capacity must be positive');
279
+ }
280
+ const oldCapacity = this.config.capacity;
281
+ const currentEntries = this.getAll();
282
+ this.config.capacity = newCapacity;
283
+ this.buffer = [];
284
+ this.writeIndex = 0;
285
+ this.isFull = false;
286
+ this.stats.count = 0;
287
+ this.stats.capacity = newCapacity;
288
+ this.stats.resizeCount++;
289
+ // Re-add entries up to new capacity
290
+ const entriesToKeep = currentEntries.slice(-newCapacity);
291
+ entriesToKeep.forEach(entry => this.add(entry));
292
+ this.emit('buffer-resized', oldCapacity, newCapacity);
293
+ (0, logger_1.logInfo)(`[BufferRing] Resized from ${oldCapacity} to ${newCapacity} entries`);
294
+ }
295
+ /**
296
+ * Get buffer statistics
297
+ */
298
+ getStats() {
299
+ this.updateStats();
300
+ return { ...this.stats };
301
+ }
302
+ /**
303
+ * Get buffer configuration
304
+ */
305
+ getConfig() {
306
+ return { ...this.config };
307
+ }
308
+ /**
309
+ * Update configuration
310
+ */
311
+ updateConfig(newConfig) {
312
+ const oldCapacity = this.config.capacity;
313
+ this.config = { ...this.config, ...newConfig };
314
+ // Handle capacity changes
315
+ if (this.config.capacity !== oldCapacity) {
316
+ this.resize(this.config.capacity);
317
+ }
318
+ }
319
+ /**
320
+ * Save buffer to disk
321
+ */
322
+ async saveToDisk() {
323
+ if (!this.config.persistPath) {
324
+ throw new Error('No persist path configured');
325
+ }
326
+ try {
327
+ const entries = this.getAll();
328
+ const entriesToSave = this.config.maxPersistEntries > 0
329
+ ? entries.slice(-this.config.maxPersistEntries)
330
+ : entries;
331
+ const data = {
332
+ config: this.config,
333
+ entries: entriesToSave,
334
+ stats: this.getStats(),
335
+ version: '1.0.0',
336
+ createdAt: new Date().toISOString(),
337
+ lastSaved: new Date().toISOString()
338
+ };
339
+ if (this.config.enableIntegrityCheck) {
340
+ data.checksum = this.computeChecksum(data);
341
+ }
342
+ // Ensure directory exists
343
+ const dir = path.dirname(this.config.persistPath);
344
+ if (!fs.existsSync(dir)) {
345
+ fs.mkdirSync(dir, { recursive: true });
346
+ }
347
+ // Atomic write
348
+ const tempPath = this.config.persistPath + '.tmp';
349
+ const serialized = JSON.stringify(data, null, 2);
350
+ fs.writeFileSync(tempPath, serialized);
351
+ fs.renameSync(tempPath, this.config.persistPath);
352
+ this.emit('persisted', this.config.persistPath, entriesToSave.length);
353
+ if (!this.config.suppressPersistLog) {
354
+ (0, logger_1.logInfo)(`[BufferRing] Persisted ${entriesToSave.length} entries to ${this.config.persistPath}`);
355
+ }
356
+ }
357
+ catch (error) {
358
+ this.emit('error', error, 'save');
359
+ throw error;
360
+ }
361
+ }
362
+ /**
363
+ * Load buffer from disk
364
+ */
365
+ async loadFromDisk() {
366
+ if (!this.config.persistPath || !fs.existsSync(this.config.persistPath)) {
367
+ return;
368
+ }
369
+ try {
370
+ const raw = fs.readFileSync(this.config.persistPath, 'utf8');
371
+ const data = JSON.parse(raw);
372
+ // Verify integrity if enabled
373
+ if (this.config.enableIntegrityCheck && data.checksum) {
374
+ const expectedChecksum = this.computeChecksum(data);
375
+ if (data.checksum !== expectedChecksum) {
376
+ throw new Error('Integrity check failed: checksum mismatch');
377
+ }
378
+ }
379
+ // Clear current buffer
380
+ this.clear();
381
+ // Restore entries
382
+ data.entries.forEach(entry => this.add(entry));
383
+ // Update stats (preserve some current values)
384
+ this.stats = {
385
+ ...data.stats,
386
+ lastModified: new Date(),
387
+ memoryUsage: this.estimateMemoryUsage()
388
+ };
389
+ this.emit('loaded', this.config.persistPath, data.entries.length);
390
+ if (!this.config.suppressPersistLog) {
391
+ (0, logger_1.logInfo)(`[BufferRing] Loaded ${data.entries.length} entries from ${this.config.persistPath}`);
392
+ }
393
+ }
394
+ catch (error) {
395
+ this.emit('error', error, 'load');
396
+ throw error;
397
+ }
398
+ }
399
+ /**
400
+ * Append a single entry (JSONL) instead of rewriting full snapshot.
401
+ * Record shape: { t: ISO timestamp, i: sequence, v: serializedEntry }
402
+ */
403
+ appendToDisk(entry) {
404
+ if (!this.config.persistPath)
405
+ return;
406
+ const dir = path.dirname(this.config.persistPath);
407
+ if (!fs.existsSync(dir)) {
408
+ fs.mkdirSync(dir, { recursive: true });
409
+ }
410
+ const rec = { t: new Date().toISOString(), i: this.appendSeq++, v: entry };
411
+ fs.appendFileSync(this.config.persistPath, JSON.stringify(rec) + '\n');
412
+ if (!this.config.suppressPersistLog && this.appendSeq % 250 === 0) {
413
+ // Throttle log noise (every 250 appends)
414
+ (0, logger_1.logInfo)(`[BufferRing] Appended ${this.appendSeq} records to ${this.config.persistPath}`);
415
+ }
416
+ }
417
+ /**
418
+ * Synchronous load for append mode (reads JSONL file)
419
+ */
420
+ loadFromAppendSync() {
421
+ if (!this.config.persistPath || !fs.existsSync(this.config.persistPath)) {
422
+ this.appendLoaded = true;
423
+ return;
424
+ }
425
+ try {
426
+ const raw = fs.readFileSync(this.config.persistPath, 'utf8');
427
+ const lines = raw.split(/\r?\n/).filter(l => l.trim().length);
428
+ const max = this.config.maxPersistEntries > 0 ? this.config.maxPersistEntries : this.config.capacity;
429
+ const slice = lines.slice(-max);
430
+ // Clear existing buffer first (without emitting per-drop noise)
431
+ this.buffer = [];
432
+ this.writeIndex = 0;
433
+ this.isFull = false;
434
+ this.stats.count = 0;
435
+ slice.forEach(line => {
436
+ try {
437
+ const rec = JSON.parse(line);
438
+ this.add(rec.v); // reuse add for ordering & stats
439
+ if (typeof rec.i === 'number' && rec.i >= this.appendSeq)
440
+ this.appendSeq = rec.i + 1;
441
+ }
442
+ catch { /* skip malformed line */ }
443
+ });
444
+ this.appendLoaded = true;
445
+ if (!this.config.suppressPersistLog) {
446
+ (0, logger_1.logInfo)(`[BufferRing] Loaded (append mode) ${slice.length}/${lines.length} entries from ${this.config.persistPath}`);
447
+ }
448
+ }
449
+ catch (err) {
450
+ this.appendLoaded = true; // avoid retry loop
451
+ throw err;
452
+ }
453
+ }
454
+ /**
455
+ * Get memory usage estimate
456
+ */
457
+ getMemoryUsage() {
458
+ return this.estimateMemoryUsage();
459
+ }
460
+ /**
461
+ * Compact buffer by removing undefined entries
462
+ */
463
+ compact() {
464
+ const validEntries = this.getAll();
465
+ this.clear();
466
+ validEntries.forEach(entry => this.add(entry));
467
+ (0, logger_1.logInfo)(`[BufferRing] Compacted buffer, retained ${validEntries.length} entries`);
468
+ }
469
+ /**
470
+ * Private helper methods
471
+ */
472
+ deserializeEntry(entry) {
473
+ return this.config.deserializer ? this.config.deserializer(entry) : entry;
474
+ }
475
+ updateStats() {
476
+ this.stats.utilization = (this.stats.count / this.config.capacity) * 100;
477
+ this.stats.memoryUsage = this.estimateMemoryUsage();
478
+ }
479
+ estimateMemoryUsage() {
480
+ // Rough estimate: 8 bytes per pointer + JSON stringified size
481
+ const baseSize = this.buffer.length * 8;
482
+ const dataSize = JSON.stringify(this.buffer.filter(x => x !== undefined)).length * 2; // UTF-16
483
+ return baseSize + dataSize;
484
+ }
485
+ computeChecksum(data) {
486
+ const dataWithoutChecksum = { ...data };
487
+ delete dataWithoutChecksum.checksum;
488
+ const serialized = JSON.stringify(dataWithoutChecksum, Object.keys(dataWithoutChecksum).sort());
489
+ return crypto.createHash('sha256').update(serialized).digest('hex');
490
+ }
491
+ }
492
+ exports.BufferRing = BufferRing;
493
+ /**
494
+ * Factory function for creating commonly used buffer rings
495
+ */
496
+ class BufferRingFactory {
497
+ /**
498
+ * Create a log buffer ring
499
+ */
500
+ static createLogBuffer(capacity = 1000, persistPath) {
501
+ return new BufferRing({
502
+ capacity,
503
+ overflowStrategy: OverflowStrategy.DROP_OLDEST,
504
+ persistPath,
505
+ autoPersist: !!persistPath,
506
+ maxPersistEntries: capacity * 0.8, // Persist 80% of capacity
507
+ enableIntegrityCheck: true
508
+ });
509
+ }
510
+ /**
511
+ * Create a metrics buffer ring
512
+ */
513
+ static createMetricsBuffer(capacity = 500, persistPath) {
514
+ return new BufferRing({
515
+ capacity,
516
+ overflowStrategy: OverflowStrategy.DROP_OLDEST,
517
+ persistPath,
518
+ autoPersist: false, // Manual persistence for performance
519
+ maxPersistEntries: 0, // Persist all
520
+ enableIntegrityCheck: true,
521
+ serializer: (entry) => ({
522
+ ...entry,
523
+ timestamp: entry.timestamp || new Date().toISOString()
524
+ })
525
+ });
526
+ }
527
+ /**
528
+ * Create an event buffer ring
529
+ */
530
+ static createEventBuffer(capacity = 200) {
531
+ return new BufferRing({
532
+ capacity,
533
+ overflowStrategy: OverflowStrategy.DROP_OLDEST,
534
+ autoPersist: false,
535
+ enableIntegrityCheck: false // Events are transient
536
+ });
537
+ }
538
+ /**
539
+ * Create a resizable buffer ring
540
+ */
541
+ static createResizableBuffer(initialCapacity = 100, _maxCapacity = 10000) {
542
+ return new BufferRing({
543
+ capacity: initialCapacity,
544
+ overflowStrategy: OverflowStrategy.RESIZE,
545
+ autoPersist: false,
546
+ enableIntegrityCheck: false
547
+ });
548
+ }
549
+ }
550
+ exports.BufferRingFactory = BufferRingFactory;
551
+ exports.default = BufferRing;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * BufferRing Usage Examples
3
+ *
4
+ * This file demonstrates various use cases for the configurable BufferRing utility,
5
+ * particularly for log management, metrics collection, and event handling in the
6
+ * Index Server.
7
+ */
8
+ import { BufferRing, BufferRingFactory, OverflowStrategy } from './BufferRing';
9
+ export declare function createLogViewerBuffer(logDir: string): BufferRing<string>;
10
+ export declare function createMetricsCollector(dataDir: string): BufferRing<Record<string, unknown>>;
11
+ export declare function createEventTracker(): BufferRing<Record<string, unknown>>;
12
+ export declare function createToolMetricsBuffer(): BufferRing<{
13
+ toolName: string;
14
+ duration: number;
15
+ timestamp: string;
16
+ success: boolean;
17
+ }>;
18
+ export interface BufferConfig {
19
+ type: 'log' | 'metrics' | 'events' | 'custom';
20
+ capacity: number;
21
+ persistPath?: string;
22
+ overflowStrategy?: OverflowStrategy;
23
+ autoPersist?: boolean;
24
+ }
25
+ export declare function createConfiguredBuffer(config: BufferConfig): BufferRing<unknown>;
26
+ export declare class LogViewerService {
27
+ private logBuffer;
28
+ constructor(logDir: string);
29
+ addLogEntry(logLine: string): void;
30
+ getRecentLogs(count?: number): string[];
31
+ getLogRange(start: number, end: number): string[];
32
+ searchLogs(pattern: string): string[];
33
+ getLogStats(): {
34
+ totalLines: number;
35
+ bufferUtilization: number;
36
+ memoryUsage: number;
37
+ totalProcessed: number;
38
+ droppedLines: number;
39
+ };
40
+ clearLogs(): void;
41
+ persistLogs(): Promise<void>;
42
+ }
43
+ export declare class LogStreamer {
44
+ private logBuffer;
45
+ private subscribers;
46
+ constructor(bufferSize?: number);
47
+ addLog(logEntry: string): void;
48
+ subscribe(callback: (log: string) => void): () => void;
49
+ getBufferSnapshot(): string[];
50
+ getStats(): {
51
+ bufferStats: import("./BufferRing").BufferRingStats;
52
+ subscriberCount: number;
53
+ };
54
+ }
55
+ export { BufferRing, BufferRingFactory, OverflowStrategy };