@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,353 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AgentMailbox = void 0;
7
+ /**
8
+ * Core messaging service — AgentMailbox.
9
+ *
10
+ * In-memory message store with JSONL persistence, TTL sweep,
11
+ * recipient visibility filtering, and cross-process file watching.
12
+ *
13
+ * Messages are NOT stored in the instruction index (A-3).
14
+ * Config via runtimeConfig (S-4).
15
+ */
16
+ const path_1 = __importDefault(require("path"));
17
+ const messagingTypes_1 = require("./messagingTypes");
18
+ const messagingPersistence_1 = require("./messagingPersistence");
19
+ let messageCounter = 0;
20
+ const instanceId = `${process.pid}@${path_1.default.basename(process.cwd())}`;
21
+ class AgentMailbox {
22
+ store = new Map();
23
+ idIndex = new Map();
24
+ config;
25
+ sweepTimer = null;
26
+ loaded = false;
27
+ constructor(config) {
28
+ this.config = config;
29
+ if (config.sweepIntervalMs > 0) {
30
+ this.startSweep();
31
+ }
32
+ }
33
+ /** Load messages from disk if not already loaded. */
34
+ ensureLoaded() {
35
+ if (this.loaded)
36
+ return;
37
+ this.loaded = true;
38
+ const msgs = (0, messagingPersistence_1.loadMessages)(this.config.dir);
39
+ for (const msg of msgs) {
40
+ const key = this.makeKey(msg);
41
+ this.store.set(key, msg);
42
+ this.idIndex.set(msg.id, key);
43
+ }
44
+ }
45
+ /** Send a message. Returns the message ID. */
46
+ async send(opts) {
47
+ this.ensureLoaded();
48
+ const id = `msg-${++messageCounter}-${Date.now()}`;
49
+ const ttl = opts.persistent
50
+ ? 0
51
+ : Math.min(Math.max(1, opts.ttlSeconds ?? messagingTypes_1.DEFAULT_TTL_SECONDS), messagingTypes_1.MAX_TTL_SECONDS);
52
+ const msg = {
53
+ id,
54
+ channel: opts.channel,
55
+ sender: opts.sender,
56
+ recipients: opts.recipients,
57
+ body: opts.body,
58
+ createdAt: new Date().toISOString(),
59
+ ttlSeconds: ttl,
60
+ persistent: opts.persistent,
61
+ readBy: [],
62
+ payload: opts.payload,
63
+ priority: opts.priority,
64
+ parentId: opts.parentId,
65
+ requiresAck: opts.requiresAck,
66
+ ackBySeconds: opts.ackBySeconds,
67
+ tags: opts.tags,
68
+ origin: instanceId,
69
+ };
70
+ const key = this.makeKey(msg);
71
+ this.store.set(key, msg);
72
+ this.idIndex.set(id, key);
73
+ // Persist to JSONL
74
+ (0, messagingPersistence_1.appendMessage)(msg, this.config.dir);
75
+ return id;
76
+ }
77
+ /** Read messages with visibility filtering. */
78
+ read(opts = {}) {
79
+ this.ensureLoaded();
80
+ let messages = Array.from(this.store.values());
81
+ // Filter by channel
82
+ if (opts.channel) {
83
+ messages = messages.filter(m => m.channel === opts.channel);
84
+ }
85
+ // Filter by recipient visibility
86
+ if (opts.reader) {
87
+ messages = messages.filter(m => this.isRecipient(m, opts.reader));
88
+ }
89
+ // Filter unread-only
90
+ if (opts.unreadOnly && opts.reader) {
91
+ messages = messages.filter(m => !m.readBy?.includes(opts.reader));
92
+ }
93
+ // Filter by tags (match any)
94
+ if (opts.tags?.length) {
95
+ messages = messages.filter(m => m.tags?.some(t => opts.tags.includes(t)));
96
+ }
97
+ // Filter by sender
98
+ if (opts.sender) {
99
+ messages = messages.filter(m => m.sender === opts.sender);
100
+ }
101
+ // Sort by createdAt (oldest first)
102
+ messages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
103
+ // Apply limit
104
+ if (opts.limit && opts.limit > 0) {
105
+ messages = messages.slice(0, opts.limit);
106
+ }
107
+ // Mark as read
108
+ if (opts.markRead && opts.reader && opts.reader !== '*') {
109
+ for (const msg of messages) {
110
+ if (!msg.readBy)
111
+ msg.readBy = [];
112
+ if (!msg.readBy.includes(opts.reader)) {
113
+ msg.readBy.push(opts.reader);
114
+ }
115
+ }
116
+ this.persistAll();
117
+ }
118
+ return messages;
119
+ }
120
+ /** List all channels with message counts. */
121
+ listChannels() {
122
+ this.ensureLoaded();
123
+ const channels = new Map();
124
+ for (const msg of this.store.values()) {
125
+ const info = channels.get(msg.channel) || { count: 0, latest: null };
126
+ info.count++;
127
+ if (!info.latest || msg.createdAt > info.latest) {
128
+ info.latest = msg.createdAt;
129
+ }
130
+ channels.set(msg.channel, info);
131
+ }
132
+ return Array.from(channels.entries()).map(([channel, info]) => ({
133
+ channel,
134
+ messageCount: info.count,
135
+ latestAt: info.latest,
136
+ }));
137
+ }
138
+ /** Acknowledge messages by marking them read. Returns count acknowledged. */
139
+ ack(messageIds, reader) {
140
+ this.ensureLoaded();
141
+ let count = 0;
142
+ for (const id of messageIds) {
143
+ const key = this.idIndex.get(id);
144
+ if (!key)
145
+ continue;
146
+ const msg = this.store.get(key);
147
+ if (!msg)
148
+ continue;
149
+ if (!msg.readBy)
150
+ msg.readBy = [];
151
+ if (!msg.readBy.includes(reader)) {
152
+ msg.readBy.push(reader);
153
+ count++;
154
+ }
155
+ }
156
+ if (count > 0)
157
+ this.persistAll();
158
+ return count;
159
+ }
160
+ /** Get stats for a reader. */
161
+ getStats(reader) {
162
+ this.ensureLoaded();
163
+ const messages = Array.from(this.store.values());
164
+ const visible = messages.filter(m => this.isRecipient(m, reader));
165
+ const unread = visible.filter(m => !m.readBy?.includes(reader));
166
+ const channelSet = new Set(visible.map(m => m.channel));
167
+ return {
168
+ total: visible.length,
169
+ unread: unread.length,
170
+ channels: channelSet.size,
171
+ };
172
+ }
173
+ /** Get a single message by ID. */
174
+ getMessage(id) {
175
+ this.ensureLoaded();
176
+ const key = this.idIndex.get(id);
177
+ return key ? this.store.get(key) : undefined;
178
+ }
179
+ /** Update mutable fields of a message. */
180
+ updateMessage(id, updates) {
181
+ this.ensureLoaded();
182
+ const key = this.idIndex.get(id);
183
+ if (!key)
184
+ return undefined;
185
+ const msg = this.store.get(key);
186
+ if (!msg)
187
+ return undefined;
188
+ if (updates.body !== undefined)
189
+ msg.body = updates.body;
190
+ if (updates.recipients !== undefined)
191
+ msg.recipients = updates.recipients;
192
+ if (updates.payload !== undefined)
193
+ msg.payload = updates.payload;
194
+ if (updates.persistent !== undefined) {
195
+ msg.persistent = updates.persistent;
196
+ if (updates.persistent)
197
+ msg.ttlSeconds = 0;
198
+ }
199
+ this.persistAll();
200
+ return msg;
201
+ }
202
+ /** Purge all messages. Returns count removed. */
203
+ purgeAll() {
204
+ this.ensureLoaded();
205
+ const count = this.store.size;
206
+ this.store.clear();
207
+ this.idIndex.clear();
208
+ (0, messagingPersistence_1.rewriteMessages)([], this.config.dir);
209
+ return count;
210
+ }
211
+ /** Purge messages by channel. Returns count removed. */
212
+ purgeChannel(channel) {
213
+ this.ensureLoaded();
214
+ let count = 0;
215
+ for (const [key, msg] of this.store.entries()) {
216
+ if (msg.channel === channel) {
217
+ this.store.delete(key);
218
+ this.idIndex.delete(msg.id);
219
+ count++;
220
+ }
221
+ }
222
+ if (count > 0)
223
+ this.persistAll();
224
+ return count;
225
+ }
226
+ /** Delete specific messages by IDs. Returns count removed. */
227
+ deleteMessages(ids) {
228
+ this.ensureLoaded();
229
+ let count = 0;
230
+ for (const id of ids) {
231
+ const key = this.idIndex.get(id);
232
+ if (!key)
233
+ continue;
234
+ this.store.delete(key);
235
+ this.idIndex.delete(id);
236
+ count++;
237
+ }
238
+ if (count > 0)
239
+ this.persistAll();
240
+ return count;
241
+ }
242
+ /** Remove expired non-persistent messages. */
243
+ sweepExpired() {
244
+ this.ensureLoaded();
245
+ const now = Date.now();
246
+ let count = 0;
247
+ for (const [key, msg] of this.store.entries()) {
248
+ if (msg.persistent)
249
+ continue;
250
+ if (msg.ttlSeconds <= 0)
251
+ continue;
252
+ const age = now - new Date(msg.createdAt).getTime();
253
+ if (age > msg.ttlSeconds * 1000) {
254
+ this.store.delete(key);
255
+ this.idIndex.delete(msg.id);
256
+ count++;
257
+ }
258
+ }
259
+ if (count > 0)
260
+ this.persistAll();
261
+ return count;
262
+ }
263
+ /** Reply to a message, auto-populating channel, parentId, and original recipients. */
264
+ async reply(parentId, sender, body, opts = {}) {
265
+ this.ensureLoaded();
266
+ const parent = this.getMessage(parentId);
267
+ if (!parent)
268
+ throw new Error(`Parent message not found: ${parentId}`);
269
+ let recipients;
270
+ if (opts.recipients?.length) {
271
+ recipients = opts.recipients;
272
+ }
273
+ else if (opts.replyAll) {
274
+ // Reply-all: original sender + all recipients, excluding self
275
+ const all = new Set([parent.sender, ...parent.recipients]);
276
+ all.delete(sender);
277
+ all.delete('*');
278
+ recipients = all.size > 0 ? Array.from(all) : [parent.sender];
279
+ }
280
+ else {
281
+ // Default: reply to sender only
282
+ recipients = [parent.sender];
283
+ }
284
+ const messageId = await this.send({
285
+ channel: parent.channel,
286
+ sender,
287
+ recipients,
288
+ body,
289
+ parentId,
290
+ priority: opts.priority ?? parent.priority,
291
+ tags: opts.tags,
292
+ persistent: opts.persistent,
293
+ payload: opts.payload,
294
+ });
295
+ return { messageId, channel: parent.channel, recipients };
296
+ }
297
+ /** Get all messages in a thread (by parentId). Returns parent + replies sorted chronologically. */
298
+ getThread(parentId) {
299
+ this.ensureLoaded();
300
+ const results = [];
301
+ // Include the parent itself
302
+ const parent = this.getMessage(parentId);
303
+ if (parent)
304
+ results.push(parent);
305
+ // Find all replies (direct and nested)
306
+ const idSet = new Set([parentId]);
307
+ let changed = true;
308
+ while (changed) {
309
+ changed = false;
310
+ for (const msg of this.store.values()) {
311
+ if (msg.parentId && idSet.has(msg.parentId) && !idSet.has(msg.id)) {
312
+ results.push(msg);
313
+ idSet.add(msg.id);
314
+ changed = true;
315
+ }
316
+ }
317
+ }
318
+ results.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
319
+ return results;
320
+ }
321
+ /** Destroy the mailbox, stopping any timers. */
322
+ destroy() {
323
+ if (this.sweepTimer) {
324
+ clearInterval(this.sweepTimer);
325
+ this.sweepTimer = null;
326
+ }
327
+ }
328
+ // ── Private ────────────────────────────────────────────────────────────
329
+ makeKey(msg) {
330
+ return `msg/${msg.channel}/${new Date(msg.createdAt).getTime()}-${msg.id}`;
331
+ }
332
+ isRecipient(msg, reader) {
333
+ if (reader === '*')
334
+ return true;
335
+ if (msg.recipients.includes('*'))
336
+ return true;
337
+ if (msg.sender === reader)
338
+ return true;
339
+ return msg.recipients.includes(reader);
340
+ }
341
+ persistAll() {
342
+ const messages = Array.from(this.store.values());
343
+ (0, messagingPersistence_1.rewriteMessages)(messages, this.config.dir);
344
+ }
345
+ startSweep() {
346
+ this.sweepTimer = setInterval(() => {
347
+ this.sweepExpired();
348
+ }, this.config.sweepIntervalMs);
349
+ if (this.sweepTimer.unref)
350
+ this.sweepTimer.unref();
351
+ }
352
+ }
353
+ exports.AgentMailbox = AgentMailbox;
@@ -0,0 +1,20 @@
1
+ import type { AgentMessage } from './messagingTypes';
2
+ /** Returns the path to messages.jsonl in the given directory. */
3
+ export declare function getMessagingFilePath(dir: string): string;
4
+ /**
5
+ * Append a single message to the JSONL file.
6
+ * Deduplicates by message ID within this process session.
7
+ */
8
+ export declare function appendMessage(msg: AgentMessage, dir: string): void;
9
+ /**
10
+ * Load all messages from the JSONL file.
11
+ * Skips corrupt/empty lines and deduplicates by ID.
12
+ */
13
+ export declare function loadMessages(dir: string): AgentMessage[];
14
+ /**
15
+ * Rewrite the JSONL file with the provided messages (atomic via temp+rename).
16
+ * Used after TTL sweep or purge operations.
17
+ */
18
+ export declare function rewriteMessages(messages: AgentMessage[], dir: string): void;
19
+ /** Reset dedup state (for testing). */
20
+ export declare function _resetDedupState(): void;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getMessagingFilePath = getMessagingFilePath;
7
+ exports.appendMessage = appendMessage;
8
+ exports.loadMessages = loadMessages;
9
+ exports.rewriteMessages = rewriteMessages;
10
+ exports._resetDedupState = _resetDedupState;
11
+ /**
12
+ * JSONL-based messaging persistence.
13
+ *
14
+ * Stores messages one-per-line in `messages.jsonl`. Provides append, load,
15
+ * and rewrite operations with deduplication and corruption tolerance.
16
+ *
17
+ * Follows the atomic write pattern from `atomicFs.ts` for rewrite operations.
18
+ */
19
+ const fs_1 = __importDefault(require("fs"));
20
+ const path_1 = __importDefault(require("path"));
21
+ const os_1 = __importDefault(require("os"));
22
+ const crypto_1 = __importDefault(require("crypto"));
23
+ const FILENAME = 'messages.jsonl';
24
+ /** Track appended IDs per directory to prevent cross-process duplicates within a session. */
25
+ const appendedIds = new Map();
26
+ /** Returns the path to messages.jsonl in the given directory. */
27
+ function getMessagingFilePath(dir) {
28
+ return path_1.default.join(dir, FILENAME);
29
+ }
30
+ /**
31
+ * Append a single message to the JSONL file.
32
+ * Deduplicates by message ID within this process session.
33
+ */
34
+ function appendMessage(msg, dir) {
35
+ if (!appendedIds.has(dir))
36
+ appendedIds.set(dir, new Set());
37
+ const seen = appendedIds.get(dir);
38
+ if (seen.has(msg.id))
39
+ return;
40
+ const filePath = getMessagingFilePath(dir);
41
+ if (!fs_1.default.existsSync(dir))
42
+ fs_1.default.mkdirSync(dir, { recursive: true });
43
+ fs_1.default.appendFileSync(filePath, JSON.stringify(msg) + os_1.default.EOL, 'utf8');
44
+ seen.add(msg.id);
45
+ }
46
+ /**
47
+ * Load all messages from the JSONL file.
48
+ * Skips corrupt/empty lines and deduplicates by ID.
49
+ */
50
+ function loadMessages(dir) {
51
+ const filePath = getMessagingFilePath(dir);
52
+ if (!fs_1.default.existsSync(filePath))
53
+ return [];
54
+ const content = fs_1.default.readFileSync(filePath, 'utf8');
55
+ const lines = content.split('\n');
56
+ const messages = [];
57
+ const seenIds = new Set();
58
+ for (const line of lines) {
59
+ const trimmed = line.trim();
60
+ if (!trimmed)
61
+ continue;
62
+ try {
63
+ const msg = JSON.parse(trimmed);
64
+ if (msg.id && !seenIds.has(msg.id)) {
65
+ seenIds.add(msg.id);
66
+ messages.push(msg);
67
+ }
68
+ }
69
+ catch {
70
+ // Skip corrupt lines (DI-2: graceful corruption handling)
71
+ }
72
+ }
73
+ // Seed the append dedup set so we don't re-append loaded messages
74
+ if (!appendedIds.has(dir))
75
+ appendedIds.set(dir, new Set());
76
+ const seen = appendedIds.get(dir);
77
+ for (const msg of messages)
78
+ seen.add(msg.id);
79
+ return messages;
80
+ }
81
+ /**
82
+ * Rewrite the JSONL file with the provided messages (atomic via temp+rename).
83
+ * Used after TTL sweep or purge operations.
84
+ */
85
+ function rewriteMessages(messages, dir) {
86
+ const filePath = getMessagingFilePath(dir);
87
+ if (!fs_1.default.existsSync(dir))
88
+ fs_1.default.mkdirSync(dir, { recursive: true });
89
+ const data = messages.map(m => JSON.stringify(m)).join(os_1.default.EOL) + (messages.length ? os_1.default.EOL : '');
90
+ const tmp = path_1.default.join(dir, `.${path_1.default.basename(filePath)}.${crypto_1.default.randomBytes(6).toString('hex')}.tmp`);
91
+ try {
92
+ fs_1.default.writeFileSync(tmp, data, 'utf8');
93
+ fs_1.default.renameSync(tmp, filePath);
94
+ }
95
+ catch {
96
+ // Fallback: direct write if rename fails (Windows/network FS)
97
+ try {
98
+ if (fs_1.default.existsSync(tmp))
99
+ fs_1.default.unlinkSync(tmp);
100
+ }
101
+ catch { /* ignore */ }
102
+ fs_1.default.writeFileSync(filePath, data, 'utf8');
103
+ }
104
+ // Reset dedup set to match current state
105
+ const seen = new Set(messages.map(m => m.id));
106
+ appendedIds.set(dir, seen);
107
+ }
108
+ /** Reset dedup state (for testing). */
109
+ function _resetDedupState() {
110
+ appendedIds.clear();
111
+ }
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Messaging types, Zod schemas, and constants.
3
+ *
4
+ * Defines the data model for the inter-agent messaging system.
5
+ * Messages are short-term, ephemeral (not stored in the instruction index)
6
+ * but persist across instances/sessions via JSONL files.
7
+ */
8
+ import { z } from 'zod';
9
+ /** Maximum time-to-live in seconds (24 hours). */
10
+ export declare const MAX_TTL_SECONDS = 86400;
11
+ /** Default time-to-live in seconds (1 hour). */
12
+ export declare const DEFAULT_TTL_SECONDS = 3600;
13
+ /** Sweep interval in milliseconds (60 seconds). */
14
+ export declare const SWEEP_INTERVAL_MS = 60000;
15
+ /** Maximum body size in characters (100KB). */
16
+ export declare const MAX_BODY_LENGTH = 100000;
17
+ /** Maximum messages per read response. */
18
+ export declare const MAX_READ_LIMIT = 500;
19
+ export declare const MESSAGE_PRIORITIES: readonly ["low", "normal", "high", "critical"];
20
+ export type MessagePriority = (typeof MESSAGE_PRIORITIES)[number];
21
+ export declare const AgentMessageSchema: z.ZodObject<{
22
+ id: z.ZodString;
23
+ channel: z.ZodString;
24
+ sender: z.ZodString;
25
+ recipients: z.ZodArray<z.ZodString, "many">;
26
+ body: z.ZodString;
27
+ createdAt: z.ZodString;
28
+ ttlSeconds: z.ZodNumber;
29
+ persistent: z.ZodOptional<z.ZodBoolean>;
30
+ readBy: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
31
+ payload: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
32
+ priority: z.ZodOptional<z.ZodEnum<["low", "normal", "high", "critical"]>>;
33
+ parentId: z.ZodOptional<z.ZodString>;
34
+ requiresAck: z.ZodOptional<z.ZodBoolean>;
35
+ ackBySeconds: z.ZodOptional<z.ZodNumber>;
36
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
37
+ origin: z.ZodOptional<z.ZodString>;
38
+ }, "strict", z.ZodTypeAny, {
39
+ id: string;
40
+ body: string;
41
+ channel: string;
42
+ createdAt: string;
43
+ sender: string;
44
+ recipients: string[];
45
+ ttlSeconds: number;
46
+ priority?: "normal" | "low" | "high" | "critical" | undefined;
47
+ origin?: string | undefined;
48
+ parentId?: string | undefined;
49
+ persistent?: boolean | undefined;
50
+ readBy?: string[] | undefined;
51
+ payload?: Record<string, unknown> | undefined;
52
+ requiresAck?: boolean | undefined;
53
+ ackBySeconds?: number | undefined;
54
+ tags?: string[] | undefined;
55
+ }, {
56
+ id: string;
57
+ body: string;
58
+ channel: string;
59
+ createdAt: string;
60
+ sender: string;
61
+ recipients: string[];
62
+ ttlSeconds: number;
63
+ priority?: "normal" | "low" | "high" | "critical" | undefined;
64
+ origin?: string | undefined;
65
+ parentId?: string | undefined;
66
+ persistent?: boolean | undefined;
67
+ readBy?: string[] | undefined;
68
+ payload?: Record<string, unknown> | undefined;
69
+ requiresAck?: boolean | undefined;
70
+ ackBySeconds?: number | undefined;
71
+ tags?: string[] | undefined;
72
+ }>;
73
+ export type AgentMessage = z.infer<typeof AgentMessageSchema>;
74
+ export declare const SendMessageOptionsSchema: z.ZodObject<{
75
+ channel: z.ZodString;
76
+ sender: z.ZodString;
77
+ recipients: z.ZodArray<z.ZodString, "many">;
78
+ body: z.ZodString;
79
+ ttlSeconds: z.ZodOptional<z.ZodNumber>;
80
+ persistent: z.ZodOptional<z.ZodBoolean>;
81
+ payload: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
82
+ priority: z.ZodOptional<z.ZodEnum<["low", "normal", "high", "critical"]>>;
83
+ parentId: z.ZodOptional<z.ZodString>;
84
+ requiresAck: z.ZodOptional<z.ZodBoolean>;
85
+ ackBySeconds: z.ZodOptional<z.ZodNumber>;
86
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
87
+ }, "strict", z.ZodTypeAny, {
88
+ body: string;
89
+ channel: string;
90
+ sender: string;
91
+ recipients: string[];
92
+ priority?: "normal" | "low" | "high" | "critical" | undefined;
93
+ parentId?: string | undefined;
94
+ ttlSeconds?: number | undefined;
95
+ persistent?: boolean | undefined;
96
+ payload?: Record<string, unknown> | undefined;
97
+ requiresAck?: boolean | undefined;
98
+ ackBySeconds?: number | undefined;
99
+ tags?: string[] | undefined;
100
+ }, {
101
+ body: string;
102
+ channel: string;
103
+ sender: string;
104
+ recipients: string[];
105
+ priority?: "normal" | "low" | "high" | "critical" | undefined;
106
+ parentId?: string | undefined;
107
+ ttlSeconds?: number | undefined;
108
+ persistent?: boolean | undefined;
109
+ payload?: Record<string, unknown> | undefined;
110
+ requiresAck?: boolean | undefined;
111
+ ackBySeconds?: number | undefined;
112
+ tags?: string[] | undefined;
113
+ }>;
114
+ export type SendMessageOptions = z.infer<typeof SendMessageOptionsSchema>;
115
+ export declare const ReadMessagesOptionsSchema: z.ZodObject<{
116
+ channel: z.ZodOptional<z.ZodString>;
117
+ reader: z.ZodOptional<z.ZodString>;
118
+ unreadOnly: z.ZodOptional<z.ZodBoolean>;
119
+ limit: z.ZodOptional<z.ZodNumber>;
120
+ markRead: z.ZodOptional<z.ZodBoolean>;
121
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
122
+ sender: z.ZodOptional<z.ZodString>;
123
+ }, "strict", z.ZodTypeAny, {
124
+ channel?: string | undefined;
125
+ limit?: number | undefined;
126
+ sender?: string | undefined;
127
+ reader?: string | undefined;
128
+ tags?: string[] | undefined;
129
+ unreadOnly?: boolean | undefined;
130
+ markRead?: boolean | undefined;
131
+ }, {
132
+ channel?: string | undefined;
133
+ limit?: number | undefined;
134
+ sender?: string | undefined;
135
+ reader?: string | undefined;
136
+ tags?: string[] | undefined;
137
+ unreadOnly?: boolean | undefined;
138
+ markRead?: boolean | undefined;
139
+ }>;
140
+ export type ReadMessagesOptions = z.infer<typeof ReadMessagesOptionsSchema>;
141
+ export interface ChannelInfo {
142
+ channel: string;
143
+ messageCount: number;
144
+ latestAt: string | null;
145
+ }
146
+ export interface MessagingStats {
147
+ total: number;
148
+ unread: number;
149
+ channels: number;
150
+ }