synapse-mcp 1.0.0 → 1.0.2

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 (413) hide show
  1. package/README.md +1820 -147
  2. package/dist/constants.d.ts +10 -4
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +18 -8
  5. package/dist/constants.js.map +1 -1
  6. package/dist/events/emitter.d.ts +63 -0
  7. package/dist/events/emitter.d.ts.map +1 -0
  8. package/dist/events/emitter.js +112 -0
  9. package/dist/events/emitter.js.map +1 -0
  10. package/dist/events/index.d.ts +3 -0
  11. package/dist/events/index.d.ts.map +1 -0
  12. package/dist/events/index.js +3 -0
  13. package/dist/events/index.js.map +1 -0
  14. package/dist/events/types.d.ts +51 -0
  15. package/dist/events/types.d.ts.map +1 -0
  16. package/dist/events/types.js +3 -0
  17. package/dist/events/types.js.map +1 -0
  18. package/dist/formatters/compose.d.ts +185 -0
  19. package/dist/formatters/compose.d.ts.map +1 -0
  20. package/dist/formatters/compose.js +397 -0
  21. package/dist/formatters/compose.js.map +1 -0
  22. package/dist/formatters/container.d.ts +84 -0
  23. package/dist/formatters/container.d.ts.map +1 -0
  24. package/dist/formatters/container.js +323 -0
  25. package/dist/formatters/container.js.map +1 -0
  26. package/dist/formatters/diagnostics.d.ts +20 -0
  27. package/dist/formatters/diagnostics.d.ts.map +1 -0
  28. package/dist/formatters/diagnostics.js +73 -0
  29. package/dist/formatters/diagnostics.js.map +1 -0
  30. package/dist/formatters/docker.d.ts +139 -0
  31. package/dist/formatters/docker.d.ts.map +1 -0
  32. package/dist/formatters/docker.js +216 -0
  33. package/dist/formatters/docker.js.map +1 -0
  34. package/dist/formatters/host.d.ts +137 -0
  35. package/dist/formatters/host.d.ts.map +1 -0
  36. package/dist/formatters/host.js +198 -0
  37. package/dist/formatters/host.js.map +1 -0
  38. package/dist/formatters/index.d.ts +17 -270
  39. package/dist/formatters/index.d.ts.map +1 -1
  40. package/dist/formatters/index.js +21 -456
  41. package/dist/formatters/index.js.map +1 -1
  42. package/dist/formatters/scout.d.ts +424 -0
  43. package/dist/formatters/scout.d.ts.map +1 -0
  44. package/dist/formatters/scout.js +687 -0
  45. package/dist/formatters/scout.js.map +1 -0
  46. package/dist/formatters/strategy.d.ts +105 -0
  47. package/dist/formatters/strategy.d.ts.map +1 -0
  48. package/dist/formatters/strategy.js +120 -0
  49. package/dist/formatters/strategy.js.map +1 -0
  50. package/dist/formatters/utils.d.ts +84 -0
  51. package/dist/formatters/utils.d.ts.map +1 -0
  52. package/dist/formatters/utils.js +129 -0
  53. package/dist/formatters/utils.js.map +1 -0
  54. package/dist/health-rate-limiter.d.ts +59 -0
  55. package/dist/health-rate-limiter.d.ts.map +1 -0
  56. package/dist/health-rate-limiter.js +159 -0
  57. package/dist/health-rate-limiter.js.map +1 -0
  58. package/dist/index.js +61 -100
  59. package/dist/index.js.map +1 -1
  60. package/dist/middleware/async-handler.d.ts +62 -0
  61. package/dist/middleware/async-handler.d.ts.map +1 -0
  62. package/dist/middleware/async-handler.js +58 -0
  63. package/dist/middleware/async-handler.js.map +1 -0
  64. package/dist/middleware/auth.d.ts +32 -0
  65. package/dist/middleware/auth.d.ts.map +1 -0
  66. package/dist/middleware/auth.js +63 -0
  67. package/dist/middleware/auth.js.map +1 -0
  68. package/dist/middleware/csrf-protection.d.ts +58 -0
  69. package/dist/middleware/csrf-protection.d.ts.map +1 -0
  70. package/dist/middleware/csrf-protection.js +123 -0
  71. package/dist/middleware/csrf-protection.js.map +1 -0
  72. package/dist/middleware/error-handler.d.ts +49 -0
  73. package/dist/middleware/error-handler.d.ts.map +1 -0
  74. package/dist/middleware/error-handler.js +90 -0
  75. package/dist/middleware/error-handler.js.map +1 -0
  76. package/dist/middleware/error-mapper.d.ts +44 -0
  77. package/dist/middleware/error-mapper.d.ts.map +1 -0
  78. package/dist/middleware/error-mapper.js +127 -0
  79. package/dist/middleware/error-mapper.js.map +1 -0
  80. package/dist/middleware/index.d.ts +13 -0
  81. package/dist/middleware/index.d.ts.map +1 -0
  82. package/dist/middleware/index.js +13 -0
  83. package/dist/middleware/index.js.map +1 -0
  84. package/dist/middleware/request-id.d.ts +22 -0
  85. package/dist/middleware/request-id.d.ts.map +1 -0
  86. package/dist/middleware/request-id.js +31 -0
  87. package/dist/middleware/request-id.js.map +1 -0
  88. package/dist/middleware/types.d.ts +33 -0
  89. package/dist/middleware/types.d.ts.map +1 -0
  90. package/dist/middleware/types.js +2 -0
  91. package/dist/middleware/types.js.map +1 -0
  92. package/dist/schemas/common.d.ts +205 -8
  93. package/dist/schemas/common.d.ts.map +1 -1
  94. package/dist/schemas/common.js +290 -17
  95. package/dist/schemas/common.js.map +1 -1
  96. package/dist/schemas/flux/compose.d.ts +307 -44
  97. package/dist/schemas/flux/compose.d.ts.map +1 -1
  98. package/dist/schemas/flux/compose.js +74 -48
  99. package/dist/schemas/flux/compose.js.map +1 -1
  100. package/dist/schemas/flux/container.d.ts +423 -56
  101. package/dist/schemas/flux/container.d.ts.map +1 -1
  102. package/dist/schemas/flux/container.js +83 -61
  103. package/dist/schemas/flux/container.js.map +1 -1
  104. package/dist/schemas/flux/docker.d.ts +254 -37
  105. package/dist/schemas/flux/docker.d.ts.map +1 -1
  106. package/dist/schemas/flux/docker.js +69 -39
  107. package/dist/schemas/flux/docker.js.map +1 -1
  108. package/dist/schemas/flux/host.d.ts +312 -29
  109. package/dist/schemas/flux/host.d.ts.map +1 -1
  110. package/dist/schemas/flux/host.js +74 -31
  111. package/dist/schemas/flux/host.js.map +1 -1
  112. package/dist/schemas/flux/index.d.ts +503 -11
  113. package/dist/schemas/flux/index.d.ts.map +1 -1
  114. package/dist/schemas/flux/index.js +34 -70
  115. package/dist/schemas/flux/index.js.map +1 -1
  116. package/dist/schemas/host-config.d.ts +76 -0
  117. package/dist/schemas/host-config.d.ts.map +1 -0
  118. package/dist/schemas/host-config.js +105 -0
  119. package/dist/schemas/host-config.js.map +1 -0
  120. package/dist/schemas/scout/index.d.ts +80 -23
  121. package/dist/schemas/scout/index.d.ts.map +1 -1
  122. package/dist/schemas/scout/index.js +26 -11
  123. package/dist/schemas/scout/index.js.map +1 -1
  124. package/dist/schemas/scout/logs.d.ts +17 -5
  125. package/dist/schemas/scout/logs.d.ts.map +1 -1
  126. package/dist/schemas/scout/logs.js +41 -31
  127. package/dist/schemas/scout/logs.js.map +1 -1
  128. package/dist/schemas/scout/simple.d.ts +126 -11
  129. package/dist/schemas/scout/simple.d.ts.map +1 -1
  130. package/dist/schemas/scout/simple.js +112 -57
  131. package/dist/schemas/scout/simple.js.map +1 -1
  132. package/dist/schemas/scout/zfs.d.ts +17 -5
  133. package/dist/schemas/scout/zfs.d.ts.map +1 -1
  134. package/dist/schemas/scout/zfs.js +34 -25
  135. package/dist/schemas/scout/zfs.js.map +1 -1
  136. package/dist/services/cache-layer.d.ts +160 -0
  137. package/dist/services/cache-layer.d.ts.map +1 -0
  138. package/dist/services/cache-layer.js +138 -0
  139. package/dist/services/cache-layer.js.map +1 -0
  140. package/dist/services/compose-cache.d.ts +75 -0
  141. package/dist/services/compose-cache.d.ts.map +1 -0
  142. package/dist/services/compose-cache.js +178 -0
  143. package/dist/services/compose-cache.js.map +1 -0
  144. package/dist/services/compose-discovery.d.ts +46 -0
  145. package/dist/services/compose-discovery.d.ts.map +1 -0
  146. package/dist/services/compose-discovery.js +219 -0
  147. package/dist/services/compose-discovery.js.map +1 -0
  148. package/dist/services/compose-project-lister.d.ts +27 -0
  149. package/dist/services/compose-project-lister.d.ts.map +1 -0
  150. package/dist/services/compose-project-lister.js +71 -0
  151. package/dist/services/compose-project-lister.js.map +1 -0
  152. package/dist/services/compose-scanner.d.ts +63 -0
  153. package/dist/services/compose-scanner.d.ts.map +1 -0
  154. package/dist/services/compose-scanner.js +253 -0
  155. package/dist/services/compose-scanner.js.map +1 -0
  156. package/dist/services/compose.d.ts +64 -28
  157. package/dist/services/compose.d.ts.map +1 -1
  158. package/dist/services/compose.js +220 -98
  159. package/dist/services/compose.js.map +1 -1
  160. package/dist/services/config-loader.d.ts +23 -0
  161. package/dist/services/config-loader.d.ts.map +1 -0
  162. package/dist/services/config-loader.js +124 -0
  163. package/dist/services/config-loader.js.map +1 -0
  164. package/dist/services/config-service.d.ts +38 -0
  165. package/dist/services/config-service.d.ts.map +1 -0
  166. package/dist/services/config-service.js +225 -0
  167. package/dist/services/config-service.js.map +1 -0
  168. package/dist/services/container-host-map-cache.d.ts +121 -0
  169. package/dist/services/container-host-map-cache.d.ts.map +1 -0
  170. package/dist/services/container-host-map-cache.js +188 -0
  171. package/dist/services/container-host-map-cache.js.map +1 -0
  172. package/dist/services/container.d.ts +194 -6
  173. package/dist/services/container.d.ts.map +1 -1
  174. package/dist/services/container.js +386 -11
  175. package/dist/services/container.js.map +1 -1
  176. package/dist/services/diagnostics.d.ts +57 -0
  177. package/dist/services/diagnostics.d.ts.map +1 -0
  178. package/dist/services/diagnostics.js +271 -0
  179. package/dist/services/diagnostics.js.map +1 -0
  180. package/dist/services/docker/container-service.d.ts +123 -0
  181. package/dist/services/docker/container-service.d.ts.map +1 -0
  182. package/dist/services/docker/container-service.js +347 -0
  183. package/dist/services/docker/container-service.js.map +1 -0
  184. package/dist/services/docker/image-service.d.ts +82 -0
  185. package/dist/services/docker/image-service.d.ts.map +1 -0
  186. package/dist/services/docker/image-service.js +193 -0
  187. package/dist/services/docker/image-service.js.map +1 -0
  188. package/dist/services/docker/index.d.ts +80 -0
  189. package/dist/services/docker/index.d.ts.map +1 -0
  190. package/dist/services/docker/index.js +103 -0
  191. package/dist/services/docker/index.js.map +1 -0
  192. package/dist/services/docker/network-service.d.ts +22 -0
  193. package/dist/services/docker/network-service.d.ts.map +1 -0
  194. package/dist/services/docker/network-service.js +43 -0
  195. package/dist/services/docker/network-service.js.map +1 -0
  196. package/dist/services/docker/system-service.d.ts +49 -0
  197. package/dist/services/docker/system-service.d.ts.map +1 -0
  198. package/dist/services/docker/system-service.js +215 -0
  199. package/dist/services/docker/system-service.js.map +1 -0
  200. package/dist/services/docker/utils/client-factory.d.ts +56 -0
  201. package/dist/services/docker/utils/client-factory.d.ts.map +1 -0
  202. package/dist/services/docker/utils/client-factory.js +139 -0
  203. package/dist/services/docker/utils/client-factory.js.map +1 -0
  204. package/dist/services/docker/utils/client-manager.d.ts +88 -0
  205. package/dist/services/docker/utils/client-manager.d.ts.map +1 -0
  206. package/dist/services/docker/utils/client-manager.js +124 -0
  207. package/dist/services/docker/utils/client-manager.js.map +1 -0
  208. package/dist/services/docker/utils/exec-handler.d.ts +94 -0
  209. package/dist/services/docker/utils/exec-handler.d.ts.map +1 -0
  210. package/dist/services/docker/utils/exec-handler.js +197 -0
  211. package/dist/services/docker/utils/exec-handler.js.map +1 -0
  212. package/dist/services/docker/utils/formatters.d.ts +13 -0
  213. package/dist/services/docker/utils/formatters.d.ts.map +1 -0
  214. package/dist/services/docker/utils/formatters.js +33 -0
  215. package/dist/services/docker/utils/formatters.js.map +1 -0
  216. package/dist/services/docker/utils/log-parser.d.ts +10 -0
  217. package/dist/services/docker/utils/log-parser.d.ts.map +1 -0
  218. package/dist/services/docker/utils/log-parser.js +48 -0
  219. package/dist/services/docker/utils/log-parser.js.map +1 -0
  220. package/dist/services/docker/utils/stats-calculator.d.ts +68 -0
  221. package/dist/services/docker/utils/stats-calculator.d.ts.map +1 -0
  222. package/dist/services/docker/utils/stats-calculator.js +61 -0
  223. package/dist/services/docker/utils/stats-calculator.js.map +1 -0
  224. package/dist/services/docker/volume-service.d.ts +22 -0
  225. package/dist/services/docker/volume-service.d.ts.map +1 -0
  226. package/dist/services/docker/volume-service.js +48 -0
  227. package/dist/services/docker/volume-service.js.map +1 -0
  228. package/dist/services/docker-interfaces.d.ts +283 -0
  229. package/dist/services/docker-interfaces.d.ts.map +1 -0
  230. package/dist/services/docker-interfaces.js +13 -0
  231. package/dist/services/docker-interfaces.js.map +1 -0
  232. package/dist/services/docker.d.ts +42 -5
  233. package/dist/services/docker.d.ts.map +1 -1
  234. package/dist/services/docker.js +335 -127
  235. package/dist/services/docker.js.map +1 -1
  236. package/dist/services/file-service.d.ts +6 -2
  237. package/dist/services/file-service.d.ts.map +1 -1
  238. package/dist/services/file-service.js +156 -52
  239. package/dist/services/file-service.js.map +1 -1
  240. package/dist/services/host-config-repository.d.ts +133 -0
  241. package/dist/services/host-config-repository.d.ts.map +1 -0
  242. package/dist/services/host-config-repository.js +323 -0
  243. package/dist/services/host-config-repository.js.map +1 -0
  244. package/dist/services/host-resolver.d.ts +49 -0
  245. package/dist/services/host-resolver.d.ts.map +1 -0
  246. package/dist/services/host-resolver.js +176 -0
  247. package/dist/services/host-resolver.js.map +1 -0
  248. package/dist/services/interfaces.d.ts +61 -194
  249. package/dist/services/interfaces.d.ts.map +1 -1
  250. package/dist/services/local-executor.d.ts +31 -0
  251. package/dist/services/local-executor.d.ts.map +1 -0
  252. package/dist/services/local-executor.js +71 -0
  253. package/dist/services/local-executor.js.map +1 -0
  254. package/dist/services/ssh-config-loader.d.ts +35 -0
  255. package/dist/services/ssh-config-loader.d.ts.map +1 -0
  256. package/dist/services/ssh-config-loader.js +218 -0
  257. package/dist/services/ssh-config-loader.js.map +1 -0
  258. package/dist/services/ssh-pool.d.ts +26 -1
  259. package/dist/services/ssh-pool.d.ts.map +1 -1
  260. package/dist/services/ssh-pool.js +166 -25
  261. package/dist/services/ssh-pool.js.map +1 -1
  262. package/dist/services/ssh-service.d.ts +3 -0
  263. package/dist/services/ssh-service.d.ts.map +1 -1
  264. package/dist/services/ssh-service.js +53 -31
  265. package/dist/services/ssh-service.js.map +1 -1
  266. package/dist/services/ssh.d.ts +2 -6
  267. package/dist/services/ssh.d.ts.map +1 -1
  268. package/dist/services/ssh.js +9 -40
  269. package/dist/services/ssh.js.map +1 -1
  270. package/dist/tools/definitions/flux.d.ts +13 -0
  271. package/dist/tools/definitions/flux.d.ts.map +1 -0
  272. package/dist/tools/definitions/flux.js +101 -0
  273. package/dist/tools/definitions/flux.js.map +1 -0
  274. package/dist/tools/definitions/index.d.ts +8 -0
  275. package/dist/tools/definitions/index.d.ts.map +1 -0
  276. package/dist/tools/definitions/index.js +8 -0
  277. package/dist/tools/definitions/index.js.map +1 -0
  278. package/dist/tools/definitions/scout.d.ts +13 -0
  279. package/dist/tools/definitions/scout.d.ts.map +1 -0
  280. package/dist/tools/definitions/scout.js +78 -0
  281. package/dist/tools/definitions/scout.js.map +1 -0
  282. package/dist/tools/flux.d.ts +16 -8
  283. package/dist/tools/flux.d.ts.map +1 -1
  284. package/dist/tools/flux.js +27 -66
  285. package/dist/tools/flux.js.map +1 -1
  286. package/dist/tools/handlers/base-handler.d.ts +172 -0
  287. package/dist/tools/handlers/base-handler.d.ts.map +1 -0
  288. package/dist/tools/handlers/base-handler.js +234 -0
  289. package/dist/tools/handlers/base-handler.js.map +1 -0
  290. package/dist/tools/handlers/compose-handlers.d.ts +108 -0
  291. package/dist/tools/handlers/compose-handlers.d.ts.map +1 -0
  292. package/dist/tools/handlers/compose-handlers.js +293 -0
  293. package/dist/tools/handlers/compose-handlers.js.map +1 -0
  294. package/dist/tools/handlers/compose-utils.d.ts +35 -0
  295. package/dist/tools/handlers/compose-utils.d.ts.map +1 -0
  296. package/dist/tools/handlers/compose-utils.js +76 -0
  297. package/dist/tools/handlers/compose-utils.js.map +1 -0
  298. package/dist/tools/handlers/compose.d.ts +23 -0
  299. package/dist/tools/handlers/compose.d.ts.map +1 -0
  300. package/dist/tools/handlers/compose.js +125 -0
  301. package/dist/tools/handlers/compose.js.map +1 -0
  302. package/dist/tools/handlers/container.d.ts +23 -0
  303. package/dist/tools/handlers/container.d.ts.map +1 -0
  304. package/dist/tools/handlers/container.js +333 -0
  305. package/dist/tools/handlers/container.js.map +1 -0
  306. package/dist/tools/handlers/docker.d.ts +24 -0
  307. package/dist/tools/handlers/docker.d.ts.map +1 -0
  308. package/dist/tools/handlers/docker.js +155 -0
  309. package/dist/tools/handlers/docker.js.map +1 -0
  310. package/dist/tools/handlers/host.d.ts +23 -0
  311. package/dist/tools/handlers/host.d.ts.map +1 -0
  312. package/dist/tools/handlers/host.js +196 -0
  313. package/dist/tools/handlers/host.js.map +1 -0
  314. package/dist/tools/handlers/scout-logs.d.ts +24 -0
  315. package/dist/tools/handlers/scout-logs.d.ts.map +1 -0
  316. package/dist/tools/handlers/scout-logs.js +119 -0
  317. package/dist/tools/handlers/scout-logs.js.map +1 -0
  318. package/dist/tools/handlers/scout-simple.d.ts +23 -0
  319. package/dist/tools/handlers/scout-simple.d.ts.map +1 -0
  320. package/dist/tools/handlers/scout-simple.js +286 -0
  321. package/dist/tools/handlers/scout-simple.js.map +1 -0
  322. package/dist/tools/handlers/scout-zfs.d.ts +23 -0
  323. package/dist/tools/handlers/scout-zfs.d.ts.map +1 -0
  324. package/dist/tools/handlers/scout-zfs.js +82 -0
  325. package/dist/tools/handlers/scout-zfs.js.map +1 -0
  326. package/dist/tools/index.d.ts +32 -2
  327. package/dist/tools/index.d.ts.map +1 -1
  328. package/dist/tools/index.js +41 -35
  329. package/dist/tools/index.js.map +1 -1
  330. package/dist/tools/registry.d.ts +135 -0
  331. package/dist/tools/registry.d.ts.map +1 -0
  332. package/dist/tools/registry.js +151 -0
  333. package/dist/tools/registry.js.map +1 -0
  334. package/dist/tools/scout.d.ts +16 -8
  335. package/dist/tools/scout.d.ts.map +1 -1
  336. package/dist/tools/scout.js +36 -78
  337. package/dist/tools/scout.js.map +1 -1
  338. package/dist/types.d.ts +629 -1
  339. package/dist/types.d.ts.map +1 -1
  340. package/dist/types.js.map +1 -1
  341. package/dist/utils/command-security.d.ts +82 -0
  342. package/dist/utils/command-security.d.ts.map +1 -0
  343. package/dist/utils/command-security.js +122 -0
  344. package/dist/utils/command-security.js.map +1 -0
  345. package/dist/utils/error-sanitization.d.ts +77 -0
  346. package/dist/utils/error-sanitization.d.ts.map +1 -0
  347. package/dist/utils/error-sanitization.js +107 -0
  348. package/dist/utils/error-sanitization.js.map +1 -0
  349. package/dist/utils/errors.d.ts +30 -6
  350. package/dist/utils/errors.d.ts.map +1 -1
  351. package/dist/utils/errors.js +91 -12
  352. package/dist/utils/errors.js.map +1 -1
  353. package/dist/utils/help-handler.d.ts +23 -0
  354. package/dist/utils/help-handler.d.ts.map +1 -0
  355. package/dist/utils/help-handler.js +21 -0
  356. package/dist/utils/help-handler.js.map +1 -0
  357. package/dist/utils/help.d.ts +1 -1
  358. package/dist/utils/help.d.ts.map +1 -1
  359. package/dist/utils/help.js +57 -16
  360. package/dist/utils/help.js.map +1 -1
  361. package/dist/utils/host-utils.d.ts +31 -0
  362. package/dist/utils/host-utils.d.ts.map +1 -0
  363. package/dist/utils/host-utils.js +80 -0
  364. package/dist/utils/host-utils.js.map +1 -0
  365. package/dist/utils/index.d.ts +8 -2
  366. package/dist/utils/index.d.ts.map +1 -1
  367. package/dist/utils/index.js +8 -2
  368. package/dist/utils/index.js.map +1 -1
  369. package/dist/utils/init-detection.d.ts +36 -0
  370. package/dist/utils/init-detection.d.ts.map +1 -0
  371. package/dist/utils/init-detection.js +79 -0
  372. package/dist/utils/init-detection.js.map +1 -0
  373. package/dist/utils/logger.d.ts +11 -0
  374. package/dist/utils/logger.d.ts.map +1 -0
  375. package/dist/utils/logger.js +32 -0
  376. package/dist/utils/logger.js.map +1 -0
  377. package/dist/utils/pagination.d.ts +20 -0
  378. package/dist/utils/pagination.d.ts.map +1 -0
  379. package/dist/utils/pagination.js +29 -0
  380. package/dist/utils/pagination.js.map +1 -0
  381. package/dist/utils/path-security.d.ts +132 -18
  382. package/dist/utils/path-security.d.ts.map +1 -1
  383. package/dist/utils/path-security.js +164 -35
  384. package/dist/utils/path-security.js.map +1 -1
  385. package/dist/utils/sorting.d.ts +33 -0
  386. package/dist/utils/sorting.d.ts.map +1 -0
  387. package/dist/utils/sorting.js +57 -0
  388. package/dist/utils/sorting.js.map +1 -0
  389. package/dist/utils/text-filters.d.ts +13 -0
  390. package/dist/utils/text-filters.d.ts.map +1 -0
  391. package/dist/utils/text-filters.js +18 -0
  392. package/dist/utils/text-filters.js.map +1 -0
  393. package/dist/utils/time.d.ts +11 -0
  394. package/dist/utils/time.d.ts.map +1 -0
  395. package/dist/utils/time.js +13 -0
  396. package/dist/utils/time.js.map +1 -0
  397. package/dist/utils/validation.d.ts +25 -0
  398. package/dist/utils/validation.d.ts.map +1 -0
  399. package/dist/utils/validation.js +56 -0
  400. package/dist/utils/validation.js.map +1 -0
  401. package/package.json +45 -19
  402. package/dist/schemas/discriminator.d.ts +0 -20
  403. package/dist/schemas/discriminator.d.ts.map +0 -1
  404. package/dist/schemas/discriminator.js +0 -25
  405. package/dist/schemas/discriminator.js.map +0 -1
  406. package/dist/schemas/unified.d.ts +0 -674
  407. package/dist/schemas/unified.d.ts.map +0 -1
  408. package/dist/schemas/unified.js +0 -453
  409. package/dist/schemas/unified.js.map +0 -1
  410. package/dist/tools/unified.d.ts +0 -7
  411. package/dist/tools/unified.d.ts.map +0 -1
  412. package/dist/tools/unified.js +0 -827
  413. package/dist/tools/unified.js.map +0 -1
