@jagilber-org/index-server 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/CHANGELOG.md +1354 -0
  2. package/CODE_OF_CONDUCT.md +49 -0
  3. package/CONTRIBUTING.md +99 -0
  4. package/LICENSE +21 -0
  5. package/README.md +228 -0
  6. package/SECURITY.md +50 -0
  7. package/dist/config/configUtils.d.ts +11 -0
  8. package/dist/config/configUtils.js +87 -0
  9. package/dist/config/dashboardConfig.d.ts +46 -0
  10. package/dist/config/dashboardConfig.js +67 -0
  11. package/dist/config/defaultValues.d.ts +63 -0
  12. package/dist/config/defaultValues.js +72 -0
  13. package/dist/config/dirConstants.d.ts +18 -0
  14. package/dist/config/dirConstants.js +29 -0
  15. package/dist/config/featureConfig.d.ts +61 -0
  16. package/dist/config/featureConfig.js +121 -0
  17. package/dist/config/runtimeConfig.d.ts +151 -0
  18. package/dist/config/runtimeConfig.js +380 -0
  19. package/dist/config/serverConfig.d.ts +90 -0
  20. package/dist/config/serverConfig.js +167 -0
  21. package/dist/dashboard/analytics/AnalyticsEngine.d.ts +142 -0
  22. package/dist/dashboard/analytics/AnalyticsEngine.js +373 -0
  23. package/dist/dashboard/analytics/BusinessIntelligence.d.ts +187 -0
  24. package/dist/dashboard/analytics/BusinessIntelligence.js +594 -0
  25. package/dist/dashboard/client/admin.html +2175 -0
  26. package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/chunk-SP2CHFBE.mjs +1 -0
  27. package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/render-T6MDALS3.mjs +27 -0
  28. package/dist/dashboard/client/css/admin.css +1587 -0
  29. package/dist/dashboard/client/js/admin.auth.js +179 -0
  30. package/dist/dashboard/client/js/admin.boot.js +359 -0
  31. package/dist/dashboard/client/js/admin.config.js +196 -0
  32. package/dist/dashboard/client/js/admin.embeddings.js +426 -0
  33. package/dist/dashboard/client/js/admin.graph.js +615 -0
  34. package/dist/dashboard/client/js/admin.instances.js +120 -0
  35. package/dist/dashboard/client/js/admin.instructions.js +579 -0
  36. package/dist/dashboard/client/js/admin.logs.js +113 -0
  37. package/dist/dashboard/client/js/admin.maintenance.js +393 -0
  38. package/dist/dashboard/client/js/admin.messaging.js +636 -0
  39. package/dist/dashboard/client/js/admin.monitor.js +184 -0
  40. package/dist/dashboard/client/js/admin.overview.js +221 -0
  41. package/dist/dashboard/client/js/admin.performance.js +61 -0
  42. package/dist/dashboard/client/js/admin.sessions.js +292 -0
  43. package/dist/dashboard/client/js/admin.sqlite.js +373 -0
  44. package/dist/dashboard/client/js/admin.utils.js +49 -0
  45. package/dist/dashboard/client/js/chart.umd.js +14 -0
  46. package/dist/dashboard/client/js/elk.bundled.js +6696 -0
  47. package/dist/dashboard/client/js/marked.umd.js +74 -0
  48. package/dist/dashboard/client/js/mermaid.min.js +3022 -0
  49. package/dist/dashboard/client/mermaid-layout-elk.esm.min.mjs +1 -0
  50. package/dist/dashboard/export/DataExporter.d.ts +169 -0
  51. package/dist/dashboard/export/DataExporter.js +737 -0
  52. package/dist/dashboard/export/exporters/csvExporter.d.ts +11 -0
  53. package/dist/dashboard/export/exporters/csvExporter.js +47 -0
  54. package/dist/dashboard/export/exporters/exportTypes.d.ts +89 -0
  55. package/dist/dashboard/export/exporters/exportTypes.js +5 -0
  56. package/dist/dashboard/export/exporters/jsonExporter.d.ts +7 -0
  57. package/dist/dashboard/export/exporters/jsonExporter.js +23 -0
  58. package/dist/dashboard/export/exporters/xmlExporter.d.ts +17 -0
  59. package/dist/dashboard/export/exporters/xmlExporter.js +176 -0
  60. package/dist/dashboard/integration/APIIntegration.d.ts +41 -0
  61. package/dist/dashboard/integration/APIIntegration.js +95 -0
  62. package/dist/dashboard/security/SecurityMonitor.d.ts +167 -0
  63. package/dist/dashboard/security/SecurityMonitor.js +560 -0
  64. package/dist/dashboard/server/AdminPanel.d.ts +195 -0
  65. package/dist/dashboard/server/AdminPanel.js +861 -0
  66. package/dist/dashboard/server/AdminPanelConfig.d.ts +42 -0
  67. package/dist/dashboard/server/AdminPanelConfig.js +80 -0
  68. package/dist/dashboard/server/AdminPanelState.d.ts +47 -0
  69. package/dist/dashboard/server/AdminPanelState.js +215 -0
  70. package/dist/dashboard/server/ApiRoutes.d.ts +17 -0
  71. package/dist/dashboard/server/ApiRoutes.js +184 -0
  72. package/dist/dashboard/server/DashboardServer.d.ts +49 -0
  73. package/dist/dashboard/server/DashboardServer.js +160 -0
  74. package/dist/dashboard/server/FileMetricsStorage.d.ts +49 -0
  75. package/dist/dashboard/server/FileMetricsStorage.js +196 -0
  76. package/dist/dashboard/server/HttpTransport.d.ts +23 -0
  77. package/dist/dashboard/server/HttpTransport.js +116 -0
  78. package/dist/dashboard/server/InstanceManager.d.ts +53 -0
  79. package/dist/dashboard/server/InstanceManager.js +295 -0
  80. package/dist/dashboard/server/KnowledgeStore.d.ts +35 -0
  81. package/dist/dashboard/server/KnowledgeStore.js +105 -0
  82. package/dist/dashboard/server/LeaderElection.d.ts +81 -0
  83. package/dist/dashboard/server/LeaderElection.js +268 -0
  84. package/dist/dashboard/server/MetricsCollector.d.ts +200 -0
  85. package/dist/dashboard/server/MetricsCollector.js +810 -0
  86. package/dist/dashboard/server/SessionPersistenceManager.d.ts +88 -0
  87. package/dist/dashboard/server/SessionPersistenceManager.js +458 -0
  88. package/dist/dashboard/server/ThinClient.d.ts +64 -0
  89. package/dist/dashboard/server/ThinClient.js +237 -0
  90. package/dist/dashboard/server/WebSocketManager.d.ts +161 -0
  91. package/dist/dashboard/server/WebSocketManager.js +448 -0
  92. package/dist/dashboard/server/httpLifecycle.d.ts +17 -0
  93. package/dist/dashboard/server/httpLifecycle.js +35 -0
  94. package/dist/dashboard/server/legacyDashboardHtml.d.ts +9 -0
  95. package/dist/dashboard/server/legacyDashboardHtml.js +618 -0
  96. package/dist/dashboard/server/legacyDashboardStyles.d.ts +5 -0
  97. package/dist/dashboard/server/legacyDashboardStyles.js +490 -0
  98. package/dist/dashboard/server/metricsAggregation.d.ts +252 -0
  99. package/dist/dashboard/server/metricsAggregation.js +210 -0
  100. package/dist/dashboard/server/metricsSerializer.d.ts +25 -0
  101. package/dist/dashboard/server/metricsSerializer.js +195 -0
  102. package/dist/dashboard/server/middleware/ensureLoadedMiddleware.d.ts +25 -0
  103. package/dist/dashboard/server/middleware/ensureLoadedMiddleware.js +24 -0
  104. package/dist/dashboard/server/routes/admin.routes.d.ts +16 -0
  105. package/dist/dashboard/server/routes/admin.routes.js +574 -0
  106. package/dist/dashboard/server/routes/adminAuth.d.ts +4 -0
  107. package/dist/dashboard/server/routes/adminAuth.js +46 -0
  108. package/dist/dashboard/server/routes/alerts.routes.d.ts +7 -0
  109. package/dist/dashboard/server/routes/alerts.routes.js +91 -0
  110. package/dist/dashboard/server/routes/api.feedback.routes.d.ts +73 -0
  111. package/dist/dashboard/server/routes/api.feedback.routes.js +171 -0
  112. package/dist/dashboard/server/routes/api.instructions.routes.d.ts +101 -0
  113. package/dist/dashboard/server/routes/api.instructions.routes.js +213 -0
  114. package/dist/dashboard/server/routes/api.usage.routes.d.ts +57 -0
  115. package/dist/dashboard/server/routes/api.usage.routes.js +374 -0
  116. package/dist/dashboard/server/routes/embeddings.routes.d.ts +6 -0
  117. package/dist/dashboard/server/routes/embeddings.routes.js +246 -0
  118. package/dist/dashboard/server/routes/graph.routes.d.ts +6 -0
  119. package/dist/dashboard/server/routes/graph.routes.js +279 -0
  120. package/dist/dashboard/server/routes/index.d.ts +39 -0
  121. package/dist/dashboard/server/routes/index.js +229 -0
  122. package/dist/dashboard/server/routes/instances.routes.d.ts +6 -0
  123. package/dist/dashboard/server/routes/instances.routes.js +35 -0
  124. package/dist/dashboard/server/routes/instructions.routes.d.ts +8 -0
  125. package/dist/dashboard/server/routes/instructions.routes.js +268 -0
  126. package/dist/dashboard/server/routes/knowledge.routes.d.ts +6 -0
  127. package/dist/dashboard/server/routes/knowledge.routes.js +80 -0
  128. package/dist/dashboard/server/routes/logs.routes.d.ts +6 -0
  129. package/dist/dashboard/server/routes/logs.routes.js +166 -0
  130. package/dist/dashboard/server/routes/messaging.routes.d.ts +16 -0
  131. package/dist/dashboard/server/routes/messaging.routes.js +307 -0
  132. package/dist/dashboard/server/routes/metrics.routes.d.ts +10 -0
  133. package/dist/dashboard/server/routes/metrics.routes.js +335 -0
  134. package/dist/dashboard/server/routes/scripts.routes.d.ts +9 -0
  135. package/dist/dashboard/server/routes/scripts.routes.js +84 -0
  136. package/dist/dashboard/server/routes/sqlite.routes.d.ts +9 -0
  137. package/dist/dashboard/server/routes/sqlite.routes.js +570 -0
  138. package/dist/dashboard/server/routes/status.routes.d.ts +7 -0
  139. package/dist/dashboard/server/routes/status.routes.js +179 -0
  140. package/dist/dashboard/server/routes/synthetic.routes.d.ts +7 -0
  141. package/dist/dashboard/server/routes/synthetic.routes.js +197 -0
  142. package/dist/dashboard/server/routes/tools.routes.d.ts +6 -0
  143. package/dist/dashboard/server/routes/tools.routes.js +47 -0
  144. package/dist/dashboard/server/routes/usage.routes.d.ts +6 -0
  145. package/dist/dashboard/server/routes/usage.routes.js +26 -0
  146. package/dist/dashboard/server/wsInit.d.ts +16 -0
  147. package/dist/dashboard/server/wsInit.js +35 -0
  148. package/dist/externalClientLib.d.ts +1 -0
  149. package/dist/externalClientLib.js +2 -0
  150. package/dist/minimal/index.d.ts +1 -0
  151. package/dist/minimal/index.js +140 -0
  152. package/dist/models/SessionPersistence.d.ts +115 -0
  153. package/dist/models/SessionPersistence.js +66 -0
  154. package/dist/models/instruction.d.ts +46 -0
  155. package/dist/models/instruction.js +2 -0
  156. package/dist/perf/benchmark.d.ts +1 -0
  157. package/dist/perf/benchmark.js +50 -0
  158. package/dist/portableClientWrapper.d.ts +1 -0
  159. package/dist/portableClientWrapper.js +2 -0
  160. package/dist/schemas/index.d.ts +132 -0
  161. package/dist/schemas/index.js +372 -0
  162. package/dist/scripts/runPerformanceBaseline.d.ts +1 -0
  163. package/dist/scripts/runPerformanceBaseline.js +17 -0
  164. package/dist/server/backgroundServicesStartup.d.ts +3 -0
  165. package/dist/server/backgroundServicesStartup.js +51 -0
  166. package/dist/server/handshakeManager.d.ts +25 -0
  167. package/dist/server/handshakeManager.js +470 -0
  168. package/dist/server/index-server.d.ts +38 -0
  169. package/dist/server/index-server.js +620 -0
  170. package/dist/server/multiInstanceStartup.d.ts +6 -0
  171. package/dist/server/multiInstanceStartup.js +132 -0
  172. package/dist/server/registry.d.ts +44 -0
  173. package/dist/server/registry.js +236 -0
  174. package/dist/server/sdkServer.d.ts +8 -0
  175. package/dist/server/sdkServer.js +299 -0
  176. package/dist/server/shutdownGuard.d.ts +41 -0
  177. package/dist/server/shutdownGuard.js +52 -0
  178. package/dist/server/startupDiagnostics.d.ts +2 -0
  179. package/dist/server/startupDiagnostics.js +33 -0
  180. package/dist/server/thin-client.d.ts +22 -0
  181. package/dist/server/thin-client.js +111 -0
  182. package/dist/server/transport.d.ts +41 -0
  183. package/dist/server/transport.js +312 -0
  184. package/dist/server/transportFactory.d.ts +21 -0
  185. package/dist/server/transportFactory.js +429 -0
  186. package/dist/services/atomicFs.d.ts +22 -0
  187. package/dist/services/atomicFs.js +103 -0
  188. package/dist/services/auditLog.d.ts +38 -0
  189. package/dist/services/auditLog.js +142 -0
  190. package/dist/services/autoBackup.d.ts +14 -0
  191. package/dist/services/autoBackup.js +171 -0
  192. package/dist/services/autoSplit.d.ts +32 -0
  193. package/dist/services/autoSplit.js +113 -0
  194. package/dist/services/backupZip.d.ts +25 -0
  195. package/dist/services/backupZip.js +112 -0
  196. package/dist/services/bootstrapGating.d.ts +123 -0
  197. package/dist/services/bootstrapGating.js +221 -0
  198. package/dist/services/canonical.d.ts +23 -0
  199. package/dist/services/canonical.js +65 -0
  200. package/dist/services/categoryRules.d.ts +7 -0
  201. package/dist/services/categoryRules.js +37 -0
  202. package/dist/services/classificationService.d.ts +42 -0
  203. package/dist/services/classificationService.js +168 -0
  204. package/dist/services/embeddingService.d.ts +62 -0
  205. package/dist/services/embeddingService.js +264 -0
  206. package/dist/services/errors.d.ts +22 -0
  207. package/dist/services/errors.js +31 -0
  208. package/dist/services/featureFlags.d.ts +25 -0
  209. package/dist/services/featureFlags.js +89 -0
  210. package/dist/services/features.d.ts +13 -0
  211. package/dist/services/features.js +35 -0
  212. package/dist/services/handlers/instructions.add.d.ts +1 -0
  213. package/dist/services/handlers/instructions.add.js +510 -0
  214. package/dist/services/handlers/instructions.groom.d.ts +1 -0
  215. package/dist/services/handlers/instructions.groom.js +575 -0
  216. package/dist/services/handlers/instructions.import.d.ts +1 -0
  217. package/dist/services/handlers/instructions.import.js +205 -0
  218. package/dist/services/handlers/instructions.patch.d.ts +1 -0
  219. package/dist/services/handlers/instructions.patch.js +121 -0
  220. package/dist/services/handlers/instructions.query.d.ts +159 -0
  221. package/dist/services/handlers/instructions.query.js +469 -0
  222. package/dist/services/handlers/instructions.reload.d.ts +1 -0
  223. package/dist/services/handlers/instructions.reload.js +13 -0
  224. package/dist/services/handlers/instructions.remove.d.ts +1 -0
  225. package/dist/services/handlers/instructions.remove.js +122 -0
  226. package/dist/services/handlers/instructions.shared.d.ts +32 -0
  227. package/dist/services/handlers/instructions.shared.js +91 -0
  228. package/dist/services/handlers.activation.d.ts +1 -0
  229. package/dist/services/handlers.activation.js +203 -0
  230. package/dist/services/handlers.bootstrap.d.ts +1 -0
  231. package/dist/services/handlers.bootstrap.js +38 -0
  232. package/dist/services/handlers.dashboardConfig.d.ts +34 -0
  233. package/dist/services/handlers.dashboardConfig.js +110 -0
  234. package/dist/services/handlers.diagnostics.d.ts +1 -0
  235. package/dist/services/handlers.diagnostics.js +64 -0
  236. package/dist/services/handlers.feedback.d.ts +15 -0
  237. package/dist/services/handlers.feedback.js +389 -0
  238. package/dist/services/handlers.gates.d.ts +1 -0
  239. package/dist/services/handlers.gates.js +47 -0
  240. package/dist/services/handlers.graph.d.ts +53 -0
  241. package/dist/services/handlers.graph.js +231 -0
  242. package/dist/services/handlers.help.d.ts +1 -0
  243. package/dist/services/handlers.help.js +119 -0
  244. package/dist/services/handlers.instructionSchema.d.ts +1 -0
  245. package/dist/services/handlers.instructionSchema.js +227 -0
  246. package/dist/services/handlers.instructions.d.ts +8 -0
  247. package/dist/services/handlers.instructions.js +14 -0
  248. package/dist/services/handlers.instructionsDiagnostics.d.ts +1 -0
  249. package/dist/services/handlers.instructionsDiagnostics.js +14 -0
  250. package/dist/services/handlers.integrity.d.ts +1 -0
  251. package/dist/services/handlers.integrity.js +35 -0
  252. package/dist/services/handlers.manifest.d.ts +1 -0
  253. package/dist/services/handlers.manifest.js +24 -0
  254. package/dist/services/handlers.messaging.d.ts +12 -0
  255. package/dist/services/handlers.messaging.js +203 -0
  256. package/dist/services/handlers.metrics.d.ts +1 -0
  257. package/dist/services/handlers.metrics.js +43 -0
  258. package/dist/services/handlers.promote.d.ts +1 -0
  259. package/dist/services/handlers.promote.js +326 -0
  260. package/dist/services/handlers.prompt.d.ts +1 -0
  261. package/dist/services/handlers.prompt.js +7 -0
  262. package/dist/services/handlers.search.d.ts +69 -0
  263. package/dist/services/handlers.search.js +669 -0
  264. package/dist/services/handlers.testPrimitive.d.ts +1 -0
  265. package/dist/services/handlers.testPrimitive.js +5 -0
  266. package/dist/services/handlers.trace.d.ts +1 -0
  267. package/dist/services/handlers.trace.js +35 -0
  268. package/dist/services/handlers.usage.d.ts +1 -0
  269. package/dist/services/handlers.usage.js +11 -0
  270. package/dist/services/hotScore.d.ts +137 -0
  271. package/dist/services/hotScore.js +244 -0
  272. package/dist/services/indexContext.d.ts +117 -0
  273. package/dist/services/indexContext.js +989 -0
  274. package/dist/services/indexLoader.d.ts +44 -0
  275. package/dist/services/indexLoader.js +920 -0
  276. package/dist/services/indexRepository.d.ts +32 -0
  277. package/dist/services/indexRepository.js +71 -0
  278. package/dist/services/indexingService.d.ts +1 -0
  279. package/dist/services/indexingService.js +2 -0
  280. package/dist/services/instructions.dispatcher.d.ts +1 -0
  281. package/dist/services/instructions.dispatcher.js +231 -0
  282. package/dist/services/logPrefix.d.ts +1 -0
  283. package/dist/services/logPrefix.js +30 -0
  284. package/dist/services/logger.d.ts +52 -0
  285. package/dist/services/logger.js +268 -0
  286. package/dist/services/manifestManager.d.ts +82 -0
  287. package/dist/services/manifestManager.js +200 -0
  288. package/dist/services/messaging/agentMailbox.d.ts +60 -0
  289. package/dist/services/messaging/agentMailbox.js +353 -0
  290. package/dist/services/messaging/messagingPersistence.d.ts +20 -0
  291. package/dist/services/messaging/messagingPersistence.js +111 -0
  292. package/dist/services/messaging/messagingTypes.d.ts +150 -0
  293. package/dist/services/messaging/messagingTypes.js +66 -0
  294. package/dist/services/ownershipService.d.ts +1 -0
  295. package/dist/services/ownershipService.js +36 -0
  296. package/dist/services/performanceBaseline.d.ts +19 -0
  297. package/dist/services/performanceBaseline.js +210 -0
  298. package/dist/services/preflight.d.ts +12 -0
  299. package/dist/services/preflight.js +79 -0
  300. package/dist/services/promptReviewService.d.ts +44 -0
  301. package/dist/services/promptReviewService.js +101 -0
  302. package/dist/services/responseEnvelope.d.ts +6 -0
  303. package/dist/services/responseEnvelope.js +25 -0
  304. package/dist/services/seedBootstrap.d.ts +34 -0
  305. package/dist/services/seedBootstrap.js +259 -0
  306. package/dist/services/storage/factory.d.ts +17 -0
  307. package/dist/services/storage/factory.js +35 -0
  308. package/dist/services/storage/hashUtils.d.ts +11 -0
  309. package/dist/services/storage/hashUtils.js +35 -0
  310. package/dist/services/storage/index.d.ts +12 -0
  311. package/dist/services/storage/index.js +18 -0
  312. package/dist/services/storage/jsonFileStore.d.ts +32 -0
  313. package/dist/services/storage/jsonFileStore.js +241 -0
  314. package/dist/services/storage/migrationEngine.d.ts +35 -0
  315. package/dist/services/storage/migrationEngine.js +93 -0
  316. package/dist/services/storage/sqliteMessageStore.d.ts +53 -0
  317. package/dist/services/storage/sqliteMessageStore.js +146 -0
  318. package/dist/services/storage/sqliteSchema.d.ts +12 -0
  319. package/dist/services/storage/sqliteSchema.js +123 -0
  320. package/dist/services/storage/sqliteStore.d.ts +42 -0
  321. package/dist/services/storage/sqliteStore.js +361 -0
  322. package/dist/services/storage/sqliteUsageStore.d.ts +35 -0
  323. package/dist/services/storage/sqliteUsageStore.js +94 -0
  324. package/dist/services/storage/types.d.ts +171 -0
  325. package/dist/services/storage/types.js +12 -0
  326. package/dist/services/toolHandlers.d.ts +23 -0
  327. package/dist/services/toolHandlers.js +50 -0
  328. package/dist/services/toolRegistry.d.ts +20 -0
  329. package/dist/services/toolRegistry.js +490 -0
  330. package/dist/services/toolRegistry.zod.d.ts +10 -0
  331. package/dist/services/toolRegistry.zod.js +325 -0
  332. package/dist/services/tracing.d.ts +26 -0
  333. package/dist/services/tracing.js +260 -0
  334. package/dist/services/usageBuckets.d.ts +161 -0
  335. package/dist/services/usageBuckets.js +364 -0
  336. package/dist/services/validationService.d.ts +38 -0
  337. package/dist/services/validationService.js +125 -0
  338. package/dist/utils/BufferRing.d.ts +203 -0
  339. package/dist/utils/BufferRing.js +551 -0
  340. package/dist/utils/BufferRingExamples.d.ts +55 -0
  341. package/dist/utils/BufferRingExamples.js +188 -0
  342. package/dist/utils/envUtils.d.ts +42 -0
  343. package/dist/utils/envUtils.js +80 -0
  344. package/dist/utils/memoryMonitor.d.ts +83 -0
  345. package/dist/utils/memoryMonitor.js +275 -0
  346. package/dist/versioning/schemaVersion.d.ts +6 -0
  347. package/dist/versioning/schemaVersion.js +94 -0
  348. package/package.json +139 -0
  349. package/schemas/README.md +13 -0
  350. package/schemas/feedback-entry.schema.json +27 -0
  351. package/schemas/graph-export-v2.schema.json +60 -0
  352. package/schemas/index-server.code-schema.json +40670 -0
  353. package/schemas/instruction.schema.json +262 -0
  354. package/schemas/json-schema/SessionPersistence-persisted-admin-session.schema.json +54 -0
  355. package/schemas/json-schema/SessionPersistence-persisted-session-history-entry.schema.json +51 -0
  356. package/schemas/json-schema/SessionPersistence-persisted-web-socket-connection.schema.json +54 -0
  357. package/schemas/json-schema/SessionPersistence-session-persistence-config.schema.json +110 -0
  358. package/schemas/json-schema/SessionPersistence-session-persistence-data.schema.json +229 -0
  359. package/schemas/json-schema/SessionPersistence-session-persistence-manifest.schema.json +109 -0
  360. package/schemas/json-schema/SessionPersistence-session-persistence-metadata.schema.json +55 -0
  361. package/schemas/json-schema/instruction-audience-scope.schema.json +14 -0
  362. package/schemas/json-schema/instruction-content-type.schema.json +17 -0
  363. package/schemas/json-schema/instruction-instruction-entry.schema.json +210 -0
  364. package/schemas/json-schema/instruction-requirement-level.schema.json +16 -0
  365. package/schemas/manifest.json +78 -0
  366. package/schemas/manifest.schema.json +33 -0
  367. package/schemas/usage-batch.schema.json +16 -0
  368. package/schemas/usage-buckets.schema.json +30 -0
  369. package/schemas/usage-event.schema.json +17 -0
  370. package/scripts/copy-dashboard-assets.mjs +170 -0
  371. package/scripts/dist/README.md +15 -0
  372. package/scripts/setup-hooks.cjs +28 -0
