@debian777/kairos-mcp 3.0.1-beta.14

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 (502) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +108 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/cli/api-client.d.ts +31 -0
  5. package/dist/cli/api-client.d.ts.map +1 -0
  6. package/dist/cli/api-client.js +110 -0
  7. package/dist/cli/api-client.js.map +1 -0
  8. package/dist/cli/commands/attest.d.ts +6 -0
  9. package/dist/cli/commands/attest.d.ts.map +1 -0
  10. package/dist/cli/commands/attest.js +52 -0
  11. package/dist/cli/commands/attest.js.map +1 -0
  12. package/dist/cli/commands/begin.d.ts +6 -0
  13. package/dist/cli/commands/begin.d.ts.map +1 -0
  14. package/dist/cli/commands/begin.js +32 -0
  15. package/dist/cli/commands/begin.js.map +1 -0
  16. package/dist/cli/commands/delete.d.ts +6 -0
  17. package/dist/cli/commands/delete.d.ts.map +1 -0
  18. package/dist/cli/commands/delete.js +32 -0
  19. package/dist/cli/commands/delete.js.map +1 -0
  20. package/dist/cli/commands/mint.d.ts +6 -0
  21. package/dist/cli/commands/mint.d.ts.map +1 -0
  22. package/dist/cli/commands/mint.js +48 -0
  23. package/dist/cli/commands/mint.js.map +1 -0
  24. package/dist/cli/commands/next.d.ts +6 -0
  25. package/dist/cli/commands/next.d.ts.map +1 -0
  26. package/dist/cli/commands/next.js +89 -0
  27. package/dist/cli/commands/next.js.map +1 -0
  28. package/dist/cli/commands/search.d.ts +6 -0
  29. package/dist/cli/commands/search.d.ts.map +1 -0
  30. package/dist/cli/commands/search.js +32 -0
  31. package/dist/cli/commands/search.js.map +1 -0
  32. package/dist/cli/commands/update.d.ts +6 -0
  33. package/dist/cli/commands/update.d.ts.map +1 -0
  34. package/dist/cli/commands/update.js +72 -0
  35. package/dist/cli/commands/update.js.map +1 -0
  36. package/dist/cli/config.d.ts +9 -0
  37. package/dist/cli/config.d.ts.map +1 -0
  38. package/dist/cli/config.js +14 -0
  39. package/dist/cli/config.js.map +1 -0
  40. package/dist/cli/index.d.ts +6 -0
  41. package/dist/cli/index.d.ts.map +1 -0
  42. package/dist/cli/index.js +40 -0
  43. package/dist/cli/index.js.map +1 -0
  44. package/dist/cli/output.d.ts +10 -0
  45. package/dist/cli/output.d.ts.map +1 -0
  46. package/dist/cli/output.js +20 -0
  47. package/dist/cli/output.js.map +1 -0
  48. package/dist/config.d.ts +58 -0
  49. package/dist/config.d.ts.map +1 -0
  50. package/dist/config.js +165 -0
  51. package/dist/config.js.map +1 -0
  52. package/dist/embed-docs/mem/00000000-0000-0000-0000-000000002001.md +324 -0
  53. package/dist/embed-docs/mem/00000000-0000-0000-0000-000000002002.md +48 -0
  54. package/dist/http/bearer-validate.d.ts +14 -0
  55. package/dist/http/bearer-validate.d.ts.map +1 -0
  56. package/dist/http/bearer-validate.js +111 -0
  57. package/dist/http/bearer-validate.js.map +1 -0
  58. package/dist/http/http-api-attest.d.ts +7 -0
  59. package/dist/http/http-api-attest.d.ts.map +1 -0
  60. package/dist/http/http-api-attest.js +103 -0
  61. package/dist/http/http-api-attest.js.map +1 -0
  62. package/dist/http/http-api-begin-step.d.ts +8 -0
  63. package/dist/http/http-api-begin-step.d.ts.map +1 -0
  64. package/dist/http/http-api-begin-step.js +108 -0
  65. package/dist/http/http-api-begin-step.js.map +1 -0
  66. package/dist/http/http-api-begin.d.ts +8 -0
  67. package/dist/http/http-api-begin.d.ts.map +1 -0
  68. package/dist/http/http-api-begin.js +167 -0
  69. package/dist/http/http-api-begin.js.map +1 -0
  70. package/dist/http/http-api-delete.d.ts +9 -0
  71. package/dist/http/http-api-delete.d.ts.map +1 -0
  72. package/dist/http/http-api-delete.js +67 -0
  73. package/dist/http/http-api-delete.js.map +1 -0
  74. package/dist/http/http-api-dump.d.ts +8 -0
  75. package/dist/http/http-api-dump.d.ts.map +1 -0
  76. package/dist/http/http-api-dump.js +34 -0
  77. package/dist/http/http-api-dump.js.map +1 -0
  78. package/dist/http/http-api-mint.d.ts +9 -0
  79. package/dist/http/http-api-mint.d.ts.map +1 -0
  80. package/dist/http/http-api-mint.js +100 -0
  81. package/dist/http/http-api-mint.js.map +1 -0
  82. package/dist/http/http-api-next.d.ts +9 -0
  83. package/dist/http/http-api-next.d.ts.map +1 -0
  84. package/dist/http/http-api-next.js +237 -0
  85. package/dist/http/http-api-next.js.map +1 -0
  86. package/dist/http/http-api-routes.d.ts +13 -0
  87. package/dist/http/http-api-routes.d.ts.map +1 -0
  88. package/dist/http/http-api-routes.js +28 -0
  89. package/dist/http/http-api-routes.js.map +1 -0
  90. package/dist/http/http-api-snapshot.d.ts +4 -0
  91. package/dist/http/http-api-snapshot.d.ts.map +1 -0
  92. package/dist/http/http-api-snapshot.js +36 -0
  93. package/dist/http/http-api-snapshot.js.map +1 -0
  94. package/dist/http/http-api-update.d.ts +9 -0
  95. package/dist/http/http-api-update.d.ts.map +1 -0
  96. package/dist/http/http-api-update.js +105 -0
  97. package/dist/http/http-api-update.js.map +1 -0
  98. package/dist/http/http-auth-callback.d.ts +6 -0
  99. package/dist/http/http-auth-callback.d.ts.map +1 -0
  100. package/dist/http/http-auth-callback.js +183 -0
  101. package/dist/http/http-auth-callback.js.map +1 -0
  102. package/dist/http/http-auth-middleware.d.ts +30 -0
  103. package/dist/http/http-auth-middleware.d.ts.map +1 -0
  104. package/dist/http/http-auth-middleware.js +224 -0
  105. package/dist/http/http-auth-middleware.js.map +1 -0
  106. package/dist/http/http-error-handlers.d.ts +7 -0
  107. package/dist/http/http-error-handlers.d.ts.map +1 -0
  108. package/dist/http/http-error-handlers.js +35 -0
  109. package/dist/http/http-error-handlers.js.map +1 -0
  110. package/dist/http/http-health-routes.d.ts +9 -0
  111. package/dist/http/http-health-routes.d.ts.map +1 -0
  112. package/dist/http/http-health-routes.js +117 -0
  113. package/dist/http/http-health-routes.js.map +1 -0
  114. package/dist/http/http-mcp-handler.d.ts +8 -0
  115. package/dist/http/http-mcp-handler.d.ts.map +1 -0
  116. package/dist/http/http-mcp-handler.js +136 -0
  117. package/dist/http/http-mcp-handler.js.map +1 -0
  118. package/dist/http/http-metrics-middleware.d.ts +7 -0
  119. package/dist/http/http-metrics-middleware.d.ts.map +1 -0
  120. package/dist/http/http-metrics-middleware.js +56 -0
  121. package/dist/http/http-metrics-middleware.js.map +1 -0
  122. package/dist/http/http-server-config.d.ts +11 -0
  123. package/dist/http/http-server-config.d.ts.map +1 -0
  124. package/dist/http/http-server-config.js +15 -0
  125. package/dist/http/http-server-config.js.map +1 -0
  126. package/dist/http/http-server-startup.d.ts +9 -0
  127. package/dist/http/http-server-startup.d.ts.map +1 -0
  128. package/dist/http/http-server-startup.js +26 -0
  129. package/dist/http/http-server-startup.js.map +1 -0
  130. package/dist/http/http-server.d.ts +4 -0
  131. package/dist/http/http-server.d.ts.map +1 -0
  132. package/dist/http/http-server.js +39 -0
  133. package/dist/http/http-server.js.map +1 -0
  134. package/dist/http/http-well-known.d.ts +13 -0
  135. package/dist/http/http-well-known.d.ts.map +1 -0
  136. package/dist/http/http-well-known.js +32 -0
  137. package/dist/http/http-well-known.js.map +1 -0
  138. package/dist/index.d.ts +7 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +100 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/metrics-server.d.ts +14 -0
  143. package/dist/metrics-server.d.ts.map +1 -0
  144. package/dist/metrics-server.js +41 -0
  145. package/dist/metrics-server.js.map +1 -0
  146. package/dist/resources/docs-resources.d.ts +2 -0
  147. package/dist/resources/docs-resources.d.ts.map +1 -0
  148. package/dist/resources/docs-resources.js +47 -0
  149. package/dist/resources/docs-resources.js.map +1 -0
  150. package/dist/resources/embedded-mcp-resources.d.ts +73 -0
  151. package/dist/resources/embedded-mcp-resources.d.ts.map +1 -0
  152. package/dist/resources/embedded-mcp-resources.js +132 -0
  153. package/dist/resources/embedded-mcp-resources.js.map +1 -0
  154. package/dist/resources/mem-resources-boot.d.ts +10 -0
  155. package/dist/resources/mem-resources-boot.d.ts.map +1 -0
  156. package/dist/resources/mem-resources-boot.js +164 -0
  157. package/dist/resources/mem-resources-boot.js.map +1 -0
  158. package/dist/resources/prompt-resources.d.ts +5 -0
  159. package/dist/resources/prompt-resources.d.ts.map +1 -0
  160. package/dist/resources/prompt-resources.js +42 -0
  161. package/dist/resources/prompt-resources.js.map +1 -0
  162. package/dist/resources/resource-bootstrap.d.ts +7 -0
  163. package/dist/resources/resource-bootstrap.d.ts.map +1 -0
  164. package/dist/resources/resource-bootstrap.js +33 -0
  165. package/dist/resources/resource-bootstrap.js.map +1 -0
  166. package/dist/server.d.ts +4 -0
  167. package/dist/server.d.ts.map +1 -0
  168. package/dist/server.js +79 -0
  169. package/dist/server.js.map +1 -0
  170. package/dist/services/chain-utils.d.ts +22 -0
  171. package/dist/services/chain-utils.d.ts.map +1 -0
  172. package/dist/services/chain-utils.js +95 -0
  173. package/dist/services/chain-utils.js.map +1 -0
  174. package/dist/services/code-block-processor.d.ts +40 -0
  175. package/dist/services/code-block-processor.d.ts.map +1 -0
  176. package/dist/services/code-block-processor.js +169 -0
  177. package/dist/services/code-block-processor.js.map +1 -0
  178. package/dist/services/embedding/config.d.ts +5 -0
  179. package/dist/services/embedding/config.d.ts.map +1 -0
  180. package/dist/services/embedding/config.js +13 -0
  181. package/dist/services/embedding/config.js.map +1 -0
  182. package/dist/services/embedding/providers.d.ts +5 -0
  183. package/dist/services/embedding/providers.d.ts.map +1 -0
  184. package/dist/services/embedding/providers.js +141 -0
  185. package/dist/services/embedding/providers.js.map +1 -0
  186. package/dist/services/embedding/service.d.ts +39 -0
  187. package/dist/services/embedding/service.d.ts.map +1 -0
  188. package/dist/services/embedding/service.js +302 -0
  189. package/dist/services/embedding/service.js.map +1 -0
  190. package/dist/services/embedding/types.d.ts +17 -0
  191. package/dist/services/embedding/types.d.ts.map +1 -0
  192. package/dist/services/embedding/types.js +2 -0
  193. package/dist/services/embedding/types.js.map +1 -0
  194. package/dist/services/id-generator.d.ts +63 -0
  195. package/dist/services/id-generator.d.ts.map +1 -0
  196. package/dist/services/id-generator.js +101 -0
  197. package/dist/services/id-generator.js.map +1 -0
  198. package/dist/services/key-value-store-factory.d.ts +7 -0
  199. package/dist/services/key-value-store-factory.d.ts.map +1 -0
  200. package/dist/services/key-value-store-factory.js +15 -0
  201. package/dist/services/key-value-store-factory.js.map +1 -0
  202. package/dist/services/key-value-store.d.ts +24 -0
  203. package/dist/services/key-value-store.d.ts.map +1 -0
  204. package/dist/services/key-value-store.js +6 -0
  205. package/dist/services/key-value-store.js.map +1 -0
  206. package/dist/services/memory/chain-builder-proof.d.ts +18 -0
  207. package/dist/services/memory/chain-builder-proof.d.ts.map +1 -0
  208. package/dist/services/memory/chain-builder-proof.js +78 -0
  209. package/dist/services/memory/chain-builder-proof.js.map +1 -0
  210. package/dist/services/memory/chain-builder.d.ts +4 -0
  211. package/dist/services/memory/chain-builder.d.ts.map +1 -0
  212. package/dist/services/memory/chain-builder.js +185 -0
  213. package/dist/services/memory/chain-builder.js.map +1 -0
  214. package/dist/services/memory/store-chain-default-handler.d.ts +9 -0
  215. package/dist/services/memory/store-chain-default-handler.d.ts.map +1 -0
  216. package/dist/services/memory/store-chain-default-handler.js +118 -0
  217. package/dist/services/memory/store-chain-default-handler.js.map +1 -0
  218. package/dist/services/memory/store-chain-header-handler.d.ts +8 -0
  219. package/dist/services/memory/store-chain-header-handler.d.ts.map +1 -0
  220. package/dist/services/memory/store-chain-header-handler.js +98 -0
  221. package/dist/services/memory/store-chain-header-handler.js.map +1 -0
  222. package/dist/services/memory/store-chain-helpers.d.ts +27 -0
  223. package/dist/services/memory/store-chain-helpers.d.ts.map +1 -0
  224. package/dist/services/memory/store-chain-helpers.js +102 -0
  225. package/dist/services/memory/store-chain-helpers.js.map +1 -0
  226. package/dist/services/memory/store-chain.d.ts +15 -0
  227. package/dist/services/memory/store-chain.d.ts.map +1 -0
  228. package/dist/services/memory/store-chain.js +56 -0
  229. package/dist/services/memory/store-chain.js.map +1 -0
  230. package/dist/services/memory/store-init.d.ts +3 -0
  231. package/dist/services/memory/store-init.d.ts.map +1 -0
  232. package/dist/services/memory/store-init.js +127 -0
  233. package/dist/services/memory/store-init.js.map +1 -0
  234. package/dist/services/memory/store-methods.d.ts +35 -0
  235. package/dist/services/memory/store-methods.d.ts.map +1 -0
  236. package/dist/services/memory/store-methods.js +308 -0
  237. package/dist/services/memory/store-methods.js.map +1 -0
  238. package/dist/services/memory/store.d.ts +36 -0
  239. package/dist/services/memory/store.d.ts.map +1 -0
  240. package/dist/services/memory/store.js +119 -0
  241. package/dist/services/memory/store.js.map +1 -0
  242. package/dist/services/memory-store.d.ts +33 -0
  243. package/dist/services/memory-store.d.ts.map +1 -0
  244. package/dist/services/memory-store.js +158 -0
  245. package/dist/services/memory-store.js.map +1 -0
  246. package/dist/services/metrics/agent-metrics.d.ts +12 -0
  247. package/dist/services/metrics/agent-metrics.d.ts.map +1 -0
  248. package/dist/services/metrics/agent-metrics.js +34 -0
  249. package/dist/services/metrics/agent-metrics.js.map +1 -0
  250. package/dist/services/metrics/embedding-metrics.d.ts +12 -0
  251. package/dist/services/metrics/embedding-metrics.d.ts.map +1 -0
  252. package/dist/services/metrics/embedding-metrics.js +41 -0
  253. package/dist/services/metrics/embedding-metrics.js.map +1 -0
  254. package/dist/services/metrics/http-metrics.d.ts +12 -0
  255. package/dist/services/metrics/http-metrics.d.ts.map +1 -0
  256. package/dist/services/metrics/http-metrics.js +41 -0
  257. package/dist/services/metrics/http-metrics.js.map +1 -0
  258. package/dist/services/metrics/mcp-metrics.d.ts +16 -0
  259. package/dist/services/metrics/mcp-metrics.d.ts.map +1 -0
  260. package/dist/services/metrics/mcp-metrics.js +55 -0
  261. package/dist/services/metrics/mcp-metrics.js.map +1 -0
  262. package/dist/services/metrics/memory-metrics.d.ts +10 -0
  263. package/dist/services/metrics/memory-metrics.d.ts.map +1 -0
  264. package/dist/services/metrics/memory-metrics.js +28 -0
  265. package/dist/services/metrics/memory-metrics.js.map +1 -0
  266. package/dist/services/metrics/qdrant-metrics.d.ts +11 -0
  267. package/dist/services/metrics/qdrant-metrics.d.ts.map +1 -0
  268. package/dist/services/metrics/qdrant-metrics.js +35 -0
  269. package/dist/services/metrics/qdrant-metrics.js.map +1 -0
  270. package/dist/services/metrics/registry.d.ts +9 -0
  271. package/dist/services/metrics/registry.d.ts.map +1 -0
  272. package/dist/services/metrics/registry.js +19 -0
  273. package/dist/services/metrics/registry.js.map +1 -0
  274. package/dist/services/metrics/system-metrics.d.ts +10 -0
  275. package/dist/services/metrics/system-metrics.d.ts.map +1 -0
  276. package/dist/services/metrics/system-metrics.js +35 -0
  277. package/dist/services/metrics/system-metrics.js.map +1 -0
  278. package/dist/services/proof-of-work-store.d.ts +66 -0
  279. package/dist/services/proof-of-work-store.d.ts.map +1 -0
  280. package/dist/services/proof-of-work-store.js +141 -0
  281. package/dist/services/proof-of-work-store.js.map +1 -0
  282. package/dist/services/qdrant/connection.d.ts +24 -0
  283. package/dist/services/qdrant/connection.d.ts.map +1 -0
  284. package/dist/services/qdrant/connection.js +126 -0
  285. package/dist/services/qdrant/connection.js.map +1 -0
  286. package/dist/services/qdrant/index.d.ts +3 -0
  287. package/dist/services/qdrant/index.d.ts.map +1 -0
  288. package/dist/services/qdrant/index.js +4 -0
  289. package/dist/services/qdrant/index.js.map +1 -0
  290. package/dist/services/qdrant/initialization.d.ts +25 -0
  291. package/dist/services/qdrant/initialization.d.ts.map +1 -0
  292. package/dist/services/qdrant/initialization.js +170 -0
  293. package/dist/services/qdrant/initialization.js.map +1 -0
  294. package/dist/services/qdrant/listing.d.ts +26 -0
  295. package/dist/services/qdrant/listing.d.ts.map +1 -0
  296. package/dist/services/qdrant/listing.js +88 -0
  297. package/dist/services/qdrant/listing.js.map +1 -0
  298. package/dist/services/qdrant/memory-retrieval.d.ts +14 -0
  299. package/dist/services/qdrant/memory-retrieval.d.ts.map +1 -0
  300. package/dist/services/qdrant/memory-retrieval.js +110 -0
  301. package/dist/services/qdrant/memory-retrieval.js.map +1 -0
  302. package/dist/services/qdrant/memory-store.d.ts +16 -0
  303. package/dist/services/qdrant/memory-store.d.ts.map +1 -0
  304. package/dist/services/qdrant/memory-store.js +108 -0
  305. package/dist/services/qdrant/memory-store.js.map +1 -0
  306. package/dist/services/qdrant/memory-updates.d.ts +8 -0
  307. package/dist/services/qdrant/memory-updates.d.ts.map +1 -0
  308. package/dist/services/qdrant/memory-updates.js +206 -0
  309. package/dist/services/qdrant/memory-updates.js.map +1 -0
  310. package/dist/services/qdrant/protocol.d.ts +16 -0
  311. package/dist/services/qdrant/protocol.d.ts.map +1 -0
  312. package/dist/services/qdrant/protocol.js +48 -0
  313. package/dist/services/qdrant/protocol.js.map +1 -0
  314. package/dist/services/qdrant/quality.d.ts +14 -0
  315. package/dist/services/qdrant/quality.d.ts.map +1 -0
  316. package/dist/services/qdrant/quality.js +101 -0
  317. package/dist/services/qdrant/quality.js.map +1 -0
  318. package/dist/services/qdrant/resources.d.ts +7 -0
  319. package/dist/services/qdrant/resources.d.ts.map +1 -0
  320. package/dist/services/qdrant/resources.js +108 -0
  321. package/dist/services/qdrant/resources.js.map +1 -0
  322. package/dist/services/qdrant/search.d.ts +22 -0
  323. package/dist/services/qdrant/search.d.ts.map +1 -0
  324. package/dist/services/qdrant/search.js +75 -0
  325. package/dist/services/qdrant/search.js.map +1 -0
  326. package/dist/services/qdrant/service.d.ts +90 -0
  327. package/dist/services/qdrant/service.d.ts.map +1 -0
  328. package/dist/services/qdrant/service.js +95 -0
  329. package/dist/services/qdrant/service.js.map +1 -0
  330. package/dist/services/qdrant/snapshots.d.ts +19 -0
  331. package/dist/services/qdrant/snapshots.d.ts.map +1 -0
  332. package/dist/services/qdrant/snapshots.js +130 -0
  333. package/dist/services/qdrant/snapshots.js.map +1 -0
  334. package/dist/services/qdrant/types.d.ts +39 -0
  335. package/dist/services/qdrant/types.d.ts.map +1 -0
  336. package/dist/services/qdrant/types.js +2 -0
  337. package/dist/services/qdrant/types.js.map +1 -0
  338. package/dist/services/qdrant/utils.d.ts +20 -0
  339. package/dist/services/qdrant/utils.d.ts.map +1 -0
  340. package/dist/services/qdrant/utils.js +121 -0
  341. package/dist/services/qdrant/utils.js.map +1 -0
  342. package/dist/services/redis-cache.d.ts +43 -0
  343. package/dist/services/redis-cache.d.ts.map +1 -0
  344. package/dist/services/redis-cache.js +214 -0
  345. package/dist/services/redis-cache.js.map +1 -0
  346. package/dist/services/redis.d.ts +43 -0
  347. package/dist/services/redis.d.ts.map +1 -0
  348. package/dist/services/redis.js +234 -0
  349. package/dist/services/redis.js.map +1 -0
  350. package/dist/services/stats/bonuses.d.ts +28 -0
  351. package/dist/services/stats/bonuses.d.ts.map +1 -0
  352. package/dist/services/stats/bonuses.js +96 -0
  353. package/dist/services/stats/bonuses.js.map +1 -0
  354. package/dist/services/stats/healer.d.ts +6 -0
  355. package/dist/services/stats/healer.d.ts.map +1 -0
  356. package/dist/services/stats/healer.js +24 -0
  357. package/dist/services/stats/healer.js.map +1 -0
  358. package/dist/services/stats/model-stats.d.ts +53 -0
  359. package/dist/services/stats/model-stats.d.ts.map +1 -0
  360. package/dist/services/stats/model-stats.js +238 -0
  361. package/dist/services/stats/model-stats.js.map +1 -0
  362. package/dist/services/stats/protocol.d.ts +11 -0
  363. package/dist/services/stats/protocol.d.ts.map +1 -0
  364. package/dist/services/stats/protocol.js +55 -0
  365. package/dist/services/stats/protocol.js.map +1 -0
  366. package/dist/services/stats/scoring.d.ts +19 -0
  367. package/dist/services/stats/scoring.d.ts.map +1 -0
  368. package/dist/services/stats/scoring.js +102 -0
  369. package/dist/services/stats/scoring.js.map +1 -0
  370. package/dist/services/stats/types.d.ts +39 -0
  371. package/dist/services/stats/types.d.ts.map +1 -0
  372. package/dist/services/stats/types.js +8 -0
  373. package/dist/services/stats/types.js.map +1 -0
  374. package/dist/tools/kairos_attest.d.ts +7 -0
  375. package/dist/tools/kairos_attest.d.ts.map +1 -0
  376. package/dist/tools/kairos_attest.js +179 -0
  377. package/dist/tools/kairos_attest.js.map +1 -0
  378. package/dist/tools/kairos_begin.d.ts +9 -0
  379. package/dist/tools/kairos_begin.d.ts.map +1 -0
  380. package/dist/tools/kairos_begin.js +149 -0
  381. package/dist/tools/kairos_begin.js.map +1 -0
  382. package/dist/tools/kairos_begin_schema.d.ts +48 -0
  383. package/dist/tools/kairos_begin_schema.d.ts.map +1 -0
  384. package/dist/tools/kairos_begin_schema.js +48 -0
  385. package/dist/tools/kairos_begin_schema.js.map +1 -0
  386. package/dist/tools/kairos_delete.d.ts +2 -0
  387. package/dist/tools/kairos_delete.d.ts.map +1 -0
  388. package/dist/tools/kairos_delete.js +113 -0
  389. package/dist/tools/kairos_delete.js.map +1 -0
  390. package/dist/tools/kairos_dump.d.ts +14 -0
  391. package/dist/tools/kairos_dump.d.ts.map +1 -0
  392. package/dist/tools/kairos_dump.js +148 -0
  393. package/dist/tools/kairos_dump.js.map +1 -0
  394. package/dist/tools/kairos_mint.d.ts +7 -0
  395. package/dist/tools/kairos_mint.d.ts.map +1 -0
  396. package/dist/tools/kairos_mint.js +233 -0
  397. package/dist/tools/kairos_mint.js.map +1 -0
  398. package/dist/tools/kairos_next-missing-proof-payload.d.ts +24 -0
  399. package/dist/tools/kairos_next-missing-proof-payload.d.ts.map +1 -0
  400. package/dist/tools/kairos_next-missing-proof-payload.js +32 -0
  401. package/dist/tools/kairos_next-missing-proof-payload.js.map +1 -0
  402. package/dist/tools/kairos_next-pow-helpers.d.ts +57 -0
  403. package/dist/tools/kairos_next-pow-helpers.d.ts.map +1 -0
  404. package/dist/tools/kairos_next-pow-helpers.js +271 -0
  405. package/dist/tools/kairos_next-pow-helpers.js.map +1 -0
  406. package/dist/tools/kairos_next-previous-step.d.ts +36 -0
  407. package/dist/tools/kairos_next-previous-step.d.ts.map +1 -0
  408. package/dist/tools/kairos_next-previous-step.js +121 -0
  409. package/dist/tools/kairos_next-previous-step.js.map +1 -0
  410. package/dist/tools/kairos_next.d.ts +12 -0
  411. package/dist/tools/kairos_next.d.ts.map +1 -0
  412. package/dist/tools/kairos_next.js +285 -0
  413. package/dist/tools/kairos_next.js.map +1 -0
  414. package/dist/tools/kairos_next_schema.d.ts +80 -0
  415. package/dist/tools/kairos_next_schema.d.ts.map +1 -0
  416. package/dist/tools/kairos_next_schema.js +82 -0
  417. package/dist/tools/kairos_next_schema.js.map +1 -0
  418. package/dist/tools/kairos_search.d.ts +15 -0
  419. package/dist/tools/kairos_search.d.ts.map +1 -0
  420. package/dist/tools/kairos_search.js +262 -0
  421. package/dist/tools/kairos_search.js.map +1 -0
  422. package/dist/tools/kairos_spaces.d.ts +10 -0
  423. package/dist/tools/kairos_spaces.d.ts.map +1 -0
  424. package/dist/tools/kairos_spaces.js +129 -0
  425. package/dist/tools/kairos_spaces.js.map +1 -0
  426. package/dist/tools/kairos_update.d.ts +2 -0
  427. package/dist/tools/kairos_update.d.ts.map +1 -0
  428. package/dist/tools/kairos_update.js +158 -0
  429. package/dist/tools/kairos_update.js.map +1 -0
  430. package/dist/types/index.d.ts +60 -0
  431. package/dist/types/index.d.ts.map +1 -0
  432. package/dist/types/index.js +21 -0
  433. package/dist/types/index.js.map +1 -0
  434. package/dist/types/memory.d.ts +38 -0
  435. package/dist/types/memory.d.ts.map +1 -0
  436. package/dist/types/memory.js +2 -0
  437. package/dist/types/memory.js.map +1 -0
  438. package/dist/utils/build-version.d.ts +15 -0
  439. package/dist/utils/build-version.d.ts.map +1 -0
  440. package/dist/utils/build-version.js +46 -0
  441. package/dist/utils/build-version.js.map +1 -0
  442. package/dist/utils/global-error-handlers.d.ts +7 -0
  443. package/dist/utils/global-error-handlers.d.ts.map +1 -0
  444. package/dist/utils/global-error-handlers.js +61 -0
  445. package/dist/utils/global-error-handlers.js.map +1 -0
  446. package/dist/utils/log-core.d.ts +11 -0
  447. package/dist/utils/log-core.d.ts.map +1 -0
  448. package/dist/utils/log-core.js +78 -0
  449. package/dist/utils/log-core.js.map +1 -0
  450. package/dist/utils/logger.d.ts +22 -0
  451. package/dist/utils/logger.d.ts.map +1 -0
  452. package/dist/utils/logger.js +63 -0
  453. package/dist/utils/logger.js.map +1 -0
  454. package/dist/utils/memory-body.d.ts +6 -0
  455. package/dist/utils/memory-body.d.ts.map +1 -0
  456. package/dist/utils/memory-body.js +21 -0
  457. package/dist/utils/memory-body.js.map +1 -0
  458. package/dist/utils/memory-store-utils.d.ts +14 -0
  459. package/dist/utils/memory-store-utils.d.ts.map +1 -0
  460. package/dist/utils/memory-store-utils.js +83 -0
  461. package/dist/utils/memory-store-utils.js.map +1 -0
  462. package/dist/utils/qdrant-collection-utils.d.ts +11 -0
  463. package/dist/utils/qdrant-collection-utils.d.ts.map +1 -0
  464. package/dist/utils/qdrant-collection-utils.js +62 -0
  465. package/dist/utils/qdrant-collection-utils.js.map +1 -0
  466. package/dist/utils/qdrant-query-utils.d.ts +6 -0
  467. package/dist/utils/qdrant-query-utils.d.ts.map +1 -0
  468. package/dist/utils/qdrant-query-utils.js +23 -0
  469. package/dist/utils/qdrant-query-utils.js.map +1 -0
  470. package/dist/utils/qdrant-utils.d.ts +5 -0
  471. package/dist/utils/qdrant-utils.d.ts.map +1 -0
  472. package/dist/utils/qdrant-utils.js +5 -0
  473. package/dist/utils/qdrant-utils.js.map +1 -0
  474. package/dist/utils/qdrant-vector-management.d.ts +25 -0
  475. package/dist/utils/qdrant-vector-management.d.ts.map +1 -0
  476. package/dist/utils/qdrant-vector-management.js +284 -0
  477. package/dist/utils/qdrant-vector-management.js.map +1 -0
  478. package/dist/utils/qdrant-vector-types.d.ts +35 -0
  479. package/dist/utils/qdrant-vector-types.d.ts.map +1 -0
  480. package/dist/utils/qdrant-vector-types.js +42 -0
  481. package/dist/utils/qdrant-vector-types.js.map +1 -0
  482. package/dist/utils/space-display.d.ts +11 -0
  483. package/dist/utils/space-display.d.ts.map +1 -0
  484. package/dist/utils/space-display.js +25 -0
  485. package/dist/utils/space-display.js.map +1 -0
  486. package/dist/utils/space-filter.d.ts +15 -0
  487. package/dist/utils/space-filter.d.ts.map +1 -0
  488. package/dist/utils/space-filter.js +18 -0
  489. package/dist/utils/space-filter.js.map +1 -0
  490. package/dist/utils/structured-logger.d.ts +41 -0
  491. package/dist/utils/structured-logger.d.ts.map +1 -0
  492. package/dist/utils/structured-logger.js +133 -0
  493. package/dist/utils/structured-logger.js.map +1 -0
  494. package/dist/utils/tenant-context.d.ts +67 -0
  495. package/dist/utils/tenant-context.d.ts.map +1 -0
  496. package/dist/utils/tenant-context.js +154 -0
  497. package/dist/utils/tenant-context.js.map +1 -0
  498. package/dist/utils/uri-builder.d.ts +37 -0
  499. package/dist/utils/uri-builder.d.ts.map +1 -0
  500. package/dist/utils/uri-builder.js +60 -0
  501. package/dist/utils/uri-builder.js.map +1 -0
  502. package/package.json +121 -0