@@ -0,0 +1,188 @@
1
+ import pLimit from "p-limit";
2
+ import { DEFAULT_CONTAINER_MAP_CONCURRENCY } from "../constants.js";
3
+ import { logError } from "../utils/errors.js";
4
+ import { LRUCacheLayer } from "./cache-layer.js";
5
+ /**
6
+ * Cache for container-to-host mappings.
7
+ * Optimizes findContainerHost() by eliminating N+1 queries.
8
+ *
9
+ * Key features:
10
+ * - Parallel host scanning with configurable concurrency
11
+ * - Multiple index keys per container (ID, name, ID prefix)
12
+ * - TTL-based expiration (default: 5 minutes)
13
+ * - Automatic cache rebuild on miss
14
+ * - LRU eviction policy
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const cache = new ContainerHostMapCache();
19
+ * await cache.buildMapping(hosts, dockerService);
20
+ *
21
+ * const result = await cache.findContainerHost("my-container", hosts, dockerService);
22
+ * // Returns { host, container } immediately without scanning all hosts
23
+ * ```
24
+ */
25
+ export class ContainerHostMapCache {
26
+ cache;
27
+ concurrency;
28
+ /**
29
+ * Create a new container-to-host mapping cache.
30
+ *
31
+ * @param ttlMs - Time-to-live for cache entries in milliseconds (default: 5 minutes)
32
+ * @param maxSize - Maximum number of cache entries (default: 500)
33
+ * @param concurrency - Number of parallel host scans (default from constants)
34
+ */
35
+ constructor(ttlMs = 5 * 60 * 1000, maxSize = 500, concurrency = DEFAULT_CONTAINER_MAP_CONCURRENCY) {
36
+ this.cache = new LRUCacheLayer(maxSize, ttlMs);
37
+ this.concurrency = concurrency;
38
+ }
39
+ /**
40
+ * Build container-to-host mapping for all hosts in parallel.
41
+ * Uses concurrency control to avoid overwhelming the network.
42
+ *
43
+ * @param hosts - List of hosts to scan
44
+ * @param dockerService - Docker service to query containers
45
+ * @returns Promise that resolves when mapping is complete
46
+ */
47
+ async buildMapping(hosts, dockerService) {
48
+ const limit = pLimit(this.concurrency);
49
+ // Query each host in parallel with concurrency limit
50
+ const tasks = hosts.map((host) => limit(() => this.scanSingleHost(host, dockerService)));
51
+ await Promise.all(tasks);
52
+ }
53
+ /**
54
+ * Scan a single host and cache its containers.
55
+ * Returns true if the target container was found on this host.
56
+ *
57
+ * @param host - Host to scan
58
+ * @param dockerService - Docker service to query containers
59
+ * @param targetContainerId - Optional container ID/name to search for
60
+ * @returns Whether the target container was found on this host
61
+ */
62
+ async scanSingleHost(host, dockerService, targetContainerId) {
63
+ const timestamp = Date.now();
64
+ try {
65
+ const docker = await dockerService.getDockerClient(host);
66
+ const rawContainers = await docker.listContainers({ all: true });
67
+ let found = false;
68
+ for (const container of rawContainers) {
69
+ const mapping = {
70
+ containerId: container.Id,
71
+ shortId: container.Id.slice(0, 12),
72
+ containerName: container.Names[0]?.replace(/^\//, "") || container.Id.slice(0, 12),
73
+ hostName: host.name,
74
+ host,
75
+ container,
76
+ timestamp,
77
+ };
78
+ this.cache.set(container.Id, mapping);
79
+ this.cache.set(mapping.containerName, mapping);
80
+ this.cache.set(mapping.shortId, mapping);
81
+ if (targetContainerId &&
82
+ (container.Id === targetContainerId ||
83
+ mapping.containerName === targetContainerId ||
84
+ mapping.shortId === targetContainerId)) {
85
+ found = true;
86
+ }
87
+ }
88
+ return found;
89
+ }
90
+ catch (error) {
91
+ logError(error, {
92
+ operation: "ContainerHostMapCache:scanHost",
93
+ metadata: { host: host.name },
94
+ });
95
+ return false;
96
+ }
97
+ }
98
+ /**
99
+ * Find which host a container is on, using cache with fallback.
100
+ * Supports full ID, short ID, or container name lookups.
101
+ *
102
+ * On cache miss, scans hosts incrementally (one at a time) instead of
103
+ * rebuilding the entire mapping. Stops as soon as the container is found,
104
+ * avoiding unnecessary network calls to remaining hosts.
105
+ *
106
+ * @param containerId - Container ID (full/short) or name
107
+ * @param hosts - Array of host configurations to search
108
+ * @param dockerService - Docker service for fallback queries
109
+ * @returns Host config and container info if found, null otherwise
110
+ */
111
+ async findContainerHost(containerId, hosts, dockerService) {
112
+ // Try cache lookup first
113
+ const cached = this.cache.get(containerId);
114
+ if (cached) {
115
+ // Cache hit - log for observability
116
+ console.error(`[ContainerHostMapCache] HIT: ${containerId}`);
117
+ return { host: cached.host, container: cached.container };
118
+ }
119
+ // Cache miss - scan hosts incrementally instead of full rebuild
120
+ console.error(`[ContainerHostMapCache] MISS: ${containerId} - scanning incrementally`);
121
+ for (const host of hosts) {
122
+ const found = await this.scanSingleHost(host, dockerService, containerId);
123
+ if (found) {
124
+ const result = this.cache.get(containerId);
125
+ if (result) {
126
+ console.error(`[ContainerHostMapCache] Found ${containerId} on ${host.name} (scanned incrementally)`);
127
+ return { host: result.host, container: result.container };
128
+ }
129
+ }
130
+ }
131
+ return null;
132
+ }
133
+ /**
134
+ * Invalidate entire cache after container lifecycle changes.
135
+ * Call this after container state changes (start, stop, pause, resume, remove, create).
136
+ *
137
+ * Note: Clears the ENTIRE cache for all hosts. This is simpler than selective
138
+ * per-host invalidation and the cache will rebuild automatically on next query.
139
+ * For production use with many hosts, consider implementing per-host invalidation.
140
+ */
141
+ invalidateCache() {
142
+ const stats = this.cache.getStats();
143
+ console.error(`[ContainerHostMapCache] Invalidating entire cache (current size: ${stats.size})`);
144
+ // Clear entire cache - simpler than selective removal
145
+ // Cache will rebuild on next query
146
+ this.cache.clear();
147
+ }
148
+ /**
149
+ * Warm cache by pre-populating with all containers on startup.
150
+ * Reduces initial query latency.
151
+ *
152
+ * @param hosts - Array of host configurations
153
+ * @param dockerService - Docker service for API calls
154
+ */
155
+ async warmCache(hosts, dockerService) {
156
+ console.error("[ContainerHostMapCache] Warming cache...");
157
+ const start = Date.now();
158
+ await this.buildMapping(hosts, dockerService);
159
+ const stats = this.cache.getStats();
160
+ const elapsed = Date.now() - start;
161
+ console.error(`[ContainerHostMapCache] Cache warmed: ${stats.size} entries in ${elapsed}ms`);
162
+ }
163
+ /**
164
+ * Get cache statistics for monitoring and debugging.
165
+ * Returns metrics on hits, misses, size, and evictions.
166
+ *
167
+ * @returns Cache statistics object
168
+ */
169
+ getStats() {
170
+ return this.cache.getStats();
171
+ }
172
+ /**
173
+ * Log cache statistics to console.error for observability.
174
+ * Outputs formatted stats with hit rate calculation.
175
+ */
176
+ logStats() {
177
+ const stats = this.getStats();
178
+ const total = stats.hits + stats.misses;
179
+ const hitRate = total > 0 ? ((stats.hits / total) * 100).toFixed(2) : "0.00";
180
+ console.error(`[ContainerHostMapCache] Stats:
181
+ - Hits: ${stats.hits}
182
+ - Misses: ${stats.misses}
183
+ - Hit Rate: ${hitRate}%
184
+ - Size: ${stats.size}/${stats.maxSize}
185
+ - Evictions: ${stats.evictions}`);
186
+ }
187
+ }
188
+ //# sourceMappingURL=container-host-map-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-host-map-cache.js","sourceRoot":"","sources":["../../src/services/container-host-map-cache.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,64 @@
1
- import type { IDockerService, ISSHService, IComposeService, ISSHConnectionPool, IFileService } from "./interfaces.js";
1
+ import { EventEmitter } from "../events/index.js";
2
+ import { ComposeProjectCache } from "./compose-cache.js";
3
+ import { ComposeDiscovery } from "./compose-discovery.js";
4
+ import { ComposeScanner } from "./compose-scanner.js";
5
+ import { ContainerHostMapCache } from "./container-host-map-cache.js";
6
+ import type { IHostConfigRepository } from "./host-config-repository.js";
7
+ import type { DockerOperations, IComposeProjectLister, IComposeService, IFileService, ILocalExecutorService, ISSHConnectionPool, ISSHService } from "./interfaces.js";
8
+ /**
9
+ * Service lifecycle state
10
+ */
11
+ export declare enum LifecycleState {
12
+ /** Container created but not initialized */
13
+ CREATED = "created",
14
+ /** Initialization in progress */
15
+ INITIALIZING = "initializing",
16
+ /** Fully initialized and ready */
17
+ READY = "ready",
18
+ /** Shutdown initiated */
19
+ SHUTTING_DOWN = "shutting_down",
20
+ /** Fully shut down */
21
+ SHUTDOWN = "shutdown"
22
+ }
23
+ /**
24
+ * Health check status for a DI-managed service dependency
25
+ */
26
+ export interface ServiceContainerHealth {
27
+ /** Service name */
28
+ name: string;
29
+ /** Is service healthy? */
30
+ healthy: boolean;
31
+ /** Optional error message if unhealthy */
32
+ message?: string;
33
+ /** Response time in milliseconds (if applicable) */
34
+ responseTime?: number;
35
+ }
2
36
  /**
3
37
  * Service container for dependency injection.
4
38
  * Manages service lifecycle and dependencies.
5
39
  *
6
- * Dependency chain:
40
+ * Lifecycle phases:
41
+ * 1. CREATED - Container instantiated
42
+ * 2. INITIALIZING - Services being initialized (async setup)
43
+ * 3. READY - All services ready, accepting requests
44
+ * 4. SHUTTING_DOWN - Graceful shutdown in progress
45
+ * 5. SHUTDOWN - All services stopped
46
+ *
47
+ * Dependency chain (no circular dependencies):
48
+ * - EventEmitter (no dependencies) - application-wide event bus
49
+ * - LocalExecutorService (no dependencies)
7
50
  * - SSHConnectionPool (no dependencies)
51
+ * - HostConfigRepository (no dependencies)
8
52
  * - SSHService (requires SSHConnectionPool)
9
- * - ComposeService (requires SSHService)
53
+ * - ComposeProjectLister (requires SSHService, LocalExecutorService)
54
+ * - ComposeProjectCache (no dependencies)
55
+ * - ComposeScanner (requires SSHService, LocalExecutorService)
56
+ * - ComposeDiscovery (requires ComposeProjectLister, ComposeProjectCache, ComposeScanner)
57
+ * - ComposeService (requires SSHService, LocalExecutorService, ComposeDiscovery as IComposePathResolver)
10
58
  * - FileService (requires SSHService)
11
59
  * - DockerService (no dependencies)
60
+ * - HostConfigs (loaded once at startup with 60s TTL cache)
61
+ * - ContainerHostMapCache (no dependencies)
12
62
  */
13
63
  export declare class ServiceContainer {
14
64
  private dockerService?;
@@ -16,14 +66,26 @@ export declare class ServiceContainer {
16
66
  private composeService?;
17
67
  private sshPool?;
18
68
  private fileService?;
69
+ private localExecutor?;
70
+ private composeProjectLister?;
71
+ private composeCache?;
72
+ private composeScanner?;
73
+ private composeDiscovery?;
74
+ private hostConfigRepository?;
75
+ private containerHostMapCache?;
76
+ private eventEmitter;
77
+ /** Current lifecycle state */
78
+ private lifecycleState;
79
+ /** Shutdown timeout in milliseconds */
80
+ private shutdownTimeout;
19
81
  /**
20
82
  * Get Docker service instance (lazy initialization)
21
83
  */
22
- getDockerService(): IDockerService;
84
+ getDockerService(): DockerOperations;
23
85
  /**
24
86
  * Set Docker service instance (for testing/overrides)
25
87
  */
26
- setDockerService(service: IDockerService): void;
88
+ setDockerService(service: DockerOperations): void;
27
89
  /**
28
90
  * Get SSH connection pool instance (lazy initialization)
29
91
  */
@@ -41,7 +103,22 @@ export declare class ServiceContainer {
41
103
  */
42
104
  setSSHService(service: ISSHService): void;
43
105
  /**
44
- * Get Compose service instance (lazy initialization with dependencies)
106
+ * Get Local executor service instance (lazy initialization)
107
+ */
108
+ getLocalExecutor(): ILocalExecutorService;
109
+ /**
110
+ * Set Local executor service instance (for testing/overrides)
111
+ */
112
+ setLocalExecutor(service: ILocalExecutorService): void;
113
+ /**
114
+ * Get Compose project lister instance (lazy initialization).
115
+ * Standalone service for `docker compose ls` - used by ComposeDiscovery
116
+ * to break the former circular dependency.
117
+ */
118
+ getComposeProjectLister(): IComposeProjectLister;
119
+ /**
120
+ * Get Compose service instance (lazy initialization with dependencies).
121
+ * ComposeDiscovery is injected as path resolver via constructor (no setter injection).
45
122
  */
46
123
  getComposeService(): IComposeService;
47
124
  /**
@@ -56,9 +133,120 @@ export declare class ServiceContainer {
56
133
  * Set File service instance (for testing/overrides)
57
134
  */
58
135
  setFileService(service: IFileService): void;
136
+ /**
137
+ * Get Compose project cache instance (lazy initialization)
138
+ */
139
+ getComposeCache(): ComposeProjectCache;
140
+ /**
141
+ * Get Compose scanner instance (lazy initialization with dependencies)
142
+ */
143
+ getComposeScanner(): ComposeScanner;
144
+ /**
145
+ * Get Compose discovery instance (lazy initialization with dependencies).
146
+ * Uses ComposeProjectLister (not ComposeService) to avoid circular dependency.
147
+ * Dependency chain: ProjectLister -> Discovery -> ComposeService (linear, no cycle).
148
+ */
149
+ getComposeDiscovery(): ComposeDiscovery;
150
+ /**
151
+ * Get Host config repository instance (lazy initialization)
152
+ */
153
+ getHostConfigRepository(): IHostConfigRepository;
154
+ /**
155
+ * Set Host config repository instance (for testing/overrides)
156
+ */
157
+ setHostConfigRepository(repository: IHostConfigRepository): void;
158
+ /**
159
+ * Get Container host map cache instance (lazy initialization)
160
+ */
161
+ getContainerHostMapCache(): ContainerHostMapCache;
162
+ /**
163
+ * Set Container host map cache instance (for testing/overrides)
164
+ */
165
+ setContainerHostMapCache(cache: ContainerHostMapCache): void;
166
+ /**
167
+ * Get EventEmitter instance (application-wide event bus).
168
+ * Use this to emit or subscribe to application events.
169
+ */
170
+ getEventEmitter(): EventEmitter;
171
+ /**
172
+ * Get current lifecycle state
173
+ */
174
+ getLifecycleState(): LifecycleState;
175
+ /**
176
+ * Check if container is ready to accept requests
177
+ */
178
+ isReady(): boolean;
179
+ /**
180
+ * Initialize container and perform async service setup
181
+ *
182
+ * Performs:
183
+ * 1. Preload host configurations
184
+ * 2. Start SSH connection pool health checks
185
+ * 3. Emit lifecycle events
186
+ *
187
+ * @throws {Error} If already initialized or shutting down
188
+ *
189
+ * @example
190
+ * ```typescript
191
+ * const container = new ServiceContainer();
192
+ * await container.initialize();
193
+ * // Container is now ready to use
194
+ * ```
195
+ */
196
+ initialize(): Promise<void>;
197
+ /**
198
+ * Perform health checks on all initialized services
199
+ *
200
+ * Returns health status for each service. Useful for monitoring
201
+ * and graceful degradation.
202
+ *
203
+ * @returns Array of service health statuses
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * const health = await container.healthCheck();
208
+ * const unhealthy = health.filter(h => !h.healthy);
209
+ * if (unhealthy.length > 0) {
210
+ * console.error('Unhealthy services:', unhealthy);
211
+ * }
212
+ * ```
213
+ */
214
+ healthCheck(): Promise<ServiceContainerHealth[]>;
215
+ /**
216
+ * Gracefully shut down container and all services
217
+ *
218
+ * Performs ordered shutdown:
219
+ * 1. Stop accepting new requests (set state to SHUTTING_DOWN)
220
+ * 2. Wait for in-flight operations (via timeout)
221
+ * 3. Close all connections
222
+ * 4. Clear caches
223
+ * 5. Emit shutdown complete event
224
+ *
225
+ * @param timeout - Maximum time to wait for graceful shutdown (ms)
226
+ * @throws {Error} If shutdown times out
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * // Graceful shutdown with 30s timeout
231
+ * await container.shutdown();
232
+ *
233
+ * // Custom timeout
234
+ * await container.shutdown(10000); // 10 seconds
235
+ * ```
236
+ */
237
+ shutdown(timeout?: number): Promise<void>;
238
+ /**
239
+ * Close connections and clear caches without removing event listeners.
240
+ * Used internally by shutdown() which handles listener cleanup after
241
+ * emitting the final shutdown event.
242
+ */
243
+ private performCleanup;
59
244
  /**
60
245
  * Cleanup all services and close connections.
61
246
  * Call during shutdown to ensure clean termination.
247
+ *
248
+ * @deprecated Use shutdown() for graceful shutdown with timeout.
249
+ * This method is kept for backward compatibility but performs immediate cleanup.
62
250
  */
63
251
  cleanup(): Promise<void>;
64
252
  }
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/services/container.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,YAAY,EACb,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAiB;IACvC,OAAO,CAAC,UAAU,CAAC,CAAc;IACjC,OAAO,CAAC,cAAc,CAAC,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAC,CAAqB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAe;IAEnC;;OAEG;IACH,gBAAgB,IAAI,cAAc;IAKlC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI/C;;OAEG;IACH,oBAAoB,IAAI,kBAAkB;IAK1C;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAIpD;;OAEG;IACH,aAAa,IAAI,WAAW;IAK5B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIzC;;OAEG;IACH,iBAAiB,IAAI,eAAe;IAKpC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAIjD;;OAEG;IACH,cAAc,IAAI,YAAY;IAK9B;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAI3C;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/services/container.ts"],"names":[],"mappings":"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"}