@@ -0,0 +1,389 @@
1
+ "use strict";
2
+ /**
3
+ * Feedback/Emit System for Index Server
4
+ *
5
+ * Provides MCP protocol-compliant tools for clients to submit structured feedback,
6
+ * status reports, security issues, feature requests, and other communications
7
+ * to server administrators or monitoring systems.
8
+ *
9
+ * This system follows MCP best practices:
10
+ * - Tools are discoverable via tools/list
11
+ * - Input validation via JSON schemas
12
+ * - Structured responses for programmatic consumption
13
+ * - Proper error handling and logging
14
+ * - Audit trail for security and compliance
15
+ */
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ const registry_1 = require("../server/registry");
21
+ const logger_1 = require("./logger");
22
+ const auditLog_1 = require("./auditLog");
23
+ const runtimeConfig_1 = require("../config/runtimeConfig");
24
+ const fs_1 = __importDefault(require("fs"));
25
+ const path_1 = __importDefault(require("path"));
26
+ const crypto_1 = require("crypto");
27
+ // Directory is resolved dynamically so tests can override via env per test case.
28
+ // Fall back to config for max entries; tests may still override INDEX_SERVER_FEEDBACK_DIR.
29
+ function getMaxEntries() {
30
+ return (0, runtimeConfig_1.getRuntimeConfig)().feedback.maxEntries;
31
+ }
32
+ function getFeedbackDir() {
33
+ return (0, runtimeConfig_1.getRuntimeConfig)().feedback.dir;
34
+ }
35
+ function getFeedbackFile() {
36
+ return path_1.default.join(getFeedbackDir(), 'feedback-entries.json');
37
+ }
38
+ function ensureFeedbackDir() {
39
+ const dir = getFeedbackDir();
40
+ if (!fs_1.default.existsSync(dir)) {
41
+ try {
42
+ fs_1.default.mkdirSync(dir, { recursive: true });
43
+ }
44
+ catch (error) {
45
+ (0, logger_1.logError)('[feedback] Failed to create feedback directory', { error: String(error), dir });
46
+ }
47
+ }
48
+ return dir;
49
+ }
50
+ /**
51
+ * Load feedback entries from storage
52
+ */
53
+ function loadFeedbackStorage() {
54
+ const file = getFeedbackFile();
55
+ ensureFeedbackDir();
56
+ try {
57
+ if (fs_1.default.existsSync(file)) {
58
+ const content = fs_1.default.readFileSync(file, 'utf8');
59
+ const parsed = JSON.parse(content);
60
+ // Validate structure
61
+ if (!parsed.entries || !Array.isArray(parsed.entries)) {
62
+ throw new Error('Invalid feedback storage format');
63
+ }
64
+ return parsed;
65
+ }
66
+ }
67
+ catch (error) {
68
+ (0, logger_1.logWarn)('[feedback] Failed to load feedback storage, initializing empty', { error: String(error) });
69
+ }
70
+ return {
71
+ entries: [],
72
+ lastUpdated: new Date().toISOString(),
73
+ version: '1.0.0'
74
+ };
75
+ }
76
+ /**
77
+ * Save feedback entries to storage
78
+ */
79
+ function saveFeedbackStorage(storage) {
80
+ const file = getFeedbackFile();
81
+ ensureFeedbackDir();
82
+ try {
83
+ // Limit storage size
84
+ const maxEntries = getMaxEntries();
85
+ if (storage.entries.length > maxEntries) {
86
+ // Keep most recent entries
87
+ storage.entries = storage.entries
88
+ .sort((a, b) => b.timestamp.localeCompare(a.timestamp))
89
+ .slice(0, maxEntries);
90
+ }
91
+ storage.lastUpdated = new Date().toISOString();
92
+ const content = JSON.stringify(storage, null, 2);
93
+ fs_1.default.writeFileSync(file, content, 'utf8');
94
+ }
95
+ catch (error) {
96
+ (0, logger_1.logError)('[feedback] Failed to save feedback storage', error instanceof Error ? error : { error: String(error) });
97
+ throw error;
98
+ }
99
+ }
100
+ /**
101
+ * Generate unique ID for feedback entry
102
+ */
103
+ function generateFeedbackId(type, timestamp) {
104
+ const hash = (0, crypto_1.createHash)('sha256');
105
+ hash.update(`${type}-${timestamp}-${Math.random()}`);
106
+ return hash.digest('hex').substring(0, 16);
107
+ }
108
+ /**
109
+ * feedback_submit - Submit new feedback entry
110
+ */
111
+ (0, registry_1.registerHandler)('feedback_submit', (params) => {
112
+ // Validate required parameters
113
+ if (!params.type || !params.severity || !params.title || !params.description) {
114
+ throw new Error('Missing required parameters: type, severity, title, description');
115
+ }
116
+ // Validate enum values
117
+ const validTypes = ['issue', 'status', 'security', 'feature-request', 'bug-report', 'performance', 'usability', 'other'];
118
+ const validSeverities = ['low', 'medium', 'high', 'critical'];
119
+ if (!validTypes.includes(params.type)) {
120
+ throw new Error(`Invalid type. Must be one of: ${validTypes.join(', ')}`);
121
+ }
122
+ if (!validSeverities.includes(params.severity)) {
123
+ throw new Error(`Invalid severity. Must be one of: ${validSeverities.join(', ')}`);
124
+ }
125
+ const timestamp = new Date().toISOString();
126
+ const entry = {
127
+ id: generateFeedbackId(params.type, timestamp),
128
+ timestamp,
129
+ type: params.type,
130
+ severity: params.severity,
131
+ title: params.title.substring(0, 200), // Limit title length
132
+ description: params.description.substring(0, 10000), // Limit description length
133
+ context: params.context,
134
+ metadata: params.metadata,
135
+ tags: params.tags?.slice(0, 10), // Limit number of tags
136
+ status: 'new'
137
+ };
138
+ const storage = loadFeedbackStorage();
139
+ storage.entries.push(entry);
140
+ saveFeedbackStorage(storage);
141
+ // Log feedback submission for audit trail
142
+ (0, auditLog_1.logAudit)('feedback_submit', [entry.id], {
143
+ type: entry.type,
144
+ severity: entry.severity,
145
+ title: entry.title
146
+ });
147
+ (0, logger_1.logInfo)('[feedback] Feedback submitted', {
148
+ id: entry.id,
149
+ type: entry.type,
150
+ severity: entry.severity,
151
+ title: entry.title
152
+ });
153
+ // For security issues, also log to stderr for immediate visibility
154
+ if (entry.type === 'security' || entry.severity === 'critical') {
155
+ try {
156
+ process.stderr.write(`[SECURITY/CRITICAL] Feedback ID: ${entry.id}, Type: ${entry.type}, Title: ${entry.title}\n`);
157
+ }
158
+ catch {
159
+ // Ignore stderr write failures
160
+ }
161
+ }
162
+ return {
163
+ success: true,
164
+ feedbackId: entry.id,
165
+ timestamp: entry.timestamp,
166
+ message: 'Feedback submitted successfully'
167
+ };
168
+ });
169
+ /**
170
+ * feedback_list - List feedback entries with filtering
171
+ */
172
+ (0, registry_1.registerHandler)('feedback_list', (params) => {
173
+ const storage = loadFeedbackStorage();
174
+ let entries = [...storage.entries];
175
+ // Apply filters
176
+ if (params.type) {
177
+ entries = entries.filter(e => e.type === params.type);
178
+ }
179
+ if (params.severity) {
180
+ entries = entries.filter(e => e.severity === params.severity);
181
+ }
182
+ if (params.status) {
183
+ entries = entries.filter(e => e.status === params.status);
184
+ }
185
+ if (typeof params.since === 'string' && params.since) {
186
+ const sinceVal = params.since;
187
+ entries = entries.filter(e => e.timestamp >= sinceVal);
188
+ }
189
+ if (params.tags && params.tags.length > 0) {
190
+ entries = entries.filter(e => e.tags && params.tags.some(tag => e.tags.includes(tag)));
191
+ }
192
+ // Sort by timestamp (newest first)
193
+ entries.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
194
+ // Apply pagination
195
+ const limit = Math.min(params.limit || 50, 200); // Max 200 entries per request
196
+ const offset = params.offset || 0;
197
+ const paginatedEntries = entries.slice(offset, offset + limit);
198
+ return {
199
+ entries: paginatedEntries,
200
+ total: entries.length,
201
+ limit,
202
+ offset,
203
+ hasMore: offset + limit < entries.length
204
+ };
205
+ });
206
+ /**
207
+ * feedback_get - Get specific feedback entry by ID
208
+ */
209
+ (0, registry_1.registerHandler)('feedback_get', (params) => {
210
+ if (!params.id) {
211
+ throw new Error('Missing required parameter: id');
212
+ }
213
+ const storage = loadFeedbackStorage();
214
+ const entry = storage.entries.find(e => e.id === params.id);
215
+ if (!entry) {
216
+ return { notFound: true, id: params.id, hint: `No feedback entry found with id "${params.id}". Use feedback_list to see all entries.` };
217
+ }
218
+ return { entry };
219
+ });
220
+ /**
221
+ * feedback_update - Update feedback entry status (admin function)
222
+ */
223
+ (0, registry_1.registerHandler)('feedback_update', (params) => {
224
+ if (!params.id) {
225
+ throw new Error('Missing required parameter: id');
226
+ }
227
+ const validStatuses = ['new', 'acknowledged', 'in-progress', 'resolved', 'closed'];
228
+ if (params.status && !validStatuses.includes(params.status)) {
229
+ throw new Error(`Invalid status. Must be one of: ${validStatuses.join(', ')}`);
230
+ }
231
+ const storage = loadFeedbackStorage();
232
+ const entryIndex = storage.entries.findIndex(e => e.id === params.id);
233
+ if (entryIndex === -1) {
234
+ return { notFound: true, id: params.id, hint: `No feedback entry found with id "${params.id}". Use feedback_list to see all entries.` };
235
+ }
236
+ const entry = storage.entries[entryIndex];
237
+ const oldStatus = entry.status;
238
+ // Update fields
239
+ if (params.status) {
240
+ entry.status = params.status;
241
+ }
242
+ if (params.metadata) {
243
+ entry.metadata = { ...entry.metadata, ...params.metadata };
244
+ }
245
+ // Add update timestamp to metadata
246
+ entry.metadata = {
247
+ ...entry.metadata,
248
+ lastUpdated: new Date().toISOString(),
249
+ updatedBy: 'system' // Could be enhanced to track admin user
250
+ };
251
+ storage.entries[entryIndex] = entry;
252
+ saveFeedbackStorage(storage);
253
+ (0, auditLog_1.logAudit)('feedback_update', [entry.id], {
254
+ oldStatus,
255
+ newStatus: entry.status,
256
+ type: entry.type
257
+ });
258
+ (0, logger_1.logInfo)('[feedback] Feedback entry updated', {
259
+ id: entry.id,
260
+ oldStatus,
261
+ newStatus: entry.status,
262
+ type: entry.type
263
+ });
264
+ return {
265
+ success: true,
266
+ entry,
267
+ message: 'Feedback entry updated successfully'
268
+ };
269
+ });
270
+ /**
271
+ * feedback_stats - Get feedback statistics and metrics
272
+ */
273
+ (0, registry_1.registerHandler)('feedback_stats', (params) => {
274
+ const storage = loadFeedbackStorage();
275
+ let entries = storage.entries;
276
+ // Filter by date if specified
277
+ if (params.since) {
278
+ const sinceDate = params.since;
279
+ entries = entries.filter(e => e.timestamp >= sinceDate);
280
+ }
281
+ // Calculate statistics
282
+ const stats = {
283
+ total: entries.length,
284
+ byType: {},
285
+ bySeverity: {},
286
+ byStatus: {},
287
+ recentActivity: {
288
+ last24h: 0,
289
+ last7d: 0,
290
+ last30d: 0
291
+ }
292
+ };
293
+ const now = Date.now();
294
+ const day = 24 * 60 * 60 * 1000;
295
+ entries.forEach(entry => {
296
+ // Count by type
297
+ stats.byType[entry.type] = (stats.byType[entry.type] || 0) + 1;
298
+ // Count by severity
299
+ stats.bySeverity[entry.severity] = (stats.bySeverity[entry.severity] || 0) + 1;
300
+ // Count by status
301
+ stats.byStatus[entry.status] = (stats.byStatus[entry.status] || 0) + 1;
302
+ // Count recent activity
303
+ const entryTime = new Date(entry.timestamp).getTime();
304
+ const age = now - entryTime;
305
+ if (age <= day)
306
+ stats.recentActivity.last24h++;
307
+ if (age <= 7 * day)
308
+ stats.recentActivity.last7d++;
309
+ if (age <= 30 * day)
310
+ stats.recentActivity.last30d++;
311
+ });
312
+ return {
313
+ stats,
314
+ storageInfo: {
315
+ lastUpdated: storage.lastUpdated,
316
+ version: storage.version,
317
+ maxEntries: getMaxEntries()
318
+ }
319
+ };
320
+ });
321
+ /**
322
+ * feedback_health - Health check for feedback system
323
+ */
324
+ (0, registry_1.registerHandler)('feedback_health', () => {
325
+ const dir = getFeedbackDir();
326
+ const file = getFeedbackFile();
327
+ const health = {
328
+ status: 'ok',
329
+ timestamp: new Date().toISOString(),
330
+ storage: {
331
+ accessible: false,
332
+ writable: false,
333
+ directory: dir,
334
+ file
335
+ },
336
+ config: {
337
+ maxEntries: getMaxEntries(),
338
+ feedbackDir: dir
339
+ }
340
+ };
341
+ try {
342
+ // Check if storage is accessible
343
+ if (fs_1.default.existsSync(file)) {
344
+ fs_1.default.accessSync(file, fs_1.default.constants.R_OK);
345
+ health.storage.accessible = true;
346
+ }
347
+ else {
348
+ // File doesn't exist but directory should be writable
349
+ health.storage.accessible = fs_1.default.existsSync(dir);
350
+ }
351
+ // Check if writable
352
+ ensureFeedbackDir();
353
+ fs_1.default.accessSync(dir, fs_1.default.constants.W_OK);
354
+ health.storage.writable = true;
355
+ }
356
+ catch (error) {
357
+ health.status = 'degraded';
358
+ (0, logger_1.logWarn)('[feedback] Health check failed', error instanceof Error ? error : { error: String(error) });
359
+ }
360
+ return health;
361
+ });
362
+ // Unified feedback dispatch handler (002 Phase 2a)
363
+ (0, registry_1.registerHandler)('feedback_dispatch', async (params) => {
364
+ const { action, ...rest } = params;
365
+ if (!action)
366
+ throw new Error('Missing required parameter: action');
367
+ const validActions = ['submit', 'list', 'get', 'update', 'stats', 'health'];
368
+ if (!validActions.includes(action)) {
369
+ throw new Error(`Unknown feedback action: ${action}. Valid: ${validActions.join(', ')}`);
370
+ }
371
+ // Flat-param alias: agents may send 'body' instead of 'description' (v1.8.2+)
372
+ if (action === 'submit' && rest.body != null && rest.description == null) {
373
+ rest.description = rest.body;
374
+ delete rest.body;
375
+ }
376
+ const handler = (0, registry_1.getHandler)(`feedback_${action}`);
377
+ if (!handler)
378
+ throw new Error(`Handler not found for feedback_${action}`);
379
+ const result = await Promise.resolve(handler(rest));
380
+ // Reshape results for consistent dispatch API
381
+ if (action === 'submit') {
382
+ return { id: result.feedbackId, status: 'new', ...result };
383
+ }
384
+ if (action === 'stats') {
385
+ const stats = result.stats;
386
+ return { total: stats?.total, ...result };
387
+ }
388
+ return result;
389
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
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
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const registry_1 = require("../server/registry");
9
+ const indexContext_1 = require("./indexContext");
10
+ (0, registry_1.registerHandler)('gates_evaluate', () => { const st = (0, indexContext_1.ensureLoaded)(); const gatesPath = path_1.default.join((0, indexContext_1.getInstructionsDir)(), 'gates.json'); if (!fs_1.default.existsSync(gatesPath))
11
+ return { notConfigured: true }; let data; try {
12
+ data = JSON.parse(fs_1.default.readFileSync(gatesPath, 'utf8'));
13
+ }
14
+ catch {
15
+ return { error: 'invalid gates file' };
16
+ } const results = []; for (const g of data.gates || []) {
17
+ const matches = st.list.filter(e => { const w = g.where || {}; let ok = true; if (w.requirement !== undefined)
18
+ ok = ok && e.requirement === w.requirement; if (w.priorityGt !== undefined)
19
+ ok = ok && e.priority > w.priorityGt; return ok; });
20
+ const count = matches.length;
21
+ const v = g.value;
22
+ let passed = true;
23
+ switch (g.op) {
24
+ case '>=':
25
+ passed = count >= v;
26
+ break;
27
+ case '>':
28
+ passed = count > v;
29
+ break;
30
+ case '<=':
31
+ passed = count <= v;
32
+ break;
33
+ case '<':
34
+ passed = count < v;
35
+ break;
36
+ case '==':
37
+ passed = count === v;
38
+ break;
39
+ case '!=':
40
+ passed = count !== v;
41
+ break;
42
+ default:
43
+ passed = true;
44
+ break;
45
+ }
46
+ results.push({ id: g.id, passed, count, op: g.op, value: v, severity: g.severity, description: g.description });
47
+ } const summary = { errors: results.filter(r => !r.passed && r.severity === 'error').length, warnings: results.filter(r => !r.passed && r.severity === 'warn').length, total: results.length }; return { generatedAt: new Date().toISOString(), results, summary }; });
@@ -0,0 +1,53 @@
1
+ import { getRuntimeConfig } from '../config/runtimeConfig';
2
+ type GraphConfigSnapshot = ReturnType<typeof getRuntimeConfig>['graph'];
3
+ export interface GraphExportParams {
4
+ includeEdgeTypes?: Array<'primary' | 'category' | 'belongs'>;
5
+ maxEdges?: number;
6
+ format?: 'json' | 'dot' | 'mermaid';
7
+ enrich?: boolean;
8
+ includeCategoryNodes?: boolean;
9
+ includeUsage?: boolean;
10
+ }
11
+ interface GraphNodeV1 {
12
+ id: string;
13
+ }
14
+ interface GraphNodeV2 extends GraphNodeV1 {
15
+ categories?: string[];
16
+ primaryCategory?: string;
17
+ priority?: number;
18
+ priorityTier?: string;
19
+ requirement?: string;
20
+ owner?: string;
21
+ status?: string;
22
+ createdAt?: string;
23
+ updatedAt?: string;
24
+ usageCount?: number;
25
+ nodeType?: 'instruction' | 'category';
26
+ }
27
+ type GraphNode = GraphNodeV1 | GraphNodeV2;
28
+ interface GraphEdgeBase {
29
+ from: string;
30
+ to: string;
31
+ type: 'primary' | 'category' | 'belongs';
32
+ }
33
+ interface GraphEdgeEnriched extends GraphEdgeBase {
34
+ weight?: number;
35
+ }
36
+ type GraphEdge = GraphEdgeBase | GraphEdgeEnriched;
37
+ interface GraphMeta {
38
+ graphSchemaVersion: 1 | 2;
39
+ nodeCount: number;
40
+ edgeCount: number;
41
+ truncated?: boolean;
42
+ notes?: string[];
43
+ }
44
+ interface GraphResult {
45
+ meta: GraphMeta;
46
+ nodes: GraphNode[];
47
+ edges: GraphEdge[];
48
+ dot?: string;
49
+ mermaid?: string;
50
+ }
51
+ export declare function buildGraph(params: GraphExportParams, graphCfg?: GraphConfigSnapshot): GraphResult;
52
+ export declare function __resetGraphCache(): void;
53
+ export {};