@@ -0,0 +1,117 @@
1
+ import { embeddingService } from '../services/embedding/service.js';
2
+ import { keyValueStore } from '../services/key-value-store-factory.js';
3
+ import { getBuildVersion } from '../utils/build-version.js';
4
+ import { AUTH_ENABLED, USE_REDIS } from '../config.js';
5
+ /**
6
+ * Set up health check and basic info routes
7
+ * @param app Express application instance
8
+ * @param memoryStore Memory store instance for health checks
9
+ */
10
+ export function setupHealthRoutes(app, memoryStore) {
11
+ // Health check endpoint (non-MCP)
12
+ app.get('/health', async (req, res) => {
13
+ // Qdrant is the critical dependency for store functionality tests.
14
+ const qdrantHealthy = await memoryStore.checkHealth().catch(() => false);
15
+ // Redis and embedding providers are non-critical for allowing tests to proceed,
16
+ // but reported for diagnostics.
17
+ const redisHealthy = keyValueStore.isConnected();
18
+ let teiHealth = { healthy: false, message: 'Embedding provider not configured' };
19
+ // Run embedding health check but bound it with a short timeout so /health is responsive
20
+ try {
21
+ const teiCheck = (async () => {
22
+ if (typeof embeddingService.teiHealthCheck === 'function') {
23
+ return await embeddingService.teiHealthCheck().catch(() => ({ healthy: false, message: 'TEI check failed' }));
24
+ }
25
+ else {
26
+ return await embeddingService.healthCheck().catch(() => ({ healthy: false, message: 'Embedding health check failed' }));
27
+ }
28
+ })();
29
+ // Timeout after 2000ms to avoid blocking during test setup
30
+ let timeoutId;
31
+ const timeout = new Promise(resolve => {
32
+ timeoutId = setTimeout(() => resolve({ healthy: false, message: 'Embedding health check timed out' }), 2000);
33
+ });
34
+ teiHealth = (await Promise.race([teiCheck, timeout]));
35
+ if (timeoutId) {
36
+ clearTimeout(timeoutId);
37
+ }
38
+ }
39
+ catch {
40
+ teiHealth = { healthy: false, message: 'Embedding health check failed' };
41
+ }
42
+ const teiHealthy = !!teiHealth.healthy;
43
+ const embeddingCfg = embeddingService.getConfig ? embeddingService.getConfig() : { provider: 'unknown' };
44
+ // Only treat Qdrant as a blocking failure so tests that exercise store functionality can proceed.
45
+ const criticalHealthy = qdrantHealthy;
46
+ const nonCriticalAllHealthy = redisHealthy && teiHealthy;
47
+ const healthStatus = criticalHealthy ? (nonCriticalAllHealthy ? 'healthy' : 'degraded') : 'unhealthy';
48
+ const statusCode = criticalHealthy ? 200 : 503;
49
+ const buildVersion = getBuildVersion();
50
+ const uptime = Math.floor(process.uptime());
51
+ const dependencies = {
52
+ qdrant: qdrantHealthy ? 'healthy' : 'unhealthy',
53
+ embedding: teiHealthy ? 'healthy' : 'unhealthy'
54
+ };
55
+ if (USE_REDIS) {
56
+ dependencies['redis'] = redisHealthy ? 'healthy' : 'unhealthy';
57
+ }
58
+ else {
59
+ dependencies['cache'] = 'healthy (memory)';
60
+ }
61
+ res.status(statusCode).json({
62
+ status: healthStatus,
63
+ service: 'KAIROS',
64
+ version: buildVersion,
65
+ transport: 'http',
66
+ uptime: uptime,
67
+ dependencies,
68
+ details: {
69
+ embedding: teiHealth.message,
70
+ provider: embeddingCfg.provider || 'auto',
71
+ providerPref: embeddingCfg.providerPref || 'auto',
72
+ cacheBackend: USE_REDIS ? 'redis' : 'memory'
73
+ }
74
+ });
75
+ });
76
+ // Basic info endpoint (non-MCP)
77
+ app.get('/', (req, res) => {
78
+ const body = {
79
+ service: 'KAIROS MCP Server',
80
+ version: getBuildVersion(),
81
+ transports: ['http'],
82
+ endpoints: {
83
+ health: '/health',
84
+ mcp: '/mcp',
85
+ api: '/api'
86
+ },
87
+ note: 'Use POST /mcp for MCP protocol communication'
88
+ };
89
+ if (AUTH_ENABLED) {
90
+ body['api_note'] = 'GET /api and POST /api/* require authentication (session or Bearer). Use login_url from 401 or /auth/callback flow.';
91
+ }
92
+ res.json(body);
93
+ });
94
+ // API root (when AUTH_ENABLED, only reached when authenticated)
95
+ app.get('/api', (req, res) => {
96
+ const body = {
97
+ service: 'KAIROS API',
98
+ version: getBuildVersion(),
99
+ endpoints: {
100
+ kairos_search: 'POST /api/kairos_search',
101
+ kairos_begin: 'POST /api/kairos_begin',
102
+ kairos_next: 'POST /api/kairos_next',
103
+ kairos_attest: 'POST /api/kairos_attest',
104
+ kairos_mint: 'POST /api/kairos_mint/raw',
105
+ kairos_update: 'POST /api/kairos_update',
106
+ kairos_delete: 'POST /api/kairos_delete',
107
+ kairos_dump: 'POST /api/kairos_dump'
108
+ }
109
+ };
110
+ if (AUTH_ENABLED) {
111
+ body['auth_required'] = true;
112
+ body['note'] = 'These endpoints require a valid session or Bearer token. Unauthenticated requests receive 401 with login_url.';
113
+ }
114
+ res.json(body);
115
+ });
116
+ }
117
+ //# sourceMappingURL=http-health-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-health-routes.js","sourceRoot":"","sources":["../../src/http/http-health-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import express from 'express';
2
+ /**
3
+ * Set up MCP endpoint handling
4
+ * @param app Express application instance
5
+ * @param server MCP server instance
6
+ */
7
+ export declare function setupMcpRoutes(app: express.Express, server: any): void;
8
+ //# sourceMappingURL=http-mcp-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-mcp-handler.d.ts","sourceRoot":"","sources":["../../src/http/http-mcp-handler.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAW9B;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,QA8I/D"}
@@ -0,0 +1,136 @@
1
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
2
+ import { structuredLogger } from '../utils/structured-logger.js';
3
+ import { LOG_LEVEL, AUTH_ENABLED } from '../config.js';
4
+ import { setWwwAuthenticate } from './http-auth-middleware.js';
5
+ /**
6
+ * Track request start times by ID for accurate cancellation timing
7
+ */
8
+ const requestTimestamps = new Map();
9
+ /**
10
+ * Set up MCP endpoint handling
11
+ * @param app Express application instance
12
+ * @param server MCP server instance
13
+ */
14
+ export function setupMcpRoutes(app, server) {
15
+ // MCP endpoint using StreamableHTTPServerTransport
16
+ app.post('/mcp', async (req, res) => {
17
+ const requestStart = Date.now();
18
+ const requestId = req.body?.id || 'unknown';
19
+ const method = req.body?.method || 'unknown';
20
+ const toolName = req.body?.params?.name || 'unknown';
21
+ // Store timestamp for non-notification requests
22
+ if (method !== 'notifications/cancelled' && requestId !== 'unknown') {
23
+ requestTimestamps.set(requestId, requestStart);
24
+ }
25
+ // Log incoming request with level control
26
+ const logLevel = LOG_LEVEL;
27
+ if (logLevel === 'debug' || method !== 'notifications/cancelled') {
28
+ structuredLogger.info(`→ MCP ${method}${toolName !== 'unknown' ? ` (${toolName})` : ''} [id: ${requestId}]`);
29
+ }
30
+ // listOfferingsForUI (MCP Apps / UI discovery): not implemented by SDK. Handle here so the client
31
+ // gets a proper auth-related response when auth is required, instead of -32601 Method not found.
32
+ if (method === 'listOfferingsForUI') {
33
+ const id = req.body?.id ?? null;
34
+ if (AUTH_ENABLED && !req.auth) {
35
+ setWwwAuthenticate(res, {
36
+ error: 'invalid_token',
37
+ error_description: 'Authentication required for UI offerings'
38
+ });
39
+ res.status(401).json({
40
+ jsonrpc: '2.0',
41
+ error: {
42
+ code: -32001,
43
+ message: 'Authentication required for UI offerings'
44
+ },
45
+ id
46
+ });
47
+ return;
48
+ }
49
+ res.status(200).json({
50
+ jsonrpc: '2.0',
51
+ result: { tools: [], prompts: [], resources: [] },
52
+ id
53
+ });
54
+ return;
55
+ }
56
+ try {
57
+ // Create new transport for each request to prevent request ID collisions
58
+ const transport = new StreamableHTTPServerTransport({
59
+ enableJsonResponse: true
60
+ });
61
+ // Track request timeout - log at 25s (before typical 30s client timeout)
62
+ let requestCompleted = false;
63
+ const timeoutHandler = setTimeout(() => {
64
+ if (!requestCompleted) {
65
+ const duration = Date.now() - requestStart;
66
+ structuredLogger.requestTimeout(`${method} ${toolName ? `(${toolName})` : ''} [id: ${requestId}]`, duration);
67
+ }
68
+ }, 25000); // Log at 25s (before typical 30s client timeout)
69
+ res.on('close', () => {
70
+ requestCompleted = true;
71
+ clearTimeout(timeoutHandler);
72
+ const duration = Date.now() - requestStart;
73
+ if (method === 'notifications/cancelled') {
74
+ // For cancellation notifications, find the original request's start time
75
+ const originalStart = requestTimestamps.get(requestId);
76
+ const actualDuration = originalStart ? Date.now() - originalStart : duration;
77
+ structuredLogger.warn(`⚡ Client cancelled request after ${actualDuration}ms [id: ${requestId}] - operation may continue in background`);
78
+ // Clean up timestamp
79
+ if (requestId !== 'unknown') {
80
+ requestTimestamps.delete(requestId);
81
+ }
82
+ }
83
+ else if (duration > 20000) {
84
+ structuredLogger.warn(`← Request closed after ${duration}ms: ${method}${toolName !== 'unknown' ? ` (${toolName})` : ''} [id: ${requestId}]`);
85
+ // Clean up timestamp
86
+ if (requestId !== 'unknown') {
87
+ requestTimestamps.delete(requestId);
88
+ }
89
+ }
90
+ else if (logLevel === 'debug') {
91
+ structuredLogger.info(`← Request closed ${duration}ms [id: ${requestId}]`);
92
+ }
93
+ transport.close();
94
+ });
95
+ res.on('finish', () => {
96
+ requestCompleted = true;
97
+ clearTimeout(timeoutHandler);
98
+ const duration = Date.now() - requestStart;
99
+ if (duration > 10000 && method !== 'notifications/cancelled') {
100
+ structuredLogger.info(`✓ Request completed in ${duration}ms: ${method}${toolName !== 'unknown' ? ` (${toolName})` : ''} [id: ${requestId}]`);
101
+ }
102
+ else if (logLevel === 'debug') {
103
+ structuredLogger.info(`✓ Completed ${duration}ms [id: ${requestId}]`);
104
+ }
105
+ });
106
+ // Connect server with request context for tool handlers
107
+ await server.connect(transport);
108
+ // Set up request context for model identity detection
109
+ transport._requestContext = req;
110
+ // Set up global context for tools to access
111
+ globalThis._mcpRequestContext = req;
112
+ globalThis._mcpTransport = transport;
113
+ await transport.handleRequest(req, res, req.body);
114
+ // Clean up context after request
115
+ delete globalThis._mcpRequestContext;
116
+ delete globalThis._mcpTransport;
117
+ requestCompleted = true;
118
+ clearTimeout(timeoutHandler);
119
+ }
120
+ catch (error) {
121
+ const duration = Date.now() - requestStart;
122
+ structuredLogger.error(`✗ MCP error: ${method}${toolName !== 'unknown' ? ` (${toolName})` : ''} after ${duration}ms`, error, { request_id: requestId });
123
+ if (!res.headersSent) {
124
+ res.status(500).json({
125
+ jsonrpc: '2.0',
126
+ error: {
127
+ code: -32603,
128
+ message: 'Internal server error'
129
+ },
130
+ id: requestId === 'unknown' ? null : requestId
131
+ });
132
+ }
133
+ }
134
+ });
135
+ }
136
+ //# sourceMappingURL=http-mcp-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-mcp-handler.js","sourceRoot":"","sources":["../../src/http/http-mcp-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import express from 'express';
2
+ /**
3
+ * HTTP metrics middleware for Prometheus
4
+ * Tracks requests, response times, payload sizes, and active connections
5
+ */
6
+ export declare function httpMetricsMiddleware(req: express.Request, res: express.Response, next: express.NextFunction): void;
7
+ //# sourceMappingURL=http-metrics-middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-metrics-middleware.d.ts","sourceRoot":"","sources":["../../src/http/http-metrics-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAU9B;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,QAwD5G"}
@@ -0,0 +1,56 @@
1
+ import { httpRequests, httpRequestDuration, httpRequestSize, httpResponseSize, httpActiveConnections } from '../services/metrics/http-metrics.js';
2
+ import { getTenantId } from '../utils/tenant-context.js';
3
+ /**
4
+ * HTTP metrics middleware for Prometheus
5
+ * Tracks requests, response times, payload sizes, and active connections
6
+ */
7
+ export function httpMetricsMiddleware(req, res, next) {
8
+ const tenantId = getTenantId(req);
9
+ const method = req.method;
10
+ const route = req.route?.path || req.path;
11
+ // Track request size
12
+ const requestSize = req.headers['content-length'] ? parseInt(req.headers['content-length'], 10) : 0;
13
+ if (requestSize > 0) {
14
+ httpRequestSize.observe({ method, route, tenant_id: tenantId }, requestSize);
15
+ }
16
+ // Increment active connections
17
+ httpActiveConnections.inc({ tenant_id: tenantId });
18
+ // Start duration timer
19
+ const timer = httpRequestDuration.startTimer({
20
+ method,
21
+ route,
22
+ tenant_id: tenantId
23
+ });
24
+ // Track response size
25
+ const originalSend = res.send;
26
+ res.send = function (body) {
27
+ const responseSize = typeof body === 'string' ? Buffer.byteLength(body) : JSON.stringify(body).length;
28
+ httpResponseSize.observe({
29
+ method,
30
+ route,
31
+ status: res.statusCode.toString(),
32
+ tenant_id: tenantId
33
+ }, responseSize);
34
+ return originalSend.call(this, body);
35
+ };
36
+ res.on('finish', () => {
37
+ // Track request
38
+ httpRequests.inc({
39
+ method,
40
+ route,
41
+ status: res.statusCode.toString(),
42
+ tenant_id: tenantId
43
+ });
44
+ // End duration timer
45
+ timer({
46
+ method,
47
+ route,
48
+ status: res.statusCode.toString(),
49
+ tenant_id: tenantId
50
+ });
51
+ // Decrement active connections
52
+ httpActiveConnections.dec({ tenant_id: tenantId });
53
+ });
54
+ next();
55
+ }
56
+ //# sourceMappingURL=http-metrics-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-metrics-middleware.js","sourceRoot":"","sources":["../../src/http/http-metrics-middleware.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAoB,EAAE,GAAqB,EAAE,IAA0B;IAC3G,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;IAE1C,qBAAqB;IACrB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/E,CAAC;IAED,+BAA+B;IAC/B,qBAAqB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEnD,uBAAuB;IACvB,MAAM,KAAK,GAAG,mBAAmB,CAAC,UAAU,CAAC;QAC3C,MAAM;QACN,KAAK;QACL,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;IAC9B,GAAG,CAAC,IAAI,GAAG,UAAS,IAAS;QAC3B,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACtG,gBAAgB,CAAC,OAAO,CAAC;YACvB,MAAM;YACN,KAAK;YACL,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE;YACjC,SAAS,EAAE,QAAQ;SACpB,EAAE,YAAY,CAAC,CAAC;QACjB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,gBAAgB;QAChB,YAAY,CAAC,GAAG,CAAC;YACf,MAAM;YACN,KAAK;YACL,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE;YACjC,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QAEH,qBAAqB;QACrB,KAAK,CAAC;YACJ,MAAM;YACN,KAAK;YACL,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE;YACjC,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,qBAAqB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -0,0 +1,11 @@
1
+ import express from 'express';
2
+ declare global {
3
+ var _mcpRequestContext: any;
4
+ var _mcpTransport: any;
5
+ }
6
+ /**
7
+ * Configure Express application with middleware
8
+ * @param app Express application instance
9
+ */
10
+ export declare function configureMiddleware(app: express.Express): void;
11
+ //# sourceMappingURL=http-server-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-config.d.ts","sourceRoot":"","sources":["../../src/http/http-server-config.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAK9B,OAAO,CAAC,MAAM,CAAC;IACX,IAAI,kBAAkB,EAAE,GAAG,CAAC;IAC5B,IAAI,aAAa,EAAE,GAAG,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,QAMvD"}
@@ -0,0 +1,15 @@
1
+ import express from 'express';
2
+ import { httpLogger } from '../utils/structured-logger.js';
3
+ import { httpMetricsMiddleware } from './http-metrics-middleware.js';
4
+ /**
5
+ * Configure Express application with middleware
6
+ * @param app Express application instance
7
+ */
8
+ export function configureMiddleware(app) {
9
+ // Structured HTTP access logging middleware
10
+ app.use(httpLogger);
11
+ // HTTP metrics middleware for Prometheus
12
+ app.use(httpMetricsMiddleware);
13
+ app.use(express.json());
14
+ }
15
+ //# sourceMappingURL=http-server-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-config.js","sourceRoot":"","sources":["../../src/http/http-server-config.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQrE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACpD,4CAA4C;IAC5C,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpB,yCAAyC;IACzC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC/B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import express from 'express';
2
+ /**
3
+ * Start HTTP server with error handling
4
+ * @param app Express application instance
5
+ * @param port Port to listen on
6
+ * @returns HTTP server instance
7
+ */
8
+ export declare function startHttpServerWithErrorHandling(app: express.Express, port: number): import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>;
9
+ //# sourceMappingURL=http-server-startup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-startup.d.ts","sourceRoot":"","sources":["../../src/http/http-server-startup.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,qHAkBlF"}
@@ -0,0 +1,26 @@
1
+ import { structuredLogger } from '../utils/structured-logger.js';
2
+ /**
3
+ * Start HTTP server with error handling
4
+ * @param app Express application instance
5
+ * @param port Port to listen on
6
+ * @returns HTTP server instance
7
+ */
8
+ export function startHttpServerWithErrorHandling(app, port) {
9
+ const httpServer = app.listen(port, '0.0.0.0', () => {
10
+ structuredLogger.success('HTTP server', 'listening on port ' + port);
11
+ structuredLogger.info('Health check: http://localhost:' + port + '/health');
12
+ structuredLogger.info('MCP endpoint: http://localhost:' + port + '/mcp');
13
+ });
14
+ httpServer.on('error', (error) => {
15
+ if (error.code === 'EADDRINUSE') {
16
+ structuredLogger.error(`Port ${port} is already in use. Please choose a different port.`);
17
+ process.exit(1);
18
+ }
19
+ else {
20
+ structuredLogger.error('HTTP server error:', error.message);
21
+ process.exit(1);
22
+ }
23
+ });
24
+ return httpServer;
25
+ }
26
+ //# sourceMappingURL=http-server-startup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-startup.js","sourceRoot":"","sources":["../../src/http/http-server-startup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,GAAoB,EAAE,IAAY;IAC/E,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;QAChD,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,oBAAoB,GAAG,IAAI,CAAC,CAAC;QACrE,gBAAgB,CAAC,IAAI,CAAC,iCAAiC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;QAC5E,gBAAgB,CAAC,IAAI,CAAC,iCAAiC,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;QACpD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,gBAAgB,CAAC,KAAK,CAAC,QAAQ,IAAI,qDAAqD,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,gBAAgB,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACtB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { MemoryQdrantStore } from '../services/memory/store.js';
2
+ export declare function startHttpServer(port: number, server: any, memoryStore: MemoryQdrantStore): import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>;
3
+ export declare function startServer(server: any, memoryStore: MemoryQdrantStore): Promise<void>;
4
+ //# sourceMappingURL=http-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/http/http-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAgBhE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,qHAqBxF;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,iBAQ5E"}
@@ -0,0 +1,39 @@
1
+ import express from 'express';
2
+ import { structuredLogger } from '../utils/structured-logger.js';
3
+ import { PORT } from '../config.js';
4
+ // Import modular components
5
+ import { configureMiddleware } from './http-server-config.js';
6
+ import { authMiddleware } from './http-auth-middleware.js';
7
+ import { setupAuthCallback } from './http-auth-callback.js';
8
+ import { setupHealthRoutes } from './http-health-routes.js';
9
+ import { setupWellKnown } from './http-well-known.js';
10
+ import { setupApiRoutes } from './http-api-routes.js';
11
+ import { setupMcpRoutes } from './http-mcp-handler.js';
12
+ import { setupErrorHandlers } from './http-error-handlers.js';
13
+ import { startHttpServerWithErrorHandling } from './http-server-startup.js';
14
+ import { qdrantService } from '../services/qdrant/index.js';
15
+ export function startHttpServer(port, server, memoryStore) {
16
+ const app = express();
17
+ // Configure middleware
18
+ configureMiddleware(app);
19
+ setupAuthCallback(app);
20
+ // Well-known must be registered before auth middleware so RFC 9728 discovery
21
+ // is reachable without credentials (MCP clients call it before authenticating).
22
+ setupWellKnown(app);
23
+ app.use(authMiddleware);
24
+ // Protected route handlers (require auth when AUTH_ENABLED)
25
+ setupHealthRoutes(app, memoryStore);
26
+ setupApiRoutes(app, memoryStore, { qdrantService });
27
+ setupMcpRoutes(app, server);
28
+ setupErrorHandlers(app);
29
+ // Start server with error handling
30
+ return startHttpServerWithErrorHandling(app, port);
31
+ }
32
+ export async function startServer(server, memoryStore) {
33
+ const httpPort = PORT;
34
+ structuredLogger.success('🚀 KAIROS MCP Server starting', 'HTTP transport only');
35
+ structuredLogger.info('HTTP transport: enabled');
36
+ structuredLogger.info('Port: ' + httpPort);
37
+ startHttpServer(httpPort, server, memoryStore);
38
+ }
39
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/http/http-server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,4BAA4B;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAW,EAAE,WAA8B;IACrF,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,uBAAuB;IACvB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAEvB,6EAA6E;IAC7E,gFAAgF;IAChF,cAAc,CAAC,GAAG,CAAC,CAAC;IAEpB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAExB,4DAA4D;IAC5D,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACpC,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IACpD,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5B,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAExB,mCAAmC;IACnC,OAAO,gCAAgC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAW,EAAE,WAA8B;IACzE,MAAM,QAAQ,GAAG,IAAI,CAAC;IAEtB,gBAAgB,CAAC,OAAO,CAAC,+BAA+B,EAAE,qBAAqB,CAAC,CAAC;IACjF,gBAAgB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACjD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAE3C,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * OAuth 2.0 Protected Resource Metadata (RFC 9728) for MCP authorization discovery.
3
+ *
4
+ * Serves metadata at:
5
+ * GET /.well-known/oauth-protected-resource (root — fallback)
6
+ * GET /.well-known/oauth-protected-resource/mcp (path-specific — tried first by spec-compliant clients)
7
+ *
8
+ * MCP clients use this to discover the authorization server and initiate OAuth 2.1 flows.
9
+ * See: https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization
10
+ */
11
+ import type { Express } from 'express';
12
+ export declare function setupWellKnown(app: Express): void;
13
+ //# sourceMappingURL=http-well-known.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-well-known.d.ts","sourceRoot":"","sources":["../../src/http/http-well-known.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAyB1D,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAajD"}
@@ -0,0 +1,32 @@
1
+ import { AUTH_CALLBACK_BASE_URL, KEYCLOAK_URL, KEYCLOAK_REALM } from '../config.js';
2
+ import { structuredLogger } from '../utils/structured-logger.js';
3
+ function buildProtectedResourceMetadata() {
4
+ const base = AUTH_CALLBACK_BASE_URL.replace(/\/$/, '');
5
+ const resource = `${base}/mcp`;
6
+ const issuer = KEYCLOAK_URL
7
+ ? `${KEYCLOAK_URL.replace(/\/$/, '')}/realms/${KEYCLOAK_REALM}`
8
+ : '';
9
+ const metadata = {
10
+ resource,
11
+ authorization_servers: issuer ? [issuer] : [],
12
+ scopes_supported: ['openid'],
13
+ bearer_methods_supported: ['header'],
14
+ resource_name: 'KAIROS MCP'
15
+ };
16
+ // RFC 9728 allows additional parameters. MCP clients that support it should add these
17
+ // to the authorization request (e.g. prompt=login) to avoid already_logged_in when
18
+ // the user is logged in elsewhere, without disabling SSO for normal browser use.
19
+ metadata['authorization_request_parameters'] = { prompt: 'login' };
20
+ return metadata;
21
+ }
22
+ export function setupWellKnown(app) {
23
+ if (!AUTH_CALLBACK_BASE_URL) {
24
+ structuredLogger.warn('[well-known] AUTH_CALLBACK_BASE_URL is empty — Protected Resource Metadata will use relative URIs (non-compliant with RFC 9728). Set AUTH_CALLBACK_BASE_URL for production.');
25
+ }
26
+ const handler = (_req, res) => {
27
+ res.json(buildProtectedResourceMetadata());
28
+ };
29
+ app.get('/.well-known/oauth-protected-resource', handler);
30
+ app.get('/.well-known/oauth-protected-resource/mcp', handler);
31
+ }
32
+ //# sourceMappingURL=http-well-known.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-well-known.js","sourceRoot":"","sources":["../../src/http/http-well-known.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,SAAS,8BAA8B;IACrC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,GAAG,IAAI,MAAM,CAAC;IAC/B,MAAM,MAAM,GAAG,YAAY;QACzB,CAAC,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,cAAc,EAAE;QAC/D,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,QAAQ,GAA4B;QACxC,QAAQ;QACR,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7C,gBAAgB,EAAE,CAAC,QAAQ,CAAC;QAC5B,wBAAwB,EAAE,CAAC,QAAQ,CAAC;QACpC,aAAa,EAAE,YAAY;KAC5B,CAAC;IACF,sFAAsF;IACtF,mFAAmF;IACnF,iFAAiF;IACjF,QAAQ,CAAC,kCAAkC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACnE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,gBAAgB,CAAC,IAAI,CACnB,6KAA6K,CAC9K,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QAC/C,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,GAAG,CAAC,GAAG,CAAC,uCAAuC,EAAE,OAAO,CAAC,CAAC;IAC1D,GAAG,CAAC,GAAG,CAAC,2CAA2C,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * KAIROS MCP Server
3
+ *
4
+ * Supporting HTTP transport only (STDIO removed for simplicity)
5
+ */
6
+ import './services/metrics/system-metrics.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,sCAAsC,CAAC"}